linux-cp: handle AF_BRIDGE neighbors

Type: improvement

VPP crashes when a linux-cp tap is added to a bridge on the host system
because rtnl_neigh_get_dst() returns NULL for the neighbor message that
is sent by the kernel.

Check for NULL before trying to use the address from a neighbor in a
netlink message.

Signed-off-by: Matthew Smith <mgsmith@netgate.com>
Change-Id: I8a683d815a09620df9c0cc76e18df39828428e2c
Signed-off-by: Matthew Smith <mgsmith@netgate.com>
diff --git a/src/plugins/linux-cp/lcp_router.c b/src/plugins/linux-cp/lcp_router.c
index acf0a03..04a6ba0 100644
--- a/src/plugins/linux-cp/lcp_router.c
+++ b/src/plugins/linux-cp/lcp_router.c
@@ -710,8 +710,11 @@
     {
       ip_address_t nh;
       int rv;
+      struct nl_addr *rna;
 
-      lcp_router_mk_addr (rtnl_neigh_get_dst (rn), &nh);
+      if ((rna = rtnl_neigh_get_dst (rn)) == NULL)
+	return;
+      lcp_router_mk_addr (rna, &nh);
 
       if (ip46_address_is_multicast (&ip_addr_46 (&nh)))
 	{
@@ -759,8 +762,11 @@
       struct nl_addr *ll;
       ip_address_t nh;
       int state;
+      struct nl_addr *rna;
 
-      lcp_router_mk_addr (rtnl_neigh_get_dst (rn), &nh);
+      if ((rna = rtnl_neigh_get_dst (rn)) == NULL)
+	return;
+      lcp_router_mk_addr (rna, &nh);
 
       if (ip46_address_is_multicast (&ip_addr_46 (&nh)))
 	{