On Mon, Nov 15, 2021 at 12:00:18PM +1000, David Gwynne wrote: > On Sat, Nov 13, 2021 at 11:59:59PM +0000, Klemens Nanni wrote: > > Practically all interfaces pull itself up when IPs get assigned, but > > vport(4) does not. > > Yes, I do (or don't do) this very deliberately when I get the chance. > > > This broke IPv4 networking for me on a router I switched from bridge(4) > > to veb(4) because hostname.vport0 only contained the equivalent of > > > > descr LAN > > inet 192.0.2.1 > > inet6 2001:db8::1 > > > > e.g. the explicit "up" was missing. > > > > dhcpd(8) only considers UP interfaces to listen on during start; > > being the only interface it could potentially listen on, dhcpd thus > > ignored vport0 and failed to start. > > > > `ifconfig vport0 up && rcctl restart dhcpd' fixed this. > > Adding "up" to thostname.vport0 also fixed it. > > > > Nonetheless, vport should UP itself as the rest does. > > My counter argument is that no interface should implicitly bring itself > up when an address is configured because it has been a road block to > figuring out how to lock the ioctl paths better, and it confuses error > handling. If address config works, but the interface fails to come up, > the address remains configured but we report an error. But it looks like > configuring an address failed? Wat.
That's a valid point, although I must say I never ran into this issue. I fear that users have come to rely on the implicit up semantics, i.e. I doubt I'm the only one with hostname.* files lacking "up". > I've suggested previously that netstart should handle bringing an > interface up. look for "netstart: implicit up and explicit down for > hostname.if conf files" on tech@. I didn't hanve the energy to push > it forward though. I'll do the digging and try to catch up, thanks. > dhcpd should cope with an interface being down too. It should be about > whetherthe addresses are right more than if the interface is up or not. > > > > > OK? > > > > Index: net/if_veb.c > > =================================================================== > > RCS file: /cvs/src/sys/net/if_veb.c,v > > retrieving revision 1.21 > > diff -u -p -r1.21 if_veb.c > > --- net/if_veb.c 8 Nov 2021 04:15:46 -0000 1.21 > > +++ net/if_veb.c 13 Nov 2021 23:47:58 -0000 > > @@ -2122,6 +2122,10 @@ vport_ioctl(struct ifnet *ifp, u_long cm > > return (ENXIO); > > > > switch (cmd) { > > + case SIOCSIFADDR: > > + ifp->if_flags |= IFF_UP; > > + /* FALLTHROUGH */ > > + > > case SIOCSIFFLAGS: > > if (ISSET(ifp->if_flags, IFF_UP)) { > > if (!ISSET(ifp->if_flags, IFF_RUNNING)) > > >