From: Daniel Jurgens <danielj@nvidia.com>
To: <netdev@vger.kernel.org>, <mst@redhat.com>, <jasowang@redhat.com>,
<alex.williamson@redhat.com>, <pabeni@redhat.com>
Cc: <virtualization@lists.linux.dev>, <parav@nvidia.com>,
<shshitrit@nvidia.com>, <yohadt@nvidia.com>,
<xuanzhuo@linux.alibaba.com>, <eperezma@redhat.com>,
<shameerali.kolothum.thodi@huawei.com>, <jgg@ziepe.ca>,
<kevin.tian@intel.com>, <kuba@kernel.org>,
<andrew+netdev@lunn.ch>, <edumazet@google.com>,
Daniel Jurgens <danielj@nvidia.com>
Subject: [PATCH net-next v7 00/12] virtio_net: Add ethtool flow rules support
Date: Mon, 3 Nov 2025 16:55:02 -0600 [thread overview]
Message-ID: <20251103225514.2185-1-danielj@nvidia.com> (raw)
This series implements ethtool flow rules support for virtio_net using the
virtio flow filter (FF) specification. The implementation allows users to
configure packet filtering rules through ethtool commands, directing
packets to specific receive queues, or dropping them based on various
header fields.
The series starts with infrastructure changes to expose virtio PCI admin
capabilities and object management APIs. It then creates the virtio_net
directory structure and implements the flow filter functionality with support
for:
- Layer 2 (Ethernet) flow rules
- IPv4 and IPv6 flow rules
- TCP and UDP flow rules (both IPv4 and IPv6)
- Rule querying and management operations
Setting, deleting and viewing flow filters, -1 action is drop, positive
integers steer to that RQ:
$ ethtool -u ens9
4 RX rings available
Total 0 rules
$ ethtool -U ens9 flow-type ether src 1c:34:da:4a:33:dd action 0
Added rule with ID 0
$ ethtool -U ens9 flow-type udp4 dst-port 5001 action 3
Added rule with ID 1
$ ethtool -U ens9 flow-type tcp6 src-ip fc00::2 dst-port 5001 action 2
Added rule with ID 2
$ ethtool -U ens9 flow-type ip4 src-ip 192.168.51.101 action 1
Added rule with ID 3
$ ethtool -U ens9 flow-type ip6 dst-ip fc00::1 action -1
Added rule with ID 4
$ ethtool -U ens9 flow-type ip6 src-ip fc00::2 action -1
Added rule with ID 5
$ ethtool -U ens9 delete 4
$ ethtool -u ens9
4 RX rings available
Total 5 rules
Filter: 0
Flow Type: Raw Ethernet
Src MAC addr: 1C:34:DA:4A:33:DD mask: 00:00:00:00:00:00
Dest MAC addr: 00:00:00:00:00:00 mask: FF:FF:FF:FF:FF:FF
Ethertype: 0x0 mask: 0xFFFF
Action: Direct to queue 0
Filter: 1
Rule Type: UDP over IPv4
Src IP addr: 0.0.0.0 mask: 255.255.255.255
Dest IP addr: 0.0.0.0 mask: 255.255.255.255
TOS: 0x0 mask: 0xff
Src port: 0 mask: 0xffff
Dest port: 5001 mask: 0x0
Action: Direct to queue 3
Filter: 2
Rule Type: TCP over IPv6
Src IP addr: fc00::2 mask: ::
Dest IP addr: :: mask: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Traffic Class: 0x0 mask: 0xff
Src port: 0 mask: 0xffff
Dest port: 5001 mask: 0x0
Action: Direct to queue 2
Filter: 3
Rule Type: Raw IPv4
Src IP addr: 192.168.51.101 mask: 0.0.0.0
Dest IP addr: 0.0.0.0 mask: 255.255.255.255
TOS: 0x0 mask: 0xff
Protocol: 0 mask: 0xff
L4 bytes: 0x0 mask: 0xffffffff
Action: Direct to queue 1
Filter: 5
Rule Type: Raw IPv6
Src IP addr: fc00::2 mask: ::
Dest IP addr: :: mask: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Traffic Class: 0x0 mask: 0xff
Protocol: 0 mask: 0xff
L4 bytes: 0x0 mask: 0xffffffff
Action: Drop
---
v2: https://lore.kernel.org/netdev/20250908164046.25051-1-danielj@nvidia.com/
- Fix sparse warnings
- Fix memory leak on subsequent failure to allocate
- Fix some Typos
v3: https://lore.kernel.org/netdev/20250923141920.283862-1-danielj@nvidia.com/
- Added admin_ops to virtio_device kdoc.
v4:
- Fixed double free bug inserting flows
- Fixed incorrect protocol field check parsing ip4 headers.
- (u8 *) changed to (void *)
- Added kdoc comments to UAPI changes.
- No longer split up virtio_net.c
- Added config op to execute admin commands.
- virtio_pci assigns vp_modern_admin_cmd_exec to this callback.
- Moved admin command API to new core file virtio_admin_commands.c
v5:
- Fixed compile error
- Fixed static analysis warning on () after macro
- Added missing fields to kdoc comments
- Aligned parameter name between prototype and kdoc
v6:
- Fix sparse warning "array of flexible structures" Jakub K/Simon H
- Use new variable and validate ff_mask_size before set_cap. MST
v7:
- Change virtnet_ff_init to return a value. Allow -EOPNOTSUPP. Xuan
- Set ff->ff_{caps, mask, actions} NULL in error path. Paolo Abini
- Move for (int i removal hung back a patch. Paolo Abini
Daniel Jurgens (12):
virtio_pci: Remove supported_cap size build assert
virtio: Add config_op for admin commands
virtio: Expose generic device capability operations
virtio: Expose object create and destroy API
virtio_net: Query and set flow filter caps
virtio_net: Create a FF group for ethtool steering
virtio_net: Implement layer 2 ethtool flow rules
virtio_net: Use existing classifier if possible
virtio_net: Implement IPv4 ethtool flow rules
virtio_net: Add support for IPv6 ethtool steering
virtio_net: Add support for TCP and UDP ethtool rules
virtio_net: Add get ethtool flow rules ops
drivers/net/virtio_net.c | 1139 ++++++++++++++++++++++++
drivers/virtio/Makefile | 2 +-
drivers/virtio/virtio_admin_commands.c | 165 ++++
drivers/virtio/virtio_pci_common.h | 1 -
drivers/virtio/virtio_pci_modern.c | 10 +-
include/linux/virtio_admin.h | 125 +++
include/linux/virtio_config.h | 6 +
include/uapi/linux/virtio_net_ff.h | 156 ++++
include/uapi/linux/virtio_pci.h | 7 +-
9 files changed, 1600 insertions(+), 11 deletions(-)
create mode 100644 drivers/virtio/virtio_admin_commands.c
create mode 100644 include/linux/virtio_admin.h
create mode 100644 include/uapi/linux/virtio_net_ff.h
--
2.50.1
next reply other threads:[~2025-11-03 22:55 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-03 22:55 Daniel Jurgens [this message]
2025-11-03 22:55 ` [PATCH net-next v7 01/12] virtio_pci: Remove supported_cap size build assert Daniel Jurgens
2025-11-03 22:55 ` [PATCH net-next v7 02/12] virtio: Add config_op for admin commands Daniel Jurgens
2025-11-03 22:55 ` [PATCH net-next v7 03/12] virtio: Expose generic device capability operations Daniel Jurgens
2025-11-03 22:55 ` [PATCH net-next v7 04/12] virtio: Expose object create and destroy API Daniel Jurgens
2025-11-03 22:55 ` [PATCH net-next v7 05/12] virtio_net: Query and set flow filter caps Daniel Jurgens
2025-11-04 4:33 ` Jason Wang
2025-11-04 17:10 ` Dan Jurgens
2025-11-05 14:19 ` Simon Horman
2025-11-07 3:38 ` Dan Jurgens
2025-11-03 22:55 ` [PATCH net-next v7 06/12] virtio_net: Create a FF group for ethtool steering Daniel Jurgens
2025-11-03 22:55 ` [PATCH net-next v7 07/12] virtio_net: Implement layer 2 ethtool flow rules Daniel Jurgens
2025-11-04 4:34 ` Jason Wang
2025-11-04 17:07 ` Dan Jurgens
2025-11-03 22:55 ` [PATCH net-next v7 08/12] virtio_net: Use existing classifier if possible Daniel Jurgens
2025-11-03 22:55 ` [PATCH net-next v7 09/12] virtio_net: Implement IPv4 ethtool flow rules Daniel Jurgens
2025-11-04 4:35 ` Jason Wang
2025-11-04 17:04 ` Dan Jurgens
2025-11-03 22:55 ` [PATCH net-next v7 10/12] virtio_net: Add support for IPv6 ethtool steering Daniel Jurgens
2025-11-03 22:55 ` [PATCH net-next v7 11/12] virtio_net: Add support for TCP and UDP ethtool rules Daniel Jurgens
2025-11-03 22:55 ` [PATCH net-next v7 12/12] virtio_net: Add get ethtool flow rules ops Daniel Jurgens
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251103225514.2185-1-danielj@nvidia.com \
--to=danielj@nvidia.com \
--cc=alex.williamson@redhat.com \
--cc=andrew+netdev@lunn.ch \
--cc=edumazet@google.com \
--cc=eperezma@redhat.com \
--cc=jasowang@redhat.com \
--cc=jgg@ziepe.ca \
--cc=kevin.tian@intel.com \
--cc=kuba@kernel.org \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=parav@nvidia.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=shshitrit@nvidia.com \
--cc=virtualization@lists.linux.dev \
--cc=xuanzhuo@linux.alibaba.com \
--cc=yohadt@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).