* [PATCH net-next 0/2] netlink: specs: fill in the missing ovs operations @ 2026-10-06 13:05 Minxi Hou 2026-10-06 13:05 ` [PATCH net-next 1/2] netlink: specs: add ovs_flow del and set operations Minxi Hou 2026-10-06 13:05 ` [PATCH net-next 2/2] netlink: specs: add ovs datapath and vport " Minxi Hou 0 siblings, 2 replies; 7+ messages in thread From: Minxi Hou @ 2026-10-06 13:05 UTC (permalink / raw) To: netdev Cc: Donald Hunter, Jakub Kicinski, David S . Miller, Eric Dumazet, Paolo Abeni, Simon Horman The ovs datapath, vport and flow specs describe families the kernel has shipped for a long time, but each one stops short of the write commands. ovs_flow has get and new only. The datapath and vport specs have no set. Nothing in the tree generates code from these files. A YNL client only hits the gap when it tries to send the command. Name the missing operations and the attributes the kernel handlers read. del and set on ovs_flow, set on ovs_datapath and ovs_vport. The handlers take CAP_NET_ADMIN through GENL_UNS_ADMIN_PERM, and so do the new and del commands that were already in the specs. Mark all nine write operations uns-admin-perm. get stays open. Two requests are rejected for reasons the attribute list cannot say. Flow set returns -EINVAL when it carries neither a key nor a ufid. Datapath set treats a missing user-features attribute as zero, so it clears whatever was set before. Both are in the operation doc. The new, del and set handlers fill a reply, but they send it with ovs_notify() to the multicast group. The caller gets an ack, not those attributes, so the specs do not list a reply for them. get does, and it returns the attributes to the caller. Checked against a live kernel: flow set and delete, a delete with no key that flushes the data path, a datapath set of the masks cache size that also clears user features, and a vport set of the upcall pid. A vport set that changes the type returns -EINVAL, as the handler does. Signed-off-by: Minxi Hou <houminxi@gmail.com> --- Minxi Hou (2): netlink: specs: add ovs_flow del and set operations netlink: specs: add ovs datapath and vport set operations Documentation/netlink/specs/ovs_datapath.yaml | 18 ++++++++++++ Documentation/netlink/specs/ovs_flow.yaml | 31 +++++++++++++++++++++ Documentation/netlink/specs/ovs_vport.yaml | 15 ++++++++++ 3 files changed, 64 insertions(+) base-commit: a5e7d8e446af9803e37a3b6a4d416fb41178348f -- 2.55.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH net-next 1/2] netlink: specs: add ovs_flow del and set operations 2026-10-06 13:05 [PATCH net-next 0/2] netlink: specs: fill in the missing ovs operations Minxi Hou @ 2026-10-06 13:05 ` Minxi Hou 2026-10-08 13:08 ` netdev-bot+sashiko 2026-10-06 13:05 ` [PATCH net-next 2/2] netlink: specs: add ovs datapath and vport " Minxi Hou 1 sibling, 1 reply; 7+ messages in thread From: Minxi Hou @ 2026-10-06 13:05 UTC (permalink / raw) To: netdev Cc: Donald Hunter, Jakub Kicinski, David S . Miller, Eric Dumazet, Paolo Abeni, Simon Horman The ovs_flow spec only described get and new, so a YNL client could not delete or modify a flow. The kernel has had both commands since the family was added: del flushes the data path when neither a key nor a ufid is given, and set looks a flow up by key or ufid. Name the attributes each command reads. del and set need CAP_NET_ADMIN. Signed-off-by: Minxi Hou <houminxi@gmail.com> --- Documentation/netlink/specs/ovs_flow.yaml | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Documentation/netlink/specs/ovs_flow.yaml b/Documentation/netlink/specs/ovs_flow.yaml index 951837b72e1d..87984bf1fac4 100644 --- a/Documentation/netlink/specs/ovs_flow.yaml +++ b/Documentation/netlink/specs/ovs_flow.yaml @@ -988,6 +988,7 @@ operations: doc: Create OVS flow configuration in a data path value: 1 attribute-set: flow-attrs + flags: [uns-admin-perm] do: request: attributes: @@ -995,6 +996,36 @@ operations: - ufid - mask - actions + - + name: del + doc: Delete one flow, or every flow in the data path + value: 2 + attribute-set: flow-attrs + flags: [uns-admin-perm] + do: + request: + attributes: + - key + - ufid + - ufid-flags + - + name: set + doc: | + Modify an existing flow. The kernel rejects the request with + -EINVAL when it carries neither a key nor a ufid. + value: 4 + attribute-set: flow-attrs + flags: [uns-admin-perm] + do: + request: + attributes: + - key + - ufid + - mask + - actions + - ufid-flags + - clear + - probe mcast-groups: list: -- 2.55.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH net-next 1/2] netlink: specs: add ovs_flow del and set operations 2026-10-06 13:05 ` [PATCH net-next 1/2] netlink: specs: add ovs_flow del and set operations Minxi Hou @ 2026-10-08 13:08 ` netdev-bot+sashiko 2026-10-09 3:25 ` Minxi Hou 0 siblings, 1 reply; 7+ messages in thread From: netdev-bot+sashiko @ 2026-10-08 13:08 UTC (permalink / raw) To: houminxi; +Cc: netdev, donald.hunter, kuba, davem, edumazet, pabeni, horms Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider. Critical: 0 · High: 0 · Medium: 1 · Low: 3 If you believe none of the issues are legitimate, please reply to each issue of Medium severity or higher and explain why the AI is wrong. If any of them are legitimate and you plan to respin, please let patchwork know by including "pw-bot: cr" as a separate line at the end of your reply (one such reply per series is enough). - [Medium] The new `set` op in Documentation/netlink/specs/ovs_flow.yaml lists `probe` as a request attribute. - [Low] The new `del` op in Documentation/netlink/specs/ovs_flow.yaml lists only key, ufid and ufid-flags. - [Low] The new `del` and `set` ops in ovs_flow.yaml declare only `do.request`: no `reply`, and no op with `notify: del`/`notify: set`. - [Low] The `set` op doc says: "The kernel rejects the request with -EINVAL when it carries neither a key nor a ufid." Together with the… -- netlink: specs: add ovs_flow del and set operations This patch adds del and set operations to the ovs_flow YNL spec. It also marks new, del and set with uns-admin-perm. It lists the request attributes each command reads. > diff --git a/Documentation/netlink/specs/ovs_flow.yaml b/Documentation/netlink/specs/ovs_flow.yaml > index 951837b72e1d2..87984bf1fac4b 100644 > --- a/Documentation/netlink/specs/ovs_flow.yaml > +++ b/Documentation/netlink/specs/ovs_flow.yaml [ ... ] > @@ -995,6 +996,36 @@ operations: > - ufid > - mask > - actions > + - > + name: del > + doc: Delete one flow, or every flow in the data path > + value: 2 > + attribute-set: flow-attrs > + flags: [uns-admin-perm] > + do: > + request: > + attributes: > + - key > + - ufid > + - ufid-flags [Severity: Low] Should probe be listed here too? ovs_flow_cmd_del() reads it: net/openvswitch/datapath.c:ovs_flow_cmd_del() { ... bool log = !a[OVS_FLOW_ATTR_PROBE]; bool ufid_present; ufid_present = ovs_nla_get_ufid(&ufid, a[OVS_FLOW_ATTR_UFID], log); ... } log is then passed to ovs_nla_get_ufid() and ovs_nla_get_match(). The commit message says "Name the attributes each command reads", and the set op in this patch does list probe. C YNL only generates setters for request attributes that are listed. As a result, a C client cannot mark a delete as a feature probe to suppress the kernel's error logging. [Severity: Low] Neither del nor set describes a reply or a notification. Does the kernel send messages for these commands that the spec doesn't cover? ovs_flow_cmd_del() uses ovs_flow_cmd_fill_info() to build an OVS_FLOW_CMD_DEL message. It carries the deleted flow's key, ufid, mask, stats, actions, used and tcp-flags. ovs_flow_cmd_set() builds an OVS_FLOW_CMD_SET message with ovs_flow_cmd_build_info(). Both handlers send through ovs_notify(), gated by ovs_must_notify(): net/openvswitch/datapath.c:ovs_must_notify() { return info->nlhdr->nlmsg_flags & NLM_F_ECHO || genl_has_listeners(family, genl_info_net(info), group); } A client may set NLM_F_ECHO to get the final stats of a deleted flow, or subscribe to the ovs_flow mcast group. In both cases the spec gives it nothing to decode these messages with. The existing new op and the ovs_datapath and ovs_vport specs have the same gap, so this follows existing practice in the OVS specs. Still, the new ops describe less than the kernel sends. Could a reply or notify description be added for del and set? > + - > + name: set > + doc: | > + Modify an existing flow. The kernel rejects the request with > + -EINVAL when it carries neither a key nor a ufid. [Severity: Low] Is this doc complete? The request list below includes both ufid and actions, so the doc reads as though a ufid alone is enough for any set. After the key/ufid check, ovs_flow_cmd_set() calls ovs_nla_init_match_and_action(). That function rejects actions without a key, even when a ufid is present: net/openvswitch/datapath.c:ovs_nla_init_match_and_action() { ... if (a[OVS_FLOW_ATTR_ACTIONS]) { if (!a[OVS_FLOW_ATTR_KEY]) { OVS_NLERR(log, "Flow key attribute not present in set flow."); error = -EINVAL; goto error; } ... } A set that carries only a ufid works for stats or clear updates. One that replaces actions always gets -EINVAL. Could the doc say that a key is required when actions are supplied? > + value: 4 > + attribute-set: flow-attrs > + flags: [uns-admin-perm] > + do: > + request: > + attributes: > + - key > + - ufid > + - mask > + - actions > + - ufid-flags > + - clear > + - probe [Severity: Medium] Should probe be declared as type: flag in flow-attrs? The attribute set currently has: name: probe type: binary The kernel policy treats it as a flag: net/openvswitch/datapath.c:flow_policy[] = { ... [OVS_FLOW_ATTR_CLEAR] = { .type = NLA_FLAG }, [OVS_FLOW_ATTR_PROBE] = { .type = NLA_FLAG }, ... } validate_nla() in lib/nlattr.c rejects an NLA_FLAG attribute that carries any payload: case NLA_FLAG: if (attrlen > 0) goto out_err; Before this patch no op listed probe in a request, so the mismatch was not visible. Now that set lists it, C YNL codegen will emit a pointer plus length binary setter for probe. Any non-empty payload makes the whole OVS_FLOW_CMD_SET fail policy validation with -EINVAL. In Python YNL, passing "probe": true goes to the binary branch of _add_attr() in tools/net/ynl/pyynl/lib/ynl.py. That branch raises YnlException('Unknown type for binary attribute ...'), while the flag branch would accept the value. Could probe be changed to type: flag, the same as clear? > > mcast-groups: > list: -- Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261006130533.1620706-1-houminxi%40gmail.com ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next 1/2] netlink: specs: add ovs_flow del and set operations 2026-10-08 13:08 ` netdev-bot+sashiko @ 2026-10-09 3:25 ` Minxi Hou 0 siblings, 0 replies; 7+ messages in thread From: Minxi Hou @ 2026-10-09 3:25 UTC (permalink / raw) To: netdev Cc: Donald Hunter, Jakub Kicinski, David S. Miller, Eric Dumazet, Paolo Abeni, Simon Horman On Thu, 8 Oct 2026, netdev-bot+sashiko@kernel.org wrote: > [Medium] Should probe be declared as type: flag in flow-attrs? Yes. The kernel policy marks both probe and clear as NLA_FLAG, and clear was already a flag in the spec. probe stayed binary only because no request listed it, so nothing exercised the mismatch. v2 makes it a flag. > [Low] Should probe be listed on del as well? ovs_flow_cmd_del() reads it. Yes, and v2 adds it. ovs_flow_cmd_del() reads OVS_FLOW_ATTR_PROBE to decide whether to log the error. set listed it and del did not. > [Low] Is the set doc complete? Replacing actions needs a key even > when a ufid is present. The doc was wrong. ovs_nla_init_match_and_action() returns -EINVAL for actions with no key, whether or not a ufid is there. A ufid alone is enough for a stats or clear update. v2 says so. > [Low] Neither del nor set describes a reply or a notification. Both handlers build a message and send it with ovs_notify(), and ovs_must_notify() returns true when the request sets NLM_F_ECHO or the multicast group has a listener. A client that wants the message subscribes to the group. A do() call does not get those attributes back. I checked on a live kernel: new, set and del all return an ack, and only get returns the flow attributes. The existing new op and the datapath and vport specs describe the same thing the same way, which the review also notes. Listing a reply would tell a generated client that do() returns attributes it never receives. I left it off. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH net-next 2/2] netlink: specs: add ovs datapath and vport set operations 2026-10-06 13:05 [PATCH net-next 0/2] netlink: specs: fill in the missing ovs operations Minxi Hou 2026-10-06 13:05 ` [PATCH net-next 1/2] netlink: specs: add ovs_flow del and set operations Minxi Hou @ 2026-10-06 13:05 ` Minxi Hou 2026-10-08 13:08 ` netdev-bot+sashiko 1 sibling, 1 reply; 7+ messages in thread From: Minxi Hou @ 2026-10-06 13:05 UTC (permalink / raw) To: netdev Cc: Donald Hunter, Jakub Kicinski, David S . Miller, Eric Dumazet, Paolo Abeni, Simon Horman Both families register a SET command that the spec never described, so a YNL client could not modify an existing datapath or vport. The kernel handlers take CAP_NET_ADMIN through GENL_UNS_ADMIN_PERM. Datapath set changes user features, the masks cache size and the per-cpu upcall pids. Vport set changes the upcall pid; the kernel rejects a type change and rejects options. Signed-off-by: Minxi Hou <houminxi@gmail.com> --- Documentation/netlink/specs/ovs_datapath.yaml | 18 ++++++++++++++++++ Documentation/netlink/specs/ovs_vport.yaml | 15 +++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/Documentation/netlink/specs/ovs_datapath.yaml b/Documentation/netlink/specs/ovs_datapath.yaml index f7b3671991e6..9c33d6a2f05d 100644 --- a/Documentation/netlink/specs/ovs_datapath.yaml +++ b/Documentation/netlink/specs/ovs_datapath.yaml @@ -138,6 +138,7 @@ operations: doc: Create new OVS data path value: 1 attribute-set: datapath + flags: [uns-admin-perm] do: request: attributes: @@ -149,10 +150,27 @@ operations: 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. + 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..63a0a41a1199 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,19 @@ operations: - netnsid - upcall-stats dump: *vport-get-op + - + name: set + doc: Modify an existing OVS vport + value: 4 + attribute-set: vport + flags: [uns-admin-perm] + do: + request: + attributes: + - name + - type + - options + - upcall-pid mcast-groups: list: -- 2.55.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH net-next 2/2] netlink: specs: add ovs datapath and vport set operations 2026-10-06 13:05 ` [PATCH net-next 2/2] netlink: specs: add ovs datapath and vport " Minxi Hou @ 2026-10-08 13:08 ` netdev-bot+sashiko 2026-10-09 3:26 ` Minxi Hou 0 siblings, 1 reply; 7+ messages in thread From: netdev-bot+sashiko @ 2026-10-08 13:08 UTC (permalink / raw) To: houminxi; +Cc: netdev, donald.hunter, kuba, davem, edumazet, pabeni, horms Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider. Critical: 0 · High: 0 · Medium: 1 · Low: 2 If you believe none of the issues are legitimate, please reply to each issue of Medium severity or higher and explain why the AI is wrong. If any of them are legitimate and you plan to respin, please let patchwork know by including "pw-bot: cr" as a separate line at the end of your reply (one such reply per series is enough). - [Medium] The new vport `set` op in Documentation/netlink/specs/ovs_vport.yaml lists only name, type,… - [Low] The new vport `set` op lists `options` as a request attribute, but ovs_vport_cmd_set() returns -EOPNOTSUPP whenever… - [Low] The new datapath `set` doc says only that a missing user-features attribute is treated as zero and clears the features. -- netlink: specs: add ovs datapath and vport set operations This adds the set operation, which the kernel already registers, to the ovs_datapath and ovs_vport YNL specs. It also marks new, del and set in both specs with the uns-admin-perm flag. > diff --git a/Documentation/netlink/specs/ovs_datapath.yaml b/Documentation/netlink/specs/ovs_datapath.yaml > index f7b3671991e6c..9c33d6a2f05db 100644 > --- a/Documentation/netlink/specs/ovs_datapath.yaml > +++ b/Documentation/netlink/specs/ovs_datapath.yaml [ ... ] > @@ -149,10 +150,27 @@ operations: > 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. > + value: 4 > + attribute-set: datapath > + flags: [uns-admin-perm] > + do: > + request: > + attributes: > + - name > + - user-features > + - masks-cache-size > + - per-cpu-pids [Severity: Low] Should the doc also say how per-cpu-pids depends on user-features? In ovs_dp_change() the new features are assigned unconditionally. The pids are applied only when that same request turns on per-cpu dispatch: net/openvswitch/datapath.c:ovs_dp_change() { ... dp->user_features = user_features; if (dp->user_features & OVS_DP_F_DISPATCH_UPCALL_PER_CPU && a[OVS_DP_ATTR_PER_CPU_PIDS]) { /* Upcall Netlink Port IDs have been updated */ err = ovs_dp_set_upcall_portids(dp, a[OVS_DP_ATTR_PER_CPU_PIDS]); ... } Take a set request with name and per-cpu-pids where user-features is missing or lacks OVS_DP_F_DISPATCH_UPCALL_PER_CPU, for example because per-cpu dispatch was already on. The kernel clears or changes the features, ignores the pids without an error, and returns success. The spec lists per-cpu-pids as if it could be set on its own. The doc covers only the user-features half of this coupling. > diff --git a/Documentation/netlink/specs/ovs_vport.yaml b/Documentation/netlink/specs/ovs_vport.yaml > index fa975f8821b6c..63a0a41a11997 100644 > --- a/Documentation/netlink/specs/ovs_vport.yaml > +++ b/Documentation/netlink/specs/ovs_vport.yaml [ ... ] > @@ -165,6 +167,19 @@ operations: > - netnsid > - upcall-stats > dump: *vport-get-op > + - > + name: set > + doc: Modify an existing OVS vport > + value: 4 > + attribute-set: vport > + flags: [uns-admin-perm] > + do: > + request: > + attributes: > + - name [Severity: Medium] Should port-no be in this request list as well? ovs_vport_cmd_set() finds the vport with lookup_vport(). That function accepts either the name or the port number plus the datapath ifindex from the header: net/openvswitch/datapath.c:lookup_vport() { ... } else if (a[OVS_VPORT_ATTR_PORT_NO]) { u32 port_no = nla_get_u32(a[OVS_VPORT_ATTR_PORT_NO]); ... dp = get_dp(net, ovs_header->dp_ifindex); ... } The UAPI comment for enum ovs_vport_attr in include/uapi/linux/openvswitch.h also says that for requests other than new, "dp_idx from the &struct ovs_header plus %OVS_VPORT_ATTR_PORT_NO determine the vport". The del op in this same spec already lists port-no. YNL code generation builds the request struct from this list. Without port-no, a generated client can only modify a vport by name, not by datapath ifindex plus port number. Does that only partly fix the problem the commit message describes, that "a YNL client could not modify an existing datapath or vport"? > + - type > + - options [Severity: Low] Is it useful to list options here? ovs_vport_cmd_set() rejects it every time: net/openvswitch/datapath.c:ovs_vport_cmd_set() { ... if (a[OVS_VPORT_ATTR_OPTIONS]) { /* There are no vport types that support legacy options. */ err = -EOPNOTSUPP; goto exit_unlock_free; } ... } The vport_policy entry is also marked "/* Unused. */". The commit message says the kernel "rejects options", but the op doc only says "Modify an existing OVS vport". Generated clients therefore get a setter for an attribute that always fails with -EOPNOTSUPP. Could options be dropped from the set request? Or could the doc say that it is always rejected, and that a type different from the vport's current type gets -EINVAL? > + - upcall-pid > > mcast-groups: > list: -- Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261006130533.1620706-1-houminxi%40gmail.com ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next 2/2] netlink: specs: add ovs datapath and vport set operations 2026-10-08 13:08 ` netdev-bot+sashiko @ 2026-10-09 3:26 ` Minxi Hou 0 siblings, 0 replies; 7+ messages in thread From: Minxi Hou @ 2026-10-09 3:26 UTC (permalink / raw) To: netdev Cc: Donald Hunter, Jakub Kicinski, David S. Miller, Eric Dumazet, Paolo Abeni, Simon Horman On Thu, 8 Oct 2026, netdev-bot+sashiko@kernel.org wrote: > [Medium] Should port-no be in the vport set request list as well? No. lookup_vport() does accept OVS_VPORT_ATTR_PORT_NO plus the datapath ifindex from the header, and the del op in this spec lists port-no. But get lists only name, and new does not list port-no either. Adding it to set alone would make the three lookup keys disagree. The lookup key is a property of the whole spec, not of the set op this patch adds. I left it as the file already writes it. > [Low] Is it useful to list options here? ovs_vport_cmd_set() returns > -EOPNOTSUPP whenever it is present. The list is the attributes the handler reads, not the ones it accepts. type is in the same list and a changed type returns -EINVAL (datapath.c, ovs_vport_cmd_set()). options returns -EOPNOTSUPP and the policy marks it unused. Dropping one and keeping the other would need a rule for which rejections to hide. The commit message already says the handler rejects options. > [Low] Should the datapath set doc also say how per-cpu-pids depends > on user-features? ovs_dp_change() applies per-cpu-pids only when the same request turns on OVS_DP_F_DISPATCH_UPCALL_PER_CPU. That part of the reading is right. The doc already says that a missing user-features attribute is taken as zero and clears the features, which is the half that changes state. The pids are ignored and the request still succeeds. I left that out so the doc stays shorter than the handler. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-10-09 3:26 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-10-06 13:05 [PATCH net-next 0/2] netlink: specs: fill in the missing ovs operations Minxi Hou 2026-10-06 13:05 ` [PATCH net-next 1/2] netlink: specs: add ovs_flow del and set operations Minxi Hou 2026-10-08 13:08 ` netdev-bot+sashiko 2026-10-09 3:25 ` Minxi Hou 2026-10-06 13:05 ` [PATCH net-next 2/2] netlink: specs: add ovs datapath and vport " Minxi Hou 2026-10-08 13:08 ` netdev-bot+sashiko 2026-10-09 3:26 ` Minxi Hou
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox