#include <fcntl.h>
#include <errno.h>
#include <linux/if_packet.h>
-#include <sys/ioctl.h>
#include "nhrp_protocol.h"
#include "os.h"
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];
ret |= linux_icmp_redirect_off(ifname);
break;
}
- ret |= linux_configure_arp(ifname, 1);
return ret;
}
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);
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);
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);