* src/linux/net.h is used by one .c file only. No need for a separate file.
authorBernd Petrovitsch <bernd@firmix.at>
Thu, 6 Dec 2007 21:01:14 +0000 (21:01 +0000)
committerBernd Petrovitsch <bernd@firmix.at>
Thu, 6 Dec 2007 21:01:14 +0000 (21:01 +0000)
src/bsd/net.c
src/bsd/net.h [deleted file]

index 56af635..b972de4 100644 (file)
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net.c,v 1.43 2007/12/02 19:00:28 bernd67 Exp $
+ * $Id: net.c,v 1.44 2007/12/06 21:01:14 bernd67 Exp $
  */
 
-#include "defs.h"
-#include "net_os.h"
-#include "parser.h" /* dnc: needed for call to packet_parser() */
-#include "net.h"
+#include "../defs.h"
+#include "../net_os.h"
+#include "../parser.h" /* dnc: needed for call to packet_parser() */
+#include "../olsr_protocol.h"
 
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <net/if.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <syslog.h>
+#include <netinet/in.h>
 #include <net/if.h>
 
 #ifdef __NetBSD__
-#include <sys/param.h>
 #include <net/if_ether.h>
 #endif
 
@@ -305,51 +315,51 @@ gethemusocket(struct sockaddr_in *pin)
 
 
 int
-getsocket(struct sockaddr *sa, int bufspace, char *int_name)
+getsocket(int bufspace, char *int_name)
 {
-  struct sockaddr_in *sin = (struct sockaddr_in *)sa;
-  int sock, on = 1;
-
-  if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) 
+  struct sockaddr_in sin;
+  int on;
+  int sock = socket(AF_INET, SOCK_DGRAM, 0);
+  if (sock < 0) 
     {
       perror("socket");
       syslog(LOG_ERR, "socket: %m");
-      return (-1);
+      return -1;
     }
 
+  on = 1;
   if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &on, sizeof (on)) < 0)
     {
       perror("setsockopt");
       syslog(LOG_ERR, "setsockopt SO_BROADCAST: %m");
       close(sock);
-      return (-1);
+      return -1;
     }
 
   if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0) 
     {
       perror("SO_REUSEADDR failed");
       close(sock);
-      return (-1);
+      return -1;
     }
 
   if (setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on)) < 0) 
     {
       perror("SO_REUSEPORT failed");
       close(sock);
-      return (-1);
+      return -1;
     }
 
   if (setsockopt(sock, IPPROTO_IP, IP_RECVIF, &on, sizeof(on)) < 0) 
     {
       perror("IP_RECVIF failed");
       close(sock);
-      return (-1);
+      return -1;
     }
 
   for (on = bufspace; ; on -= 1024) 
     {
-      if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
-                    &on, sizeof (on)) == 0)
+      if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &on, sizeof (on)) == 0)
        break;
       if (on <= 8*1024) 
        {
@@ -359,36 +369,45 @@ getsocket(struct sockaddr *sa, int bufspace, char *int_name)
        }
     }
 
-  if (bind(sock, (struct sockaddr *)sin, sizeof (*sin)) < 0) 
+  memset(&sin, 0, sizeof (sin));
+  sin.sin_family = AF_INET;
+  sin.sin_port = htons(OLSRPORT);
+  sin.sin_addr.s_addr = INADDR_ANY;
+  if (bind(sock, (struct sockaddr *)&sin, sizeof(sin)) < 0) 
     {
       perror("bind");
       syslog(LOG_ERR, "bind: %m");
       close(sock);
-      return (-1);
+      return -1;
     }
 
