Date: Fri, 9 Feb 2007 18:47:12 -0800 From: Jeremy Chadwick <koitsu@FreeBSD.org> To: Kevin Way <kevin@insidesystems.net> Cc: Brooks Davis <brooks@freebsd.org>, freebsd-stable@freebsd.org Subject: Re: Desired behaviour of "ifconfig -alias" Message-ID: <20070210024712.GA68286@icarus.home.lan> In-Reply-To: <45CD2A42.5050001@insidesystems.net> References: <45CCE270.7080704@insidesystems.net> <20070209214908.GA64090@icarus.home.lan> <20070209222925.GB11826@lor.one-eyed-alien.net> <45CD2A42.5050001@insidesystems.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Feb 09, 2007 at 09:13:22PM -0500, Kevin Way wrote: > I'm as much of a change-hating curmudgeon as the next guy, but if > anybody is relying on > "ifconfig iface -alias" 's undefined behavior, then they deserve the > pain that will come with a fix. > > As it stands the behavior appears to vary between drivers (archive > search shows that on fxp it > blows away all IPs, while on bce it blows away the primary IP, leaving > all aliases intact.) Upon looking at the code, I can see exactly where this (read: -alias without any arguments) can be addressed, and it's not in the NIC drivers. Tracing through src/sbin/ifconfig/ifconfig.c in RELENG_6: main() iterates through argv, calling cmd_lookup() on each argument passed. cmd_lookup() does a strcmp() comparison against the argument passed and what's in each struct entry pointed to by pointer "cmds". "cmds" is populated via the constructor ifconfig_ctor(), taking its data from a struct table called basic_cmds. Entries in basic_cmds use macros named DEF_CMD(), DEF_CMD_ARG(), and DEF_CMD_ARG2(), which define the number of arguments required. Thus, it seems to me that either the struct of basic_cmds needs to be changed to address things differently (argv parsers are fun!), or one could simply move "-alias" to require "inet" or "inet6" (or whatever other things you might want to match on). It seems to me that this oversight was addressed when adding 802.1 support to ifconfig -- thus creating ifieee80211.c, which has pre-requisite counts and things for some of the arguments. Thus, what I'm saying is this: the change should be doable, and the argument for "keeping this brokenness" fails miserably (sorry Brooks, I don't want you to feel like I'm raining on your parade, but your argument doesn't jive with me.) > Am I missing a reason that this could ever be desirable? If it was > consistent, I could see an > argument for documentation. But as it stands, the only thing to > document would be that the > behavior varies between drivers, and a fix has been declined on the > basis of momentum. I can't see why this would be desirable either. I don't want ifconfig to go the route of Linux's ipfwadm --> ipchains --> iptables (anyone familiar with that migration should understand my comparison), but we're talking about an oversight of the syntax parser here. Additionally, if each driver (fxp vs. bge vs. nve) all behave differently on -alias, that's also odd. I bet that one can be explained, though. > At a minimum can this get normalized in -HEAD? I would like to see this addressed in -HEAD and backported to RELENG_6, because this isn't an ifconfig syntax change, it's addressing a decent oversight in what expected arguments are for certain commands. -- | Jeremy Chadwick jdc at parodius.com | | Parodius Networking http://www.parodius.com/ | | UNIX Systems Administrator Mountain View, CA, USA | | Making life hard for others since 1977. PGP: 4BD6C0CB |
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070210024712.GA68286>