New "unix" subdirectory for Unix-like OSes. Initial BSD port. Use a
authorThomas Lopatic <thomas@lopatic.de>
Fri, 5 Nov 2004 02:06:14 +0000 (02:06 +0000)
committerThomas Lopatic <thomas@lopatic.de>
Fri, 5 Nov 2004 02:06:14 +0000 (02:06 +0000)
single makefile for all three ports.

19 files changed:
Makefile
src/bsd/apm.c [new file with mode: 0644]
src/bsd/kernel_routes.c [new file with mode: 0644]
src/bsd/net.c [new file with mode: 0644]
src/bsd/net.h [new file with mode: 0644]
src/defs.h
src/interfaces.h
src/ipc_frontend.c
src/ipc_frontend.h
src/link_set.c
src/main.c
src/net.c
src/olsr.h
src/process_package.c
src/process_routes.c
src/routing_table.h
src/scheduler.c
src/unix/ifnet.c [moved from src/linux/ifnet.c with 98% similarity]
src/unix/log.c [moved from src/linux/log.c with 96% similarity]

index a54bfae..1415190 100644 (file)
--- a/Makefile
+++ b/Makefile
-
 #
-# olsr.org makefile
-# $Id: Makefile,v 1.11 2004/11/04 20:25:05 kattemat Exp $
+# OLSR ad-hoc routing table management protocol
+# Copyright (C) 2003-2004 Andreas Tønnesen (andreto@ifi.uio.no)
+#
+# This file is part of the olsr.org OLSR daemon.
+#
+# olsr.org is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# olsr.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with olsr.org; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+#
+# $Id: Makefile,v 1.12 2004/11/05 02:06:13 tlopatic Exp $
 #
 
-CC ?= gcc
-MAKE ?= make
+OS =           linux
+#OS =          fbsd
+#OS =          win32
 
-CFLAGS ?= -Isrc -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -g #-pg -DDEBUG #-march=i686
-LIBS = -lpthread -lm -ldl
-INSTALL_PREFIX ?=
-STRIP ?= strip
-BISON ?= bison
-FLEX ?= flex
-CFGDIR = src/cfgparser
+CC ?=          gcc
 
-DEPFILE = .linux-depend
-DEPEND= makedepend -Dlinux -Y -f $(DEPFILE) -- $(CFLAGS)
+PREFIX ?=
 
