From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f44.google.com (mail-wm0-f44.google.com [74.125.82.44]) by dpdk.org (Postfix) with ESMTP id 834C9FBD9 for ; Tue, 20 Dec 2016 19:42:52 +0100 (CET) Received: by mail-wm0-f44.google.com with SMTP id t79so138520824wmt.0 for ; Tue, 20 Dec 2016 10:42:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=JglzZWsO0Vs3N4SRlQ+9TPj4VEHAGbEOzYsf9ERjN9s=; b=nl9KNOnS01Z8Vn4Bl8aLxbUU0tt+znafTr9INAtxZyDLpaYDvbxXqg/v/JXzJoErSv 90HlEgfVZVVCkz61pbhSBpROVcSg6iWYpVqXtCrEFzbehPieRbkvXE9HiafVviwiMskL ADAgRdHXNin5N5t3rI0FiXHsQ7U9eTEZ7x/l5Pj6bU62DyRw2PLwpXkCEF5PGIUuk2aY hbqIog9Xl4BfK2NeH/KN+lOyFJpG9TcaRqbeqNDkgAlIaSfANWoxhR4V3j2s6POCPY7U kuwYNSMGB/7GSqXlHfv77f1IMkfYFokNx76zBY3HroBPhb0cdZ/+iyq2VxL00tMGiVmA 7cTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=JglzZWsO0Vs3N4SRlQ+9TPj4VEHAGbEOzYsf9ERjN9s=; b=g2DdRu/juV3pnCZHLYRlPicPuX4HhLZh3QJ5bwwqamoitGj1sWtFBRnxf6/AtOgXxo CjYa1ECAS5xKzT1JDU1aSkW+2xkyG3D8dVyBTs2J/GkUXMxYeS9gXIb7M2tW6sNTFOih LFnImridM1H8uqFi1hgbHQakocXFWFaU8Gw9sySqQOIhG0CEd0UnPKtOSKNPMZ7B4LI5 qQ5PGlQqc5YUc8/PxdEWkfeehFzu0MBCJTWqzypFElMvyxWjZKsOM6sva2bjGn4DmnsO SlIMq8MG3jUfdOv9xTupH63ph+u0etffcUEcLW4SAA3AidkAlSGqmj/sokkzcYI8y+AG UBZQ== X-Gm-Message-State: AIkVDXKgalvfZiuijR13GWQdfQsjEv4w8pax+jsF/8lqVve6GBkQ+NSVRW8ABiASnvimV0pI X-Received: by 10.28.194.135 with SMTP id s129mr1234641wmf.55.1482259371633; Tue, 20 Dec 2016 10:42:51 -0800 (PST) Received: from 6wind.com (guy78-3-82-239-227-177.fbx.proxad.net. [82.239.227.177]) by smtp.gmail.com with ESMTPSA id v8sm19165821wjy.34.2016.12.20.10.42.49 for (version=TLS1_2 cipher=AES128-SHA bits=128/128); Tue, 20 Dec 2016 10:42:50 -0800 (PST) From: Adrien Mazarguil To: dev@dpdk.org Date: Tue, 20 Dec 2016 19:42:17 +0100 Message-Id: X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v4 00/25] Generic flow API (rte_flow) 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: Tue, 20 Dec 2016 18:42:52 -0000 As previously discussed in RFC v1 [1], RFC v2 [2], with changes described in [3] (also pasted below), here is the first non-draft series for this new API. Its capabilities are so generic that its name had to be vague, it may be called "Generic flow API", "Generic flow interface" (possibly shortened as "GFI") to refer to the name of the new filter type, or "rte_flow" from the prefix used for its public symbols. I personally favor the latter. While it is currently meant to supersede existing filter types in order for all PMDs to expose a common filtering/classification interface, it may eventually evolve to cover the following ideas as well: - Rx/Tx offloads configuration through automatic offloads for specific packets, e.g. performing checksum on TCP packets could be expressed with an egress rule with a TCP pattern and a kind of checksum action. - RSS configuration (already defined actually). Could be global or per rule depending on hardware capabilities. - Switching configuration for devices with many physical ports; rules doing both ingress and egress could even be used to completely bypass software if supported by hardware. [1] http://dpdk.org/ml/archives/dev/2016-July/043365.html [2] http://dpdk.org/ml/archives/dev/2016-August/045383.html [3] http://dpdk.org/ml/archives/dev/2016-November/050044.html Changes since v3 series: - Fixed documentation tables that broke PDF generation (John Mcnamara / rte_flow.rst). - Also properly aligned "Action" lines in several tables with their corresponding "Index" (rte_flow.rst). - Fixed remaining ICC error #188 in testpmd (Ferruh / cmdline_flow.c). - Indented testpmd examples properly (John / testpmd_funcs.rst). - Fixed wrong port in example (Ferruh / testpmd_funcs.rst). Changes since v2 series: - Replaced ENOTSUP with ENOSYS in the code (although doing so triggers spurious checkpatch warnings) to tell apart unimplemented callbacks from unsupported flow rules and match the documented behavior. - Fixed missing include seen by check-includes.sh in rte_flow_driver.h. - Made clearer that PMDs must initialize rte_flow_error (if non-NULL) in case of error, added related memory poisoning in testpmd to catch missing initializations. - Fixed rte_flow programmer's guide according to John Mcnamara's comments (tables, sections header and typos). - Fixed deprecation notice as well. Changes since v1 series: - Added programmer's guide documentation for rte_flow. - Added depreciation notice for the legacy API. - Documented testpmd flow command. - Fixed missing rte_flow_flush symbol in rte_ether_version.map. - Cleaned up API documentation in rte_flow.h. - Replaced "min/max" parameters with "num" in struct rte_flow_item_any, to align behavior with other item definitions. - Fixed "type" (EtherType) size in struct rte_flow_item_eth. - Renamed "queues" to "num" in struct rte_flow_action_rss. - Fixed missing const in rte_flow_error_set() prototype definition. - Fixed testpmd flow create command that did not save the rte_flow object pointer, causing crashes. - Hopefully fixed all the remaining ICC/clang errors. - Replaced testpmd flow command's "fix" token with "is" for clarity. Changes since RFC v2: - New separate VLAN pattern item (previously part of the ETH definition), found to be much more convenient. - Removed useless "any" field from VF pattern item, the same effect can be achieved by not providing a specification structure. - Replaced bit-fields from the VXLAN pattern item to avoid endianness conversion issues on 24-bit fields. - Updated struct rte_flow_item with a new "last" field to create inclusive ranges. They are defined as the interval between (spec & mask) and (last & mask). All three parameters are optional. - Renamed ID action MARK. - Renamed "queue" fields in actions QUEUE and DUP to "index". - "rss_conf" field in RSS action is now const. - VF action now uses a 32 bit ID like its pattern item counterpart. - Removed redundant struct rte_flow_pattern, API functions now expect struct rte_flow_item lists terminated by END items. - Replaced struct rte_flow_actions for the same reason, with struct rte_flow_action lists terminated by END actions. - Error types (enum rte_flow_error_type) have been updated and the cause pointer in struct rte_flow_error is now const. - Function prototypes (rte_flow_create, rte_flow_validate) have also been updated for clarity. Additions: - Public wrapper functions rte_flow_{validate|create|destroy|flush|query} are now implemented in rte_flow.c, with their symbols exported and versioned. Related filter type RTE_ETH_FILTER_GENERIC has been added. - A separate header (rte_flow_driver.h) has been added for driver-side functionality, in particular struct rte_flow_ops which contains PMD callbacks returned by RTE_ETH_FILTER_GENERIC query. - testpmd now exposes most of this API through the new "flow" command. What remains to be done: - Using endian-aware integer types (rte_beX_t) where necessary for clarity. - API documentation (based on RFC). - testpmd flow command documentation (although context-aware command completion should already help quite a bit in this regard). - A few pattern item / action properties cannot be configured yet (e.g. rss_conf parameter for RSS action) and a few completions (e.g. possible queue IDs) should be added. Adrien Mazarguil (25): ethdev: introduce generic flow API doc: add rte_flow prog guide doc: announce deprecation of legacy filter types cmdline: add support for dynamic tokens cmdline: add alignment constraint app/testpmd: implement basic support for rte_flow app/testpmd: add flow command app/testpmd: add rte_flow integer support app/testpmd: add flow list command app/testpmd: add flow flush command app/testpmd: add flow destroy command app/testpmd: add flow validate/create commands app/testpmd: add flow query command app/testpmd: add rte_flow item spec handler app/testpmd: add rte_flow item spec prefix length app/testpmd: add rte_flow bit-field support app/testpmd: add item any to flow command app/testpmd: add various items to flow command app/testpmd: add item raw to flow command app/testpmd: add items eth/vlan to flow command app/testpmd: add items ipv4/ipv6 to flow command app/testpmd: add L4 items to flow command app/testpmd: add various actions to flow command app/testpmd: add queue actions to flow command doc: describe testpmd flow command MAINTAINERS | 4 + app/test-pmd/Makefile | 1 + app/test-pmd/cmdline.c | 32 + app/test-pmd/cmdline_flow.c | 2575 ++++++++++++++++++++++ app/test-pmd/config.c | 498 +++++ app/test-pmd/csumonly.c | 1 + app/test-pmd/flowgen.c | 1 + app/test-pmd/icmpecho.c | 1 + app/test-pmd/ieee1588fwd.c | 1 + app/test-pmd/iofwd.c | 1 + app/test-pmd/macfwd.c | 1 + app/test-pmd/macswap.c | 1 + app/test-pmd/parameters.c | 1 + app/test-pmd/rxonly.c | 1 + app/test-pmd/testpmd.c | 6 + app/test-pmd/testpmd.h | 27 + app/test-pmd/txonly.c | 1 + doc/api/doxy-api-index.md | 2 + doc/guides/prog_guide/index.rst | 1 + doc/guides/prog_guide/rte_flow.rst | 2042 +++++++++++++++++ doc/guides/rel_notes/deprecation.rst | 8 + doc/guides/testpmd_app_ug/testpmd_funcs.rst | 612 +++++ lib/librte_cmdline/cmdline_parse.c | 67 +- lib/librte_cmdline/cmdline_parse.h | 21 + lib/librte_ether/Makefile | 3 + lib/librte_ether/rte_eth_ctrl.h | 1 + lib/librte_ether/rte_ether_version.map | 11 + lib/librte_ether/rte_flow.c | 159 ++ lib/librte_ether/rte_flow.h | 947 ++++++++ lib/librte_ether/rte_flow_driver.h | 182 ++ 30 files changed, 7200 insertions(+), 9 deletions(-) create mode 100644 app/test-pmd/cmdline_flow.c create mode 100644 doc/guides/prog_guide/rte_flow.rst create mode 100644 lib/librte_ether/rte_flow.c create mode 100644 lib/librte_ether/rte_flow.h create mode 100644 lib/librte_ether/rte_flow_driver.h -- 2.1.4