#
2bb2f755 |
| 21-May-2024 |
Stephen Hemminger <stephen@networkplumber.org> |
net/tap: use libbpf to load new BPF program
There were multiple issues in the RSS queue support in the TAP driver. This required extensive rework of the BPF support.
Change the BPF loading to use b
net/tap: use libbpf to load new BPF program
There were multiple issues in the RSS queue support in the TAP driver. This required extensive rework of the BPF support.
Change the BPF loading to use bpftool to create a skeleton header file, and load with libbpf. The BPF is always compiled from source so less chance that source and instructions diverge. Also resolves issue where libbpf and source get out of sync. The program is only loaded once, so if multiple rules are created only one BPF program is loaded in kernel.
The new BPF program only needs a single action. No need for action and re-classification step.
It also fixes the missing bits from the original. - supports setting RSS key per flow - level of hash can be L3 or L3/L4.
Bugzilla ID: 1329
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Acked-by: Ferruh Yigit <ferruh.yigit@amd.com>
show more ...
|
#
fb7ad441 |
| 21-Mar-2021 |
Thomas Monjalon <thomas@monjalon.net> |
ethdev: replace callback getting filter operations
Since rte_flow is the only API for filtering operations, the legacy driver interface filter_ctrl was too much complicated for the simple task of ge
ethdev: replace callback getting filter operations
Since rte_flow is the only API for filtering operations, the legacy driver interface filter_ctrl was too much complicated for the simple task of getting the struct rte_flow_ops.
The filter type RTE_ETH_FILTER_GENERIC and the filter operarion RTE_ETH_FILTER_GET are removed. The new driver callback flow_ops_get replaces filter_ctrl.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net> Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com> Acked-by: Haiyue Wang <haiyue.wang@intel.com> Acked-by: Rosen Xu <rosen.xu@intel.com> Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com> Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
show more ...
|
#
5feecc57 |
| 20-Mar-2018 |
Shahaf Shuler <shahafs@mellanox.com> |
align SPDX Mellanox copyrights
Aligning Mellanox SPDX copyrights to a single format. In addition replace to SPDX licence files which were missed.
Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
align SPDX Mellanox copyrights
Aligning Mellanox SPDX copyrights to a single format. In addition replace to SPDX licence files which were missed.
Signed-off-by: Shahaf Shuler <shahafs@mellanox.com> Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
show more ...
|
#
acfe2bd4 |
| 29-Jan-2018 |
Olivier Matz <olivier.matz@6wind.com> |
net/tap: use SPDX tags in 6WIND copyrighted files
Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Thomas Monjalon <thomas@monja
net/tap: use SPDX tags in 6WIND copyrighted files
Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Thomas Monjalon <thomas@monjalon.net>
show more ...
|
#
036d721a |
| 20-Jan-2018 |
Ophir Munk <ophirmu@mellanox.com> |
net/tap: implement RSS using eBPF
TAP PMD is required to support RSS queue mapping based on rte_flow API. An example usage for this requirement is failsafe transparent switching from a PCI device to
net/tap: implement RSS using eBPF
TAP PMD is required to support RSS queue mapping based on rte_flow API. An example usage for this requirement is failsafe transparent switching from a PCI device to TAP device while keep redirecting packets to the same RSS queues on both devices.
TAP RSS implementation is based on eBPF programs sent to Linux kernel through BPF system calls and using netlink messages to reference the programs as part of traffic control commands.
TC uses eBPF programs as classifiers and actions. eBPF classification: packets marked with an RSS queue will be directed to this queue using TC with "skbedit" action. BPF classifiers are downloaded to the kernel once on TAP creation for each TAP Rx queue.
eBPF action: calculate the Toeplitz RSS hash based on L3 addresses and L4 ports. Mark the packet with the RSS queue according the resulting RSS hash, then reclassify the packet. BPF actions are downloaded to the kernel for each new RSS rule.
TAP eBPF requires Linux version 4.9 configured with BPF. TAP PMD will successfully compile on systems with old or non-BPF configured kernels but RSS rules creation on TAP devices will not be successful
Signed-off-by: Ophir Munk <ophirmu@mellanox.com> Acked-by: Pascal Mazon <pascal.mazon@6wind.com>
show more ...
|
#
b02d85e1 |
| 20-Jan-2018 |
Ophir Munk <ophirmu@mellanox.com> |
net/tap: add eBPF API
This commit include BPF API to be used by TAP.
tap_flow_bpf_cls_q() - download to kernel BPF program that classifies packets to their matching queues tap_flow_bpf_calc_l3_l4_h
net/tap: add eBPF API
This commit include BPF API to be used by TAP.
tap_flow_bpf_cls_q() - download to kernel BPF program that classifies packets to their matching queues tap_flow_bpf_calc_l3_l4_hash() - download to kernel BPF program that calculates per packet layer 3 and layer 4 RSS hash tap_flow_bpf_rss_map_create() - create BPF RSS map for storing RSS parameters per RSS rule tap_flow_bpf_update_rss_elem() - update BPF map entry with RSS rule parameters
Signed-off-by: Ophir Munk <ophirmu@mellanox.com> Acked-by: Pascal Mazon <pascal.mazon@6wind.com>
show more ...
|
#
f503d269 |
| 24-May-2017 |
Pascal Mazon <pascal.mazon@6wind.com> |
net/tap: support flow API isolated mode
With this patch, it is possible to enable or disable the isolate feature anytime, even immediately after a probe while the tap has not been configured yet. It
net/tap: support flow API isolated mode
With this patch, it is possible to enable or disable the isolate feature anytime, even immediately after a probe while the tap has not been configured yet. It will do its job as soon as the netdevice gets created.
A specific implicit flow rule is created with the lowest priority (all other flow rules will be evaluated before), at the end of the list. If isolated mode is enabled, the associated action will be to drop the packet. Otherwise, the action would be passthrough.
In case of a remote netdevice, implicit rules on it will be removed in isolated mode, to ensure only actual flow rules redirect packets to the tap.
Signed-off-by: Pascal Mazon <pascal.mazon@6wind.com>
show more ...
|
#
2bc06869 |
| 23-Mar-2017 |
Pascal Mazon <pascal.mazon@6wind.com> |
net/tap: add remote netdevice traffic capture
By default, a tap netdevice is of no use when not fed by a separate process. The ability to automatically feed it from another netdevice allows applicat
net/tap: add remote netdevice traffic capture
By default, a tap netdevice is of no use when not fed by a separate process. The ability to automatically feed it from another netdevice allows applications to capture any kind of traffic normally destined to the kernel stack.
This patch implements this ability through a new optional "remote" parameter.
Packets matching filtering rules created with the flow API are matched on the remote device and redirected to the tap PMD, where the relevant action will be performed.
Signed-off-by: Pascal Mazon <pascal.mazon@6wind.com> Acked-by: Olga Shern <olgas@mellanox.com> Acked-by: Keith Wiles <keith.wiles@intel.com>
show more ...
|
#
de96fe68 |
| 23-Mar-2017 |
Pascal Mazon <pascal.mazon@6wind.com> |
net/tap: add basic flow API patterns and actions
Supported flow rules are now mapped to TC rules on the tap netdevice. The netlink message used for creating the TC rule is stored in struct rte_flow.
net/tap: add basic flow API patterns and actions
Supported flow rules are now mapped to TC rules on the tap netdevice. The netlink message used for creating the TC rule is stored in struct rte_flow. That way, by simply changing a metadata in it, we can require for the rule deletion without further parsing.
Supported items: - eth: src and dst (with variable masks), and eth_type (0xffff mask). - vlan: vid, pcp, tpid, but not eid. - ipv4/6: src and dst (with variable masks), and ip_proto (0xffff mask). - udp/tcp: src and dst port (0xffff) mask.
Supported actions: - DROP - QUEUE - PASSTHRU
It is generally not possible to provide a "last" item. However, if the "last" item, once masked, is identical to the masked spec, then it is supported.
Only IPv4/6 and MAC addresses can use a variable mask. All other items need a full mask (exact match).
Support for VLAN requires kernel headers >= 4.9, checked using auto-config.sh.
Signed-off-by: Pascal Mazon <pascal.mazon@6wind.com> Acked-by: Olga Shern <olgas@mellanox.com> Acked-by: Keith Wiles <keith.wiles@intel.com>
show more ...
|
#
268483dc |
| 23-Mar-2017 |
Pascal Mazon <pascal.mazon@6wind.com> |
net/tap: add preliminary support for flow API
The flow API provides the ability to classify packets received by a tap netdevice.
This patch only implements skeleton functions for flow API support,
net/tap: add preliminary support for flow API
The flow API provides the ability to classify packets received by a tap netdevice.
This patch only implements skeleton functions for flow API support, no patterns are supported yet.
Signed-off-by: Pascal Mazon <pascal.mazon@6wind.com> Acked-by: Olga Shern <olgas@mellanox.com> Acked-by: Keith Wiles <keith.wiles@intel.com>
show more ...
|