create virtual interfaces before starting all interface config.
authordlg <dlg@openbsd.org>
Wed, 14 Feb 2018 22:08:45 +0000 (22:08 +0000)
committerdlg <dlg@openbsd.org>
Wed, 14 Feb 2018 22:08:45 +0000 (22:08 +0000)
this resolves an ordering problem when adding pseudo interfaces to bridges

tweaks from kn@
ok mpi@ sthen@

etc/netstart

index 8a46cd2..4a04e73 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/sh -
 #
-#      $OpenBSD: netstart,v 1.190 2018/02/10 08:46:10 claudio Exp $
+#      $OpenBSD: netstart,v 1.191 2018/02/14 22:08:45 dlg Exp $
 
 # Turn off Strict Bourne shell mode.
 set +o sh
@@ -72,6 +72,26 @@ parse_hn_line() {
        set +o noglob
 }
 
+ifcreate() {
+       local _if=$1
+
+       { ifconfig $_if || ifconfig $_if create; } >/dev/null 2>&1 || return
+}
+
+vifscreate() {
+       local _vifs=$(ifconfig -C) _vif _hn _if
+
+       for _vif in ${_vifs}; do
+               for _hn in /etc/hostname.${_vif}*; do
+                       [[ -f $_hn ]] || continue
+                       _if=${_hn#/etc/hostname.}
+
+                       # Create wanted ifs.
+                       ifcreate $_if || return
+               done
+       done
+}
+
 # Start a single interface.
 # Usage: ifstart if1
 ifstart() {
@@ -97,8 +117,7 @@ ifstart() {
 
        # Check for ifconfig'able interface, except if -n option is specified.
        if ! $PRINT_ONLY; then
-               (ifconfig $_if || ifconfig $_if create) >/dev/null 2>&1 ||
-               return
+               ifcreate $_if || return
        fi
 
        # Parse the hostname.if(5) file and fill _cmds array with interface
@@ -260,15 +279,17 @@ else
        ip6kernel=NO
 fi
 
+# Create all the pseudo interfaces up front
+vifscreate
 
 # Configure all the non-loopback interfaces which we know about, but
 # do not start interfaces which must be delayed. Refer to hostname.if(5)
-ifmstart "" "trunk svlan vlan carp gif gre pfsync pppoe tun bridge switch pflow"
+ifmstart "" "trunk svlan vlan carp pppoe tun tap gif etherip gre egre mobileip pflow"
 
 # The trunk interfaces need to come up first in this list.
 # The (s)vlan interfaces need to come up after trunk.
 # Configure all the carp interfaces which we know about before default route.
-ifmstart "trunk svlan vlan carp"
+ifmstart "trunk svlan vlan carp pppoe"
 
 # Look for default routes in /etc/mygate.
 defaultroute
@@ -279,15 +300,12 @@ if [[ $multicast != YES ]]; then
        route -qn add -net 224.0.0.0/4 -interface 127.0.0.1 -reject >/dev/null
 fi
 
-# Configure PPPoE, GIF, GRE, TUN and PFLOW interfaces, delayed because they
-# require routes to be set. TUN might depend on PPPoE, and GIF or GRE may
-# depend on either of them. PFLOW might bind to ip addresses configured
-# on either of them.
-ifmstart "pppoe tun gif gre bridge switch pflow"
-
 # Reject 127/8 other than 127.0.0.1.
 route -qn add -net 127 127.0.0.1 -reject >/dev/null
 
+# Configure interfaces that rely on routing
+ifmstart "tun tap gif etherip gre egre mobileip pflow"
+
 if [[ $ip6kernel == YES ]]; then
        # This is to make sure DAD is completed before going further.
        count=0