From: Minxi Hou <houminxi@gmail.com>
To: netdev@vger.kernel.org
Cc: "David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@kernel.org>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>,
Donald Hunter <donald.hunter@gmail.com>,
Aaron Conole <aconole@redhat.com>,
Eelco Chaudron <echaudro@redhat.com>,
Ilya Maximets <i.maximets@ovn.org>
Subject: [PATCH net-next v8 0/3] netlink: specs: fill in the missing ovs operations
Date: Sun, 15 Nov 2026 02:26:35 -0500 [thread overview]
Message-ID: <20261115072638.3163018-1-houminxi@gmail.com> (raw)
The ovs specs describe get and new but not every command the kernel
has registered: all three families lacked set, and ovs_flow also lacked
del. This series adds them, names the attributes each handler reads,
and corrects what the existing specs say about the kernel. Nothing
here changes how the kernel behaves.
v8:
https://lore.kernel.org/netdev/20261110174751.973464-1@gmail.com/
- The datapath spec no longer puts a maximum on masks-cache-size. The
generator does not turn a check into a policy for these families, and
the kernel bound is an expression, so the declaration promised
something the spec cannot express.
- The docs no longer say what a dump does with a key, a ufid or another
request attribute. A dump now has its own request list for each family,
which states what it takes, so the sentences that repeated it are gone.
The ufid docs record the minimum length the policy sets, and the key,
actions, stats, used and tcp-flags docs say the attributes appear in
replies as well as in notifications.
- The series gains a third patch for gaps that predate it. The vport
netnsid is signed in the kernel. The two dumps stop sharing a request
list with their get operation, and four lists named attributes their
handler never reads or sends. The vport get request can be answered by
port number, and the vport new doc says an ifindex needs an internal
vport. The vport spec declared family version 2 where the kernel
registers 1.
- That patch also declares what the kernel registers: all four ovs specs
document the header struct and none of them a member of it, the vport
name note names the header member the lookup uses, the options note
says what a set returns, the packet execute operation gains the
validate flags and the admin permission, and the ynl selftest stops
printing a field the datapath reply does not carry.
- Deleting one flow sends that flow to the family's multicast group, a
flush sends nothing, and the set operations do the same for the object
they change, which those op docs now say.
v7:
https://lore.kernel.org/netdev/20261107120647.874906-1@gmail.com/
- The ufid docs said a value outside 1-16 octets is read as absent, and
that a dump ignores the attribute. Only a value longer than 16 octets
is read as absent. A zero length value fails the policy check before
the command runs, and the request fails with -ERANGE; a dump accepts
the attribute and does not read it.
- The del and key docs said that a del with an out of range ufid
flushes the data path. That only holds when the request carries no
key, which the text now says.
- The get reply list names the last-used time and the TCP flags, which
ovs_flow_cmd_fill_stats() fills for get and for dump, and the docs of
the stats, the used time and the TCP flags now say replies and
notifications rather than notifications only.
- The vport set doc says what the command does instead of explaining
why two attributes are missing from the list, and says that the type
only has to match.
- The datapath new doc reads as a sentence again, the masks cache size
records its upper bound of 4096, and the vport new request list gains
the port number, which its handler reads.
- Patch 2 says why ifindex is s32, which is to match the policy and
nla_get_s32_default() in the request path, and that the generated
reply struct follows with a __s32 field while the reply itself keeps
putting the value as u32.
v6:
https://lore.kernel.org/netdev/20261103183319.2730567-1-houminxi@gmail.com/
- A del flushes the data path when it carries no key and no valid ufid,
not when it carries neither. The kernel reads a ufid outside 1-16
octets as absent, so such a request flushes as well. The ufid doc now
says that, and that a new request with such a value indexes the flow
by its key instead, and the attribute records the minimum length the
policy enforces. The same sentences in
include/uapi/linux/openvswitch.h follow.
- ifindex is declared s32 with a minimum of 0, which is how both
policies read it. No request used the attribute before this series,
which is why the type went unnoticed.
- The ops skip strict and dump validation in the kernel, so get, new,
del and set say so in all three specs.
- Rebased onto current net-next.
v5:
https://lore.kernel.org/netdev/20261025103409.3519874-1-houminxi@gmail.com/
- ovs_flow dump gets a request list of its own with ufid-flags. It
shared the get list, which offered a key and a ufid the kernel
ignores on a dump. The reply is unchanged.
- The key, actions and ufid docs no longer claim those attributes are
always present, and say what the exceptions are: a ufid-identified
flow sends no key or actions when the request asked for them to be
left out, a dump leaves the actions out when they do not fit, and a
dump ignores the ufid. The same sentences in
include/uapi/linux/openvswitch.h are updated to match, since the
spec text was copied from there.
- The key doc now says a get and a set need a key or a ufid, that a
new request needs a key, and that a del carrying neither flushes the
data path.
- The ovs_datapath new and set docs say per-cpu-pids takes effect only
when the same request sets OVS_DP_F_DISPATCH_UPCALL_PER_CPU in
user-features.
- The ovs_vport set doc says the vport is picked by name or by port
number, names the rejections in the order the kernel checks them,
and says upcall-pid is the only attribute that changes state.
- Rebased onto current net-next after the merge window.
v4:
https://lore.kernel.org/netdev/20261015024132.698658-1-houminxi@gmail.com/
- ovs_vport set lists port-no and ifindex. lookup_vport() finds a
vport by name or by port number, and returns -EOPNOTSUPP as soon as
it sees an ifindex, before the type or the options are looked at.
- ovs_datapath new lists masks-cache-size, per-cpu-pids and ifindex.
new calls ovs_dp_change(), which reads the first two, and reads
ifindex itself.
- ovs_flow get lists probe. ovs_flow_cmd_get() reads it to decide
whether to log.
- The key attribute doc now says a new request needs a key even when
it finds an existing flow and replaces its actions, and that a dump
reads neither the key nor the ufid. A del with neither flushes the
data path, and the del operation doc says so too.
v3:
https://lore.kernel.org/netdev/20261012065552.2426415-1-houminxi@gmail.com/
- no change since v2.
v2:
https://lore.kernel.org/netdev/20261006130533.1620706-1-houminxi@gmail.com/
- ovs_flow new lists ufid-flags and probe, which ovs_flow_cmd_new()
reads.
- The commit message now says probe changes from binary to flag, and
that new needs CAP_NET_ADMIN.
- The key attribute doc no longer says a key is required for every
request except a dump. get, set and del accept a ufid with no key,
and only a new flow needs a key. A set that replaces the actions
still needs a key.
Signed-off-by: Minxi Hou <houminxi@gmail.com>
---
Minxi Hou (3):
netlink: specs: add ovs_flow del and set operations
netlink: specs: add ovs datapath and vport set operations
netlink: specs: correct the ovs specs where they do not match the
kernel
Documentation/netlink/specs/ovs_datapath.yaml | 53 +++++++--
Documentation/netlink/specs/ovs_flow.yaml | 110 ++++++++++++++----
Documentation/netlink/specs/ovs_packet.yaml | 20 +++-
Documentation/netlink/specs/ovs_vport.yaml | 55 +++++++--
include/uapi/linux/openvswitch.h | 49 +++++---
tools/net/ynl/tests/ovs.c | 5 +-
6 files changed, 225 insertions(+), 67 deletions(-)
base-commit: 6964ff21c5d8b75649211a52dbfd92753e605649
--
2.56.0
next reply other threads:[~2026-11-15 7:26 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-15 7:26 Minxi Hou [this message]
2026-11-15 7:26 ` [PATCH net-next v8 1/3] netlink: specs: add ovs_flow del and set operations Minxi Hou
2026-11-15 7:26 ` [PATCH net-next v8 2/3] netlink: specs: add ovs datapath and vport " Minxi Hou
2026-11-15 7:26 ` [PATCH net-next v8 3/3] netlink: specs: correct the ovs specs where they do not match the kernel Minxi Hou
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=20261115072638.3163018-1-houminxi@gmail.com \
--to=houminxi@gmail.com \
--cc=aconole@redhat.com \
--cc=davem@davemloft.net \
--cc=donald.hunter@gmail.com \
--cc=echaudro@redhat.com \
--cc=edumazet@kernel.org \
--cc=horms@kernel.org \
--cc=i.maximets@ovn.org \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.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