forked from osmocom/wireshark
From Bjørn Mork:
Decode ipv6prefix attributes in packet-radius. svn path=/trunk/; revision=27769
This commit is contained in:
parent
26e5b929fa
commit
85b8227311
|
@ -558,6 +558,39 @@ void radius_ipv6addr(radius_attr_info_t* a, proto_tree* tree, packet_info *pinfo
|
|||
proto_item_append_text(avp_item, "%s", txtbuf);
|
||||
}
|
||||
|
||||
void radius_ipv6prefix(radius_attr_info_t* a, proto_tree* tree, packet_info *pinfo _U_, tvbuff_t* tvb, int offset, int len, proto_item* avp_item) {
|
||||
struct e_in6_addr ipv6_buff;
|
||||
gchar txtbuf[256];
|
||||
guint8 n;
|
||||
|
||||
if ((len < 2) || (len > 18) ) {
|
||||
proto_item_append_text(avp_item, "[wrong length for IPv6 prefix]");
|
||||
return;
|
||||
}
|
||||
|
||||
/* first byte is reserved == 0x00 */
|
||||
if (tvb_get_guint8(tvb, offset)) {
|
||||
proto_item_append_text(avp_item, "[invalid reserved byte for IPv6 prefix]");
|
||||
return;
|
||||
}
|
||||
|
||||
/* this is the prefix length */
|
||||
n = tvb_get_guint8(tvb, offset + 1);
|
||||
if (n > 128) {
|
||||
proto_item_append_text(avp_item, "[invalid IPv6 prefix length]");
|
||||
return;
|
||||
}
|
||||
|
||||
proto_tree_add_item(tree, a->hf, tvb, offset, len, FALSE);
|
||||
|
||||
/* cannot use tvb_get_ipv6() here, since the prefix most likely is truncated */
|
||||
memset(&ipv6_buff, 0, sizeof ipv6_buff);
|
||||
tvb_memcpy(tvb, &ipv6_buff, offset + 2, len - 2);
|
||||
ip6_to_str_buf(&ipv6_buff, txtbuf);
|
||||
proto_item_append_text(avp_item, "%s/%u", txtbuf, n);
|
||||
}
|
||||
|
||||
|
||||
void radius_ipxnet(radius_attr_info_t* a, proto_tree* tree, packet_info *pinfo _U_, tvbuff_t* tvb, int offset, int len, proto_item* avp_item) {
|
||||
guint32 net;
|
||||
|
||||
|
@ -1363,6 +1396,9 @@ static void register_attrs(gpointer k _U_, gpointer v, gpointer p) {
|
|||
} else if (a->type == radius_ipv6addr) {
|
||||
hfri[0].hfinfo.type = FT_IPv6;
|
||||
hfri[0].hfinfo.display = BASE_NONE;
|
||||
} else if (a->type == radius_ipv6prefix) {
|
||||
hfri[0].hfinfo.type = FT_BYTES;
|
||||
hfri[0].hfinfo.display = BASE_NONE;
|
||||
} else if (a->type == radius_ipxnet) {
|
||||
hfri[0].hfinfo.type = FT_IPXNET;
|
||||
hfri[0].hfinfo.display = BASE_NONE;
|
||||
|
|
|
@ -92,6 +92,7 @@ radius_attr_dissector_t radius_string;
|
|||
radius_attr_dissector_t radius_octets;
|
||||
radius_attr_dissector_t radius_ipaddr;
|
||||
radius_attr_dissector_t radius_ipv6addr;
|
||||
radius_attr_dissector_t radius_ipv6prefix;
|
||||
radius_attr_dissector_t radius_ipxnet;
|
||||
radius_attr_dissector_t radius_date;
|
||||
radius_attr_dissector_t radius_abinary;
|
||||
|
|
|
@ -146,6 +146,7 @@
|
|||
<ATTR_W_ID>octets { attr_type = radius_octets; BEGIN ATTR_W_TYPE; }
|
||||
<ATTR_W_ID>ipaddr { attr_type = radius_ipaddr; BEGIN ATTR_W_TYPE; }
|
||||
<ATTR_W_ID>ipv6addr { attr_type = radius_ipv6addr; BEGIN ATTR_W_TYPE; }
|
||||
<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>ifid { attr_type = radius_ifid; BEGIN ATTR_W_TYPE; }
|
||||
|
|
|
@ -172,7 +172,7 @@ ATTRIBUTE NAS-Port-Id 87 string
|
|||
ATTRIBUTE Framed-Pool 88 string
|
||||
ATTRIBUTE NAS-IPv6-Address 95 ipv6addr
|
||||
ATTRIBUTE Framed-Interface-Id 96 ifid
|
||||
ATTRIBUTE Framed-IPv6-Prefix 97 octets # ipv6prefix
|
||||
ATTRIBUTE Framed-IPv6-Prefix 97 ipv6prefix
|
||||
ATTRIBUTE Login-IPv6-Host 98 ipv6addr
|
||||
ATTRIBUTE Framed-IPv6-Route 99 string
|
||||
ATTRIBUTE Framed-IPv6-Pool 100 string
|
||||
|
@ -202,6 +202,9 @@ ATTRIBUTE Digest-Stale 120 string
|
|||
ATTRIBUTE Digest-HA1 121 string
|
||||
ATTRIBUTE SIP-AOR 122 string
|
||||
|
||||
# As defined in RFC 4818
|
||||
ATTRIBUTE Delegated-IPv6-Prefix 123 ipv6prefix
|
||||
|
||||
# As defined in draft-sterman-aaa-sip-00.txt
|
||||
ATTRIBUTE Digest-Response 206 string
|
||||
ATTRIBUTE Digest-Attributes 207 octets # stupid format
|
||||
|
|
Loading…
Reference in New Issue