Use strtok_s on windows and strtok_r otherwise.
authoretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>
Sun, 7 Mar 2010 18:56:35 +0000 (18:56 +0000)
committeretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>
Sun, 7 Mar 2010 18:56:35 +0000 (18:56 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@32138 f5534014-38df-0310-8fa8-9805f1628bb7

20 files changed:
AUTHORS
CMakeLists.txt
Makefile.common
asn1/snmp/packet-snmp-template.c
cmake/modules/FindGTK2.cmake
epan/dissectors/packet-diameter.c
epan/dissectors/packet-diameter.h
epan/dissectors/packet-gsm_a_common.h
epan/dissectors/packet-gsm_a_gm.c
epan/dissectors/packet-nas_eps.c
epan/dissectors/packet-rlc-lte.c
epan/dissectors/packet-rsvp.c
epan/dissectors/packet-rtcp.c
epan/dissectors/packet-snmp.c
epan/enterprise-numbers
epan/libwireshark.def
epan/oids.c
gtk/diameter_stat.c
manuf
tap-diameter-avp.c [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
index 216c5e178dc0b8472592d973714caeff805451d1..3280cbc8df95d6ec23dcad863d697931e0348d9c 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -2322,6 +2322,12 @@ Francesco Fondelli       <francesco.fondelli [AT] gmail.com> {
        LMP, update to RFC 4204
        RSVP extensions for G.709 Optical Transport Networks Control, RFC 4328
        Update GMPLS GPID, Switching and Encoding type values
+       Support for generalized label interpretation:
+           SUKLM format for SONET/SDH label (RFC 4606), t3t2t1 format for 
+           G.709 ODUk label (RFC 4328), G.694 format for lambda label 
+           (draft-ietf-ccamp-gmpls-g-694-lambda-labels-05).  Add related 
+           user preference option.
+       RSVP IF_ID ERROR_STRING TLV support, RFC 4783
 }
 
 Artem Tamazov           <artem.tamazov [AT] tellabs.com> {
index e2bb1009697c7f9b637007f4d9d02d6f4189fe6f..9489e21ca0e09e3d1c46a24673d7f4e6d8b8c80c 100644 (file)
@@ -489,6 +489,7 @@ set(TSHARK_TAP_SRC
         tap-camelsrt.c
         tap-comparestat.c
         tap-dcerpcstat.c
+        tap-diameter-avp.c
         tap-funnel.c
         tap-gsm_astat.c
         tap-h225counter.c
index 0676bce0a95f449aabfbb4c67a9579b62ee0ba30..1a13fc5101c251b96bc18b31e370f0b8c8a4a762 100644 (file)
@@ -107,6 +107,7 @@ TSHARK_TAP_SRC =    \
        tap-camelsrt.c  \
        tap-comparestat.c       \
        tap-dcerpcstat.c        \
+       tap-diameter-avp.c \
        tap-funnel.c \
        tap-gsm_astat.c \
        tap-h225counter.c       \
index 66d946b69334b957ed8f85229e42f391cca05c74..670126184c4ba1e34073bebc12827b94f824f15e 100644 (file)
@@ -185,6 +185,7 @@ static int hf_snmp_engineid_enterprise = -1;
 static int hf_snmp_engineid_format = -1;
 static int hf_snmp_engineid_ipv4 = -1;
 static int hf_snmp_engineid_ipv6 = -1;
+static int hf_snmp_engineid_cisco_type = -1;
 static int hf_snmp_engineid_mac = -1;
 static int hf_snmp_engineid_text = -1;
 static int hf_snmp_engineid_time = -1;
@@ -926,6 +927,15 @@ static const value_string snmp_engineid_format_vals[] = {
        { 0,    NULL }
 };
 
+#define SNMP_ENGINEID_CISCO_AGENT 0x00
+#define SNMP_ENGINEID_CISCO_MANAGER 0x01
+
+static const value_string snmp_engineid_cisco_type_vals[] = {
+       { SNMP_ENGINEID_CISCO_AGENT,    "Agent" },
+       { SNMP_ENGINEID_CISCO_MANAGER,  "Manager" },
+       { 0,    NULL }
+};
+
 /*
  * SNMP Engine ID dissection according to RFC 3411 (SnmpEngineID TC)
  * or historic RFC 1910 (AgentID)
@@ -994,6 +1004,12 @@ int dissect_snmp_engineid(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
        }
        break;
       case SNMP_ENGINEID_FORMAT_MACADDRESS:
+       /* See: https://supportforums.cisco.com/message/3010617#3010617 for details. */
+       if ((enterpriseid==9)&&(len_remain==7)) {
+         proto_tree_add_item(tree, hf_snmp_engineid_cisco_type, tvb, offset, 1, FALSE);
+         offset++;
+         len_remain--;
+       }
        /* 6-byte MAC address */
        if (len_remain==6) {
          proto_tree_add_item(tree, hf_snmp_engineid_mac, tvb, offset, 6, FALSE);
@@ -2003,6 +2019,9 @@ void proto_register_snmp(void) {
                { &hf_snmp_engineid_ipv6, {
                    "Engine ID Data: IPv6 address", "snmp.engineid.ipv6", FT_IPv6, BASE_NONE,
                    NULL, 0, NULL, HFILL }},
+               { &hf_snmp_engineid_cisco_type, {
+                   "Engine ID Data: Cisco type", "snmp.engineid.cisco.type", FT_UINT8, BASE_NONE,
+                   VALS(snmp_engineid_cisco_type_vals), 0, NULL, HFILL }},
                { &hf_snmp_engineid_mac, {
                    "Engine ID Data: MAC address", "snmp.engineid.mac", FT_ETHER, BASE_NONE,
                    NULL, 0, NULL, HFILL }},
index c8714178de8777b479524879bca5bb4cf21cf65b..25bba9aade980b9db618dea04270bd7e9608418b 100644 (file)
@@ -172,6 +172,8 @@ function(_GTK2_FIND_INCLUDE_DIR _var _hdr)
             /usr/openwin/lib
             /sw/include
             /sw/lib
+            /opt/local/include
+            /opt/local/lib
             $ENV{GTKMM_BASEPATH}/include
             $ENV{GTKMM_BASEPATH}/lib
             [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/include
index af7fe3ad9aa3fef2d79dc455d67930f52f27eca3..6dbf11cd58f88e099239038643f26486ef8a3f73 100644 (file)
@@ -796,6 +796,7 @@ dissect_diameter_common(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
                        diameter_pair = se_alloc(sizeof(diameter_req_ans_pair_t));
                        diameter_pair->hop_by_hop_id = hop_by_hop_id;
                        diameter_pair->cmd_code = cmd;
+                       diameter_pair->result_code = 0;
                        diameter_pair->cmd_str = cmd_str;
                        diameter_pair->req_frame = pinfo->fd->num;
                        diameter_pair->ans_frame = 0;
@@ -814,10 +815,15 @@ dissect_diameter_common(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
        if (!diameter_pair) {
                /* create a "fake" diameter_pair structure */
                diameter_pair = ep_alloc(sizeof(diameter_req_ans_pair_t));
+               diameter_pair->hop_by_hop_id = hop_by_hop_id;
+               diameter_pair->cmd_code = cmd;
+               diameter_pair->result_code = 0;
+               diameter_pair->cmd_str = cmd_str;
                diameter_pair->req_frame = 0;
                diameter_pair->ans_frame = 0;
                diameter_pair->req_time = pinfo->fd->abs_ts;
        }
+       diameter_pair->processing_request=(flags_bits & 0x80)!=0;
 
        if (!tree) return;
 
@@ -840,10 +846,7 @@ dissect_diameter_common(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
                        diameter_pair->srt_time = ns; 
                        it = proto_tree_add_time(diam_tree, hf_diameter_answer_time, tvb, 0, 0, &ns);
                        PROTO_ITEM_SET_GENERATED(it);
-
                        /* TODO: Populate result_code in tap record from AVP 268 */
-                       /* Also TODO: See how to handle requests for which no answers were found */
-                       tap_queue_packet(diameter_tap, pinfo, diameter_pair);
                }
        }
 
@@ -857,6 +860,14 @@ dissect_diameter_common(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
                offset +=  (offset % 4) ? 4 - (offset % 4) : 0 ;
        }
 
+
+       /* Handle requests for which no answers were found and
+        * anawers for which no requests were found in the tap listener.
+        * In case if you don't need unpaired requests/answers use:
+        * if(diameter_pair->processing_request || !diameter_pair->req_frame)
+        *   return;
+        */
+       tap_queue_packet(diameter_tap, pinfo, diameter_pair);
 }
 
 static guint
index cecba8b4cdc6935fb2c3cd57ff5e594d82d30a70..4444224b7a5a8208b0644475b3b176507d69a647 100644 (file)
@@ -34,6 +34,7 @@ typedef struct _diameter_req_ans_pair_t
        guint32         ans_frame;      /* frame number in which answer was seen */
        nstime_t        req_time;
        nstime_t        srt_time;
+  gboolean  processing_request; /* TRUE if processing request, FALSE if processing answer. */
 } diameter_req_ans_pair_t;
 
 /* Conversation Info */
index 2e78a50111971a503f39524ff894e7349cb67e0f..7ec2564509b4e9cf265ee276184960c1fd631047 100644 (file)
@@ -982,6 +982,11 @@ typedef enum
        DE_TEAR_DOWN_IND,                               /* Tear Down Indicator */
        DE_PACKET_FLOW_ID,                              /* Packet Flow Identifier */
        DE_TRAFFIC_FLOW_TEMPLATE,               /* Traffic Flow Template */
+       DE_TMGI,                                                /* Temporary Mobile Group Identity (TMGI) */
+       DE_MBMS_BEARER_CAP,                             /* MBMS bearer capabilities */
+       DE_MBMS_PROT_CONF_OPT,                  /* MBMS protocol configuration options */
+       DE_ENH_NSAPI,                                   /* Enhanced network service access point identifier */
+       DE_REQ_TYPE,                                    /* Request type */
        /* GPRS Common Information Elements [8] 10.5.7 */
        DE_PDP_CONTEXT_STAT,                    /* [8] 10.5.7.1         PDP Context Status */
        DE_RAD_PRIO,                                    /* [8] 10.5.7.2         Radio Priority */
index fb5100f91b56c93ce9519d948c8e168656fd3a10..13802d4c6acf30e7b5a62a40e0b7f8726c7e2d1a 100644 (file)
@@ -176,6 +176,11 @@ const value_string gsm_gm_elem_strings[] = {
        { 0x00, "Tear Down Indicator" },
        { 0x00, "Packet Flow Identifier" },
        { 0x00, "Traffic Flow Template" },
+       { 0x00, "Temporary Mobile Group Identity (TMGI)" },
+       { 0x00, "MBMS bearer capabilities" },
+       { 0x00, "MBMS protocol configuration options" },
+       { 0x00, "Enhanced network service access point identifier" },
+       { 0x00, "Request type" },
        /* GPRS Common Information Elements 10.5.7 */
        { 0x00, "PDP Context Status" },
        { 0x00, "Radio Priority" },
@@ -275,6 +280,9 @@ static int hf_gsm_a_sm_cause_2 = -1;
 static int hf_gsm_a_sm_llc_sapi = -1;
 static int hf_gsm_a_sm_tdi = -1;
 static int hf_gsm_a_sm_packet_flow_id = -1;
+static int hf_gsm_a_sm_tmgi = -1;
+static int hf_gsm_a_sm_enh_nsapi = -1;
+static int hf_gsm_a_sm_req_type = -1;
 
 static int hf_gsm_a_gmm_net_cap_gea1 = -1;
 static int hf_gsm_a_gmm_net_cap_smdch = -1;
@@ -4119,7 +4127,7 @@ de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch
                                switch ( pack_component_type ){
                        
                                case 0x10:
-                                       str="IPv4 source address type";
+                                       str="IPv4 remote address type";
                                        proto_tree_add_item(comp_tree,hf_gsm_a_sm_ip4_address,tvb,curr_offset,4,FALSE);
                                        curr_offset+=4;
                                        curr_len-=4;
@@ -4129,7 +4137,7 @@ de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch
                                        break;
 
                                case 0x20:
-                                       str="IPv6 source address type";
+                                       str="IPv6 remote address type";
                                        proto_tree_add_item(comp_tree,hf_gsm_a_sm_ip6_address,tvb,curr_offset,16,FALSE);
                                        curr_offset+=16;
                                        curr_len-=16;
@@ -4146,13 +4154,13 @@ de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch
                                        break;
 
                                case 0x40:
-                                       str="Single destination port type";
+                                       str="Single local port type";
                                        proto_tree_add_item(comp_tree,hf_gsm_a_tft_port,tvb,curr_offset,2,FALSE);
                                        curr_offset+=2;
                                        curr_len-=2;
 
                                case 0x41:
-                                       str="Destination port range type";
+                                       str="Local port range type";
                                        proto_tree_add_item(comp_tree,hf_gsm_a_tft_port_low,tvb,curr_offset,2,FALSE);
                                        proto_tree_add_item(comp_tree,hf_gsm_a_tft_port_high,tvb,curr_offset,2,FALSE);
                                        curr_offset+=4;
@@ -4160,14 +4168,14 @@ de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch
                                        break;
 
                                case 0x50:
-                                       str="Single source port type";
+                                       str="Single remote port type";
                                        proto_tree_add_item(comp_tree,hf_gsm_a_tft_port,tvb,curr_offset,2,FALSE);
                                        curr_offset+=2;
                                        curr_len-=2;
                                        break;
 
                                case 0x51:
-                                       str="Source port range type";
+                                       str="Remote port range type";
                                        proto_tree_add_item(comp_tree,hf_gsm_a_tft_port_low,tvb,curr_offset,2,FALSE);
                                        proto_tree_add_item(comp_tree,hf_gsm_a_tft_port_high,tvb,curr_offset,2,FALSE);
                                        curr_offset+=4;
@@ -4213,9 +4221,142 @@ de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch
        if (e_bit == 1){
                 proto_tree_add_text(tf_tree, tvb, curr_offset, 1, "Note: Possible Authorization Token/Flow Identifier not decoded yet");
        }
+       return(len);
+}
+
+/*
+ * [9] 10.5.6.13 Temporary Mobile Group Identity (TMGI)
+ */
+static guint16
+de_sm_tmgi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+{
+       guint32 curr_offset;
+
+    curr_offset = offset;
+
+       proto_tree_add_item(tree, hf_gsm_a_sm_tmgi, tvb, curr_offset, 3, FALSE);
+       curr_offset += 3;
+
+       NO_MORE_DATA_CHECK(len);
+       curr_offset = dissect_e212_mcc_mnc(tvb, gsm_a_dtap_pinfo, tree, curr_offset);
+
+       EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+
+       return(curr_offset - offset);
+}
+
+/*
+ * [9] 10.5.6.14 MBMS bearer capabilities
+ */
+static guint16
+de_sm_mbms_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+{
+       guint32 curr_offset, temp32;
+       guint8 oct;
+       gchar *str;
+
+       curr_offset = offset;
+
+       oct = tvb_get_guint8(tvb, curr_offset);
+
+       switch (oct)
+       {
+               case 0x00: str="Subscribed maximum bit rate for downlink/reserved"; break;
+               case 0xff: str="0 kbps"; break;
+               default: str = ep_strdup_printf("%u kbps", qos_calc_bitrate(oct));
+       }
+
+       proto_tree_add_uint_format_value(tree, hf_gsm_a_qos_max_bitrate_downl, tvb, 
+               curr_offset, 1, oct, "%s (%u)", str, oct);
+       curr_offset+= 1;
+
+       NO_MORE_DATA_CHECK(len);
+
+       oct = tvb_get_guint8(tvb, curr_offset);
+
+       if (oct == 0x00)
+               str = "Use the value indicated by the Maximum bit rate for downlink";
+       else
+       {
+               temp32 = qos_calc_ext_bitrate(oct);
+               if (temp32 % 1000 == 0)
+                       str = ep_strdup_printf("%u Mbps", temp32 / 1000);
+               else
+                       str = ep_strdup_printf("%u kbps", temp32);
+       }
+       proto_tree_add_uint_format_value(tree, hf_gsm_a_qos_max_bitrate_downl_ext, tvb, 
+               curr_offset, 1, oct, "%s (%u)", str, oct);
+
+       curr_offset+= 1;
+
+       EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+
+       return(curr_offset - offset);
+}
+
+/*
+ * [9] 10.5.6.15 MBMS protocol configuration options
+ */
+static guint16
+de_sm_mbms_prot_conf_opt(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+{
+       guint32 curr_offset;
+
+       curr_offset = offset;
+       proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 8, FALSE);
+       curr_offset++;
+
+       EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+
        return(curr_offset - offset);
 }
 
+/*
+ * [9] 10.5.6.16 Enhanced network service access point identifier
+ */
+static guint16
+de_sm_enh_nsapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+       guint8  oct;
+       gchar *str;
+
+       oct = tvb_get_guint8(tvb, offset);
+
+       if(oct < 0x80)
+               str = "Reserved";
+       else if (oct < 0xff)
+                       str = ep_strdup_printf("NSAPI %u for Multimedia Broadcast/Multicast Service (MBMS) Multicast mode", oct);
+               else
+                       str = "Reserved for use by lower layers in the p2p radio bearer allocation message for MBMS Broadcast mode";
+
+
+       proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_enh_nsapi, tvb, 
+               offset, 1, oct, "%s (%u)", str, oct);
+
+       /* no length check possible */
+       return(1);
+}
+
+/*
+ * [9] 10.5.6.17 Request type
+ */
+static const value_string gsm_a_sm_req_type_vals[] = {
+       { 0x01, "Initial request" },
+       { 0x02, "Handover" },
+       { 0x03, "Unused. If received, the network shall interpret this as \"Initial request\"." },
+       { 0, NULL }
+};
+
+static guint16
+de_sm_req_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+       proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset<<3) + 4, 1, FALSE);
+       proto_tree_add_item(tree, hf_gsm_a_sm_req_type, tvb, offset, 1, FALSE);
+
+       /* no length check possible */
+       return(1);
+}
+
 guint16 (*gm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) = {
        /* GPRS Mobility Management Information Elements 10.5.5 */
        de_gmm_attach_res,      /* Attach Result */
@@ -4257,6 +4398,11 @@ guint16 (*gm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint
        de_sm_tear_down,        /* Tear Down Indicator */
        de_sm_pflow_id,         /* Packet Flow Identifier */
        de_sm_tflow_temp,       /* Traffic Flow Template */
+       de_sm_tmgi,             /* Temporary Mobile Group Identity (TMGI) */
+       de_sm_mbms_bearer_cap,  /* MBMS bearer capabilities */
+       de_sm_mbms_prot_conf_opt,       /* MBMS protocol configuration options */
+       de_sm_enh_nsapi,        /* Enhanced network service access point identifier */  
+       de_sm_req_type,         /* Request type */
        /* GPRS Common Information Elements 10.5.7 */
        de_gc_context_stat,     /* PDP Context Status */
        de_gc_radio_prio,       /* Radio Priority */
@@ -5402,13 +5548,38 @@ dtap_sm_status(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
 /*
  * [8] 9.5.22 Activate MBMS Context Request
  */
+static void
+dtap_sm_act_mbms_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+{
+       guint32 curr_offset;
+       guint32 consumed;
+       guint   curr_len;
+
+       curr_offset = offset;
+       curr_len = len;
+
+       gsm_a_dtap_pinfo->p2p_dir = P2P_DIR_RECV;
+
+       /* Requested MBMS NSAPI Enhanced Network service access point identifier 10.5.6.16 M V */
+       ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_ENH_NSAPI );
 
-       /* Requested MBMS NSAPI Enhanced Network service access point identifier 10.5.6.15 M V */
        /* Requested LLC SAPI LLC service access point identifier 10.5.6.9 M V 1 */
+       ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_LLC_SAPI );
+
        /* Supported MBMS bearer capabilities MBMS bearer capabilities 10.5.6.14 M LV 2 - 3 */
+       ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_MBMS_BEARER_CAP , NULL );
+
        /* Requested multicast address Packet data protocol address 10.5.6.4 M LV 3 - 19 */
+       ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_PD_PRO_ADDR , " - Requested multicast address" );
+
        /* Access point name Access point name 10.5.6.1 M LV 2 - 101 */
+       ELEM_MAND_LV(GSM_A_PDU_TYPE_GM, DE_ACC_POINT_NAME , NULL );
+
        /* 35 MBMS protocol configuration options MBMS protocol configuration options 10.5.6.15 O TLV 3 - 253 */
+       ELEM_OPT_TLV( 0x35 , GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT , NULL);
+
+       EXTRANEOUS_DATA_CHECK(curr_len, 0);
+}
 
 /*
  * [8] 9.5.23 Activate MBMS Context Accept
@@ -5479,7 +5650,7 @@ static void (*dtap_msg_sm_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset
        NULL,                                           /* Reserved: was allocated in earlier phases of the protocol */
        NULL,                                           /* Reserved: was allocated in earlier phases of the protocol */
        dtap_sm_status,                         /* SM Status */
-       NULL,                                           /* Activate MBMS Context Request */
+       dtap_sm_act_mbms_req,           /* Activate MBMS Context Request */
        NULL,                                           /* Activate MBMS Context Accept */
        NULL,                                           /* Activate MBMS Context Reject */
        NULL,                                           /* Request MBMS Context Activation */
@@ -6022,6 +6193,21 @@ proto_register_gsm_a_gm(void)
                FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_epc_vals), 0x04,
                NULL, HFILL }
        },
