Hey all, So the problem turned out to be that somehow, when ethermediumlink() is called, its view of the namespace doesn't include /net as a separate mount. So I figured the devroot reset routine was getting called somehow after all the ip stuff attached. I reordered stuff to attempt to guarantee this wasn't the case, but didn't have much luck with that either. However, manually changing all the chandial lines to use #l/ether0 (instead of argv[2], which was /net/ether0) causes stuff to `just work'.
Clearly my idea of what's happening in what order is kind of screwy. I've plopped things in various orders, but the only way things are running is if I use that hack. I see that '#l' is bound to /net in /lib/namespace, so it's happening before rio starts (and even if that's not where that happened; I put a bind -a '#l' /net in /usr/glenda/lib/profile prior to rio starting and that didn't help). Regarding the order of things: I'm calling links() after initseg() as it is in Plan 9's main.c; inside links(), I call ethervelink() (my virtual ethernet driver), ethermediumlink(), netdevmediumlink() and loopbackmediumlink(). Any ideas now that the issue is a bit less arcane? --dho