diff options
| author | songyanchao <[email protected]> | 2024-01-12 10:17:19 +0000 |
|---|---|---|
| committer | songyanchao <[email protected]> | 2024-01-12 10:17:19 +0000 |
| commit | 0bc92bef18678cbde138a175dd85bb4287e0760a (patch) | |
| tree | 44e644899a6a0b030e66b92f403ab7c3025b354c | |
| parent | daaf9316fb1acd9620ff7a7c592d5567130a873a (diff) | |
✨ feat(DPISDN-33): Support non-contiguous configuration for Tera adapter id.
Support non-contiguous configuration for Tera adapter id.
| -rw-r--r-- | include/internal/adapter_define.h | 2 | ||||
| -rw-r--r-- | service/src/node_classifier.c | 6 | ||||
| -rw-r--r-- | service/src/node_etherfabric.c | 4 | ||||
| -rw-r--r-- | service/src/node_tera.c | 81 | ||||
| -rw-r--r-- | test/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | test/classifier_test.py | 3 | ||||
| -rw-r--r-- | test/etherfabric_test.py | 2 | ||||
| -rw-r--r-- | test/msgpack_test.py | 3 | ||||
| -rw-r--r-- | test/tera_test.py | 259 |
9 files changed, 335 insertions, 29 deletions
diff --git a/include/internal/adapter_define.h b/include/internal/adapter_define.h index 0275904..5e6e131 100644 --- a/include/internal/adapter_define.h +++ b/include/internal/adapter_define.h @@ -13,7 +13,7 @@ enum adapter_type unsigned int nr_max_vwires_get(); unsigned int nr_max_ef_adapters_get(); -unsigned int nr_tera_adapters_get(); +unsigned int nr_max_tera_adapters_get(); int ef_adapter_id_check(uint32_t ef_adapter_id); int vwire_id_check(uint32_t vwire_id); int tera_adapter_id_check(uint32_t tera_adapter_id); diff --git a/service/src/node_classifier.c b/service/src/node_classifier.c index 7babd18..f64c072 100644 --- a/service/src/node_classifier.c +++ b/service/src/node_classifier.c @@ -28,7 +28,7 @@ struct node_classifier_main { unsigned int nr_max_ef_adapters; unsigned int nr_max_vwires; - unsigned int nr_tera_adapters; + unsigned int nr_max_tera_adapters; unsigned int ignore_all_icmp_pkts; unsigned int ignore_all_icmp6_pkts; struct pkt_classifier_engine * pkt_classifier_engine; @@ -218,11 +218,11 @@ int classifier_init(struct sc_main * sc) /* Create a new packet classifier engine. */ classifier_main->nr_max_ef_adapters = nr_max_ef_adapters_get(); classifier_main->nr_max_vwires = nr_max_vwires_get(); - classifier_main->nr_tera_adapters = nr_tera_adapters_get(); + classifier_main->nr_max_tera_adapters = nr_max_tera_adapters_get(); uint16_t nr_domains = classifier_main->nr_max_ef_adapters; nr_domains += classifier_main->nr_max_vwires; - nr_domains += +classifier_main->nr_tera_adapters; + nr_domains += +classifier_main->nr_max_tera_adapters; /* Create pkt classifier engine */ struct pkt_classifier_engine * pkt_classifier_engine = diff --git a/service/src/node_etherfabric.c b/service/src/node_etherfabric.c index 7c84423..8ec6f19 100644 --- a/service/src/node_etherfabric.c +++ b/service/src/node_etherfabric.c @@ -326,8 +326,8 @@ void dump_ef_adapter_config(struct ef_mgr * ef_mgr) continue; } - MR_INFO("Etherfabric adapter, config id: %u,ef adapter id:%u, mode: %s, listen device: %s", i, - ef_adapter->ef_adapter_id, str_mode, ef_adapter->listen_device->symbol); + MR_INFO("Etherfabric adapter, ef adapter id:%u, mode: %s, listen device: %s", ef_adapter->ef_adapter_id, + str_mode, ef_adapter->listen_device->symbol); } } diff --git a/service/src/node_tera.c b/service/src/node_tera.c index aebd746..b32d937 100644 --- a/service/src/node_tera.c +++ b/service/src/node_tera.c @@ -66,18 +66,26 @@ static struct tera_egress_stats tera_egress_stats[RTE_MAX_LCORE]; /* Global tera main */ static struct node_tera_main * g_tera_main = NULL; -static uint16_t g_tera_adapter_max_rules = 256; +static uint16_t nr_max_tera_adapters = 256; /* Tera adapters num get */ -unsigned int nr_tera_adapters_get() +unsigned int nr_max_tera_adapters_get() { - return g_tera_main->nr_adapters; + return nr_max_tera_adapters; } /* Tera adapters id check */ int tera_adapter_id_check(uint32_t tera_adapter_id) { - if (tera_adapter_id >= g_tera_main->nr_adapters) + if (tera_adapter_id >= nr_max_tera_adapters) + return RT_ERR; + + struct tera_adapter * adapter = &g_tera_main->adapters[tera_adapter_id]; + + if (adapter->listen_device == NULL) + return RT_ERR; + + if (adapter->tera_adapter_id != tera_adapter_id) return RT_ERR; return RT_SUCCESS; @@ -106,7 +114,7 @@ int tera_config_parse(struct sc_main * sc, struct node_tera_main * tera_main) uint16_t nr_adapters = 0; char str_conf_section[MR_STRING_MAX] = {}; char str_listen_device[MR_STRING_MAX] = {}; - for (int index = 0; index < g_tera_adapter_max_rules; index++) + for (int index = 0; index < nr_max_tera_adapters; index++) { snprintf(str_conf_section, sizeof(str_conf_section), "tera_adapter:%d", index); @@ -124,6 +132,21 @@ int tera_config_parse(struct sc_main * sc, struct node_tera_main * tera_main) return RT_ERR; } + /* Get tera adapter id */ + uint32_t tera_adapter_id; + ret = MESA_load_profile_uint_nodef(sc->local_cfgfile, str_conf_section, "tera_adapter_id", &tera_adapter_id); + if (ret < 0) + { + MR_ERROR("The : %s ,No config the 'tera_adapter_id'.", str_conf_section); + return RT_ERR; + } + + if (tera_adapter_id >= nr_max_tera_adapters) + { + MR_ERROR("The : %s 'tera_adapter_id' is invalid: %u", str_conf_section, tera_adapter_id); + return RT_ERR; + } + /* Get mac flipping */ uint32_t mac_flipping; MESA_load_profile_uint_def(sc->local_cfgfile, str_conf_section, "mac_flipping", &mac_flipping, 0); @@ -148,12 +171,12 @@ int tera_config_parse(struct sc_main * sc, struct node_tera_main * tera_main) port_adapter_mapping_insert(dev_desc->port_id, ADAPTER_TYPE_TERA); /* Save the adapter */ - struct tera_adapter * adapter = &tera_main->adapters[nr_adapters]; + struct tera_adapter * adapter = &tera_main->adapters[tera_adapter_id]; adapter->vlan_int = htons((uint16_t)vlan_int); adapter->vlan_ext = htons((uint16_t)vlan_ext); adapter->mac_flipping = (uint8_t)mac_flipping; adapter->listen_device = dev_desc; - adapter->tera_adapter_id = nr_adapters; + adapter->tera_adapter_id = tera_adapter_id; nr_adapters++; } @@ -167,8 +190,14 @@ int tera_config_parse(struct sc_main * sc, struct node_tera_main * tera_main) } /* Inserter sid to forwarder table */ - for (uint16_t sid = sid_start; sid < sid_start + nr_adapters; sid++) - forwarder_table_inserter(sid, FORWARDER_TYPE_TERA); + for (int i = 0; i < nr_max_tera_adapters; i++) + { + struct tera_adapter * adapter = &tera_main->adapters[i]; + if (adapter->listen_device == NULL) + continue; + + forwarder_table_inserter(sid_start + adapter->tera_adapter_id, FORWARDER_TYPE_TERA); + } /* Save the sid and nr adapters */ tera_main->sid_start = sid_start; @@ -185,12 +214,16 @@ void tera_info_dump(struct node_tera_main * tera_main) MR_INFO("Tera adapter, total num: %u, sid num:%u, sid_start:%u, sid_end:%u", tera_main->nr_adapters, tera_main->nr_sids, tera_main->sid_start, tera_main->sid_end); - for (int index = 0; index < tera_main->nr_adapters; index++) + for (int index = 0; index < nr_max_tera_adapters; index++) { struct tera_adapter * adapter = &tera_main->adapters[index]; - MR_INFO("Tera adapter, config id: %u, listen device: %s, vlan_int: %u, vlan_ext: %u, mac_flipping:%u", index, - adapter->listen_device->symbol, ntohs(adapter->vlan_int), ntohs(adapter->vlan_ext), - adapter->mac_flipping); + if (adapter->listen_device == NULL) + continue; + + MR_INFO("Tera adapter,tera adapter id:%u, listen device: %s, vlan_int: %u, vlan_ext: %u, " + "mac_flipping:%u", + adapter->tera_adapter_id, adapter->listen_device->symbol, ntohs(adapter->vlan_int), + ntohs(adapter->vlan_ext), adapter->mac_flipping); } } @@ -206,10 +239,10 @@ int tera_init(struct sc_main * sc) /* Load the Tera max entry; default is 256 */ uint32_t max_rules; - MESA_load_profile_uint_def(sc->local_cfgfile, "tera_adapters", "max_rules", &max_rules, 256); + MESA_load_profile_uint_def(sc->local_cfgfile, "limits", "nr_max_tera_adapters", &max_rules, 256); /* According the max entry malloc tera adapter */ - g_tera_adapter_max_rules = (uint16_t)max_rules; + nr_max_tera_adapters = (uint16_t)max_rules; tera_main->adapters = ZMALLOC(sizeof(struct tera_adapter) * max_rules); MR_VERIFY_MALLOC(tera_main->adapters); @@ -224,9 +257,9 @@ int tera_init(struct sc_main * sc) tera_info_dump(tera_main); /* Link db ctx create */ - uint32_t max_entries; - MESA_load_profile_uint_def(sc->local_cfgfile, "link_dbs", "max_rules", &max_entries, 32); - tera_main->link_db_ctx = link_db_create(LINK_DB_TYPE_TERA, max_entries); + uint32_t nr_max_link_dbs; + MESA_load_profile_uint_def(sc->local_cfgfile, "limits", "nr_max_link_dbs", &nr_max_link_dbs, 32); + tera_main->link_db_ctx = link_db_create(LINK_DB_TYPE_TERA, nr_max_link_dbs); if (tera_main->link_db_ctx == NULL) return RT_ERR; @@ -245,9 +278,15 @@ static inline struct tera_adapter * tera_adapter_match(const struct node_tera_ma uint16_t pkt_vlan_id, uint8_t * out_dir, uint16_t * out_vlan_couple) { - for (int index = 0; index < tera_main->nr_adapters; index++) + for (int index = 0; index < nr_max_tera_adapters; index++) { struct tera_adapter * adapter = &tera_main->adapters[index]; + + if (adapter->listen_device == NULL) + { + continue; + } + if (adapter->listen_device->port_id != port_id) { continue; @@ -444,12 +483,14 @@ static __rte_always_inline uint16_t tera_egress_node_process(struct rte_graph * struct mrb_metadata * mrb_meta = (struct mrb_metadata *)mrbuf_cz_data(mbuf, MR_NODE_CTRLZONE_ID); uint16_t tera_adapter_id = mrb_meta->cur_sid - sid_start; - assert(tera_adapter_id < g_tera_main->nr_adapters); + assert(tera_adapter_id < nr_max_tera_adapters); if (prev_tera_adapter_id != tera_adapter_id) { struct tera_adapter * tera_adapter = &g_tera_main->adapters[tera_adapter_id]; + assert(tera_adapter->listen_device != NULL); + prev_tera_adapter_id = tera_adapter_id; prev_port_id = tera_adapter->listen_device->port_id; } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d2dacd6..58ec534 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -42,7 +42,7 @@ add_test( NAME vwire_test COMMAND /usr/local/bin/ptf --test-dir ${CMAKE_SOURCE_DIR}/test --interface 0@veth0-ptf0 --interface 1@veth1-ptf1 --interface 2@veth2-ptf2 --interface 3@veth3-ptf3 --interface 4@veth4-ptf4 --interface 5@veth5-ptf5 --interface 6@veth6-ptf6 --interface 7@veth7-ptf7 --interface 8@veth8-ptf8 --interface 9@veth9-ptf9 --interface 10@veth10-ptf10 --interface 11@veth11-ptf11 --interface 12@veth12-ptf12 --interface 13@veth13-ptf13 --interface 14@veth14-ptf14 --interface 15@veth15-ptf15 --interface 16@veth16-ptf16 --interface 17@veth17-ptf17 --interface 18@veth18-ptf18 --interface 19@veth19-ptf19 --interface 20@veth20-ptf20 --interface 21@veth21-ptf21 --interface 22@veth22-ptf22 --interface 23@veth23-ptf23 - vwire_test --test-params "source_dir='${CMAKE_SOURCE_DIR}'" + vwire_test id_non_contiguous_test --test-params "source_dir='${CMAKE_SOURCE_DIR}'" ) # Add bfd test @@ -115,5 +115,5 @@ add_test( NAME tera_test COMMAND /usr/local/bin/ptf --test-dir ${CMAKE_SOURCE_DIR}/test --interface 0@veth0-ptf0 --interface 1@veth1-ptf1 - tera_base_test tera_mpack_test tera_nf_test tera_route_ctx_test --test-params "source_dir='${CMAKE_SOURCE_DIR}'" + tera_base_test tera_mpack_test tera_nf_test tera_route_ctx_test tera_adapter_id_non_contiguous_test --test-params "source_dir='${CMAKE_SOURCE_DIR}'" ) diff --git a/test/classifier_test.py b/test/classifier_test.py index 8d9a4ac..82e525c 100644 --- a/test/classifier_test.py +++ b/test/classifier_test.py @@ -99,6 +99,7 @@ max_rules=256 # vwire [vwire:0] +vwire_id=0 interface_int=veth4 interface_ext=veth5 @@ -557,6 +558,7 @@ max_rules=256 # vwire [vwire:0] +vwire_id=0 interface_int=veth2 interface_ext=veth3 @@ -833,6 +835,7 @@ sid_end=600 max_rules=64 [tera_adapter:0] +tera_adapter_id=0 listen_device=veth0 vlan_int=110 vlan_ext=111 diff --git a/test/etherfabric_test.py b/test/etherfabric_test.py index 2cbfc89..61f2e17 100644 --- a/test/etherfabric_test.py +++ b/test/etherfabric_test.py @@ -531,7 +531,7 @@ ef_adapter_id=4 +--------------+ +----------++-----------+----------+ +------------+ | veth0-ptf0 | ---> | veth0 | | veth1 | ---> | veth1-ptf1 | +--------------+ +----------+ +----------+ +------------+ - | veth2-ptf2 | <-\- | veth2 | | veth3 | ---> | veth3-ptf3 | + | veth2-ptf2 | ---> | veth2 | | veth3 | ---> | veth3-ptf3 | +--------------+ +----------+ +----------+ +------------+ | veth4-ptf4 | ---> | veth4 | | veth5 | ---> | veth5-ptf5 | +--------------+ +----------+ +----------+ +------------+ diff --git a/test/msgpack_test.py b/test/msgpack_test.py index d46955f..a92b6ff 100644 --- a/test/msgpack_test.py +++ b/test/msgpack_test.py @@ -87,6 +87,7 @@ max_rules=256 # vwire [vwire:0] +vwire_id=0 interface_int=veth0 interface_ext=veth1 @@ -233,6 +234,7 @@ max_rules=256 # vwire [vwire:0] +vwire_id=0 interface_int=veth0 interface_ext=veth1 @@ -387,6 +389,7 @@ max_rules=256 # vwire [vwire:0] +vwire_id=0 interface_int=veth0 interface_ext=veth1 diff --git a/test/tera_test.py b/test/tera_test.py index 2a596f3..56b58f3 100644 --- a/test/tera_test.py +++ b/test/tera_test.py @@ -81,6 +81,7 @@ sid_start=1000 sid_end=2000 [tera_adapter:0] +tera_adapter_id=0 listen_device=veth0 vlan_int=110 vlan_ext=111 @@ -192,6 +193,7 @@ sid_start=1000 sid_end=2000 [tera_adapter:0] +tera_adapter_id=0 listen_device=veth1 vlan_int=110 vlan_ext=111 @@ -308,96 +310,112 @@ sid_start=1000 sid_end=2000 [tera_adapter:0] +tera_adapter_id=0 listen_device=veth0 vlan_int=110 vlan_ext=111 mac_flipping=1 [tera_adapter:1] +tera_adapter_id=1 listen_device=veth0 vlan_int=112 vlan_ext=113 mac_flipping=1 [tera_adapter:2] +tera_adapter_id=2 listen_device=veth0 vlan_int=114 vlan_ext=115 mac_flipping=1 [tera_adapter:3] +tera_adapter_id=3 listen_device=veth0 vlan_int=116 vlan_ext=117 mac_flipping=1 [tera_adapter:4] +tera_adapter_id=4 listen_device=veth0 vlan_int=118 vlan_ext=119 mac_flipping=1 [tera_adapter:5] +tera_adapter_id=5 listen_device=veth0 vlan_int=120 vlan_ext=121 mac_flipping=1 [tera_adapter:6] +tera_adapter_id=6 listen_device=veth0 vlan_int=122 vlan_ext=123 mac_flipping=1 [tera_adapter:7] +tera_adapter_id=7 listen_device=veth0 vlan_int=124 vlan_ext=125 mac_flipping=1 [tera_adapter:8] +tera_adapter_id=8 listen_device=veth0 vlan_int=126 vlan_ext=127 mac_flipping=1 [tera_adapter:9] +tera_adapter_id=9 listen_device=veth0 vlan_int=128 vlan_ext=129 mac_flipping=1 [tera_adapter:10] +tera_adapter_id=10 listen_device=veth0 vlan_int=130 vlan_ext=131 mac_flipping=1 [tera_adapter:11] +tera_adapter_id=11 listen_device=veth0 vlan_int=132 vlan_ext=133 mac_flipping=1 [tera_adapter:12] +tera_adapter_id=12 listen_device=veth0 vlan_int=134 vlan_ext=135 mac_flipping=1 [tera_adapter:13] +tera_adapter_id=13 listen_device=veth0 vlan_int=136 vlan_ext=137 mac_flipping=1 [tera_adapter:14] +tera_adapter_id=14 listen_device=veth0 vlan_int=138 vlan_ext=139 mac_flipping=1 [tera_adapter:15] +tera_adapter_id=15 listen_device=veth0 vlan_int=140 vlan_ext=141 @@ -637,96 +655,112 @@ sid_start=1000 sid_end=2000 [tera_adapter:0] +tera_adapter_id=0 listen_device=veth0 vlan_int=110 vlan_ext=111 mac_flipping=1 [tera_adapter:1] +tera_adapter_id=1 listen_device=veth0 vlan_int=112 vlan_ext=113 mac_flipping=1 [tera_adapter:2] +tera_adapter_id=2 listen_device=veth0 vlan_int=114 vlan_ext=115 mac_flipping=1 [tera_adapter:3] +tera_adapter_id=3 listen_device=veth0 vlan_int=116 vlan_ext=117 mac_flipping=1 [tera_adapter:4] +tera_adapter_id=4 listen_device=veth0 vlan_int=118 vlan_ext=119 mac_flipping=1 [tera_adapter:5] +tera_adapter_id=5 listen_device=veth0 vlan_int=120 vlan_ext=121 mac_flipping=1 [tera_adapter:6] +tera_adapter_id=6 listen_device=veth0 vlan_int=122 vlan_ext=123 mac_flipping=1 [tera_adapter:7] +tera_adapter_id=7 listen_device=veth0 vlan_int=124 vlan_ext=125 mac_flipping=1 [tera_adapter:8] +tera_adapter_id=8 listen_device=veth0 vlan_int=126 vlan_ext=127 mac_flipping=1 [tera_adapter:9] +tera_adapter_id=9 listen_device=veth0 vlan_int=128 vlan_ext=129 mac_flipping=1 [tera_adapter:10] +tera_adapter_id=10 listen_device=veth0 vlan_int=130 vlan_ext=131 mac_flipping=1 [tera_adapter:11] +tera_adapter_id=11 listen_device=veth0 vlan_int=132 vlan_ext=133 mac_flipping=1 [tera_adapter:12] +tera_adapter_id=12 listen_device=veth0 vlan_int=134 vlan_ext=135 mac_flipping=1 [tera_adapter:13] +tera_adapter_id=13 listen_device=veth0 vlan_int=136 vlan_ext=137 mac_flipping=1 [tera_adapter:14] +tera_adapter_id=14 listen_device=veth0 vlan_int=138 vlan_ext=139 mac_flipping=1 [tera_adapter:15] +tera_adapter_id=15 listen_device=veth0 vlan_int=140 vlan_ext=141 @@ -1073,96 +1107,112 @@ sid_start=1000 sid_end=2000 [tera_adapter:0] +tera_adapter_id=0 listen_device=veth0 vlan_int=110 vlan_ext=111 mac_flipping=1 [tera_adapter:1] +tera_adapter_id=1 listen_device=veth0 vlan_int=112 vlan_ext=113 mac_flipping=1 [tera_adapter:2] +tera_adapter_id=2 listen_device=veth0 vlan_int=114 vlan_ext=115 mac_flipping=1 [tera_adapter:3] +tera_adapter_id=3 listen_device=veth0 vlan_int=116 vlan_ext=117 mac_flipping=1 [tera_adapter:4] +tera_adapter_id=4 listen_device=veth0 vlan_int=118 vlan_ext=119 mac_flipping=1 [tera_adapter:5] +tera_adapter_id=5 listen_device=veth0 vlan_int=120 vlan_ext=121 mac_flipping=1 [tera_adapter:6] +tera_adapter_id=6 listen_device=veth0 vlan_int=122 vlan_ext=123 mac_flipping=1 [tera_adapter:7] +tera_adapter_id=7 listen_device=veth0 vlan_int=124 vlan_ext=125 mac_flipping=1 [tera_adapter:8] +tera_adapter_id=8 listen_device=veth0 vlan_int=126 vlan_ext=127 mac_flipping=1 [tera_adapter:9] +tera_adapter_id=9 listen_device=veth0 vlan_int=128 vlan_ext=129 mac_flipping=1 [tera_adapter:10] +tera_adapter_id=10 listen_device=veth0 vlan_int=130 vlan_ext=131 mac_flipping=1 [tera_adapter:11] +tera_adapter_id=11 listen_device=veth0 vlan_int=132 vlan_ext=133 mac_flipping=1 [tera_adapter:12] +tera_adapter_id=12 listen_device=veth0 vlan_int=134 vlan_ext=135 mac_flipping=1 [tera_adapter:13] +tera_adapter_id=13 listen_device=veth0 vlan_int=136 vlan_ext=137 mac_flipping=1 [tera_adapter:14] +tera_adapter_id=14 listen_device=veth0 vlan_int=138 vlan_ext=139 mac_flipping=1 [tera_adapter:15] +tera_adapter_id=15 listen_device=veth0 vlan_int=140 vlan_ext=141 @@ -1402,96 +1452,112 @@ sid_start=1000 sid_end=2000 [tera_adapter:0] +tera_adapter_id=0 listen_device=veth0 vlan_int=110 vlan_ext=111 mac_flipping=1 [tera_adapter:1] +tera_adapter_id=1 listen_device=veth0 vlan_int=112 vlan_ext=113 mac_flipping=1 [tera_adapter:2] +tera_adapter_id=2 listen_device=veth0 vlan_int=114 vlan_ext=115 mac_flipping=1 [tera_adapter:3] +tera_adapter_id=3 listen_device=veth0 vlan_int=116 vlan_ext=117 mac_flipping=1 [tera_adapter:4] +tera_adapter_id=4 listen_device=veth0 vlan_int=118 vlan_ext=119 mac_flipping=1 [tera_adapter:5] +tera_adapter_id=5 listen_device=veth0 vlan_int=120 vlan_ext=121 mac_flipping=1 [tera_adapter:6] +tera_adapter_id=6 listen_device=veth0 vlan_int=122 vlan_ext=123 mac_flipping=1 [tera_adapter:7] +tera_adapter_id=7 listen_device=veth0 vlan_int=124 vlan_ext=125 mac_flipping=1 [tera_adapter:8] +tera_adapter_id=8 listen_device=veth0 vlan_int=126 vlan_ext=127 mac_flipping=1 [tera_adapter:9] +tera_adapter_id=9 listen_device=veth0 vlan_int=128 vlan_ext=129 mac_flipping=1 [tera_adapter:10] +tera_adapter_id=10 listen_device=veth0 vlan_int=130 vlan_ext=131 mac_flipping=1 [tera_adapter:11] +tera_adapter_id=11 listen_device=veth0 vlan_int=132 vlan_ext=133 mac_flipping=1 [tera_adapter:12] +tera_adapter_id=12 listen_device=veth0 vlan_int=134 vlan_ext=135 mac_flipping=1 [tera_adapter:13] +tera_adapter_id=13 listen_device=veth0 vlan_int=136 vlan_ext=137 mac_flipping=1 [tera_adapter:14] +tera_adapter_id=14 listen_device=veth0 vlan_int=138 vlan_ext=139 mac_flipping=1 [tera_adapter:15] +tera_adapter_id=15 listen_device=veth0 vlan_int=140 vlan_ext=141 @@ -1637,3 +1703,196 @@ class IPv6TestForRouteCtxEtoI(BaseTest): finally: mrzcpd.stop() + + +start_conf_with_non_contiguous_test = """ +[device] +device = veth0,veth1,veth2,veth3 +sz_tunnel = 8192 +sz_buffer = 0 + +[device:veth0] +promisc = 0 +mtu = 1500 +driver = 2 +role = 3 + +[device:veth1] +promisc = 1 +mtu = 1500 +driver=2 +role=4 + +[device:veth2] +in_addr=10.254.60.101 +in_mask=255.255.255.0 +promisc = 1 +mtu = 1500 +driver=2 +role=4 + +[device:veth3] +promisc = 1 +mtu = 1500 +driver=2 +role=4 + +[service] +iocore = 1 +distmode = 2 +hashmode = 0 + +[limits] +nr_max_ef_adapters=32 +nr_max_vwires=32 +nr_max_tera_adapters=32 +nr_max_link_dbs=32 + +[eal] +virtaddr = 0x600000000000 +loglevel = 7 +nohuge = 1 +mem = 65535 + +[keepalive] +check_spinlock = 1 + +[ctrlzone] +ctrlzone0 = tunnat, 64 +ctrlzone1 = vsys, 64 + +[pool] +create_mode = 3 +sz_direct_pktmbuf = 4096 +sz_indirect_pktmbuf = 4096 +sz_cache = 256 +sz_data = 3000 + +[ctrlmsg] +listen_addr = 0.0.0.0 +listen_port = 46789 + +[rpc] +addr = 127.0.0.1 +port = 56789 + +# sid +[ef_adapters] +sid_start=100 +sid_end=200 +max_rules=256 + +[vwires] +sid_start=300 +sid_end=400 +max_rules=256 + +[service_lb] +sid_start=1000 +sid_end=2000 + +# load balance +[load_balance:0] +mode=balance +devices=veth1,normal + +[load_balance:1] +mode=balance +devices=veth2,normal + +[load_balance:2] +mode=balance +devices=veth3,normal + +# adapter +[tera_adapter:0] +tera_adapter_id=0 +listen_device=veth0 +vlan_int=110 +vlan_ext=111 +mac_flipping=1 + +[tera_adapter:1] +tera_adapter_id=2 +listen_device=veth0 +vlan_int=112 +vlan_ext=113 +mac_flipping=1 + +[tera_adapter:2] +tera_adapter_id=4 +listen_device=veth0 +vlan_int=114 +vlan_ext=115 +mac_flipping=1 +""" + +dynamic_conf_with_non_contiguous_test = """ +[classifier_rule:0] +rule_id=1 +ruleset_type=classifier +action=nf_steering +priority=1 +category=0 +sid=1000 +tera_adapter_id=0 + +[classifier_rule:1] +rule_id=2 +ruleset_type=classifier +action=nf_steering +priority=1 +category=0 +sid=1001 +tera_adapter_id=2 + +[classifier_rule:2] +rule_id=2 +ruleset_type=classifier +action=nf_steering +priority=1 +category=0 +sid=1002 +tera_adapter_id=4 +""" + +""" + +--------------+ +----------++-----------+----------+ + | PTF | | Mrzcpd | + +--------------+ +----------++-----------+----------+ +------------+ + | | | | | veth1 | ---> | veth1-ptf1 | + | | | | +----------+ +------------+ + | veth0-ptf0 | ---> | veth0 | | veth2 | ---> | veth2-ptf2 | + | | | | +----------+ +------------+ + | | ---> | | | veth3 | ---> | veth3-ptf3 | + +--------------+ +----------+ +----------+ +------------+ +""" + +@group("tera_adapter_id_non_contiguous_test") +class TeraAdapterIdNonContiguousTest(BaseTest): + def setUp(self): + self.dataplane = ptf.dataplane_instance + + def __init__(self): + BaseTest.__init__(self) + def runTest(self): + try: + # Init & Start mrzcpd + mrzcpd = Mrzcpd(start_conf_with_non_contiguous_test,dynamic_conf_with_non_contiguous_test) + mrzcpd.start() + + send_packets=[] + for i in range(0,3): + send_packets.append(simple_vlan_udp_packet(eth_dst="02:5A:B0:BE:49:51",eth_src="02:5A:B0:BE:49:52",vlan_vid=110+i*2,udp_payload="tera test")) + + exp_packets=[] + for i in range(0,3): + exp_packets.append(simple_vlan_udp_packet(eth_dst="02:5A:B0:BE:49:52",eth_src="02:5A:B0:BE:49:51",vlan_vid=111+i*2,udp_payload="tera test")) + + for i in range(0,3): + print ("send packet %d" % i) + send_packet(self, 0, send_packets[i]) + verify_packets(self, exp_packets[i], [1+i]) + + finally: + mrzcpd.stop() |
