Commit 64cf11f5 authored by Ondrej Zajicek's avatar Ondrej Zajicek
Browse files

Fixes BGPv6 bug - missing endianity conversion.

Also removes code skipping SNPAs
(obsoleted by newer RFCs, should be ignored).
parent f307842a
Loading
Loading
Loading
Loading
+7 −12
Original line number Diff line number Diff line
@@ -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))
	{