From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by dpdk.org (Postfix) with ESMTP id 4E3FE1D066 for ; Fri, 6 Apr 2018 15:26:09 +0200 (CEST) Received: by mail-wm0-f67.google.com with SMTP id b127so3541694wmf.5 for ; Fri, 06 Apr 2018 06:26:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=Wyk1r6khbe7Rld1g2P34rT0RHYKZN5tajECCHNrac08=; b=GPVs8gVI9E1aOxDRGzoNKrdyFmOwEDkZITEdN2th+sc7/7DIi//93Z5OvDztp2q2I2 Vq4HrtlkAU5v9X1sk3khEjkhpC8rOfmN0i5n2gEE60mPfz1C2RvVkpQXqqmb/2COgDaI ZE+6yYJAFnAr8hye9IYsbV6oex9CyyF3a9g8ixVDj9e9n0QvWxVCt1Wku2nRcWQ5eWFx 7Tmy+HAkWphtQ2w/hYRQ0Q0FS6vgDp0WM9Mfepr0v7pFITiJGxqxjmGpkhx+fRwxe8WK rH7+HkimOOZAmF50B9nMC2JHfW8MYco91pVaJXpflMVhMZKml4rqXO3etewzgYsmcPNQ sJYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=Wyk1r6khbe7Rld1g2P34rT0RHYKZN5tajECCHNrac08=; b=Hr8CCT+k7bWi+IrpnjFR3GMzGzWvnuFo5dq7DB+moNwDeqLsttjPe/tV+PgmGcc1Z4 794zP+pE0mz1dve2NTgNHKtcrOpkg6Op7AULIEne7/ReM2/WIzbB0cCDzcpt4q1OOU0K bAysOPaYm8ZwDeW26soFfUQAnrO8CUV9OdAztiyRgJEts72/nJPm3FPBA/b/n6fVFWOL g/xr1U9s9vNlLoUhUcf7WmS/2mDrblTUqTy0ny64n0pDrAeTMQ05JviBHd1kJBjTbsXt i57uY3eZUYjXpPm3YLgnja6nu5z9nwlevfN+NMs0+URoS+M/eigjxSbZ/29n/Pa3uPt8 D3NQ== X-Gm-Message-State: ALQs6tBAeGT5yycj4/DUwJnU+bS/RXNHn9LRVOCPwpPT4DGcL2XX53zQ mF1HFX+Up6Qm54wnKhKm/5bFDQ== X-Google-Smtp-Source: AIpwx49BIOJilMRx96nEDrQtOcK9SQQPGqAF/SPNHgO6ji9ku+IdRph/gC5ryPerCw8erxvULS2dww== X-Received: by 10.28.170.78 with SMTP id t75mr13199337wme.55.1523021168892; Fri, 06 Apr 2018 06:26:08 -0700 (PDT) Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id m9sm8699451wrf.13.2018.04.06.06.26.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Apr 2018 06:26:08 -0700 (PDT) Date: Fri, 6 Apr 2018 15:25:55 +0200 From: Adrien Mazarguil To: Thomas Monjalon , Ferruh Yigit , dev@dpdk.org Cc: "Zhang, Qi Z" Message-ID: <20180406131736.19145-15-adrien.mazarguil@6wind.com> References: <20180404150312.12304-1-adrien.mazarguil@6wind.com> <20180406131736.19145-1-adrien.mazarguil@6wind.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180406131736.19145-1-adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.11.0 Subject: [dpdk-dev] [PATCH v2 14/15] ethdev: add physical port action to flow API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Apr 2018 13:26:09 -0000 This patch adds the missing action counterpart to the PHY_PORT pattern item, that is, the ability to directly inject matching traffic into a physical port of the underlying device. It breaks ABI compatibility for the following public functions: - rte_flow_copy() - rte_flow_create() - rte_flow_query() - rte_flow_validate() Signed-off-by: Adrien Mazarguil Cc: "Zhang, Qi Z" --- app/test-pmd/cmdline_flow.c | 35 ++++++++++++++++++++++++ app/test-pmd/config.c | 1 + doc/guides/prog_guide/rte_flow.rst | 20 ++++++++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 5 ++++ lib/librte_ether/rte_flow.c | 1 + lib/librte_ether/rte_flow.h | 22 +++++++++++++++ 6 files changed, 84 insertions(+) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index bfe532f0a..c77525ad9 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -182,6 +182,9 @@ enum index { ACTION_VF, ACTION_VF_ORIGINAL, ACTION_VF_ID, + ACTION_PHY_PORT, + ACTION_PHY_PORT_ORIGINAL, + ACTION_PHY_PORT_INDEX, ACTION_METER, ACTION_METER_ID, }; @@ -623,6 +626,7 @@ static const enum index next_action[] = { ACTION_RSS, ACTION_PF, ACTION_VF, + ACTION_PHY_PORT, ACTION_METER, ZERO, }; @@ -657,6 +661,13 @@ static const enum index action_vf[] = { ZERO, }; +static const enum index action_phy_port[] = { + ACTION_PHY_PORT_ORIGINAL, + ACTION_PHY_PORT_INDEX, + ACTION_NEXT, + ZERO, +}; + static const enum index action_meter[] = { ACTION_METER_ID, ACTION_NEXT, @@ -1714,6 +1725,30 @@ static const struct token token_list[] = { .args = ARGS(ARGS_ENTRY(struct rte_flow_action_vf, id)), .call = parse_vc_conf, }, + [ACTION_PHY_PORT] = { + .name = "phy_port", + .help = "direct packets to physical port index", + .priv = PRIV_ACTION(PHY_PORT, + sizeof(struct rte_flow_action_phy_port)), + .next = NEXT(action_phy_port), + .call = parse_vc, + }, + [ACTION_PHY_PORT_ORIGINAL] = { + .name = "original", + .help = "use original port index if possible", + .next = NEXT(action_phy_port, NEXT_ENTRY(BOOLEAN)), + .args = ARGS(ARGS_ENTRY_BF(struct rte_flow_action_phy_port, + original, 1)), + .call = parse_vc_conf, + }, + [ACTION_PHY_PORT_INDEX] = { + .name = "index", + .help = "physical port index", + .next = NEXT(action_phy_port, NEXT_ENTRY(UNSIGNED)), + .args = ARGS(ARGS_ENTRY(struct rte_flow_action_phy_port, + index)), + .call = parse_vc_conf, + }, [ACTION_METER] = { .name = "meter", .help = "meter the directed packets at given id", diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 9f968919e..effb4ff81 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -1058,6 +1058,7 @@ static const struct { MK_FLOW_ACTION(RSS, sizeof(struct rte_flow_action_rss)), MK_FLOW_ACTION(PF, 0), MK_FLOW_ACTION(VF, sizeof(struct rte_flow_action_vf)), + MK_FLOW_ACTION(PHY_PORT, sizeof(struct rte_flow_action_phy_port)), MK_FLOW_ACTION(METER, sizeof(struct rte_flow_action_meter)), }; diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index 656d4b5b7..ec59d0f3c 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -1417,6 +1417,26 @@ See `Item: VF`_. | ``id`` | VF ID | +--------------+--------------------------------+ +Action: ``PHY_PORT`` +^^^^^^^^^^^^^^^^^^^^ + +Directs matching traffic to a given physical port index of the underlying +device. + +See `Item: PHY_PORT`_. + +.. _table_rte_flow_action_phy_port: + +.. table:: PHY_PORT + + +--------------+-------------------------------------+ + | Field | Value | + +==============+=====================================+ + | ``original`` | use original port index if possible | + +--------------+-------------------------------------+ + | ``index`` | physical port index | + +--------------+-------------------------------------+ + Action: ``METER`` ^^^^^^^^^^^^^^^^^ diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 1d9ce6963..ca23ba146 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -3421,6 +3421,11 @@ This section lists supported actions and their attributes, if any. - ``original {boolean}``: use original VF ID if possible. - ``id {unsigned}``: VF ID. +- ``phy_port``: direct packets to physical port index. + + - ``original {boolean}``: use original port index if possible. + - ``index {unsigned}``: physical port index. + Destroying flow rules ~~~~~~~~~~~~~~~~~~~~~ diff --git a/lib/librte_ether/rte_flow.c b/lib/librte_ether/rte_flow.c index 6d4d7f5ed..e0fd78dd5 100644 --- a/lib/librte_ether/rte_flow.c +++ b/lib/librte_ether/rte_flow.c @@ -76,6 +76,7 @@ static const struct rte_flow_desc_data rte_flow_desc_action[] = { MK_FLOW_ACTION(RSS, sizeof(struct rte_flow_action_rss)), MK_FLOW_ACTION(PF, 0), MK_FLOW_ACTION(VF, sizeof(struct rte_flow_action_vf)), + MK_FLOW_ACTION(PHY_PORT, sizeof(struct rte_flow_action_phy_port)), }; static int diff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h index cd4cde3fa..68a13ffa9 100644 --- a/lib/librte_ether/rte_flow.h +++ b/lib/librte_ether/rte_flow.h @@ -985,6 +985,14 @@ enum rte_flow_action_type { RTE_FLOW_ACTION_TYPE_VF, /** + * Directs packets to a given physical port index of the underlying + * device. + * + * See struct rte_flow_action_phy_port. + */ + RTE_FLOW_ACTION_TYPE_PHY_PORT, + + /** * Traffic metering and policing (MTR). * * See struct rte_flow_action_meter. @@ -1102,6 +1110,20 @@ struct rte_flow_action_vf { }; /** + * RTE_FLOW_ACTION_TYPE_PHY_PORT + * + * Directs packets to a given physical port index of the underlying + * device. + * + * @see RTE_FLOW_ITEM_TYPE_PHY_PORT + */ +struct rte_flow_action_phy_port { + uint32_t original:1; /**< Use original port index if possible. */ + uint32_t reserved:31; /**< Reserved, must be zero. */ + uint32_t index; /**< Physical port index. */ +}; + +/** * RTE_FLOW_ACTION_TYPE_METER * * Traffic metering and policing (MTR). -- 2.11.0