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