netlink: specs: add OVS packet family specification

Add YAML netlink spec for the OVS_PACKET_FAMILY (ovs_packet).
This completes the set of OVS genetlink family specs (ovs_datapath,
ovs_flow, ovs_vport already exist).

The spec defines three operations: MISS (event), ACTION (event),
and EXECUTE (do). MISS and ACTION are kernel-to-userspace upcalls
sent via genlmsg_unicast(); EXECUTE is the only registered genl
operation.

Key, actions, and egress-tun-key attributes are typed as binary
rather than nest because the nested attribute definitions belong
to the ovs_flow spec and cross-spec references are not supported
by the YNL framework.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
Link: https://patch.msgid.link/20260522174154.720293-2-houminxi@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Minxi Hou
2026-05-23 01:41:53 +08:00
committed by Jakub Kicinski
parent 18b9f739d3
commit b82bfddc46

View File

@@ -0,0 +1,130 @@
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
---
name: ovs_packet
version: 1
protocol: genetlink-legacy
uapi-header: linux/openvswitch.h
doc: |
OVS packet execution over generic netlink.
Only OVS_PACKET_CMD_EXECUTE is exposed as a genl operation.
OVS_PACKET_CMD_MISS and OVS_PACKET_CMD_ACTION are kernel-to-userspace
upcalls sent via genlmsg_unicast() to the vport's upcall_pid and have
no associated genl_ops or multicast group.
Several attributes in the attribute set (userdata, egress-tun-key, len)
exist for the upcall path and are not used by the EXECUTE operation.
For EXECUTE, packet, key, and actions are mandatory (kernel returns
-EINVAL without them).
definitions:
-
name: ovs-header
type: struct
members:
-
name: dp-ifindex
type: u32
attribute-sets:
-
name: packet
name-prefix: ovs-packet-attr-
enum-name: ovs-packet-attr
attributes:
-
name: packet
type: binary
doc: Packet data, from the start of the Ethernet header.
checks:
min-len: 14
-
name: key
type: binary
doc: |
Nested OVS_KEY_ATTR_* attributes, extracted flow key.
Defined as binary because the key attribute-set belongs to the
ovs_flow family spec; cross-spec references are not supported.
-
name: actions
type: binary
doc: |
Nested OVS_ACTION_ATTR_* attributes.
Defined as binary for the same reason as key.
-
name: userdata
type: binary
doc: Opaque userspace cookie from OVS_USERSPACE_ATTR_USERDATA.
-
name: egress-tun-key
type: binary
doc: Nested OVS_TUNNEL_KEY_ATTR_* for output tunnel metadata.
-
name: unused1
type: unused
-
name: unused2
type: unused
-
name: probe
type: flag
doc: Packet operation is a feature probe, error logging suppressed.
-
name: mru
type: u16
doc: Maximum received IP fragment size.
-
name: len
type: u32
doc: Packet size before truncation.
-
name: hash
type: u64
doc: Packet hash, low 32 bits are skb hash, upper bits are flags.
-
name: upcall-pid
type: u32
doc: Netlink PID to use for upcalls during EXECUTE processing.
operations:
fixed-header: ovs-header
name-prefix: ovs-packet-cmd-
list:
-
name: miss
doc: Notify userspace of a flow table miss for a received packet.
value: 1
attribute-set: packet
event:
attributes: &event-attrs
- packet
- key
- userdata
- actions
- egress-tun-key
- mru
- len
- hash
-
name: action
doc: Notify userspace as requested by an OVS_ACTION_ATTR_USERSPACE action.
value: 2
attribute-set: packet
event:
attributes: *event-attrs
-
name: execute
doc: Apply actions to a packet.
value: 3
attribute-set: packet
do:
request:
attributes:
- packet
- key
- actions
- probe
- mru
- hash
- upcall-pid