| /* 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 |