-  if (fcntl(sock, F_SETFL, O_NONBLOCK) == -1)
-    syslog(LOG_ERR, "fcntl O_NONBLOCK: %m\n");
-
+  on = fcntl(sock, F_GETFL);
+  if (on == -1) {
+      syslog(LOG_ERR, "fcntl (F_GETFL): %m\n");
+  } else {
+      if (fcntl(sock, F_SETFL, on|O_NONBLOCK) == -1) {
+          syslog(LOG_ERR, "fcntl O_NONBLOCK: %m\n");
+      }
+  }
   return (sock);
 }
 
 int getsocket6(struct sockaddr_in6 *sin, int bufspace, char *int_name)
 {
-  int sock, on = 1;
+  int on;
+  int sock = socket(AF_INET6, SOCK_DGRAM, 0);
 
-  if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) 
+  if (sock < 0) 
     {
       perror("socket");
       syslog(LOG_ERR, "socket: %m");
-      return (-1);
+      return -1;
     }
 
   for (on = bufspace; ; on -= 1024) 
     {
-      if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
-                    &on, sizeof (on)) == 0)
-       break;
+      if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &on, sizeof (on)) == 0)
+          break;
       if (on <= 8*1024) 
        {
          perror("setsockopt");
@@ -401,27 +420,30 @@ int getsocket6(struct sockaddr_in6 *sin, int bufspace, char *int_name)
     {
       perror("SO_REUSEADDR failed");
       close(sock);
-      return (-1);
+      return -1;
     }
 
   if (setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on)) < 0) 
     {
       perror("SO_REUSEPORT failed");
-      return (-1);
+      close(sock);
+      return -1;
     }
 
 #ifdef IPV6_RECVPKTINFO
   if (setsockopt(sock, IPPROTO_IPV6, IPV6_RECVPKTINFO, &on, sizeof(on)) < 0)
     {
       perror("IPV6_RECVPKTINFO failed");
-      return (-1);
+      close(sock);
+      return -1;
     }
 #elif defined IPV6_PKTINFO
-    if (setsockopt(sock, IPPROTO_IPV6, IPV6_PKTINFO, &on, sizeof(on)) < 0)
-      {
-       perror("IPV6_PKTINFO failed");
-       return (-1);
-      }
+  if (setsockopt(sock, IPPROTO_IPV6, IPV6_PKTINFO, &on, sizeof(on)) < 0)
+    {
+      perror("IPV6_PKTINFO failed");
+      close(sock);
+      return -1;
+    }
 #endif
 
   if (bind(sock, (struct sockaddr *)sin, sizeof (*sin)) < 0) 
@@ -429,13 +451,18 @@ int getsocket6(struct sockaddr_in6 *sin, int bufspace, char *int_name)
       perror("bind");
       syslog(LOG_ERR, "bind: %m");
       close(sock);
-      return (-1);
+      return -1;
     }
 
-  if (fcntl(sock, F_SETFL, O_NONBLOCK) == -1)
-    syslog(LOG_ERR, "fcntl O_NONBLOCK: %m\n");
-
-  return (sock);
+  on = fcntl(sock, F_GETFL);
+  if (on == -1) {
+      syslog(LOG_ERR, "fcntl (F_GETFL): %m\n");
+  } else {
+      if (fcntl(sock, F_SETFL, on|O_NONBLOCK) == -1) {
+          syslog(LOG_ERR, "fcntl O_NONBLOCK: %m\n");
+      }
+  }
+  return sock;
 }
 
 
diff --git a/src/bsd/net.h b/src/bsd/net.h
deleted file mode 100644 (file)
index 90c01d3..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004, Andreas T√łnnesen(andreto@olsr.org)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
- * are met:
- *
- * * Redistributions of source code must retain the above copyright 
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright 
- *   notice, this list of conditions and the following disclaimer in 
- *   the documentation and/or other materials provided with the 
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its 
- *   contributors may be used to endorse or promote products derived 
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- * $Id: net.h,v 1.5 2007/11/28 10:09:03 bernd67 Exp $
- */
-
-
-#ifndef _OLSR_NET_LINUX
-#define _OLSR_NET_LINUX
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <net/if.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <syslog.h>
-#include <netinet/in.h>
-#include "../olsr_protocol.h"
-
-#endif