diff options
author | Michael Lambert <lambert@psc.edu> | 2009-07-28 11:26:14 -0400 |
---|---|---|
committer | Paul Jakma <paul@quagga.net> | 2009-07-30 15:55:14 +0100 |
commit | 66bed4f4f0235c1eb6edb0a2f6bd4aaf47e5a7f8 (patch) | |
tree | 17488e5dc6eb4cc575f2aa006bfd87ec9c815222 /bgpd/bgp_attr.c | |
parent | 3de4277ba9b25ff03710d7c004bf708accffd5c7 (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.
Diffstat (limited to 'bgpd/bgp_attr.c')
-rw-r--r-- | bgpd/bgp_attr.c | 3 |
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: { |