diff options
author | Guy Harris <guy@alum.mit.edu> | 2002-05-15 21:40:25 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2002-05-15 21:40:25 +0000 |
commit | 0548e8d0f329f7a631c64f3de968c92a9e4d2768 (patch) | |
tree | 99ffcd3686e1bc35c4f84f2e6f57bced89c8b54f /packet-bgp.c | |
parent | 745bb18d57fcad05c8b9dd53637327097743b028 (diff) |
From Hannes Gredler: labeled unicast support for BGP.
svn path=/trunk/; revision=5481
Diffstat (limited to 'packet-bgp.c')
-rw-r--r-- | packet-bgp.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/packet-bgp.c b/packet-bgp.c index 78390d7432..27d86f5ff9 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.55 2002/02/14 05:25:52 guy Exp $ + * $Id: packet-bgp.c,v 1.56 2002/05/15 21:40:25 guy Exp $ * * Supports: * RFC1771 A Border Gateway Protocol 4 (BGP-4) @@ -340,6 +340,7 @@ mp_addr_to_str (guint16 afi, guint8 safi, tvbuff_t *tvb, gint offset, char *buf, case SAFNUM_UNICAST: case SAFNUM_MULCAST: case SAFNUM_UNIMULC: + case SAFNUM_MPLS_LABEL: length = 4 ; tvb_memcpy(tvb, ip4addr, offset, 4); snprintf(buf, buflen, "%s", ip_to_str(ip4addr)); @@ -412,6 +413,30 @@ decode_prefix_MP(guint16 afi, guint8 safi, tvbuff_t *tvb, gint offset, char *buf case SAFNUM_UNIMULC: length = decode_prefix4(tvb, offset, buf, buflen) - 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); + plen -= (labnum * 3*8); + if (plen < 0 || 32 < plen) { + length = 0 ; + break ; + } + + length = (plen + 7) / 8; + memset(ip4addr, 0, sizeof(ip4addr)); + tvb_memcpy(tvb, ip4addr, offset, length); + if (plen % 8) + ip4addr[length - 1] &= ((0xff00 >> (plen % 8)) & 0xff); + + snprintf(buf,buflen, "Label Stack=%s IP=%s/%d", + lab_stk, + ip_to_str(ip4addr), + plen); + length += (labnum*3) ; + break; + case SAFNUM_LBVPNIP: plen = tvb_get_guint8(tvb,offset) ; |