diff options
author | David Gwynne <dlg@cvs.openbsd.org> | 2018-02-14 22:08:46 +0000 |
---|---|---|
committer | David Gwynne <dlg@cvs.openbsd.org> | 2018-02-14 22:08:46 +0000 |
commit | 4644ce29b786479fc2df245b817ae3c2ecf36f18 (patch) | |
tree | ea3726e4a7030ab351bc0407122c0059868164f9 | |
parent | 1edc43a45afb641b6931c1ffd19a21bd0d655c02 (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/netstart | 40 |
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 |