From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1C753A0A03; Mon, 18 Jan 2021 17:03:38 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C64F5140D4F; Mon, 18 Jan 2021 17:03:37 +0100 (CET) Received: from hqnvemgate25.nvidia.com (hqnvemgate25.nvidia.com [216.228.121.64]) by mails.dpdk.org (Postfix) with ESMTP id C0B88140D46 for ; Mon, 18 Jan 2021 17:03:34 +0100 (CET) Received: from hqmail.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate25.nvidia.com (using TLS: TLSv1.2, AES256-SHA) id ; Mon, 18 Jan 2021 08:03:34 -0800 Received: from HQMAIL109.nvidia.com (172.20.187.15) by HQMAIL111.nvidia.com (172.20.187.18) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Mon, 18 Jan 2021 16:03:30 +0000 Received: from NAM04-CO1-obe.outbound.protection.outlook.com (104.47.45.55) by HQMAIL109.nvidia.com (172.20.187.15) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Mon, 18 Jan 2021 16:03:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Bz2XuQuYcvUKriwOi7BklpzVdf771kUxE1yM6SVhjr4SaJThUb6XihmXdvKBI7vryiYypCLo/d5B7adZgJvNF0/zmoIt7pyb0AKFeg7aIYmT1SPQb7gDPjx45VxomktAroOAACX49vws0G4BCZCALMGLhjJHi6Sg49sJDhYhWhAgpful9WirCLlIOOkiEVVfRk/aP47Mq6eQF6YH6QDahGzNssZ1YSD+jOAIz/AH1MRXDn1FDYTIORZB2iTrOGf/gxm4Y5uVcgVpA49notxT5/BzBLXgSwgm6SfNf+UMza3Ia4kSstV6kvoGRaHPa4YjHu/ES5Ywck6QOIzJWDXwHQ== 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=lQxI6q6Zg5c8iYehJzuF4QpOKSXQHwMSDA4ESaxb2dk=; b=TMi/BJf5h1SaUtOIzp0E9+ZZm5b1ENF+MiLeyNocHiLPxYDRYmhzUlePOacGCiiKaGucHey2JIl+IPg/OixAOZfpYDQtwPsbGvcY0nvPMnMfzmQL4/SdYv2MDwh+A0GSDh94EKRsc4xnaks/zsoEZvhN1m23rkIBcMWoe++Fr8kNrsp2Edz2xVZT3WYTBIf80WO4RQEV/NVh87gJA677/bn0SHNIOzQxr3EZHIZGl16IA22D27Nxau95meN0vTw+DwTmPztQQxAhDjhFdphrXuuESvXGTZRy90OLffKNI3EXCWNXo5cdDqOyXqNUzvVPlTp2byQOWs26ih+472nxsg== 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 BN7PR12MB2707.namprd12.prod.outlook.com (2603:10b6:408:2f::29) by BN8PR12MB3313.namprd12.prod.outlook.com (2603:10b6:408:65::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3763.12; Mon, 18 Jan 2021 16:03:28 +0000 Received: from BN7PR12MB2707.namprd12.prod.outlook.com ([fe80::90fa:92a9:d189:53c]) by BN7PR12MB2707.namprd12.prod.outlook.com ([fe80::90fa:92a9:d189:53c%3]) with mapi id 15.20.3763.013; Mon, 18 Jan 2021 16:03:28 +0000 From: Alexander Kozyrev To: NBU-Contact-Thomas Monjalon CC: "dev@dpdk.org" , Slava Ovsiienko , Ori Kam , "ferruh.yigit@intel.com" , "andrew.rybchenko@oktetlabs.ru" , "jerinjacobk@gmail.com" Thread-Topic: [dpdk-dev] [PATCH v7 1/2] ethdev: introduce generic modify rte flow action Thread-Index: AQHW68M09qGE2xqLIUW6Ri3K1chxDKosdcuAgAEYSUA= Date: Mon, 18 Jan 2021 16:03:28 +0000 Message-ID: References: <20210116044407.13596-1-akozyrev@nvidia.com> <20210116045054.14539-1-akozyrev@nvidia.com> <20210116045054.14539-2-akozyrev@nvidia.com> <4720582.E7ApZDAgU3@thomas> In-Reply-To: <4720582.E7ApZDAgU3@thomas> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: monjalon.net; dkim=none (message not signed) header.d=none;monjalon.net; dmarc=none action=none header.from=nvidia.com; x-originating-ip: [2607:fea8:e380:d8e0:7437:9d85:302d:f282] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f5604e40-ee59-4628-922d-08d8bbca984c x-ms-traffictypediagnostic: BN8PR12MB3313: 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:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ReUNe/1Oda3M3xlxKYVEJ7P7i0T7FyghvAdbVkAecw3+S4XqtpKYPPm3vdnd3KgiYbCUVl76UiP8oqAhUnzKwq3Uijqa5p7JkUh8HFswnrLTfxagxhTVxawruaNMtpIGMJFfMDbt5GPixkRkHbeyxev5UNyoWJK706sFN1Tymrj1dkX18BEQL9ASNBIDdiFppQ5wZJ5f93e10H0E3sOeXLfHdH1rril47DRrNf+SFGZ8SUQSRKBTzjL2DHTeDkLwyhF1eUB9jLnScG4QPIHSoFgCx451+Y1qGwK700wdgE5MuitzGtunCN7vthqK2KKelWslMtkmMaawZmOZp1jwJVxmIIxwLg05RCYsTZw/YG6thAXjtr5sGD79JMhMIZR5YAtqWc2k6YP5DGJIjHZ/zxdAhIjI0g+SynVQZOpv/zC4WdBpdmsT7uXbekUohROpKqJnMLCWwqblF4+kyNLicS0tOxqLAxRiUw0RV1ZlaIvPSZVDUGRa6y6TsYXncCSW29o6jYW+tbxVrBiyADlm/w== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN7PR12MB2707.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(366004)(346002)(376002)(39860400002)(396003)(54906003)(55016002)(478600001)(66946007)(9686003)(66446008)(7696005)(52536014)(76116006)(64756008)(86362001)(45080400002)(66556008)(33656002)(71200400001)(5660300002)(66476007)(4326008)(966005)(6506007)(6916009)(2906002)(186003)(83380400001)(316002)(8936002)(8676002)(41533002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?qHfHpuEppzVzLNBzvlx7k/8UAt68YaFwTDIpU4ecYux1v8w9Js9kGGYGc+ja?= =?us-ascii?Q?CJGePh2advkq/s8xxQ1wBvPxzWm+mmVnPUbeY4We+gK+qtQQyKlPbjl1v70m?= =?us-ascii?Q?0kP/17DZxVjA5NkoNzciC5OmKlu6wIXiaGmPP++irB8WH22GGQGKtIsNmdl+?= =?us-ascii?Q?fsJ3esn0rFi7cJ2XWOwzJ5qUaW0rznCWbthLQeCgbvciNkzC3ce3tqJKIgY8?= =?us-ascii?Q?sUqBkj5G7RUUQLxG8rDQAM2bE3qyRM87X5qPFfsafBVexD4I+MMcShWM9YnI?= =?us-ascii?Q?Xbx6mActczIeZKFneL0GnumcQm3JydgV904LNb1PVIN/oFrtfFkrfTW14AUM?= =?us-ascii?Q?D+wJB0hzn9yFivGzWvbZ/R9xiM5EWhV1bdmiJcgt5eQ6bY7l+G6AjDnMVDPW?= =?us-ascii?Q?1vM7K6dnJo0Ny1HbGCxU2hQ1g58ytxtTP9TbmROg2tA7B7rsBcINjiftRh8S?= =?us-ascii?Q?TmotFUk/ldXluxVFM8Ye/Hsef49UfITGM7+UlUMlOqIslbeAghM3Qpt+tHli?= =?us-ascii?Q?DUBuX1T9XhbtZ9XVnwAh9M8eGUsy9sEFKQLhj+hcvkwLJv/krKPWQWM8SrTN?= =?us-ascii?Q?2Jww6Ln42p1L9geI96yY+6ZqShQmYgpHlQVMuha9NHPJCPOKVJEniC2T+rNV?= =?us-ascii?Q?mUa6B79AolK6zI3kXYWKkC80p8i/4nUCgwRm5eMrRNMQN1iedydU0FomioX8?= =?us-ascii?Q?879Zsw2sWE950Zpn7Fsxw2Raqi65JGWtDwA63kZrorKfkIIKxpno2fj6/a3N?= =?us-ascii?Q?xgv2ihPsvtqzJrsP4iqT4ekbaAL4gUd1oBitP3IT7Vk1LLsu7lRz9641QTdf?= =?us-ascii?Q?EgyopSqhibisL1xLX0K0YpURegR3aj/Q6YAZHkgUySGLzdu+s+Db4C7QK8OQ?= =?us-ascii?Q?YSLUIX6B8VxDBi7gweacpgzU5bNudvYcyrkq8+uu2Zd5mWnTUVpE+ONzwny4?= =?us-ascii?Q?u0cdZ1aG9ymYu3MrZqESSVltxvXa/Q+bi4XYFeMyo0nr/cD2C/ZjjYfmhijN?= =?us-ascii?Q?cnqviwph1xWCi9TKyLjV99MRPtwtRD0/BW4S281c5+5N1gOasqwgjsz+qnPP?= =?us-ascii?Q?gydONvzIFUFrztbFz3jeQwLk9as94jcRnfD1EDeCNuufRobkzTz2U8ysBDTk?= =?us-ascii?Q?JK7xXRkIO2bw?= 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: BN7PR12MB2707.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f5604e40-ee59-4628-922d-08d8bbca984c X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Jan 2021 16:03:28.4988 (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: kLqGVAsMt01Koygi9xVO43N/mYFNnqjtnA17E006QtZ5LvmD34Dj4smj2cgE6V90JA9YobNNxm+u++fRz5yXRA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR12MB3313 X-OriginatorOrg: Nvidia.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1610985814; bh=lQxI6q6Zg5c8iYehJzuF4QpOKSXQHwMSDA4ESaxb2dk=; 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=ncbhz82ArjVM857MK40cVKgR10CjZt/Ay9/Txx4INIpycJSt1iZJx5R96Ft0BBKKv 5u3U20Lc4NvrhQ34pdCJVKGswCsXMPr6Fn0nfBor21/qwB9L+YhZs0cVor0V5ZTDrs bY7RD65WGNsgenPPmJZI6ugEAw32q6+/Zu+aLeIPuTtDn2H0+E4/4uPy5FvFdSOCUv 1OU5/rT2jzubtlmjrhqiBwx090G2Tq1wa6rF4H6eFkZtaYhpDF8Siddn+uRYpQGLVD 4t+axiWK3oEVKdysDhHyc1tL3YJadLQtvFNOZKMjlyCFNiE0h3PlYMc6w93LvDd3/v SuiaJOtSSXE7w== Subject: Re: [dpdk-dev] [PATCH v7 1/2] ethdev: introduce generic modify rte flow action X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" > From: Thomas Monjalon on Sunday, January 17, 2021 1= 8:16 > 16/01/2021 05:50, Alexander Kozyrev: > > Implement the generic modify flow API to allow manipulations on > > an arbitrary header field (as well as mark, metadata or tag) using > > data from another field or a user-specified value. > > This generic modify mechanism removes the necessity to implement > > a separate RTE Flow action every time we need to modify a new packet > > field in the future. > > > > Supported operation are: > > - set: copy data from source to destination. > > - add: integer addition, stores the result in destination. > > - sub: integer subtraction, stores the result in destination. > > > > The field ID is used to specify the desired source/destination packet > > field in order to simplify the API for various encapsulation models. > > Specifying the packet field ID with the needed encapsulation level > > is able to quickly get a packet field for any inner packet header. > > > > Alternatively, the special ID (ITEM_START) can be used to point to > > the very beginning of a packet. This ID in conjunction with the > > offset parameter provides great flexibility to copy/modify any part of > > a packet as needed. > > > > The number of bits to use from a source as well as the offset can be > > be specified to allow a partial copy or dividing a big packet field > > into multiple small fields (e.g. copying 128 bits of IPv6 to 4 tags). > > > > An immediate value (or pointer to it) can be specified instead of the > > level and the offset for the special FIELD_VALUE ID (or FIELD_POINTER). > > Can be used as a source only. > > > > RFC: > https://nam11.safelinks.protection.outlook.com/?url=3Dhttp%3A%2F%2Fpatch > es.dpdk.org%2Fpatch%2F85384%2F&data=3D04%7C01%7Cakozyrev%40nv > idia.com%7Ce20d2c38372b4062420d08d8bb3dd549%7C43083d15727340c1b7d > b39efd9ccc17a%7C0%7C0%7C637465221537183554%7CUnknown%7CTWFpb > GZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI > 6Mn0%3D%7C1000&sdata=3DgWEdmyAabnCCmeFyi%2FvHs0aheMmWNx > IyR%2BTC96O3Yck%3D&reserved=3D0 >=20 > You don't need to refer to the RFC in the commit message. Removing link to it. >=20 > > Signed-off-by: Alexander Kozyrev > > Acked-by: Ori Kam > > > > --- > > +Action: ``MODIFY_FIELD`` > > +^^^^^^^^^^^^^^^^^^^^^^^^ > > + > > +Modify ``dst`` field according to ``op`` selected (move, addition, > > +subtraction) with ``width`` bits of data from ``src`` field. >=20 > "move" is changed to "set", right? Right, thanks for catching this. >=20 > > +Any arbitrary header field (as well as mark, metadata or tag values) > > +can be used as both source and destination fields as set by ``field``. > > +The immediate value ``RTE_FLOW_FIELD_VALUE`` (or a pointer to it > > +``RTE_FLOW_FIELD_POINTER``) is allowed as a source only. > > +``RTE_FLOW_FIELD_START`` is used to point to the beginning of a packet= . > > + > > +``op`` selects the operation to perform on a destination field. > > +- ``set`` copies the data from ``src`` field to ``dst`` field. > > +- ``add`` adds together ``dst`` and ``src`` and stores the result into= ``dst``. > > +- ``sub`` subtracts ``src`` from ``dst`` and stores the result into ``= dst`` > > + > > +``width`` defines a number of bits to use from ``src`` field. > > + > > +``level`` is used to access any packet field on any encapsulation leve= l > > +as well as any tag element in the tag array. > > +- ``0`` means the default behaviour. Depending on the packet type, it = can > > +mean outermost, innermost or anything in between. >=20 > I feel the interpretation of the level 0 is driver-dependent? It is driver-dependent, the behavior is the same as in case of RSS. > > +- ``1`` requests access to the outermost packet encapsulation level. > > +- ``2`` and subsequent values requests access to the specified packet > > +encapsulation level, from outermost to innermost (lower to higher > values). > > +For the tag array ``level`` translates directly into the array index. >=20 > You should define what is a tag array. Ok, but it is defined already in RTE_FLOW_ACTION_TYPE_SET_TAG action. > > + > > +``offset`` specifies the number of bits to skip from a field's start. > > +That allows performing a partial copy of the needed part or to divide = a big > > +packet field into multiple smaller fields. Alternatively, ``offset`` a= llows > > +going past the specified packet field boundary to copy a field to an > > +arbitrary place in a packet, essentially providing a way to copy any p= art of > > +a packet to any other part of it if supported by an underlying PMD dri= ver. >=20 > All features of this specification require PMD support, > so I think it is useless to mention here. Removing. =20 > > + > > +``value`` sets an immediate value to be used as a source or points to = a > > +location of the value in memory. It is used instead of ``level`` and `= `offset`` > > +for ``RTE_FLOW_FIELD_VALUE`` and ``RTE_FLOW_FIELD_POINTER`` > respectively. > > + > > +.. _table_rte_flow_action_modify_field: > > + > > +.. table:: MODIFY_FIELD > > + > > + +-----------------------------------------+ > > + | Field | Value | > > + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+ > > + | ``op`` | operation to perform | > > + | ``dst`` | destination field | > > + | ``src`` | source field | > > + | ``width`` | number of bits to use | > > + +---------------+-------------------------+ > > + > > +.. _table_rte_flow_action_modify_data: > > + > > +.. table:: destination/source field definition > > + > > + +------------------------------------------------------------------= --------+ > > + | Field | Value = | > > + > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+ > > + | ``field`` | ID: packet field, mark, meta, tag, immediate, poi= nter | > > + | ``level`` | encapsulation level of a packet field or tag arra= y index | > > + | ``offset`` | number of bits to skip at the beginning = | > > + | ``value`` | immediate value or a pointer to this value = | > > + +---------------+--------------------------------------------------= --------+ >=20 > I know the whole rte_flow guide has this kind of table, > but really it looks like doxygen and can be skipped here. >=20 > If really this redundant info is required, it should be RST definition li= sts, > not tables. I would keep these tables for the sake of consistency of the rte_flow guide= . > [...] >=20 > In my opinion, the most important info is in the doxygen comments. Agree, adding them for all the structures/fields mentioned below. > Please add a doxygen comment for this enum. >=20 > > +enum rte_flow_field_id { > > + RTE_FLOW_FIELD_START =3D 0, >=20 > Please add a doxygen comment for the value RTE_FLOW_FIELD_START. >=20 > > + RTE_FLOW_FIELD_MAC_DST, > > + RTE_FLOW_FIELD_MAC_SRC, > > + RTE_FLOW_FIELD_VLAN_TYPE, > > + RTE_FLOW_FIELD_VLAN_ID, > > + RTE_FLOW_FIELD_MAC_TYPE, > > + RTE_FLOW_FIELD_IPV4_DSCP, > > + RTE_FLOW_FIELD_IPV4_TTL, > > + RTE_FLOW_FIELD_IPV4_SRC, > > + RTE_FLOW_FIELD_IPV4_DST, > > + RTE_FLOW_FIELD_IPV6_HOPLIMIT, > > + RTE_FLOW_FIELD_IPV6_SRC, > > + RTE_FLOW_FIELD_IPV6_DST, > > + RTE_FLOW_FIELD_TCP_PORT_SRC, > > + RTE_FLOW_FIELD_TCP_PORT_DST, > > + RTE_FLOW_FIELD_TCP_SEQ_NUM, > > + RTE_FLOW_FIELD_TCP_ACK_NUM, > > + RTE_FLOW_FIELD_TCP_FLAGS, > > + RTE_FLOW_FIELD_UDP_PORT_SRC, > > + RTE_FLOW_FIELD_UDP_PORT_DST, > > + RTE_FLOW_FIELD_VXLAN_VNI, > > + RTE_FLOW_FIELD_GENEVE_VNI, > > + RTE_FLOW_FIELD_GTP_TEID, > > + RTE_FLOW_FIELD_TAG, > > + RTE_FLOW_FIELD_MARK, > > + RTE_FLOW_FIELD_META, > > + RTE_FLOW_FIELD_POINTER, >=20 > Please add a doxygen comment for the value RTE_FLOW_FIELD_POINTER. >=20 > > + RTE_FLOW_FIELD_VALUE, >=20 > Please add a doxygen comment for the value RTE_FLOW_FIELD_VALUE. >=20 > > +struct rte_flow_action_modify_data { > > + enum rte_flow_field_id field; > > + RTE_STD_C11 > > + union { > > + struct { > > + uint32_t level; > > + uint32_t offset; > > + }; > > + uint64_t value; > > + }; > > +}; >=20 > Please add doxygen for this struct and fields. >=20 > > + > > +enum rte_flow_modify_op { > > + RTE_FLOW_MODIFY_SET =3D 0, > > + RTE_FLOW_MODIFY_ADD, > > + RTE_FLOW_MODIFY_SUB, > > +}; >=20 > Please add doxygen for this enum. >=20 > > + > > +/** > > + * @warning > > + * @b EXPERIMENTAL: this structure may change without prior notice > > + * > > + * RTE_FLOW_ACTION_TYPE_MODIFY_FIELD > > + * > > + * Modifies a destination header field according to the specified > > + * operation. Another packet field can be used as a source as well > > + * as tag, mark, metadata or an immediate value or a pointer to it. > > + * Width is the number of bits used from the source item. >=20 > width should be documented below as other fields. >=20 > > + */ > > +struct rte_flow_action_modify_field { > > + enum rte_flow_modify_op operation; > > + struct rte_flow_action_modify_data dst; > > + struct rte_flow_action_modify_data src; > > + uint32_t width; > > +}; >=20 >=20