3GPP NAS: add dissection of MSISDN in PCO
authorPascal Quantin <pascal.quantin@gmail.com>
Tue, 10 Jun 2014 10:34:18 +0000 (12:34 +0200)
committerPascal Quantin <pascal.quantin@gmail.com>
Tue, 10 Jun 2014 11:36:02 +0000 (11:36 +0000)
Change-Id: Ie8dac8c898ff94e955a4c0fdde7f4ffff496e97f
Reviewed-on: https://code.wireshark.org/review/2098
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
epan/dissectors/packet-gsm_a_gm.c

index a68c9f178000b8a0ebbcf7dfa2fcb2dd768990e7..bdedf9bb32641d9fb753b6a189148a37cb4cf74b 100644 (file)
@@ -85,6 +85,7 @@
 #include "packet-e212.h"
 #include "packet-ppp.h"
 #include "ipproto.h"
+#include "packet-gsm_map.h"
 
 void proto_register_gsm_a_gm(void);
 void proto_reg_handoff_gsm_a_gm(void);
@@ -4055,7 +4056,7 @@ de_sm_pco(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, g
                        case 0x0008:
                                if ((link_dir == P2P_DIR_DL) && (e_len > 0)) {
                                        tvb_get_ipv6(tvb, curr_offset, &ipv6_addrx);
-                                       proto_tree_add_text(pco_tree, tvb, curr_offset, 16,     "IPv6: %s", ip6_to_str(&ipv6_addrx));
+                                       proto_tree_add_text(pco_tree, tvb, curr_offset, 16, "IPv6: %s", ip6_to_str(&ipv6_addrx));
                                        oct = tvb_get_guint8(tvb, curr_offset+16);
                                        proto_tree_add_text(pco_tree, tvb, curr_offset+16, 1, "Prefix length: %u", oct);
                                }
@@ -4065,10 +4066,16 @@ de_sm_pco(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, g
                        case 0x000D:
                                if ((link_dir == P2P_DIR_DL) && (e_len > 0)) {
                                        ipv4_addrx = tvb_get_ipv4(tvb, curr_offset);
-                                       proto_tree_add_text(pco_tree, tvb, curr_offset, 4,      "IPv4: %s",
+                                       proto_tree_add_text(pco_tree, tvb, curr_offset, 4, "IPv4: %s",
                                                                                ip_to_str((guint8 *)&ipv4_addrx));
                                }
                                break;
+                       case 0x000E:
+                               if ((link_dir == P2P_DIR_DL) && (e_len > 0)) {
+                                       l3_tvb = tvb_new_subset_length(tvb, curr_offset, e_len);
+                                       dissect_gsm_map_msisdn(l3_tvb, pinfo, pco_tree);
+                               }
+                               break;
                        case 0x0010:
                                if ((link_dir == P2P_DIR_DL) && (e_len == 2)) {
                                        guint16 word = tvb_get_ntohs(tvb, curr_offset);