diff --git a/Documentation/netlink/specs/ovs_datapath.yaml b/Documentation/netlink/specs/ovs_datapath.yaml
new file mode 100644
index 000000000000..c420f78f7c25
--- /dev/null
+++ b/Documentation/netlink/specs/ovs_datapath.yaml
@@ -0,0 +1,154 @@
+# 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
+
+user-header: ovs_header
+
+attribute-sets:
+  -
+    name: datapath
+    attributes:
+      -
+        name: name
+        type: string
+      -
+        name: upcall_pid
+        doc: upcall pid
+        type: u32
+      -
+        name: stats
+        type: struct
+        struct: datapath_stats
+      -
+        name: megaflow_stats
+        type: struct
+        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: array-nest
+        sub-type: u32
+
+operations:
+  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
diff --git a/Documentation/netlink/specs/ovs_vport.yaml b/Documentation/netlink/specs/ovs_vport.yaml
new file mode 100644
index 000000000000..3913aded5e28
--- /dev/null
+++ b/Documentation/netlink/specs/ovs_vport.yaml
@@ -0,0 +1,141 @@
+# 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
+
+
+user-header: ovs_header
+
+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: array-nest
+        sub-type: u32
+      -
+        name: stats
+        type: struct
+        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
+      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
