# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)

name: ovs_datapath
version: 2
protocol: genetlink-legacy
uapi-header: linux/openvswitch.h

doc:
  OVS datapath configuration over generic netlink.

definitions:
  -
    name: ovs-header
    type: struct
    members:
      -
        name: dp-ifindex
        type: u32
  -
    name: user-features
    type: flags
    name-prefix: ovs-dp-f-
    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
    enum-name: ovs-dp-stats
    type: struct
    members:
      -
        name: n-hit
        type: u64
      -
        name: n-missed
        type: u64
      -
        name: n-lost
        type: u64
      -
        name: n-flows
        type: u64
  -
    name: megaflow-stats
    enum-name: ovs-dp-megaflow-stats
    type: struct
    members:
      -
        name: n-mask-hit
        type: u64
      -
        name: n-masks
        type: u32
      -
        name: padding
        type: u32
      -
        name: n-cache-hit
        type: u64
      -
        name: pad1
        type: u64

attribute-sets:
  -
    name: datapath
    name-prefix: ovs-dp-attr-
    enum-name: ovs-datapath-attrs
    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
      -
        name: ifindex
        type: u32

operations:
  fixed-header: ovs-header
  name-prefix: ovs-dp-cmd-
  list:
    -
      name: 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: new
      doc: Create new OVS data path
      value: 1
      attribute-set: datapath
      do:
        request:
          attributes:
            - dp-ifindex
            - name
            - upcall-pid
            - user-features
    -
      name: del
      doc: Delete existing OVS data path
      value: 2
      attribute-set: datapath
      do:
        request:
          attributes:
            - dp-ifindex
            - name

mcast-groups:
  list:
    -
      name: ovs_datapath