+       { &hf_gsm_a_sm_tmgi,
+               { "Temporary Mobile Group Identity (TMGI)", "gsm_a.sm.tmgi",
+                 FT_UINT24, BASE_HEX, NULL, 0x0,
+               NULL, HFILL }
+       },
+       { &hf_gsm_a_sm_enh_nsapi,
+               { "Enhanced NSAPI", "gsm_a.sm.enh_nsapi",
+                 FT_UINT8, BASE_DEC, NULL, 0x0,
+               NULL, HFILL }
+       },
+       { &hf_gsm_a_sm_req_type,
+               { "Request type", "gsm_a.sm.req_type",
+                 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_req_type_vals), 0x07,
+               NULL, HFILL }
+       },
        };
 
        /* Setup protocol subtree array */
index 9b0faf6dbd481c5ecc1f77d5162764b7565f6caf..1b8d77fec299a9d68f6d0aa4d33b9d5b89329d8f 100644 (file)
@@ -59,6 +59,7 @@ static int hf_nas_eps_spare_bits = -1;
 static int hf_nas_eps_security_header_type = -1;
 static int hf_nas_eps_msg_auth_code = -1;
 static int hf_nas_eps_seq_no = -1;
+static int hf_nas_eps_seq_no_short = -1;
 static int hf_nas_eps_emm_ebi0 = -1;
 static int hf_nas_eps_emm_ebi1 = -1;
 static int hf_nas_eps_emm_ebi2 = -1;
