Skip to content

Commit

Permalink
netlink: specs: add partial specification for openvswitch
Browse files Browse the repository at this point in the history
The openvswitch family has a fixed header, uses struct attrs and has array
values. This partial spec demonstrates these features in the YNL CLI. These
specs are sufficient to create, delete and dump datapaths and to dump vports:

$ ./tools/net/ynl/cli.py \
    --spec Documentation/netlink/specs/ovs_datapath.yaml \
    --do dp-new --json '{ "dp-ifindex": 0, "name": "demo", "upcall-pid": 0}'
None

$ ./tools/net/ynl/cli.py \
    --spec Documentation/netlink/specs/ovs_datapath.yaml \
    --dump dp-get --json '{ "dp-ifindex": 0 }'
[{'dp-ifindex': 3,
  'masks-cache-size': 256,
  'megaflow-stats': {'cache-hits': 0,
                     'mask-hit': 0,
                     'masks': 0,
                     'pad1': 0,
                     'padding': 0},
  'name': 'test',
  'stats': {'flows': 0, 'hit': 0, 'lost': 0, 'missed': 0},
  'user-features': {'dispatch-upcall-per-cpu',
                    'tc-recirc-sharing',
                    'unaligned'}},
 {'dp-ifindex': 48,
  'masks-cache-size': 256,
  'megaflow-stats': {'cache-hits': 0,
                     'mask-hit': 0,
                     'masks': 0,
                     'pad1': 0,
                     'padding': 0},
  'name': 'demo',
  'stats': {'flows': 0, 'hit': 0, 'lost': 0, 'missed': 0},
  'user-features': set()}]

$ ./tools/net/ynl/cli.py \
    --spec Documentation/netlink/specs/ovs_datapath.yaml \
    --do dp-del --json '{ "dp-ifindex": 0, "name": "demo"}'
None

$ ./tools/net/ynl/cli.py \
    --spec Documentation/netlink/specs/ovs_vport.yaml \
    --dump vport-get --json '{ "dp-ifindex": 3 }'
[{'dp-ifindex': 3,
  'ifindex': 3,
  'name': 'test',
  'port-no': 0,
  'stats': {'rx-bytes': 0,
            'rx-dropped': 0,
            'rx-errors': 0,
            'rx-packets': 0,
            'tx-bytes': 0,
            'tx-dropped': 0,
            'tx-errors': 0,
            'tx-packets': 0},
  'type': 'internal',
  'upcall-pid': [0],
  'upcall-stats': {'fail': 0, 'success': 0}}]

Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Donald Hunter authored and Jakub Kicinski committed Mar 29, 2023
1 parent f036d93 commit 643ef4a
Show file tree
Hide file tree
Showing 2 changed files with 292 additions and 0 deletions.
153 changes: 153 additions & 0 deletions Documentation/netlink/specs/ovs_datapath.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)

name: ovs_datapath
version: 2
protocol: genetlink-legacy

doc:
OVS datapath configuration over generic netlink.

definitions:
-
name: ovs-header
type: struct
members:
-
name: dp-ifindex
type: u32
-
name: user-features
type: flags
entries:
-
name: unaligned
doc: Allow last Netlink attribute to be unaligned
-
name: vport-pids
doc: Allow datapath to associate multiple Netlink PIDs to each vport
-
name: tc-recirc-sharing
doc: Allow tc offload recirc sharing
-
name: dispatch-upcall-per-cpu
doc: Allow per-cpu dispatch of upcalls
-
name: datapath-stats
type: struct
members:
-
name: hit
type: u64
-
name: missed
type: u64
-
name: lost
type: u64
-
name: flows
type: u64
-
name: megaflow-stats
type: struct
members:
-
name: mask-hit
type: u64
-
name: masks
type: u32
-
name: padding
type: u32
-
name: cache-hits
type: u64
-
name: pad1
type: u64

attribute-sets:
-
name: datapath
attributes:
-
name: name
type: string
-
name: upcall-pid
doc: upcall pid
type: u32
-
name: stats
type: binary
struct: datapath-stats
-
name: megaflow-stats
type: binary
struct: megaflow-stats
-
name: user-features
type: u32
enum: user-features
enum-as-flags: true
-
name: pad
type: unused
-
name: masks-cache-size
type: u32
-
name: per-cpu-pids
type: binary
sub-type: u32

operations:
fixed-header: ovs-header
list:
-
name: dp-get
doc: Get / dump OVS data path configuration and state
value: 3
attribute-set: datapath
do: &dp-get-op
request:
attributes:
- name
reply:
attributes:
- name
- upcall-pid
- stats
- megaflow-stats
- user-features
- masks-cache-size
- per-cpu-pids
dump: *dp-get-op
-
name: dp-new
doc: Create new OVS data path
value: 1
attribute-set: datapath
do:
request:
attributes:
- dp-ifindex
- name
- upcall-pid
- user-features
-
name: dp-del
doc: Delete existing OVS data path
value: 2
attribute-set: datapath
do:
request:
attributes:
- dp-ifindex
- name

mcast-groups:
list:
-
name: ovs_datapath
139 changes: 139 additions & 0 deletions Documentation/netlink/specs/ovs_vport.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)

name: ovs_vport
version: 2
protocol: genetlink-legacy

doc:
OVS vport configuration over generic netlink.

definitions:
-
name: ovs-header
type: struct
members:
-
name: dp-ifindex
type: u32
-
name: vport-type
type: enum
entries: [ unspec, netdev, internal, gre, vxlan, geneve ]
-
name: vport-stats
type: struct
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
attributes:
-
name: dst-port
type: u32
-
name: extension
type: u32
-
name: upcall-stats
attributes:
-
name: success
type: u64
value: 0
-
name: fail
type: u64
-
name: vport
attributes:
-
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:
list:
-
name: vport-get
doc: Get / dump OVS vport configuration and state
value: 3
attribute-set: vport
fixed-header: ovs-header
do: &vport-get-op
request:
attributes:
- dp-ifindex
- name
reply: &dev-all
attributes:
- dp-ifindex
- port-no
- type
- name
- upcall-pid
- stats
- ifindex
- netnsid
- upcall-stats
dump: *vport-get-op

mcast-groups:
list:
-
name: ovs_vport

0 comments on commit 643ef4a

Please sign in to comment.