diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
commit | e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch) | |
tree | 68cb5ef9081156392f1dd62a00c6ccc1451b93df /epan/dissectors/packet-gtp.h | |
parent | Initial commit. (diff) | |
download | wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip |
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'epan/dissectors/packet-gtp.h')
-rw-r--r-- | epan/dissectors/packet-gtp.h | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/epan/dissectors/packet-gtp.h b/epan/dissectors/packet-gtp.h new file mode 100644 index 00000000..6f285324 --- /dev/null +++ b/epan/dissectors/packet-gtp.h @@ -0,0 +1,187 @@ +/* packet-gtp.h + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef __PACKET_GTP_H +#define __PACKET_GTP_H +/*structure used to track responses to requests using sequence number*/ +typedef struct gtp_msg_hash_entry { + gboolean is_request; /*TRUE/FALSE*/ + guint32 req_frame; /*frame with request */ + nstime_t req_time; /*req time */ + guint32 rep_frame; /*frame with reply */ + gint seq_nr; /*sequence number*/ + guint msgtype; /*messagetype*/ +} gtp_msg_hash_t; + + +typedef struct _gtp_hdr { + guint8 flags; /* GTP header flags */ + guint8 message; /* Message type */ + guint16 length; /* Length of header */ + gint64 teid; /* Tunnel End-point ID */ +} gtp_hdr_t; + +/* definitions of GTP messages */ +#define GTP_MSG_UNKNOWN 0x00 +#define GTP_MSG_ECHO_REQ 0x01 +#define GTP_MSG_ECHO_RESP 0x02 +#define GTP_MSG_VER_NOT_SUPP 0x03 +#define GTP_MSG_NODE_ALIVE_REQ 0x04 +#define GTP_MSG_NODE_ALIVE_RESP 0x05 +#define GTP_MSG_REDIR_REQ 0x06 +#define GTP_MSG_REDIR_RESP 0x07 +/* + * 8-15 For future use. Shall not be sent. If received, + * shall be treated as an Unknown message. + */ +#define GTP_MSG_CREATE_PDP_REQ 0x10 +#define GTP_MSG_CREATE_PDP_RESP 0x11 +#define GTP_MSG_UPDATE_PDP_REQ 0x12 +#define GTP_MSG_UPDATE_PDP_RESP 0x13 +#define GTP_MSG_DELETE_PDP_REQ 0x14 +#define GTP_MSG_DELETE_PDP_RESP 0x15 +#define GTP_MSG_INIT_PDP_CONTEXT_ACT_REQ 0x16 /* 2G */ +#define GTP_MSG_INIT_PDP_CONTEXT_ACT_RESP 0x17 /* 2G */ +/* + * 24-25 For future use. Shall not be sent. If received, + * shall be treated as an Unknown message. + */ +#define GTP_MSG_DELETE_AA_PDP_REQ 0x18 /* 2G */ +#define GTP_MSG_DELETE_AA_PDP_RESP 0x19 /* 2G */ +#define GTP_MSG_ERR_IND 0x1A +#define GTP_MSG_PDU_NOTIFY_REQ 0x1B +#define GTP_MSG_PDU_NOTIFY_RESP 0x1C +#define GTP_MSG_PDU_NOTIFY_REJ_REQ 0x1D +#define GTP_MSG_PDU_NOTIFY_REJ_RESP 0x1E +#define GTP_MSG_SUPP_EXT_HDR 0x1F +#define GTP_MSG_SEND_ROUT_INFO_REQ 0x20 +#define GTP_MSG_SEND_ROUT_INFO_RESP 0x21 +#define GTP_MSG_FAIL_REP_REQ 0x22 +#define GTP_MSG_FAIL_REP_RESP 0x23 +#define GTP_MSG_MS_PRESENT_REQ 0x24 +#define GTP_MSG_MS_PRESENT_RESP 0x25 +/* + * 38-47 For future use. Shall not be sent. If received, + * shall be treated as an Unknown message. + */ +#define GTP_MSG_IDENT_REQ 0x30 +#define GTP_MSG_IDENT_RESP 0x31 +#define GTP_MSG_SGSN_CNTXT_REQ 0x32 +#define GTP_MSG_SGSN_CNTXT_RESP 0x33 +#define GTP_MSG_SGSN_CNTXT_ACK 0x34 +#define GTP_MSG_FORW_RELOC_REQ 0x35 +#define GTP_MSG_FORW_RELOC_RESP 0x36 +#define GTP_MSG_FORW_RELOC_COMP 0x37 +#define GTP_MSG_RELOC_CANCEL_REQ 0x38 +#define GTP_MSG_RELOC_CANCEL_RESP 0x39 +#define GTP_MSG_FORW_SRNS_CNTXT 0x3A +#define GTP_MSG_FORW_RELOC_ACK 0x3B +#define GTP_MSG_FORW_SRNS_CNTXT_ACK 0x3C +#define GTP_MSG_UE_REG_QUERY_REQ 0x3D +#define GTP_MSG_UE_REG_QUERY_RESP 0x3E +/* + * 63-69 For future use. Shall not be sent. If received, + * shall be treated as an Unknown message. + */ +#define GTP_MSG_RAN_INFO_RELAY 70 +/* + * 71-95 For future use. Shall not be sent. If received, + * shall be treated as an Unknown message. + */ +#define GTP_MBMS_NOTIFY_REQ 96 +#define GTP_MBMS_NOTIFY_RES 97 +#define GTP_MBMS_NOTIFY_REJ_REQ 98 +#define GTP_MBMS_NOTIFY_REJ_RES 99 +#define GTP_CREATE_MBMS_CNTXT_REQ 100 +#define GTP_CREATE_MBMS_CNTXT_RES 101 +#define GTP_UPD_MBMS_CNTXT_REQ 102 +#define GTP_UPD_MBMS_CNTXT_RES 103 +#define GTP_DEL_MBMS_CNTXT_REQ 104 +#define GTP_DEL_MBMS_CNTXT_RES 105 +/* + * 106 - 111 For future use. Shall not be sent. If received, + * shall be treated as an Unknown message. + */ +#define GTP_MBMS_REG_REQ 112 +#define GTP_MBMS_REG_RES 113 +#define GTP_MBMS_DE_REG_REQ 114 +#define GTP_MBMS_DE_REG_RES 115 +#define GTP_MBMS_SES_START_REQ 116 +#define GTP_MBMS_SES_START_RES 117 +#define GTP_MBMS_SES_STOP_REQ 118 +#define GTP_MBMS_SES_STOP_RES 119 +#define GTP_MBMS_SES_UPD_REQ 120 +#define GTP_MBMS_SES_UPD_RES 121 +/* 122-127 For future use. Shall not be sent. + * If received, shall be treated as an Unknown message. + */ +#define GTP_MS_INFO_CNG_NOT_REQ 128 +#define GTP_MS_INFO_CNG_NOT_RES 129 +/* 130-239 For future use. Shall not be sent. + * If received, shall be treated as an Unknown message. + */ +#define GTP_MSG_DATA_TRANSF_REQ 0xF0 +#define GTP_MSG_DATA_TRANSF_RESP 0xF1 +/* 242-253 For future use. Shall not be sent. + * If received, shall be treated as an Unknown message. + */ +#define GTP_MSG_END_MARKER 0xFE /* 254 */ +#define GTP_MSG_TPDU 0xFF + +extern value_string_ext cause_type_ext; + +/** GTP header extension info +* This structure is used to transfer infotmation to users of the "gtp.hdr_ext" dissector table +*/ + +typedef struct gtp_hdr_ext_info { + proto_item* hdr_ext_item; /* The item created when adding the type of header to the tree, + * used to put the name in the tree + */ +} gtp_hdr_ext_info_t; + + + +/* Data structures to keep track of sessions */ +extern guint32 gtp_session_count; +extern gboolean g_gtp_session; + +typedef struct session_args { + wmem_list_t *teid_list; + wmem_list_t *ip_list; + guint32 last_teid; + address last_ip; + guint8 last_cause; +} session_args_t; + +/* Relation between frame -> session */ +extern wmem_map_t* session_table; + +/* Relation between <teid,ip> -> frame */ +extern wmem_map_t* frame_map; + +guint32 get_frame(address ip, guint32 teid, guint32 *frame); + +void remove_frame_info(guint32 f); + +void add_gtp_session(guint32 frame, guint32 session); + +gboolean teid_exists(guint32 teid, wmem_list_t *teid_list); + +gboolean ip_exists(address ip, wmem_list_t *ip_list); + +void fill_map(wmem_list_t *teid_list, wmem_list_t *ip_list, guint32 frame); + +gboolean is_cause_accepted(guint8 cause, guint32 version); + +int decode_qos_umts(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree, const gchar * qos_str, guint8 type); + +void dissect_gtp_uli(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree, session_args_t * args _U_); + +#endif /* __PACKET_GTP_H*/ |