get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 25019,
    "url": "https://patches.dpdk.org/api/patches/25019/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1496385391-12445-3-git-send-email-wei.zhao1@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": "<1496385391-12445-3-git-send-email-wei.zhao1@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1496385391-12445-3-git-send-email-wei.zhao1@intel.com",
    "date": "2017-06-02T06:36:22",
    "name": "[dpdk-dev,v2,02/11] net/e1000: restore n-tuple filter",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "cc1562507f95da7cf53e016f2db01e42870f43f5",
    "submitter": {
        "id": 495,
        "url": "https://patches.dpdk.org/api/people/495/?format=api",
        "name": "Zhao1, Wei",
        "email": "wei.zhao1@intel.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1496385391-12445-3-git-send-email-wei.zhao1@intel.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/25019/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/25019/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 66E637D00;\n\tFri,  2 Jun 2017 08:45:39 +0200 (CEST)",
            "from mga02.intel.com (mga02.intel.com [134.134.136.20])\n\tby dpdk.org (Postfix) with ESMTP id 285D77D02\n\tfor <dev@dpdk.org>; Fri,  2 Jun 2017 08:45:32 +0200 (CEST)",
            "from fmsmga006.fm.intel.com ([10.253.24.20])\n\tby orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t01 Jun 2017 23:45:32 -0700",
            "from dpdk1.bj.intel.com ([172.16.182.84])\n\tby fmsmga006.fm.intel.com with ESMTP; 01 Jun 2017 23:45:31 -0700"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.39,283,1493708400\"; d=\"scan'208\";a=\"110013424\"",
        "From": "Wei Zhao <wei.zhao1@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "wenzhuo.lu@intel.com,\n\tWei Zhao <wei.zhao1@intel.com>",
        "Date": "Fri,  2 Jun 2017 14:36:22 +0800",
        "Message-Id": "<1496385391-12445-3-git-send-email-wei.zhao1@intel.com>",
        "X-Mailer": "git-send-email 2.5.5",
        "In-Reply-To": "<1496385391-12445-1-git-send-email-wei.zhao1@intel.com>",
        "References": "<1495523581-56027-1-git-send-email-wei.zhao1@intel.com>\n\t<1496385391-12445-1-git-send-email-wei.zhao1@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v2 02/11] net/e1000: restore n-tuple filter",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <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": "Add support for restoring n-tuple\nfilter in SW.\n\nSigned-off-by: Wei Zhao <wei.zhao1@intel.com>\n---\n drivers/net/e1000/igb_ethdev.c | 262 +++++++++++++++++++++++++----------------\n 1 file changed, 159 insertions(+), 103 deletions(-)",
    "diff": "diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c\nindex 1077870..1e321d6 100644\n--- a/drivers/net/e1000/igb_ethdev.c\n+++ b/drivers/net/e1000/igb_ethdev.c\n@@ -757,6 +757,35 @@ igb_reset_swfw_lock(struct e1000_hw *hw)\n \treturn E1000_SUCCESS;\n }\n \n+/* Remove all ntuple filters of the device */\n+static int igb_ntuple_filter_uninit(struct rte_eth_dev *eth_dev)\n+{\n+\tstruct e1000_filter_info *filter_info =\n+\t\tE1000_DEV_PRIVATE_TO_FILTER_INFO(eth_dev->data->dev_private);\n+\n+\tstruct e1000_5tuple_filter *p_5tuple, *p_5tuple_next;\n+\tstruct e1000_2tuple_filter *p_2tuple, *p_2tuple_next;\n+\n+\tfor (p_5tuple = TAILQ_FIRST(&filter_info->fivetuple_list);\n+\t     p_5tuple != NULL; p_5tuple = p_5tuple_next) {\n+\t\tp_5tuple_next = TAILQ_NEXT(p_5tuple, entries);\n+\t\tTAILQ_REMOVE(&filter_info->fivetuple_list,\n+\t\t\t     p_5tuple, entries);\n+\t\trte_free(p_5tuple);\n+\t}\n+\tfilter_info->fivetuple_mask = 0;\n+\tfor (p_2tuple = TAILQ_FIRST(&filter_info->twotuple_list);\n+\t     p_2tuple != NULL; p_2tuple = p_2tuple_next) {\n+\t\tp_2tuple_next = TAILQ_NEXT(p_2tuple, entries);\n+\t\tTAILQ_REMOVE(&filter_info->twotuple_list,\n+\t\t\t     p_2tuple, entries);\n+\t\trte_free(p_2tuple);\n+\t}\n+\tfilter_info->twotuple_mask = 0;\n+\n+\treturn 0;\n+}\n+\n static int\n eth_igb_dev_init(struct rte_eth_dev *eth_dev)\n {\n@@ -967,6 +996,9 @@ eth_igb_dev_uninit(struct rte_eth_dev *eth_dev)\n \t/* clear the SYN filter info */\n \tfilter_info->syn_info = 0;\n \n+\t/* remove all ntuple filters of the device */\n+\tigb_ntuple_filter_uninit(eth_dev);\n+\n \treturn 0;\n }\n \n@@ -1474,8 +1506,6 @@ eth_igb_stop(struct rte_eth_dev *dev)\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);\n \tstruct rte_eth_link link;\n \tstruct e1000_flex_filter *p_flex;\n-\tstruct e1000_5tuple_filter *p_5tuple, *p_5tuple_next;\n-\tstruct e1000_2tuple_filter *p_2tuple, *p_2tuple_next;\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n \n \tigb_intr_disable(hw);\n@@ -1511,24 +1541,6 @@ eth_igb_stop(struct rte_eth_dev *dev)\n \t}\n \tfilter_info->flex_mask = 0;\n \n-\t/* Remove all ntuple filters of the device */\n-\tfor (p_5tuple = TAILQ_FIRST(&filter_info->fivetuple_list);\n-\t     p_5tuple != NULL; p_5tuple = p_5tuple_next) {\n-\t\tp_5tuple_next = TAILQ_NEXT(p_5tuple, entries);\n-\t\tTAILQ_REMOVE(&filter_info->fivetuple_list,\n-\t\t\t     p_5tuple, entries);\n-\t\trte_free(p_5tuple);\n-\t}\n-\tfilter_info->fivetuple_mask = 0;\n-\tfor (p_2tuple = TAILQ_FIRST(&filter_info->twotuple_list);\n-\t     p_2tuple != NULL; p_2tuple = p_2tuple_next) {\n-\t\tp_2tuple_next = TAILQ_NEXT(p_2tuple, entries);\n-\t\tTAILQ_REMOVE(&filter_info->twotuple_list,\n-\t\t\t     p_2tuple, entries);\n-\t\trte_free(p_2tuple);\n-\t}\n-\tfilter_info->twotuple_mask = 0;\n-\n \tif (!rte_intr_allow_others(intr_handle))\n \t\t/* resume to the default handler */\n \t\trte_intr_callback_register(intr_handle,\n@@ -3737,6 +3749,54 @@ igb_2tuple_filter_lookup(struct e1000_2tuple_filter_list *filter_list,\n \treturn NULL;\n }\n \n+/* inject a igb 2tuple filter to HW */\n+static inline void\n+igb_inject_2uple_filter(struct rte_eth_dev *dev,\n+\t\t\t   struct e1000_2tuple_filter *filter)\n+{\n+\tstruct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n+\tuint32_t ttqf = E1000_TTQF_DISABLE_MASK;\n+\tuint32_t imir, imir_ext = E1000_IMIREXT_SIZE_BP;\n+\tint i;\n+\n+\ti = filter->index;\n+\timir = (uint32_t)(filter->filter_info.dst_port & E1000_IMIR_DSTPORT);\n+\tif (filter->filter_info.dst_port_mask == 1) /* 1b means not compare. */\n+\t\timir |= E1000_IMIR_PORT_BP;\n+\telse\n+\t\timir &= ~E1000_IMIR_PORT_BP;\n+\n+\timir |= filter->filter_info.priority << E1000_IMIR_PRIORITY_SHIFT;\n+\n+\tttqf |= E1000_TTQF_QUEUE_ENABLE;\n+\tttqf |= (uint32_t)(filter->queue << E1000_TTQF_QUEUE_SHIFT);\n+\tttqf |= (uint32_t)(filter->filter_info.proto &\n+\t\t\t\t\t\tE1000_TTQF_PROTOCOL_MASK);\n+\tif (filter->filter_info.proto_mask == 0)\n+\t\tttqf &= ~E1000_TTQF_MASK_ENABLE;\n+\n+\t/* tcp flags bits setting. */\n+\tif (filter->filter_info.tcp_flags & TCP_FLAG_ALL) {\n+\t\tif (filter->filter_info.tcp_flags & TCP_URG_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_URG;\n+\t\tif (filter->filter_info.tcp_flags & TCP_ACK_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_ACK;\n+\t\tif (filter->filter_info.tcp_flags & TCP_PSH_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_PSH;\n+\t\tif (filter->filter_info.tcp_flags & TCP_RST_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_RST;\n+\t\tif (filter->filter_info.tcp_flags & TCP_SYN_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_SYN;\n+\t\tif (filter->filter_info.tcp_flags & TCP_FIN_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_FIN;\n+\t} else {\n+\t\timir_ext |= E1000_IMIREXT_CTRL_BP;\n+\t}\n+\tE1000_WRITE_REG(hw, E1000_IMIR(i), imir);\n+\tE1000_WRITE_REG(hw, E1000_TTQF(i), ttqf);\n+\tE1000_WRITE_REG(hw, E1000_IMIREXT(i), imir_ext);\n+}\n+\n /*\n  * igb_add_2tuple_filter - add a 2tuple filter\n  *\n@@ -3752,12 +3812,9 @@ static int\n igb_add_2tuple_filter(struct rte_eth_dev *dev,\n \t\t\tstruct rte_eth_ntuple_filter *ntuple_filter)\n {\n-\tstruct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \tstruct e1000_filter_info *filter_info =\n \t\tE1000_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private);\n \tstruct e1000_2tuple_filter *filter;\n-\tuint32_t ttqf = E1000_TTQF_DISABLE_MASK;\n-\tuint32_t imir, imir_ext = E1000_IMIREXT_SIZE_BP;\n \tint i, ret;\n \n \tfilter = rte_zmalloc(\"e1000_2tuple_filter\",\n@@ -3799,39 +3856,7 @@ igb_add_2tuple_filter(struct rte_eth_dev *dev,\n \t\treturn -ENOSYS;\n \t}\n \n-\timir = (uint32_t)(filter->filter_info.dst_port & E1000_IMIR_DSTPORT);\n-\tif (filter->filter_info.dst_port_mask == 1) /* 1b means not compare. */\n-\t\timir |= E1000_IMIR_PORT_BP;\n-\telse\n-\t\timir &= ~E1000_IMIR_PORT_BP;\n-\n-\timir |= filter->filter_info.priority << E1000_IMIR_PRIORITY_SHIFT;\n-\n-\tttqf |= E1000_TTQF_QUEUE_ENABLE;\n-\tttqf |= (uint32_t)(filter->queue << E1000_TTQF_QUEUE_SHIFT);\n-\tttqf |= (uint32_t)(filter->filter_info.proto & E1000_TTQF_PROTOCOL_MASK);\n-\tif (filter->filter_info.proto_mask == 0)\n-\t\tttqf &= ~E1000_TTQF_MASK_ENABLE;\n-\n-\t/* tcp flags bits setting. */\n-\tif (filter->filter_info.tcp_flags & TCP_FLAG_ALL) {\n-\t\tif (filter->filter_info.tcp_flags & TCP_URG_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_URG;\n-\t\tif (filter->filter_info.tcp_flags & TCP_ACK_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_ACK;\n-\t\tif (filter->filter_info.tcp_flags & TCP_PSH_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_PSH;\n-\t\tif (filter->filter_info.tcp_flags & TCP_RST_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_RST;\n-\t\tif (filter->filter_info.tcp_flags & TCP_SYN_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_SYN;\n-\t\tif (filter->filter_info.tcp_flags & TCP_FIN_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_FIN;\n-\t} else\n-\t\timir_ext |= E1000_IMIREXT_CTRL_BP;\n-\tE1000_WRITE_REG(hw, E1000_IMIR(i), imir);\n-\tE1000_WRITE_REG(hw, E1000_TTQF(i), ttqf);\n-\tE1000_WRITE_REG(hw, E1000_IMIREXT(i), imir_ext);\n+\tigb_inject_2uple_filter(dev, filter);\n \treturn 0;\n }\n \n@@ -4205,6 +4230,64 @@ igb_5tuple_filter_lookup_82576(struct e1000_5tuple_filter_list *filter_list,\n \treturn NULL;\n }\n \n+/* inject a igb 5-tuple filter to HW */\n+static inline void\n+igb_inject_5tuple_filter_82576(struct rte_eth_dev *dev,\n+\t\t\t   struct e1000_5tuple_filter *filter)\n+{\n+\tstruct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n+\tuint32_t ftqf = E1000_FTQF_VF_BP | E1000_FTQF_MASK;\n+\tuint32_t spqf, imir, imir_ext = E1000_IMIREXT_SIZE_BP;\n+\tuint8_t i;\n+\n+\ti = filter->index;\n+\tftqf |= filter->filter_info.proto & E1000_FTQF_PROTOCOL_MASK;\n+\tif (filter->filter_info.src_ip_mask == 0) /* 0b means compare. */\n+\t\tftqf &= ~E1000_FTQF_MASK_SOURCE_ADDR_BP;\n+\tif (filter->filter_info.dst_ip_mask == 0)\n+\t\tftqf &= ~E1000_FTQF_MASK_DEST_ADDR_BP;\n+\tif (filter->filter_info.src_port_mask == 0)\n+\t\tftqf &= ~E1000_FTQF_MASK_SOURCE_PORT_BP;\n+\tif (filter->filter_info.proto_mask == 0)\n+\t\tftqf &= ~E1000_FTQF_MASK_PROTO_BP;\n+\tftqf |= (filter->queue << E1000_FTQF_QUEUE_SHIFT) &\n+\t\tE1000_FTQF_QUEUE_MASK;\n+\tftqf |= E1000_FTQF_QUEUE_ENABLE;\n+\tE1000_WRITE_REG(hw, E1000_FTQF(i), ftqf);\n+\tE1000_WRITE_REG(hw, E1000_DAQF(i), filter->filter_info.dst_ip);\n+\tE1000_WRITE_REG(hw, E1000_SAQF(i), filter->filter_info.src_ip);\n+\n+\tspqf = filter->filter_info.src_port & E1000_SPQF_SRCPORT;\n+\tE1000_WRITE_REG(hw, E1000_SPQF(i), spqf);\n+\n+\timir = (uint32_t)(filter->filter_info.dst_port & E1000_IMIR_DSTPORT);\n+\tif (filter->filter_info.dst_port_mask == 1) /* 1b means not compare. */\n+\t\timir |= E1000_IMIR_PORT_BP;\n+\telse\n+\t\timir &= ~E1000_IMIR_PORT_BP;\n+\timir |= filter->filter_info.priority << E1000_IMIR_PRIORITY_SHIFT;\n+\n+\t/* tcp flags bits setting. */\n+\tif (filter->filter_info.tcp_flags & TCP_FLAG_ALL) {\n+\t\tif (filter->filter_info.tcp_flags & TCP_URG_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_URG;\n+\t\tif (filter->filter_info.tcp_flags & TCP_ACK_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_ACK;\n+\t\tif (filter->filter_info.tcp_flags & TCP_PSH_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_PSH;\n+\t\tif (filter->filter_info.tcp_flags & TCP_RST_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_RST;\n+\t\tif (filter->filter_info.tcp_flags & TCP_SYN_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_SYN;\n+\t\tif (filter->filter_info.tcp_flags & TCP_FIN_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_FIN;\n+\t} else {\n+\t\timir_ext |= E1000_IMIREXT_CTRL_BP;\n+\t}\n+\tE1000_WRITE_REG(hw, E1000_IMIR(i), imir);\n+\tE1000_WRITE_REG(hw, E1000_IMIREXT(i), imir_ext);\n+}\n+\n /*\n  * igb_add_5tuple_filter_82576 - add a 5tuple filter\n  *\n@@ -4220,12 +4303,9 @@ static int\n igb_add_5tuple_filter_82576(struct rte_eth_dev *dev,\n \t\t\tstruct rte_eth_ntuple_filter *ntuple_filter)\n {\n-\tstruct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \tstruct e1000_filter_info *filter_info =\n \t\tE1000_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private);\n \tstruct e1000_5tuple_filter *filter;\n-\tuint32_t ftqf = E1000_FTQF_VF_BP | E1000_FTQF_MASK;\n-\tuint32_t spqf, imir, imir_ext = E1000_IMIREXT_SIZE_BP;\n \tuint8_t i;\n \tint ret;\n \n@@ -4269,50 +4349,7 @@ igb_add_5tuple_filter_82576(struct rte_eth_dev *dev,\n \t\treturn -ENOSYS;\n \t}\n \n-\tftqf |= filter->filter_info.proto & E1000_FTQF_PROTOCOL_MASK;\n-\tif (filter->filter_info.src_ip_mask == 0) /* 0b means compare. */\n-\t\tftqf &= ~E1000_FTQF_MASK_SOURCE_ADDR_BP;\n-\tif (filter->filter_info.dst_ip_mask == 0)\n-\t\tftqf &= ~E1000_FTQF_MASK_DEST_ADDR_BP;\n-\tif (filter->filter_info.src_port_mask == 0)\n-\t\tftqf &= ~E1000_FTQF_MASK_SOURCE_PORT_BP;\n-\tif (filter->filter_info.proto_mask == 0)\n-\t\tftqf &= ~E1000_FTQF_MASK_PROTO_BP;\n-\tftqf |= (filter->queue << E1000_FTQF_QUEUE_SHIFT) &\n-\t\tE1000_FTQF_QUEUE_MASK;\n-\tftqf |= E1000_FTQF_QUEUE_ENABLE;\n-\tE1000_WRITE_REG(hw, E1000_FTQF(i), ftqf);\n-\tE1000_WRITE_REG(hw, E1000_DAQF(i), filter->filter_info.dst_ip);\n-\tE1000_WRITE_REG(hw, E1000_SAQF(i), filter->filter_info.src_ip);\n-\n-\tspqf = filter->filter_info.src_port & E1000_SPQF_SRCPORT;\n-\tE1000_WRITE_REG(hw, E1000_SPQF(i), spqf);\n-\n-\timir = (uint32_t)(filter->filter_info.dst_port & E1000_IMIR_DSTPORT);\n-\tif (filter->filter_info.dst_port_mask == 1) /* 1b means not compare. */\n-\t\timir |= E1000_IMIR_PORT_BP;\n-\telse\n-\t\timir &= ~E1000_IMIR_PORT_BP;\n-\timir |= filter->filter_info.priority << E1000_IMIR_PRIORITY_SHIFT;\n-\n-\t/* tcp flags bits setting. */\n-\tif (filter->filter_info.tcp_flags & TCP_FLAG_ALL) {\n-\t\tif (filter->filter_info.tcp_flags & TCP_URG_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_URG;\n-\t\tif (filter->filter_info.tcp_flags & TCP_ACK_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_ACK;\n-\t\tif (filter->filter_info.tcp_flags & TCP_PSH_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_PSH;\n-\t\tif (filter->filter_info.tcp_flags & TCP_RST_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_RST;\n-\t\tif (filter->filter_info.tcp_flags & TCP_SYN_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_SYN;\n-\t\tif (filter->filter_info.tcp_flags & TCP_FIN_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_FIN;\n-\t} else\n-\t\timir_ext |= E1000_IMIREXT_CTRL_BP;\n-\tE1000_WRITE_REG(hw, E1000_IMIR(i), imir);\n-\tE1000_WRITE_REG(hw, E1000_IMIREXT(i), imir_ext);\n+\tigb_inject_5tuple_filter_82576(dev, filter);\n \treturn 0;\n }\n \n@@ -5437,6 +5474,24 @@ eth_igb_configure_msix_intr(struct rte_eth_dev *dev)\n \tE1000_WRITE_FLUSH(hw);\n }\n \n+/* restore n-tuple filter */\n+static inline void\n+igb_ntuple_filter_restore(struct rte_eth_dev *dev)\n+{\n+\tstruct e1000_filter_info *filter_info =\n+\t\tE1000_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private);\n+\tstruct e1000_5tuple_filter *p_5tuple;\n+\tstruct e1000_2tuple_filter *p_2tuple;\n+\n+\tTAILQ_FOREACH(p_5tuple, &filter_info->fivetuple_list, entries) {\n+\t\tigb_inject_5tuple_filter_82576(dev, p_5tuple);\n+\t}\n+\n+\tTAILQ_FOREACH(p_2tuple, &filter_info->twotuple_list, entries) {\n+\t\tigb_inject_2uple_filter(dev, p_2tuple);\n+\t}\n+}\n+\n /* restore SYN filter */\n static inline void\n igb_syn_filter_restore(struct rte_eth_dev *dev)\n@@ -5458,6 +5513,7 @@ igb_syn_filter_restore(struct rte_eth_dev *dev)\n static int\n igb_filter_restore(struct rte_eth_dev *dev)\n {\n+\tigb_ntuple_filter_restore(dev);\n \tigb_syn_filter_restore(dev);\n \n \treturn 0;\n",
    "prefixes": [
        "dpdk-dev",
        "v2",
        "02/11"
    ]
}