aboutsummaryrefslogtreecommitdiffstats
path: root/asn1/gsmmap
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2005-07-11 19:24:30 +0000
committerAnders Broman <anders.broman@ericsson.com>2005-07-11 19:24:30 +0000
commit842d2f25df116efa27aa79b88e5ed7fb37b1911d (patch)
tree0af69bacd385a6c00c59c02ed2eceb23b5e5e900 /asn1/gsmmap
parent18527dc22e0673d1b8af1b6d4a935ea7eb59266f (diff)
Dissect some more fields
svn path=/trunk/; revision=14896
Diffstat (limited to 'asn1/gsmmap')
-rw-r--r--asn1/gsmmap/GSMMAP.asn12
-rw-r--r--asn1/gsmmap/gsmmap.cnf106
-rw-r--r--asn1/gsmmap/packet-gsm_map-template.c129
3 files changed, 240 insertions, 7 deletions
diff --git a/asn1/gsmmap/GSMMAP.asn b/asn1/gsmmap/GSMMAP.asn
index 3d73091da5..70a60c63e0 100644
--- a/asn1/gsmmap/GSMMAP.asn
+++ b/asn1/gsmmap/GSMMAP.asn
@@ -1020,6 +1020,18 @@ Ext2-QoS-Subscribed ::= OCTET STRING (SIZE (1..3))
ChargingCharacteristics ::= OCTET STRING (SIZE (2))
-- Octets are coded according to 3GPP TS 32.015.
+-- From 3GPP TS 32.015.
+--
+-- Descriptions for the bits of the flag set:
+--
+-- Bit 1: H (Hot billing) := '00000001'B
+-- Bit 2: F (Flat rate) := '00000010'B
+-- Bit 3: P (Prepaid service) := '00000100'B
+-- Bit 4: N (Normal billing) := '00001000'B
+-- Bit 5: - (Reserved, set to 0) := '00010000'B
+-- Bit 6: - (Reserved, set to 0) := '00100000'B
+-- Bit 7: - (Reserved, set to 0) := '01000000'B
+-- Bit 8: - (Reserved, set to 0) := '10000000'B
LSAOnlyAccessIndicator ::= ENUMERATED {
accessOutsideLSAsAllowed (0),
diff --git a/asn1/gsmmap/gsmmap.cnf b/asn1/gsmmap/gsmmap.cnf
index 02e565cae1..c7b17fd509 100644
--- a/asn1/gsmmap/gsmmap.cnf
+++ b/asn1/gsmmap/gsmmap.cnf
@@ -138,7 +138,29 @@ ModificationRequestFor-CF-Info/noReplyConditionTime ext-noReplyConditionTime
pinfo->p2p_dir = P2P_DIR_RECV;
+
#.END
+#----------------------------------------------------------------------------------------
+#.FN_BODY AddressString
+
+ tvbuff_t *parameter_tvb;
+ char *digit_str;
+
+ offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ &parameter_tvb);
+
+ if (!parameter_tvb)
+ return offset;
+
+ proto_tree_add_item(tree, hf_gsm_map_extension, parameter_tvb, 0,1,FALSE);
+ proto_tree_add_item(tree, hf_gsm_map_nature_of_number, parameter_tvb, 0,1,FALSE);
+ proto_tree_add_item(tree, hf_gsm_map_number_plan, parameter_tvb, 0,1,FALSE);
+
+ digit_str = unpack_digits(parameter_tvb, 1);
+
+ proto_tree_add_string(tree, hf_gsm_map_address_digits, parameter_tvb, 1, -1, digit_str);
+ if (digit_str)
+ g_free(digit_str);
#----------------------------------------------------------------------------------------
#.FN_BODY SS-Status
@@ -198,15 +220,18 @@ ModificationRequestFor-CF-Info/noReplyConditionTime ext-noReplyConditionTime
VAL_PTR = &AccessNetworkProtocolId
#----------------------------------------------------------------------------------------
-#.FN_BODY SignalInfo
+#.FN_HDR SignalInfo
tvbuff_t *parameter_tvb;
guint8 octet;
guint8 length;
tvbuff_t *next_tvb;
- offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
- &parameter_tvb);
+ #.FN_PARS SignalInfo
+
+ VAL_PTR = &parameter_tvb
+
+#.FN_FTR SignalInfo
if (!parameter_tvb)
return offset;
switch (protocolId){
@@ -237,15 +262,19 @@ ModificationRequestFor-CF-Info/noReplyConditionTime ext-noReplyConditionTime
}
#----------------------------------------------------------------------------------------
-#.FN_BODY LongSignalInfo
+#.FN_HDR LongSignalInfo
tvbuff_t *parameter_tvb;
guint8 octet;
guint8 length;
tvbuff_t *next_tvb;
- offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
- &parameter_tvb);
+#.FN_PARS LongSignalInfo
+
+ VAL_PTR = &parameter_tvb
+
+
+#.FN_FTR LongSignalInfo
if (!parameter_tvb)
return offset;
switch (AccessNetworkProtocolId){
@@ -274,6 +303,70 @@ ModificationRequestFor-CF-Info/noReplyConditionTime ext-noReplyConditionTime
offset = tvb_length_remaining(tvb,offset);
#.END
+#.FN_FTR ForwardingOptions
+
+ proto_tree_add_item(tree, hf_gsm_map_notification_to_forwarding_party, tvb, 0,1,FALSE);
+ proto_tree_add_item(tree, hf_gsm_map_redirecting_presentation, tvb, 0,1,FALSE);
+ proto_tree_add_item(tree, hf_gsm_map_notification_to_calling_party, tvb, 0,1,FALSE);
+ proto_tree_add_item(tree, hf_gsm_map_forwarding_reason, tvb, 0,1,FALSE);
+#.FN_FTR Ext-ForwFeature/forwardingOptions
+
+ proto_tree_add_item(tree, hf_gsm_map_notification_to_forwarding_party, tvb, 0,1,FALSE);
+ proto_tree_add_item(tree, hf_gsm_map_redirecting_presentation, tvb, 0,1,FALSE);
+ proto_tree_add_item(tree, hf_gsm_map_notification_to_calling_party, tvb, 0,1,FALSE);
+ proto_tree_add_item(tree, hf_gsm_map_forwarding_reason, tvb, 0,1,FALSE);
+
+#.FN_HDR PDP-Type
+ guint8 pdp_type_org;
+ tvbuff_t *parameter_tvb;
+
+#.FN_PARS PDP-Type
+
+ VAL_PTR = &parameter_tvb
+
+#.FN_FTR PDP-Type
+ if (!parameter_tvb)
+ return offset;
+ proto_tree_add_item(tree, hf_gsm_map_pdp_type_org, parameter_tvb, 0,1,FALSE);
+ pdp_type_org = tvb_get_guint8(parameter_tvb,1);
+ switch (pdp_type_org){
+ case 0: /* ETSI */
+ proto_tree_add_item(tree, hf_gsm_map_etsi_pdp_type_number, parameter_tvb, 0,1,FALSE);
+ break;
+ case 1: /* IETF */
+ proto_tree_add_item(tree, hf_gsm_map_ietf_pdp_type_number, parameter_tvb, 0,1,FALSE);
+ break;
+ default:
+ break;
+ }
+#.FN_HDR QoS-Subscribed
+
+ tvbuff_t *parameter_tvb;
+
+#.FN_PARS QoS-Subscribed
+
+ VAL_PTR = &parameter_tvb
+
+#.FN_FTR QoS-Subscribed
+
+ if (!parameter_tvb)
+ return offset;
+ de_sm_qos(parameter_tvb, tree, 0, 3, NULL);
+
+#.FN_HDR Ext-QoS-Subscribed
+
+ tvbuff_t *parameter_tvb;
+
+#.FN_PARS Ext-QoS-Subscribed
+
+ VAL_PTR = &parameter_tvb
+
+#.FN_FTR Ext-QoS-Subscribed
+
+ if (!parameter_tvb)
+ return offset;
+ de_sm_qos(parameter_tvb, tree, 0, 9, NULL);
+
#----------------------------------------------------------------------------------------
#.TYPE_ATTR
SS-Code TYPE = FT_UINT8 DISPLAY = BASE_DEC STRINGS = VALS(ssCode_vals)
@@ -283,6 +376,7 @@ TeleserviceCode TYPE = FT_UINT8 DISPLAY = BASE_DEC STRINGS = VALS(Teleservice
BearerServiceCode TYPE = FT_UINT8 DISPLAY = BASE_DEC STRINGS = VALS(Bearerservice_vals)
Ext-TeleserviceCode TYPE = FT_UINT8 DISPLAY = BASE_DEC STRINGS = VALS(Teleservice_vals)
Ext-BearerServiceCode TYPE = FT_UINT8 DISPLAY = BASE_DEC STRINGS = VALS(Bearerservice_vals)
+ChargingCharacteristics TYPE = FT_UINT16 DISPLAY = BASE_DEC BITMASK = 0x0f00 STRINGS = VALS(chargingcharacteristics_values)
#.END
diff --git a/asn1/gsmmap/packet-gsm_map-template.c b/asn1/gsmmap/packet-gsm_map-template.c
index 6771f48f9f..2994a83146 100644
--- a/asn1/gsmmap/packet-gsm_map-template.c
+++ b/asn1/gsmmap/packet-gsm_map-template.c
@@ -73,6 +73,7 @@ static int hf_gsm_map_extension = -1;
static int hf_gsm_map_nature_of_number = -1;
static int hf_gsm_map_number_plan = -1;
static int hf_gsm_map_isdn_address_digits = -1;
+static int hf_gsm_map_address_digits = -1;
static int hf_gsm_map_servicecentreaddress_digits = -1;
static int hf_gsm_map_imsi_digits = -1;
static int hf_gsm_map_Ss_Status_unused = -1;
@@ -80,6 +81,13 @@ static int hf_gsm_map_Ss_Status_q_bit = -1;
static int hf_gsm_map_Ss_Status_p_bit = -1;
static int hf_gsm_map_Ss_Status_r_bit = -1;
static int hf_gsm_map_Ss_Status_a_bit = -1;
+static int hf_gsm_map_notification_to_forwarding_party = -1;
+static int hf_gsm_map_redirecting_presentation = -1;
+static int hf_gsm_map_notification_to_calling_party = -1;
+static int hf_gsm_map_forwarding_reason = -1;
+static int hf_gsm_map_pdp_type_org = -1;
+static int hf_gsm_map_etsi_pdp_type_number = -1;
+static int hf_gsm_map_ietf_pdp_type_number = -1;
#include "packet-gsm_map-hf.c"
@@ -1244,6 +1252,92 @@ static const value_string Bearerservice_vals[] = {
{ 0, NULL }
};
+/* ForwardingOptions
+
+-- bit 8: notification to forwarding party
+-- 0 no notification
+-- 1 notification
+*/
+static const true_false_string notification_value = {
+ "Notification",
+ "No notification"
+};
+/*
+-- bit 7: redirecting presentation
+-- 0 no presentation
+-- 1 presentation
+*/
+static const true_false_string redirecting_presentation_value = {
+ "Presentation",
+ "No presentationn"
+};
+/*
+-- bit 6: notification to calling party
+-- 0 no notification
+-- 1 notification
+*/
+/*
+-- bit 5: 0 (unused)
+-- bits 43: forwarding reason
+-- 00 ms not reachable
+-- 01 ms busy
+-- 10 no reply
+-- 11 unconditional when used in a SRI Result,
+-- or call deflection when used in a RCH Argument
+*/
+static const value_string forwarding_reason_values[] = {
+{0x0, "ms not reachable" },
+{0x1, "ms busy" },
+{0x2, "no reply" },
+{0x3, "unconditional when used in a SRI Result or call deflection when used in a RCH Argument" },
+{ 0, NULL }
+};
+/*
+-- bits 21: 00 (unused)
+*/
+
+static const value_string pdp_type_org_values[] = {
+{0x0, "ETSI" },
+{0x1, "IETF" },
+{0xf, "Empty PDP type" },
+{ 0, NULL }
+};
+
+static const value_string etsi_pdp_type_number_values[] = {
+{0x0, "Reserved, used in earlier version of this protocol" },
+{0x1, "PPP" },
+{ 0, NULL }
+};
+
+static const value_string ietf_pdp_type_number_values[] = {
+{0x21, "IPv4 Address" },
+{0x57, "IPv6 Address" },
+{ 0, NULL }
+};
+
+/*
+ChargingCharacteristics ::= OCTET STRING (SIZE (2))
+-- Octets are coded according to 3GPP TS 32.015.
+-- From 3GPP TS 32.015.
+--
+-- Descriptions for the bits of the flag set:
+--
+-- Bit 1: H (Hot billing) := '00000001'B
+-- Bit 2: F (Flat rate) := '00000010'B
+-- Bit 3: P (Prepaid service) := '00000100'B
+-- Bit 4: N (Normal billing) := '00001000'B
+-- Bit 5: - (Reserved, set to 0) := '00010000'B
+-- Bit 6: - (Reserved, set to 0) := '00100000'B
+-- Bit 7: - (Reserved, set to 0) := '01000000'B
+-- Bit 8: - (Reserved, set to 0) := '10000000'B
+*/
+static const value_string chargingcharacteristics_values[] = {
+{0x1, "H (Hot billing)" },
+{0x2, "F (Flat rate)" },
+{0x4, "P (Prepaid service)" },
+{0x8, "N (Normal billing)" },
+{ 0, NULL }
+};
/*--- proto_reg_handoff_gsm_map ---------------------------------------*/
static void range_delete_callback(guint32 ssn)
{
@@ -1420,7 +1514,7 @@ void proto_register_gsm_map(void) {
{ &hf_gsm_map_nature_of_number,
{ "Nature of number", "gsm_map.nature_of_number",
FT_UINT8, BASE_HEX, VALS(gsm_map_nature_of_number_values), 0x70,
- "ature of number", HFILL }},
+ "Nature of number", HFILL }},
{ &hf_gsm_map_number_plan,
{ "Number plan", "gsm_map.number_plan",
FT_UINT8, BASE_HEX, VALS(gsm_map_number_plan_values), 0x0f,
@@ -1429,6 +1523,10 @@ void proto_register_gsm_map(void) {
{ "ISDN Address digits", "gsm_map.isdn.adress.digits",
FT_STRING, BASE_NONE, NULL, 0,
"ISDN Address digits", HFILL }},
+ { &hf_gsm_map_address_digits,
+ { "Address digits", "gsm_map.adress.digits",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "Address digits", HFILL }},
{ &hf_gsm_map_servicecentreaddress_digits,
{ "ServiceCentreAddress digits", "gsm_map.servicecentreaddress_digits",
FT_STRING, BASE_NONE, NULL, 0,
@@ -1457,6 +1555,35 @@ void proto_register_gsm_map(void) {
{ "A bit", "gsm_map.ss_status_a_bit",
FT_BOOLEAN, 8, TFS(&gsm_map_Ss_Status_a_values), 0x01,
"A bit", HFILL }},
+ { &hf_gsm_map_notification_to_forwarding_party,
+ { "Notification to forwarding party", "gsm_map.notification_to_forwarding_party",
+ FT_BOOLEAN, 8, TFS(&notification_value), 0x80,
+ "Notification to forwarding party", HFILL }},
+ { &hf_gsm_map_redirecting_presentation,
+ { "Redirecting presentation", "gsm_map.redirecting_presentation",
+ FT_BOOLEAN, 8, TFS(&redirecting_presentation_value), 0x40,
+ "Redirecting presentation", HFILL }},
+ { &hf_gsm_map_notification_to_calling_party,
+ { "Notification to calling party", "gsm_map.notification_to_clling_party",
+ FT_BOOLEAN, 8, TFS(&notification_value), 0x20,
+ "Notification to calling party", HFILL }},
+ { &hf_gsm_map_forwarding_reason,
+ { "Forwarding reason", "gsm_map.forwarding_reason",
+ FT_UINT8, BASE_HEX, VALS(forwarding_reason_values), 0x0c,
+ "forwarding reason", HFILL }},
+ { &hf_gsm_map_pdp_type_org,
+ { "PDP Type Organization", "gsm_map.pdp_type_org",
+ FT_UINT8, BASE_HEX, VALS(pdp_type_org_values), 0x0f,
+ "PDP Type Organization", HFILL }},
+ { &hf_gsm_map_etsi_pdp_type_number,
+ { "PDP Type Number", "gsm_map.pdp_type_org",
+ FT_UINT8, BASE_HEX, VALS(etsi_pdp_type_number_values), 0,
+ "ETSI PDP Type Number", HFILL }},
+ { &hf_gsm_map_ietf_pdp_type_number,
+ { "PDP Type Number", "gsm_map.ietf_pdp_type_number",
+ FT_UINT8, BASE_HEX, VALS(ietf_pdp_type_number_values), 0,
+ "IETF PDP Type Number", HFILL }},
+
#include "packet-gsm_map-hfarr.c"
};