diff options
author | flz <flz@FreeBSD.org> | 2007-02-09 12:11:27 +0000 |
---|---|---|
committer | flz <flz@FreeBSD.org> | 2007-02-09 12:11:27 +0000 |
commit | 1413639b9238c213f6fd20c22be81b638f394589 (patch) | |
tree | 78f9b3ec67fce1714ef34ec8691f0d068ea3c5f0 /etc | |
parent | 7b85d2378302df5cccd582f50d21f1f39d1453bd (diff) | |
download | FreeBSD-src-1413639b9238c213f6fd20c22be81b638f394589.zip FreeBSD-src-1413639b9238c213f6fd20c22be81b638f394589.tar.gz |
Add support for EtherChannel configuration to rc startup scripts.
Note: This also deprecates "NO" as a way to specify an empty list of
interfaces for gif_interfaces.
PR: conf/104884
Submitted by: nork
Harassed by: brd
Discussed with: brooks, dougb
Diffstat (limited to 'etc')
-rw-r--r-- | etc/defaults/rc.conf | 6 | ||||
-rw-r--r-- | etc/network.subr | 83 | ||||
-rw-r--r-- | etc/rc.d/netif | 3 |
3 files changed, 81 insertions, 11 deletions
diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf index 89b93d2..ccbeba7 100644 --- a/etc/defaults/rc.conf +++ b/etc/defaults/rc.conf @@ -178,11 +178,15 @@ ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration. sppp_interfaces="" # List of sppp interfaces. #sppp_interfaces="isp0" # example: sppp over ISDN #spppconfig_isp0="authproto=chap myauthname=foo myauthsecret='top secret' hisauthname=some-gw hisauthsecret='another secret'" -gif_interfaces="NO" # List of GIF tunnels (or "NO"). +gif_interfaces="" # List of GIF tunnels. #gif_interfaces="gif0 gif1" # Examples typically for a router. # Choose correct tunnel addrs. #gifconfig_gif0="10.1.1.1 10.1.2.1" # Examples typically for a router. #gifconfig_gif1="10.1.1.2 10.1.2.2" # Examples typically for a router. +fec_interfaces="" # List of Fast EtherChannels. +#fec_interfaces="fec0 fec1" +#fecconfig_fec0="fxp0 dc0" # Examples typically for two NICs +#fecconfig_fec1="em0 em1 bge0 bge1" # Examples typically for four NICs # User ppp configuration. ppp_enable="NO" # Start user-ppp (or NO). diff --git a/etc/network.subr b/etc/network.subr index c65ce50..c221115 100644 --- a/etc/network.subr +++ b/etc/network.subr @@ -455,26 +455,89 @@ clone_down() debug "Destroyed clones: ${_list}" } +# Create netgraph nodes. +# +ng_mkpeer() { + ngctl -f - 2> /dev/null <<EOF +mkpeer $* +msg dummy nodeinfo +EOF +} + +ng_create_one() { + ng_mkpeer $* | while read line; do + t=`expr "${line}" : '.* name="\([a-z]*[0-9]*\)" .*'` + if [ -n "${t}" ]; then + echo ${t} + return + fi + done +} + gif_up() { + # The following must be removed once RELENG_7 is branched. case ${gif_interfaces} in - [Nn][Oo] | '') + [Nn][Oo]) + warn "gif_interfaces=\"NO\" is deprecated, use gif_interfaces=\"\" instead." + gif_interfaces="" ;; - *) - for i in ${gif_interfaces}; do - peers=`get_if_var $i gifconfig_IF` - case ${peers} in + esac + + for i in ${gif_interfaces}; do + peers=`get_if_var $i gifconfig_IF` + case ${peers} in + '') + continue + ;; + *) + ifconfig $i create >/dev/null 2>&1 + ifconfig $i tunnel ${peers} + ifconfig $i up + ;; + esac + done +} + +# ng_fec_create ifn +# Configure Fast EtherChannel for interface $ifn. Returns 0 if FEC +# arguments were found and configured; returns !0 otherwise. +ng_fec_create() { + local req_iface iface bogus + req_iface="$1" + + ngctl shutdown ${req_iface}: > /dev/null 2>&1 + + bogus="" + while true; do + iface=`ng_create_one fec dummy fec` + if [ -z "${iface}" ]; then + exit 2 + fi + if [ "${iface}" = "${req_iface}" ]; then + break + fi + bogus="${bogus} ${iface}" + done + + for iface in ${bogus}; do + ngctl shutdown ${iface}: + done +} + +fec_up() { + for i in ${fec_interfaces}; do + ng_fec_create $i + for j in `get_if_var $i fecconfig_IF`; do + case ${j} in '') continue ;; *) - ifconfig $i create >/dev/null 2>&1 - ifconfig $i tunnel ${peers} - ifconfig $i up + ngctl msg ${i}: add_iface "\"${j}\"" ;; esac done - ;; - esac + done } # diff --git a/etc/rc.d/netif b/etc/rc.d/netif index 61ef8e3..8e6203d 100644 --- a/etc/rc.d/netif +++ b/etc/rc.d/netif @@ -57,6 +57,9 @@ network_start() # Create cloned interfaces clone_up + # Create Fast EtherChannel interfaces + fec_up + # Create IPv6<-->IPv4 tunnels gif_up |