Radius: Additional attribute handling:
authorBill Meier <wmeier@newsguy.com>
Mon, 6 Jul 2009 14:05:37 +0000 (14:05 -0000)
committerBill Meier <wmeier@newsguy.com>
Mon, 6 Jul 2009 14:05:37 +0000 (14:05 -0000)
 - implement "ether" attribute;
 - parse "abinary" attribute [uses existing radius_abinary()]
Also: add a comment in packet-radius.h about the meaning of the encrypt flag.

svn path=/trunk/; revision=28952

epan/dissectors/packet-radius.c
epan/dissectors/packet-radius.h
epan/radius_dict.l

index e2e8a0945692e71cac7badcb2b1e99d564c8c9b1..f53a1e692f645d86b717a69687523ce07b05aaf5 100644 (file)
@@ -718,6 +718,16 @@ void radius_abinary(radius_attr_info_t* a, proto_tree* tree, packet_info *pinfo
        proto_item_append_text(avp_item, "%s", tvb_bytes_to_str(tvb, offset, len));
 }
 
+void radius_ether(radius_attr_info_t* a, proto_tree* tree, packet_info *pinfo _U_, tvbuff_t* tvb, int offset, int len, proto_item* avp_item) {
+       if (len != 6) {
+               proto_item_append_text(avp_item, "[wrong length for ethernet address]");
+               return;
+       }
+
+       proto_tree_add_item(tree, a->hf, tvb, offset, len, FALSE);
+       proto_item_append_text(avp_item, "%s", ether_to_str(tvb_get_ptr(tvb, offset, len)));
+}
+
 void radius_ifid(radius_attr_info_t* a, proto_tree* tree, packet_info *pinfo _U_, tvbuff_t* tvb, int offset, int len, proto_item* avp_item) {
        proto_tree_add_item(tree, a->hf, tvb, offset, len, FALSE);
        proto_item_append_text(avp_item, "%s", tvb_bytes_to_str(tvb, offset, len));
index b688f542e1df02cb09bb9f323a38e8d4abed3ba5..ff1f9a4e60a3d176b33c5510093c7e7a42ce8e6c 100644 (file)
@@ -57,7 +57,7 @@ typedef struct _radius_vendor_info_t {
        const gchar *name;
        guint code;
        GHashTable* attrs_by_id;
-    gint ett;
+       gint ett;
        guint type_octets;
        guint length_octets;
        gboolean has_flags; 
@@ -71,7 +71,7 @@ typedef const gchar* (radius_avp_dissector_t)(proto_tree*,tvbuff_t*);
 struct _radius_attr_info_t {
        const gchar *name;
        guint code;
-       gboolean encrypt;
+       gboolean encrypt;  /* True if attribute has "encrypt=1" option */
        gboolean tagged;
        radius_attr_dissector_t* type;
        radius_avp_dissector_t* dissector;
@@ -101,6 +101,7 @@ radius_attr_dissector_t radius_ipv6prefix;
 radius_attr_dissector_t radius_ipxnet;
 radius_attr_dissector_t radius_date;
 radius_attr_dissector_t radius_abinary;
+radius_attr_dissector_t radius_ether;
 radius_attr_dissector_t radius_ifid;
 radius_attr_dissector_t radius_byte;
 radius_attr_dissector_t radius_short;
index 719b752278edbb72ba74b485b3ba74527e5a3b8c..05611ebfea3afd412ba3bfb9f3730584026e817f 100644 (file)
 <ATTR_W_ID>ipv6prefix                  { attr_type = radius_ipv6prefix;  BEGIN ATTR_W_TYPE; }
 <ATTR_W_ID>ipxnet                      { attr_type = radius_ipxnet;  BEGIN ATTR_W_TYPE; }
 <ATTR_W_ID>date                                { attr_type = radius_date;  BEGIN ATTR_W_TYPE; }
+<ATTR_W_ID>abinary                     { attr_type = radius_abinary;  BEGIN ATTR_W_TYPE; }
+<ATTR_W_ID>ether                       { attr_type = radius_ether;  BEGIN ATTR_W_TYPE; }
 <ATTR_W_ID>ifid                                { attr_type = radius_ifid;  BEGIN ATTR_W_TYPE; }
 <ATTR_W_ID>byte                                { attr_type = radius_integer;  BEGIN ATTR_W_TYPE; }
 <ATTR_W_ID>short                       { attr_type = radius_integer;  BEGIN ATTR_W_TYPE; }