summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2009-06-26 05:48:03 +0000
committerAnders Broman <anders.broman@ericsson.com>2009-06-26 05:48:03 +0000
commit6a5ea97ff63a2cdf87e6cc1afb452152d7c72d56 (patch)
treec3a4199aecef06e1b5ef5f9483c2155ad076aafb
parent9733aadcfe443d4f682dc4e922499fb123fd5a64 (diff)
downloadwireshark-6a5ea97ff63a2cdf87e6cc1afb452152d7c72d56.tar.gz
From Sebastien Decugis:
Add Missing Diameter EAP support. https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=3600 svn path=/trunk/; revision=28849
-rw-r--r--Makefile.am1
-rw-r--r--diameter/dictionary.xml7
-rw-r--r--diameter/eap.xml22
-rw-r--r--diameter/nasreq.xml1
-rw-r--r--epan/dissectors/packet-diameter.c22
-rw-r--r--packaging/nsis/wireshark.nsi1
6 files changed, 53 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am
index 87dfa6fae9..f00404defb 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -72,6 +72,7 @@ diameter_DATA = \
diameter/chargecontrol.xml \
diameter/dictionary.dtd \
diameter/dictionary.xml \
+ diameter/eap.xml \
diameter/Ericsson.xml \
diameter/etsie2e4.xml \
diameter/gqpolicy.xml \
diff --git a/diameter/dictionary.xml b/diameter/dictionary.xml
index e61e058c1d..5db9f15a3d 100644
--- a/diameter/dictionary.xml
+++ b/diameter/dictionary.xml
@@ -6,6 +6,7 @@
<!DOCTYPE dictionary SYSTEM "dictionary.dtd" [
<!ENTITY nasreq SYSTEM "nasreq.xml">
+ <!ENTITY eap SYSTEM "eap.xml">
<!ENTITY mobileipv4 SYSTEM "mobileipv4.xml">
<!ENTITY chargecontrol SYSTEM "chargecontrol.xml">
<!ENTITY sunping SYSTEM "sunping.xml">
@@ -1338,6 +1339,11 @@ http://www.iana.org/assignments/radius-types
<!-- AVP:s 349-362 Unassigned -->
<!-- AVP:s 363 - 408 Belongs to Diameter Network Access Server Application and is defined in nasreq.xml -->
<!-- AVP:s 411 - 461 Belongs to Carge Control and is defined in chargecontrol.xml -->
+<!-- 462 EAP-Payload [RFC4072]
+ 463 EAP-Reissued-Payload [RFC4072]
+ 464 EAP-Master-Session-Key [RFC4072]
+ 465 Accounting-EAP-Auth-Method [RFC4072]
+-->
<!-- 466-479 Unallocated -->
<avp name="Accounting-Record-Type" code="480" mandatory="must" may-encrypt="yes" vendor-bit="mustnot">
<type type-name="Enumerated"/>
@@ -3639,6 +3645,7 @@ http://www.3gcn.org/3gpp2/TSGX/Projects/X.P0013-B%20IP%20Network%20-%20MMD/X.S00
<command name="3GPP-ME-Identity-Check" code="324" vendor-id="None"/> <!--[3GPP TS 29.272][RFC5516] -->
</application>
&nasreq;
+ &eap;
&mobileipv4;
&chargecontrol;
&sunping;
diff --git a/diameter/eap.xml b/diameter/eap.xml
new file mode 100644
index 0000000000..8cc074fcc1
--- /dev/null
+++ b/diameter/eap.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Id$ -->
+<application id="5" name="EAP Application" uri="http://www.ietf.org/rfc/rfc4072.txt">
+
+ <command name="Diameter-EAP" code="268" vendor-id="None"/>
+
+ <avp name="EAP-Payload" code="462">
+ <type type-name="OctetString"/>
+ </avp>
+ <avp name="EAP-Reissued-Payload" code="463">
+ <type type-name="OctetString"/>
+ </avp>
+ <avp name="EAP-Master-Session-Key" code="464">
+ <type type-name="OctetString"/>
+ </avp>
+ <avp name="EAP-Key-Name" code="102">
+ <type type-name="OctetString"/>
+ </avp>
+ <avp name="Accounting-EAP-Auth-Method" code="465">
+ <type type-name="Unsigned64"/>
+ </avp>
+ </application>
diff --git a/diameter/nasreq.xml b/diameter/nasreq.xml
index 8c5f48dbef..a196a04f60 100644
--- a/diameter/nasreq.xml
+++ b/diameter/nasreq.xml
@@ -3,7 +3,6 @@
<application id="1" name="NASREQ Application" uri="http://www.ietf.org/rfc/rfc4005.txt">
<command name="AA" code="265" vendor-id="None"/>
- <command name="Diameter-EAP" code="268" vendor-id="None"/>
<avp name="Accounting-Input-Octets" code="363">
<type type-name="Unsigned64"/>
diff --git a/epan/dissectors/packet-diameter.c b/epan/dissectors/packet-diameter.c
index 892cd3481f..6d5e46d914 100644
--- a/epan/dissectors/packet-diameter.c
+++ b/epan/dissectors/packet-diameter.c
@@ -190,6 +190,7 @@ static diam_dictionary_t dictionary = { NULL, NULL, NULL, NULL };
static struct _build_dict build_dict;
static const value_string* vnd_short_vs;
static dissector_handle_t data_handle;
+static dissector_handle_t eap_handle;
static const value_string diameter_avp_data_addrfamily_vals[]= {
{1,"IPv4"},
@@ -309,6 +310,19 @@ dissect_diameter_vedor_id(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree
}
+static int
+dissect_diameter_eap_payload(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+ gboolean save_writable;
+
+ /* Ensure the packet is displayed as Diameter, not EAP */
+ save_writable = col_get_writable(pinfo->cinfo);
+ col_set_writable(pinfo->cinfo, FALSE);
+
+ call_dissector(eap_handle, tvb, pinfo, tree);
+
+ col_set_writable(pinfo->cinfo, save_writable);
+ return tvb_length(tvb);
+}
/* Dissect an AVP at offset */
static int
@@ -1357,10 +1371,18 @@ proto_reg_handoff_diameter(void)
diameter_tcp_handle = create_dissector_handle(dissect_diameter_tcp,
proto_diameter);
data_handle = find_dissector("data");
+ eap_handle = find_dissector("eap");
/* Register special decoding for some AVP:s */
/* AVP Code: 266 Vendor-Id */
dissector_add("diameter.base", 266,
new_create_dissector_handle(dissect_diameter_vedor_id, proto_diameter));
+ /* AVP Code: 462 EAP-Payload */
+ dissector_add("diameter.base", 462,
+ new_create_dissector_handle(dissect_diameter_eap_payload, proto_diameter));
+ /* AVP Code: 463 EAP-Reissued-Payload */
+ dissector_add("diameter.base", 463,
+ new_create_dissector_handle(dissect_diameter_eap_payload, proto_diameter));
+
Initialized=TRUE;
} else {
range_foreach(diameter_tcp_port_range, range_delete_callback);
diff --git a/packaging/nsis/wireshark.nsi b/packaging/nsis/wireshark.nsi
index 796fe40aa7..ba3a6c8516 100644
--- a/packaging/nsis/wireshark.nsi
+++ b/packaging/nsis/wireshark.nsi
@@ -463,6 +463,7 @@ SetOutPath $INSTDIR\diameter
File "..\..\diameter\chargecontrol.xml"
File "..\..\diameter\dictionary.dtd"
File "..\..\diameter\dictionary.xml"
+File "..\..\diameter\eap.xml"
File "..\..\diameter\Ericsson.xml"
File "..\..\diameter\etsie2e4.xml"
File "..\..\diameter\gqpolicy.xml"