]> git.puffer.fish Git - matthieu/frr.git/commitdiff
nhrpd: unset noarp flag using a zapi message
authorLouis Scalbert <louis.scalbert@6wind.com>
Thu, 11 Jan 2024 10:25:36 +0000 (11:25 +0100)
committerLouis Scalbert <louis.scalbert@6wind.com>
Wed, 24 Jan 2024 09:05:29 +0000 (10:05 +0100)
Unset the IFF_NOARP interface flag using a ZAPI message. It removes the
dependency to if.h headers.

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
nhrpd/linux.c
nhrpd/nhrp_interface.c
nhrpd/nhrp_route.c
nhrpd/nhrpd.h

index b25df9ff2fd23b1a2192bc4ec76df40357e42584..e4df0dd9640d463b7be5ef0038736be86ab5ba0a 100644 (file)
@@ -8,7 +8,6 @@
 #include <fcntl.h>
 #include <errno.h>
 #include <linux/if_packet.h>
-#include <sys/ioctl.h>
 
 #include "nhrp_protocol.h"
 #include "os.h"
@@ -98,25 +97,6 @@ int os_recvmsg(uint8_t *buf, size_t *len, int *ifindex, uint8_t *addr,
        return 0;
 }
 
-static int linux_configure_arp(const char *iface, int on)
-{
-       struct ifreq ifr;
-
-       strlcpy(ifr.ifr_name, iface, IFNAMSIZ);
-       if (ioctl(nhrp_socket_fd, SIOCGIFFLAGS, &ifr))
-               return -1;
-
-       if (on)
-               ifr.ifr_flags &= ~IFF_NOARP;
-       else
-               ifr.ifr_flags |= IFF_NOARP;
-
-       if (ioctl(nhrp_socket_fd, SIOCSIFFLAGS, &ifr))
-               return -1;
-
-       return 0;
-}
-
 static int linux_icmp_redirect_off(const char *iface)
 {
        char fname[PATH_MAX];
@@ -144,7 +124,6 @@ int os_configure_dmvpn(unsigned int ifindex, const char *ifname, int af)
                ret |= linux_icmp_redirect_off(ifname);
                break;
        }
-       ret |= linux_configure_arp(ifname, 1);
 
        return ret;
 }
index b82743f001f9d76ce31ce372e4fa40d0080bfa08..7d0ab9762f7158151c705c774ec6b62576f6b858 100644 (file)
@@ -351,6 +351,7 @@ void nhrp_interface_update(struct interface *ifp)
                if (!if_ad->configured) {
                        os_configure_dmvpn(ifp->ifindex, ifp->name,
                                           afi2family(afi));
+                       nhrp_interface_update_arp(ifp, true);
                        nhrp_send_zebra_configure_arp(ifp, afi2family(afi));
                        if_ad->configured = 1;
                        nhrp_interface_update_address(ifp, afi, 1);
index c05a8a3ba25dd64679e703b6c20737ca94b66a5e..fd9090bd6e743780c64bef8ca0c04fea5b63d290 100644 (file)
@@ -452,6 +452,12 @@ int nhrp_send_zebra_gre_request(struct interface *ifp)
        return zclient_send_zebra_gre_request(zclient, ifp);
 }
 
+void nhrp_interface_update_arp(struct interface *ifp, bool arp_enable)
+{
+       zclient_interface_set_arp(zclient, ifp, arp_enable);
+}
+
+
 void nhrp_zebra_terminate(void)
 {
        zclient_register_neigh(zclient, VRF_DEFAULT, AFI_IP, false);
index 1421f0fc387a7bd200760fa1f7a5068b67b1426e..50653c784acce3c95a1cf6f94667265c7dad2c20 100644 (file)
@@ -362,6 +362,7 @@ int sock_open_unix(const char *path);
 
 void nhrp_interface_init(void);
 void nhrp_interface_update(struct interface *ifp);
+void nhrp_interface_update_arp(struct interface *ifp, bool arp_enable);
 void nhrp_interface_update_mtu(struct interface *ifp, afi_t afi);
 void nhrp_interface_update_nbma(struct interface *ifp,
                                struct nhrp_gre_info *gre_info);