On Tue, Nov 02, 2021 at 05:43:03PM +0000, Klemens Nanni wrote: > On Tue, Nov 02, 2021 at 05:26:17PM +0000, Klemens Nanni wrote: > > At least bwfm(4) does not support WEP: > > > > # ifconfig bwfm0 nwkey 12345 > > ifconfig: SIOCS80211NWKEY: Operation not supported by device > > # echo $? > > 0 > > > > ifconfig(8) must return non-zero in this case. > > > > This is relevant for an upcoming installer fix, but also worth itself. > > > > OK? > > > > Index: ifconfig.c > > =================================================================== > > RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v > > retrieving revision 1.445 > > diff -u -p -r1.445 ifconfig.c > > --- ifconfig.c 6 Oct 2021 06:14:08 -0000 1.445 > > +++ ifconfig.c 2 Nov 2021 17:20:01 -0000 > > @@ -2033,7 +2033,7 @@ setifnwkey(const char *val, int d) > > } > > > > if (ioctl(sock, SIOCS80211NWKEY, (caddr_t)&nwkey) == -1) > > - warn("SIOCS80211NWKEY"); > > + err("SIOCS80211NWKEY"); > > } > > > > /* ARGSUSED */ > > > > I noticed the above mentioned error^Wwarning in the installer: > > Which network interface do you wish to configure? (or 'done') [bse0] > bwfm0 > ifconfig: SIOCS80211NWKEY: Operation not supported by device > Access point? (ESSID, 'any', list# or '?') [any] 2 > Security protocol? (O)pen, (W)EP, WPA-(P)SK [O] > > > This comes from ieee80211_scan(): > > Reset 802.11 settings and determine WPA capability. > ifconfig $_if -nwid -nwkey > ifconfig $_if -wpa 2>/dev/null && _has_wpa=1 > > > With ifconfig and installer fixed, we can properly detect and skip WEP: > > Which network interface do you wish to configure? (or 'done') [bse0] > bwfm0 > Access point? (ESSID, 'any', list# or '?') [any] 2 > Security protocol? (O)pen, WPA-(P)SK [O] w > 'w' is not a valid choice. > Security protocol? (O)pen, WPA-(P)SK [O] p > WPA passphrase? (will echo)
So bwfm(4) still has not fix/support for WEP. Whether accidentially as demonstrated above or potentially intentionally by removing WEP from (new) drivers in order to deprecate it, I think it is a good idea to probe for WEP support independently just like we do for WPA already. This way bwfm+WEP users won't run into install scenarios that are known to be broken; maybe other drivers have similar problems, so this diff would reflect it. If we ever^W^W^WOnce we deprecate WPA (on a per driver basis?), this diff will have us prepared already. I tested this on my Pinebook Pro and Pi 4 B which both come with bwfm. This also nicely decouples the ifconfig(8) commands used to reset; multiple commands together are not atomic and failure on one command will effect execution of the others (or not, the past showed both ways), so best reset step-by-step and be able to handle failure individually. OK? Index: install.sub =================================================================== RCS file: /cvs/src/distrib/miniroot/install.sub,v retrieving revision 1.1184 diff -u -p -r1.1184 install.sub --- install.sub 2 Nov 2021 16:54:01 -0000 1.1184 +++ install.sub 13 Nov 2021 13:11:34 -0000 @@ -1228,11 +1228,12 @@ ieee80211_scan() { # Configure 802.11 interface $1 and append ifconfig options to hostname.if $2. # Ask the user for the access point ESSID, the security protocol and a secret. ieee80211_config() { - local _if=$1 _hn=$2 _prompt _nwid _haswpa=0 _err + local _if=$1 _hn=$2 _prompt _nwid _has_wep=0 _has_wpa=0 _err - # Reset 802.11 settings and determine wpa capability. - ifconfig $_if -nwid -nwkey - ifconfig $_if -wpa 2>/dev/null && _haswpa=1 + # Reset 802.11 settings and determine WEP and WPA capabilities. + ifconfig $_if -nwid + ifconfig $_if -nwkey 2>/dev/null && _has_wep=1 + ifconfig $_if -wpa 2>/dev/null && _has_wpa=1 # Empty scan cache. rm -f $WLANLIST @@ -1256,17 +1257,19 @@ ieee80211_config() { # 'any' implies that only open access points are considered. if [[ $_nwid != any ]]; then - _prompt="Security protocol? (O)pen, (W)EP" - ((_haswpa == 1)) && _prompt="$_prompt, WPA-(P)SK" + _prompt="Security protocol? (O)pen" + ((_has_wep == 1)) && _prompt="$_prompt, (W)EP" + ((_has_wpa == 1)) && _prompt="$_prompt, WPA-(P)SK" while :; do ask_until "$_prompt" "O" - case "$_haswpa-$resp" in - ?-[Oo]) # No further questions + case "${_has_wep}${_has_wpa}-${resp}" in + ??-[Oo]) # No further questions ifconfig $_if join "$_nwid" quote join "$_nwid" >>$_hn break ;; - ?-[Ww]) ask_passphrase "WEP key?" + 1?-[Ww]) + ask_passphrase "WEP key?" # Make sure ifconfig accepts the key. if _err=$(ifconfig $_if join "$_nwid" nwkey "$_passphrase" 2>&1) && [[ -z $_err ]]; then @@ -1275,7 +1278,8 @@ ieee80211_config() { fi echo "$_err" ;; - 1-[Pp]) ask_passphrase "WPA passphrase?" + ?1-[Pp]) + ask_passphrase "WPA passphrase?" # Make sure ifconfig accepts the key. if ifconfig $_if join "$_nwid" wpakey "$_passphrase"; then quote join "$_nwid" wpakey "$_passphrase" >>$_hn