summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2024-01-12 09:18:53 +0000
committersongyanchao <[email protected]>2024-01-12 09:18:53 +0000
commitdaaf9316fb1acd9620ff7a7c592d5567130a873a (patch)
tree7876ec6e5aa7f1ceb2f77511ad0658456ba03707
parentd61f6b7b9c1fd4955074c9a49ecb07a5adb6803f (diff)
✨ feat(DPISDN-33): Support non-contiguous configuration for Ef adapter id.
Support non-contiguous configuration for Ef adapter id.
-rw-r--r--include/internal/adapter_define.h2
-rw-r--r--service/src/node_classifier.c14
-rw-r--r--service/src/node_etherfabric.c100
-rw-r--r--test/CMakeLists.txt2
-rw-r--r--test/bfd_test.py6
-rw-r--r--test/bridge_test.py6
-rw-r--r--test/classifier_test.py18
-rw-r--r--test/endpoint_dev_test.py6
-rw-r--r--test/etherfabric_test.py234
-rw-r--r--test/health_check_test.py6
-rw-r--r--test/load_balance_test.py6
-rw-r--r--test/msgpack_test.py18
-rw-r--r--test/tera_test.py36
-rw-r--r--test/vwire_test.py12
14 files changed, 423 insertions, 43 deletions
diff --git a/include/internal/adapter_define.h b/include/internal/adapter_define.h
index b0e1b8d..0275904 100644
--- a/include/internal/adapter_define.h
+++ b/include/internal/adapter_define.h
@@ -11,8 +11,8 @@ enum adapter_type
ADAPTER_TYPE_NONE
};
-unsigned int nr_ef_adapters_get();
unsigned int nr_max_vwires_get();
+unsigned int nr_max_ef_adapters_get();
unsigned int nr_tera_adapters_get();
int ef_adapter_id_check(uint32_t ef_adapter_id);
int vwire_id_check(uint32_t vwire_id);
diff --git a/service/src/node_classifier.c b/service/src/node_classifier.c
index 052c8d7..7babd18 100644
--- a/service/src/node_classifier.c
+++ b/service/src/node_classifier.c
@@ -26,7 +26,7 @@ struct classifier_stats
struct node_classifier_main
{
- unsigned int nr_ef_adapters;
+ unsigned int nr_max_ef_adapters;
unsigned int nr_max_vwires;
unsigned int nr_tera_adapters;
unsigned int ignore_all_icmp_pkts;
@@ -62,8 +62,8 @@ static inline int classifier_rules_verify(const struct rule_list_parsed rule_lis
{
if (vwire_id_check(rule_field_parser->adapter.id) == RT_ERR)
{
- MR_ERROR("The rule ID '%u' with configured vwire adapter ID '%u' is invalid.",
- rule_field_parser->rule_id, rule_field_parser->adapter.id);
+ MR_ERROR("The rule ID '%u' with configured vwire ID '%u' is invalid.", rule_field_parser->rule_id,
+ rule_field_parser->adapter.id);
return RT_ERR;
}
}
@@ -102,10 +102,10 @@ static inline uint16_t domain_field_generator_for_classifier(enum adapter_type t
domain_field = adapter_id;
break;
case ADAPTER_TYPE_VWIRE:
- domain_field = classifier_main->nr_ef_adapters + adapter_id;
+ domain_field = classifier_main->nr_max_ef_adapters + adapter_id;
break;
case ADAPTER_TYPE_TERA:
- domain_field = classifier_main->nr_ef_adapters + classifier_main->nr_max_vwires + adapter_id;
+ domain_field = classifier_main->nr_max_ef_adapters + classifier_main->nr_max_vwires + adapter_id;
break;
default:
domain_field = UINT16_MAX;
@@ -216,11 +216,11 @@ int classifier_init(struct sc_main * sc)
&classifier_main->ignore_all_icmp6_pkts, 0);
/* Create a new packet classifier engine. */
- classifier_main->nr_ef_adapters = nr_ef_adapters_get();
+ 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();
- uint16_t nr_domains = classifier_main->nr_ef_adapters;
+ uint16_t nr_domains = classifier_main->nr_max_ef_adapters;
nr_domains += classifier_main->nr_max_vwires;
nr_domains += +classifier_main->nr_tera_adapters;
diff --git a/service/src/node_etherfabric.c b/service/src/node_etherfabric.c
index 35f9087..7c84423 100644
--- a/service/src/node_etherfabric.c
+++ b/service/src/node_etherfabric.c
@@ -1,21 +1,15 @@
#include <cJSON.h>
-#include <netinet/in.h>
#include <rte_graph.h>
#include <rte_graph_worker.h>
#include <rte_hash.h>
#include <rte_hash_crc.h>
-#include <sys/socket.h>
+#include <rte_malloc.h>
#include <MESA_prof_load.h>
-#include <common.h>
-#include <ldbc.h>
#include <link_db.h>
#include <mrb_define.h>
#include <port_adapter_mapping.h>
-#include <sc_common.h>
-#include <sc_node.h>
#include <sc_node_common.h>
-#include <sc_vdev.h>
/* Etherfabric ingress next node */
enum
@@ -45,6 +39,7 @@ enum ef_adapter_mode
struct ef_adapter
{
enum ef_adapter_mode mode;
+ uint32_t ef_adapter_id;
struct mr_dev_desc * listen_device;
};
@@ -111,23 +106,31 @@ struct node_ef_main
/* Global etherfabric main and etherfabric max entry */
static struct node_ef_main * g_ef_main = NULL;
-static unsigned int g_ef_adapter_max_rules = 256;
+static unsigned int nr_max_ef_adapters = 256;
/* Set the pkt offset */
const static int ef_encap_len = sizeof(struct rte_ether_hdr) + sizeof(struct rte_ipv4_hdr) +
sizeof(struct rte_udp_hdr) + sizeof(struct g_vxlan_hdr);
/* Etherfabric adapters num get */
-unsigned int nr_ef_adapters_get()
+unsigned int nr_max_ef_adapters_get()
{
- return g_ef_main->ef_mgr.nr_adapters;
+ return nr_max_ef_adapters;
}
/* Etherfabric adapter id check */
int ef_adapter_id_check(uint32_t ef_adapter_id)
{
/* Etherfabric rule id is continuous */
- if (ef_adapter_id >= g_ef_main->ef_mgr.nr_adapters)
+ if (ef_adapter_id >= nr_max_ef_adapters)
+ return RT_ERR;
+
+ struct ef_adapter * ef_adapter = &g_ef_main->ef_mgr.ef_adapters[ef_adapter_id];
+
+ if (ef_adapter->mode == MODE_INVALID)
+ return RT_ERR;
+
+ if (ef_adapter->ef_adapter_id != ef_adapter_id)
return RT_ERR;
return RT_SUCCESS;
@@ -195,7 +198,7 @@ int parser_ef_adapter_config(struct sc_main * sc, struct ef_mgr * ef_mgr)
/* Parsing all config */
int ret;
uint16_t nr_adapters = 0;
- for (int index = 0; index < g_ef_adapter_max_rules; index++)
+ for (int index = 0; index < nr_max_ef_adapters; index++)
{
char str_conf_section[MR_STRING_MAX] = {};
snprintf(str_conf_section, sizeof(str_conf_section), "ef_adapter:%d", index);
@@ -221,6 +224,22 @@ int parser_ef_adapter_config(struct sc_main * sc, struct ef_mgr * ef_mgr)
return RT_ERR;
}
+ /* Get etherfabric adapter id */
+ uint32_t ef_adapter_id = 0;
+ ret = MESA_load_profile_uint_nodef(sc->local_cfgfile, str_conf_section, "ef_adapter_id", &ef_adapter_id);
+
+ if (ret < 0)
+ {
+ MR_ERROR("The : %s ,No config the 'ef_adapter_id'.", str_conf_section);
+ return RT_ERR;
+ }
+
+ if (ef_adapter_id >= nr_max_ef_adapters)
+ {
+ MR_ERROR("The : %s 'ef_adapter_id' is invalid: %u", str_conf_section, ef_adapter_id);
+ return RT_ERR;
+ }
+
/* Parsing listen device */
char str_listen_device[MR_STRING_MAX] = {};
ret = MESA_load_profile_string_nodef(sc->local_cfgfile, str_conf_section, "listen_device", str_listen_device,
@@ -249,8 +268,9 @@ int parser_ef_adapter_config(struct sc_main * sc, struct ef_mgr * ef_mgr)
port_adapter_mapping_insert(dev_desc->port_id, ADAPTER_TYPE_EF);
/* Save The Listen Device Port Index */
- struct ef_adapter * ef_adapter = &ef_mgr->ef_adapters[nr_adapters];
+ struct ef_adapter * ef_adapter = &ef_mgr->ef_adapters[ef_adapter_id];
ef_adapter->mode = mode;
+ ef_adapter->ef_adapter_id = ef_adapter_id;
ef_adapter->listen_device = dev_desc;
nr_adapters++;
}
@@ -264,8 +284,14 @@ int parser_ef_adapter_config(struct sc_main * sc, struct ef_mgr * ef_mgr)
}
/* Inserter sid to forwarder table */
- for (uint16_t sid = sid_start; sid < sid_start + nr_adapters; sid++)
- forwarder_table_inserter(sid, FORWARDER_TYPE_EF);
+ for (int i = 0; i < nr_max_ef_adapters; i++)
+ {
+ struct ef_adapter * ef_adapter = &ef_mgr->ef_adapters[i];
+ if (ef_adapter->mode == MODE_INVALID)
+ continue;
+
+ forwarder_table_inserter(sid_start + ef_adapter->ef_adapter_id, FORWARDER_TYPE_EF);
+ }
/* Save the etherfabric adapter config num */
ef_mgr->nr_adapters = nr_adapters;
@@ -284,7 +310,7 @@ void dump_ef_adapter_config(struct ef_mgr * ef_mgr)
MR_INFO("Etherfabric adapter, total num: %u, sid num: %u, sid start: %u, sid end:%u", ef_mgr->nr_adapters,
ef_mgr->nr_sids, ef_mgr->sid_start, ef_mgr->sid_end);
- for (int i = 0; i < ef_mgr->nr_adapters; i++)
+ for (int i = 0; i < nr_max_ef_adapters; i++)
{
char str_mode[MR_STRING_MAX] = {};
struct ef_adapter * ef_adapter = &ef_mgr->ef_adapters[i];
@@ -297,11 +323,11 @@ void dump_ef_adapter_config(struct ef_mgr * ef_mgr)
sprintf(str_mode, "tap");
break;
default:
- break;
+ continue;
}
- MR_INFO("Etherfabric adapter, config id: %u, mode: %s, listen device: %s", i, str_mode,
- ef_adapter->listen_device->symbol);
+ 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);
}
}
@@ -317,11 +343,11 @@ int ef_init(struct sc_main * sc)
sc->node_ef_main = ef_main;
/* Get ef max entry,default is 256 */
- MESA_load_profile_uint_def(sc->local_cfgfile, "ef_adapters", "max_rules", &g_ef_adapter_max_rules, 256);
+ MESA_load_profile_uint_def(sc->local_cfgfile, "limits", "nr_max_ef_adapters", &nr_max_ef_adapters, 256);
/* Malloc etherfabric adapter */
struct ef_mgr * ef_mgr = &ef_main->ef_mgr;
- ef_mgr->ef_adapters = ZMALLOC(sizeof(struct ef_adapter) * g_ef_adapter_max_rules);
+ ef_mgr->ef_adapters = ZMALLOC(sizeof(struct ef_adapter) * nr_max_ef_adapters);
MR_VERIFY_MALLOC(ef_mgr->ef_adapters);
/* Parsing the etherfabric adapter config */
@@ -333,7 +359,7 @@ int ef_init(struct sc_main * sc)
/* Link db ctx create */
uint32_t max_entries;
- MESA_load_profile_uint_def(sc->local_cfgfile, "link_dbs", "max_rules", &max_entries, 32);
+ MESA_load_profile_uint_def(sc->local_cfgfile, "limits", "nr_max_link_dbs", &max_entries, 32);
ef_mgr->link_db_ctx = link_db_create(LINK_DB_TYPE_EF, max_entries);
if (ef_mgr->link_db_ctx == NULL)
return RT_ERR;
@@ -354,14 +380,18 @@ int ef_init(struct sc_main * sc)
/************************************** Etherfabric Node **************************************/
/* Etherfabric adapter lookup */
-int ef_adapter_lookup(struct ef_mgr * mgr, uint32_t dst_addr, uint16_t * out_adapter_id)
+int ef_adapter_lookup(struct ef_mgr * mgr, uint32_t dst_addr, uint16_t * out_ef_adapter_id)
{
- for (uint16_t index = 0; index < mgr->nr_adapters; index++)
+ for (uint16_t index = 0; index < nr_max_ef_adapters; index++)
{
- struct ef_adapter * adapter_item = &mgr->ef_adapters[index];
- if (dst_addr == adapter_item->listen_device->in_addr.s_addr)
+ struct ef_adapter * ef_adapter = &mgr->ef_adapters[index];
+
+ if (ef_adapter->mode == MODE_INVALID)
+ continue;
+
+ if (dst_addr == ef_adapter->listen_device->in_addr.s_addr)
{
- *out_adapter_id = index;
+ *out_ef_adapter_id = ef_adapter->ef_adapter_id;
return RT_SUCCESS;
}
}
@@ -455,8 +485,8 @@ static __rte_always_inline uint16_t ef_ingress_node_process(struct rte_graph * g
assert(outer_g_vxlan_hdr != NULL);
/* Etherfabric adapter lookup */
- uint16_t adapter_id = 0;
- int ret = ef_adapter_lookup(ef_mgr, outer_ipv4_hdr->dst_addr, &adapter_id);
+ uint16_t ef_adapter_id = 0;
+ int ret = ef_adapter_lookup(ef_mgr, outer_ipv4_hdr->dst_addr, &ef_adapter_id);
if (unlikely(ret == RT_ERR))
{
stat.drop_for_adapter_not_exist++;
@@ -484,14 +514,14 @@ static __rte_always_inline uint16_t ef_ingress_node_process(struct rte_graph * g
/* Fill ef_peer index and dir */
struct mrb_metadata * mrb_meta = mrbuf_cz_data(mbuf, MR_NODE_CTRLZONE_ID);
mrb_meta->adapter_type = ADAPTER_TYPE_EF;
- mrb_meta->adapter_id = adapter_id;
+ mrb_meta->adapter_id = ef_adapter_id;
mrb_meta->ef_link_id = outer_g_vxlan_hdr->link_id;
mrb_meta->traffic_link_id = result;
mrb_meta->dir = outer_g_vxlan_hdr->dir;
mrb_meta->ef_peer_index = (uint16_t)ef_peer_index;
/* Insert sid*/
- uint16_t sids[1] = {ef_mgr->sid_start + adapter_id};
+ uint16_t sids[1] = {ef_mgr->sid_start + ef_adapter_id};
if (unlikely(sid_list_prepend(&mrb_meta->sid_list, sids, 1) == RT_ERR))
{
stat.drop_for_append_sid_err++;
@@ -656,9 +686,11 @@ static __rte_always_inline uint16_t ef_egress_node_process(struct rte_graph * gr
/* Get etherfabric adapter item */
struct mrb_metadata * mrb_meta = mrbuf_cz_data(mbuf, MR_NODE_CTRLZONE_ID);
- uint16_t ef_adapter_index = mrb_meta->cur_sid - sid_start;
- assert(ef_adapter_index < ef_mgr->nr_adapters);
- struct ef_adapter * ef_adapter = &ef_adapters[ef_adapter_index];
+ uint16_t ef_adapter_id = mrb_meta->cur_sid - sid_start;
+
+ assert(ef_adapter_id < nr_max_ef_adapters);
+
+ struct ef_adapter * ef_adapter = &ef_adapters[ef_adapter_id];
switch (ef_adapter->mode)
{
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index fa518bb..d2dacd6 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -75,7 +75,7 @@ add_test(
NAME etherfabric_test
COMMAND /usr/local/bin/ptf --test-dir ${CMAKE_SOURCE_DIR}/test
--interface 0@veth0-ptf0
- virtual_wire_mode tap_mode ef_route_ctx_test --test-params "source_dir='${CMAKE_SOURCE_DIR}'"
+ virtual_wire_mode tap_mode ef_route_ctx_test ef_adapter_id_non_contiguous_test --test-params "source_dir='${CMAKE_SOURCE_DIR}'"
)
# Add health_check test
diff --git a/test/bfd_test.py b/test/bfd_test.py
index 049a7f9..06ec56f 100644
--- a/test/bfd_test.py
+++ b/test/bfd_test.py
@@ -26,6 +26,12 @@ 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
diff --git a/test/bridge_test.py b/test/bridge_test.py
index fca9d42..bf1dfff 100644
--- a/test/bridge_test.py
+++ b/test/bridge_test.py
@@ -45,6 +45,12 @@ 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
diff --git a/test/classifier_test.py b/test/classifier_test.py
index 686a2a7..8d9a4ac 100644
--- a/test/classifier_test.py
+++ b/test/classifier_test.py
@@ -52,6 +52,12 @@ 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
@@ -504,6 +510,12 @@ 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
@@ -770,6 +782,12 @@ 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
diff --git a/test/endpoint_dev_test.py b/test/endpoint_dev_test.py
index e9fcce5..fa46b44 100644
--- a/test/endpoint_dev_test.py
+++ b/test/endpoint_dev_test.py
@@ -25,6 +25,12 @@ 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
diff --git a/test/etherfabric_test.py b/test/etherfabric_test.py
index a974426..2cbfc89 100644
--- a/test/etherfabric_test.py
+++ b/test/etherfabric_test.py
@@ -25,6 +25,12 @@ 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
@@ -74,6 +80,7 @@ sid_end=200
max_rules=256
[ef_adapter:0]
+ef_adapter_id=0
mode=virtual-wire
listen_device=veth0
"""
@@ -123,6 +130,12 @@ 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
@@ -172,6 +185,7 @@ sid_end=200
max_rules=256
[ef_adapter:0]
+ef_adapter_id=0
mode=tap
listen_device=veth0
"""
@@ -242,6 +256,12 @@ 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
@@ -291,6 +311,7 @@ sid_start=1000
sid_end=2000
[ef_adapter:0]
+ef_adapter_id=0
mode=virtual-wire
listen_device=veth0
@@ -342,3 +363,216 @@ class IPv4TestForRouteCtx(BaseTest):
verify_packets(self, verify_pkt, [0])
finally:
mrzcpd.stop()
+
+start_conf_with_non_contiguous_test = """
+[device]
+device = veth0,veth1,veth2,veth3,veth4,veth5
+sz_tunnel = 8192
+sz_buffer = 0
+
+[device:veth0]
+in_addr=10.254.60.100
+in_mask=255.255.255.0
+promisc = 1
+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 = 3
+
+[device:veth3]
+promisc = 1
+mtu = 1500
+driver=2
+role=4
+
+[device:veth4]
+in_addr=10.254.60.102
+in_mask=255.255.255.0
+promisc = 1
+mtu = 1500
+driver = 2
+role = 3
+
+[device:veth5]
+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=veth3,normal
+
+[load_balance:2]
+mode=balance
+devices=veth5,normal
+
+# adapter
+[ef_adapter:0]
+ef_adapter_id=0
+mode=virtual-wire
+listen_device=veth0
+
+[ef_adapter:1]
+ef_adapter_id=2
+mode=virtual-wire
+listen_device=veth2
+
+[ef_adapter:2]
+ef_adapter_id=4
+mode=virtual-wire
+listen_device=veth4
+"""
+
+dynamic_conf_with_non_contiguous_test = """
+[classifier_rule:0]
+rule_id=1
+ruleset_type=classifier
+action=nf_steering
+priority=1
+category=0
+sid=1000
+ef_adapter_id=0
+
+[classifier_rule:1]
+rule_id=2
+ruleset_type=classifier
+action=nf_steering
+priority=1
+category=0
+sid=1001
+ef_adapter_id=2
+
+[classifier_rule:2]
+rule_id=2
+ruleset_type=classifier
+action=nf_steering
+priority=1
+category=0
+sid=1002
+ef_adapter_id=4
+"""
+
+"""
+ +--------------+ +----------++-----------+----------+
+ | PTF | | Mrzcpd |
+ +--------------+ +----------++-----------+----------+ +------------+
+ | veth0-ptf0 | ---> | veth0 | | veth1 | ---> | veth1-ptf1 |
+ +--------------+ +----------+ +----------+ +------------+
+ | veth2-ptf2 | <-\- | veth2 | | veth3 | ---> | veth3-ptf3 |
+ +--------------+ +----------+ +----------+ +------------+
+ | veth4-ptf4 | ---> | veth4 | | veth5 | ---> | veth5-ptf5 |
+ +--------------+ +----------+ +----------+ +------------+
+"""
+@group("ef_adapter_id_non_contiguous_test")
+class EfAdapterIdNonContiguousTest(BaseTest):
+ # Base test init
+ def __init__(self):
+ BaseTest.__init__(self)
+
+ # Dataplane set up
+ def setUp(self):
+ self.dataplane = ptf.dataplane_instance
+
+ # Run test
+ def runTest(self):
+ try:
+ # Init & Start mrzcpd
+ mrzcpd = Mrzcpd(start_conf_with_non_contiguous_test,dynamic_conf_with_non_contiguous_test)
+ mrzcpd.start()
+
+ send_pkts = []
+ verify_pkts = []
+
+ # Create packets
+ for i in range(0,3):
+ tcp_pkt = simple_tcp_packet()
+ verify_pkts.append(tcp_pkt)
+
+ send_pkts.append(simple_vxlan_packet(eth_src='0a:0a:0a:0a:01:28',
+ eth_dst='10:70:fd:03:c0:bd',
+ ip_src='10.254.50.' + str(100 + i), ip_dst='10.254.60.' + str(100 + i),
+ vxlan_vni=32,inner_frame=tcp_pkt))
+
+
+ # Traverse all ports
+ for i in range(0, 3):
+ # Send pkt for the port
+ send_packet(self, i * 2 , send_pkts[i])
+ # Verify pkt for specified port
+ verify_packets(self, verify_pkts[i], [1 + i*2])
+
+ finally:
+ mrzcpd.stop()
diff --git a/test/health_check_test.py b/test/health_check_test.py
index c32f83a..71a48d9 100644
--- a/test/health_check_test.py
+++ b/test/health_check_test.py
@@ -23,6 +23,12 @@ 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
diff --git a/test/load_balance_test.py b/test/load_balance_test.py
index 78aa758..f762214 100644
--- a/test/load_balance_test.py
+++ b/test/load_balance_test.py
@@ -47,6 +47,12 @@ 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
diff --git a/test/msgpack_test.py b/test/msgpack_test.py
index f5e1c9e..d46955f 100644
--- a/test/msgpack_test.py
+++ b/test/msgpack_test.py
@@ -41,6 +41,12 @@ 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
@@ -181,6 +187,12 @@ 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
@@ -329,6 +341,12 @@ 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
diff --git a/test/tera_test.py b/test/tera_test.py
index bb11883..2a596f3 100644
--- a/test/tera_test.py
+++ b/test/tera_test.py
@@ -26,6 +26,12 @@ 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
@@ -131,6 +137,12 @@ 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
@@ -241,6 +253,12 @@ 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
@@ -564,6 +582,12 @@ 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
@@ -994,6 +1018,12 @@ 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
@@ -1317,6 +1347,12 @@ 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
diff --git a/test/vwire_test.py b/test/vwire_test.py
index fa9141d..3d8e7b8 100644
--- a/test/vwire_test.py
+++ b/test/vwire_test.py
@@ -160,6 +160,12 @@ 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
@@ -386,6 +392,12 @@ 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