diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf index 89b93d294f6c..ccbeba762b05 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 c65ce502df4b..c2211154bc56 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 </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 61ef8e3dbcc6..8e6203d0c2e4 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 diff --git a/share/man/man5/rc.conf.5 b/share/man/man5/rc.conf.5 index 93a9fc3a0b59..92e5226b7236 100644 --- a/share/man/man5/rc.conf.5 +++ b/share/man/man5/rc.conf.5 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 23, 2007 +.Dd February 9, 2007 .Dt RC.CONF 5 .Os .Sh NAME @@ -1163,6 +1163,33 @@ Entries in are automatically appended to .Va network_interfaces for configuration. +.It Va fec_interfaces +.Pq Vt str +Set to the list of +.Xr ng_fec 4 +Fast EtherChannel interfaces to configure on this host. +A +.Va fecconfig_ Ns Aq Ar interface +variable is assumed to exist for each value of +.Ar interface . +The value of this variable is used to configure link aggregated interfaces +according to the syntax of the +.Cm NGM_FEC_ADD_IFACE +to +.Xr ngctl 8 +msg. +Additionally, this option ensures that each listed interface is created +via the +.Cm mkpeer +command to +.Xr ngctl 8 +before attempting to configure it. +For example: +.Bd -literal +fec_interfaces="fec0" +fecconfig_fec0="em0 em1" +ifconfig_fec0="DHCP" +.Ed .It Va gif_interfaces .Pq Vt str Set to the list of