Allocate if_index before queue init
authorvisa <visa@openbsd.org>
Fri, 29 Jul 2022 08:23:40 +0000 (08:23 +0000)
committervisa <visa@openbsd.org>
Fri, 29 Jul 2022 08:23:40 +0000 (08:23 +0000)
commitcd87b87e70b0b015b9f21163de1938f03e84e403
treeb9ac0632bd8defb9dc255319da657d925593ed84
parentd06d27a760a60fa720f760cd1c42247d24874d5f
Allocate if_index before queue init

Allocate the index of a new network interface early so that the index
is available when the interface's queues are set up. This avoids
unintended concentration on net_tq(0).

Replace the kernel lock with an rwlock to serialize index map updates.
The kernel lock is not reliable here because the memory allocation
can sleep.

Also, correct the "too many interfaces" condition because the valid
index range is from 1 to USHRT_MAX.

OK bluhm@
sys/net/if.c