aboutsummaryrefslogtreecommitdiffstats
path: root/packet-eap.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2002-02-24 08:10:07 +0000
committerGuy Harris <guy@alum.mit.edu>2002-02-24 08:10:07 +0000
commit1be3629f30b319af0d161ba3c02b8ef700cae312 (patch)
treeaa94d58f09e3dd2ca0351eb518365adf77f8e681 /packet-eap.c
parentca8f79df3d8d042806e24a70a738bd5c92b2dc90 (diff)
Don't copy the entire EAP header, just extract stuff from it a field at
a time, so we dissect as far as we can. Set the length of the EAP protocol item to the length of an EAP header. Put information into the Info column about the EAP code and, for a request or response, the EAP type. svn path=/trunk/; revision=4798
Diffstat (limited to 'packet-eap.c')
-rw-r--r--packet-eap.c52
1 files changed, 27 insertions, 25 deletions
diff --git a/packet-eap.c b/packet-eap.c
index 80f2742f2d..2c6447a927 100644
--- a/packet-eap.c
+++ b/packet-eap.c
@@ -2,7 +2,7 @@
* Routines for EAP Extensible Authentication Protocol header disassembly,
* RFC 2284
*
- * $Id: packet-eap.c,v 1.10 2002/02/22 21:51:18 guy Exp $
+ * $Id: packet-eap.c,v 1.11 2002/02/24 08:10:07 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -51,12 +51,6 @@ static int hf_eap_type = -1;
static gint ett_eap = -1;
-typedef struct _e_eap {
- guint8 eap_code;
- guint8 eap_id;
- guint16 eap_len;
-} e_eap;
-
#define EAP_REQUEST 1
#define EAP_RESPONSE 2
#define EAP_SUCCESS 3
@@ -84,41 +78,49 @@ static const value_string eap_type_vals[] = {
static void
dissect_eap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- e_eap eaph;
+ guint8 eap_code;
+ guint8 eap_id;
+ guint16 eap_len;
+ guint8 eap_type;
guint len;
proto_tree *ti;
- proto_tree *eap_tree;
+ proto_tree *eap_tree = NULL;
if (check_col(pinfo->cinfo, COL_PROTOCOL))
col_set_str(pinfo->cinfo, COL_PROTOCOL, "EAP");
if (check_col(pinfo->cinfo, COL_INFO))
col_clear(pinfo->cinfo, COL_INFO);
- tvb_memcpy(tvb, (guint8 *)&eaph, 0, sizeof(eaph));
- eaph.eap_len = ntohs(eaph.eap_len);
-
- len = eaph.eap_len;
-
- set_actual_length(tvb, len);
-
- eap_tree = NULL;
-
+ eap_code = tvb_get_guint8(tvb, 0);
+ if (check_col(pinfo->cinfo, COL_INFO))
+ col_add_str(pinfo->cinfo, COL_INFO,
+ val_to_str(eap_code, eap_code_vals, "Unknown code (0x%02X)"));
if (tree) {
- ti = proto_tree_add_item(tree, proto_eap, tvb, 0, len, FALSE);
+ ti = proto_tree_add_item(tree, proto_eap, tvb, 0, 4, FALSE);
eap_tree = proto_item_add_subtree(ti, ett_eap);
- proto_tree_add_uint(eap_tree, hf_eap_code, tvb, 0, 1, eaph.eap_code);
-
- proto_tree_add_uint(eap_tree, hf_eap_identifier, tvb, 1, 1, eaph.eap_id);
- proto_tree_add_uint(eap_tree, hf_eap_len, tvb, 2, 2, eaph.eap_len);
+ proto_tree_add_uint(eap_tree, hf_eap_code, tvb, 0, 1, eap_code);
}
- switch (eaph.eap_code) {
+ if (tree)
+ proto_tree_add_item(eap_tree, hf_eap_identifier, tvb, 1, 1, FALSE);
+
+ eap_len = tvb_get_ntohs(tvb, 2);
+ len = eap_len;
+ set_actual_length(tvb, len);
+ if (tree)
+ proto_tree_add_uint(eap_tree, hf_eap_len, tvb, 2, 2, eap_len);
+
+ switch (eap_code) {
case EAP_REQUEST:
case EAP_RESPONSE:
+ eap_type = tvb_get_guint8(tvb, 4);
+ if (check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, ", %s",
+ val_to_str(eap_type, eap_type_vals, "Unknown type (0x%02X)"));
if (tree) {
- proto_tree_add_item(eap_tree, hf_eap_type, tvb, 4, 1, FALSE);
+ proto_tree_add_uint(eap_tree, hf_eap_type, tvb, 4, 1, eap_type);
if (len > 5) {
proto_tree_add_text(eap_tree, tvb, 5, len - 5, "Type-Data (%d byte%s)",
len - 5, plurality(len - 5, "", "s"));