From 64cf11f544257cae443d899111be1299b1ec0684 Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Thu, 23 Apr 2009 23:15:07 +0200 Subject: Fixes BGPv6 bug - missing endianity conversion. Also removes code skipping SNPAs (obsoleted by newer RFCs, should be ignored). --- proto/bgp/packets.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) (limited to 'proto/bgp/packets.c') diff --git a/proto/bgp/packets.c b/proto/bgp/packets.c index ce3d71e..1370ee7 100644 --- a/proto/bgp/packets.c +++ b/proto/bgp/packets.c @@ -777,19 +777,14 @@ bgp_do_rx_update(struct bgp_conn *conn, /* Create fake NEXT_HOP attribute */ if (len < 1 || (*x != 16 && *x != 32) || len < *x + 2) goto bad; - memcpy(bgp_attach_attr_wa(&a0->eattrs, bgp_linpool, BA_NEXT_HOP, 16), x+1, 16); - len -= *x + 2; - x += *x + 1; - /* Ignore SNPA info */ - i = *x++; - while (i--) - { - if (len < 1 || len < 1 + *x) - goto bad; - len -= *x + 1; - x += *x + 1; - } + byte *nh = bgp_attach_attr_wa(&a0->eattrs, bgp_linpool, BA_NEXT_HOP, 16); + memcpy(nh, x+1, 16); + ipa_ntoh(*(ip_addr *)nh); + + /* Also ignore one reserved byte */ + len -= *x + 2; + x += *x + 2; if (bgp_get_nexthop(p, a0)) { -- cgit v1.2.3