From: Renato Westphal Date: Thu, 4 Aug 2016 13:07:32 +0000 (-0300) Subject: zebra: create an abstraction layer for netlink_neigh_update() X-Git-Tag: frr-2.0-rc1~402 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=6b8a5694d3f138f0d32026d56d24a129a21c5da8;p=mirror%2Ffrr.git zebra: create an abstraction layer for netlink_neigh_update() 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 --- diff --git a/zebra/interface.c b/zebra/interface.c index c3ce83dd4a..ca10387a84 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -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 diff --git a/zebra/kernel_null.c b/zebra/kernel_null.c index 184f223971..b90c6f57f9 100644 --- a/zebra/kernel_null.c +++ b/zebra/kernel_null.c @@ -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; } diff --git a/zebra/rt.h b/zebra/rt.h index 331df45c47..4515d56a38 100644 --- a/zebra/rt.h +++ b/zebra/rt.h @@ -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 *); diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index 9185fbb4ca..b2a54a83ac 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -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; diff --git a/zebra/rt_netlink.h b/zebra/rt_netlink.h index 5ef5cc37a9..80d035e839 100644 --- a/zebra/rt_netlink.h +++ b/zebra/rt_netlink.h @@ -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); diff --git a/zebra/rt_socket.c b/zebra/rt_socket.c index abeb87a427..ffb0d088a7 100644 --- a/zebra/rt_socket.c +++ b/zebra/rt_socket.c @@ -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; +}