diff options
author | Guy Harris <guy@alum.mit.edu> | 2004-01-23 19:19:44 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2004-01-23 19:19:44 +0000 |
commit | 9ee952fb770e0da39dd21f18638832cb872fbf74 (patch) | |
tree | d1a2febe469a916885d518165b0a72e017b76c5a /packet-bgp.c | |
parent | d706864ceb915f23a29a5168e41a2f1453e14b7e (diff) |
From Akira Endoh: support for labeled IPv6 unicast in the MP-BGP
dissector.
svn path=/trunk/; revision=9812
Diffstat (limited to 'packet-bgp.c')
-rw-r--r-- | packet-bgp.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/packet-bgp.c b/packet-bgp.c index 4db05f3f96..28053b02f7 100644 --- a/packet-bgp.c +++ b/packet-bgp.c @@ -2,7 +2,7 @@ * Routines for BGP packet dissection. * Copyright 1999, Jun-ichiro itojun Hagino <itojun@itojun.org> * - * $Id: packet-bgp.c,v 1.84 2004/01/06 02:29:36 guy Exp $ + * $Id: packet-bgp.c,v 1.85 2004/01/23 19:19:44 guy Exp $ * * Supports: * RFC1771 A Border Gateway Protocol 4 (BGP-4) @@ -553,6 +553,7 @@ mp_addr_to_str (guint16 afi, guint8 safi, tvbuff_t *tvb, gint offset, GString *b case SAFNUM_UNICAST: case SAFNUM_MULCAST: case SAFNUM_UNIMULC: + case SAFNUM_MPLS_LABEL: length = 16 ; tvb_memcpy(tvb, ip6addr.u6_addr.u6_addr8,offset, 16); g_string_sprintf(buf, "%s", ip6_to_str(&ip6addr)); @@ -802,6 +803,32 @@ decode_prefix_MP(proto_tree *tree, int hf_addr4, int hf_addr6, return -1; break; + case SAFNUM_MPLS_LABEL: + plen = tvb_get_guint8(tvb, offset); + labnum = decode_MPLS_stack(tvb, offset + 1, lab_stk, sizeof(lab_stk)); + + offset += (1 + labnum * 3); + if (plen <= (labnum * 3*8)) { + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s IPv6 prefix length %u invalid", tag, plen); + return -1; + } + plen -= (labnum * 3*8); + + length = (plen + 7) / 8; + memset(ip6addr.u6_addr.u6_addr8, 0, 16); + tvb_memcpy(tvb, ip6addr.u6_addr.u6_addr8, offset, length); + if (plen % 8) + ip6addr.u6_addr.u6_addr8[length - 1] &= ((0xff00 >> (plen % 8)) & 0xff); + + ti = proto_tree_add_text(tree, tvb, start_offset, + (offset + length) - start_offset, + "Label Stack=%s, IP=%s/%u", + lab_stk, + ip6_to_str(&ip6addr), plen); + total_length = (1 + labnum * 3) + length; + break; + case SAFNUM_LAB_VPNUNICAST: case SAFNUM_LAB_VPNMULCAST: case SAFNUM_LAB_VPNUNIMULC: |