app/testpmd: fix code style for redirection table
[dpdk.git] / app / test-pmd / cmdline.c
index 0b972f9..b697423 100644 (file)
@@ -285,6 +285,20 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "    Set the outer VLAN TPID for Packet Filtering on"
                        " a port\n\n"
 
+                       "tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) "
+                       "(inner_vlan) (tunnel_type) (filter_type) (tenant_id) (queue_id)\n"
+                       "   add a tunnel filter of a port.\n\n"
+
+                       "tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) "
+                       "(inner_vlan) (tunnel_type) (filter_type) (tenant_id) (queue_id)\n"
+                       "   remove a tunnel filter of a port.\n\n"
+
+                       "rx_vxlan_port add (udp_port) (port_id)\n"
+                       "    Add an UDP port for VXLAN packet filter on a port\n\n"
+
+                       "rx_vxlan_port rm (udp_port) (port_id)\n"
+                       "    Remove an UDP port for VXLAN packet filter on a port\n\n"
+
                        "tx_vlan set vlan_id (port_id)\n"
                        "    Set hardware insertion of VLAN ID in packets sent"
                        " on a port.\n\n"
@@ -296,13 +310,17 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "    Disable hardware insertion of a VLAN header in"
                        " packets sent on a port.\n\n"
 
-                       "tx_checksum set mask (port_id)\n"
+                       "tx_checksum set (mask) (port_id)\n"
                        "    Enable hardware insertion of checksum offload with"
-                       " the 4-bit mask, 0~0xf, in packets sent on a port.\n"
+                       " the 8-bit mask, 0~0xff, in packets sent on a port.\n"
                        "        bit 0 - insert ip   checksum offload if set\n"
                        "        bit 1 - insert udp  checksum offload if set\n"
                        "        bit 2 - insert tcp  checksum offload if set\n"
                        "        bit 3 - insert sctp checksum offload if set\n"
+                       "        bit 4 - insert inner ip  checksum offload if set\n"
+                       "        bit 5 - insert inner udp checksum offload if set\n"
+                       "        bit 6 - insert inner tcp checksum offload if set\n"
+                       "        bit 7 - insert inner sctp checksum offload if set\n"
                        "    Please check the NIC datasheet for HW limits.\n\n"
 
                        "set fwd (%s)\n"
@@ -351,9 +369,14 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "    e.g., 'set stat_qmap rx 0 2 5' sets rx queue 2"
                        " on port 0 to mapping 5.\n\n"
 
-                       "set port (port_id) vf (vf_id) rx|tx on|off \n"
+                       "set port (port_id) vf (vf_id) rx|tx on|off\n"
                        "    Enable/Disable a VF receive/tranmit from a port\n\n"
 
+                       "set port (port_id) vf (vf_id) (mac_addr)"
+                       " (exact-mac#exact-mac-vlan#hashmac|hashmac-vlan) on|off\n"
+                       "   Add/Remove unicast or multicast MAC addr filter"
+                       " for a VF.\n\n"
+
                        "set port (port_id) vf (vf_id) rxmode (AUPE|ROPE|BAM"
                        "|MPE) (on|off)\n"
                        "    AUPE:accepts untagged VLAN;"
@@ -439,7 +462,15 @@ static void cmd_help_long_parsed(void *parsed_result,
 
                        "set bonding xmit_balance_policy (port_id) (l2|l23|l34)\n"
                        "       Set the transmit balance policy for bonded device running in balance mode.\n\n"
+
+                       "set bonding mon_period (port_id) (value)\n"
+                       "       Set the bonding link status monitoring polling period in ms.\n\n"
 #endif
+                       "set link-up port (port_id)\n"
+                       "       Set link up for a port.\n\n"
+
+                       "set link-down port (port_id)\n"
+                       "       Set link down for a port.\n\n"
 
                        , list_pkt_forwarding_modes()
                );
@@ -1579,7 +1610,7 @@ parse_reta_config(const char *str, struct rte_eth_rss_reta *reta_conf)
                nb_queue = (uint8_t)int_fld[FLD_QUEUE];
 
                if (hash_index >= ETH_RSS_RETA_NUM_ENTRIES) {
-                       printf("Invalid RETA hash index=%d",hash_index);
+                       printf("Invalid RETA hash index=%d", hash_index);
                        return -1;
                }
 
