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 2/3] netlink: specs: add ovs datapath and vport set operations
Date: Sun, 15 Nov 2026 02:26:37 -0500 [thread overview]
Message-ID: <20261115072638.3163018-3-houminxi@gmail.com> (raw)
In-Reply-To: <20261115072638.3163018-1-houminxi@gmail.com>
Both families register a SET command that the spec never described, so a
YNL client could not change an existing datapath or vport. The datapath
NEW command also gains the masks cache size, the per-cpu upcall pids and
the ifindex, which its handler reads. new, del and set take
CAP_NET_ADMIN, which is GENL_UNS_ADMIN_PERM in the kernel.
The datapath SET command changes the user features, the masks cache size
and the per-cpu upcall pids. A request that leaves out user-features is
read as zero, which clears the features set earlier. per-cpu-pids takes
effect only when the same request sets OVS_DP_F_DISPATCH_UPCALL_PER_CPU
in user-features; without that bit the pids are dropped and the request
still succeeds.
The vport SET command changes the upcall pid. It finds the vport by name,
or by port number when the request carries no name. An ifindex or options
are rejected with -EOPNOTSUPP, and a type that differs from the vport's
type with -EINVAL. The type only has to match. The vport NEW request list
gains the port number, which its handler reads.
The ifindex attribute is signed in both policies, which read it with
nla_get_s32_default() and reject anything below zero, so declare it as
s32 to match them rather than leaving it u32. The field in the generated
reply struct becomes __s32 with it. The reply itself does not change:
ovs_vport_cmd_fill_info() still puts the value as u32, and the two types
have the same width.
The ops in both families skip strict and dump validation in the kernel,
so the spec says so for get, new, del and set.
Both SET commands also send the updated object to the family's multicast
group, and to the requester when the request sets NLM_F_ECHO, which the
new op docs say.
Signed-off-by: Minxi Hou <houminxi@gmail.com>
---
Documentation/netlink/specs/ovs_datapath.yaml | 37 ++++++++++++++++++-
Documentation/netlink/specs/ovs_vport.yaml | 31 +++++++++++++++-
2 files changed, 65 insertions(+), 3 deletions(-)
diff --git a/Documentation/netlink/specs/ovs_datapath.yaml b/Documentation/netlink/specs/ovs_datapath.yaml
index f7b3671991e6..6232760224dc 100644
--- a/Documentation/netlink/specs/ovs_datapath.yaml
+++ b/Documentation/netlink/specs/ovs_datapath.yaml
@@ -108,7 +108,9 @@ attribute-sets:
sub-type: u32
-
name: ifindex
- type: u32
+ type: s32
+ checks:
+ min: 0
operations:
fixed-header: ovs-header
@@ -119,6 +121,7 @@ operations:
doc: Get / dump OVS data path configuration and state
value: 3
attribute-set: datapath
+ dont-validate: [strict, dump]
do: &dp-get-op
request:
attributes:
@@ -135,24 +138,54 @@ operations:
dump: *dp-get-op
-
name: new
- doc: Create new OVS data path
+ doc: |
+ Create new OVS data path. per-cpu-pids takes effect only when the
+ same request sets OVS_DP_F_DISPATCH_UPCALL_PER_CPU in user-features.
value: 1
attribute-set: datapath
+ dont-validate: [strict, dump]
+ flags: [uns-admin-perm]
do:
request:
attributes:
- name
- upcall-pid
- user-features
+ - masks-cache-size
+ - per-cpu-pids
+ - ifindex
-
name: del
doc: Delete existing OVS data path
value: 2
attribute-set: datapath
+ dont-validate: [strict, dump]
+ flags: [uns-admin-perm]
+ do:
+ request:
+ attributes:
+ - name
+ -
+ name: set
+ doc: |
+ Modify an existing OVS data path. The kernel treats a missing
+ user-features attribute as zero and clears the previously set
+ features. per-cpu-pids takes effect only when the same request
+ sets OVS_DP_F_DISPATCH_UPCALL_PER_CPU in user-features. A
+ successful set also sends the updated data path to the
+ family's multicast group, and to the requester when the
+ request sets NLM_F_ECHO.
+ value: 4
+ attribute-set: datapath
+ dont-validate: [strict, dump]
+ flags: [uns-admin-perm]
do:
request:
attributes:
- name
+ - user-features
+ - masks-cache-size
+ - per-cpu-pids
mcast-groups:
list:
diff --git a/Documentation/netlink/specs/ovs_vport.yaml b/Documentation/netlink/specs/ovs_vport.yaml
index fa975f8821b6..af7ee56f5f90 100644
--- a/Documentation/netlink/specs/ovs_vport.yaml
+++ b/Documentation/netlink/specs/ovs_vport.yaml
@@ -111,7 +111,9 @@ attribute-sets:
type: unused
-
name: ifindex
- type: u32
+ type: s32
+ checks:
+ min: 0
-
name: netnsid
type: u32
@@ -128,18 +130,23 @@ operations:
name: new
doc: Create a new OVS vport
attribute-set: vport
+ dont-validate: [strict, dump]
+ flags: [uns-admin-perm]
do:
request:
attributes:
- name
- type
- upcall-pid
+ - port-no
- ifindex
- options
-
name: del
doc: Delete existing OVS vport from a data path
attribute-set: vport
+ dont-validate: [strict, dump]
+ flags: [uns-admin-perm]
do:
request:
attributes:
@@ -150,6 +157,7 @@ operations:
name: get
doc: Get / dump OVS vport configuration and state
attribute-set: vport
+ dont-validate: [strict, dump]
do: &vport-get-op
request:
attributes:
@@ -165,6 +173,27 @@ operations:
- netnsid
- upcall-stats
dump: *vport-get-op
+ -
+ name: set
+ doc: |
+ Modify an existing OVS vport. The vport is picked by name, or by
+ port number when the request carries no name. An ifindex or options
+ are rejected with -EOPNOTSUPP, and a type that differs from the
+ vport's type with -EINVAL. The type only has to match; the one
+ attribute that changes state is upcall-pid. A successful set
+ also sends the updated vport to the family's multicast group,
+ and to the requester when the request sets NLM_F_ECHO.
+ value: 4
+ attribute-set: vport
+ dont-validate: [strict, dump]
+ flags: [uns-admin-perm]
+ do:
+ request:
+ attributes:
+ - name
+ - type
+ - upcall-pid
+ - port-no
mcast-groups:
list:
--
2.56.0
next prev parent reply other threads:[~2026-11-15 7:27 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-15 7:26 [PATCH net-next v8 0/3] netlink: specs: fill in the missing ovs operations Minxi Hou
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 ` Minxi Hou [this message]
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-3-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