@@ -1025,10 +1026,14 @@ static guint16
 de_emm_nas_ksi_and_seq_no(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
 {
        guint32 curr_offset;
+       int bit_offset;
 
        curr_offset = offset;
+       bit_offset = curr_offset<<3;
 
-       proto_tree_add_text(tree, tvb, curr_offset, 1 , "KSI and sequence number");
+       proto_tree_add_bits_item(tree, hf_nas_eps_emm_nas_key_set_id, tvb, bit_offset, 3, FALSE);
+       bit_offset += 3;
+       proto_tree_add_bits_item(tree, hf_nas_eps_seq_no_short, tvb, bit_offset, 5, FALSE);
        curr_offset++;
 
        return(curr_offset - offset);
@@ -2007,8 +2012,9 @@ de_esm_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gch
        curr_offset = offset;
 
        proto_tree_add_item(tree, hf_nas_eps_esm_cause, tvb, curr_offset, 1, FALSE);
+       curr_offset++;
 
-       return(len);
+       return(curr_offset - offset);
 }
 /*
  * 9.9.4.5 ESM information transfer flag 
@@ -3452,7 +3458,7 @@ nas_esm_bearer_res_mod_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guin
        /* 5B   Required traffic flow QoS       EPS quality of service 9.9.4.3  O       TLV     3-11 */
        ELEM_OPT_TLV( 0x5B , NAS_PDU_TYPE_ESM, DE_ESM_EPS_QOS , " - Required traffic flow QoS" );
        /* 58   ESM cause       ESM cause 9.9.4.4       O       TV      2 */
-       ELEM_OPT_TLV( 0x58 , NAS_PDU_TYPE_ESM, DE_ESM_CAUSE , "" );
+       ELEM_OPT_TV( 0x58 , NAS_PDU_TYPE_ESM, DE_ESM_CAUSE , "" );
        /* 27   Protocol configuration options  Protocol configuration options 9.9.4.11 O       TLV     3-253  */
        ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT , "" );
 
@@ -4051,7 +4057,7 @@ dissect_nas_eps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
        }else{
                /* SERVICE REQUEST (12)  is not a plain NAS message treat separately */
                if (security_header_type == 12){
-                       nas_emm_service_req(tvb, tree, offset, len-offset);
+                       nas_emm_service_req(tvb, nas_eps_tree, offset, len-offset);
                        return;
                }
                /* Message authentication code */
@@ -4139,6 +4145,11 @@ void proto_register_nas_eps(void) {
                FT_UINT8,BASE_DEC, NULL, 0x0,
                NULL, HFILL }
        },