-SRCS= $(wildcard src/*.c) \
-      $(wildcard src/linux/*.c) \
-      $(CFGDIR)/oparse.c $(CFGDIR)/oscan.c $(CFGDIR)/olsrd_conf.c
+STRIP ?=       strip
 
-HDRS= $(wildcard src/*.h) \
-      $(wildcard src/linux/*.h) \
-      $(CFGDIR)/oparse.h $(CFGDIR)/olsrd_conf.h
+BISON ?=       bison
+FLEX ?=                flex
+CFGDIR =       src/cfgparser
 
-OBJS= $(patsubst %.c,%.o,$(wildcard src/*.c)) \
-      $(patsubst %.c,%.o,$(wildcard src/linux/*.c)) \
-      $(CFGDIR)/oparse.o $(CFGDIR)/oscan.o $(CFGDIR)/olsrd_conf.o
+DEPFILE =      .depend
+DEPEND =       makedepend -f $(DEPFILE) -- $(CFLAGS)
 
+SRCS =         $(wildcard src/*.c) \
+               $(CFGDIR)/oparse.c $(CFGDIR)/oscan.c $(CFGDIR)/olsrd_conf.c
 
-all:   olsrd
+HDRS =         $(wildcard src/*.h) \
+               $(CFGDIR)/oparse.h $(CFGDIR)/olsrd_conf.h
 
-olsrd: $(OBJS)
-       $(CC) $(LIBS) -o bin/$@ $(OBJS)
+OBJS =         $(patsubst %.c,%.o,$(wildcard src/*.c)) \
+               $(CFGDIR)/oparse.o $(CFGDIR)/oscan.o $(CFGDIR)/olsrd_conf.o
 
-depend:
-       rm -f $(DEPFILE)
-       $(MAKE) $(DEPFILE)
+ifeq ($(OS), linux)
 
+SRCS +=        $(wildcard src/linux/*.c) $(wildcard src/unix/*.c)
 
-$(DEPFILE):
-       @echo '# olsrd dependency file. AUTOGENERATED' > $(DEPFILE)
-       $(DEPEND) -- $(SRCS) >&/dev/null
+HDRS +=                $(wildcard src/linux/*.h) $(wildcard src/unix/*.h)
+
+OBJS +=                $(patsubst %.c,%.o,$(wildcard src/linux/*.c)) \
+               $(patsubst %.c,%.o,$(wildcard src/unix/*.c))
+
+CFLAGS ?=      -Isrc -Wall -Wmissing-prototypes -Wstrict-prototypes \
+               -O2 -g -Dlinux #-pg -DDEBUG #-march=i686
+
+LIBS =         -lpthread -lm -ldl
+
+endif
+
+ifeq ($(OS), fbsd)
+
+SRCS +=                $(wildcard src/bsd/*.c) $(wildcard src/unix/*.c)
+
+HDRS +=                $(wildcard src/bsd/*.h) $(wildcard src/unix/*.h)
+
+OBJS +=                $(patsubst %.c,%.o,$(wildcard src/bsd/*.c)) \
+               $(patsubst %.c,%.o,$(wildcard src/unix/*.c))
 
+CFLAGS ?=      -Isrc -Wall -Wmissing-prototypes -Wstrict-prototypes \
+               -O2 -g
 
-$(CFGDIR)/oparse.c: $(CFGDIR)/oparse.y $(CFGDIR)/olsrd_conf.h
-       $(BISON) -d -o$(CFGDIR)/oparse.c $(CFGDIR)/oparse.y
+LIBS =         -pthread -lm
 
-$(CFGDIR)/oparse.h: $(CFGDIR)/oparse.c
+endif
 
+ifeq ($(OS), win32)
 
-$(CFGDIR)/oscan.c: $(CFGDIR)/oscan.lex $(CFGDIR)/oparse.h $(CFGDIR)/olsrd_conf.h
-       $(FLEX) -o$(CFGDIR)/oscan.c $(CFGDIR)/oscan.lex
+SRCS +=                $(wildcard src/win32/*.c)
+
+HDRS +=                $(wildcard src/win32/*.h)
+
+OBJS +=                $(patsubst %.c,%.o,$(wildcard src/win32/*.c))
+
+CFLAGS ?=      -Isrc -Isrc/win32 -Wall -Wmissing-prototypes \
+               -Wstrict-prototypes -mno-cygwin -O2 -g -DWIN32
+
+LIBS =         -mno-cygwin -lws2_32 -liphlpapi
+
+endif
+
+all:           olsrd
+
+olsrd:         $(OBJS)
+               $(CC) -o bin/$@ $(OBJS) $(LIBS)
+
+depend:                $(DEPFILE)
+
+$(DEPFILE):
+               @echo '# olsrd dependency file. AUTOGENERATED' > $(DEPFILE)
+               $(DEPEND) -- $(SRCS)
+
+$(CFGDIR)/oparse.c: \
+               $(CFGDIR)/oparse.y $(CFGDIR)/olsrd_conf.h
+               $(BISON) -d -o$(CFGDIR)/oparse.c $(CFGDIR)/oparse.y
+
+$(CFGDIR)/oparse.h: \
+               $(CFGDIR)/oparse.c
+
+$(CFGDIR)/oscan.c: \
+               $(CFGDIR)/oscan.lex $(CFGDIR)/oparse.h $(CFGDIR)/olsrd_conf.h
+               $(FLEX) -o$(CFGDIR)/oscan.c $(CFGDIR)/oscan.lex
 
 libs: 
-       for i in lib/*; do \
-               $(MAKE) -C $$i; \
-       done; 
+               for i in lib/*; do \
+                       $(MAKE) -C $$i; \
+               done; 
 
 clean_libs: 
-       for i in lib/*; do \
-               $(MAKE) -C $$i clean; \
-       done; 
+               for i in lib/*; do \
+                       $(MAKE) -C $$i clean; \
+               done; 
+
+.PHONY:                clean
 
-.PHONY: clean
 clean:
-       rm -f $(OBJS)
+               rm -f $(OBJS)
 
 uberclean:
-       rm -f $(OBJS) $(DEPFILE) 
-       rm -f $(CFGDIR)/oscan.c $(CFGDIR)/oparse.h $(CFGDIR)/oparse.c
-       rm -f bin/olsrd
-       rm -f src/*~ src/linux/*~ src/cfgparser/*~
+               rm -f $(OBJS) $(DEPFILE) 
+               rm -f $(CFGDIR)/oscan.c $(CFGDIR)/oparse.h $(CFGDIR)/oparse.c
+               rm -f bin/olsrd
+               rm -f src/*~ src/linux/*~ src/unix/*~ src/win32/*~
+               rm -f src/bsd/*~ src/cfgparser/*~
 
 install_libs:
-       for i in lib/*; do \
-               $(MAKE) -C $$i LIBDIR=$(INSTALL_PREFIX)/usr/lib install; \
-       done;   
-
+               for i in lib/*; do \
+                       $(MAKE) -C $$i LIBDIR=$(PREFIX)/usr/lib install; \
+               done;   
 
 install_bin:
-       $(STRIP) bin/olsrd
-       install -D -m 755 bin/olsrd $(INSTALL_PREFIX)/usr/sbin/olsrd
-
-install: install_bin
-       @echo olsrd uses the configfile $(INSTALL_PREFIX)/etc/olsr.conf
-       @echo a default configfile. A sample configfile
-       @echo can be installed
-       mkdir -p $(INSTALL_PREFIX)/etc
-       cp -i files/olsrd.conf.default $(INSTALL_PREFIX)/etc/olsrd.conf
-       @echo -------------------------------------------
-       @echo Edit $(INSTALL_PREFIX)/etc/olsrd.conf before running olsrd!!
-       @echo -------------------------------------------
-       mkdir -p $(INSTALL_PREFIX)/usr/share/man/man8/
-       cp files/olsrd.8.gz $(INSTALL_PREFIX)/usr/share/man/man8/olsrd.8.gz
-
-
-sinclude $(DEPFILE)
+               $(STRIP) bin/olsrd
+               install -D -m 755 bin/olsrd $(PREFIX)/usr/sbin/olsrd
+
+install:       install_bin
+               @echo olsrd uses the configfile $(PREFIX)/etc/olsr.conf
+               @echo a default configfile. A sample configfile
+               @echo can be installed
+               mkdir -p $(PREFIX)/etc
+               cp -i files/olsrd.conf.default $(PREFIX)/etc/olsrd.conf
+               @echo -------------------------------------------
+               @echo Edit $(PREFIX)/etc/olsrd.conf before running olsrd!!
+               @echo -------------------------------------------
+               mkdir -p $(PREFIX)/usr/share/man/man8/
+               cp files/olsrd.8.gz $(PREFIX)/usr/share/man/man8/olsrd.8.gz
+
+sinclude       $(DEPFILE)
+
diff --git a/src/bsd/apm.c b/src/bsd/apm.c
new file mode 100644 (file)
index 0000000..1d88f1b
--- /dev/null
@@ -0,0 +1,46 @@
+/* 
+ * OLSR ad-hoc routing table management protocol
+ * Copyright (C) 2004 Thomas Lopatic (thomas@lopatic.de)
+ *
+ * Derived from its Linux counterpart.
+ * Copyright (C) 2003 Andreas Tønnesen (andreto@ifi.uio.no)
+ *
+ * This file is part of the olsr.org OLSR daemon.
+ *
+ * olsr.org is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * olsr.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with olsr.org; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * $Id: apm.c,v 1.1 2004/11/05 02:06:14 tlopatic Exp $
+ *
+ */
+
+#include "../apm.h"
+#include <stdio.h>
+#include <string.h>
+
+extern int olsr_printf(int, char *, ...);
+
+int apm_init()
+{
+  return -1;
+}
+
+void apm_printinfo(struct olsr_apm_info *ApmInfo)
+{
+}
+
+int apm_read(struct olsr_apm_info *ApmInfo)
+{
+  return -1;
+}
diff --git a/src/bsd/kernel_routes.c b/src/bsd/kernel_routes.c
new file mode 100644 (file)
index 0000000..47e091e
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+ * OLSR ad-hoc routing table management protocol
+ * Copyright (C) 2004 Thomas Lopatic (thomas@lopatic.de)
+ *
+ * This file is part of olsr.org.
+ *
+ * olsr.org is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * olsr.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with olsr.org; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * 
+ * 
+ * $Id: kernel_routes.c,v 1.1 2004/11/05 02:06:14 tlopatic Exp $
+ *
+ */
+
+#include "../kernel_routes.h"
+#include "../olsr.h"
+
+#include <net/if_dl.h>
+#include <ifaddrs.h>
+
+static unsigned int seq = 0;
+
+static int add_del_route(struct rt_entry *dest, int add)
+{
+  struct rt_msghdr *rtm;
+  unsigned char buff[512];
+  unsigned char *walker;
+  struct sockaddr_in sin;
+  struct sockaddr_dl *sdl;
+  struct ifaddrs *addrs;
+  struct ifaddrs *awalker;
+  int step, step2;
+  int len;
+  char Str1[16], Str2[16], Str3[16];
+
+  inet_ntop(AF_INET, &dest->rt_dst.v4, Str1, 16);
+  inet_ntop(AF_INET, &dest->rt_mask.v4, Str2, 16);
+  inet_ntop(AF_INET, &dest->rt_router.v4, Str3, 16);
+
+  olsr_printf(1, "%s IPv4 route to %s/%s via %s.\n",
+    (add != 0) ? "Adding" : "Removing", Str1, Str2, Str3);
+
+  memset(buff, 0, sizeof (buff));
+  memset(&sin, 0, sizeof (sin));
+
+  sin.sin_len = sizeof (sin);
+  sin.sin_family = AF_INET;
+
+  step = 1 + ((sizeof (struct sockaddr_in) - 1) | 3);
+  step2 = 1 + ((sizeof (struct sockaddr_dl) - 1) | 3);
+
+  rtm = (struct rt_msghdr *)buff;
+
+  rtm->rtm_version = RTM_VERSION;
+  rtm->rtm_type = (add != 0) ? RTM_ADD : RTM_DELETE;
+  rtm->rtm_index = 0;
+  rtm->rtm_flags = dest->rt_flags;
+  rtm->rtm_addrs = RTA_DST | RTA_NETMASK | RTA_GATEWAY;
+  rtm->rtm_seq = ++seq;
+
+  walker = buff + sizeof (struct rt_msghdr);
+
+  sin.sin_addr.s_addr = dest->rt_dst.v4;
+
+  memcpy(walker, &sin, sizeof (sin));
+  walker += step;
+
+  if ((dest->rt_flags & RTF_GATEWAY) != 0)
+  {
+    sin.sin_addr.s_addr = dest->rt_router.v4;
+
+    memcpy(walker, &sin, sizeof (sin));
+    walker += step;
+  }
+
+  else
+  {
+    if (getifaddrs(&addrs))
+    {
+      fprintf(stderr, "getifaddrs() failed\n");
+      return -1;
+    }
+
+    for (awalker = addrs; awalker != NULL; awalker = awalker->ifa_next)
+      if (awalker->ifa_addr->sa_family == AF_LINK &&
+          strcmp(awalker->ifa_name, dest->rt_if->int_name) == 0)
+        break;
+
+    if (awalker == NULL)
+    {
+      fprintf(stderr, "interface %s not found\n", dest->rt_if->int_name);
+      freeifaddrs(addrs);
+      return -1;
+    }
+
+    sdl = (struct sockaddr_dl *)awalker->ifa_addr;
+
+    memcpy(walker, sdl, sdl->sdl_len);
+    walker += step2;
+
+    freeifaddrs(addrs);
+  }
+
+  sin.sin_addr.s_addr = dest->rt_mask.v4;
+
+  memcpy(walker, &sin, sizeof (sin));
+  walker += step;
+
+  rtm->rtm_msglen = (unsigned short)(walker - buff);
+
+  len = write(rts, buff, rtm->rtm_msglen);
+
+  if (len < rtm->rtm_msglen)
+    fprintf(stderr, "cannot write to routing socket: %s\n", strerror(errno));
+
+  return 0;
+}
+
+int olsr_ioctl_add_route(struct rt_entry *dest)
+{
+  return add_del_route(dest, 1);
+}
+
+int olsr_ioctl_del_route(struct rt_entry *dest)
+{
+  return add_del_route(dest, 0);
+}
+
+int olsr_ioctl_add_route6(struct rt_entry *dest)
+{
+  return 0;
+}
+
+int olsr_ioctl_del_route6(struct rt_entry *dest)
+{
+  return 0;
+}
+
+int add_tunnel_route(union olsr_ip_addr *gw)
+{
+  return 0;
+}
+
+int delete_tunnel_route()
+{
+  return 0;
+}
+
diff --git a/src/bsd/net.c b/src/bsd/net.c
new file mode 100644 (file)
index 0000000..c1b2523
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+ * OLSR ad-hoc routing table management protocol
+ * Copyright (C) 2004 Andreas Tønnesen (andreto@ifi.uio.no)
+ *
+ * This file is part of olsr.org.
+ *
+ * olsr.org is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * olsr.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with olsr.org; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * 
+ * 
+ * $Id: net.c,v 1.1 2004/11/05 02:06:14 tlopatic Exp $
+ *
+ */
+
+#include "../defs.h"
+#include "net.h"
+
+int enable_ip_forwarding(int version)
+{
+  return 1;
+}
+
+int disable_redirects(char *if_name, int index, int version)
+{
+  return 1;
+}
+
+int deactivate_spoof(char *if_name, int index, int version)
+{
+  return 1;
+}
+
+int restore_settings(int version)
+{
+  return 1;
+}
+
+int
+getsocket(struct sockaddr *sa, 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) 
+    {
+      perror("socket");
+      syslog(LOG_ERR, "socket: %m");
+      return (-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);
+    }
+
+  if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0) 
+    {
+      perror("SO_REUSEADDR failed");
+      return (-1);
+    }
+
+  for (on = bufspace; ; on -= 1024) 
+    {
+      if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
+                    &on, sizeof (on)) == 0)
+       break;
+      if (on <= 8*1024) 
+       {
+         perror("setsockopt");
+         syslog(LOG_ERR, "setsockopt SO_RCVBUF: %m");
+         break;
+       }
+    }
+
+  if (bind(sock, (struct sockaddr *)sin, sizeof (*sin)) < 0) 
+    {
+      perror("bind");
+      syslog(LOG_ERR, "bind: %m");
+      close(sock);
+      return (-1);
+    }
+
+  if (fcntl(sock, F_SETFL, 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;
+
+  if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) 
+    {
+      perror("socket");
+      syslog(LOG_ERR, "socket: %m");
+      return (-1);
+    }
+
+  for (on = bufspace; ; on -= 1024) 
+    {
+      if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
+                    &on, sizeof (on)) == 0)
+       break;
+      if (on <= 8*1024) 
+       {
+         perror("setsockopt");
+         syslog(LOG_ERR, "setsockopt SO_RCVBUF: %m");
+         break;
+       }
+    }
+
+  if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0) 
+    {
+      perror("SO_REUSEADDR failed");
+      return (-1);
+    }
+
+  if (bind(sock, (struct sockaddr *)sin, sizeof (*sin)) < 0) 
+    {
+      perror("bind");
+      syslog(LOG_ERR, "bind: %m");
+      close(sock);
+      return (-1);
+    }
+
+  if (fcntl(sock, F_SETFL, O_NONBLOCK) == -1)
+    syslog(LOG_ERR, "fcntl O_NONBLOCK: %m\n");
+
+  return (sock);
+}
+
+int get_ipv6_address(char *ifname, struct sockaddr_in6 *saddr6, int scope_in)
+{
+  return 0;
+}
diff --git a/src/bsd/net.h b/src/bsd/net.h
new file mode 100644 (file)
index 0000000..7a379bb
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * OLSR ad-hoc routing table management protocol
+ * Copyright (C) 2004 Andreas Tønnesen (andreto@ifi.uio.no)
+ *
+ * This file is part of olsr.org.
+ *
+ * olsr.org is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * olsr.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with olsr.org; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * 
+ * 
+ * $Id: net.h,v 1.1 2004/11/05 02:06:14 tlopatic Exp $
+ *
+ */
+
+
+
+#ifndef _OLSR_NET_LINUX
+#define _OLSR_NET_LINUX
+
+#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"
+
+extern int
+olsr_printf(int, char *, ...);
+
+#endif
index abe21b2..43a9be5 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: defs.h,v 1.22 2004/11/03 18:19:54 tlopatic Exp $
+ * $Id: defs.h,v 1.23 2004/11/05 02:06:13 tlopatic Exp $
  *
  */
 
