86 lines · 1.5 KB · C
RawDownload
/* SPDX-License-Identifier: GPL-2.0 */#ifndef _GTP_H_#define _GTP_H_ #include <linux/netdevice.h>#include <linux/types.h>#include <net/rtnetlink.h> /* General GTP protocol related definitions. */ #define GTP0_PORT	3386#define GTP1U_PORT	2152 /* GTP messages types */#define GTP_ECHO_REQ	1	/* Echo Request */#define GTP_ECHO_RSP	2	/* Echo Response */#define GTP_TPDU	255 #define GTPIE_RECOVERY	14 struct gtp0_header {	/* According to GSM TS 09.60. */	__u8	flags;	__u8	type;	__be16	length;	__be16	seq;	__be16	flow;	__u8	number;	__u8	spare[3];	__be64	tid;} __attribute__ ((packed)); struct gtp1_header {	/* According to 3GPP TS 29.060. */	__u8	flags;	__u8	type;	__be16	length;	__be32	tid;} __attribute__ ((packed)); struct gtp1_header_long {	/* According to 3GPP TS 29.060. */	__u8	flags;	__u8	type;	__be16	length;	__be32	tid;	__be16	seq;	__u8	npdu;	__u8	next;} __packed; /* GTP Information Element */struct gtp_ie {	__u8	tag;	__u8	val;} __packed; struct gtp0_packet {	struct gtp0_header gtp0_h;	struct gtp_ie ie;} __packed; struct gtp1u_packet {	struct gtp1_header_long gtp1u_h;	struct gtp_ie ie;} __packed; struct gtp_pdu_session_info {	/* According to 3GPP TS 38.415. */	u8	pdu_type;	u8	qfi;}; static inline bool netif_is_gtp(const struct net_device *dev){	return dev->rtnl_link_ops &&		!strcmp(dev->rtnl_link_ops->kind, "gtp");} #define GTP1_F_NPDU	0x01#define GTP1_F_SEQ	0x02#define GTP1_F_EXTHDR	0x04#define GTP1_F_MASK	0x07 struct gtp_ext_hdr {	__u8	len;	__u8	data[];}; #endif