From e12ec1f7d2b4fe8c28650e6cd53cae660ea96ec1 Mon Sep 17 00:00:00 2001 From: Xavier Simonart Date: Sun, 15 Apr 2018 15:14:01 +0200 Subject: Support reading inline jumbo frame and dump them Add support for pkt_inline of jumbo frames. Dump the whole packet, and not a truncated packet. This might have a small impact on performance as the memory footprint is increased (by ~640K * number of tasks), resulting in potential higher DTLB misses. Change-Id: I4ed02be7ca899db4f8f97355c180a92d69d39d8f Signed-off-by: Xavier Simonart --- VNFs/DPPD-PROX/cfgfile.h | 3 ++- VNFs/DPPD-PROX/defaults.h | 3 ++- VNFs/DPPD-PROX/parse_utils.h | 2 +- VNFs/DPPD-PROX/prox_args.c | 3 ++- VNFs/DPPD-PROX/task_base.h | 6 +++--- VNFs/DPPD-PROX/task_init.h | 2 +- 6 files changed, 11 insertions(+), 8 deletions(-) diff --git a/VNFs/DPPD-PROX/cfgfile.h b/VNFs/DPPD-PROX/cfgfile.h index 41b474ee..c0de4f16 100644 --- a/VNFs/DPPD-PROX/cfgfile.h +++ b/VNFs/DPPD-PROX/cfgfile.h @@ -18,6 +18,7 @@ #define _CFG_FILE_H_ #include +#include "defaults.h" #define DEFAULT_CONFIG_FILE "./prox.cfg" @@ -38,7 +39,7 @@ struct cfg_section { int error; }; -#define MAX_CFG_STRING_LEN 8192 +#define MAX_CFG_STRING_LEN (3 * MAX_PKT_SIZE) #define STRING_TERMINATOR_LEN 4 struct cfg_file { diff --git a/VNFs/DPPD-PROX/defaults.h b/VNFs/DPPD-PROX/defaults.h index 573cc9c5..4cf3cf7a 100644 --- a/VNFs/DPPD-PROX/defaults.h +++ b/VNFs/DPPD-PROX/defaults.h @@ -26,9 +26,10 @@ void set_global_defaults(struct prox_cfg* prox_cfg); void set_task_defaults(struct prox_cfg* prox_cfg, struct lcore_cfg* lcore_cfg_init); void set_port_defaults(void); +#define MAX_PKT_SIZE 10000 #define MAX_PKT_BURST 64 #define MAX_RING_BURST 64 -#define DUMP_PKT_LEN 128 +#define DUMP_PKT_LEN MAX_PKT_SIZE #if MAX_RING_BURST < MAX_PKT_BURST #error MAX_RING_BURST < MAX_PKT_BURST diff --git a/VNFs/DPPD-PROX/parse_utils.h b/VNFs/DPPD-PROX/parse_utils.h index 27ebb0bd..6e4bc770 100644 --- a/VNFs/DPPD-PROX/parse_utils.h +++ b/VNFs/DPPD-PROX/parse_utils.h @@ -20,7 +20,7 @@ #include #include "ip_subnet.h" -#define MAX_STR_LEN_PROC (3 * 1518 + 20) +#define MAX_STR_LEN_PROC (3 * MAX_PKT_SIZE + 20) struct ipv6_addr; struct ether_addr; diff --git a/VNFs/DPPD-PROX/prox_args.c b/VNFs/DPPD-PROX/prox_args.c index 53223cad..aa7ff51c 100644 --- a/VNFs/DPPD-PROX/prox_args.c +++ b/VNFs/DPPD-PROX/prox_args.c @@ -973,7 +973,8 @@ static int get_core_cfg(unsigned sindex, char *str, void *data) return -1; } if (targ->pkt_size == sizeof(targ->pkt_inline)) { - set_errf("Inline packet definition can't be longer than 1518"); + set_errf("Inline packet definition can't be longer than %u", sizeof(targ->pkt_inline)); + return -1; } targ->pkt_inline[targ->pkt_size++] = byte; diff --git a/VNFs/DPPD-PROX/task_base.h b/VNFs/DPPD-PROX/task_base.h index 00087ab6..95c50ba0 100644 --- a/VNFs/DPPD-PROX/task_base.h +++ b/VNFs/DPPD-PROX/task_base.h @@ -153,7 +153,6 @@ typedef uint16_t (*rx_pkt_func) (struct task_base *tbase, struct rte_mbuf ***mbu struct task_base_aux { /* Not used when PROX_STATS is not defined */ struct task_rt_stats stats; - struct task_rt_dump task_rt_dump; /* Used if TASK_TSC_RX is enabled*/ struct { @@ -163,8 +162,8 @@ struct task_base_aux { struct rte_mbuf **all_mbufs; - int rx_prev_count; - int rx_prev_idx; + uint16_t rx_prev_count; + uint16_t rx_prev_idx; uint16_t (*rx_pkt_prev[MAX_STACKED_RX_FUCTIONS])(struct task_base *tbase, struct rte_mbuf ***mbufs); uint32_t rx_bucket[RX_BUCKET_SIZE]; @@ -177,6 +176,7 @@ struct task_base_aux { void (*start)(struct task_base *tbase); void (*stop_last)(struct task_base *tbase); void (*start_first)(struct task_base *tbase); + struct task_rt_dump task_rt_dump; }; /* The task_base is accessed for _all_ task types. In case diff --git a/VNFs/DPPD-PROX/task_init.h b/VNFs/DPPD-PROX/task_init.h index c5a17796..a8ac14c9 100644 --- a/VNFs/DPPD-PROX/task_init.h +++ b/VNFs/DPPD-PROX/task_init.h @@ -194,7 +194,7 @@ struct task_args { uint32_t bucket_size; uint32_t lat_enabled; uint32_t pkt_size; - uint8_t pkt_inline[ETHER_MAX_LEN]; + uint8_t pkt_inline[MAX_PKT_SIZE]; uint32_t probability; char nat_table[256]; uint32_t use_src; -- cgit 1.2.3-korg