Index: net/zerotier/Makefile =================================================================== --- net/zerotier/Makefile +++ net/zerotier/Makefile @@ -3,7 +3,7 @@ PORTNAME= zerotier DISTVERSION= 1.2.12 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= net MAINTAINER= dch@FreeBSD.org @@ -37,6 +37,12 @@ .else SUB_LIST+= ZEROTIER_SYSLOG="" .endif +# after r347241 tun(4) and tap(4) have been merged to tuntap(4) +.if (${OSVERSION} >= 1300028) +SUB_LIST+= ZEROTIER_IF_TAP="if_tuntap" +.else +SUB_LIST+= ZEROTIER_IF_TAP="if_tap" +.endif .endif do-install: Index: net/zerotier/files/local.conf.sample =================================================================== --- /dev/null +++ net/zerotier/files/local.conf.sample @@ -0,0 +1,15 @@ +{ + "physical": { + "127.0.0.0/8": { + "blacklist": true + }, + "10.0.0.0/8": { + "blacklist": true + } + }, + "settings": { + "primaryPort": 0, + "allowTcpFallbackRelay": false + } +} + Index: net/zerotier/files/zerotier.in =================================================================== --- net/zerotier/files/zerotier.in +++ net/zerotier/files/zerotier.in @@ -12,29 +12,51 @@ # # zerotier_enable (bool): Set to NO by default. # Set it to YES to enable zerotier. +# zerotier_wait_for_net (bool): Set to NO by default. Use for DHCP interfaces only +# Set it to YES to require zerotier to wait until online . /etc/rc.subr name=zerotier rcvar=zerotier_enable +desc="peer-to-peer software-defined networking" load_rc_config $name -: ${zerotier_enable:="NO"} +: ${zerotier_enable:=NO} +: ${zerotier_wait_for_net:=NO} -required_modules="if_tap" +required_modules=%%ZEROTIER_IF_TAP%% pidfile="/var/run/${name}.pid" start_precmd="install -o root /dev/null ${pidfile}" -command="/usr/sbin/daemon" +command=/usr/sbin/daemon command_args=" \ -c \ -t ${name} \ -r \ -P ${pidfile} \ %%ZEROTIER_SYSLOG%% \ - /usr/local/sbin/${name}-one" + %%PREFIX%%/sbin/${name}-one /var/db/${name}-one/" + +start_postcmd=start_postcmd + +start_postcmd() +{ if checkyesno zerotier_wait_for_net; then + zerotier_count=5 + until %%PREFIX%%/bin/zerotier-cli status |egrep -o ONLINE\$; do + warn ${name} is waiting for ONLINE status + sleep 2 + zerotier_count=$((zerotier_count-1)) + test $zerotier_count -le 0 && break + done + if test $zerotier_count -le 0; then + warn ${name} still not ONLINE, stopped blocking + else + warn ${name} is ONLINE + fi + fi +} run_rc_command "$1" - Index: net/zerotier/pkg-message =================================================================== --- net/zerotier/pkg-message +++ net/zerotier/pkg-message @@ -17,4 +17,14 @@ This avoids a race condition where zerotier interfaces are created, but not up, prior to firewalls and services trying to use them. +You can place optional configuration in /var/db/zerotier-one/local.conf +as required, see documentation at https://www.zerotier.com/manual.shtml + +If your system boots from DHCP (such as a laptop), there is a new rc.conf +flag that will require that system startup will wait until the zerotier +network is established before proceeding. Note that this flag *does not* +work for systems confgured with statically assigned IP addresses, and +these will hang indefinitely due to an irreducible loop in rc(8) startup +files. This flag is disabled by default. + #################################