get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/8013/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 8013,
    "url": "https://patches.dpdk.org/api/patches/8013/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1445837254-6188-6-git-send-email-wenzhuo.lu@intel.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1445837254-6188-6-git-send-email-wenzhuo.lu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1445837254-6188-6-git-send-email-wenzhuo.lu@intel.com",
    "date": "2015-10-26T05:27:32",
    "name": "[dpdk-dev,v5,5/7] app/testpmd: modify and add fdir filter and mask CLIs for new modes",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "1e5e43d4edd090cc3ecc461ce10c2e8978455d16",
    "submitter": {
        "id": 258,
        "url": "https://patches.dpdk.org/api/people/258/?format=api",
        "name": "Wenzhuo Lu",
        "email": "wenzhuo.lu@intel.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1445837254-6188-6-git-send-email-wenzhuo.lu@intel.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/8013/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/8013/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 416DE8E62;\n\tMon, 26 Oct 2015 06:28:05 +0100 (CET)",
            "from mga14.intel.com (mga14.intel.com [192.55.52.115])\n\tby dpdk.org (Postfix) with ESMTP id 723AF8DA7\n\tfor <dev@dpdk.org>; Mon, 26 Oct 2015 06:28:02 +0100 (CET)",
            "from orsmga003.jf.intel.com ([10.7.209.27])\n\tby fmsmga103.fm.intel.com with ESMTP; 25 Oct 2015 22:27:54 -0700",
            "from shvmail01.sh.intel.com ([10.239.29.42])\n\tby orsmga003.jf.intel.com with ESMTP; 25 Oct 2015 22:27:53 -0700",
            "from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com\n\t[10.239.29.89])\n\tby shvmail01.sh.intel.com with ESMTP id t9Q5RpGo031251;\n\tMon, 26 Oct 2015 13:27:51 +0800",
            "from shecgisg004.sh.intel.com (localhost [127.0.0.1])\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP\n\tid t9Q5Rm4I006258; Mon, 26 Oct 2015 13:27:50 +0800",
            "(from wenzhuol@localhost)\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id t9Q5RmQB006254; \n\tMon, 26 Oct 2015 13:27:48 +0800"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.20,200,1444719600\"; d=\"scan'208\";a=\"671652815\"",
        "From": "Wenzhuo Lu <wenzhuo.lu@intel.com>",
        "To": "dev@dpdk.org",
        "Date": "Mon, 26 Oct 2015 13:27:32 +0800",
        "Message-Id": "<1445837254-6188-6-git-send-email-wenzhuo.lu@intel.com>",
        "X-Mailer": "git-send-email 1.7.4.1",
        "In-Reply-To": "<1445837254-6188-1-git-send-email-wenzhuo.lu@intel.com>",
        "References": "<1443161125-1035-1-git-send-email-wenzhuo.lu@intel.com>\n\t<1445837254-6188-1-git-send-email-wenzhuo.lu@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v5 5/7] app/testpmd: modify and add fdir filter\n\tand mask CLIs for new modes",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "The different fdir mode needs different parameters, so, the parameter *mode*\nis introduced to the CLI flow_director_filter and flow_director_mask. This\nparameter can pormpt the user to input the appropriate parameters for different\nmode.\nPlease be aware, as we should set the fdir mode, the value of the parameter\npkt-filter-mode, when we start testpmd. We cannot set a different mode for\nmask or filter.\n\nThe new CLIs are added for the mac vlan and tunnel modes, like this,\nflow_director_mask X mode MAC-VLAN vlan XXXX mac XX,\nflow_director_mask X mode Tunnel vlan XXXX mac XX tunnel-type X tunnel-id XXXX,\nflow_director_filter X mode MAC-VLAN add/del/update mac XX:XX:XX:XX:XX:XX\nvlan XXXX flexbytes (X,X) fwd/drop queue X fd_id X,\nflow_director_filter X mode Tunnel add/del/update mac XX:XX:XX:XX:XX:XX\nvlan XXXX tunnel NVGRE/VxLAN tunnel-id XXXX flexbytes (X,X) fwd/drop queue X\nfd_id X.\n\nSigned-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>\n---\n app/test-pmd/cmdline.c | 294 ++++++++++++++++++++++++++++++++++++++++++++++---\n 1 file changed, 279 insertions(+), 15 deletions(-)",
    "diff": "diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c\nindex 0f8f48f..b3c36f3 100644\n--- a/app/test-pmd/cmdline.c\n+++ b/app/test-pmd/cmdline.c\n@@ -7725,6 +7725,8 @@ cmdline_parse_inst_t cmd_ethertype_filter = {\n struct cmd_flow_director_result {\n \tcmdline_fixed_string_t flow_director_filter;\n \tuint8_t port_id;\n+\tcmdline_fixed_string_t mode;\n+\tcmdline_fixed_string_t mode_value;\n \tcmdline_fixed_string_t ops;\n \tcmdline_fixed_string_t flow;\n \tcmdline_fixed_string_t flow_type;\n@@ -7747,6 +7749,12 @@ struct cmd_flow_director_result {\n \tuint16_t  queue_id;\n \tcmdline_fixed_string_t fd_id;\n \tuint32_t  fd_id_value;\n+\tcmdline_fixed_string_t mac;\n+\tstruct ether_addr mac_addr;\n+\tcmdline_fixed_string_t tunnel;\n+\tcmdline_fixed_string_t tunnel_type;\n+\tcmdline_fixed_string_t tunnel_id;\n+\tuint32_t tunnel_id_value;\n };\n \n static inline int\n@@ -7818,6 +7826,26 @@ str2flowtype(char *string)\n \treturn RTE_ETH_FLOW_UNKNOWN;\n }\n \n+static uint8_t\n+str2fdir_tunneltype(char *string)\n+{\n+\tuint8_t i = 0;\n+\n+\tstatic const struct {\n+\t\tchar str[32];\n+\t\tuint8_t type;\n+\t} tunneltype_str[] = {\n+\t\t{\"NVGRE\", RTE_FDIR_TUNNEL_TYPE_NVGRE},\n+\t\t{\"VxLAN\", RTE_FDIR_TUNNEL_TYPE_VXLAN},\n+\t};\n+\n+\tfor (i = 0; i < RTE_DIM(tunneltype_str); i++) {\n+\t\tif (!strcmp(tunneltype_str[i].str, string))\n+\t\t\treturn tunneltype_str[i].type;\n+\t}\n+\treturn RTE_FDIR_TUNNEL_TYPE_UNKNOWN;\n+}\n+\n #define IPV4_ADDR_TO_UINT(ip_addr, ip) \\\n do { \\\n \tif ((ip_addr).family == AF_INET) \\\n@@ -7858,6 +7886,25 @@ cmd_flow_director_filter_parsed(void *parsed_result,\n \t}\n \tmemset(flexbytes, 0, sizeof(flexbytes));\n \tmemset(&entry, 0, sizeof(struct rte_eth_fdir_filter));\n+\n+\tif (fdir_conf.mode ==  RTE_FDIR_MODE_PERFECT_MAC_VLAN) {\n+\t\tif (strcmp(res->mode_value, \"MAC-VLAN\")) {\n+\t\t\tprintf(\"Please set mode to MAC-VLAN.\\n\");\n+\t\t\treturn;\n+\t\t}\n+\t} else if (fdir_conf.mode ==  RTE_FDIR_MODE_PERFECT_TUNNEL) {\n+\t\tif (strcmp(res->mode_value, \"Tunnel\")) {\n+\t\t\tprintf(\"Please set mode to Tunnel.\\n\");\n+\t\t\treturn;\n+\t\t}\n+\t} else {\n+\t\tif (strcmp(res->mode_value, \"IP\")) {\n+\t\t\tprintf(\"Please set mode to IP.\\n\");\n+\t\t\treturn;\n+\t\t}\n+\t\tentry.input.flow_type = str2flowtype(res->flow_type);\n+\t}\n+\n \tret = parse_flexbytes(res->flexbytes_value,\n \t\t\t\t\tflexbytes,\n \t\t\t\t\tRTE_ETH_FDIR_MAX_FLEXLEN);\n@@ -7866,7 +7913,6 @@ cmd_flow_director_filter_parsed(void *parsed_result,\n \t\treturn;\n \t}\n \n-\tentry.input.flow_type = str2flowtype(res->flow_type);\n \tswitch (entry.input.flow_type) {\n \tcase RTE_ETH_FLOW_FRAG_IPV4:\n \tcase RTE_ETH_FLOW_NONFRAG_IPV4_OTHER:\n@@ -7927,9 +7973,24 @@ cmd_flow_director_filter_parsed(void *parsed_result,\n \t\t\trte_cpu_to_be_16(res->ether_type);\n \t\tbreak;\n \tdefault:\n-\t\tprintf(\"invalid parameter.\\n\");\n-\t\treturn;\n+\t\tbreak;\n+\t}\n+\n+\tif (fdir_conf.mode ==  RTE_FDIR_MODE_PERFECT_MAC_VLAN)\n+\t\t(void)rte_memcpy(&entry.input.flow.mac_vlan_flow.mac_addr,\n+\t\t\t\t &res->mac_addr,\n+\t\t\t\t sizeof(struct ether_addr));\n+\n+\tif (fdir_conf.mode ==  RTE_FDIR_MODE_PERFECT_TUNNEL) {\n+\t\t(void)rte_memcpy(&entry.input.flow.tunnel_flow.mac_addr,\n+\t\t\t\t &res->mac_addr,\n+\t\t\t\t sizeof(struct ether_addr));\n+\t\tentry.input.flow.tunnel_flow.tunnel_type =\n+\t\t\tstr2fdir_tunneltype(res->tunnel_type);\n+\t\tentry.input.flow.tunnel_flow.tunnel_id =\n+\t\t\trte_cpu_to_be_32(res->tunnel_id_value);\n \t}\n+\n \t(void)rte_memcpy(entry.input.flow_ext.flexbytes,\n \t\t   flexbytes,\n \t\t   RTE_ETH_FDIR_MAX_FLEXLEN);\n@@ -8033,6 +8094,37 @@ cmdline_parse_token_num_t cmd_flow_director_fd_id_value =\n \tTOKEN_NUM_INITIALIZER(struct cmd_flow_director_result,\n \t\t\t      fd_id_value, UINT32);\n \n+cmdline_parse_token_string_t cmd_flow_director_mode =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,\n+\t\t\t\t mode, \"mode\");\n+cmdline_parse_token_string_t cmd_flow_director_mode_ip =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,\n+\t\t\t\t mode_value, \"IP\");\n+cmdline_parse_token_string_t cmd_flow_director_mode_mac_vlan =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,\n+\t\t\t\t mode_value, \"MAC-VLAN\");\n+cmdline_parse_token_string_t cmd_flow_director_mode_tunnel =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,\n+\t\t\t\t mode_value, \"Tunnel\");\n+cmdline_parse_token_string_t cmd_flow_director_mac =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,\n+\t\t\t\t mac, \"mac\");\n+cmdline_parse_token_etheraddr_t cmd_flow_director_mac_addr =\n+\tTOKEN_ETHERADDR_INITIALIZER(struct cmd_flow_director_result,\n+\t\t\t\t    mac_addr);\n+cmdline_parse_token_string_t cmd_flow_director_tunnel =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,\n+\t\t\t\t tunnel, \"tunnel\");\n+cmdline_parse_token_string_t cmd_flow_director_tunnel_type =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,\n+\t\t\t\t tunnel_type, \"NVGRE#VxLAN\");\n+cmdline_parse_token_string_t cmd_flow_director_tunnel_id =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,\n+\t\t\t\t tunnel_id, \"tunnel-id\");\n+cmdline_parse_token_num_t cmd_flow_director_tunnel_id_value =\n+\tTOKEN_NUM_INITIALIZER(struct cmd_flow_director_result,\n+\t\t\t      tunnel_id_value, UINT32);\n+\n cmdline_parse_inst_t cmd_add_del_ip_flow_director = {\n \t.f = cmd_flow_director_filter_parsed,\n \t.data = NULL,\n@@ -8040,6 +8132,8 @@ cmdline_parse_inst_t cmd_add_del_ip_flow_director = {\n \t.tokens = {\n \t\t(void *)&cmd_flow_director_filter,\n \t\t(void *)&cmd_flow_director_port_id,\n+\t\t(void *)&cmd_flow_director_mode,\n+\t\t(void *)&cmd_flow_director_mode_ip,\n \t\t(void *)&cmd_flow_director_ops,\n \t\t(void *)&cmd_flow_director_flow,\n \t\t(void *)&cmd_flow_director_flow_type,\n@@ -8067,6 +8161,8 @@ cmdline_parse_inst_t cmd_add_del_udp_flow_director = {\n \t.tokens = {\n \t\t(void *)&cmd_flow_director_filter,\n \t\t(void *)&cmd_flow_director_port_id,\n+\t\t(void *)&cmd_flow_director_mode,\n+\t\t(void *)&cmd_flow_director_mode_ip,\n \t\t(void *)&cmd_flow_director_ops,\n \t\t(void *)&cmd_flow_director_flow,\n \t\t(void *)&cmd_flow_director_flow_type,\n@@ -8096,6 +8192,8 @@ cmdline_parse_inst_t cmd_add_del_sctp_flow_director = {\n \t.tokens = {\n \t\t(void *)&cmd_flow_director_filter,\n \t\t(void *)&cmd_flow_director_port_id,\n+\t\t(void *)&cmd_flow_director_mode,\n+\t\t(void *)&cmd_flow_director_mode_ip,\n \t\t(void *)&cmd_flow_director_ops,\n \t\t(void *)&cmd_flow_director_flow,\n \t\t(void *)&cmd_flow_director_flow_type,\n@@ -8127,6 +8225,8 @@ cmdline_parse_inst_t cmd_add_del_l2_flow_director = {\n \t.tokens = {\n \t\t(void *)&cmd_flow_director_filter,\n \t\t(void *)&cmd_flow_director_port_id,\n+\t\t(void *)&cmd_flow_director_mode,\n+\t\t(void *)&cmd_flow_director_mode_ip,\n \t\t(void *)&cmd_flow_director_ops,\n \t\t(void *)&cmd_flow_director_flow,\n \t\t(void *)&cmd_flow_director_flow_type,\n@@ -8143,6 +8243,60 @@ cmdline_parse_inst_t cmd_add_del_l2_flow_director = {\n \t},\n };\n \n+cmdline_parse_inst_t cmd_add_del_mac_vlan_flow_director = {\n+\t.f = cmd_flow_director_filter_parsed,\n+\t.data = NULL,\n+\t.help_str = \"add or delete a MAC VLAN flow director entry on NIC\",\n+\t.tokens = {\n+\t\t(void *)&cmd_flow_director_filter,\n+\t\t(void *)&cmd_flow_director_port_id,\n+\t\t(void *)&cmd_flow_director_mode,\n+\t\t(void *)&cmd_flow_director_mode_mac_vlan,\n+\t\t(void *)&cmd_flow_director_ops,\n+\t\t(void *)&cmd_flow_director_mac,\n+\t\t(void *)&cmd_flow_director_mac_addr,\n+\t\t(void *)&cmd_flow_director_vlan,\n+\t\t(void *)&cmd_flow_director_vlan_value,\n+\t\t(void *)&cmd_flow_director_flexbytes,\n+\t\t(void *)&cmd_flow_director_flexbytes_value,\n+\t\t(void *)&cmd_flow_director_drop,\n+\t\t(void *)&cmd_flow_director_queue,\n+\t\t(void *)&cmd_flow_director_queue_id,\n+\t\t(void *)&cmd_flow_director_fd_id,\n+\t\t(void *)&cmd_flow_director_fd_id_value,\n+\t\tNULL,\n+\t},\n+};\n+\n+cmdline_parse_inst_t cmd_add_del_tunnel_flow_director = {\n+\t.f = cmd_flow_director_filter_parsed,\n+\t.data = NULL,\n+\t.help_str = \"add or delete a tunnel flow director entry on NIC\",\n+\t.tokens = {\n+\t\t(void *)&cmd_flow_director_filter,\n+\t\t(void *)&cmd_flow_director_port_id,\n+\t\t(void *)&cmd_flow_director_mode,\n+\t\t(void *)&cmd_flow_director_mode_tunnel,\n+\t\t(void *)&cmd_flow_director_ops,\n+\t\t(void *)&cmd_flow_director_mac,\n+\t\t(void *)&cmd_flow_director_mac_addr,\n+\t\t(void *)&cmd_flow_director_vlan,\n+\t\t(void *)&cmd_flow_director_vlan_value,\n+\t\t(void *)&cmd_flow_director_tunnel,\n+\t\t(void *)&cmd_flow_director_tunnel_type,\n+\t\t(void *)&cmd_flow_director_tunnel_id,\n+\t\t(void *)&cmd_flow_director_tunnel_id_value,\n+\t\t(void *)&cmd_flow_director_flexbytes,\n+\t\t(void *)&cmd_flow_director_flexbytes_value,\n+\t\t(void *)&cmd_flow_director_drop,\n+\t\t(void *)&cmd_flow_director_queue,\n+\t\t(void *)&cmd_flow_director_queue_id,\n+\t\t(void *)&cmd_flow_director_fd_id,\n+\t\t(void *)&cmd_flow_director_fd_id_value,\n+\t\tNULL,\n+\t},\n+};\n+\n struct cmd_flush_flow_director_result {\n \tcmdline_fixed_string_t flush_flow_director;\n \tuint8_t port_id;\n@@ -8192,8 +8346,10 @@ cmdline_parse_inst_t cmd_flush_flow_director = {\n struct cmd_flow_director_mask_result {\n \tcmdline_fixed_string_t flow_director_mask;\n \tuint8_t port_id;\n+\tcmdline_fixed_string_t mode;\n+\tcmdline_fixed_string_t mode_value;\n \tcmdline_fixed_string_t vlan;\n-\tuint16_t vlan_value;\n+\tuint16_t vlan_mask;\n \tcmdline_fixed_string_t src_mask;\n \tcmdline_ipaddr_t ipv4_src;\n \tcmdline_ipaddr_t ipv6_src;\n@@ -8202,6 +8358,12 @@ struct cmd_flow_director_mask_result {\n \tcmdline_ipaddr_t ipv4_dst;\n \tcmdline_ipaddr_t ipv6_dst;\n \tuint16_t port_dst;\n+\tcmdline_fixed_string_t mac;\n+\tuint8_t mac_addr_byte_mask;\n+\tcmdline_fixed_string_t tunnel_id;\n+\tuint32_t tunnel_id_mask;\n+\tcmdline_fixed_string_t tunnel_type;\n+\tuint8_t tunnel_type_mask;\n };\n \n static void\n@@ -8224,15 +8386,41 @@ cmd_flow_director_mask_parsed(void *parsed_result,\n \t\tprintf(\"Please stop port %d first\\n\", res->port_id);\n \t\treturn;\n \t}\n+\n \tmask = &port->dev_conf.fdir_conf.mask;\n \n-\tmask->vlan_tci_mask = res->vlan_value;\n-\tIPV4_ADDR_TO_UINT(res->ipv4_src, mask->ipv4_mask.src_ip);\n-\tIPV4_ADDR_TO_UINT(res->ipv4_dst, mask->ipv4_mask.dst_ip);\n-\tIPV6_ADDR_TO_ARRAY(res->ipv6_src, mask->ipv6_mask.src_ip);\n-\tIPV6_ADDR_TO_ARRAY(res->ipv6_dst, mask->ipv6_mask.dst_ip);\n-\tmask->src_port_mask = res->port_src;\n-\tmask->dst_port_mask = res->port_dst;\n+\tif (fdir_conf.mode ==  RTE_FDIR_MODE_PERFECT_MAC_VLAN) {\n+\t\tif (strcmp(res->mode_value, \"MAC-VLAN\")) {\n+\t\t\tprintf(\"Please set mode to MAC-VLAN.\\n\");\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tmask->vlan_tci_mask = res->vlan_mask;\n+\t\tmask->mac_addr_byte_mask = res->mac_addr_byte_mask;\n+\t} else if (fdir_conf.mode ==  RTE_FDIR_MODE_PERFECT_TUNNEL) {\n+\t\tif (strcmp(res->mode_value, \"Tunnel\")) {\n+\t\t\tprintf(\"Please set mode to Tunnel.\\n\");\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tmask->vlan_tci_mask = res->vlan_mask;\n+\t\tmask->mac_addr_byte_mask = res->mac_addr_byte_mask;\n+\t\tmask->tunnel_id_mask = res->tunnel_id_mask;\n+\t\tmask->tunnel_type_mask = res->tunnel_type_mask;\n+\t} else {\n+\t\tif (strcmp(res->mode_value, \"IP\")) {\n+\t\t\tprintf(\"Please set mode to IP.\\n\");\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tmask->vlan_tci_mask = res->vlan_mask;\n+\t\tIPV4_ADDR_TO_UINT(res->ipv4_src, mask->ipv4_mask.src_ip);\n+\t\tIPV4_ADDR_TO_UINT(res->ipv4_dst, mask->ipv4_mask.dst_ip);\n+\t\tIPV6_ADDR_TO_ARRAY(res->ipv6_src, mask->ipv6_mask.src_ip);\n+\t\tIPV6_ADDR_TO_ARRAY(res->ipv6_dst, mask->ipv6_mask.dst_ip);\n+\t\tmask->src_port_mask = res->port_src;\n+\t\tmask->dst_port_mask = res->port_dst;\n+\t}\n \n \tcmd_reconfig_device_queue(res->port_id, 1, 1);\n }\n@@ -8248,7 +8436,7 @@ cmdline_parse_token_string_t cmd_flow_director_mask_vlan =\n \t\t\t\t vlan, \"vlan\");\n cmdline_parse_token_num_t cmd_flow_director_mask_vlan_value =\n \tTOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result,\n-\t\t\t      vlan_value, UINT16);\n+\t\t\t      vlan_mask, UINT16);\n cmdline_parse_token_string_t cmd_flow_director_mask_src =\n \tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result,\n \t\t\t\t src_mask, \"src_mask\");\n@@ -8273,13 +8461,47 @@ cmdline_parse_token_ipaddr_t cmd_flow_director_mask_ipv6_dst =\n cmdline_parse_token_num_t cmd_flow_director_mask_port_dst =\n \tTOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result,\n \t\t\t      port_dst, UINT16);\n-cmdline_parse_inst_t cmd_set_flow_director_mask = {\n+\n+cmdline_parse_token_string_t cmd_flow_director_mask_mode =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result,\n+\t\t\t\t mode, \"mode\");\n+cmdline_parse_token_string_t cmd_flow_director_mask_mode_ip =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result,\n+\t\t\t\t mode_value, \"IP\");\n+cmdline_parse_token_string_t cmd_flow_director_mask_mode_mac_vlan =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result,\n+\t\t\t\t mode_value, \"MAC-VLAN\");\n+cmdline_parse_token_string_t cmd_flow_director_mask_mode_tunnel =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result,\n+\t\t\t\t mode_value, \"Tunnel\");\n+cmdline_parse_token_string_t cmd_flow_director_mask_mac =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result,\n+\t\t\t\t mac, \"mac\");\n+cmdline_parse_token_num_t cmd_flow_director_mask_mac_value =\n+\tTOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result,\n+\t\t\t      mac_addr_byte_mask, UINT8);\n+cmdline_parse_token_string_t cmd_flow_director_mask_tunnel_type =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result,\n+\t\t\t\t tunnel_type, \"tunnel-type\");\n+cmdline_parse_token_num_t cmd_flow_director_mask_tunnel_type_value =\n+\tTOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result,\n+\t\t\t      tunnel_type_mask, UINT8);\n+cmdline_parse_token_string_t cmd_flow_director_mask_tunnel_id =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result,\n+\t\t\t\t tunnel_id, \"tunnel-id\");\n+cmdline_parse_token_num_t cmd_flow_director_mask_tunnel_id_value =\n+\tTOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result,\n+\t\t\t      tunnel_id_mask, UINT32);\n+\n+cmdline_parse_inst_t cmd_set_flow_director_ip_mask = {\n \t.f = cmd_flow_director_mask_parsed,\n \t.data = NULL,\n-\t.help_str = \"set flow director's mask on NIC\",\n+\t.help_str = \"set IP mode flow director's mask on NIC\",\n \t.tokens = {\n \t\t(void *)&cmd_flow_director_mask,\n \t\t(void *)&cmd_flow_director_mask_port_id,\n+\t\t(void *)&cmd_flow_director_mask_mode,\n+\t\t(void *)&cmd_flow_director_mask_mode_ip,\n \t\t(void *)&cmd_flow_director_mask_vlan,\n \t\t(void *)&cmd_flow_director_mask_vlan_value,\n \t\t(void *)&cmd_flow_director_mask_src,\n@@ -8294,6 +8516,44 @@ cmdline_parse_inst_t cmd_set_flow_director_mask = {\n \t},\n };\n \n+cmdline_parse_inst_t cmd_set_flow_director_mac_vlan_mask = {\n+\t.f = cmd_flow_director_mask_parsed,\n+\t.data = NULL,\n+\t.help_str = \"set MAC VLAN mode flow director's mask on NIC\",\n+\t.tokens = {\n+\t\t(void *)&cmd_flow_director_mask,\n+\t\t(void *)&cmd_flow_director_mask_port_id,\n+\t\t(void *)&cmd_flow_director_mask_mode,\n+\t\t(void *)&cmd_flow_director_mask_mode_mac_vlan,\n+\t\t(void *)&cmd_flow_director_mask_vlan,\n+\t\t(void *)&cmd_flow_director_mask_vlan_value,\n+\t\t(void *)&cmd_flow_director_mask_mac,\n+\t\t(void *)&cmd_flow_director_mask_mac_value,\n+\t\tNULL,\n+\t},\n+};\n+\n+cmdline_parse_inst_t cmd_set_flow_director_tunnel_mask = {\n+\t.f = cmd_flow_director_mask_parsed,\n+\t.data = NULL,\n+\t.help_str = \"set tunnel mode flow director's mask on NIC\",\n+\t.tokens = {\n+\t\t(void *)&cmd_flow_director_mask,\n+\t\t(void *)&cmd_flow_director_mask_port_id,\n+\t\t(void *)&cmd_flow_director_mask_mode,\n+\t\t(void *)&cmd_flow_director_mask_mode_tunnel,\n+\t\t(void *)&cmd_flow_director_mask_vlan,\n+\t\t(void *)&cmd_flow_director_mask_vlan_value,\n+\t\t(void *)&cmd_flow_director_mask_mac,\n+\t\t(void *)&cmd_flow_director_mask_mac_value,\n+\t\t(void *)&cmd_flow_director_mask_tunnel_type,\n+\t\t(void *)&cmd_flow_director_mask_tunnel_type_value,\n+\t\t(void *)&cmd_flow_director_mask_tunnel_id,\n+\t\t(void *)&cmd_flow_director_mask_tunnel_id_value,\n+\t\tNULL,\n+\t},\n+};\n+\n /* *** deal with flow director mask on flexible payload *** */\n struct cmd_flow_director_flex_mask_result {\n \tcmdline_fixed_string_t flow_director_flexmask;\n@@ -9025,8 +9285,12 @@ cmdline_parse_ctx_t main_ctx[] = {\n \t(cmdline_parse_inst_t *)&cmd_add_del_udp_flow_director,\n \t(cmdline_parse_inst_t *)&cmd_add_del_sctp_flow_director,\n \t(cmdline_parse_inst_t *)&cmd_add_del_l2_flow_director,\n+\t(cmdline_parse_inst_t *)&cmd_add_del_mac_vlan_flow_director,\n+\t(cmdline_parse_inst_t *)&cmd_add_del_tunnel_flow_director,\n \t(cmdline_parse_inst_t *)&cmd_flush_flow_director,\n-\t(cmdline_parse_inst_t *)&cmd_set_flow_director_mask,\n+\t(cmdline_parse_inst_t *)&cmd_set_flow_director_ip_mask,\n+\t(cmdline_parse_inst_t *)&cmd_set_flow_director_mac_vlan_mask,\n+\t(cmdline_parse_inst_t *)&cmd_set_flow_director_tunnel_mask,\n \t(cmdline_parse_inst_t *)&cmd_set_flow_director_flex_mask,\n \t(cmdline_parse_inst_t *)&cmd_set_flow_director_flex_payload,\n \t(cmdline_parse_inst_t *)&cmd_get_sym_hash_ena_per_port,\n",
    "prefixes": [
        "dpdk-dev",
        "v5",
        "5/7"
    ]
}