summaryrefslogtreecommitdiffstats
path: root/VNFs/DPPD-PROX
diff options
context:
space:
mode:
authorXavier Simonart <simonartxavier@gmail.com>2022-02-20 00:50:56 +0000
committerPatrice Buriez <patrice.buriez@chenapan.org>2022-12-26 09:40:40 +0000
commitb950110b2a8a23ac498deef1bebca643f80c38b1 (patch)
tree0df52515cbc3ff8f4af6b4b1bba9e98761bb8bc4 /VNFs/DPPD-PROX
parentfb2d81d0e3d0d766f59511df7cf7a5d151674c3b (diff)
Add initial support for DPDK 21.11
Note that this patch simplistically removes some PROX features, because they are not directly supported anymore by DPDK, since rte_eth_devices is now private: - reading and writing NIC register through PROX command line - querying ixgbe HW statistics instead of getting them from DPDK Also adjusted to following DPDK changes: * struct rte_ether_hdr fields renamed: - d_addr -> dst_addr - s_addr -> src_addr * struct rte_eth_rxmode field renamed: - max_rx_pkt_len -> mtu * --master-lcore -> --main-lcore Signed-off-by: Xavier Simonart <simonartxavier@gmail.com> Signed-off-by: Patrice Buriez <patrice.buriez@chenapan.org> Change-Id: I08445b3dd0f7fe471d9bc7cfb557bd3aeb2f50be
Diffstat (limited to 'VNFs/DPPD-PROX')
-rw-r--r--VNFs/DPPD-PROX/commands.c8
-rw-r--r--VNFs/DPPD-PROX/defaults.c4
-rw-r--r--VNFs/DPPD-PROX/meson.build18
-rw-r--r--VNFs/DPPD-PROX/prox_args.c18
-rw-r--r--VNFs/DPPD-PROX/prox_compat.h11
5 files changed, 48 insertions, 11 deletions
diff --git a/VNFs/DPPD-PROX/commands.c b/VNFs/DPPD-PROX/commands.c
index c5ffed84..1c4d7020 100644
--- a/VNFs/DPPD-PROX/commands.c
+++ b/VNFs/DPPD-PROX/commands.c
@@ -935,6 +935,7 @@ void cmd_portinfo(int port_id, char *dst, size_t max_len)
void cmd_read_reg(uint8_t port_id, unsigned int id)
{
+#if RTE_VERSION < RTE_VERSION_NUM(21,11,0,0)
unsigned int val, rc;
if (!port_is_active(port_id)) {
return ;
@@ -946,6 +947,9 @@ void cmd_read_reg(uint8_t port_id, unsigned int id)
else {
plog_info("Register 0x%08X : %08X \n", id, val);
}
+#else
+ plog_err("cmd_read_reg(%d, %d) not supported on this dpdk version\n", port_id, id);
+#endif
}
void cmd_reset_port(uint8_t portid)
@@ -989,12 +993,16 @@ void cmd_multicast(uint8_t port_id, unsigned int val, prox_rte_ether_addr *mac)
void cmd_write_reg(uint8_t port_id, unsigned int id, unsigned int val)
{
+#if RTE_VERSION < RTE_VERSION_NUM(21,11,0,0)
if (!port_is_active(port_id)) {
return ;
}
plog_info("writing 0x%08X %08X\n", id, val);
write_reg(port_id, id, val);
+#else
+ plog_err("cmd_write_reg(%d, %d, %d) not supported on this dpdk version\n", port_id, id, val);
+#endif
}
void cmd_set_vlan_offload(uint8_t port_id, unsigned int val)
diff --git a/VNFs/DPPD-PROX/defaults.c b/VNFs/DPPD-PROX/defaults.c
index b93b7275..77582c7e 100644
--- a/VNFs/DPPD-PROX/defaults.c
+++ b/VNFs/DPPD-PROX/defaults.c
@@ -50,7 +50,11 @@
static const struct rte_eth_conf default_port_conf = {
.rxmode = {
.mq_mode = 0,
+#if RTE_VERSION < RTE_VERSION_NUM(21,11,0,0)
.max_rx_pkt_len = PROX_MTU + PROX_RTE_ETHER_HDR_LEN + PROX_RTE_ETHER_CRC_LEN
+#else
+ .mtu = PROX_MTU
+#endif
},
.rx_adv_conf = {
.rss_conf = {
diff --git a/VNFs/DPPD-PROX/meson.build b/VNFs/DPPD-PROX/meson.build
index 564e5b56..4a37ad50 100644
--- a/VNFs/DPPD-PROX/meson.build
+++ b/VNFs/DPPD-PROX/meson.build
@@ -26,6 +26,10 @@ project('dppd-prox', 'C',
cc = meson.get_compiler('c')
# Configure options for prox
+# Grab the DPDK version here "manually" as it is not available in the dpdk_dep
+# object
+dpdk_version = run_command('pkg-config', '--modversion', 'libdpdk').stdout()
+
if get_option('bng_qinq').enabled()
add_project_arguments('-DUSE_QINQ', language: 'c')
endif
@@ -39,7 +43,11 @@ if get_option('prox_stats').enabled()
endif
if get_option('hw_direct_stats').enabled()
+if dpdk_version.version_compare('<21.11.0')
add_project_arguments('-DPROX_HW_DIRECT_STATS', language: 'c')
+else
+ warning('hw_direct_stats not supported on this dpdk version')
+endif
endif
if get_option('dbg')
@@ -132,10 +140,6 @@ deps = [dpdk_dep,
dl_dep,
lua_dep]
-# Grab the DPDK version here "manually" as it is not available in the dpdk_dep
-# object
-dpdk_version = run_command('pkg-config', '--modversion', 'libdpdk').stdout()
-
# Explicitly add these to the dependency list
deps += [cc.find_library('rte_bus_pci', required: true)]
deps += [cc.find_library('rte_bus_vdev', required: true)]
@@ -150,7 +154,7 @@ sources = files(
'task_init.c', 'handle_aggregator.c', 'handle_nop.c', 'handle_irq.c',
'handle_arp.c', 'handle_impair.c', 'handle_lat.c', 'handle_qos.c',
'handle_qinq_decap4.c', 'handle_routing.c', 'handle_untag.c',
- 'handle_mplstag.c', 'handle_qinq_decap6.c', 'rw_reg.c',
+ 'handle_mplstag.c', 'handle_qinq_decap6.c',
'handle_lb_qinq.c', 'handle_lb_pos.c', 'handle_lb_net.c',
'handle_qinq_encap4.c', 'handle_qinq_encap6.c', 'handle_classify.c',
'handle_l2fwd.c', 'handle_swap.c', 'handle_police.c', 'handle_acl.c',
@@ -175,6 +179,10 @@ sources = files(
'stats_cons_cli.c', 'stats_parser.c', 'hash_set.c', 'prox_lua.c',
'prox_malloc.c', 'prox_ipv6.c', 'prox_compat.c', 'handle_nsh.c')
+if dpdk_version.version_compare('<21.11.0')
+sources += files('rw_reg.c')
+endif
+
# Include a couple of source files depending on DPDK support
if cc.find_library('rte_pmd_aesni', required: false).found()
sources += files('handle_esp.c')
diff --git a/VNFs/DPPD-PROX/prox_args.c b/VNFs/DPPD-PROX/prox_args.c
index 0ef1f8b1..09e903b5 100644
--- a/VNFs/DPPD-PROX/prox_args.c
+++ b/VNFs/DPPD-PROX/prox_args.c
@@ -655,10 +655,14 @@ static int get_port_cfg(unsigned sindex, char *str, void *data)
// A frame of 1526 bytes (1500 bytes mtu, 14 bytes hdr, 4 bytes crc and 8 bytes vlan)
// should not be considered as a jumbo frame. However rte_ethdev.c considers that
// the max_rx_pkt_len for a non jumbo frame is 1518
+#if RTE_VERSION < RTE_VERSION_NUM(21,11,0,0)
cfg->port_conf.rxmode.max_rx_pkt_len = cfg->mtu + PROX_RTE_ETHER_HDR_LEN + PROX_RTE_ETHER_CRC_LEN;
- if (cfg->port_conf.rxmode.max_rx_pkt_len > PROX_RTE_ETHER_MAX_LEN) {
+ if (cfg->port_conf.rxmode.max_rx_pkt_len > PROX_RTE_ETHER_MAX_LEN)
+#else
+ cfg->port_conf.rxmode.mtu = cfg->mtu;
+ if (cfg->port_conf.rxmode.mtu > PROX_RTE_ETHER_MAX_LEN - PROX_RTE_ETHER_HDR_LEN - PROX_RTE_ETHER_CRC_LEN)
+#endif
cfg->requested_rx_offload |= DEV_RX_OFFLOAD_JUMBO_FRAME;
- }
}
}
@@ -2296,10 +2300,14 @@ int prox_setup_rte(const char *prog_name)
sprintf(rte_arg[++argc], "-c%s", tmp);
rte_argv[argc] = rte_arg[argc];
#if RTE_VERSION >= RTE_VERSION_NUM(1,8,0,0)
+ uint32_t master_core = prox_cfg.master;
if (prox_cfg.flags & DSF_USE_DUMMY_CPU_TOPO)
- sprintf(rte_arg[++argc], "--master-lcore=%u", 0);
- else
- sprintf(rte_arg[++argc], "--master-lcore=%u", prox_cfg.master);
+ master_core = 0;
+#if RTE_VERSION < RTE_VERSION_NUM(21,11,0,0)
+ sprintf(rte_arg[++argc], "--master-lcore=%u", master_core);
+#else
+ sprintf(rte_arg[++argc], "--main-lcore=%u", master_core);
+#endif
rte_argv[argc] = rte_arg[argc];
#else
/* For old DPDK versions, the master core had to be the first
diff --git a/VNFs/DPPD-PROX/prox_compat.h b/VNFs/DPPD-PROX/prox_compat.h
index 404ce9ed..4f5fa321 100644
--- a/VNFs/DPPD-PROX/prox_compat.h
+++ b/VNFs/DPPD-PROX/prox_compat.h
@@ -210,7 +210,7 @@ typedef struct icmp_hdr prox_rte_icmp_hdr;
#define PROX_RTE_IS_IPV4_MCAST IS_IPV4_MCAST
#define prox_rte_is_same_ether_addr is_same_ether_addr
#define prox_rte_is_zero_ether_addr is_zero_ether_addr
-#else
+#else // >= 19.08
#define PROX_RTE_ETHER_CRC_LEN RTE_ETHER_CRC_LEN
#define PROX_RTE_ETHER_MIN_LEN RTE_ETHER_MIN_LEN
@@ -229,7 +229,16 @@ typedef struct icmp_hdr prox_rte_icmp_hdr;
typedef struct rte_ipv6_hdr prox_rte_ipv6_hdr;
typedef struct rte_ipv4_hdr prox_rte_ipv4_hdr;
typedef struct rte_ether_addr prox_rte_ether_addr;
+#if RTE_VERSION < RTE_VERSION_NUM(21,11,0,0)
typedef struct rte_ether_hdr prox_rte_ether_hdr;
+#else
+typedef struct prox_rte_ether_hdr
+{
+ struct rte_ether_addr d_addr; /**< Destination address. */
+ struct rte_ether_addr s_addr; /**< Source address. */
+ rte_be16_t ether_type; /**< Frame type. */
+} __rte_aligned(2) prox_rte_ether_hdr;
+#endif
typedef struct rte_vlan_hdr prox_rte_vlan_hdr;
typedef struct rte_vxlan_gpe_hdr prox_rte_vxlan_gpe_hdr;
typedef struct rte_udp_hdr prox_rte_udp_hdr;