Commit 643ef4a6 authored by Donald Hunter's avatar Donald Hunter Committed by Jakub Kicinski
Browse files

netlink: specs: add partial specification for openvswitch



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: default avatarDonald Hunter <donald.hunter@gmail.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent f036d936
Loading
Loading
Loading
Loading
+153 −0
Original line number Diff line number Diff line
# 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 −0
Original line number Diff line number Diff line
# 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