Thanks for this. My local ham radio group is using it for various flavors
of mesh (AREDN / BBHN / HSMM) and I've had a heck of a time getting it to
work properly on OBSD.

I'll likely be able to test it this weekend on -CURRENT.

On Fri, May 12, 2017 at 11:04 AM, Stefan Sperling <s...@stsp.name> wrote:

> This daemon is useful to me because it implements the routing protocol
> currently used in Berlin's Freifunk community wifi mesh. I have not been
> able to run this on OpenBSD for like a decade because our current port
> is very out of date and does not work in today's mesh configuration.
>
> This updates the port to the latest stable release, fixes a bug in ifnet.c,
> adds an rc script, rolls the plugins into the -main package (the stock
> daemon is pretty useless without them) and removes pkg/MESSAGE.
>
> I am also adding a dependency on libnet because the daemon is otherwise
> unable to send UDP packets to the address 255.255.255.255 which is
> required for Berlin's mesh config.
>
> The files which were in the share/doc directory in old releases are gone.
> The docs are of pretty dubious quality in general anyway and users are
> better served reading the website (or, in some cases, the code).
>
> Lightly tested on a -current laptop where I can successfully get IPv4
> routes to the mesh over ral(4) in IBSS mode. I have not tested v6 yet
> but will eventually. I plan to put this on my OpenBSD gateway to the
> mesh soon, where it will get some long term testing.
>
> 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    12 May 2017 15:43:05 -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>
>
>  # 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 15:19:35 -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$(PREFIX)/include/libnet-1.1
> ++LIBS +=               -L$(PREFIX)/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_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 15:21:02 -0000
> @@ -0,0 +1,14 @@
> +$OpenBSD$
> +
> +Index: src/bsd/net.c
> +--- src/bsd/net.c.orig
> ++++ src/bsd/net.c
> +@@ -594,7 +594,7 @@ olsr_sendto(int s, const void *buf, size_t len, int fl
> +
> +   /* initialize IP ID field if necessary */
> +   if (ip_id == 0) {
> +-    ip_id = (u_int16_t) (olsr_random() & 0xffff);
> ++    ip_id = (u_int16_t) (arc4random() & 0xffff);
> +   }
> +
> +   udp_tag = libnet_build_udp(olsr_cnf->olsrport,        /* src port */
> 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_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   3 Apr 2016 12:24:23 -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
> -+  char path[256] = "${LOCALBASE}/lib/olsrd-plugins/";
> +-#endif /* defined TESTLIB_PATH && TESTLIB_PATH */
> ++  char path[256] = "/usr/local/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/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 15:41:41 -0000
> @@ -1,17 +1,24 @@
> -@comment $OpenBSD: PLIST-main,v 1.2 2010/07/06 07:41:46 sthen Exp $
> -@pkgpath net/olsrd
> +@comment $OpenBSD$
> +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/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
>
>

Reply via email to