diff options
Diffstat (limited to 'asn1/gsmmap')
-rw-r--r-- | asn1/gsmmap/GSMMAP.asn | 12 | ||||
-rw-r--r-- | asn1/gsmmap/gsmmap.cnf | 106 | ||||
-rw-r--r-- | asn1/gsmmap/packet-gsm_map-template.c | 129 |
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, + ¶meter_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, - ¶meter_tvb); + #.FN_PARS SignalInfo + + VAL_PTR = ¶meter_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, - ¶meter_tvb); +#.FN_PARS LongSignalInfo + + VAL_PTR = ¶meter_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 = ¶meter_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 = ¶meter_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 = ¶meter_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(¬ification_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(¬ification_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" }; |