aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-pana.c
diff options
context:
space:
mode:
authorJaap Keuter <jaap.keuter@xs4all.nl>2007-08-22 06:59:28 +0000
committerJaap Keuter <jaap.keuter@xs4all.nl>2007-08-22 06:59:28 +0000
commit4533ff34a06364c68f3249bf2cee38bc37ad8767 (patch)
tree28ea5d1777f2f009cf3d924d0dc2c66f79a02973 /epan/dissectors/packet-pana.c
parenta18a6233d19cdf31ee58ee68183d5690bea77ab0 (diff)
From Victor Fajardo:
Updated patches to support draft-ietf-pana-pana-18.txt. svn path=/trunk/; revision=22583
Diffstat (limited to 'epan/dissectors/packet-pana.c')
-rw-r--r--epan/dissectors/packet-pana.c95
1 files changed, 38 insertions, 57 deletions
diff --git a/epan/dissectors/packet-pana.c b/epan/dissectors/packet-pana.c
index 9b3e90ac6a..cd9d1ebcdd 100644
--- a/epan/dissectors/packet-pana.c
+++ b/epan/dissectors/packet-pana.c
@@ -23,7 +23,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* This protocol implements PANA as of the internet draft
- * draft-ietf-pana-pana-15 which is a workitem of the ietf workgroup
+ * draft-ietf-pana-pana-18 which is a workitem of the ietf workgroup
* internet area/pana
*/
@@ -44,7 +44,6 @@
#include <epan/emem.h>
#define PANA_UDP_PORT 3001
-#define PANA_VERSION 1
#define MIN_AVP_SIZE 8
@@ -53,6 +52,7 @@
#define PANA_FLAG_C 0x2000
#define PANA_FLAG_A 0x1000
#define PANA_FLAG_P 0x0800
+#define PANA_FLAG_I 0x0400
#define PANA_FLAG_RES6 0x0200
#define PANA_FLAG_RES7 0x0100
#define PANA_FLAG_RES8 0x0080
@@ -66,7 +66,6 @@
#define PANA_FLAG_RES 0x0fff
#define PANA_AVP_FLAG_V 0x8000
-#define PANA_AVP_FLAG_M 0x4000
#define PANA_AVP_FLAG_RES2 0x2000
#define PANA_AVP_FLAG_RES3 0x1000
#define PANA_AVP_FLAG_RES4 0x0800
@@ -86,7 +85,6 @@
/* Initialize the protocol and registered fields */
static int proto_pana = -1;
-static int hf_pana_version_type = -1;
static int hf_pana_reserved_type = -1;
static int hf_pana_length_type = -1;
static int hf_pana_msg_type = -1;
@@ -105,11 +103,11 @@ static int hf_pana_flag_s = -1;
static int hf_pana_flag_c = -1;
static int hf_pana_flag_a = -1;
static int hf_pana_flag_p = -1;
+static int hf_pana_flag_i = -1;
static int hf_pana_avp_code = -1;
static int hf_pana_avp_length = -1;
static int hf_pana_avp_flags = -1;
static int hf_pana_avp_flag_v = -1;
-static int hf_pana_avp_flag_m = -1;
static int hf_pana_avp_reserved = -1;
static int hf_pana_avp_vendorid = -1;
@@ -136,14 +134,15 @@ static const value_string msg_subtype_names[] = {
};
static const value_string avp_code_names[] = {
- { 1, "Algorithm AVP" },
- { 2, "AUTH AVP" },
- { 3, "EAP-Payload AVP" },
+ { 1, "AUTH AVP" },
+ { 2, "EAP-Payload AVP" },
+ { 3, "Integrity-Algorithm AVP" },
{ 4, "Key-Id AVP" },
{ 5, "Nonce AVP" },
- { 6, "Result-Code" },
- { 7, "Session-Lifetime" },
- { 8, "Termination-Cause" },
+ { 6, "PRF-Algorithm AVP" },
+ { 7, "Result-Code" },
+ { 8, "Session-Lifetime" },
+ { 9, "Termination-Cause" },
{ 0, NULL }
};
@@ -238,6 +237,9 @@ dissect_pana_flags(proto_tree *parent_tree, tvbuff_t *tvb, int offset, guint16 f
proto_tree_add_boolean(flags_tree, hf_pana_flag_p, tvb, offset, 2, flags);
if (flags & PANA_FLAG_P)
proto_item_append_text(flags_item, ", P flag set");
+ proto_tree_add_boolean(flags_tree, hf_pana_flag_i, tvb, offset, 2, flags);
+ if (flags & PANA_FLAG_I)
+ proto_item_append_text(flags_item, ", I flag set");
}
/*
@@ -258,9 +260,6 @@ dissect_pana_avp_flags(proto_tree *parent_tree, tvbuff_t *tvb, int offset, guint
proto_tree_add_boolean(avp_flags_tree, hf_pana_avp_flag_v, tvb, offset, 2, flags);
if (flags & PANA_AVP_FLAG_V)
proto_item_append_text(avp_flags_item, ", Vendor");
- proto_tree_add_boolean(avp_flags_tree, hf_pana_avp_flag_m, tvb, offset, 2, flags);
- if (flags & PANA_AVP_FLAG_M)
- proto_item_append_text(avp_flags_item, ", Mandatory");
}
@@ -270,19 +269,17 @@ dissect_pana_avp_flags(proto_tree *parent_tree, tvbuff_t *tvb, int offset, guint
static pana_avp_types
pana_avp_get_type(guint16 avp_code, guint32 vendor_id)
{
-
if(vendor_id == 0) {
switch(avp_code) {
- case 1: return PANA_UNSIGNED32; /* Algorithm AVP */
- case 2: return PANA_OCTET_STRING; /* AUTH AVP */
- case 3: return PANA_EAP; /* EAP-Payload AVP */
- case 4: return PANA_GROUPED; /* Failed-AVP AVP */
- case 5: return PANA_OCTET_STRING; /* Failed-Message-Header AVP */
- case 6: return PANA_INTEGER32; /* Key-Id AVP */
- case 7: return PANA_OCTET_STRING; /* Nonce AVP */
- case 8: return PANA_RESULT_CODE; /* Result-Code AVP */
- case 9: return PANA_UNSIGNED32; /* Session-Lifetime AVP */
- case 10: return PANA_ENUMERATED; /* Termination-Cause AVP */
+ case 1: return PANA_OCTET_STRING; /* AUTH AVP */
+ case 2: return PANA_EAP; /* EAP-Payload AVP */
+ case 3: return PANA_UNSIGNED32; /* Integrity-Algorithm AVP */
+ case 4: return PANA_INTEGER32; /* Key-Id AVP */
+ case 5: return PANA_OCTET_STRING; /* Nonce AVP */
+ case 6: return PANA_UNSIGNED32; /* PRF-Algorithm AVP */
+ case 7: return PANA_RESULT_CODE; /* Result-Code AVP */
+ case 8: return PANA_UNSIGNED32; /* Session-Lifetime AVP */
+ case 9: return PANA_ENUMERATED; /* Termination-Cause AVP */
default: return PANA_OCTET_STRING;
}
} else {
@@ -614,13 +611,9 @@ dissect_pana_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
- /* Version */
- proto_tree_add_item(pana_tree, hf_pana_version_type, tvb, offset, 1, FALSE);
- offset += 1;
-
/* Reserved field */
- proto_tree_add_item(pana_tree, hf_pana_reserved_type, tvb, offset, 1, FALSE);
- offset += 1;
+ proto_tree_add_item(pana_tree, hf_pana_reserved_type, tvb, offset, 2, FALSE);
+ offset += 2;
/* Length */
proto_tree_add_item(pana_tree, hf_pana_length_type, tvb, offset, 2, FALSE);
@@ -666,7 +659,6 @@ static gboolean
dissect_pana(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- guint8 pana_version;
guint8 pana_res;
guint16 msg_length;
guint16 flags;
@@ -682,17 +674,11 @@ dissect_pana(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
/* Get header fields */
- pana_version = tvb_get_guint8(tvb, 0);
- pana_res = tvb_get_guint8(tvb, 1);
+ pana_res = tvb_get_ntohs(tvb, 0);
msg_length = tvb_get_ntohs(tvb, 2);
flags = tvb_get_ntohs(tvb, 4);
msg_type = tvb_get_ntohs(tvb, 6);
- /* Check version */
- if(pana_version != PANA_VERSION) {
- return FALSE;
- }
-
/* Check minimum packet length */
if(msg_length < 12) {
return FALSE;
@@ -709,7 +695,7 @@ dissect_pana(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
/* verify that none of the reserved bits are set */
- if(flags&0x07ff){
+ if(flags&0x03ff){
return FALSE;
}
@@ -734,11 +720,6 @@ proto_register_pana(void)
module_t *pana_module;
static hf_register_info hf[] = {
- { &hf_pana_version_type,
- { "PANA Version", "pana.version",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
{ &hf_pana_response_in,
{ "Response In", "pana.response_in",
FT_FRAMENUM, BASE_DEC, NULL, 0x0,
@@ -756,7 +737,7 @@ proto_register_pana(void)
},
{ &hf_pana_reserved_type,
{ "PANA Reserved", "pana.reserved",
- FT_UINT8, BASE_HEX, NULL, 0x0,
+ FT_UINT16, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_pana_length_type,
@@ -773,27 +754,32 @@ proto_register_pana(void)
},
{ &hf_pana_flag_r,
{ "Request", "pana.flags.r",
- FT_BOOLEAN, 16, TFS(&flags_set_truth), PANA_FLAG_R,
+ FT_BOOLEAN, 16, TFS(&tfs_set_notset), PANA_FLAG_R,
NULL, HFILL }
},
{ &hf_pana_flag_s,
{ "Start", "pana.flags.s",
- FT_BOOLEAN, 16, TFS(&flags_set_truth), PANA_FLAG_S,
+ FT_BOOLEAN, 16, TFS(&tfs_set_notset), PANA_FLAG_S,
NULL, HFILL }
},
{ &hf_pana_flag_c,
{ "Complete","pana.flags.c",
- FT_BOOLEAN, 16, TFS(&flags_set_truth), PANA_FLAG_C,
+ FT_BOOLEAN, 16, TFS(&tfs_set_notset), PANA_FLAG_C,
NULL, HFILL }
},
{ &hf_pana_flag_a,
{ "Auth","pana.flags.a",
- FT_BOOLEAN, 16, TFS(&flags_set_truth), PANA_FLAG_A,
+ FT_BOOLEAN, 16, TFS(&tfs_set_notset), PANA_FLAG_A,
NULL, HFILL }
},
{ &hf_pana_flag_p,
{ "Ping","pana.flags.p",
- FT_BOOLEAN, 16, TFS(&flags_set_truth), PANA_FLAG_P,
+ FT_BOOLEAN, 16, TFS(&tfs_set_notset), PANA_FLAG_P,
+ NULL, HFILL }
+ },
+ { &hf_pana_flag_i,
+ { "IP Reconfig","pana.flags.i",
+ FT_BOOLEAN, 16, TFS(&tfs_set_notset), PANA_FLAG_I,
NULL, HFILL }
},
@@ -831,12 +817,7 @@ proto_register_pana(void)
},
{ &hf_pana_avp_flag_v,
{ "Vendor", "pana.avp.flags.v",
- FT_BOOLEAN, 16, TFS(&flags_set_truth), PANA_AVP_FLAG_V,
- NULL, HFILL }
- },
- { &hf_pana_avp_flag_m,
- { "Mandatory", "pana.avp.flags.m",
- FT_BOOLEAN, 16, TFS(&flags_set_truth), PANA_AVP_FLAG_M,
+ FT_BOOLEAN, 16, TFS(&tfs_set_notset), PANA_AVP_FLAG_V,
NULL, HFILL }
},
{ &hf_pana_avp_reserved,