bgpd: bgpd-set-v4-nexthop-for-v6-peering.patch

BGP: While advertising v4 prefixes over a v6 session, set the correct v4 nexthop.

ISSUE:

For an IPv6 peer, BGPd sets the local router-id as the next-hop's v4 address.
This is incorrect as the router-id may not be a valid next-hop to be included
in UPDATEs that contain v4 prefixes.

PATCH:

Set the v4 address in the next-hop field based on the interface that the
peering is on (directly connected interface or loopback).

Signed-off-by: Pradosh Mohapatra <pmohapat at cumulusnetworks.com>
Reviewed-by: Scott Feldman <sfeldma at cumulusnetworks.com>
Acked-by: Feng Lu <lu.feng@6wind.com>
diff --git a/lib/prefix.h b/lib/prefix.h
index 7f0d360..8c8992e 100644
--- a/lib/prefix.h
+++ b/lib/prefix.h
@@ -196,4 +196,14 @@
 
 extern int all_digit (const char *);
 
+static inline int ipv4_martian (struct in_addr *addr)
+{
+  in_addr_t ip = addr->s_addr;
+
+  if (IPV4_NET0(ip) || IPV4_NET127(ip) || IPV4_CLASS_DE(ip)) {
+    return 1;
+  }
+  return 0;
+}
+
 #endif /* _ZEBRA_PREFIX_H */