Add warning in case of wrong configuration (missing l3 submode)
[samplevnf.git] / VNFs / DPPD-PROX / prox_args.c
index 08f27e9..0b9a7bc 100644 (file)
@@ -539,13 +539,60 @@ static int get_port_cfg(unsigned sindex, char *str, void *data)
                }
                cfg->lsc_val = val;
        }
+#if RTE_VERSION >= RTE_VERSION_NUM(18,8,0,1)
+       else if (STR_EQ(str, "disable tx offload")) {
+               uint32_t val;
+               if (parse_int(&val, pkey)) {
+                       return -1;
+               }
+               if (val)
+                       cfg->disabled_tx_offload = val;
+       }
+#endif
        else if (STR_EQ(str, "strip crc")) {
                uint32_t val;
                if (parse_bool(&val, pkey)) {
                        return -1;
                }
-               cfg->port_conf.rxmode.hw_strip_crc = val;
+               if (val)
+                       cfg->requested_rx_offload |= DEV_RX_OFFLOAD_CRC_STRIP;
+               else
+                       cfg->requested_rx_offload &= ~DEV_RX_OFFLOAD_CRC_STRIP;
+       }
+       else if (STR_EQ(str, "vlan")) {
+#if RTE_VERSION >= RTE_VERSION_NUM(18,8,0,1)
+               uint32_t val;
+               if (parse_bool(&val, pkey)) {
+                       return -1;
+               }
+               if (val) {
+                       cfg->requested_rx_offload |= DEV_RX_OFFLOAD_VLAN_STRIP;
+                       cfg->requested_tx_offload |= DEV_TX_OFFLOAD_VLAN_INSERT;
+               } else {
+                       cfg->requested_rx_offload &= ~DEV_RX_OFFLOAD_VLAN_STRIP;
+                       cfg->requested_tx_offload &= ~DEV_TX_OFFLOAD_VLAN_INSERT;
+               }
+#else
+               plog_warn("vlan option not supported : update DPDK at least to 18.08 to support this option\n");
+#endif
+       }
+       else if (STR_EQ(str, "mtu size")) {
+               uint32_t val;
+               if (parse_int(&val, pkey)) {
+                       return -1;
+               }
+               if (val) {
+                       cfg->mtu = val;
+                       // 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
+                       cfg->port_conf.rxmode.max_rx_pkt_len = cfg->mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
+                       if (cfg->port_conf.rxmode.max_rx_pkt_len > ETHER_MAX_LEN) {
+                               cfg->requested_rx_offload |= DEV_RX_OFFLOAD_JUMBO_FRAME;
+                       }
+               }
        }
+
        else if (STR_EQ(str, "rss")) {
                uint32_t val;
                if (parse_bool(&val, pkey)) {
@@ -959,7 +1006,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;
@@ -1204,7 +1252,6 @@ static int get_core_cfg(unsigned sindex, char *str, void *data)
        }
 
        else if (STR_EQ(str, "mbuf size")) {
-               targ->mbuf_size_set_explicitely = 1;
                return parse_int(&targ->mbuf_size, pkey);
        }
        if (STR_EQ(str, "memcache size")) {
@@ -1304,6 +1351,8 @@ static int get_core_cfg(unsigned sindex, char *str, void *data)
                return 0;
        }
        if (STR_EQ(str, "gateway ipv4")) { /* Gateway IP address used when generating */
+               if ((targ->flags & TASK_ARG_L3) == 0)
+                       plog_warn("gateway ipv4 configured but L3 sub mode not enabled\n");
                return parse_ip(&targ->gateway_ipv4, pkey);
        }
        if (STR_EQ(str, "local ipv4")) { /* source IP address to be used for packets */
@@ -1315,6 +1364,10 @@ static int get_core_cfg(unsigned sindex, char *str, void *data)
         if (STR_EQ(str, "local ipv6")) { /* source IPv6 address to be used for packets */
                 return parse_ip6(&targ->local_ipv6, pkey);
         }
+       if (STR_EQ(str, "arp timeout"))
+               return parse_int(&targ->arp_timeout, pkey);
+       if (STR_EQ(str, "arp update time"))
+               return parse_int(&targ->arp_update_time, pkey);
        if (STR_EQ(str, "number of packets"))
                return parse_int(&targ->n_pkts, pkey);
        if (STR_EQ(str, "pipes")) {