conf/104884: Add support EtherChannel configuration to rc.conf
Norikatsu Shigemura
nork at FreeBSD.org
Mon Jan 29 16:53:19 UTC 2007
On Sun, 28 Jan 2007 19:37:03 +0000
Florent Thoumie <flz at freebsd.org> wrote:
> >> http://www.freebsd.org/cgi/query-pr.cgi?pr=104884
> >>> Category: conf
> >>> Responsible: freebsd-bugs
> >>> Synopsis: Add support EtherChannel configuration to rc.conf
> >>> Arrival-Date: Sat Oct 28 16:10:18 GMT 2006
> > I chased HEAD. Please see following patch.
> > Anyone, please handle this PR?
> > And I'll make a patch for 6-stable.
> I'm sorry, I meant to answer but forgot about it. I don't know much
Thanks for your handling.
> about technical details, so I'll only focus on style. Here are my
> comments on the patch:
I think that the answer of all questions is 'BECAUSE netgraph's
specification.'. :-)
> > Index: network.subr
> > ===================================================================
> > RCS file: /home/ncvs/src/etc/network.subr,v
> > retrieving revision 1.176
> > diff -u -r1.176 network.subr
> > --- network.subr 29 Oct 2006 13:29:49 -0000 1.176
> > +++ network.subr 28 Jan 2007 14:52:36 -0000
> > @@ -907,3 +907,78 @@
> > esac
> > done
> > }
> > +
> > +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
> > +}
I implemented ng_mkpeer and ng_create_one as generic functions.
If anyone want to add other netgraph function, they can use
these functions.
> > +ng_fec_create() {
> > + local req_iface iface bogus
> > + req_iface="$1"
> > + if [ -z "${req_iface}" ]; then
> Why are you testing this? It's only called in fec_up() and can't be
> called with a empty argument. Or do you want to "export" the function to
> other scripts?
Ah! This code's meaning was changed from original code. Yes,
I think that this code should be removed.
> > + 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
> > + echo ${iface}
> > + break
> > + fi
> > + bogus="${bogus} ${iface}"
> > + done
> > + for iface in ${bogus}; do
> > + ngctl shutdown ${iface}:
> > + done
>
> These loops are a bit confusing. If I understand correctly, you're
> creating interfaces until they reach the right number and then you
> delete all the ones which have been created unnecessarily? Could it be
Your understanding is right:-). But we cannot control unit number
in 'ngctl mkpeer', because 'Find the first free unit number for a
new interface' strategy in sys/netgraph/ng_fec.c#ng_fec_get_unit.
> that iface is higher than req_iface (which would loop undefinitely)?
Previously, I removed req_iface by ngctl shutdown. So not reache
infinity:-).
> > +# fec_up ifn
> > +# Configure Fast EtherChannel for interface $ifn. Returns 0 if FEC
> > +# arguments were found and configured; returns 1 otherwise.
> > +fec_up() {
> > + case ${fec_interfaces} in
> > + [Nn][Oo] | '')
> > + ;;
> What's the point of this? The 'case' seems useless to me. Just got with
> the 'for' loop. If it's an empty list, then it just won't do anything.
> Default has to be '' and not 'NO' (but it seems more sensible anyway).
I obtained gif_up code. I don't know why/where are problem in it.
> > --- defaults/rc.conf 20 Jan 2007 04:24:19 -0000 1.303
> > +++ defaults/rc.conf 28 Jan 2007 14:52:36 -0000
> > @@ -183,6 +183,10 @@
> > # 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="NO" # List of Fast EtherChannels (or "NO")
> Set to '' instead of 'NO' as explained above.
same as gif_interfaces, too.
More information about the freebsd-rc
mailing list