@@ -1596,22 +1627,24 @@ parse_reta_config(const char *str, struct rte_eth_rss_reta *reta_conf)
 
 static void
 cmd_set_rss_reta_parsed(void *parsed_result,
-                               __attribute__((unused)) struct cmdline *cl,
-                               __attribute__((unused)) void *data)
+                       __attribute__((unused)) struct cmdline *cl,
+                       __attribute__((unused)) void *data)
 {
        int ret;
        struct rte_eth_rss_reta reta_conf;
        struct cmd_config_rss_reta *res = parsed_result;
 
-       memset(&reta_conf,0,sizeof(struct rte_eth_rss_reta));
+       memset(&reta_conf, 0, sizeof(struct rte_eth_rss_reta));
        if (!strcmp(res->list_name, "reta")) {
                if (parse_reta_config(res->list_of_items, &reta_conf)) {
-                       printf("Invalid RSS Redirection Table config entered\n");
+                       printf("Invalid RSS Redirection Table config "
+                                                       "entered\n");
                        return;
                }
                ret = rte_eth_dev_rss_reta_update(res->port_id, &reta_conf);
                if (ret != 0)
-                       printf("Bad redirection table parameter, return code = %d \n",ret);
+                       printf("Bad redirection table parameter, "
+                                       "return code = %d \n", ret);
        }
 }
 
@@ -1673,19 +1706,19 @@ static void cmd_showport_reta_parsed(void *parsed_result,
 }
 
 cmdline_parse_token_string_t cmd_showport_reta_show =
-        TOKEN_STRING_INITIALIZER(struct  cmd_showport_reta, show, "show");
+       TOKEN_STRING_INITIALIZER(struct  cmd_showport_reta, show, "show");
 cmdline_parse_token_string_t cmd_showport_reta_port =
-        TOKEN_STRING_INITIALIZER(struct  cmd_showport_reta, port, "port");
+       TOKEN_STRING_INITIALIZER(struct  cmd_showport_reta, port, "port");
 cmdline_parse_token_num_t cmd_showport_reta_port_id =
-        TOKEN_NUM_INITIALIZER(struct cmd_showport_reta, port_id, UINT8);
+       TOKEN_NUM_INITIALIZER(struct cmd_showport_reta, port_id, UINT8);
 cmdline_parse_token_string_t cmd_showport_reta_rss =
-        TOKEN_STRING_INITIALIZER(struct cmd_showport_reta, rss, "rss");
+       TOKEN_STRING_INITIALIZER(struct cmd_showport_reta, rss, "rss");
 cmdline_parse_token_string_t cmd_showport_reta_reta =
-        TOKEN_STRING_INITIALIZER(struct cmd_showport_reta, reta, "reta");
+       TOKEN_STRING_INITIALIZER(struct cmd_showport_reta, reta, "reta");
 cmdline_parse_token_num_t cmd_showport_reta_mask_lo =
-        TOKEN_NUM_INITIALIZER(struct cmd_showport_reta,mask_lo,UINT64);
+       TOKEN_NUM_INITIALIZER(struct cmd_showport_reta, mask_lo, UINT64);
 cmdline_parse_token_num_t cmd_showport_reta_mask_hi =
