summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Lambert <lambert@psc.edu>2009-07-28 11:26:14 -0400
committerPaul Jakma <paul@quagga.net>2009-07-30 15:55:14 +0100
commit66bed4f4f0235c1eb6edb0a2f6bd4aaf47e5a7f8 (patch)
tree17488e5dc6eb4cc575f2aa006bfd87ec9c815222
parent3de4277ba9b25ff03710d7c004bf708accffd5c7 (diff)
bgpd: Workaround for invalid MBGP next hop
* bgp_attr.c: (bgp_mp_reach_parse) There are some interoperability issues for MBGP (particularly IPv4 multicast NLRI) between different implementations. In order to get some next hops to install correctly in the BGP tables, it appears to be necessary to copy the multiprotocol next hop into the base next hop field. This is related to differences in RFC 2283 and RFC 2858.
-rw-r--r--bgpd/bgp_attr.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
index a664858c..5e7536ae 100644
--- a/bgpd/bgp_attr.c
+++ b/bgpd/bgp_attr.c
@@ -1333,6 +1333,9 @@ bgp_mp_reach_parse (struct peer *peer, bgp_size_t length, struct attr *attr,
{
case 4:
stream_get (&attre->mp_nexthop_global_in, s, 4);
+ /* Probably needed for RFC 2283 */
+ if (attr->nexthop.s_addr == 0)
+ memcpy(&attr->nexthop.s_addr, &attre->mp_nexthop_global_in, 4);
break;
case 12:
{