xref: /linux/include/net/gtp.h (revision 722ecdbce68a87de2d9296f91308f44ea900a039)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _GTP_H_
3 #define _GTP_H_
4 
5 /* General GTP protocol related definitions. */
6 
7 #define GTP0_PORT	3386
8 #define GTP1U_PORT	2152
9 
10 /* GTP messages types */
11 #define GTP_ECHO_REQ	1	/* Echo Request */
12 #define GTP_ECHO_RSP	2	/* Echo Response */
13 #define GTP_TPDU	255
14 
15 #define GTPIE_RECOVERY	14
16 
17 struct gtp0_header {	/* According to GSM TS 09.60. */
18 	__u8	flags;
19 	__u8	type;
20 	__be16	length;
21 	__be16	seq;
22 	__be16	flow;
23 	__u8	number;
24 	__u8	spare[3];
25 	__be64	tid;
26 } __attribute__ ((packed));
27 
28 struct gtp1_header {	/* According to 3GPP TS 29.060. */
29 	__u8	flags;
30 	__u8	type;
31 	__be16	length;
32 	__be32	tid;
33 } __attribute__ ((packed));
34 
35 struct gtp1_header_long {	/* According to 3GPP TS 29.060. */
36 	__u8	flags;
37 	__u8	type;
38 	__be16	length;
39 	__be32	tid;
40 	__be16	seq;
41 	__u8	npdu;
42 	__u8	next;
43 } __packed;
44 
45 /* GTP Information Element */
46 struct gtp_ie {
47 	__u8	tag;
48 	__u8	val;
49 } __packed;
50 
51 struct gtp0_packet {
52 	struct gtp0_header gtp0_h;
53 	struct gtp_ie ie;
54 } __packed;
55 
56 struct gtp1u_packet {
57 	struct gtp1_header_long gtp1u_h;
58 	struct gtp_ie ie;
59 } __packed;
60 
61 struct gtp_pdu_session_info {	/* According to 3GPP TS 38.415. */
62 	u8	pdu_type;
63 	u8	qfi;
64 };
65 
66 static inline bool netif_is_gtp(const struct net_device *dev)
67 {
68 	return dev->rtnl_link_ops &&
69 		!strcmp(dev->rtnl_link_ops->kind, "gtp");
70 }
71 
72 #define GTP1_F_NPDU	0x01
73 #define GTP1_F_SEQ	0x02
74 #define GTP1_F_EXTHDR	0x04
75 #define GTP1_F_MASK	0x07
76 
77 #endif
78