forked from osmocom/wireshark
From Michael Lum:
GSM BSSMAP (GSM 08.08) support GSM DTAP (3GPP TS 24.008) support GSM SMS (3GPP TS 24.011) support GSM SS (3GPP TS 24.080) support GSM SMS TPDU (3GPP TS 23.040) support svn path=/trunk/; revision=8826
This commit is contained in:
parent
2a6b337ad8
commit
8e67a430e8
5
AUTHORS
5
AUTHORS
|
@ -1804,6 +1804,11 @@ Michael Lum <mlum [AT] telostech.com> {
|
|||
IS-683-A (OTA) support
|
||||
BSSAP (GSM 08.06)/BSAP (IOS 4.0.1) support
|
||||
IOS 4.0.1 support
|
||||
GSM BSSMAP (GSM 08.08) support
|
||||
GSM DTAP (3GPP TS 24.008) support
|
||||
GSM SMS (3GPP TS 24.011) support
|
||||
GSM SS (3GPP TS 24.080) support
|
||||
GSM SMS TPDU (3GPP TS 23.040) support
|
||||
}
|
||||
|
||||
Shiang-Ming Huang <smhuang [AT] pcs.csie.nctu.edu.tw> {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Makefile.am
|
||||
# Automake file for Ethereal
|
||||
#
|
||||
# $Id: Makefile.am,v 1.648 2003/10/30 02:06:11 guy Exp $
|
||||
# $Id: Makefile.am,v 1.649 2003/10/30 07:00:18 guy Exp $
|
||||
#
|
||||
# Ethereal - Network traffic analyzer
|
||||
# By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -229,6 +229,8 @@ DISSECTOR_SRC = \
|
|||
packet-gnutella.c \
|
||||
packet-gprs-ns.c \
|
||||
packet-gre.c \
|
||||
packet-gsm_a.c \
|
||||
packet-gsm_sms.c \
|
||||
packet-gssapi.c \
|
||||
packet-gtp.c \
|
||||
packet-gvrp.c \
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
## Makefile for building ethereal.exe with Microsoft C and nmake
|
||||
## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
|
||||
#
|
||||
# $Id: Makefile.nmake,v 1.354 2003/10/30 02:06:11 guy Exp $
|
||||
# $Id: Makefile.nmake,v 1.355 2003/10/30 07:00:18 guy Exp $
|
||||
|
||||
include config.nmake
|
||||
include <win32.mak>
|
||||
|
@ -169,6 +169,8 @@ DISSECTOR_SRC = \
|
|||
packet-gnutella.c \
|
||||
packet-gprs-ns.c \
|
||||
packet-gre.c \
|
||||
packet-gsm_a.c \
|
||||
packet-gsm_sms.c \
|
||||
packet-gssapi.c \
|
||||
packet-gtp.c \
|
||||
packet-gvrp.c \
|
||||
|
|
127
packet-ansi_a.c
127
packet-ansi_a.c
|
@ -10,7 +10,7 @@
|
|||
* 2000 Access Network Interfaces
|
||||
* 3GPP2 A.S0001-1 TIA/EIA-2001
|
||||
*
|
||||
* $Id: packet-ansi_a.c,v 1.2 2003/10/28 18:08:51 guy Exp $
|
||||
* $Id: packet-ansi_a.c,v 1.3 2003/10/30 07:00:18 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -359,6 +359,7 @@ static gint ett_dtap_oct_1 = -1;
|
|||
static gint ett_cm_srvc_type = -1;
|
||||
static gint ett_ansi_ms_info_rec_reserved = -1;
|
||||
static gint ett_ansi_enc_info = -1;
|
||||
static gint ett_cell_list = -1;
|
||||
|
||||
#define A_VARIANT_IS634 4
|
||||
#define A_VARIANT_TSB80 5
|
||||
|
@ -2001,8 +2002,11 @@ static guint8
|
|||
elem_cell_id_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string)
|
||||
{
|
||||
guint8 oct;
|
||||
guint8 consumed;
|
||||
guint8 num_cells;
|
||||
guint32 curr_offset;
|
||||
proto_item *item = NULL;
|
||||
proto_tree *subtree = NULL;
|
||||
gchar *str = NULL;
|
||||
|
||||
curr_offset = offset;
|
||||
|
@ -2031,8 +2035,26 @@ elem_cell_id_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc
|
|||
num_cells = 0;
|
||||
do
|
||||
{
|
||||
curr_offset +=
|
||||
elem_cell_id_aux(tvb, tree, curr_offset, len - (curr_offset - offset), add_string, oct);
|
||||
item =
|
||||
proto_tree_add_text(tree,
|
||||
tvb, curr_offset, -1,
|
||||
"Cell %d",
|
||||
num_cells + 1);
|
||||
|
||||
subtree = proto_item_add_subtree(item, ett_cell_list);
|
||||
|
||||
add_string[0] = '\0';
|
||||
consumed =
|
||||
elem_cell_id_aux(tvb, subtree, curr_offset, len - (curr_offset - offset), add_string, oct);
|
||||
|
||||
if (add_string[0] != '\0')
|
||||
{
|
||||
proto_item_append_text(item, add_string);
|
||||
}
|
||||
|
||||
proto_item_set_len(item, consumed);
|
||||
|
||||
curr_offset += consumed;
|
||||
|
||||
num_cells++;
|
||||
}
|
||||
|
@ -2162,9 +2184,12 @@ elem_downlink_re(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch
|
|||
{
|
||||
guint8 oct;
|
||||
guint8 disc;
|
||||
guint8 consumed;
|
||||
guint8 num_cells;
|
||||
guint32 value;
|
||||
guint32 curr_offset;
|
||||
proto_item *item = NULL;
|
||||
proto_tree *subtree = NULL;
|
||||
gchar *str;
|
||||
|
||||
curr_offset = offset;
|
||||
|
@ -2206,10 +2231,28 @@ elem_downlink_re(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch
|
|||
|
||||
do
|
||||
{
|
||||
curr_offset +=
|
||||
elem_cell_id_aux(tvb, tree, curr_offset,
|
||||
item =
|
||||
proto_tree_add_text(tree,
|
||||
tvb, curr_offset, -1,
|
||||
"Cell %d",
|
||||
num_cells + 1);
|
||||
|
||||
subtree = proto_item_add_subtree(item, ett_cell_list);
|
||||
|
||||
add_string[0] = '\0';
|
||||
consumed =
|
||||
elem_cell_id_aux(tvb, subtree, curr_offset,
|
||||
len - (curr_offset - offset), add_string, disc);
|
||||
|
||||
if (add_string[0] != '\0')
|
||||
{
|
||||
proto_item_append_text(item, add_string);
|
||||
}
|
||||
|
||||
proto_item_set_len(item, consumed);
|
||||
|
||||
curr_offset += consumed;
|
||||
|
||||
oct = tvb_get_guint8(tvb, curr_offset);
|
||||
|
||||
my_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
|
||||
|
@ -2298,7 +2341,10 @@ static guint8
|
|||
elem_ho_pow_lev(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string)
|
||||
{
|
||||
guint8 oct;
|
||||
guint8 consumed;
|
||||
guint8 num_cells;
|
||||
proto_item *item = NULL;
|
||||
proto_tree *subtree = NULL;
|
||||
guint32 curr_offset;
|
||||
|
||||
curr_offset = offset;
|
||||
|
@ -2334,10 +2380,27 @@ elem_ho_pow_lev(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha
|
|||
|
||||
curr_offset++;
|
||||
|
||||
curr_offset +=
|
||||
elem_cell_id_aux(tvb, tree, curr_offset,
|
||||
item =
|
||||
proto_tree_add_text(tree,
|
||||
tvb, curr_offset, -1,
|
||||
"Cell 1");
|
||||
|
||||
subtree = proto_item_add_subtree(item, ett_cell_list);
|
||||
|
||||
add_string[0] = '\0';
|
||||
consumed =
|
||||
elem_cell_id_aux(tvb, subtree, curr_offset,
|
||||
len - (curr_offset - offset), add_string, 0x7);
|
||||
|
||||
if (add_string[0] != '\0')
|
||||
{
|
||||
proto_item_append_text(item, add_string);
|
||||
}
|
||||
|
||||
proto_item_set_len(item, consumed);
|
||||
|
||||
curr_offset += consumed;
|
||||
|
||||
num_cells = 1;
|
||||
|
||||
while ((len - (curr_offset - offset)) >= 3)
|
||||
|
@ -2359,9 +2422,27 @@ elem_ho_pow_lev(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha
|
|||
|
||||
curr_offset++;
|
||||
|
||||
curr_offset +=
|
||||
elem_cell_id_aux(tvb, tree, curr_offset,
|
||||
item =
|
||||
proto_tree_add_text(tree,
|
||||
tvb, curr_offset, -1,
|
||||
"Cell %d",
|
||||
num_cells);
|
||||
|
||||
subtree = proto_item_add_subtree(item, ett_cell_list);
|
||||
|
||||
add_string[0] = '\0';
|
||||
consumed =
|
||||
elem_cell_id_aux(tvb, subtree, curr_offset,
|
||||
len - (curr_offset - offset), add_string, 0x2);
|
||||
|
||||
if (add_string[0] != '\0')
|
||||
{
|
||||
proto_item_append_text(item, add_string);
|
||||
}
|
||||
|
||||
proto_item_set_len(item, consumed);
|
||||
|
||||
curr_offset += consumed;
|
||||
}
|
||||
|
||||
sprintf(add_string, " - %d cell%s",
|
||||
|
@ -8216,6 +8297,7 @@ proto_register_ansi_a(void)
|
|||
{
|
||||
module_t *ansi_a_module;
|
||||
guint i;
|
||||
gint last_offset;
|
||||
|
||||
/* Setup list of header fields */
|
||||
|
||||
|
@ -8316,10 +8398,10 @@ proto_register_ansi_a(void)
|
|||
/* Setup protocol subtree array */
|
||||
#define MAX_NUM_DTAP_MSG ANSI_A_MAX(NUM_IOS401_DTAP_MSG, 0)
|
||||
#define MAX_NUM_BSMAP_MSG ANSI_A_MAX(NUM_IOS401_BSMAP_MSG, 0)
|
||||
#define NUM_INDIVIDUAL_ELEMS 8
|
||||
#define NUM_INDIVIDUAL_ELEMS 9
|
||||
static gint *ett[NUM_INDIVIDUAL_ELEMS+MAX_NUM_DTAP_MSG+MAX_NUM_BSMAP_MSG+NUM_ELEM_1+NUM_MS_INFO_REC];
|
||||
|
||||
memset((void *) ett, 0, sizeof(ett));
|
||||
memset((void *) ett, -1, sizeof(ett));
|
||||
|
||||
ett[0] = &ett_bsmap;
|
||||
ett[1] = &ett_dtap;
|
||||
|
@ -8329,29 +8411,28 @@ proto_register_ansi_a(void)
|
|||
ett[5] = &ett_cm_srvc_type;
|
||||
ett[6] = &ett_ansi_ms_info_rec_reserved;
|
||||
ett[7] = &ett_ansi_enc_info;
|
||||
ett[8] = &ett_cell_list;
|
||||
|
||||
for (i=0; i < MAX_NUM_DTAP_MSG; i++)
|
||||
last_offset = NUM_INDIVIDUAL_ELEMS;
|
||||
|
||||
for (i=0; i < MAX_NUM_DTAP_MSG; i++, last_offset++)
|
||||
{
|
||||
ett_dtap_msg[i] = -1;
|
||||
ett[NUM_INDIVIDUAL_ELEMS+i] = &ett_dtap_msg[i];
|
||||
ett[last_offset] = &ett_dtap_msg[i];
|
||||
}
|
||||
|
||||
for (i=0; i < MAX_NUM_BSMAP_MSG; i++)
|
||||
for (i=0; i < MAX_NUM_BSMAP_MSG; i++, last_offset++)
|
||||
{
|
||||
ett_bsmap_msg[i] = -1;
|
||||
ett[NUM_INDIVIDUAL_ELEMS+MAX_NUM_DTAP_MSG+i] = &ett_bsmap_msg[i];
|
||||
ett[last_offset] = &ett_bsmap_msg[i];
|
||||
}
|
||||
|
||||
for (i=0; i < NUM_ELEM_1; i++)
|
||||
for (i=0; i < NUM_ELEM_1; i++, last_offset++)
|
||||
{
|
||||
ett_ansi_elem_1[i] = -1;
|
||||
ett[NUM_INDIVIDUAL_ELEMS+MAX_NUM_DTAP_MSG+MAX_NUM_BSMAP_MSG+i] = &ett_ansi_elem_1[i];
|
||||
ett[last_offset] = &ett_ansi_elem_1[i];
|
||||
}
|
||||
|
||||
for (i=0; i < NUM_MS_INFO_REC; i++)
|
||||
for (i=0; i < NUM_MS_INFO_REC; i++, last_offset++)
|
||||
{
|
||||
ett_ansi_ms_info_rec[i] = -1;
|
||||
ett[NUM_INDIVIDUAL_ELEMS+MAX_NUM_DTAP_MSG+MAX_NUM_BSMAP_MSG+NUM_ELEM_1+i] = &ett_ansi_ms_info_rec[i];
|
||||
ett[last_offset] = &ett_ansi_ms_info_rec[i];
|
||||
}
|
||||
|
||||
/* Register the protocol name and description */
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
* UIM
|
||||
* 3GPP2 N.S0003
|
||||
*
|
||||
* $Id: packet-ansi_map.c,v 1.5 2003/10/28 18:08:52 guy Exp $
|
||||
* $Id: packet-ansi_map.c,v 1.6 2003/10/30 07:00:18 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -12388,6 +12388,7 @@ dissect_ansi_error(ASN1_SCK *asn1, proto_tree *tree)
|
|||
guint saved_offset = 0;
|
||||
guint len;
|
||||
guint tag;
|
||||
gint32 value;
|
||||
proto_tree *subtree;
|
||||
proto_item *item = NULL;
|
||||
gchar *str = NULL;
|
||||
|
@ -12425,10 +12426,42 @@ dissect_ansi_error(ASN1_SCK *asn1, proto_tree *tree)
|
|||
dissect_ansi_map_len(asn1, subtree, &def_len, &len);
|
||||
proto_item_set_len(item, (asn1->offset - saved_offset) + len);
|
||||
|
||||
proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
|
||||
asn1->offset, len, "Error Code");
|
||||
if ((tag == TCAP_PRIV_ERR_CODE_TAG) &&
|
||||
(len == 1))
|
||||
{
|
||||
saved_offset = asn1->offset;
|
||||
asn1_int32_value_decode(asn1, 1, &value);
|
||||
|
||||
asn1->offset += len;
|
||||
switch (value)
|
||||
{
|
||||
case 0x81: str = "Unrecognized MIN"; break;
|
||||
case 0x82: str = "Unrecognized ESN"; break;
|
||||
case 0x83: str = "MIN/HLR Mismatch"; break;
|
||||
case 0x84: str = "Operation Sequence Problem"; break;
|
||||
case 0x85: str = "Resource Shortage"; break;
|
||||
case 0x86: str = "Operation Not Supported"; break;
|
||||
case 0x87: str = "Trunk Unavailable"; break;
|
||||
case 0x88: str = "Parameter Error"; break;
|
||||
case 0x89: str = "System Failure"; break;
|
||||
case 0x8a: str = "Unrecognized Parameter Value"; break;
|
||||
case 0x8b: str = "Feature Inactive"; break;
|
||||
case 0x8c: str = "Missing Parameter"; break;
|
||||
default:
|
||||
if ((value >= 0xe0) && (value <= 0xff)) { str = "Reserved for protocol extension"; }
|
||||
else { str = "Reserved"; }
|
||||
break;
|
||||
}
|
||||
|
||||
proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
|
||||
saved_offset, 1, str);
|
||||
}
|
||||
else
|
||||
{
|
||||
proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
|
||||
asn1->offset, len, "Error Code");
|
||||
|
||||
asn1->offset += len;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue