On Fri, May 12, 2017 at 07:05:11PM +0200, Stefan Sperling wrote:
> On Fri, May 12, 2017 at 05:27:06PM +0100, Stuart Henderson wrote:
> > rest looks good, though untested.
>
> Thanks, this version should address all your points.
Another update which adds a patch for bsd/kernel_routes.c that makes
route deletion work (kind of important) and adds rdomain support.
IPv6 won't work yet since the libnet shim written by upstream only
supports IPv4. I'll try to fix that at some point.
martin@ asked me to remove him as maintainer since he has not used
this thing in a decade either. I am grabbing maintainership for now.
ok?
Index: Makefile
===================================================================
RCS file: /cvs/ports/net/olsrd/Makefile,v
retrieving revision 1.27
diff -u -p -r1.27 Makefile
--- Makefile 2 Mar 2017 19:05:08 -0000 1.27
+++ Makefile 13 May 2017 20:58:17 -0000
@@ -2,31 +2,29 @@
COMMENT-main= OLSR routing daemon
COMMENT-gui= OLSR routing daemon GUI
-COMMENT-plugins= OLSR routing daemon plugins
-VERSION= 0.6.0
+VERSION= 0.9.0.3
DISTNAME= olsrd-${VERSION}
PKGNAME-main= olsrd-${VERSION}
PKGNAME-gui= olsrd-gui-${VERSION}
PKGNAME-plugins= olsrd-plugins-${VERSION}
-REVISION= 8
CATEGORIES= net
HOMEPAGE= http://www.olsr.org/
-MASTER_SITES= ${HOMEPAGE}releases/0.6/
+MASTER_SITES= ${HOMEPAGE}releases/0.9/
-MAINTAINER= Martin Reindl <[email protected]>
+MAINTAINER= Stefan Sperling <[email protected]>
# BSD
PERMIT_PACKAGE_CDROM= Yes
-MULTI_PACKAGES= -main -gui -plugins
+MULTI_PACKAGES= -main -gui
BUILD_DEPENDS= devel/bison
-LIB_DEPENDS-main= # empty
-WANTLIB-main= c
+LIB_DEPENDS-main= net/libnet/1.1
+WANTLIB-main= c lib/libnet-1.1/net=11
LIB_DEPENDS-gui= x11/gtk+2
WANTLIB-gui= ${MODGETTEXT_WANTLIB}
@@ -36,9 +34,6 @@ WANTLIB-gui += gdk-x11-2.0 gdk_pixbuf-2.
WANTLIB-gui += gtk-x11-2.0 m pango-1.0 pangocairo-1.0 pangoft2-1.0
WANTLIB-gui += z
-WANTLIB-plugins= # empty
-LIB_DEPENDS-plugins= # empty
-RUN_DEPENDS-plugins= olsrd-${VERSION}:net/olsrd
USE_GMAKE= Yes
NO_TEST= Yes
@@ -46,7 +41,8 @@ NO_TEST= Yes
MODULES= devel/gettext
ALL_TARGET= build_all
-MAKE_FLAGS= DEBUG=0 CC="${CC}"
+MAKE_FLAGS= DEBUG=0 CC="${CC}" OS=obsd LIBNET=1
+CPPFLAGS+= "-I${PREFIX}/libnet-1.1"
FAKE_FLAGS= SBINDIR=${DESTDIR}/${PREFIX}/sbin \
ETCDIR=${DESTDIR}/${PREFIX}/share/examples/olsrd \
LIBDIR=${DESTDIR}/${PREFIX}/lib/olsrd-plugins \
@@ -68,11 +64,8 @@ post-install:
${INSTALL_PROGRAM} ${WRKSRC}/gui/linux-gtk/olsrd-gui ${PREFIX}/sbin
${INSTALL_SCRIPT} ${WRKSRC}/lib/dot_draw/olsr-topology-view.pl \
${PREFIX}/bin
- cd ${PREFIX}/man; gzip -d man5/olsrd.conf.5.gz man8/olsrd.8.gz
+ cd ${PREFIX}/man; gzip -f -d man5/olsrd.conf.5.gz man8/olsrd.8.gz
${INSTALL_DATA} ${WRKSRC}/files/olsrd.conf.default.* \
${PREFIX}/share/examples/olsrd
- ${INSTALL_DATA_DIR} ${PREFIX}/share/doc/olsrd
- cd ${WRKSRC}; ${INSTALL_DATA} CHANGELOG README README-Link-Quality* \
- ${PREFIX}/share/doc/olsrd
.include <bsd.port.mk>
Index: distinfo
===================================================================
RCS file: /cvs/ports/net/olsrd/distinfo,v
retrieving revision 1.8
diff -u -p -r1.8 distinfo
--- distinfo 31 Oct 2013 21:12:13 -0000 1.8
+++ distinfo 3 Apr 2016 10:48:32 -0000
@@ -1,2 +1,2 @@
-SHA256 (olsrd-0.6.0.tar.gz) = qKJNqwCVxz1SSD7bX+aLtbS7dj+bKnp7idz10nXTtEI=
-SIZE (olsrd-0.6.0.tar.gz) = 742138
+SHA256 (olsrd-0.9.0.3.tar.gz) = WdN1cMWOwlY2px1afPRGBEi+aT8B12iuNpp/ZuWAd/s=
+SIZE (olsrd-0.9.0.3.tar.gz) = 5791920
Index: patches/patch-make_Makefile_obsd
===================================================================
RCS file: /cvs/ports/net/olsrd/patches/patch-make_Makefile_obsd,v
retrieving revision 1.2
diff -u -p -r1.2 patch-make_Makefile_obsd
--- patches/patch-make_Makefile_obsd 6 Jul 2010 07:41:46 -0000 1.2
+++ patches/patch-make_Makefile_obsd 12 May 2017 16:44:41 -0000
@@ -1,15 +1,37 @@
$OpenBSD: patch-make_Makefile_obsd,v 1.2 2010/07/06 07:41:46 sthen Exp $
---- make/Makefile.obsd.orig Wed Mar 31 19:03:53 2010
-+++ make/Makefile.obsd Sun Jun 13 13:42:51 2010
-@@ -11,9 +11,8 @@ HDRS += $(wildcard src/bsd/*.h src/unix/*.h)
- CPPFLAGS += -D__OpenBSD__
- LIBS +=
+Index: make/Makefile.obsd
+--- make/Makefile.obsd.orig
++++ make/Makefile.obsd
+@@ -8,22 +8,24 @@ ETCDIR = /etc/olsrd
+ LIBDIR = $(PREFIX)/lib
+ DOCDIR = $(PREFIX)/share/doc
+ MANDIR = $(PREFIX)/man
+-RCDIR = /etc/rc.d
++RCDIR = ${DESTDIR}/etc/rc.d
+ RCFILE = openbsd/olsrd.rcd
+
+ SRCS += $(wildcard src/bsd/*.c src/unix/*.c)
+ HDRS += $(wildcard src/bsd/*.h src/unix/*.h)
+
+-CPPFLAGS += -D__OpenBSD__
+-LIBS +=
++CPPFLAGS += -DOLSRD_GLOBAL_CONF_FILE=\"$(CFGFILE)\" -D__OpenBSD__
+
++ifdef LIBNET
++CPPFLAGS += -DSPOOF -I$(LOCALBASE)/include/libnet-1.1
++LIBS += -L$(LOCALBASE)/lib/libnet-1.1 -lnet
++endif
++
+ PLUGIN_SONAME ?= $(PLUGIN_NAME)
-PLUGIN_FULLNAME ?= $(PLUGIN_NAME).so.$(PLUGIN_VER)
-INSTALL_LIB = install -m 755 $(PLUGIN_FULLNAME) $(LIBDIR)/$(PLUGIN_FULLNAME);
\
- /sbin/ldconfig
+-UNINSTALL_LIB = rm -f $(LIBDIR)/$(PLUGIN_FULLNAME); \
+- /sbin/ldconfig
+PLUGIN_FULLNAME ?= $(PLUGIN_NAME).so
-+INSTALL_LIB = install -m 755 $(PLUGIN_FULLNAME) $(LIBDIR)/$(PLUGIN_FULLNAME);
++INSTALL_LIB = install -m 755 $(PLUGIN_FULLNAME) $(LIBDIR)/$(PLUGIN_FULLNAME);
++UNINSTALL_LIB = rm -f $(LIBDIR)/$(PLUGIN_FULLNAME)
ifdef OLSRD_PLUGIN
CFLAGS += -fPIC
Index: patches/patch-src_bsd_kernel_routes_c
===================================================================
RCS file: patches/patch-src_bsd_kernel_routes_c
diff -N patches/patch-src_bsd_kernel_routes_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_bsd_kernel_routes_c 13 May 2017 13:43:43 -0000
@@ -0,0 +1,68 @@
+$OpenBSD$
+
+Index: src/bsd/kernel_routes.c
+--- src/bsd/kernel_routes.c.orig
++++ src/bsd/kernel_routes.c
+@@ -111,6 +111,9 @@ add_del_route(const struct rt_entry *rt, int add)
+ rtm->rtm_flags = olsr_rt_flags(rt, add);
+ rtm->rtm_pid = OLSR_PID;
+ rtm->rtm_seq = ++seq;
++#if defined(__OpenBSD__)
++ rtm->rtm_tableid = getrtable();
++#endif
+
+ /* walk to the end of the header */
+ walker = buff + sizeof(struct rt_msghdr);
+@@ -222,14 +225,31 @@ add_del_route(const struct rt_entry *rt, int add)
+ drtm->rtm_version = RTM_VERSION;
+ drtm->rtm_type = RTM_DELETE;
+ drtm->rtm_index = 0;
+- drtm->rtm_flags = olsr_rt_flags(rt, add);
++ drtm->rtm_flags = olsr_rt_flags(rt, 0);
+ drtm->rtm_seq = ++seq;
++#if defined(__OpenBSD__)
++ drtm->rtm_tableid = getrtable();
++#endif
+
+ walker = dbuff + sizeof(struct rt_msghdr);
+ sin4.sin_addr = rt->rt_dst.prefix.v4;
+ memcpy(walker, &sin4, sizeof(sin4));
+ walker += sin_size;
+ drtm->rtm_addrs = RTA_DST;
++ if (0 != (drtm->rtm_flags & RTF_GATEWAY)) {
++ nexthop = &rt->rt_nexthop;
++ sin4.sin_addr = nexthop->gateway.v4;
++ memcpy(walker, &sin4, sizeof(sin4));
++ walker += sin_size;
++ drtm->rtm_addrs |= RTA_GATEWAY;
++ }
++ if (0 == (drtm->rtm_flags & RTF_HOST)) {
++ olsr_prefix_to_netmask(&mask, rt->rt_dst.prefix_len);
++ sin4.sin_addr = mask.v4;
++ memcpy(walker, &sin4, sizeof(sin4));
++ walker += sin_size;
++ drtm->rtm_addrs |= RTA_NETMASK;
++ }
+ drtm->rtm_msglen = (unsigned short)(walker - dbuff);
+ len = write(olsr_cnf->rts, dbuff, drtm->rtm_msglen);
+ if (len < 0) {
+@@ -298,6 +318,9 @@ add_del_route6(const struct rt_entry *rt, int add)
+ rtm->rtm_flags = olsr_rt_flags(rt, add);
+ rtm->rtm_pid = OLSR_PID;
+ rtm->rtm_seq = ++seq;
++#if defined(__OpenBSD__)
++ rtm->rtm_tableid = getrtable();
++#endif
+
+ /* walk to the end of the header */
+ walker = buff + sizeof(struct rt_msghdr);
+@@ -385,6 +408,9 @@ add_del_route6(const struct rt_entry *rt, int add)
+ drtm->rtm_index = 0;
+ drtm->rtm_flags = olsr_rt_flags(rt, add);
+ drtm->rtm_seq = ++seq;
++#if defined(__OpenBSD__)
++ drtm->rtm_tableid = getrtable();
++#endif
+
+ walker = dbuff + sizeof(struct rt_msghdr);
+ memcpy(&sin6.sin6_addr.s6_addr, &rt->rt_dst.prefix.v6, sizeof(struct
in6_addr));
Index: patches/patch-src_bsd_net_c
===================================================================
RCS file: patches/patch-src_bsd_net_c
diff -N patches/patch-src_bsd_net_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_bsd_net_c 12 May 2017 16:51:34 -0000
@@ -0,0 +1,13 @@
+$OpenBSD$
+
+Index: src/bsd/net.c
+--- src/bsd/net.c.orig
++++ src/bsd/net.c
+@@ -51,6 +51,7 @@
+ #include "../ipcalc.h"
+ #include "../parser.h" /* dnc: needed for call to packet_parser() */
+ #include "../olsr_protocol.h"
++#include "../olsr_random.h"
+ #include "../olsr_cfg.h"
+ #include "../olsr.h"
+
Index: patches/patch-src_cfgparser_local_mk
===================================================================
RCS file: /cvs/ports/net/olsrd/patches/patch-src_cfgparser_local_mk,v
retrieving revision 1.1
diff -u -p -r1.1 patch-src_cfgparser_local_mk
--- patches/patch-src_cfgparser_local_mk 6 Jul 2010 07:41:46 -0000
1.1
+++ patches/patch-src_cfgparser_local_mk 3 Apr 2016 10:50:31 -0000
@@ -1,7 +1,7 @@
$OpenBSD: patch-src_cfgparser_local_mk,v 1.1 2010/07/06 07:41:46 sthen Exp $
---- src/cfgparser/local.mk.orig Wed Mar 31 18:03:53 2010
-+++ src/cfgparser/local.mk Tue Jun 29 15:25:30 2010
-@@ -73,5 +73,7 @@ $(C)oparse.c: $(C)oparse.y $(C)olsrd_conf.h $(C)Makefi
+--- src/cfgparser/local.mk.orig Sun Sep 20 14:22:23 2015
++++ src/cfgparser/local.mk Sun Apr 3 12:48:37 2016
+@@ -79,5 +79,7 @@ endif
$(C)oparse.o: CFLAGS := $(filter-out -Wunreachable-code,$(CFLAGS))
Index: patches/patch-src_olsr_random_h
===================================================================
RCS file: patches/patch-src_olsr_random_h
diff -N patches/patch-src_olsr_random_h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_olsr_random_h 12 May 2017 16:41:46 -0000
@@ -0,0 +1,32 @@
+$OpenBSD$
+
+Index: src/olsr_random.h
+--- src/olsr_random.h.orig
++++ src/olsr_random.h
+@@ -9,7 +9,14 @@
+
+ #define OLSR_RANDOM_MAX INT32_MAX
+
++#if defined(__OpenBSD__)
+ static inline long int olsr_random(void) {
++ long int r;
++ arc4random_buf(&r, sizeof(r));
++ return r;
++}
++#else
++static inline long int olsr_random(void) {
+ int32_t value;
+ int randomFile;
+
+@@ -32,9 +39,10 @@ static inline long int olsr_random(void) {
+
+ return abs(value);
+ }
++#endif
+
+ static inline void olsr_init_random(void) {
+- srandom(time(NULL));
++ srandom(arc4random());
+ }
+
+ #endif /* _OLSR_RANDOM_H */
Index: patches/patch-src_plugin_loader_c
===================================================================
RCS file: /cvs/ports/net/olsrd/patches/patch-src_plugin_loader_c,v
retrieving revision 1.1
diff -u -p -r1.1 patch-src_plugin_loader_c
--- patches/patch-src_plugin_loader_c 14 Jun 2010 12:36:34 -0000 1.1
+++ patches/patch-src_plugin_loader_c 12 May 2017 16:45:39 -0000
@@ -1,26 +1,27 @@
$OpenBSD: patch-src_plugin_loader_c,v 1.1 2010/06/14 12:36:34 sebastia Exp $
the plugins get installed to $LOCALBASE/lib/olsrd-plugins, so load them from
there.
---- src/plugin_loader.c.orig Tue Jun 1 09:42:27 2010
-+++ src/plugin_loader.c Tue Jun 1 09:43:13 2010
-@@ -87,20 +87,14 @@ olsr_load_plugins(void)
+--- src/plugin_loader.c.orig Sun Sep 20 14:22:23 2015
++++ src/plugin_loader.c Sun Apr 3 14:06:06 2016
+@@ -88,20 +88,14 @@ olsr_load_plugins(void)
static int
olsr_load_dl(char *libname, struct plugin_param *params)
{
--#if TESTLIB_PATH
+-#if defined TESTLIB_PATH && TESTLIB_PATH
- char path[256] = "/usr/testlib/";
--#endif
+-#endif /* defined TESTLIB_PATH && TESTLIB_PATH */
+ char path[256] = "${LOCALBASE}/lib/olsrd-plugins/";
struct olsr_plugin *plugin = olsr_malloc(sizeof(struct olsr_plugin),
"Plugin entry");
int rv;
OLSR_PRINTF(0, "---------- LOADING LIBRARY %s ----------\n", libname);
--#if TESTLIB_PATH
- strcat(path, libname);
+-#if defined TESTLIB_PATH && TESTLIB_PATH
+- strcat(path, libname);
++ strlcat(path, libname, sizeof(path));
plugin->dlhandle = dlopen(path, RTLD_NOW);
--#else
+-#else /* defined TESTLIB_PATH && TESTLIB_PATH */
- plugin->dlhandle = dlopen(libname, RTLD_NOW);
--#endif
+-#endif /* defined TESTLIB_PATH && TESTLIB_PATH */
if (plugin->dlhandle == NULL) {
const int save_errno = errno;
OLSR_PRINTF(0, "DL loading failed: \"%s\"!\n", dlerror());
Index: patches/patch-src_unix_ifnet_c
===================================================================
RCS file: patches/patch-src_unix_ifnet_c
diff -N patches/patch-src_unix_ifnet_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_unix_ifnet_c 12 May 2017 14:47:12 -0000
@@ -0,0 +1,17 @@
+$OpenBSD$
+
+Index: src/unix/ifnet.c
+--- src/unix/ifnet.c.orig
++++ src/unix/ifnet.c
+@@ -646,7 +646,10 @@ chk_if_up(struct olsr_if *iface, int debuglvl __attrib
+ /* Find broadcast address */
+ if (iface->cnf->ipv4_multicast.v4.s_addr) {
+ /* Specified broadcast */
+- memcpy(&((struct sockaddr_in *)&ifs.int_broadaddr)->sin_addr.s_addr,
&iface->cnf->ipv4_multicast.v4, sizeof(uint32_t));
++ struct sockaddr_in *sin = &ifs.int_broadaddr;
++ memcpy(&sin->sin_addr.s_addr, &iface->cnf->ipv4_multicast.v4,
sizeof(uint32_t));
++ sin->sin_len = sizeof(*sin);
++ sin->sin_family = AF_INET;
+ } else {
+ /* Autodetect */
+ if (ioctl(olsr_cnf->ioctl_s, SIOCGIFBRDADDR, &ifr) < 0) {
Index: pkg/DESCR-plugins
===================================================================
RCS file: pkg/DESCR-plugins
diff -N pkg/DESCR-plugins
--- pkg/DESCR-plugins 14 Jun 2010 12:36:34 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,11 +0,0 @@
-Plugins for the olsrd routing daemon:
-txtinfo: provides text status informations about the olsrd
-dyn_gw and dyn_gw_plain: automatically detects whether a uplink
- is available and announces it in the net
-httpinfo: provides status information about the running olsrd
- in html format
-mini: minimal example plugin
-nameservice: this plugin distributes DNS via the network
-pgraph: allows any host to connect to the network
-secure: allows to use a shared secret in the network
-watchdog: a watchdog for the olsrd via extenal tools
Index: pkg/MESSAGE-main
===================================================================
RCS file: pkg/MESSAGE-main
diff -N pkg/MESSAGE-main
--- pkg/MESSAGE-main 14 Jun 2010 12:36:34 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,6 +0,0 @@
-In order to start olsrd at boot time, edit ${SYSCONFDIR}/olsrd.conf and
-add the following lines to /etc/rc.local:
-
-if [ -x ${PREFIX}/sbin/olsrd ]; then
- echo -n ' olsrd'; ${PREFIX}/sbin/olsrd
-fi
Index: pkg/PLIST-main
===================================================================
RCS file: /cvs/ports/net/olsrd/pkg/PLIST-main,v
retrieving revision 1.2
diff -u -p -r1.2 PLIST-main
--- pkg/PLIST-main 6 Jul 2010 07:41:46 -0000 1.2
+++ pkg/PLIST-main 12 May 2017 16:49:05 -0000
@@ -1,17 +1,27 @@
-@comment $OpenBSD: PLIST-main,v 1.2 2010/07/06 07:41:46 sthen Exp $
+@comment $OpenBSD$
@pkgpath net/olsrd
+@pkgpath net/olsrd,-plugins
+@conflict olsrd-plugins-*
+bin/olsr-topology-view.pl
+lib/olsrd-plugins/
+lib/olsrd-plugins/olsrd_dot_draw.so
+lib/olsrd-plugins/olsrd_httpinfo.so
+lib/olsrd-plugins/olsrd_jsoninfo.so
+lib/olsrd-plugins/olsrd_mini.so
+lib/olsrd-plugins/olsrd_nameservice.so
+lib/olsrd-plugins/olsrd_pgraph.so
+lib/olsrd-plugins/olsrd_secure.so
+lib/olsrd-plugins/olsrd_txtinfo.so
+lib/olsrd-plugins/olsrd_watchdog.so
@man man/man5/olsrd.conf.5
@man man/man8/olsrd.8
@bin sbin/olsrd
-share/doc/olsrd/
-share/doc/olsrd/CHANGELOG
-share/doc/olsrd/README
-share/doc/olsrd/README-Link-Quality-Fish-Eye.txt
-share/doc/olsrd/README-Link-Quality.html
share/examples/olsrd/
-@comment share/examples/olsrd/olsrd.conf
+@sample ${SYSCONFDIR}/olsrd/
+share/examples/olsrd/olsrd.conf
+@sample ${SYSCONFDIR}/olsrd/olsrd.conf
share/examples/olsrd/olsrd.conf.default.full
+share/examples/olsrd/olsrd.conf.default.full.txt
share/examples/olsrd/olsrd.conf.default.lq
-share/examples/olsrd/olsrd.conf.default.lq-fisheye
share/examples/olsrd/olsrd.conf.default.rfc
-@sample ${SYSCONFDIR}/olsrd.conf
+@rcscript /etc/rc.d/olsrd
Index: pkg/PLIST-plugins
===================================================================
RCS file: pkg/PLIST-plugins
diff -N pkg/PLIST-plugins
--- pkg/PLIST-plugins 4 Apr 2016 16:09:10 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,13 +0,0 @@
-@comment $OpenBSD: PLIST-plugins,v 1.2 2016/04/04 16:09:10 naddy Exp $
-bin/olsr-topology-view.pl
-lib/olsrd-plugins/
-lib/olsrd-plugins/olsrd_dot_draw.so
-lib/olsrd-plugins/olsrd_dyn_gw.so
-lib/olsrd-plugins/olsrd_dyn_gw_plain.so
-lib/olsrd-plugins/olsrd_httpinfo.so
-lib/olsrd-plugins/olsrd_mini.so
-lib/olsrd-plugins/olsrd_nameservice.so
-lib/olsrd-plugins/olsrd_pgraph.so
-lib/olsrd-plugins/olsrd_secure.so
-lib/olsrd-plugins/olsrd_txtinfo.so
-lib/olsrd-plugins/olsrd_watchdog.so
Index: pkg/olsrd.rc
===================================================================
RCS file: pkg/olsrd.rc
diff -N pkg/olsrd.rc
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ pkg/olsrd.rc 3 Apr 2016 11:04:23 -0000
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+daemon="${TRUEPREFIX}/sbin/olsrd"
+
+. /etc/rc.d/rc.subr
+
+rc_reload=NO
+
+rc_cmd $1