Fix FreeBSD issues
authorLive User <joseph.c.lehner@gmail.com>
Sat, 19 Nov 2016 14:54:02 +0000 (14:54 +0000)
committerLive User <joseph.c.lehner@gmail.com>
Sat, 19 Nov 2016 14:54:02 +0000 (14:54 +0000)
ethsock.c
nmrpd.h

index f8fdf236884a398934ec8af5ccd02534106e3deb..d086e03da59b0a3ae669a3faeea8a39d86299cc4 100644 (file)
--- a/ethsock.c
+++ b/ethsock.c
@@ -671,6 +671,9 @@ static inline void set_addr(void *p, uint32_t addr)
        struct sockaddr_in* sin = p;
        sin->sin_family = AF_INET;
        sin->sin_addr.s_addr = addr;
+#ifdef NMRPFLASH_BSD
+       ((struct sockaddr*)p)->sa_len = sizeof(struct sockaddr_in);
+#endif
 }
 
 #ifndef NMRPFLASH_WINDOWS
@@ -745,12 +748,12 @@ int ethsock_ip_add(struct ethsock *sock, uint32_t ipaddr, uint32_t ipmask, struc
        }
 #else // NMRPFLASH_OSX (or any other BSD)
        struct ifaliasreq ifra;
+       memset(&ifra, 0, sizeof(ifra));
        strncpy(ifra.ifra_name, sock->intf, IFNAMSIZ);
 
        set_addr(&ifra.ifra_addr, ipaddr);
        set_addr(&ifra.ifra_mask, ipmask);
        //set_addr(&ifra.ifra_broadaddr, (ipaddr & ipmask) | ~ipmask);
-       memset(&ifra.ifra_broadaddr, 0, sizeof(ifra.ifra_broadaddr));
 
        if (ioctl(fd, add ? SIOCAIFADDR : SIOCDIFADDR, &ifra) != 0) {
                perror(add ? "ioctl(SIOCAIFADDR)" : "ioctl(SIOCDIFADDR)");
diff --git a/nmrpd.h b/nmrpd.h
index af9699ac3a2713a753c08be73aefc700c56e25fd..ce424e3fe6a1a1788ce0c3b484f8552d3d8d2136 100644 (file)
--- a/nmrpd.h
+++ b/nmrpd.h
 #include <stdbool.h>
 
 #if defined(_WIN32) || defined(_WIN64)
-#define NMRPFLASH_WINDOWS
-#elif defined(__linux__)
-#define NMRPFLASH_LINUX
-#elif defined(__APPLE__) && defined(__MACH__)
-#define NMRPFLASH_OSX
-#elif defined(__unix__)
-#define NMRPFLASH_UNIX
-#warning "nmrpflash is not fully supported on your operating system"
+#      define NMRPFLASH_WINDOWS
+#else
+#      define NMRPFLASH_UNIX
+#      if defined(__linux__)
+#              define NMRPFLASH_LINUX
+#      elif defined(__APPLE__) && defined(__MACH__)
+#              define NMRPFLASH_OSX
+#              define NMRPFLASH_BSD
+#      elif defined(__unix__)
+#              if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__OpenBSD__)
+#                      define NMRPFLASH_BSD
+#              else
+#                      warning "nmrpflash is not fully supported on your operating system"
+#              endif
+#      endif
 #endif
 
 #ifndef NMRPFLASH_WINDOWS