@@ -28,6 +28,8 @@
 
 /* Common includes */
 #include <sys/time.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -130,6 +132,12 @@ int olsr_udp_port;
 /* The socket used for all ioctls */
 int ioctl_s;
 
+/* routing socket */
+
+#ifdef __FreeBSD__
+int rts;
+#endif
+
 float max_tc_vtime;
 
 struct timeval fwdtimer[MAX_IFS];      /* forwarding timer */
index 3f1722a..2893e1a 100644 (file)
@@ -20,7 +20,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: interfaces.h,v 1.11 2004/11/02 21:14:12 kattemat Exp $
+ * $Id: interfaces.h,v 1.12 2004/11/05 02:06:13 tlopatic Exp $
  *
  */
 
@@ -28,6 +28,8 @@
 #ifndef _OLSR_INTERFACE
 #define _OLSR_INTERFACE
 
+#include <sys/socket.h>
+
 #include "olsr_protocol.h"
 
 #define _PATH_PROCNET_IFINET6           "/proc/net/if_inet6"
index a2294ab..a32907d 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: ipc_frontend.c,v 1.9 2004/11/03 20:54:47 kattemat Exp $
+ * $Id: ipc_frontend.c,v 1.10 2004/11/05 02:06:13 tlopatic Exp $
  *
  */
 
