]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: create an abstraction layer for netlink_neigh_update()
authorRenato Westphal <renato@opensourcerouting.org>
Thu, 4 Aug 2016 13:07:32 +0000 (10:07 -0300)
committerDonald Sharp <sharpd@cumulusnetwroks.com>
Mon, 8 Aug 2016 01:05:26 +0000 (21:05 -0400)
We shouldn't have platform-agnostic code (e.g. zebra/interface.c)
calling platform-specific functions (e.g. netlink_neigh_update).

This commit introduces the kernel_neigh_update() function, which then
has to be implemented by all supported platforms. Currently only Linux
implements this function, which is only used by the RTADV code.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
zebra/interface.c
zebra/kernel_null.c
zebra/rt.h
zebra/rt_netlink.c
zebra/rt_netlink.h
zebra/rt_socket.c

index c3ce83dd4aa6028dce5cae47ea48661b438178ba..ca10387a84accfb9f721eb99609b0e9f7f075507 100644 (file)
@@ -39,6 +39,7 @@
 #include "zebra_vrf.h"
 #include "zebra/interface.h"
 #include "zebra/rib.h"
+#include "zebra/rt.h"
 #include "zebra/zserv.h"
 #include "zebra/redistribute.h"
 #include "zebra/debug.h"
@@ -744,8 +745,7 @@ if_nbr_ipv6ll_to_ipv4ll_neigh_update (struct interface *ifp,
   inet_pton (AF_INET, buf, &ipv4_ll);
 
   ipv6_ll_address_to_mac(address, (u_char *)mac);
-  netlink_neigh_update (add ? RTM_NEWNEIGH : RTM_DELNEIGH,
-                        ifp->ifindex, ipv4_ll.s_addr, mac, 6);
+  kernel_neigh_update (add, ifp->ifindex, ipv4_ll.s_addr, mac, 6);
 }
 
 static void
index 184f223971e8d53f2075a7c46d4b846185f3bb26..b90c6f57f9d08ef58b8bf5e89ef721befecea4dc 100644 (file)
@@ -60,7 +60,7 @@ int kernel_address_delete_ipv4 (struct interface *a, struct connected *b)
   return 0;
 }
 
-int netlink_neigh_update (int cmd, int ifindex, uint32_t addr, char *lla, int llalen)
+int kernel_neigh_update (int a, int b, uint32_t c, char *d, int e)
 {
   return 0;
 }
index 331df45c47b47017f2c26956837c93035cc05bdf..4515d56a38f18e0c815f4642ca81ff560d365cd9 100644 (file)
@@ -33,6 +33,7 @@ extern int kernel_delete_ipv4 (struct prefix *, struct rib *);
 extern int kernel_add_route (struct prefix_ipv4 *, struct in_addr *, int, int);
 extern int kernel_address_add_ipv4 (struct interface *, struct connected *);
 extern int kernel_address_delete_ipv4 (struct interface *, struct connected *);
+extern int kernel_neigh_update (int, int, uint32_t, char *, int);
 
 #ifdef HAVE_IPV6
 extern int kernel_add_ipv6 (struct prefix *, struct rib *);
index 9185fbb4ca7d74b71633dd501bf0344b30a2ff2a..b2a54a83acb02bbc7c1cf9c3268d28761402c6c1 100644 (file)
@@ -1973,7 +1973,7 @@ _netlink_route_debug(
     }
 }
 
-int
+static int
 netlink_neigh_update (int cmd, int ifindex, uint32_t addr, char *lla, int llalen)
 {
   struct {
@@ -2392,6 +2392,12 @@ kernel_address_delete_ipv4 (struct interface *ifp, struct connected *ifc)
   return netlink_address (RTM_DELADDR, AF_INET, ifp, ifc);
 }
 
+int
+kernel_neigh_update (int add, int ifindex, uint32_t addr, char *lla, int llalen)
+{
+  return netlink_neigh_update(add ? RTM_NEWNEIGH : RTM_DELNEIGH, ifindex, addr,
+                             lla, llalen);
+}
 
 extern struct thread_master *master;
 
index 5ef5cc37a92cfec2d506c8663978bd4333191657..80d035e839df4001839b67f079e365c8b238e19a 100644 (file)
@@ -41,9 +41,6 @@ nl_msg_type_to_str (uint16_t msg_type);
 extern const char *
 nl_rtproto_to_str (u_char rtproto);
 
-int
-netlink_neigh_update (int cmd, int ifindex, uint32_t addr, char *lla, int llalen);
-
 extern int interface_lookup_netlink (struct zebra_ns *zns);
 extern int netlink_route_read (struct zebra_ns *zns);
 
index abeb87a42729dcff4abd59e37f257f357ab39d02..ffb0d088a71c479cc5b5d416f87587dd6c1e71c8 100644 (file)
@@ -428,3 +428,10 @@ kernel_delete_ipv6 (struct prefix *p, struct rib *rib)
   return route;
 }
 #endif /* HAVE_IPV6 */
+
+int
+kernel_neigh_update (int add, int ifindex, uint32_t addr, char *lla, int llalen)
+{
+  /* TODO */
+  return 0;
+}