On 2022-11-11 20:15 UTC, Klemens Nanni <k...@openbsd.org> wrote:
> On Fri, Nov 11, 2022 at 07:00:27PM +0000, Florian Obser wrote:
>> On 2022-11-11 16:55 UTC, Klemens Nanni <k...@openbsd.org> wrote:
>> > Only /etc/hostname.athn0 contains autoconf on my X230.
>> >
>> > When the hardware switch turned off, netstart still waits 10 seconds:
>> >
>> >    $ ifconfig athn0
>> >    athn0: 
>> > flags=a48803<UP,BROADCAST,SIMPLEX,MULTICAST,AUTOCONF6TEMP,AUTOCONF6,AUTOCONF4>
>> >  mtu 1500
>> >            lladdr 04:f0:21:30:37:de
>> >            index 2 priority 4 llprio 3
>> >            groups: wlan
>> >            media: IEEE802.11 autoselect
>> >            status: no network
>> >            ieee80211: nwid ""
>> >
>> >    # time sh /etc/netstart
>> >        0m11.48s real     0m00.93s user     0m00.55s system
>> >
>> > For DHCP/SLAAC to kick in, the interface must be UP and RUNNING, so this
>> > won't exit ealier unless I turn the switch on *and* athn0 gets an IP and
>> > default route within those ten seconds, which is quite unlikely, imho.
>> >
>> > Make netstart wait for RUNNING interfaces only so booting in guaranteed
>> > offline mode won't stall for nothing:
>> >
>> >    # time sh ./netstart
>> >        0m00.73s real     0m00.57s user     0m00.20s system
>> >
>> > Feedback? Objection? OK?
>> 
>> I have a suspicion that netstart(8) could win the race against the
>> kernel and see an interface as not yet running while it currently comes
>> up, defeating the purpose.
>
> When 'ifconfig athn0 inet autoconf' returns, UP and RUNNING should be
> set immediately.
>
> SIOCSIFXFLAGS directly sets those flags without any asynchronous logic
> that would make ifconfig return early and set flags later in the
> kernel.

I see 155 instances of

        if_flags |= IFF_RUNNING

I don't find it obvious that IFF_RUNNING is set when ifconfig $IF inet
autoconf returns. Maybe it is true, but I don't see it.

>
> Am I missing something here?
>
>> 
>> On my laptop I'm setting a blackhole default route in one of my
>> hostname.if(5) files to get past the sleeping in netstart(8).
>
> That just sounds like a different "fix" for this naive sleep logic.
>
>> 
>> >
>> > Index: netstart
>> > ===================================================================
>> > RCS file: /cvs/src/etc/netstart,v
>> > retrieving revision 1.229
>> > diff -u -p -r1.229 netstart
>> > --- netstart       5 Nov 2022 12:06:05 -0000       1.229
>> > +++ netstart       11 Nov 2022 16:44:44 -0000
>> > @@ -292,7 +292,7 @@ ip6routes() {
>> >  wait_autoconf_default() {
>> >    local _count=0
>> >  
>> > -  if ifconfig | grep -q ': flags=.*<.*AUTOCONF.*>'; then
>> > +  if ifconfig | grep -q ': flags=.*<.*RUNNING.*AUTOCONF.*>'; then
>> >            while ((_count++ < 20)); do
>> >                    route -n show | grep -q ^default && break
>> >                    sleep .5
>> >
>> 
>> -- 
>> I'm not entirely sure you are real.
>> 
>

-- 
I'm not entirely sure you are real.

Reply via email to