summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2024-01-12 10:17:19 +0000
committersongyanchao <[email protected]>2024-01-12 10:17:19 +0000
commit0bc92bef18678cbde138a175dd85bb4287e0760a (patch)
tree44e644899a6a0b030e66b92f403ab7c3025b354c
parentdaaf9316fb1acd9620ff7a7c592d5567130a873a (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.h2
-rw-r--r--service/src/node_classifier.c6
-rw-r--r--service/src/node_etherfabric.c4
-rw-r--r--service/src/node_tera.c81
-rw-r--r--test/CMakeLists.txt4
-rw-r--r--test/classifier_test.py3
-rw-r--r--test/etherfabric_test.py2
-rw-r--r--test/msgpack_test.py3
-rw-r--r--test/tera_test.py259
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()