-       TOKEN_NUM_INITIALIZER(struct cmd_showport_reta,mask_hi,UINT64);
+       TOKEN_NUM_INITIALIZER(struct cmd_showport_reta, mask_hi, UINT64);
 
 cmdline_parse_inst_t cmd_showport_reta = {
        .f = cmd_showport_reta_parsed,
@@ -2749,8 +2782,9 @@ cmdline_parse_inst_t cmd_tx_cksum_set = {
        .f = cmd_tx_cksum_set_parsed,
        .data = NULL,
        .help_str = "enable hardware insertion of L3/L4checksum with a given "
-       "mask in packets sent on a port, the bit mapping is given as, Bit 0 for ip"
-       "Bit 1 for UDP, Bit 2 for TCP, Bit 3 for SCTP",
+       "mask in packets sent on a port, the bit mapping is given as, Bit 0 for ip, "
+       "Bit 1 for UDP, Bit 2 for TCP, Bit 3 for SCTP, Bit 4 for inner ip, "
+       "Bit 5 for inner UDP, Bit 6 for inner TCP, Bit 7 for inner SCTP",
        .tokens = {
                (void *)&cmd_tx_cksum_set_tx_cksum,
                (void *)&cmd_tx_cksum_set_set,
@@ -3709,6 +3743,65 @@ cmdline_parse_inst_t cmd_set_bond_mac_addr = {
                }
 };
 
+
+/* *** SET LINK STATUS MONITORING POLLING PERIOD ON BONDED DEVICE *** */
+struct cmd_set_bond_mon_period_result {
+       cmdline_fixed_string_t set;
+       cmdline_fixed_string_t bonding;
+       cmdline_fixed_string_t mon_period;
+       uint8_t port_num;
+       uint32_t period_ms;
+};
+
+static void cmd_set_bond_mon_period_parsed(void *parsed_result,
+               __attribute__((unused))  struct cmdline *cl,
+               __attribute__((unused)) void *data)
+{
+       struct cmd_set_bond_mon_period_result *res = parsed_result;
+       int ret;
+
+       if (res->port_num >= nb_ports) {
+               printf("Port id %d must be less than %d\n", res->port_num, nb_ports);
+               return;
+       }
+
+       ret = rte_eth_bond_link_monitoring_set(res->port_num, res->period_ms);
+
+       /* check the return value and print it if is < 0 */
+       if (ret < 0)
+               printf("set_bond_mac_addr error: (%s)\n", strerror(-ret));
+}
+
+cmdline_parse_token_string_t cmd_set_bond_mon_period_set =
+               TOKEN_STRING_INITIALIZER(struct cmd_set_bond_mon_period_result,
+                               set, "set");
+cmdline_parse_token_string_t cmd_set_bond_mon_period_bonding =
+               TOKEN_STRING_INITIALIZER(struct cmd_set_bond_mon_period_result,
+                               bonding, "bonding");
+cmdline_parse_token_string_t cmd_set_bond_mon_period_mon_period =
+               TOKEN_STRING_INITIALIZER(struct cmd_set_bond_mon_period_result,
+                               mon_period,     "mon_period");
+cmdline_parse_token_num_t cmd_set_bond_mon_period_portnum =
+               TOKEN_NUM_INITIALIZER(struct cmd_set_bond_mon_period_result,
+                               port_num, UINT8);
+cmdline_parse_token_num_t cmd_set_bond_mon_period_period_ms =
+               TOKEN_NUM_INITIALIZER(struct cmd_set_bond_mon_period_result,
+                               period_ms, UINT32);
+
+cmdline_parse_inst_t cmd_set_bond_mon_period = {
+               .f = cmd_set_bond_mon_period_parsed,
+               .data = (void *) 0,
+               .help_str = "set bonding mon_period (port_id) (period_ms): ",
+               .tokens = {
+                               (void *)&cmd_set_bond_mon_period_set,
+                               (void *)&cmd_set_bond_mon_period_bonding,
+                               (void *)&cmd_set_bond_mon_period_mon_period,
+                               (void *)&cmd_set_bond_mon_period_portnum,
+                               (void *)&cmd_set_bond_mon_period_period_ms,
+                               NULL
+               }
+};
+
 #endif /* RTE_LIBRTE_PMD_BOND */
 
 /* *** SET FORWARDING MODE *** */
@@ -5809,6 +5902,112 @@ cmdline_parse_inst_t cmd_set_uc_all_hash_filter = {
        },
 };
 
+/* *** CONFIGURE MACVLAN FILTER FOR VF(s) *** */
+struct cmd_set_vf_macvlan_filter {
+       cmdline_fixed_string_t set;
+       cmdline_fixed_string_t port;
+       uint8_t port_id;
+       cmdline_fixed_string_t vf;
+       uint8_t vf_id;
+       struct ether_addr address;
+       cmdline_fixed_string_t filter_type;
+       cmdline_fixed_string_t mode;
+};
+
+static void
+cmd_set_vf_macvlan_parsed(void *parsed_result,
+                      __attribute__((unused)) struct cmdline *cl,
+                      __attribute__((unused)) void *data)
+{
+       int is_on, ret = 0;
+       struct cmd_set_vf_macvlan_filter *res = parsed_result;
+       struct rte_eth_mac_filter filter;
+
+       memset(&filter, 0, sizeof(struct rte_eth_mac_filter));
+
+       (void)rte_memcpy(&filter.mac_addr, &res->address, ETHER_ADDR_LEN);
+
+       /* set VF MAC filter */
+       filter.is_vf = 1;
+
+       /* set VF ID */
+       filter.dst_id = res->vf_id;
+
+       if (!strcmp(res->filter_type, "exact-mac"))
+               filter.filter_type = RTE_MAC_PERFECT_MATCH;
+       else if (!strcmp(res->filter_type, "exact-mac-vlan"))
+               filter.filter_type = RTE_MACVLAN_PERFECT_MATCH;
+       else if (!strcmp(res->filter_type, "hashmac"))
+               filter.filter_type = RTE_MAC_HASH_MATCH;
+       else if (!strcmp(res->filter_type, "hashmac-vlan"))
+               filter.filter_type = RTE_MACVLAN_HASH_MATCH;
+
+       is_on = (strcmp(res->mode, "on") == 0) ? 1 : 0;
+
+       if (is_on)
+               ret = rte_eth_dev_filter_ctrl(res->port_id,
+                                       RTE_ETH_FILTER_MACVLAN,
+                                       RTE_ETH_FILTER_ADD,
+                                        &filter);
+       else
+               ret = rte_eth_dev_filter_ctrl(res->port_id,
+                                       RTE_ETH_FILTER_MACVLAN,
+                                       RTE_ETH_FILTER_DELETE,
+                                       &filter);
+
+       if (ret < 0)
+               printf("bad set MAC hash parameter, return code = %d\n", ret);
+
+}
+
+cmdline_parse_token_string_t cmd_set_vf_macvlan_set =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_vf_macvlan_filter,
+                                set, "set");
+cmdline_parse_token_string_t cmd_set_vf_macvlan_port =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_vf_macvlan_filter,
+                                port, "port");
+cmdline_parse_token_num_t cmd_set_vf_macvlan_portid =
+       TOKEN_NUM_INITIALIZER(struct cmd_set_vf_macvlan_filter,
+                             port_id, UINT8);
+cmdline_parse_token_string_t cmd_set_vf_macvlan_vf =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_vf_macvlan_filter,
+                                vf, "vf");
+cmdline_parse_token_num_t cmd_set_vf_macvlan_vf_id =
+       TOKEN_NUM_INITIALIZER(struct cmd_set_vf_macvlan_filter,
+                               vf_id, UINT8);
+cmdline_parse_token_etheraddr_t cmd_set_vf_macvlan_mac =
+       TOKEN_ETHERADDR_INITIALIZER(struct cmd_set_vf_macvlan_filter,
+                               address);
+cmdline_parse_token_string_t cmd_set_vf_macvlan_filter_type =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_vf_macvlan_filter,
+                               filter_type, "exact-mac#exact-mac-vlan"
+                               "#hashmac#hashmac-vlan");
+cmdline_parse_token_string_t cmd_set_vf_macvlan_mode =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_vf_macvlan_filter,
+                                mode, "on#off");
+
+cmdline_parse_inst_t cmd_set_vf_macvlan_filter = {
+       .f = cmd_set_vf_macvlan_parsed,
+       .data = NULL,
+       .help_str = "set port (portid) vf (vfid) (mac-addr) "
+                       "(exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) "
+                       "on|off\n"
+                       "exact match rule:exact match of MAC or MAC and VLAN; "
+                       "hash match rule: hash match of MAC and exact match "
+                       "of VLAN",
+       .tokens = {
+               (void *)&cmd_set_vf_macvlan_set,
+               (void *)&cmd_set_vf_macvlan_port,
+               (void *)&cmd_set_vf_macvlan_portid,
+               (void *)&cmd_set_vf_macvlan_vf,
+               (void *)&cmd_set_vf_macvlan_vf_id,
+               (void *)&cmd_set_vf_macvlan_mac,
+               (void *)&cmd_set_vf_macvlan_filter_type,
+               (void *)&cmd_set_vf_macvlan_mode,
+               NULL,
+       },
+};
+
 /* *** CONFIGURE VF TRAFFIC CONTROL *** */
 struct cmd_set_vf_traffic {
        cmdline_fixed_string_t set;
@@ -5857,7 +6056,8 @@ cmdline_parse_token_string_t cmd_setvf_traffic_mode =
 cmdline_parse_inst_t cmd_set_vf_traffic = {
        .f = cmd_set_vf_traffic_parsed,
        .data = NULL,
-       .help_str = "set port X vf Y rx|tx on|off (X = port number,Y = vf id)",
+       .help_str = "set port X vf Y rx|tx on|off"
+                       "(X = port number,Y = vf id)",
        .tokens = {
                (void *)&cmd_setvf_traffic_set,
                (void *)&cmd_setvf_traffic_port,
@@ -6225,6 +6425,205 @@ cmdline_parse_inst_t cmd_vf_rate_limit = {
        },
 };
 
+/* *** ADD TUNNEL FILTER OF A PORT *** */
+struct cmd_tunnel_filter_result {
+       cmdline_fixed_string_t cmd;
+       cmdline_fixed_string_t what;
+       uint8_t port_id;
+       struct ether_addr outer_mac;
+       struct ether_addr inner_mac;
+       cmdline_ipaddr_t ip_value;
+       uint16_t inner_vlan;
+       cmdline_fixed_string_t tunnel_type;
+       cmdline_fixed_string_t filter_type;
+       uint32_t tenant_id;
+       uint16_t queue_num;
+};
+
+static void
+cmd_tunnel_filter_parsed(void *parsed_result,
+                         __attribute__((unused)) struct cmdline *cl,
+                         __attribute__((unused)) void *data)
+{
+       struct cmd_tunnel_filter_result *res = parsed_result;
+       struct rte_eth_tunnel_filter_conf tunnel_filter_conf;
+       int ret = 0;
+
+       tunnel_filter_conf.outer_mac = &res->outer_mac;
+       tunnel_filter_conf.inner_mac = &res->inner_mac;
+       tunnel_filter_conf.inner_vlan = res->inner_vlan;
+
+       if (res->ip_value.family == AF_INET) {
+               tunnel_filter_conf.ip_addr.ipv4_addr =
+                       res->ip_value.addr.ipv4.s_addr;
+               tunnel_filter_conf.ip_type = RTE_TUNNEL_IPTYPE_IPV4;
+       } else {
+               memcpy(&(tunnel_filter_conf.ip_addr.ipv6_addr),
+                       &(res->ip_value.addr.ipv6),
+                       sizeof(struct in6_addr));
+               tunnel_filter_conf.ip_type = RTE_TUNNEL_IPTYPE_IPV6;
+       }
+
+       if (!strcmp(res->filter_type, "imac-ivlan"))
+               tunnel_filter_conf.filter_type = RTE_TUNNEL_FILTER_IMAC_IVLAN;
+       else if (!strcmp(res->filter_type, "imac-ivlan-tenid"))
+               tunnel_filter_conf.filter_type =
+                       RTE_TUNNEL_FILTER_IMAC_IVLAN_TENID;
+       else if (!strcmp(res->filter_type, "imac-tenid"))
+               tunnel_filter_conf.filter_type = RTE_TUNNEL_FILTER_IMAC_TENID;
+       else if (!strcmp(res->filter_type, "imac"))
+               tunnel_filter_conf.filter_type = ETH_TUNNEL_FILTER_IMAC;
+       else if (!strcmp(res->filter_type, "omac-imac-tenid"))
+               tunnel_filter_conf.filter_type =
+                       RTE_TUNNEL_FILTER_OMAC_TENID_IMAC;
+       else {
+               printf("The filter type is not supported");
+               return;
+       }
+
+       if (!strcmp(res->tunnel_type, "vxlan"))
+               tunnel_filter_conf.tunnel_type = RTE_TUNNEL_TYPE_VXLAN;
+       else {
+               printf("Only VXLAN is supported now.\n");
+               return;
+       }
+
+       tunnel_filter_conf.tenant_id = res->tenant_id;
+       tunnel_filter_conf.queue_id = res->queue_num;
+       if (!strcmp(res->what, "add"))
+               ret = rte_eth_dev_filter_ctrl(res->port_id,
+                                       RTE_ETH_FILTER_TUNNEL,
+                                       RTE_ETH_FILTER_ADD,
+                                       &tunnel_filter_conf);
+       else
+               ret = rte_eth_dev_filter_ctrl(res->port_id,
+                                       RTE_ETH_FILTER_TUNNEL,
+                                       RTE_ETH_FILTER_DELETE,
+                                       &tunnel_filter_conf);
+       if (ret < 0)
+               printf("cmd_tunnel_filter_parsed error: (%s)\n",
+                               strerror(-ret));
+
+}
+cmdline_parse_token_string_t cmd_tunnel_filter_cmd =
+       TOKEN_STRING_INITIALIZER(struct cmd_tunnel_filter_result,
+       cmd, "tunnel_filter");
+cmdline_parse_token_string_t cmd_tunnel_filter_what =
+       TOKEN_STRING_INITIALIZER(struct cmd_tunnel_filter_result,
+       what, "add#rm");
+cmdline_parse_token_num_t cmd_tunnel_filter_port_id =
+       TOKEN_NUM_INITIALIZER(struct cmd_tunnel_filter_result,
+       port_id, UINT8);
+cmdline_parse_token_etheraddr_t cmd_tunnel_filter_outer_mac =
+       TOKEN_ETHERADDR_INITIALIZER(struct cmd_tunnel_filter_result,
+       outer_mac);
+cmdline_parse_token_etheraddr_t cmd_tunnel_filter_inner_mac =
+       TOKEN_ETHERADDR_INITIALIZER(struct cmd_tunnel_filter_result,
+       inner_mac);
+cmdline_parse_token_num_t cmd_tunnel_filter_innner_vlan =
+       TOKEN_NUM_INITIALIZER(struct cmd_tunnel_filter_result,
+       inner_vlan, UINT16);
+cmdline_parse_token_ipaddr_t cmd_tunnel_filter_ip_value =
+       TOKEN_IPADDR_INITIALIZER(struct cmd_tunnel_filter_result,
+       ip_value);
+cmdline_parse_token_string_t cmd_tunnel_filter_tunnel_type =
+       TOKEN_STRING_INITIALIZER(struct cmd_tunnel_filter_result,
+       tunnel_type, "vxlan");
+
+cmdline_parse_token_string_t cmd_tunnel_filter_filter_type =
+       TOKEN_STRING_INITIALIZER(struct cmd_tunnel_filter_result,
+       filter_type, "imac-ivlan#imac-ivlan-tenid#imac-tenid#"
+               "imac#omac-imac-tenid");
+cmdline_parse_token_num_t cmd_tunnel_filter_tenant_id =
+       TOKEN_NUM_INITIALIZER(struct cmd_tunnel_filter_result,
+       tenant_id, UINT32);
+cmdline_parse_token_num_t cmd_tunnel_filter_queue_num =
+       TOKEN_NUM_INITIALIZER(struct cmd_tunnel_filter_result,
+       queue_num, UINT16);
+
+cmdline_parse_inst_t cmd_tunnel_filter = {
+       .f = cmd_tunnel_filter_parsed,
+       .data = (void *)0,
+       .help_str = "add/rm tunnel filter of a port: "
+                       "tunnel_filter add port_id outer_mac inner_mac ip "
+                       "inner_vlan tunnel_type(vxlan) filter_type "
+                       "(imac-ivlan|imac-ivlan-tenid|imac-tenid|"
+                       "imac|omac-imac-tenid) "
+                       "tenant_id queue_num",
+       .tokens = {
+               (void *)&cmd_tunnel_filter_cmd,
+               (void *)&cmd_tunnel_filter_what,
+               (void *)&cmd_tunnel_filter_port_id,
+               (void *)&cmd_tunnel_filter_outer_mac,
+               (void *)&cmd_tunnel_filter_inner_mac,
+               (void *)&cmd_tunnel_filter_ip_value,
+               (void *)&cmd_tunnel_filter_innner_vlan,
+               (void *)&cmd_tunnel_filter_tunnel_type,
+               (void *)&cmd_tunnel_filter_filter_type,
+               (void *)&cmd_tunnel_filter_tenant_id,
+               (void *)&cmd_tunnel_filter_queue_num,
+               NULL,
+       },
+};
+
+/* *** CONFIGURE TUNNEL UDP PORT *** */
+struct cmd_tunnel_udp_config {
+       cmdline_fixed_string_t cmd;
+       cmdline_fixed_string_t what;
+       uint16_t udp_port;
+       uint8_t port_id;
+};
+
+static void
+cmd_tunnel_udp_config_parsed(void *parsed_result,
+                         __attribute__((unused)) struct cmdline *cl,
+                         __attribute__((unused)) void *data)
+{
+       struct cmd_tunnel_udp_config *res = parsed_result;
+       struct rte_eth_udp_tunnel tunnel_udp;
+       int ret;
+
+       tunnel_udp.udp_port = res->udp_port;
+
+       if (!strcmp(res->cmd, "rx_vxlan_port"))
+               tunnel_udp.prot_type = RTE_TUNNEL_TYPE_VXLAN;
+
+       if (!strcmp(res->what, "add"))
+               ret = rte_eth_dev_udp_tunnel_add(res->port_id, &tunnel_udp);
+       else
+               ret = rte_eth_dev_udp_tunnel_delete(res->port_id, &tunnel_udp);
+
+       if (ret < 0)
+               printf("udp tunneling add error: (%s)\n", strerror(-ret));
+}
+
+cmdline_parse_token_string_t cmd_tunnel_udp_config_cmd =
+       TOKEN_STRING_INITIALIZER(struct cmd_tunnel_udp_config,
+                               cmd, "rx_vxlan_port");
+cmdline_parse_token_string_t cmd_tunnel_udp_config_what =
+       TOKEN_STRING_INITIALIZER(struct cmd_tunnel_udp_config,
+                               what, "add#rm");
+cmdline_parse_token_num_t cmd_tunnel_udp_config_udp_port =
+       TOKEN_NUM_INITIALIZER(struct cmd_tunnel_udp_config,
+                               udp_port, UINT16);
+cmdline_parse_token_num_t cmd_tunnel_udp_config_port_id =
+       TOKEN_NUM_INITIALIZER(struct cmd_tunnel_udp_config,
+                               port_id, UINT8);
+
+cmdline_parse_inst_t cmd_tunnel_udp_config = {
+       .f = cmd_tunnel_udp_config_parsed,
+       .data = (void *)0,
+       .help_str = "add/rm an tunneling UDP port filter: "
+                       "rx_vxlan_port add udp_port port_id",
+       .tokens = {
+               (void *)&cmd_tunnel_udp_config_cmd,
+               (void *)&cmd_tunnel_udp_config_what,
+               (void *)&cmd_tunnel_udp_config_udp_port,
+               (void *)&cmd_tunnel_udp_config_port_id,
+               NULL,
+       },
+};
+
 /* *** CONFIGURE VM MIRROR VLAN/POOL RULE *** */
 struct cmd_set_mirror_mask_result {
        cmdline_fixed_string_t set;
@@ -7457,6 +7856,7 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *) &cmd_create_bonded_device,
        (cmdline_parse_inst_t *) &cmd_set_bond_mac_addr,
        (cmdline_parse_inst_t *) &cmd_set_balance_xmit_policy,
+       (cmdline_parse_inst_t *) &cmd_set_bond_mon_period,
 #endif
        (cmdline_parse_inst_t *)&cmd_vlan_offload,
        (cmdline_parse_inst_t *)&cmd_vlan_tpid,
@@ -7513,11 +7913,14 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_set_vf_rxmode,
        (cmdline_parse_inst_t *)&cmd_set_uc_hash_filter,
        (cmdline_parse_inst_t *)&cmd_set_uc_all_hash_filter,
-       (cmdline_parse_inst_t *)&cmd_vf_mac_addr_filter ,
+       (cmdline_parse_inst_t *)&cmd_vf_mac_addr_filter,
+       (cmdline_parse_inst_t *)&cmd_set_vf_macvlan_filter,
        (cmdline_parse_inst_t *)&cmd_set_vf_traffic,
        (cmdline_parse_inst_t *)&cmd_vf_rxvlan_filter,
        (cmdline_parse_inst_t *)&cmd_queue_rate_limit,
        (cmdline_parse_inst_t *)&cmd_vf_rate_limit,
+       (cmdline_parse_inst_t *)&cmd_tunnel_filter,
+       (cmdline_parse_inst_t *)&cmd_tunnel_udp_config,
        (cmdline_parse_inst_t *)&cmd_set_mirror_mask,
        (cmdline_parse_inst_t *)&cmd_set_mirror_link,
        (cmdline_parse_inst_t *)&cmd_reset_mirror_rule,