+       { &hf_nas_eps_seq_no_short,
+               { "Sequence number (short)","nas_eps.seq_no_short",
+               FT_UINT8,BASE_DEC, NULL, 0x0,
+               NULL, HFILL }
+       },
        { &hf_nas_eps_emm_ebi0,
                { "EBI(0) spare","nas_eps.emm.ebi0",
                FT_BOOLEAN, 8, NULL, 0x01,
@@ -4330,8 +4341,8 @@ void proto_register_nas_eps(void) {
                NULL, HFILL }
        },
        { &hf_nas_eps_emm_short_mac,
-               { "Short MAC value","nas_eps.emm.short_mac",
-               FT_BYTES, BASE_NONE, NULL, 0x0,
+               { "Message authentication code (short)","nas_eps.emm.short_mac",
+               FT_UINT16, BASE_HEX, NULL, 0x0,
                NULL, HFILL }
        },
        { &hf_nas_eps_emm_tai_tol,
index 4107778f14bcd9037d046ebd530f1cc63a3cdf44..f8db495b84811b6ac2fa41923a42a7183df989b8 100644 (file)
@@ -90,9 +90,11 @@ static int hf_rlc_lte_context_pdu_length = -1;
 static int hf_rlc_lte_context_um_sn_length = -1;
 
 /* Transparent mode fields */
+static int hf_rlc_lte_tm = -1;
 static int hf_rlc_lte_tm_data = -1;
 
 /* Unacknowledged mode fields */
+static int hf_rlc_lte_um = -1;
 static int hf_rlc_lte_um_header = -1;
 static int hf_rlc_lte_um_fi = -1;
 static int hf_rlc_lte_um_fixed_e = -1;
@@ -108,6 +110,7 @@ static int hf_rlc_lte_extension_padding = -1;
 
 
 /* Acknowledged mode fields */
+static int hf_rlc_lte_am = -1;
 static int hf_rlc_lte_am_header = -1;
 static int hf_rlc_lte_am_data_control = -1;
 static int hf_rlc_lte_am_rf = -1;
@@ -1009,7 +1012,12 @@ static void checkChannelRepeatedNACKInfo(packet_info *pinfo,
     for (i=0; i < p_channel_status->noOfNACKs; i++) {
         for (j=0; j < MIN(tap_info->noOfNACKs, MAX_NACKs); j++) {
             if (tap_info->NACKs[j] == p_channel_status->NACKs[i]) {
-                repeatedNACKs[noOfNACKsRepeated++] = p_channel_status->NACKs[i];
+                /* Don't add the same repeated NACK twice! */
+                if ((noOfNACKsRepeated == 0) ||
+                    (repeatedNACKs[noOfNACKsRepeated-1] != p_channel_status->NACKs[i])) {
+
+                    repeatedNACKs[noOfNACKsRepeated++] = p_channel_status->NACKs[i];
+                }
             }
         }
     }
@@ -1050,6 +1058,12 @@ static void dissect_rlc_lte_tm(tvbuff_t *tvb, packet_info *pinfo,
                                proto_item *top_ti _U_)
 {
     proto_item *raw_tm_ti;
+    proto_item *tm_ti;
+
+    /* Create hidden TM root */
+    tm_ti = proto_tree_add_string_format(tree, hf_rlc_lte_tm,
+                                         tvb, offset, 0, "", "UM");
+    PROTO_ITEM_SET_HIDDEN(tm_ti);
 
     /* Remaining bytes are all data */
     raw_tm_ti = proto_tree_add_item(tree, hf_rlc_lte_tm_data, tvb, offset, -1, FALSE);
@@ -1118,17 +1132,21 @@ static void dissect_rlc_lte_um(tvbuff_t *tvb, packet_info *pinfo,
     guint64 fixed_extension;
     guint64 sn;
     gint    start_offset = offset;
+    proto_item *um_ti;
     proto_tree *um_header_tree;
     proto_item *um_header_ti;
     gboolean is_truncated;
     proto_item *truncated_ti;
 
+    /* Hidden UM root */
+    um_ti = proto_tree_add_string_format(tree, hf_rlc_lte_um,
+                                         tvb, offset, 0, "", "UM");
+    PROTO_ITEM_SET_HIDDEN(um_ti);
+
     /* Add UM header subtree */
-    um_header_ti = proto_tree_add_string_format(tree,
-                                                hf_rlc_lte_um_header,
+    um_header_ti = proto_tree_add_string_format(tree, hf_rlc_lte_um_header,
                                                 tvb, offset, 0,
-                                                "",
-                                                "UM header");
+                                                "", "UM header");
     um_header_tree = proto_item_add_subtree(um_header_ti,
                                             ett_rlc_lte_um_header);
 
@@ -1434,6 +1452,7 @@ static void dissect_rlc_lte_am(tvbuff_t *tvb, packet_info *pinfo,
     guint8 framing_info;
     gboolean first_includes_start;
     gboolean last_includes_end;
+    proto_item *am_ti;
     proto_tree *am_header_tree;
     proto_item *am_header_ti;
     gint   start_offset = offset;
@@ -1441,12 +1460,15 @@ static void dissect_rlc_lte_am(tvbuff_t *tvb, packet_info *pinfo,
     gboolean is_truncated;
     proto_item *truncated_ti;
 
+    /* Hidden AM root */
+    am_ti = proto_tree_add_string_format(tree, hf_rlc_lte_am,
+                                         tvb, offset, 0, "", "AM");
+    PROTO_ITEM_SET_HIDDEN(am_ti);
+
     /* Add AM header subtree */
-    am_header_ti = proto_tree_add_string_format(tree,
-                                                hf_rlc_lte_am_header,
+    am_header_ti = proto_tree_add_string_format(tree, hf_rlc_lte_am_header,
                                                 tvb, offset, 0,
-                                                "",
-                                                "AM header");
+                                                "", "AM header");
     am_header_tree = proto_item_add_subtree(am_header_ti,
                                             ett_rlc_lte_am_header);
 
@@ -1976,6 +1998,12 @@ void proto_register_rlc_lte(void)
 
 
         /* Transparent mode fields */
+        { &hf_rlc_lte_tm,
+            { "TM",
+              "rlc-lte.tm", FT_STRING, BASE_NONE, NULL, 0x0,
+              "Transparent Mode", HFILL
+            }
+        },
         { &hf_rlc_lte_tm_data,
             { "TM Data",
               "rlc-lte.tm.data", FT_BYTES, BASE_NONE, 0, 0x0,
@@ -1984,6 +2012,12 @@ void proto_register_rlc_lte(void)
         },
 
         /* Unacknowledged mode fields */
+        { &hf_rlc_lte_um,
+            { "UM",
+              "rlc-lte.um", FT_STRING, BASE_NONE, NULL, 0x0,
+              "Unackowledged Mode", HFILL
+            }
+        },
         { &hf_rlc_lte_um_header,
             { "UM Header",
               "rlc-lte.um.header", FT_STRING, BASE_NONE, NULL, 0x0,
@@ -2047,7 +2081,12 @@ void proto_register_rlc_lte(void)
             }
         },
 
-
+        { &hf_rlc_lte_am,
+            { "AM",
+              "rlc-lte.am", FT_STRING, BASE_NONE, NULL, 0x0,
+              "Ackowledged Mode", HFILL
+            }
+        },
         { &hf_rlc_lte_am_header,
             { "AM Header",
               "rlc-lte.am.header", FT_STRING, BASE_NONE, NULL, 0x0,
index 9b457ee7ce9a6cc576f8b4c125b5ea5a93682bae..3e5a7a97f68eb055e2c8f91dd874a7dad62d30c3 100644 (file)
  * Oct 21, 2009: add support for RFC4328, new G.709 traffic parameters,
  * update gpid, switching and encoding type values to actual IANA numbers.
  * (FF) <francesco.fondelli[AT]gmail.com>
+ *
+ * Gen 20, 2010: add support for ERROR_STRING IF_ID TLV (see RFC 4783)
+ * (FF) <francesco.fondelli[AT]gmail.com>
+ *
+ * Feb 12, 2010: add support for generalized label interpretation: SUKLM
+ * format for SONET/SDH label (RFC 4606), t3t2t1 format for G.709 ODUk label 
+ * (RFC 4328), G.694 format for lambda label (draft-ietf-ccamp-gmpls-g-694-lamb
+ * da-labels-05).  Add related user preference option. 
+ * (FF) <francesco.fondelli[AT]gmail.com> 
  */
 
 
@@ -272,6 +281,21 @@ static gint ett_treelist[TT_MAX];
 /* Should we dissect bundle messages? */
 static gboolean rsvp_bundle_dissect = TRUE;
 
+/* FF: How should we dissect generalized label? */
+static enum_val_t rsvp_generalized_label_options[] = {
+    /* see RFC 3471 Section 3.2.1.2 */
+    { "data", "data (no interpretation)", 1 },
+    /* see RFC 4606 Section 3 */
+    { "SUKLM", "SONET/SDH (\"S, U, K, L, M\" scheme)", 2 },
+    /* see I-D draft-ietf-ccamp-gmpls-g-694-lambda-labels-05 */
+    { "G694", "Wavelength Label (G.694 frequency grid)", 3 },
+    /* see RFC 4328 Section 4.1 */
+    { "G709", "ODUk Label", 4 },
+    { NULL, NULL, 0 }
+};
+
+static guint rsvp_generalized_label_option = 1;
+
 /*
  * RSVP message types.
  * See
@@ -1679,7 +1703,6 @@ dissect_rsvp_ifid_tlv (proto_tree *ti, proto_tree *rsvp_object_tree,
     guint     tlv_len;
     const char *ifindex_name;
     proto_tree *rsvp_ifid_subtree, *ti2;
-    int       offset2 = offset + 4;
 
     for (tlv_off = 0; tlv_off < obj_length - 12; ) {
        tlv_type = tvb_get_ntohs(tvb, offset+tlv_off);
@@ -1690,6 +1713,7 @@ dissect_rsvp_ifid_tlv (proto_tree *ti, proto_tree *rsvp_object_tree,
                "Invalid length (0)");
            return;
        }
+
        switch(tlv_type) {
        case 1:
            ti2 = proto_tree_add_text(rsvp_object_tree, tvb,
@@ -1742,12 +1766,48 @@ dissect_rsvp_ifid_tlv (proto_tree *ti, proto_tree *rsvp_object_tree,
                                   tvb_get_ntohl(tvb, offset+tlv_off+8));
            break;
 
-       default:
-           proto_tree_add_text(rsvp_object_tree, tvb, offset2+4, 4,
-                               "Logical interface: %u",
-                               tvb_get_ntohl(tvb, offset2+4));
-       }
-       tlv_off += tlv_len;
+        case 516:
+            /* FF: ERROR_STRING TLV, RFC 4783 */
+            ti2 = 
+              proto_tree_add_text(rsvp_object_tree, 
+                                  tvb, offset + tlv_off, 
+                                  tlv_len,
+                                  "ERROR_STRING TLV - %s",
+                                  tvb_format_text(tvb, offset + tlv_off + 4,
+                                                  tlv_len - 4));
+            rsvp_ifid_subtree = proto_item_add_subtree(ti2, subtree_type);
+            proto_tree_add_text(rsvp_ifid_subtree, tvb, offset + tlv_off, 2,
+                                "Type: 516 (ERROR_STRING)");
+            proto_tree_add_text(rsvp_ifid_subtree, 
+                                tvb, offset + tlv_off + 2, 2,
+                                "Length: %u",
+                                tvb_get_ntohs(tvb, offset + tlv_off + 2));
+            proto_tree_add_text(rsvp_ifid_subtree, tvb, offset + tlv_off + 4, 
+                                tlv_len - 4,
+                                "Error String: %s",
+                                tvb_format_text(tvb, offset + tlv_off + 4,
+                                                tlv_len - 4));
+            break;
+
+        default:
+            /* FF: not yet known TLVs are displayed as raw data */
+            ti2 = proto_tree_add_text(rsvp_object_tree, 
+                                      tvb, offset + tlv_off, 
+                                      tlv_len,
+                                      "Unknown TLV (%u)", tlv_type);
+            rsvp_ifid_subtree = proto_item_add_subtree(ti2, subtree_type);
+            proto_tree_add_text(rsvp_ifid_subtree, tvb, offset + tlv_off, 2,
+                                "Type: %u (Unknown)", tlv_type);
+            proto_tree_add_text(rsvp_ifid_subtree, 
+                                tvb, offset + tlv_off + 2, 2,
+                                "Length: %u",
+                                tvb_get_ntohs(tvb, offset + tlv_off + 2));
+            proto_tree_add_text(rsvp_ifid_subtree, tvb, offset + tlv_off + 4, 
+                                tlv_len - 4,
+                                "Data (%d bytes)", tlv_len - 4);
+            break;
+        }
+        tlv_off += tlv_len;
     }
 }
 
@@ -3291,9 +3351,151 @@ dissect_rsvp_label_request (proto_item *ti, proto_tree *rsvp_object_tree,
     }
 }
 
-/*------------------------------------------------------------------------------
+/*-----------------------------------------------------------------------------
  * LABEL
- *------------------------------------------------------------------------------*/
+ *---------------------------------------------------------------------------*/
+
+/* 
+   FF: G.694 lambda label, see draft-ietf-ccamp-gmpls-g-694-lambda-labels-05
+
+    0                   1                   2                   3
+    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |Grid | C.S   |    Reserved     |              n                |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+static void
+dissect_glabel_lambda(proto_tree *ti _U_, proto_tree *rsvp_object_tree,
+                      tvbuff_t *tvb,
+                      int offset)
+{
+    float freq = 0.0;
+    guint32 wavelength = 0;
+    float cs_thz = 0.0;
+
+    guint8 grid = ((tvb_get_guint8(tvb, offset) & 0xE0) >> 5);
+    guint8 cs = ((tvb_get_guint8(tvb, offset) & 0x1E) >> 1);
+    gint16 n = tvb_get_ntohs(tvb, offset + 2);
+
+    if (grid == 1) {
+      /* DWDM grid: Frequency (THz) = 193.1 THz + n * channel spacing (THz) */
+      cs_thz = 
+        cs == 1 ? 0.1 : 
+        cs == 2 ? 0.05 :
+        cs == 3 ? 0.025 :
+        cs == 4 ? 0.0125 : 
+        0.0;
+      freq = 193.1 + (n * cs_thz);
+      proto_tree_add_text(rsvp_object_tree, tvb, offset, 4,
+                          "Wavelength Label: "
+                          "grid=%s, "
+                          "channel spacing=%s, "
+                          "n=%d, "
+                          "freq=%.2fTHz",
+                          /* grid */
+                          grid == 1 ? "DWDM" : 
+                          grid == 2 ? "CWDM" : 
+                          "unknown",
+                          /* channel spacing */
+                          cs == 1 ? "100GHz" : 
+                          cs == 2 ? "50GHz" :
+                          cs == 3 ? "25GHz" :
+                          cs == 4 ? "12.5GHz" : 
+                          "unknown",
+                          /* n */
+                          n,
+                          /* frequency */
+                          freq);
+    } else if (grid == 2) {
+      /* CWDM grid: Wavelength (nm) = 1471 nm + n * 20 nm  */
+      wavelength = 1471 + (n * 20);
+      proto_tree_add_text(rsvp_object_tree, tvb, offset, 4,
+                          "Wavelength Label: "
+                          "grid=%s, "
+                          "channel spacing=%s, "
+                          "n=%d, "
+                          "wavelength=%unm",
+                          /* grid */
+                          grid == 1 ? "DWDM" : 
+                          grid == 2 ? "CWDM" : 
+                          "unknown",
+                          /* channel spacing */
+                          cs == 1 ? "20nm" : 
+                          "unknown",
+                          /* n */
+                          n,
+                          /* wavelength */
+                          wavelength);
+    } else {
+      /* unknown grid: */
+      proto_tree_add_text(rsvp_object_tree, tvb, offset, 4,
+                          "Wavelength Label: "
+                          "grid=%u, "
+                          "channel spacing=%u, "
+                          "n=%d",
+                          grid, cs, n);
+    }
+    return;
+}
+
+/* 
+   FF: SONET/SDH label, see RFC 4606
+
+    0                   1                   2                   3
+    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |               S               |   U   |   K   |   L   |   M   |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+*/
+static void
+dissect_glabel_sdh(proto_tree *ti _U_, proto_tree *rsvp_object_tree,
+                   tvbuff_t *tvb,
+                   int offset)
+{
+    guint16 s = tvb_get_ntohs(tvb, offset);
+    guint8 u = ((tvb_get_guint8(tvb, offset + 2) & 0xF0) >> 4);
+    guint8 k = ((tvb_get_guint8(tvb, offset + 2) & 0x0F) >> 0);
+    guint8 l = ((tvb_get_guint8(tvb, offset + 3) & 0xF0) >> 4);
+    guint8 m = ((tvb_get_guint8(tvb, offset + 3) & 0x0F) >> 0);
+
+    proto_tree_add_text(rsvp_object_tree, tvb, offset, 4,
+                        "SONET/SDH Label: "
+                        "S=%u, "
+                        "U=%u, "
+                        "K=%u, "
+                        "L=%u, "
+                        "M=%u",
+                        s, u, k, l, m);
+}
+
+/* 
+    FF: G.709 label (aka ODUk label), see RFC 4328
+
+     0                   1                   2                   3
+     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    |                   Reserved                |     t3    | t2  |t1
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+     
+*/
+static void
+dissect_glabel_g709(proto_tree *ti _U_, proto_tree *rsvp_object_tree,
+                   tvbuff_t *tvb,
+                   int offset)
+{
+    guint8 t2 = ((tvb_get_guint8(tvb, offset + 3) & 0x0E) >> 1);
+    guint8 t1 = ((tvb_get_guint8(tvb, offset + 3) & 0x01) >> 0);
+
+    guint8 t3 = ((tvb_get_guint8(tvb, offset + 2) & 0x03) << 4);
+    t3 |= ((tvb_get_guint8(tvb, offset + 3) & 0xF0) >> 4);
+
+    proto_tree_add_text(rsvp_object_tree, tvb, offset, 4,
+                        "G.709 ODUk Label: "
+                        "t3=%u, "
+                        "t2=%u, "
+                        "t1=%u",
+                        t3, t2, t1);
+}
+
 static void
 dissect_rsvp_label (proto_tree *ti, proto_tree *rsvp_object_tree,
                    tvbuff_t *tvb,
@@ -3323,22 +3525,30 @@ dissect_rsvp_label (proto_tree *ti, proto_tree *rsvp_object_tree,
     case 2:
        proto_tree_add_text(rsvp_object_tree, tvb, offset+3, 1,
                            "C-type: 2 (Generalized Label)");
-       proto_item_set_text(ti, "%s: Generalized: ", name);
-       for (i = 0; i < mylen; i += 4) {
+       if (rsvp_generalized_label_option == 1) {
+         /* FF: no generalized label interpretation */
+         proto_item_set_text(ti, "%s: Generalized: ", name);
+         for (i = 0; i < mylen; i += 4) {
            proto_tree_add_text(rsvp_object_tree, tvb, offset2+i, 4,
                                "Generalized Label: %u (0x%x)",
                                tvb_get_ntohl(tvb, offset2+i),
                                tvb_get_ntohl(tvb, offset2+i));
            if (i < 16) {
-               proto_item_append_text(ti, "0x%x%s",
-                                      tvb_get_ntohl(tvb, offset2+i),
-                                      i+4<mylen?", ":"");
+             proto_item_append_text(ti, "0x%x%s",
+                                    tvb_get_ntohl(tvb, offset2+i),
+                                    i+4<mylen?", ":"");
            } else if (i == 16) {
-               proto_item_append_text(ti, "...");
+             proto_item_append_text(ti, "...");
            }
+         }
+       } else if (rsvp_generalized_label_option == 2) {
+         dissect_glabel_sdh(ti, rsvp_object_tree, tvb, offset2);
+       } else if (rsvp_generalized_label_option == 4) {
+         dissect_glabel_g709(ti, rsvp_object_tree, tvb, offset2);
+       } else if (rsvp_generalized_label_option == 3) {
+         dissect_glabel_lambda(ti, rsvp_object_tree, tvb, offset2);
        }
        break;
-
     default:
        proto_tree_add_text(rsvp_object_tree, tvb, offset+3, 1,
                            "C-type: Unknown (%u)",
@@ -5704,6 +5914,13 @@ register_rsvp_prefs (void)
        "Dissect sub-messages in BUNDLE message",
        "Specifies whether Wireshark should decode and display sub-messages within BUNDLE messages",
        &rsvp_bundle_dissect);
+    prefs_register_enum_preference(
+       rsvp_module, "generalized_label_options",
+       "Dissect generalized labels as",
+       "Specifies how Wireshark should dissect generalized labels",
+       (gint *)&rsvp_generalized_label_option,
+       rsvp_generalized_label_options,
+       FALSE);
 }
 
 void
index 151dc173571cebd3f432e156c406d2f472cd1e75..5dbbfe0588196b6fdae10dd6762127903353d642 100644 (file)
@@ -1408,8 +1408,10 @@ dissect_rtcp_app( tvbuff_t *tvb,packet_info *pinfo, int offset, proto_tree *tree
        else
        {
                tvbuff_t *next_tvb;             /* tvb to pass to subdissector */
-               /* tvb == data past app name to the end of the current rtcp segment*/
-               next_tvb = tvb_new_subset(tvb, offset+4, app_length-8, app_length-8);
+               /* tvb == Pass the entire APP payload so the subdissector can have access to the
+                * entire data set
+                */
+               next_tvb = tvb_new_subset(tvb, offset-8, app_length+4, app_length+4);
                /* look for registered sub-dissectors */
                if (dissector_try_string(rtcp_dissector_table, ascii_name, next_tvb, pinfo, tree)) {
                        /* found subdissector - return tvb_length */
index c8b69c23849622135fa2aeb59d31b5964cc45ff5..23db2f709a2531eb183508a8994fbdb6540ad087 100644 (file)
@@ -193,6 +193,7 @@ static int hf_snmp_engineid_enterprise = -1;
 static int hf_snmp_engineid_format = -1;
 static int hf_snmp_engineid_ipv4 = -1;
 static int hf_snmp_engineid_ipv6 = -1;
+static int hf_snmp_engineid_cisco_type = -1;
 static int hf_snmp_engineid_mac = -1;
 static int hf_snmp_engineid_text = -1;
 static int hf_snmp_engineid_time = -1;
@@ -295,7 +296,7 @@ static int hf_snmp_priority = -1;                 /* INTEGER_M1_2147483647 */
 static int hf_snmp_operation = -1;                /* T_operation */
 
 /*--- End of included file: packet-snmp-hf.c ---*/
-#line 221 "packet-snmp-template.c"
+#line 222 "packet-snmp-template.c"
 
 static int hf_smux_version = -1;
 static int hf_smux_pdutype = -1;
@@ -338,7 +339,7 @@ static gint ett_snmp_SimpleOpen_U = -1;
 static gint ett_snmp_RReqPDU_U = -1;
 
 /*--- End of included file: packet-snmp-ett.c ---*/
-#line 240 "packet-snmp-template.c"
+#line 241 "packet-snmp-template.c"
 
 static const true_false_string auth_flags = {
        "OK",
@@ -1028,6 +1029,15 @@ static const value_string snmp_engineid_format_vals[] = {
        { 0,    NULL }
 };
 
+#define SNMP_ENGINEID_CISCO_AGENT 0x00
+#define SNMP_ENGINEID_CISCO_MANAGER 0x01
+
+static const value_string snmp_engineid_cisco_type_vals[] = {
+       { SNMP_ENGINEID_CISCO_AGENT,    "Agent" },
+       { SNMP_ENGINEID_CISCO_MANAGER,  "Manager" },
+       { 0,    NULL }
+};
+
 /*
  * SNMP Engine ID dissection according to RFC 3411 (SnmpEngineID TC)
  * or historic RFC 1910 (AgentID)
@@ -1096,6 +1106,12 @@ int dissect_snmp_engineid(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
        }
        break;
       case SNMP_ENGINEID_FORMAT_MACADDRESS:
+       /* See: https://supportforums.cisco.com/message/3010617#3010617 for details. */
+       if ((enterpriseid==9)&&(len_remain==7)) {
+         proto_tree_add_item(tree, hf_snmp_engineid_cisco_type, tvb, offset, 1, FALSE);
+         offset++;
+         len_remain--;
+       }
        /* 6-byte MAC address */
        if (len_remain==6) {
          proto_tree_add_item(tree, hf_snmp_engineid_mac, tvb, offset, 6, FALSE);
@@ -2686,7 +2702,7 @@ static void dissect_SMUX_PDUs_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pro
 
 
 /*--- End of included file: packet-snmp-fn.c ---*/
-#line 1466 "packet-snmp-template.c"
+#line 1482 "packet-snmp-template.c"
 
 
 guint
@@ -3227,6 +3243,9 @@ void proto_register_snmp(void) {
                { &hf_snmp_engineid_ipv6, {
                    "Engine ID Data: IPv6 address", "snmp.engineid.ipv6", FT_IPv6, BASE_NONE,
                    NULL, 0, NULL, HFILL }},
+               { &hf_snmp_engineid_cisco_type, {
+                   "Engine ID Data: Cisco type", "snmp.engineid.cisco.type", FT_UINT8, BASE_NONE,
+                   VALS(snmp_engineid_cisco_type_vals), 0, NULL, HFILL }},
                { &hf_snmp_engineid_mac, {
                    "Engine ID Data: MAC address", "snmp.engineid.mac", FT_ETHER, BASE_NONE,
                    NULL, 0, NULL, HFILL }},
@@ -3534,7 +3553,7 @@ void proto_register_snmp(void) {
         "snmp.T_operation", HFILL }},
 
 /*--- End of included file: packet-snmp-hfarr.c ---*/
-#line 2049 "packet-snmp-template.c"
+#line 2068 "packet-snmp-template.c"
   };
 
   /* List of subtrees */
@@ -3574,7 +3593,7 @@ void proto_register_snmp(void) {
     &ett_snmp_RReqPDU_U,
 
 /*--- End of included file: packet-snmp-ettarr.c ---*/
-#line 2065 "packet-snmp-template.c"
+#line 2084 "packet-snmp-template.c"
   };
   module_t *snmp_module;
 
index 4cb2e2e9b07bf3307f6047be14217ea887269d31..628f3ce56a561f3b19ca37bfd4dbba97f2af243c 100644 (file)
@@ -1,6 +1,6 @@
 PRIVATE ENTERPRISE NUMBERS
 
-(last updated 2010-02-28)
+(last updated 2010-03-07)
 
 SMI Network Management Private Enterprise Codes:
 
@@ -5274,9 +5274,9 @@ Decimal
     Dennis Vane
       70372.2235&compuserve.com
 1315
-  MG SOFT Co.
-    Andrej Duh
-      andrej&mg-soft.si
+  MG-SOFT d.o.o.
+    Matjaz Vrecko
+      matjaz&mg-soft.si
 1316
   Plessey Tellumat SA
     Eddie Theart
@@ -21576,7 +21576,7 @@ Decimal
 5401
   Master Soft
     Alberto Pastore
-      pastore&mastersoft-italia.com
+      alberto&pastore.cc
 5402
   IDF
     Yaron Zehavi
@@ -50103,8 +50103,8 @@ Decimal
       jeff&scrippscollege.edu
 12637
   Shazam Entertainments ltd
-    Ian Stanley
-      ian.stanley&shazamteam.com
+    Tony Miller
+      tony.miller&shazamteam.com
 12638
   Siennax
     Mark Ruijter
@@ -140875,6 +140875,219 @@ Decentralization / Helenic Public Administra
   PJRC.COM, LLC
     Paul Stoffregen
       paul&pjrc.com
+35323
+  Kliniken Nordoberpfalz AG
+    Robert Dworschak
+      iana&kliniken-nordoberpfalz.ag
+35324
+  Edutel B.V.
+    Dave Hellings
+      noc&edutel.nl
+35325
+  Universität Witten/Herdecke
+    Christoph Peus
+      postmaster&uni-wh.de
+35326
+  University of Music and Drama Hannover
+    Frank Meister
+      frank.meister&hmt-hannover.de
+35327
+  SMABTP
+    Jean-Victor Balin
+      jean-victor_balin&smabtp.fr
+35328
+  BlueCrest Capital Management
+    Stephen Gibbs
+      stephen.gibbs&bluecrestcapital.com
+35329
+  S. Walter Packaging
+    David Tenney
+      dtenney&swalter.com
+35330
+  RRsat Global Communications Network 
+    Oded shor
+      oded&rrsat.com
+35331
+  Faculdade Natalense para o Desenvolvimento do Rio Grande do Norte
+    Lineu Paiva
+      lineu&farn.br
+35332
+  Alticast Corp.\r
+
+    Younggi Hong
+      nari&alticast.com
+35333
+  pk0
+    Shuja Khan
+      shuja&pk0.net
+35334
+  Lamda Networks
+    Uri Rotshtein
+      uri&lamdasys.com
+35335
+  Alion Science and Technology
+    Matt Jacobs
+      mjacobs&alionscience.com
+35336
+  Lime Labs, LLC
+    Jesse Callaway
+      snmp&limelabs.com
+35337
+  Primitives.lv
+    Romans Krjukovs
+      romans.krjukovs&gmail.com
+35338
+  IMFirewall Software
+    Bruce Geng
+      Bruce_Geng&imfirewall.us
+35339
+  Yambay Technologies Pty Ltd
+    Paul Vowles
+      paulv&yambay.com
+35340
+  dustOS
+    Mathias Kuester
+      abstract&dustos.org
+35341
+  Bundesamt f. Eich- und Vermessungswesen
+    Eduard Täubl
+      post.master&bev.gv.at
+35342
+  American HomePatient
+    Dave Morris
+      ahp-pki&ahom.com
+35343
+  Cairo University Hospitals
+    El-Sayed Abdallah Ayoub
+      drsayed&gmail.com
+35344
+  Thales Defence Deutschland GmbH
+    Axel Offt
+      axel.offt&de.thalesgroup.com
+35345
+  SRC d.o.o.
+    Benjamin Orazem
+      beno.orazem&src.si
+35346
+  Northern Ireland Housing Executive
+    Mark McNeilly
+      mark.mcneilly&bt.com
+35347
+  WuHan RenTang Information Limited
+    SunQunYing
+      whrtqa&qq.com
+35348
+  RTQA Medical Solution Limited
+    Zhang Norman
+      rtqa&rtqa.com
+35349
+  Takahashi Yusuke
+    Takahashi Yusuke
+      taka.yuu8917&gmail.com
+35350
+  DS-Department
+    Dmitrij V Sotarev (DvS)
+      dvs&vtkp.ru
+35351
+  Silver Sky Soft
+    Kiran Kumar
+      contact&silverskysoft.com
+35352
+  A&R Carton
+    Jörn Ehlich
+      joern.ehlich&ar-carton.com
+35353
+  Entry Point
+    Maciej Dobrzanski
+      reg.iana&entrypoint.pl
+35354
+  Nintendo of America Inc.
+    Bryan Irvine
+      bryair01&noa.nintendo.com
+35355
+  Intelliresponse Systems Inc
+    Jon Barnett
+      jon.barnett&intelliresponse.com
+35356
+  Telezygology, inc.
+    Mark Bisaillon
+      M.Bisaillon&tz.net
+35357
+  Garden State Health Systems
+    Peter Bates
+      pbates&gshsys.com
+35358
+  Syntervision
+    Greg Elmore
+      greg.elmore&syntervision.com
+35359
+  Fensom System S.L.
+    Francisco J. Lazur
+      fjlazur&fensomsystem.com
+35360
+  ZODIAC Data Systems GmbH
+    Thomas Otten
+      thomas.otten&zodiacaerospace.com
+35361
+  Newtel Engineering S.r.l.
+    Diego Brocchi
+      d.brocchi&newtel-eng.com
+35362
+  Quill Training Systems Ltd
+    Richard Dawson
+      quilltraining&btconnect.com
+35363
+  University of Huddersfield
+    Peter Hutchison
+      p.j.hutchison&hud.ac.uk
+35364
+  Seattle Children's Hospital
+    Mike Kindle
+      Mike.Kindle&seattlechildrens.org
+35365
+  Schroff Technologies International, Inc
+    David Therrien
+      david.therrien&schrofftech.com
+35366
+  ChengDu OuRuan Corp., Ltd.
+    Yu Su
+      suyu.oursoft&gmail.com
+35367
+  ITL, LLC
+    Roberto Schipp
+      rschipp&itl-llc.com
+35368
+  doubango
+    Diop Mamadou
+      diopmamadou&yahoo.fr
+35369
+  3iMedia GmbH
+    Frank Schmidt
+      swyx&3imedia.de
+35370
+  natnat inc.
+    Aldwin Panganiban
+      aldwin.p&gmail.com
+35371
+  Infocore.Inc
+    Hai Wang
+      wanghai&infocore.cn
+35372
+  Daniel Clark
+    Daniel Clark
+      clarkddc&gmail.com
+35373
+  Slovak Telekom a.s.
+    Martin Mitro
+      martin.mitro&st.sk
+35374
+  Universidade Federal do Espirito Santo
+    Hans-Jorg Andreas Schneebeli
+      diretor.geral&npd.ufes.br
+35375
+  UAB "Mano numeris"
+    Ričardas Pocius
+      ricardas.pocius&numeris.lt
 
 
 End of Document
index 2cfcbe2879d0bae438fd5f232155567404915c18..ca67188b796d10520313da613e789d88d0b71b0d 100644 (file)
@@ -455,6 +455,7 @@ ftype_can_lt
 ftype_can_matches
 ftype_can_ne
 ftype_can_slice
+ftype_name
 ftype_pretty_name
 funnel_get_funnel_ops
 funnel_register_all_menus
index 6d8854f2fac966d222dad40d6f585b632c1e9be7..d9a5b5302288afa1e22d843090805195ffd958e7 100644 (file)
@@ -495,6 +495,11 @@ static void unregister_mibs(void) {
        /* smiExit(); */
 }
 
+static void restart_needed_warning(void) {
+       if (oids_init_done)
+               report_failure("Wireshark needs to be restarted for these changes to take effect");
+}
+
 static void register_mibs() {
        SmiModule *smiModule;
        SmiNode *smiNode;
@@ -524,7 +529,7 @@ static void register_mibs() {
                                                          smi_mod_copy_cb,
                                                          NULL,
                                                          smi_mod_free_cb,
-                                                         NULL,
+                                                         restart_needed_warning,
                                                          smi_fields);
 
        smi_paths_uat = uat_new("SMI Paths",
@@ -538,7 +543,7 @@ static void register_mibs() {
                                                          smi_mod_copy_cb,
                                                          NULL,
                                                          smi_mod_free_cb,
-                                                         NULL,
+                                                         restart_needed_warning,
                                                          smi_paths_fields);
 
 
index 11e380dbd343a25fda26468ac9dbb82e5f317c5a..b188da7cccc7e6cd4800edcc45d43a31011fd9db 100644 (file)
@@ -93,6 +93,11 @@ diameterstat_packet(void *pdiameter, packet_info *pinfo, epan_dissect_t *edt _U_
        diameterstat_t *fs=(diameterstat_t *)pdiameter;
        int* idx = NULL;
 
+       /* Process only answers where corresponding request is found.
+        * Unpaired daimeter messages are currently not supported by statistics. 
+        * Return 0, since redraw is not needed. */
+       if(!diameter || diameter->processing_request || !diameter->req_frame)
+               return 0;
 
        idx = (int*) g_hash_table_lookup(cmd_str_hash, diameter->cmd_str);
        if (idx == NULL) {
diff --git a/manuf b/manuf
index ca9fa6bfb32ce99e05c67a4e91cdf2470fd1de0c..de61e3e339a0269cf7fc3f8abd5cd377e522f881 100644 (file)
--- a/manuf
+++ b/manuf
 00:0A:96       MewtelTech             # MEWTEL TECHNOLOGY INC.
 00:0A:97       Sonicblue              # SONICblue, Inc.
 00:0A:98       M+FGwinner             # M+F Gwinner GmbH & Co
-00:0A:99       Dataradio              # Dataradio Inc.
+00:0A:99       CalampWire             # Calamp Wireless Networks Inc
 00:0A:9A       AiptekInte             # Aiptek International Inc
 00:0A:9B       TowaMeccs              # Towa Meccs Corporation
 00:0A:9C       ServerTech             # Server Technology, Inc.
 00:50:C2:C1:E0:00/36   Peperoni-L             # Peperoni-Light
 00:50:C2:C1:F0:00/36   Specialist             # Specialist Electronics Services Ltd
 00:50:C2:C2:00:00/36   SrcCompute             # SRC Computers, LLC
-00:50:C2:C2:10:00/36   HighgatesT             # Highgates Technology
 00:50:C2:C2:20:00/36   Audient                # Audient Ltd
+00:50:C2:C2:30:00/36   VidiconLlc             # Vidicon LLC
+00:50:C2:C2:40:00/36   Qualnetics             # Qualnetics Corporation
+00:50:C2:C2:60:00/36   AustcoComm             # Austco Communication Systems Pty Ltd
+00:50:C2:C2:70:00/36   Qtechnolog             # Qtechnology A/S
+00:50:C2:C2:80:00/36   Elreha                 # ELREHA GmbH
+00:50:C2:C2:90:00/36   NewtelEngi             # Newtel Engineering S.r.l.
+00:50:C2:C2:A0:00/36   Realtime               # RealTime Systems Ltd
+00:50:C2:C2:B0:00/36   Z-App                  # Z-App Systems, Inc.
 00:50:C4       Imd
 00:50:C5       AdsTechnol             # ADS Technologies, Inc
 00:50:C6       LoopTeleco             # LOOP TELECOMMUNICATION INTERNATIONAL, INC.
 08:4E:1C       H2aLlc                 # H2A Systems, LLC
 08:76:18       VieTechnol             # ViE Technologies Sdn. Bhd.
 08:76:95       AutoIndust             # Auto Industrial Co., Ltd.
+08:9F:97       LeroyAutom             # LEROY AUTOMATION
 08:BB:CC       Ak-NordEdv             # AK-NORD EDV VERTRIEBSGES. mbH
 08:F2:F4       NetOnePart             # Net One Partners Co.,Ltd.
 08:F6:F8       GetEnginee             # GET Engineering
 0C:60:76       HonHaiPrec             # Hon Hai Precision Ind. Co.,Ltd.
 0C:7D:7C       KexiangInf             # Kexiang Information Technology Co, Ltd.
 0C:82:30       ShenzhenMa             # SHENZHEN MAGNUS TECHNOLOGIES CO.,LTD
+0C:82:6A       WuhanHuago             # Wuhan Huagong Genuine Optics Technology Co., Ltd
 0C:84:11       AOSmithWat             # A.O. Smith Water Products
 0C:A4:2A       ObTelecomE             # OB Telecom Electronic Technology Co., Ltd
 0C:C3:A7       Meritec
 0C:C9:C6       SamwinHong             # Samwin Hong Kong Limited
 0C:D5:02       Westell
 0C:D7:C2       AxiumTechn             # Axium Technologies, Inc.
+0C:DD:EF       Nokia                  # Nokia Corporation
 0C:E7:09       FoxCryptoB             # Fox Crypto B.V.
 0C:E9:36       ElimosSrl              # ELIMOS srl
 0C:EE:E6       HonHaiPrec             # Hon Hai Precision Ind. Co.,Ltd.
 10:00:D4       DEC
 10:00:E0       AppleA/UxM             # Apple A/UX                     (modified addresses for licensing)
 10:00:E8       NationalSe             # NATIONAL SEMICONDUCTOR
+10:09:0C       JanomeSewi             # Janome Sewing Machine Co., Ltd.
 10:10:B6       Mccain                 # McCain Inc
 10:18:9E       ElmoMotion             # Elmo Motion Control
 10:2D:96       Looxcie                # Looxcie Inc.
 40:15:97       ProtectAme             # Protect America, Inc.
 40:25:C2       IntelCorpo             # Intel Corporate
 40:2B:A1       SonyEricss             # Sony Ericsson Mobile Communications AB
+40:40:22       Ziv
 40:4A:03       ZyxelCommu             # ZyXEL Communications Corporation
 40:61:86       Micro-Star             # MICRO-STAR INT'L CO.,LTD
 40:8A:9A       Titeng                 # TITENG CO., Ltd.
 40:97:D1       BkElectron             # BK Electronics cc
 40:A6:A4       Passivsyst             # PassivSystems Ltd
 40:D3:2D       Apple                  # Apple, Inc
+40:D4:0E       Biodata                # Biodata Ltd
 40:EC:F8       Siemens                # Siemens AG
 40:EF:4C       FihonestCo             # Fihonest communication co.,Ltd
 40:F5:2E       LeicaMicro             # Leica Microsystems (Schweiz) AG
 44:87:FC       Elitegroup             # ELITEGROUP COMPUTER SYSTEM CO., LTD.
 44:8E:81       Vig
 44:A4:2D       TctMobile              # TCT Mobile Limited
+44:A6:89       PromaxElec             # PROMAX ELECTRONICA SA
 44:A8:C2       SewooTech              # SEWOO TECH CO., LTD
 44:C2:33       GuangzhouC             # Guangzhou Comet Technology Development Co.Ltd
 44:C9:A2       GreenwaldI             # Greenwald Industries
 4C:32:2D       TeledataNe             # TELEDATA NETWORKS
 4C:42:4C       Informatio             # Information Modes software modified addresses (not registered?)
 4C:4B:68       MobileDevi             # Mobile Device, Inc. 
+4C:54:99       HuaweiDevi             # Huawei Device Co., Ltd
+4C:5D:CD       OyFinnishE             # Oy Finnish Electric Vehicle Technologies Ltd
 4C:63:EB       Applicatio             # Application Solutions (Electronics and Vision) Ltd
 4C:9E:E4       HanyangNav             # Hanyang Navicom Co.,Ltd.
 4C:C4:52       ShangHaiTy             # Shang Hai Tyd. Electon Technology Ltd.
 58:49:BA       ChitaiElec             # Chitai Electronic Corp.
 58:4C:EE       DigitalOne             # Digital One Technologies, Limited
 58:50:E6       BestBuy                # Best Buy Corporation
+58:57:0D       DanfossSol             # Danfoss Solar Inverters
 58:6E:D6       Private
 58:94:6B       IntelCorpo             # Intel Corporate
 58:B0:35       Apple                  # Apple, Inc
 70:D5:E7       Wellcore               # Wellcore Corporation
 70:D8:80       UposSystem             # Upos System sp. z o.o.
 70:F1:A1       LiteonTech             # Liteon Technology Corporation
+70:F3:95       Usi
 74:32:56       Nt-WareSys             # NT-ware Systemprg GmbH
 74:6B:82       Movek                  # MOVEK 
 74:7E:1A       RedEmbedde             # Red Embedded Design Limited
 78:B8:1A       InterSales             # INTER SALES A/S
 78:C4:0E       H&DWireles             # H&D Wireless 
 78:DD:08       HonHaiPrec             # Hon Hai Precision Ind. Co.,Ltd. 
+78:E4:00       HonHaiPrec             # Hon Hai Precision Ind. Co.,Ltd. 
 78:E7:D1       HewlettPac             # Hewlett Packard
+7C:05:1E       Rafael                 # RAFAEL LTD.
 7C:08:D9       ShanghaiEn             # Shanghai Engineering Research Center for Broadband Technologies and Applications
 7C:14:76       AePartners             # AE Partners S.a.s
 7C:1E:B3       2nTelekomu             # 2N TELEKOMUNIKACE a.s.
 80:AD:00       CnetTechno             # CNET Technology Inc. (Probably an error, see instead 0080AD)
 80:B2:89       ForworldEl             # Forworld Electronics Ltd.
 80:BA:AC       Teleadapt              # TeleAdapt Ltd
+80:C6:3F       RemecBroad             # Remec Broadband Wireless , LLC
 80:C8:62       Openpeak               # Openpeak, Inc
+80:EE:73       Shuttle                # Shuttle Inc.
 80:F5:93       IrcoSistem             # IRCO Sistemas de Telecomunicaci�n S.A.
 84:21:41       ShenzhenGi             # Shenzhen Ginwave Technologies Ltd.
+84:2B:2B       Dell                   # Dell Inc.
 84:48:23       WoxterTech             # WOXTER TECHNOLOGY Co. Ltd
 84:90:00       Arnold&Amp             # Arnold &amp; Richter Cine Technik
 84:C7:27       Gnodal                 # Gnodal Ltd
@@ -16358,6 +16381,7 @@ A0:9A:5A        TimeDomain             # Time Domain
 A0:B9:ED       Skytap
 A0:BF:A5       Coresys
 A4:38:FC       PlasticLog             # Plastic Logic
+A4:56:1B       Mcot                   # MCOT Corporation
 A4:79:E4       Klinfo                 # KLINFO Corp
 A4:AD:00       RagsdaleTe             # Ragsdale Technology
 A4:AD:B8       VitecGroup             # Vitec Group, Camera Dynamics Ltd
@@ -16369,6 +16393,7 @@ A4:DA:3F        Bionics                # Bionics Corp.
 A4:DE:50       TotalWalth             # Total Walther GmbH
 A4:E7:E4       Connex                 # Connex GmbH
 A4:ED:4E       MotorolaMo             # Motorola Mobile Devices
+A8:5B:B0       ShenzhenDe             # Shenzhen Dehoo Technology Co.,Ltd
 A8:63:DF       Displ�ai             # DISPL�AIRE CORPORATION
 A8:70:A5       Unicomm                # UniComm Inc.
 A8:7B:39       Nokia                  # Nokia Corporation
@@ -16442,10 +16467,12 @@ C0:91:34      ProcurveNe             # ProCurve Networking by HP
 C0:9C:92       Coby
 C0:BA:E6       Applicatio             # Application Solutions (Safety and Security) Ltd
 C0:CF:A3       CreativeEl             # Creative Electronics &amp; Software, Inc.
+C0:D0:44       Sagemcom
 C0:E4:22       TexasInstr             # Texas Instruments
 C4:17:FE       HonHaiPrec             # Hon Hai Precision Ind. Co.,Ltd.
 C4:19:8B       DominionVo             # Dominion Voting Systems Corporation
 C4:1E:CE       HmiSources             # HMI Sources Ltd.
+C4:46:19       HonHaiPrec             # Hon Hai Precision Ind. Co.,Ltd. 
 C4:59:76       Fugoo
 C4:7D:4F       Cisco                  # Cisco Systems
 C4:82:3F       FujianNewl             # Fujian Newland Auto-ID Tech. Co,.Ltd.
@@ -16498,6 +16525,7 @@ D8:30:62        Apple                  # Apple, Inc
 D8:42:AC       FreecommDa             # FreeComm Data Communication Co.,Ltd.
 D8:54:3A       TexasInstr             # Texas Instruments
 D8:5D:4C       Tp-LinkTec             # TP-LINK Technologies Co.,Ltd.
+D8:75:33       Nokia                  # Nokia Corporation
 D8:AE:90       ItibiaTech             # Itibia Technologies
 D8:C3:FB       Detracom
 D8:D3:85       HewlettPac             # Hewlett Packard
@@ -16527,10 +16555,13 @@ E2:0C:0F      KingstonTe             # Kingston Technologies
 E4:1F:13       Ibm
 E4:35:93       HangzhouGo             # Hangzhou GoTo technology Co.Ltd
 E4:75:1E       GetingeSte             # Getinge Sterilization AB
+E4:7C:F9       SamsungEle             # Samsung Electronics Co., LTD
 E4:97:F0       ShanghaiVl             # Shanghai VLC Technologies Ltd. Co.
 E4:AB:46       UabSelteka             # UAB Selteka
+E4:AD:7D       SclElement             # SCL Elements
 E4:FF:DD       ElectronIn             # ELECTRON INDIA
 E8:05:6D       NortelNetw             # Nortel Networks
+E8:06:88       Apple                  # Apple Inc. 
 E8:0B:13       AkibTaiwan             # Akib Systems Taiwan, INC
 E8:3A:97       OczTechnol             # OCZ Technology Group
 E8:4E:CE       Nintendo               # Nintendo Co., Ltd.
@@ -16557,6 +16588,7 @@ EC:D0:0E        Miraerecog             # MiraeRecognition Co., Ltd.
 EC:DE:3D       LampreyNet             # Lamprey Networks, Inc.
 EC:E0:9B       SamsungEle             # Samsung electronics CO., LTD
 EC:E9:F8       GuangZhouT             # Guang Zhou TRI-SUN Electronics Technology  Co., Ltd
+EC:FE:7E       Blueradios             # BlueRadios, Inc.
 F0:24:08       TalarisSwe             # Talaris (Sweden) AB
 F0:26:4C       DrSigrist              # Dr. Sigrist AG
 F0:2F:D8       Bi2-Vision
@@ -16566,6 +16598,7 @@ F0:62:81        ProcurveNe             # ProCurve Networking by HP
 F0:68:53       Integrated             # Integrated Corporation
 F0:77:D0       Xcellen
 F0:7B:CB       HonHaiPrec             # Hon Hai Precision Ind. Co.,Ltd. 
+F0:9C:BB       Raonthink              # RaonThink Inc.
 F0:B6:EB       PoslabTech             # Poslab Technology Co., Ltd.
 F0:BC:C8       MaxidPty               # MaxID (Pty) Ltd
 F0:C2:4C       ZhejiangFe             # Zhejiang FeiYue Digital Technology Co., Ltd
@@ -16597,6 +16630,7 @@ FC:68:3E        DirectedPe             # Directed Perception, Inc
 FC:CC:E4       Ascon                  # Ascon Ltd.
 FC:CF:62       BladeNetwo             # BLADE Network Technology
 FC:E1:92       SichuanJin             # Sichuan Jinwangtong Electronic Science&Technology Co,.Ltd
+FC:E2:3F       ClayPaky               # CLAY PAKY SPA
 FC:FA:F7       ShanghaiBa             # Shanghai Baud Data Communication Co.,Ltd.
 FC:FB:FB       Cisco                  # Cisco Systems
 
diff --git a/tap-diameter-avp.c b/tap-diameter-avp.c
new file mode 100644 (file)
index 0000000..786e05d
--- /dev/null
@@ -0,0 +1,279 @@
+/* tap-diameter-avp.c
+ * Copyright 2010 Andrej Kuehnal <andrejk@freenet.de>
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+/*
+ * This TAP enables extraction of most important diameter fields in text format.
+ * - much more performance than -T text and -T pdml
+ * - more powerfull than -T field and -z proto,colinfo
+ * - exacltly one text line per diameter message
+ * - multiple diameter messages in one frame supported
+ *   E.g. one device watchdog answer and two credit control answers
+ *        in one TCP packet produces 3 text lines.
+ * - several fields with same name within one diameter message supported
+ *   E.g. Multiple AVP(444) Subscription-Id-Data once with IMSI once with MSISDN
+ * - several grouped AVPs supported
+ *   E.g. Zero or more Multiple-Services-Credit-Control AVPs(456)
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#include <string.h>
+#include "epan/packet_info.h"
+#include <epan/tap.h>
+#include <epan/epan_dissect.h>
+#include <epan/stat_cmd_args.h>
+#include "epan/value_string.h"
+#include "epan/nstime.h"
+#include "epan/ftypes/ftypes.h"
+#include "register.h"
+#include <epan/dissectors/packet-diameter.h>
+
+
+/* used to keep track of the statistics for an entire program interface */
+typedef struct _diameteravp_t {
+       guint32 frame;
+       guint32 diammsg_toprocess;
+       guint32 req_count;
+       guint32 ans_count;
+       guint32 paired_ans_count;
+       char* filter;
+} diameteravp_t;
+
+/* Copied from proto.c */
+static gboolean
+tree_traverse_pre_order(proto_tree *tree, proto_tree_traverse_func func, gpointer data)
+{
+       proto_node *pnode = tree;
+       proto_node *child;
+       proto_node *current;
+
+       if (func(pnode, data))
+               return TRUE;
+
+       child = pnode->first_child;
+       while (child != NULL) {
+               current = child;
+               child = current->next;
+               if (tree_traverse_pre_order((proto_tree *)current, func, data))
+                       return TRUE;
+       }
+       return FALSE;
+}
+
+static gboolean
+diam_tree_to_csv(proto_node* node, gpointer data)
+{
+       char* val_str=NULL;
+       char* val_tmp=NULL;
+       ftenum_t ftype;
+       field_info* fi;
+       header_field_info       *hfi;
+       if(!node) {
+               fprintf(stderr,"traverse end: node='%p' data='%p'\n",node,data);
+               return FALSE;
+       }
+       fi=node->finfo;
+       hfi=fi ? fi->hfinfo : NULL;
+       if(!hfi) {
+               fprintf(stderr,"traverse end2: Hfi not found node='%p'\n",node);
+               return FALSE;
+       }
+       ftype=fi->value.ftype->ftype;
+       if (ftype!=FT_NONE&&ftype!=FT_PROTOCOL) {
+               /* convert value to string */
+               if(fi->value.ftype->val_to_string_repr)
+               {
+                       val_tmp=fvalue_to_string_repr(&fi->value,FTREPR_DISPLAY,NULL);
+                       if(val_tmp)
+                       {
+                               val_str=ep_strdup(val_tmp);
+                               g_free(val_tmp);
+                       }
+               }
+               if(!val_str)
+                       val_str=ep_strdup_printf("unsuprorted type: %s",ftype_name(ftype));
+
+               /*printf("traverse: name='%s', abbrev='%s',desc='%s', val='%s'\n",hfi->name,hfi->abbrev,ftype_name(hfi->type),val_str);*/
+               printf("%s='%s' ",hfi->name,val_str);
+       }
+       return FALSE;
+}
+
+static int
+diameteravp_packet(void *pds, packet_info *pinfo, epan_dissect_t *edt _U_, const void *pdi)
+{
+       int ret = 0;
+       double resp_time=0.;
+       gboolean is_request=TRUE;
+       guint32 cmd_code=0;
+       guint32 result_code=0;
+       guint32 req_frame=0;
+       guint32 ans_frame=0;
+       guint32 diam_child_node=0;
+       proto_node* current=NULL;
+       proto_node* node = NULL;
+       header_field_info* hfi=NULL;
+       field_info* finfo=NULL;
+       const diameter_req_ans_pair_t* dp=pdi;
+
+       /* Several diameter messages within one frame are possible.                    *
+        * Check if we processing the message in same frame like befor or in new frame.*/
+       diameteravp_t *ds=(diameteravp_t *)pds;
+       if(pinfo->fd->num > ds->frame) {
+               ds->frame=pinfo->fd->num;
+               ds->diammsg_toprocess=0;
+       } else {
+                       ds->diammsg_toprocess+=1;
+       }
+       /* Extract data from request/answer pair provided by diameter dissector.*/
+       if(dp) {
+               is_request=dp->processing_request;
+               cmd_code=dp->cmd_code;
+               result_code=dp->result_code;
+               req_frame=dp->req_frame;
+               ans_frame=dp->ans_frame;
+               if(!is_request) {
+                       nstime_t ns;
+                       nstime_delta(&ns, &pinfo->fd->abs_ts, &dp->req_time);
+                       resp_time=nstime_to_sec(&ns);
+                       resp_time=resp_time<0?0.:resp_time;
+               }
+       }
+       if (!edt || !edt->tree || cmd_code!=272)
+               return ret;
+       /* Loop over top level nodes */
+       node = edt->tree->first_child;
+       while (node != NULL) {
+               current = node;
+               node = current->next;
+               finfo=current->finfo;
+               hfi=finfo ? finfo->hfinfo : NULL;
+               /*fprintf(stderr,"diameteravp_packet %d %p %p node=%p abbrev=%s\n",cmd_code,edt,edt->tree,current,hfi->abbrev);*/
+               /* process current diameter subtree in the current frame. */
+               if(hfi && hfi->abbrev && strcmp(hfi->abbrev,"diameter")==0) {
+                       /* Process current diameter message in the frame */
+                       if (ds->diammsg_toprocess==diam_child_node) {
+                               if(is_request) {
+                                       ds->req_count++;
+                               } else {
+                                       ds->ans_count++;
+                                       if (req_frame>0)
+                                               ds->paired_ans_count++;
+                               }
+                               /* Output frame data.*/
+                               printf("frame='%d' proto='diameter' msgnr='%d' is_request='%d' cmd='%d' req_frame='%d' ans_frame='%d' resp_time='%f' ",pinfo->fd->num,ds->diammsg_toprocess,is_request,cmd_code,req_frame,ans_frame,resp_time);
+                               /* Visit selected nodes of one diameter message.*/
+                               tree_traverse_pre_order(current, diam_tree_to_csv, &ds);
+                               /* End of message.*/
+                               printf("\n");
+                               /*printf("hfi: name='%s', msg_curr='%d' abbrev='%s',type='%s'\n",hfi->name,diam_child_node,hfi->abbrev,ftype_name(hfi->type));*/
+                       }
+                       diam_child_node++;
+               }
+       }
+       return ret;
+}
+
+static void
+diameteravp_draw(void* pds)
+{
+       diameteravp_t *ds=(diameteravp_t *)pds;
+       /* printing results */
+       printf("=== Diameter Summary ===\nrequset count:\t%d\nanswer count:\t%d\nreq/ans pairs:\t%d\n",ds->req_count,ds->ans_count,ds->paired_ans_count);
+}
+
+
+static void
+diameteravp_init(const char *optarg, void* userdata _U_)
+{
+       diameteravp_t *ds;
+       char* options=NULL;
+       char* saveptr=NULL;
+       char* str=NULL;
+       int field_count=0;
+       int filter_len=0;
+       GString *error_string;
+
+       ds=g_malloc(sizeof(diameteravp_t));
+       ds->frame=0;
+       ds->diammsg_toprocess=0;
+       ds->req_count=0;
+       ds->ans_count=0;
+       ds->paired_ans_count=0;
+       str=NULL;
+       ds->filter=NULL;
+
+       options=g_strdup(optarg);
+       for(str=options;*str;str++)
+       {
+               if(*str==',')
+                       field_count++;
+       }
+       filter_len=strlen(optarg)+sizeof("diameter")+field_count*sizeof("||diameter.");
+       ds->filter=g_malloc0(filter_len);
+       strcat(ds->filter,"diameter");
+
+#if defined (_WIN32)
+       for(str=strtok_s(options+sizeof("diameter,avp"),",",&saveptr);str;str=strtok_s(NULL,",",&saveptr))
+#else
+       for(str=strtok_r(options+sizeof("diameter,avp"),",",&saveptr);str;str=strtok_r(NULL,",",&saveptr))
+#endif
+       {
+               /* Connect all requested fields with logical OR. */
+               strcat(ds->filter,"||");
+               /* Prefix field name with "diameter." by default. */
+               if(!strchr(str,'.'))
+                       strcat(ds->filter,"diameter.");
+               /* Append field name to the filter. */
+               strcat(ds->filter,str);
+       }
+       g_free(options);
+
+       error_string=register_tap_listener("diameter", ds, ds->filter, 0, NULL, diameteravp_packet, diameteravp_draw);
+       if(error_string){
+               /* error, we failed to attach to the tap. clean up */
+               g_free(ds);
+
+               fprintf(stderr, "tshark: Couldn't register diam,csv tap: %s\n",
+                               error_string->str);
+               g_string_free(error_string, TRUE);
+               exit(1);
+       }
+}
+
+
+void
+register_tap_listener_diameteravp(void)
+{
+       register_stat_cmd_arg("diameter,avp", diameteravp_init, NULL);
+}
+