[RFC net-next] netlink: specs: add genetlink-legacy spec for GTP

From: Anil Kaushik

Date: Thu Oct 01 2026 - 05:03:06 EST


The GTP (GPRS Tunnelling Protocol, user plane) generic netlink family
has no YAML specification under Documentation/netlink/specs/, so it
cannot be consumed by the ynl tooling used for user-space clients,
documentation and selftests.

Add a genetlink-legacy spec describing the existing family: the PDP
context management commands (NEWPDP, DELPDP, GETPDP) and the GTP-U echo
request (ECHOREQ), the GTPA_* attribute set, and the "gtp" multicast
group. The spec is derived directly from include/uapi/linux/gtp.h and
the gtp_genl_policy / gtp_genl_ops tables in drivers/net/gtp.c; command
and attribute values match the existing uapi one-to-one.

This only adds the description; there is no kernel code or uapi change.

Signed-off-by: Anil Kaushik <anilkaushikwireless@xxxxxxxxx>
---
Documentation/netlink/specs/gtp.yaml | 170 +++++++++++++++++++++++++++
MAINTAINERS | 1 +
2 files changed, 171 insertions(+)
create mode 100644 Documentation/netlink/specs/gtp.yaml

diff --git a/Documentation/netlink/specs/gtp.yaml b/Documentation/netlink/specs/gtp.yaml
new file mode 100644
index 000000000..7193f5e53
--- /dev/null
+++ b/Documentation/netlink/specs/gtp.yaml
@@ -0,0 +1,170 @@
+# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
+---
+name: gtp
+
+protocol: genetlink-legacy
+
+doc: |
+ GPRS Tunnelling Protocol, user plane (GTP-U).
+
+ The gtp netdevice encapsulates and decapsulates user plane packets in
+ GTP-U tunnels (GTPv0 and GTPv1-U, see 3GPP TS 29.060 and TS 29.281).
+ This family manages the PDP contexts that describe the tunnels and
+ triggers GTP-U echo requests. It is driven by user space control planes
+ such as those built on libgtpnl.
+
+kernel-policy: global
+
+attribute-sets:
+ -
+ name: gtp
+ name-prefix: gtpa-
+ attributes:
+ -
+ name: link
+ type: u32
+ doc: ifindex of the gtp netdevice the context is attached to.
+ -
+ name: version
+ type: u32
+ doc: GTP version of the context, 0 for GTPv0 or 1 for GTPv1-U.
+ -
+ name: tid
+ type: u64
+ doc: Tunnel identifier, GTPv0 only.
+ -
+ name: peer-address
+ type: u32
+ byte-order: big-endian
+ display-hint: ipv4
+ doc: |
+ IPv4 address of the remote GSN peer (GGSN or SGSN). Also known
+ as GTPA_SGSN_ADDRESS, kept for legacy user space.
+ -
+ name: ms-address
+ type: u32
+ byte-order: big-endian
+ display-hint: ipv4
+ doc: IPv4 address of the mobile subscriber served by the context.
+ -
+ name: flow
+ type: u16
+ doc: Flow label, GTPv0 only.
+ -
+ name: net-ns-fd
+ type: u32
+ doc: File descriptor of the network namespace of the gtp netdevice.
+ -
+ name: i-tei
+ type: u32
+ doc: Ingress Tunnel Endpoint Identifier, GTPv1-U only.
+ -
+ name: o-tei
+ type: u32
+ doc: Egress Tunnel Endpoint Identifier, GTPv1-U only.
+ -
+ name: pad
+ type: pad
+ -
+ name: peer-addr6
+ type: binary
+ checks:
+ exact-len: 16
+ byte-order: big-endian
+ display-hint: ipv6
+ doc: IPv6 address of the remote GSN peer (GGSN or SGSN).
+ -
+ name: ms-addr6
+ type: binary
+ checks:
+ exact-len: 16
+ byte-order: big-endian
+ display-hint: ipv6
+ doc: IPv6 address of the mobile subscriber served by the context.
+ -
+ name: family
+ type: u8
+ doc: Address family (AF_INET or AF_INET6) of the context addresses.
+
+operations:
+ list:
+ -
+ name: newpdp
+ doc: Create or update a PDP context.
+ attribute-set: gtp
+ value: 0
+ dont-validate: [strict, dump]
+ flags: [admin-perm]
+ do:
+ request: &pdp-attrs
+ attributes:
+ - link
+ - version
+ - tid
+ - peer-address
+ - peer-addr6
+ - ms-address
+ - ms-addr6
+ - flow
+ - i-tei
+ - o-tei
+ - family
+ - net-ns-fd
+ -
+ name: delpdp
+ doc: Delete a PDP context.
+ attribute-set: gtp
+ dont-validate: [strict, dump]
+ flags: [admin-perm]
+ do:
+ request: *pdp-attrs
+ -
+ name: getpdp
+ doc: Get or dump one or more PDP contexts.
+ attribute-set: gtp
+ dont-validate: [strict, dump]
+ flags: [admin-perm]
+ do:
+ request:
+ attributes:
+ - link
+ - version
+ - tid
+ - ms-address
+ - ms-addr6
+ - i-tei
+ - family
+ - net-ns-fd
+ reply: &pdp-reply
+ attributes:
+ - version
+ - tid
+ - peer-address
+ - peer-addr6
+ - ms-address
+ - ms-addr6
+ - flow
+ - i-tei
+ - o-tei
+ - family
+ dump:
+ reply: *pdp-reply
+ -
+ name: echoreq
+ doc: Send a GTP-U echo request to a peer.
+ attribute-set: gtp
+ dont-validate: [strict, dump]
+ flags: [admin-perm]
+ do:
+ request:
+ attributes:
+ - link
+ - version
+ - peer-address
+ - peer-addr6
+ - family
+
+mcast-groups:
+ list:
+ -
+ name: gtp
diff --git a/MAINTAINERS b/MAINTAINERS
index 51873349b..a6e43995e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -11421,6 +11421,7 @@ M: Harald Welte <laforge@xxxxxxxxxxxx>
L: osmocom-net-gprs@xxxxxxxxxxxxxxxxx
S: Maintained
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/gtp.git
+F: Documentation/netlink/specs/gtp.yaml
F: drivers/net/gtp.c

GUID PARTITION TABLE (GPT)
--
2.25.1