From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E3E30A04BA; Wed, 7 Oct 2020 13:34:55 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B97291B3E7; Wed, 7 Oct 2020 13:34:54 +0200 (CEST) Received: from hqnvemgate24.nvidia.com (hqnvemgate24.nvidia.com [216.228.121.143]) by dpdk.org (Postfix) with ESMTP id E4FF41B733 for ; Wed, 7 Oct 2020 13:34:52 +0200 (CEST) Received: from hqmail.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate24.nvidia.com (using TLS: TLSv1.2, AES256-SHA) id ; Wed, 07 Oct 2020 04:33:02 -0700 Received: from HQMAIL109.nvidia.com (172.20.187.15) by HQMAIL105.nvidia.com (172.20.187.12) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Wed, 7 Oct 2020 11:34:45 +0000 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.106) by HQMAIL109.nvidia.com (172.20.187.15) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Wed, 7 Oct 2020 11:34:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W581wG22mrXZFz56I5V66XDzTD5E7jYxcROY+Voe1mkrJULpaUs2NeJfBMZFgHLt64YZvrP5T97fpS8PkGWNbAkGo72yEoTrd0lYQ89/f2PIXvTJDDgwqPD6PQM/eYh2SOLzz+PGXXsCNnSmEsJ08UFAqRyKmWZhXQ7XcIqnGtD2d9pw2fkmT/eQJ2wSrDWK2e01EtfLQsyDXZNcRc/Eq4gzOZsG9s/A+IhAEhmsoQDx2MHI+3LWKVzkT270wQqpSnoDZZKDkiGt/1jDAk0CL61ITuzS1EweVRvBta/aXWf+lLj29Z4VTwLtk0M9ufmq4YCLs2vHOBq04I+sD+BHCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VnYBtiXI/6Mje8Z0oagNDJcwcvcQ6eWj7vCGf7T4jDk=; b=hYFJuujqUCJOFt6qkDKe3+xeonWUQuJoG3gYyML3js7aOF0u4GO49zB22wmGzpDW1YAIsSJ9UXLpD5K+Lgb0zAl17dl0MFGyzkz5+9ZawoXf57MDisPR23Neggh/w1RV7kkwcKCBHm9ZrtNRv5Fl/TjttLS4xMNhONk321ErYA9g5DI801qcoGow2zVQZFZayY9Jim64fE0/nWa3hMwTM53Q5IwSSnYc1twLw1ySbHsOTA+4lNXfrsvaCrbMPyKpxQys4QN4MhqYzMqQNK6F6/r14SlF8PbFHCsetD5HjjhKc5E+A1X9w2pNr+rPQ0gzK51rKF3dJeADxuhYLhrNew== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none Received: from CY4PR1201MB0072.namprd12.prod.outlook.com (2603:10b6:910:1b::19) by CY4PR12MB1528.namprd12.prod.outlook.com (2603:10b6:910:6::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3433.34; Wed, 7 Oct 2020 11:34:44 +0000 Received: from CY4PR1201MB0072.namprd12.prod.outlook.com ([fe80::f1b2:c80a:e623:e613]) by CY4PR1201MB0072.namprd12.prod.outlook.com ([fe80::f1b2:c80a:e623:e613%11]) with mapi id 15.20.3433.045; Wed, 7 Oct 2020 11:34:44 +0000 From: Bing Zhao To: Ori Kam , NBU-Contact-Thomas Monjalon , "ferruh.yigit@intel.com" , "arybchenko@solarflare.com" , "mdr@ashroe.eu" , "nhorman@tuxdriver.com" , "bernard.iremonger@intel.com" , "beilei.xing@intel.com" , "wenzhuo.lu@intel.com" CC: "dev@dpdk.org" Thread-Topic: [PATCH 3/4] ethdev: add APIs for hairpin queue operation Thread-Index: AQHWmjGeWkZ1vKV4oEajb0oZKFqo/qmMBxQQ Date: Wed, 7 Oct 2020 11:34:44 +0000 Message-ID: References: <1600012140-70151-1-git-send-email-bingz@nvidia.com> <1601511962-21532-1-git-send-email-bingz@nvidia.com> <1601511962-21532-4-git-send-email-bingz@nvidia.com> In-Reply-To: Accept-Language: en-US, zh-CN Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: nvidia.com; dkim=none (message not signed) header.d=none;nvidia.com; dmarc=none action=none header.from=nvidia.com; x-originating-ip: [154.18.172.130] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 641336ad-3360-4b6b-86c7-08d86ab4fd2f x-ms-traffictypediagnostic: CY4PR12MB1528: x-ld-processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: M+fRhDGBsQQouvNjGp/PnpHujE/5peWcRcgBG6PTMN7N1cnk8vIDoHW64u3WQ8Od5G3W1Q15gXN2pmKrlGRh3EdK+vnDRJH8A19pmn68BtF1qVtHEuDXFaCMGY4Y+CEw67Rh7ZXkCDXVUjZX1zjQs2J7/DjGSJQN0ubFBQ7iBg10G1+4cqYjK3grcoQiCwvztwJxkTqMXxDXoCTkOVQekgpMzle5AeWXZFugEjhM1dwj0gllKda5WY9tQMuRvn3Uj+E6NcDq8802k662JGZi/KONmZa7K+9zeVDFcvPYEUPteDndWQFYCyDbtB6/oKST77OnlJ+gLzmFioFn/bQDWQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY4PR1201MB0072.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(396003)(376002)(346002)(366004)(39850400004)(66446008)(2906002)(9686003)(478600001)(8676002)(55016002)(8936002)(4326008)(66556008)(6506007)(66946007)(64756008)(71200400001)(110136005)(33656002)(76116006)(83380400001)(86362001)(186003)(66476007)(316002)(26005)(52536014)(5660300002)(30864003)(7696005)(53546011); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: 34t3hbRRSM42RO24+gc0LyWJaGqcrqUCSzv8TDAdCccjnimEpoVJcpLy5ZW0kZAM171trnhP32VMPeeA8rd2amwWuruY+0J4H6vx5O6tRkkrTYaGqrVu1ArUtNC5glHt4NRZ8yxNFXHveRmnHx932+AAsno55xTV/JIWm6MG24aE0+bkTkoSjCIRMCeW8odH/fJHKshkEawSfApD9A1nzA+mGp6oM1qSebv6IQ48gu0T4oAOR5DlZkOFd9yh0yC5nd/f9KbbmydzRgrI1eXmkGB5ojG5VHPHPOOdKk6+xoXYj+0BlYeM6TaEr4CWlT4xXOSMZ0i8pD9T2QTIprbGwlQWAxGzdPkyTqWAVol01Carcnoa6KiUxazwGh1+H/dkP41IpNJsxYS8bGhIvk0xKoDY5Q82yUGxr4ZSqpElCduLgs3WeNz235qCtPn6osRwD84/n4zi7yGsD5x8BC5NYO5e3vNggRTlpxaZIqk/YTKzPfSYfJHT6ZOpuRzenm1i7k4e3fU9VRRrDyPG0fuIs4FLIstmfWLFHE7oat0bqEqfjXLaSW0R06iUQaOHO3eQfLEXQ4e8674vEXoMFqUY2pgPxkkHgb071ruuQOK3ndsqYpREnpRug1FnS2aeJrUoDiOYGBypvz3mtSkvnucAgA== Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR1201MB0072.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 641336ad-3360-4b6b-86c7-08d86ab4fd2f X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Oct 2020 11:34:44.6153 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: trdJY/HpwhD/P+F6cB6tQsQXZfLFG4Kz+vyFTtG+gKR4mnGYexE7almHYWasDyNlUY4DyMjbbPpkQZEG25JpOw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1528 X-OriginatorOrg: Nvidia.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1602070382; bh=VnYBtiXI/6Mje8Z0oagNDJcwcvcQ6eWj7vCGf7T4jDk=; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:From:To: CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References: In-Reply-To:Accept-Language:Content-Language:X-MS-Has-Attach: X-MS-TNEF-Correlator:authentication-results:x-originating-ip: x-ms-publictraffictype:x-ms-office365-filtering-correlation-id: x-ms-traffictypediagnostic:x-ld-processed: x-ms-exchange-transport-forked:x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers:x-ms-exchange-senderadcheck: x-microsoft-antispam:x-microsoft-antispam-message-info: x-forefront-antispam-report:x-ms-exchange-antispam-messagedata: Content-Type:Content-Transfer-Encoding:MIME-Version: X-MS-Exchange-CrossTenant-AuthAs: X-MS-Exchange-CrossTenant-AuthSource: X-MS-Exchange-CrossTenant-Network-Message-Id: X-MS-Exchange-CrossTenant-originalarrivaltime: X-MS-Exchange-CrossTenant-fromentityheader: X-MS-Exchange-CrossTenant-id:X-MS-Exchange-CrossTenant-mailboxtype: X-MS-Exchange-CrossTenant-userprincipalname: X-MS-Exchange-Transport-CrossTenantHeadersStamped:X-OriginatorOrg; b=LAVTBsOiO7Acmq9e4TF5VS6ObIhNmG1crgP6B8TEAYB6UDeqCOZ6rdPnNgjLe7XaH SBn4GR+E5dvKhnlS035k7MV6k9UywXJ/9Qm5nZd3R/ZxL4dMce3aDe8KY3iX6aKTQH mQHrvmJKXo57OPzFDjJriDkVvKxpnOGqK+8QOUf4Y6LZf+cUbRqbHvbl35y72SnAbm IKxY55aCVn9jYecUfTuya8mt3ocqBLJZJ5DwNHscqJ+a2R8EjqwMmZ5J8btsXq1z8u QdNn/GuVFwGwc9Lb+ko6FoTeFXXJyMTodhuaX6V9wa6r0pswJSi4MpMRY2fM6mjEZZ ivhRdELrqsJ2w== Subject: Re: [dpdk-dev] [PATCH 3/4] ethdev: add APIs for hairpin queue operation 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Ori, > -----Original Message----- > From: Ori Kam > Sent: Sunday, October 4, 2020 5:35 PM > To: Bing Zhao ; NBU-Contact-Thomas Monjalon > ; ferruh.yigit@intel.com; > arybchenko@solarflare.com; mdr@ashroe.eu; nhorman@tuxdriver.com; > bernard.iremonger@intel.com; beilei.xing@intel.com; > wenzhuo.lu@intel.com > Cc: dev@dpdk.org > Subject: RE: [PATCH 3/4] ethdev: add APIs for hairpin queue > operation >=20 > Hi Bing, >=20 > PSB > Best, > Ori >=20 > > -----Original Message----- > > From: Bing Zhao > > Sent: Thursday, October 1, 2020 3:26 AM > > Subject: [PATCH 3/4] ethdev: add APIs for hairpin queue operation > > > > Every hairpin queue pair should be configured properly and the > > connection between TX and RX queues should be established, before > > hairpin function works. In single port hairpin mode, the queues of > > each pair belong to the same device. It is easy to get the > hardware > > and software information of each queue and configure the hairpin > > connection with such information. In two ports hairpin mode, it is > not > > easy or inappropriate to access one queue's information from > another > > device. > > > > Since hairpin is configured per queue pair, three new APIs are > > introduced and they are internal for the PMD using. > > > > The peer update API helps to pass one queue's information to the > peer > > queue and get the peer's information back for the next step. > > The peer bind API configures the current queue with the peer's > > information. For each hairpin queue pair, this API may need to be > > called twice to configure the TX, RX queues separately. > > The peer unbind API resets the current queue configuraion and > state to > > disconnect it from the peer queue. Also, it may need to be called > > twice to disconnect TX, RX queues from each other. > > > > Some parameter of the above APIs might not be mandatory, and it > > depends on the PMD implementation. > > > > The structure of `rte_hairpin_peer_info` is only a declaration and > the > > actual members will be defined in each PMD when being used. > > > > Signed-off-by: Bing Zhao > > --- > > lib/librte_ethdev/rte_ethdev.c | 55 ++++++++++++++++ > > lib/librte_ethdev/rte_ethdev_driver.h | 108 > > +++++++++++++++++++++++++++++++ > > lib/librte_ethdev/rte_ethdev_version.map | 3 + > > 3 files changed, 166 insertions(+) > > > > diff --git a/lib/librte_ethdev/rte_ethdev.c > > b/lib/librte_ethdev/rte_ethdev.c index 72f567b..4bfc26e 100644 > > --- a/lib/librte_ethdev/rte_ethdev.c > > +++ b/lib/librte_ethdev/rte_ethdev.c > > @@ -5515,6 +5515,61 @@ handle_port_link_status(const char *cmd > > __rte_unused, > > return 0; > > } > > > > +int > > +rte_eth_hairpin_queue_peer_update(uint16_t peer_port, uint16_t > > peer_queue, > > + struct rte_hairpin_peer_info *cur_info, > > + struct rte_hairpin_peer_info *peer_info, > > + bool direction) > > +{ > > + struct rte_eth_dev *dev; > > + > > + /* Current queue information is not mandatory. */ > > + if (peer_info =3D=3D NULL) > > + return -EINVAL; > > + > > + /* No need to check the validity again. */ > > + dev =3D &rte_eth_devices[peer_port]; > > + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops- > > >hairpin_queue_peer_update, > > + -ENOTSUP); > > + > > + return (*dev->dev_ops->hairpin_queue_peer_update)(dev, > > peer_queue, > > + cur_info, peer_info, direction); } > > + > > +int > > +rte_eth_hairpin_queue_peer_bind(uint16_t cur_port, uint16_t > cur_queue, > > + struct rte_hairpin_peer_info *peer_info, > > + bool direction) > > +{ > > + struct rte_eth_dev *dev; > > + > > + if (peer_info =3D=3D NULL) > > + return -EINVAL; > > + > > + /* No need to check the validity again. */ > > + dev =3D &rte_eth_devices[cur_port]; > > + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops- > > >hairpin_queue_peer_bind, > > + -ENOTSUP); > > + > > + return (*dev->dev_ops->hairpin_queue_peer_bind)(dev, cur_queue, > > + peer_info, direction); > > +} > > + > > +int > > +rte_eth_hairpin_queue_peer_unbind(uint16_t cur_port, uint16_t > cur_queue, > > + bool direction) > > +{ > > + struct rte_eth_dev *dev; > > + > > + /* No need to check the validity again. */ > > + dev =3D &rte_eth_devices[cur_port]; > > + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops- > > >hairpin_queue_peer_bind, > > + -ENOTSUP); > > + > > + return (*dev->dev_ops->hairpin_queue_peer_unbind)(dev, > cur_queue, > > + direction); > > +} > > + > > RTE_LOG_REGISTER(rte_eth_dev_logtype, lib.ethdev, INFO); > > > > RTE_INIT(ethdev_init_telemetry) > > diff --git a/lib/librte_ethdev/rte_ethdev_driver.h > > b/lib/librte_ethdev/rte_ethdev_driver.h > > index 910433f..d759c58 100644 > > --- a/lib/librte_ethdev/rte_ethdev_driver.h > > +++ b/lib/librte_ethdev/rte_ethdev_driver.h > > @@ -21,6 +21,9 @@ > > extern "C" { > > #endif > > > > +/**< @internal Declaration of the hairpin peer queue information > structure. > > */ > > +struct rte_hairpin_peer_info; > > + > > /* > > * Definitions of all functions exported by an Ethernet driver > through the > > * generic structure of type *eth_dev_ops* supplied in the > > *rte_eth_dev* @@ -622,6 +625,21 @@ typedef int > > (*eth_hairpin_bind_t)(struct rte_eth_dev *dev, typedef int > > (*eth_hairpin_unbind_t)(struct rte_eth_dev *dev, > > uint16_t rx_port); > > > > +typedef int (*eth_hairpin_queue_peer_update_t) > > + (struct rte_eth_dev *dev, uint16_t peer_queue, > > + struct rte_hairpin_peer_info *current_info, > > + struct rte_hairpin_peer_info *peer_info, bool direction); > /**< > > +@internal Update and fetch peer queue information. */ > > + > > +typedef int (*eth_hairpin_queue_peer_bind_t) > > + (struct rte_eth_dev *dev, uint16_t cur_queue, > > + struct rte_hairpin_peer_info *peer_info, bool direction); > /**< > > +@internal Bind peer queue to the current queue with fetched > > information. */ > > + > > +typedef int (*eth_hairpin_queue_peer_unbind_t) > > + (struct rte_eth_dev *dev, uint16_t cur_queue, bool direction); > /**< > > +@internal Unbind peer queue from the current queue. */ > > + > > /** > > * @internal A structure containing the functions exported by an > > Ethernet driver. > > */ > > @@ -765,6 +783,9 @@ struct eth_dev_ops { > > /**< Bind all hairpin TX queues of device to the peer port RX > queues. */ > > eth_hairpin_unbind_t hairpin_unbind; > > /**< Unbind all hairpin TX queues from the peer port RX queues. > */ > > + eth_hairpin_queue_peer_update_t hairpin_queue_peer_update; > > + eth_hairpin_queue_peer_bind_t hairpin_queue_peer_bind; > > + eth_hairpin_queue_peer_unbind_t hairpin_queue_peer_unbind; > > }; > > > > /** > > @@ -1120,6 +1141,93 @@ __rte_internal > > int > > rte_eth_dev_destroy(struct rte_eth_dev *ethdev, ethdev_uninit_t > > ethdev_uninit); > > > > +/** > > + * @warning > > + * @b EXPERIMENTAL: this API may change, or be removed, without > prior > > notice > > + * > > + * @internal > > + * Pass the current hairpin queue HW and/or HW information to the > > + peer > > queue >=20 > I don't think you need experimental tag when using internal. OK, I will remove it. >=20 > > + * and fetch back the information of the peer queue. > > + * > > + * @param peer_port > > + * Peer port identifier of the Ethernet device. > > + * @param peer_queue > > + * Peer queue index of the port. > > + * @param cur_info > > + * Pointer to the current information structure. > > + * @param peer_info > > + * Pointer to the peer information, output. > > + * @param direction > > + * Direction to pass the information. > > + * true - pass TX queue information and get peer RX queue > > +information > > + * false - pass RX queue information and get peer TX queue > > +information > > + * > > + * @return > > + * Negative errno value on error, 0 on success. > > + */ > > +__rte_internal > > +int > > +rte_eth_hairpin_queue_peer_update(uint16_t peer_port, uint16_t > > peer_queue, > > + struct rte_hairpin_peer_info *cur_info, > > + struct rte_hairpin_peer_info *peer_info, > > + bool direction); > > + > > +/** > > + * @warning > > + * @b EXPERIMENTAL: this API may change, or be removed, without > prior > > notice > > + * > > + * @internal > > + * Configure current hairpin queue with the peer information > fetched > > + to > > create >=20 > Same comment as above. I will remove it. >=20 > > + * the connection (bind) with peer queue in the specified > direction. > > + * This function might need to be called twice to fully create > the connection. > > + * > > + * @param cur_port > > + * Current port identifier of the Ethernet device. > > + * @param cur_queue > > + * Current queue index of the port. > > + * @param peer_info > > + * Pointer to the peer information, input. > > + * @param direction > > + * Direction to create the connection. > > + * true - bind current TX queue to peer RX queue > > + * false - bind current RX queue to peer TX queue > > + * > > + * @return > > + * Negative errno value on error, 0 on success. > > + */ > > +__rte_internal > > +int > > +rte_eth_hairpin_queue_peer_bind(uint16_t cur_port, uint16_t > cur_queue, > > + struct rte_hairpin_peer_info *peer_info, > > + bool direction); > > + > > +/** > > + * @warning > > + * @b EXPERIMENTAL: this API may change, or be removed, without > prior > > notice > > + * > > + * @internal > > + * Reset the current queue state and configuration to disconnect > > +(unbind) it > > + * from the peer queue. > > + * This function might need to be called twice to disconnect each > other. > > + * > > + * @param cur_port > > + * Current port identifier of the Ethernet device. > > + * @param cur_queue > > + * Current queue index of the port. > > + * @param direction > > + * Direction to create the connection. > > + * true - unbind current TX queue from peer RX queue > > + * false - unbind current RX queue from peer TX queue > > + * > > + * @return > > + * Negative errno value on error, 0 on success. > > + */ > > +__rte_internal > > +int > > +rte_eth_hairpin_queue_peer_unbind(uint16_t cur_port, uint16_t > cur_queue, > > + bool direction); > > + > > + > > #ifdef __cplusplus > > } > > #endif > > diff --git a/lib/librte_ethdev/rte_ethdev_version.map > > b/lib/librte_ethdev/rte_ethdev_version.map > > index 18efe4e..d05cd97 100644 > > --- a/lib/librte_ethdev/rte_ethdev_version.map > > +++ b/lib/librte_ethdev/rte_ethdev_version.map > > @@ -250,6 +250,9 @@ INTERNAL { > > rte_eth_devargs_parse; > > rte_eth_dma_zone_free; > > rte_eth_dma_zone_reserve; > > + rte_eth_hairpin_queue_peer_bind; > > + rte_eth_hairpin_queue_peer_unbind; > > + rte_eth_hairpin_queue_peer_update; > > rte_eth_switch_domain_alloc; > > rte_eth_switch_domain_free; > > rte_flow_expand_rss; > > -- > > 2.5.5 Thanks