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