]> git.proxmox.com Git - mirror_frr.git/blobdiff - nhrpd/linux.c
Merge pull request #6048 from sarav511/joinsup
[mirror_frr.git] / nhrpd / linux.c
index 75a16eab37fb9beb55ff1d6346682bdae2a2ec02..59c82b1c554ca8adba51c5c9377c4da4bdaa9a5c 100644 (file)
@@ -7,6 +7,10 @@
  * (at your option) any later version.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <fcntl.h>
 #include <stdio.h>
 #include <unistd.h>
@@ -21,6 +25,7 @@
 #include <linux/ip.h>
 #include <linux/if_arp.h>
 #include <linux/if_tunnel.h>
+#include <linux/limits.h>
 
 #include "nhrp_protocol.h"
 #include "os.h"
@@ -31,16 +36,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 +73,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 +95,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 +111,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;
 
@@ -122,10 +128,11 @@ static int linux_configure_arp(const char *iface, int on)
 
 static int linux_icmp_redirect_off(const char *iface)
 {
-       char fname[256];
+       char fname[PATH_MAX];
        int fd, ret = -1;
 
-       sprintf(fname, "/proc/sys/net/ipv4/conf/%s/send_redirects", iface);
+       snprintf(fname, sizeof(fname),
+                "/proc/sys/net/ipv4/conf/%s/send_redirects", iface);
        fd = open(fname, O_WRONLY);
        if (fd < 0)
                return -1;