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:
Guy Harris 2003-10-30 07:00:18 +00:00
parent 2a6b337ad8
commit 8e67a430e8
7 changed files with 12633 additions and 29 deletions

View File

@ -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> {

View File

@ -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 \

View File

@ -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 \

View File

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

View File

@ -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;
}
}

9780
packet-gsm_a.c Normal file

File diff suppressed because it is too large Load Diff

2701
packet-gsm_sms.c Normal file

File diff suppressed because it is too large Load Diff