# 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: ovs-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
    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: ovs-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
