Jakub Kicinski 747fb8413a netlink: specs: ovs_vport: align with C codegen capabilities
We started generating C code for OvS a while back, but actually
C codegen only supports fixed headers specified at the family
level right now (schema also allows specifying them per op).
ovs_flow and ovs_datapath already specify the fixed header
at the family level but ovs_vport does it per op.
Move the property, all ops use the same header.

This ensures YNL C sees the correct hdr_len:

   const struct ynl_family ynl_ovs_vport_family =  {
          .name           = "ovs_vport",
  -       .hdr_len        = sizeof(struct genlmsghdr),
  +       .hdr_len        = sizeof(struct genlmsghdr) + sizeof(struct ovs_header),
   };

Fixes: 7c59c9c8f202 ("tools: ynl: generate code for ovs families")
Link: https://patch.msgid.link/20250409145541.580674-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2025-04-14 14:05:56 -07:00

174 lines
3.2 KiB
YAML

# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
name: ovs_vport
version: 2
protocol: genetlink-legacy
uapi-header: linux/openvswitch.h
doc:
OVS vport configuration over generic netlink.
definitions:
-
name: ovs-header
type: struct
members:
-
name: dp-ifindex
type: u32
-
name: vport-type
type: enum
enum-name: ovs-vport-type
name-prefix: ovs-vport-type-
entries: [ unspec, netdev, internal, gre, vxlan, geneve ]
-
name: vport-stats
type: struct
enum-name: ovs-vport-stats
members:
-
name: rx-packets
type: u64
-
name: tx-packets
type: u64
-
name: rx-bytes
type: u64
-
name: tx-bytes
type: u64
-
name: rx-errors
type: u64
-
name: tx-errors
type: u64
-
name: rx-dropped
type: u64
-
name: tx-dropped
type: u64
attribute-sets:
-
name: vport-options
enum-name: ovs-vport-options
name-prefix: ovs-tunnel-attr-
attributes:
-
name: dst-port
type: u32
-
name: extension
type: u32
-
name: upcall-stats
enum-name: ovs-vport-upcall-attr
name-prefix: ovs-vport-upcall-attr-
attributes:
-
name: success
type: u64
value: 0
-
name: fail
type: u64
-
name: vport
name-prefix: ovs-vport-attr-
enum-name: ovs-vport-attr
attributes:
-
name: unspec
type: unused
value: 0
-
name: port-no
type: u32
-
name: type
type: u32
enum: vport-type
-
name: name
type: string
-
name: options
type: nest
nested-attributes: vport-options
-
name: upcall-pid
type: binary
sub-type: u32
-
name: stats
type: binary
struct: vport-stats
-
name: pad
type: unused
-
name: ifindex
type: u32
-
name: netnsid
type: u32
-
name: upcall-stats
type: nest
nested-attributes: upcall-stats
operations:
name-prefix: ovs-vport-cmd-
fixed-header: ovs-header
list:
-
name: new
doc: Create a new OVS vport
attribute-set: vport
do:
request:
attributes:
- name
- type
- upcall-pid
- ifindex
- options
-
name: del
doc: Delete existing OVS vport from a data path
attribute-set: vport
do:
request:
attributes:
- port-no
- type
- name
-
name: get
doc: Get / dump OVS vport configuration and state
attribute-set: vport
do: &vport-get-op
request:
attributes:
- name
reply: &dev-all
attributes:
- port-no
- type
- name
- upcall-pid
- stats
- ifindex
- netnsid
- upcall-stats
dump: *vport-get-op
mcast-groups:
list:
-
name: ovs_vport