summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Gwynne <dlg@cvs.openbsd.org>2018-02-14 22:08:46 +0000
committerDavid Gwynne <dlg@cvs.openbsd.org>2018-02-14 22:08:46 +0000
commit4644ce29b786479fc2df245b817ae3c2ecf36f18 (patch)
treeea3726e4a7030ab351bc0407122c0059868164f9
parent1edc43a45afb641b6931c1ffd19a21bd0d655c02 (diff)
create virtual interfaces before starting all interface config.
this resolves an ordering problem when adding pseudo interfaces to bridges tweaks from kn@ ok mpi@ sthen@
-rw-r--r--etc/netstart40
1 files changed, 29 insertions, 11 deletions
diff --git a/etc/netstart b/etc/netstart
index 8a46cd2ad45..4a04e733e40 100644
--- a/etc/netstart
+++ b/etc/netstart
@@ -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