]> git.proxmox.com Git - mirror_frr.git/blobdiff - nhrpd/linux.c
Merge pull request #2818 from kssoman/rmap_fix
[mirror_frr.git] / nhrpd / linux.c
index 1e9c69eb86315f6dce3e29abb3863d198bdbb400..46a327b59f21265aa2bac727c951cb18a89a4ebf 100644 (file)
@@ -31,16 +31,17 @@ static int nhrp_socket_fd = -1;
 int os_socket(void)
 {
        if (nhrp_socket_fd < 0)
-               nhrp_socket_fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_NHRP));
+               nhrp_socket_fd =
+                       socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_NHRP));
        return nhrp_socket_fd;
 }
 
-int os_sendmsg(const uint8_t *buf, size_t len, int ifindex, const uint8_t *addr, size_t addrlen)
+int os_sendmsg(const uint8_t *buf, size_t len, int ifindex, const uint8_t *addr,
+              size_t addrlen)
 {
        struct sockaddr_ll lladdr;
        struct iovec iov = {
-               .iov_base = (void*) buf,
-               .iov_len = len,
+               .iov_base = (void *)buf, .iov_len = len,
        };
        struct msghdr msg = {
                .msg_name = &lladdr,
@@ -67,12 +68,12 @@ int os_sendmsg(const uint8_t *buf, size_t len, int ifindex, const uint8_t *addr,
        return 0;
 }
 
-int os_recvmsg(uint8_t *buf, size_t *len, int *ifindex, uint8_t *addr, size_t *addrlen)
+int os_recvmsg(uint8_t *buf, size_t *len, int *ifindex, uint8_t *addr,
+              size_t *addrlen)
 {
        struct sockaddr_ll lladdr;
        struct iovec iov = {
-               .iov_base = buf,
-               .iov_len = *len,
+               .iov_base = buf, .iov_len = *len,
        };
        struct msghdr msg = {
                .msg_name = &lladdr,
@@ -89,7 +90,7 @@ int os_recvmsg(uint8_t *buf, size_t *len, int *ifindex, uint8_t *addr, size_t *a
        *len = r;
        *ifindex = lladdr.sll_ifindex;
 
-       if (*addrlen <= (size_t) lladdr.sll_addr) {
+       if (*addrlen <= (size_t)lladdr.sll_addr) {
                if (memcmp(lladdr.sll_addr, "\x00\x00\x00\x00", 4) != 0) {
                        memcpy(addr, lladdr.sll_addr, lladdr.sll_halen);
                        *addrlen = lladdr.sll_halen;
@@ -105,7 +106,7 @@ static int linux_configure_arp(const char *iface, int on)
 {
        struct ifreq ifr;
 
-       strncpy(ifr.ifr_name, iface, IFNAMSIZ);
+       strncpy(ifr.ifr_name, iface, IFNAMSIZ - 1);
        if (ioctl(nhrp_socket_fd, SIOCGIFFLAGS, &ifr))
                return -1;
 
@@ -138,16 +139,16 @@ static int linux_icmp_redirect_off(const char *iface)
 
 int os_configure_dmvpn(unsigned int ifindex, const char *ifname, int af)
 {
-       int ret = -1;
+       int ret = 0;
 
        switch (af) {
        case AF_INET:
-               ret  = linux_icmp_redirect_off("all");
+               ret |= linux_icmp_redirect_off("all");
                ret |= linux_icmp_redirect_off(ifname);
-               ret |= netlink_configure_arp(ifindex, AF_INET);
-               ret |= linux_configure_arp(ifname, 1);
                break;
        }
+       ret |= linux_configure_arp(ifname, 1);
+       ret |= netlink_configure_arp(ifindex, af);
 
        return ret;
 }