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 <mar...@openbsd.org> +MAINTAINER= Stefan Sperling <s...@openbsd.org> # 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