@@ -43,6 +43,8 @@
 #define MSG_NOSIGNAL 0
 void 
 WinSockPError(char *);
+#elif defined __FreeBSD__
+#define MSG_NOSIGNAL 0
 #endif
 
 pthread_t accept_thread;
index 0401e0e..118099c 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: ipc_frontend.h,v 1.7 2004/11/03 20:54:47 kattemat Exp $
+ * $Id: ipc_frontend.h,v 1.8 2004/11/05 02:06:13 tlopatic Exp $
  *
  */
 /*
@@ -33,6 +33,8 @@
 #ifndef _OLSR_IPC
 #define _OLSR_IPC
 
+#include <sys/types.h>
+#include <netinet/in.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <pthread.h>
index 71adf4a..8481b4a 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: link_set.c,v 1.13 2004/11/03 18:19:54 tlopatic Exp $
+ * $Id: link_set.c,v 1.14 2004/11/05 02:06:13 tlopatic Exp $
  *
  */
 
@@ -394,7 +394,7 @@ add_new_entry(union olsr_ip_addr *local, union olsr_ip_addr *remote, union olsr_
 {
   struct link_entry *tmp_link_set, *new_link;
   struct neighbor_entry *neighbor;
-#ifndef WIN32
+#if !defined WIN32 && !defined __FreeBSD__
   struct interface *local_if;
 #endif
 
@@ -512,7 +512,7 @@ add_new_entry(union olsr_ip_addr *local, union olsr_ip_addr *remote, union olsr_
     }
 
   /* Add to link-layer spy list */
-#ifndef WIN32
+#if !defined WIN32 && !defined __FreeBSD__
   if(llinfo)
     {
       local_if = if_ifwithaddr(local);
@@ -603,7 +603,7 @@ update_link_entry(union olsr_ip_addr *local, union olsr_ip_addr *remote, struct
 {
   int status;
   struct link_entry *entry;
-#ifndef WIN32
+#if !defined WIN32 && !defined __FreeBSD__
   struct interface *local_if;
 #endif
 
@@ -615,7 +615,7 @@ update_link_entry(union olsr_ip_addr *local, union olsr_ip_addr *remote, struct
 
   /* Update link layer info */
   /* Add to link-layer spy list */
-#ifndef WIN32
+#if !defined WIN32 && !defined __FreeBSD__
   if(llinfo && !entry->spy_activated)
     {
       local_if = if_ifwithaddr(local);
index 22198d1..7e834f4 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: main.c,v 1.26 2004/11/03 18:19:54 tlopatic Exp $
+ * $Id: main.c,v 1.27 2004/11/05 02:06:13 tlopatic Exp $
  *
  */
 
@@ -48,6 +48,9 @@ olsr_shutdown(int);
 #include "win32/tunnel.h"
 int __stdcall SignalHandler(unsigned long signal);
 void ListInterfaces(void);
+#elif defined __FreeBSD__
+static void
+olsr_shutdown(int);
 #else
 #       error "Unsupported system"
 #endif
@@ -65,7 +68,7 @@ set_default_values(void);
 static int
 set_default_ifcnfs(struct olsr_if *, struct if_config_options *);
 
-#ifndef WIN32
+#if !defined WIN32
 /*
  * Local variable declarations 
  */
@@ -132,7 +135,7 @@ main(int argc, char *argv[])
   nowtm = NULL;
   while (nowtm == NULL)
     {
-      nowtm = gmtime(&now.tv_sec);
+      nowtm = gmtime((time_t *)&now.tv_sec);
     }
     
   /* The port to use for OLSR traffic */
@@ -479,12 +482,20 @@ main(int argc, char *argv[])
    *socket for icotl calls
    */
   if ((ioctl_s = socket(olsr_cnf->ip_version, SOCK_DGRAM, 0)) < 0) 
+
     {
       olsr_syslog(OLSR_LOG_ERR, "ioctl socket: %m");
-      close(ioctl_s);
       olsr_exit(__func__, 0);
     }
 
+#ifdef __FreeBSD__
+  if ((rts = socket(PF_ROUTE, SOCK_RAW, 0)) < 0)
+    {
+      olsr_syslog(OLSR_LOG_ERR, "routing socket: %m");
+      olsr_exit(__func__, 0);
+    }
+#endif
+
   /*
    *enable ip forwarding on host
    */
@@ -580,7 +591,7 @@ main(int argc, char *argv[])
   if(olsr_cnf->open_ipc)
       ipc_init();
 
-#ifndef WIN32
+#if !defined WIN32 && !defined __FreeBSD__
   /* Initialize link-layer notifications */
   if(llinfo)
     init_link_layer_notification();
@@ -592,9 +603,11 @@ main(int argc, char *argv[])
   /* Load plugins */
   olsr_load_plugins();
 
+#ifndef __FreeBSD__
   /* Set up recieving tunnel if Inet gw */
   if(use_tunnel && check_inet_gw())
     set_up_gw_tunnel(&main_addr);
+#endif
 
   olsr_printf(1, "Main address: %s\n\n", olsr_ip_to_string(&main_addr));
 
@@ -689,6 +702,11 @@ olsr_shutdown(int signal)
   /* ioctl socket */
   close(ioctl_s);
 
+#ifdef __FreeBSD__
+  /* routing socket */
+  close(rts);
+#endif
+
   olsr_syslog(OLSR_LOG_INFO, "%s stopped", SOFTWARE_VERSION);
 
   olsr_printf(1, "\n <<<< %s - terminating >>>>\n           http://www.olsr.org\n", SOFTWARE_VERSION);
index 0e6c129..8200552 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -20,7 +20,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: net.c,v 1.17 2004/10/20 19:43:04 kattemat Exp $
+ * $Id: net.c,v 1.18 2004/11/05 02:06:13 tlopatic Exp $
  *
  */
 
@@ -410,6 +410,7 @@ join_mcast(struct interface *ifs, int sock)
   COPY_IP(&mcastreq.ipv6mr_multiaddr, &ifs->int6_multaddr.sin6_addr);
   mcastreq.ipv6mr_interface = ifs->if_index;
 
+#if !defined __FreeBSD__
   olsr_printf(3, "Interface %s joining multicast %s...",       ifs->int_name, olsr_ip_to_string((union olsr_ip_addr *)&ifs->int6_multaddr.sin6_addr));
   /* Send multicast */
   if(setsockopt(sock, 
@@ -422,6 +423,9 @@ join_mcast(struct interface *ifs, int sock)
       perror("Join multicast");
       return -1;
     }
+#else
+#warning implement IPV6_ADD_MEMBERSHIP
+#endif
 
   /* Old libc fix */
 #ifdef IPV6_JOIN_GROUP
index d1236cf..cbe75e5 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: olsr.h,v 1.11 2004/11/03 09:22:59 kattemat Exp $
+ * $Id: olsr.h,v 1.12 2004/11/05 02:06:13 tlopatic Exp $
  *
  */
 
@@ -30,6 +30,7 @@
 #include "olsr_protocol.h"
 #include "interfaces.h"
 
+#include <sys/time.h>
 
 /**
  * Process changes functions
index d8b4309..d84ab58 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: process_package.c,v 1.10 2004/11/03 18:19:54 tlopatic Exp $
+ * $Id: process_package.c,v 1.11 2004/11/05 02:06:14 tlopatic Exp $
  *
  */
 
@@ -405,7 +405,7 @@ olsr_process_received_hna(union olsr_message *m, struct interface *in_if, union
 
   while(hna_tmp)
     {
-      
+#ifndef __FreeBSD__
       /*
        * Set up tunnel to Internet gateway
        */
@@ -423,6 +423,7 @@ olsr_process_received_hna(union olsr_message *m, struct interface *in_if, union
          set_up_source_tnl(&main_addr, &message.originator, in_if->if_index); 
        }
       else
+#endif
        {
          olsr_update_hna_entry(&message.originator, &hna_tmp->net, &hna_tmp->netmask, (float)message.vtime); 
        }
index 11897ac..af3f639 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: process_routes.c,v 1.10 2004/10/18 13:13:37 kattemat Exp $
+ * $Id: process_routes.c,v 1.11 2004/11/05 02:06:14 tlopatic Exp $
  *
  */
 
@@ -34,6 +34,7 @@
 #include "win32/tunnel.h"
 #undef strerror
 #define strerror(x) StrError(x)
+#elif defined __FreeBSD__
 #else
 #       error "Unsupported system"
 #endif
@@ -154,10 +155,13 @@ olsr_delete_all_kernel_routes()
   struct destination_n *delete_kernel_list=NULL;
   struct destination_n *tmp=NULL;
   union olsr_ip_addr *tmp_addr;
+#ifndef __FreeBSD__
   olsr_u32_t tmp_tnl_addr;
+#endif
 
   olsr_printf(1, "Deleting all routes...\n");
 
+#ifndef __FreeBSD__
   if(use_tunnel)
     {
       /* Delete Internet GW tunnel */
@@ -167,6 +171,7 @@ olsr_delete_all_kernel_routes()
       tmp_tnl_addr = 0;
       set_up_gw_tunnel((union olsr_ip_addr *)&tmp_tnl_addr);
     }
+#endif
 
   delete_kernel_list = olsr_build_update_list(hna_routes, old_hna);
 
index d71456a..16d657e 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: routing_table.h,v 1.8 2004/11/02 21:14:12 kattemat Exp $
+ * $Id: routing_table.h,v 1.9 2004/11/05 02:06:14 tlopatic Exp $
  *
  */
 
@@ -59,8 +59,19 @@ struct destination_n
  */
 union olsr_kernel_route
 {
-  struct rtentry v4;
-  struct in6_rtmsg v6;
+  struct
+  {
+    struct sockaddr rt_dst;
+    struct sockaddr rt_gateway;
+    olsr_u32_t rt_metric;
+  } v4;
+
+  struct
+  {
+    struct in6_addr rtmsg_dst;
+    struct in6_addr rtmsg_gateway;
+    olsr_u32_t rtmsg_metric;
+  } v6;
 };
 
 
index 1de46ed..22c0644 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: scheduler.c,v 1.14 2004/11/03 20:54:47 kattemat Exp $
+ * $Id: scheduler.c,v 1.15 2004/11/05 02:06:14 tlopatic Exp $
  *
  */
 
@@ -130,11 +130,11 @@ scheduler()
 
       /* Update the global timestamp */
       gettimeofday(&now, NULL);
-      nowtm = gmtime(&now.tv_sec);
+      nowtm = gmtime((time_t *)&now.tv_sec);
 
       while (nowtm == NULL)
        {
-         nowtm = gmtime(&now.tv_sec);
+         nowtm = gmtime((time_t *)&now.tv_sec);
        }
 
 
similarity index 98%
rename from src/linux/ifnet.c
rename to src/unix/ifnet.c
index e957026..87153e4 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: ifnet.c,v 1.17 2004/11/03 18:19:54 tlopatic Exp $
+ * $Id: ifnet.c,v 1.1 2004/11/05 02:06:14 tlopatic Exp $
  *
  */
 
 
+#ifdef linux
 /*
  *Wireless definitions for ioctl calls
  *(from linux/wireless.h)
@@ -38,7 +39,9 @@
 #define SIOCGIWMODE    0x8B07          /* get operation mode */
 #define SIOCSIWSENS    0x8B08          /* set sensitivity (dBm) */
 #define SIOCGIWSENS    0x8B09          /* get sensitivity (dBm) */
-
+#elif defined __FreeBSD__
+#define ifr_netmask ifr_addr
+#endif
 
 #include "interfaces.h"
 #include "ifnet.h"
 #include "generate_msg.h"
 #include "mantissa.h"
 #include <signal.h>
+#include <sys/types.h>
 #include <net/if.h>
 #include <net/if_arp.h>
+#include <netinet/in_systm.h>
 #include <netinet/ip.h>
-#include <asm/types.h>
 #include <arpa/inet.h>
 #include <netdb.h>
 #include <unistd.h>
@@ -510,8 +514,10 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
   struct ifreq ifr;
   union olsr_ip_addr null_addr;
   struct ifchgf *tmp_ifchgf_list;
+#ifdef linux
   int precedence = IPTOS_PREC(olsr_cnf->tos);
   int tos_bits = IPTOS_TOS(olsr_cnf->tos);
+#endif
 
   memset(&ifr, 0, sizeof(struct ifreq));
   strncpy(ifr.ifr_name, iface->name, IFNAMSIZ);
@@ -741,7 +747,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
   /* Register socket */
   add_olsr_socket(ifp->olsr_socket, &olsr_input);
   
-  
+ #if defined linux 
   /* Set TOS */
   
   if (setsockopt(ifp->olsr_socket, SOL_SOCKET, SO_PRIORITY, (char*)&precedence, sizeof(precedence)) < 0)
@@ -754,6 +760,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
       perror("setsockopt(IP_TOS)");
       olsr_syslog(OLSR_LOG_ERR, "setsockopt(IP_TOS) error %m");
     }
+#endif
   
   /*
    *Initialize sequencenumber as a random 16bit value
@@ -839,7 +846,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
 
 
 
-
+#ifdef linux
 /**
  *Check if a interface is wireless
  *Returns 1 if no info can be gathered
@@ -863,4 +870,11 @@ check_wireless_interface(struct ifreq *ifr)
     }
 
 }
+#else
+int check_wireless_interface(struct ifreq *ifr)
+{
+  return 1;
+}
+#endif
+
 
similarity index 96%
rename from src/linux/log.c
rename to src/unix/log.c
index 84065c5..b5cfd02 100644 (file)
@@ -20,7 +20,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: log.c,v 1.3 2004/09/21 19:08:58 kattemat Exp $
+ * $Id: log.c,v 1.1 2004/11/05 02:06:14 tlopatic Exp $
  *
  */