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> {
tap-camelsrt.c
tap-comparestat.c
tap-dcerpcstat.c
+ tap-diameter-avp.c
tap-funnel.c
tap-gsm_astat.c
tap-h225counter.c
tap-camelsrt.c \
tap-comparestat.c \
tap-dcerpcstat.c \
+ tap-diameter-avp.c \
tap-funnel.c \
tap-gsm_astat.c \
tap-h225counter.c \
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;
{ 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)
}
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);
{ &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 }},
/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
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;
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;
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);
}
}
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
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 */
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 */
{ 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" },
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;
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;
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;
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;
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;
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 */
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 */
/*
* [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
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 */
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 */
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;
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);
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
/* 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 , "" );
}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 */
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,
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,
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;
/* 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;
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];
+ }
}
}
}
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);
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);
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;
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);
/* 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,
},
/* 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,
}
},
-
+ { &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,
* 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>
*/
/* 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
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);
"Invalid length (0)");
return;
}
+
switch(tlv_type) {
case 1:
ti2 = proto_tree_add_text(rsvp_object_tree, tvb,
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;
}
}
}
}
-/*------------------------------------------------------------------------------
+/*-----------------------------------------------------------------------------
* 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,
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)",
"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
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 */
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;
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;
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",
{ 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)
}
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);
/*--- End of included file: packet-snmp-fn.c ---*/
-#line 1466 "packet-snmp-template.c"
+#line 1482 "packet-snmp-template.c"
guint
{ &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 }},
"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 */
&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;
PRIVATE ENTERPRISE NUMBERS
-(last updated 2010-02-28)
+(last updated 2010-03-07)
SMI Network Management Private Enterprise Codes:
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
5401
Master Soft
Alberto Pastore
- pastore&mastersoft-italia.com
+ alberto&pastore.cc
5402
IDF
Yaron Zehavi
jeff&scrippscollege.edu
12637
Shazam Entertainments ltd
- Ian Stanley
- ian.stanley&shazamteam.com
+ Tony Miller
+ tony.miller&shazamteam.com
12638
Siennax
Mark Ruijter
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
ftype_can_matches
ftype_can_ne
ftype_can_slice
+ftype_name
ftype_pretty_name
funnel_get_funnel_ops
funnel_register_all_menus
/* 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;
smi_mod_copy_cb,
NULL,
smi_mod_free_cb,
- NULL,
+ restart_needed_warning,
smi_fields);
smi_paths_uat = uat_new("SMI Paths",
smi_mod_copy_cb,
NULL,
smi_mod_free_cb,
- NULL,
+ restart_needed_warning,
smi_paths_fields);
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) {
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 & Richter Cine Technik
84:C7:27 Gnodal # Gnodal Ltd
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
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
C0:9C:92 Coby
C0:BA:E6 Applicatio # Application Solutions (Safety and Security) Ltd
C0:CF:A3 CreativeEl # Creative Electronics & 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.
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
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.
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
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
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
--- /dev/null
+/* 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);
+}
+