From: Minxi Hou <houminxi@gmail.com>
To: netdev@vger.kernel.org
Cc: Donald Hunter <donald.hunter@gmail.com>,
Jakub Kicinski <kuba@kernel.org>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@kernel.org>,
Paolo Abeni <pabeni@redhat.com>, Simon Horman <horms@kernel.org>
Subject: [PATCH net-next v5 2/2] netlink: specs: add ovs datapath and vport set operations
Date: Tue, 3 Nov 2026 13:33:19 -0500 [thread overview]
Message-ID: <20261103183319.2730567-3-houminxi@gmail.com> (raw)
In-Reply-To: <20261103183319.2730567-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 new operation reads per-cpu-pids the same way, so its
doc says so too.
The vport SET command changes the upcall pid. It finds the vport by name
or by port number, and rejects an ifindex with -EOPNOTSUPP before it
looks at the type or the options. A type that differs from the vport's
type is rejected with -EINVAL, and options with -EOPNOTSUPP.
Signed-off-by: Minxi Hou <houminxi@gmail.com>
---
Documentation/netlink/specs/ovs_datapath.yaml | 27 ++++++++++++++++++-
Documentation/netlink/specs/ovs_vport.yaml | 22 +++++++++++++++
2 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/Documentation/netlink/specs/ovs_datapath.yaml b/Documentation/netlink/specs/ovs_datapath.yaml
index f7b3671991e6..8a8adf3820e6 100644
--- a/Documentation/netlink/specs/ovs_datapath.yaml
+++ b/Documentation/netlink/specs/ovs_datapath.yaml
@@ -135,24 +135,49 @@ 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
+ user-features in the same request sets
+ OVS_DP_F_DISPATCH_UPCALL_PER_CPU.
value: 1
attribute-set: datapath
+ 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
+ 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.
+ value: 4
+ attribute-set: datapath
+ 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..e3971bbab4c5 100644
--- a/Documentation/netlink/specs/ovs_vport.yaml
+++ b/Documentation/netlink/specs/ovs_vport.yaml
@@ -128,6 +128,7 @@ operations:
name: new
doc: Create a new OVS vport
attribute-set: vport
+ flags: [uns-admin-perm]
do:
request:
attributes:
@@ -140,6 +141,7 @@ operations:
name: del
doc: Delete existing OVS vport from a data path
attribute-set: vport
+ flags: [uns-admin-perm]
do:
request:
attributes:
@@ -165,6 +167,26 @@ 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. The kernel rejects an ifindex with -EOPNOTSUPP, before
+ it looks at the type or the options. It rejects a type that differs
+ from the vport's type with -EINVAL, and rejects options with
+ -EOPNOTSUPP. The only attribute that changes state is upcall-pid.
+ value: 4
+ attribute-set: vport
+ flags: [uns-admin-perm]
+ do:
+ request:
+ attributes:
+ - name
+ - type
+ - options
+ - upcall-pid
+ - port-no
+ - ifindex
mcast-groups:
list:
--
2.56.0
next prev parent reply other threads:[~2026-11-03 18:33 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-03 18:33 [PATCH net-next v5 0/2] netlink: specs: fill in the missing ovs operations Minxi Hou
2026-11-03 18:33 ` [PATCH net-next v5 1/2] netlink: specs: add ovs_flow del and set operations Minxi Hou
2026-11-03 18:33 ` Minxi Hou [this message]
2026-11-04 17:26 ` [PATCH net-next v5 0/2] netlink: specs: fill in the missing ovs operations 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=20261103183319.2730567-3-houminxi@gmail.com \
--to=houminxi@gmail.com \
--cc=davem@davemloft.net \
--cc=donald.hunter@gmail.com \
--cc=edumazet@kernel.org \
--cc=horms@kernel.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