netlink: specs: add genetlink-legacy spec for GTP

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. Command and attribute values are taken from
include/uapi/linux/gtp.h and match it one-to-one. The request
attributes of each command are the ones its handler in
drivers/net/gtp.c reads, and the reply attributes the ones
gtp_genl_fill_info() emits.

The notifications sent on the "gtp" group are not described: they reuse
the command values of the NEWPDP, DELPDP and ECHOREQ requests, which
the ynl code generator cannot express with the existing uapi header.
The family doc says so.

Add the matching CFLAGS_gtp entry to tools/net/ynl/Makefile.deps, so
the generated code is built against the tree's gtp.h instead of an
older one installed on the host.

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

Signed-off-by: Anil Kaushik <anilkaushikwireless@gmail.com>
Link: https://patch.msgid.link/20261016093225.1036375-4-anilkaushikwireless@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Anil Kaushik 2026-10-16 09:32:24 +00:00 committed by Paolo Abeni
parent fe3e1a42fb
commit 8a2f9964fc
3 changed files with 198 additions and 0 deletions

View File

@ -0,0 +1,196 @@
# 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.
The kernel registers the family with version 0, which the
genetlink-legacy schema cannot express.
The notifications multicast on the "gtp" group are not described: PDP
context additions and deletions, and GTP-U echo responses, reuse the
NEWPDP, DELPDP and ECHOREQ command values of the requests.
kernel-policy: global
definitions:
-
type: enum
name: version
name-prefix: gtp-
enum-name: gtp-version
header: linux/gtp.h
entries: [v0, v1]
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
enum: version
doc: GTP version of the context, GTPv0 or 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:
min-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:
min-len: 16
byte-order: big-endian
display-hint: ipv6
doc: |
IPv6 prefix of the mobile subscriber served by the context: a /64
prefix, with the lower 64 bits set to zero.
-
name: family
type: u8
doc: |
Address family (AF_INET or AF_INET6) of ms-address or ms-addr6,
AF_INET when absent. The peer address uses the family of the
tunnel socket.
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-find
attributes:
- link
- version
- tid
- ms-address
- ms-addr6
- i-tei
- family
- net-ns-fd
-
name: getpdp
doc: Get or dump one or more PDP contexts.
attribute-set: gtp
dont-validate: [strict, dump]
flags: [admin-perm]
do:
request: *pdp-find
reply: &pdp-reply
attributes:
- link
- 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. ms-address is not a mobile
subscriber address here, but the local IPv4 address used as source
of the request.
attribute-set: gtp
dont-validate: [strict, dump]
flags: [admin-perm]
do:
request:
attributes:
- link
- version
- peer-address
- ms-address
- net-ns-fd
mcast-groups:
list:
-
name: gtp

View File

@ -11422,6 +11422,7 @@ M: Harald Welte <laforge@gnumonks.org>
L: osmocom-net-gprs@lists.osmocom.org
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)

View File

@ -24,6 +24,7 @@ CFLAGS_ethtool:=$(call get_hdr_inc,_LINUX_TYPELIMITS_H,typelimits.h) \
$(call get_hdr_inc,_LINUX_ETHTOOL_H,ethtool.h) \
$(call get_hdr_inc,_LINUX_ETHTOOL_NETLINK_H_,ethtool_netlink.h) \
$(call get_hdr_inc,_LINUX_ETHTOOL_NETLINK_GENERATED_H,ethtool_netlink_generated.h)
CFLAGS_gtp:=$(call get_hdr_inc,_LINUX_GTP_H_,gtp.h)
CFLAGS_handshake:=$(call get_hdr_inc,_LINUX_HANDSHAKE_H,handshake.h)
CFLAGS_lockd_netlink:=$(call get_hdr_inc,_LINUX_LOCKD_NETLINK_H,lockd_netlink.h)
CFLAGS_mptcp_pm:=$(call get_hdr_inc,_LINUX_MPTCP_PM_H,mptcp_pm.h)