Discussion:
bcm4318 (b43) can't create ibss or set channel
Dennis New
2018-11-15 18:45:47 UTC
Permalink
b43: bcm4318 can't create ibss or set channel

I keep getting a "Invalid argument (-22)" error whenever I try to create an IBSS adhoc network or whenever I try to change the channel or frequency. "iw reg get" also gives me weird values, I think -- eg. lots of "N/As".

My card is BCM4318 (14e4:4318 (rev 02)). I'm using the latest working firmware for my wifi card (666.2, 2011-02-23), and the latest kernel (4.19.2). Thoughts?


# modprobe b43
kernel: b43-phy2: Broadcom 4318 WLAN found (core revision 9)
kernel: b43-phy2: Found PHY: Analog 3, Type 2 (G), Revision 7
kernel: b43-phy2: Found Radio: Manuf 0x17F, ID 0x2050, Revision 8, Version 0
kernel: b43-phy2 debug: DebugFS (CONFIG_DEBUG_FS) not enabled in kernel config
kernel: Broadcom 43xx driver loaded [ Features: P ]
kernel: ieee80211 phy2: Selected rate control algorithm 'minstrel_ht'


# iw wlan0 set type ibss
# ip link set wlan0 up
kernel: b43-phy2: Loading firmware version 666.2 (2011-02-23 01:15:07)
kernel: b43-phy2 debug: Chip initialized
kernel: b43-phy2 debug: 32-bit DMA initialized
kernel: b43-phy2 debug: QoS enabled
kernel: b43-phy2 debug: Wireless interface started
kernel: b43-phy2 debug: Adding Interface type 1


# iw --debug wlan0 ibss join blabla 2437
-- Debug: Sent Message:
-------------------------- BEGIN NETLINK MESSAGE ---------------------------
[NETLINK HEADER] 16 octets
.nlmsg_len = 72
.type = 22 <0x16>
.flags = 5 <REQUEST,ACK>
.seq = 1542305664
.port = 813726157
[GENERIC NETLINK HEADER] 4 octets
.cmd = 43
.version = 0
.unused = 0
[PAYLOAD] 52 octets
08 00 03 00 06 00 00 00 0a 00 34 00 62 6c 61 62 ..........4.blab
6c 61 00 00 08 00 26 00 85 09 00 00 08 00 9f 00 la....&.........
00 00 00 00 08 00 27 00 00 00 00 00 08 00 a0 00 ......'.........
85 09 00 00 ....
--------------------------- END NETLINK MESSAGE ---------------------------
-- Debug: Received Message:
-------------------------- BEGIN NETLINK MESSAGE ---------------------------
[NETLINK HEADER] 16 octets
.nlmsg_len = 92
.type = 2 <ERROR>
.flags = 0 <>
.seq = 1542305664
.port = 813726157
[ERRORMSG] 20 octets
.error = -22 "Invalid argument"
[ORIGINAL MESSAGE] 16 octets
.nlmsg_len = 16
.type = 22 <0x16>
.flags = 5 <REQUEST,ACK>
.seq = 1542305664
.port = 813726157
--------------------------- END NETLINK MESSAGE ---------------------------
command failed: Invalid argument (-22)


# iw reg get
global
country 00: DFS-UNSET
(2402 - 2472 @ 92), (N/A, 20), (N/A)
(2457 - 2482 @ 92), (N/A, 20), (N/A), PASSIVE-SCAN
(2474 - 2494 @ 20), (N/A, 20), (N/A), NO-OFDM, PASSIVE-SCAN
(5170 - 5250 @ 160), (N/A, 20), (N/A), PASSIVE-SCAN
(5250 - 5330 @ 160), (N/A, 20), (0 ms), DFS, PASSIVE-SCAN
(5490 - 5730 @ 160), (N/A, 20), (0 ms), DFS, PASSIVE-SCAN
(5735 - 5835 @ 80), (N/A, 20), (N/A), PASSIVE-SCAN
(57240 - 63720 @ 2160), (N/A, 0), (N/A)


# iw --debug wlan0 set channel 6
-- Debug: Sent Message:
-------------------------- BEGIN NETLINK MESSAGE ---------------------------
[NETLINK HEADER] 16 octets
.nlmsg_len = 60
.type = 22 <0x16>
.flags = 5 <REQUEST,ACK>
.seq = 1542305850
.port = -939492680
[GENERIC NETLINK HEADER] 4 octets
.cmd = 2
.version = 0
.unused = 0
[PAYLOAD] 40 octets
08 00 03 00 06 00 00 00 08 00 26 00 85 09 00 00 ..........&.....
08 00 9f 00 00 00 00 00 08 00 27 00 00 00 00 00 ..........'.....
08 00 a0 00 85 09 00 00 ........
--------------------------- END NETLINK MESSAGE ---------------------------
-- Debug: Received Message:
-------------------------- BEGIN NETLINK MESSAGE ---------------------------
[NETLINK HEADER] 16 octets
.nlmsg_len = 80
.type = 2 <ERROR>
.flags = 0 <>
.seq = 1542305850
.port = -939492680
[ERRORMSG] 20 octets
.error = -22 "Invalid argument"
[ORIGINAL MESSAGE] 16 octets
.nlmsg_len = 16
.type = 22 <0x16>
.flags = 5 <REQUEST,ACK>
.seq = 1542305850
.port = -939492680
--------------------------- END NETLINK MESSAGE ---------------------------
command failed: Invalid argument (-22)


# ifconfig wlan0 down
kernel: b43-phy2 debug: Removing Interface type 1
kernel: b43-phy2 debug: Wireless interface stopped
kernel: b43-phy2 debug: DMA-32 rx_ring: Used slots 1/256, Failed frames 0/0 = 0.0%, Average tries 0.00
kernel: b43-phy2 debug: DMA-32 tx_ring_AC_BK: Used slots 0/256, Failed frames 0/0 = 0.0%, Average tries 0.00
kernel: b43-phy2 debug: DMA-32 tx_ring_AC_BE: Used slots 0/256, Failed frames 0/0 = 0.0%, Average tries 0.00
kernel: b43-phy2 debug: DMA-32 tx_ring_AC_VI: Used slots 0/256, Failed frames 0/0 = 0.0%, Average tries 0.00
kernel: b43-phy2 debug: DMA-32 tx_ring_AC_VO: Used slots 0/256, Failed frames 0/0 = 0.0%, Average tries 0.00
kernel: b43-phy2 debug: DMA-32 tx_ring_mcast: Used slots 0/256, Failed frames 0/0 = 0.0%, Average tries 0.00


Even when I try to use the old iwconfig, I can't connect to an IBSS network with a slightly different error message, repeated over and over again:

# iwconfig wlan0 essid blabla
wlan0: Selected IBSS BSSID 52:fc:75:5d:a0:d4 based on configured SSID
wlan0: Failed to join IBSS, beacons forbidden
Dennis New
2018-11-16 13:04:10 UTC
Permalink
Post by Dennis New
b43: bcm4318 can't create ibss or set channel
I keep getting a "Invalid argument (-22)" error whenever I try to create an IBSS adhoc network or whenever I try to change the channel or frequency. "iw reg get" also gives me weird values, I think -- eg. lots of "N/As".
My card is BCM4318 (14e4:4318 (rev 02)). I'm using the latest working firmware for my wifi card (666.2, 2011-02-23), and the latest kernel (4.19.2). Thoughts?
# modprobe b43
kernel: b43-phy2: Broadcom 4318 WLAN found (core revision 9)
kernel: b43-phy2: Found PHY: Analog 3, Type 2 (G), Revision 7
kernel: b43-phy2: Found Radio: Manuf 0x17F, ID 0x2050, Revision 8, Version 0
kernel: b43-phy2 debug: DebugFS (CONFIG_DEBUG_FS) not enabled in kernel config
kernel: Broadcom 43xx driver loaded [ Features: P ]
kernel: ieee80211 phy2: Selected rate control algorithm 'minstrel_ht'
# iw wlan0 set type ibss
# ip link set wlan0 up
kernel: b43-phy2: Loading firmware version 666.2 (2011-02-23 01:15:07)
kernel: b43-phy2 debug: Chip initialized
kernel: b43-phy2 debug: 32-bit DMA initialized
kernel: b43-phy2 debug: QoS enabled
kernel: b43-phy2 debug: Wireless interface started
kernel: b43-phy2 debug: Adding Interface type 1
# iw --debug wlan0 ibss join blabla 2437
-------------------------- BEGIN NETLINK MESSAGE ---------------------------
[NETLINK HEADER] 16 octets
.nlmsg_len = 72
.type = 22 <0x16>
.flags = 5 <REQUEST,ACK>
.seq = 1542305664
.port = 813726157
[GENERIC NETLINK HEADER] 4 octets
.cmd = 43
.version = 0
.unused = 0
[PAYLOAD] 52 octets
08 00 03 00 06 00 00 00 0a 00 34 00 62 6c 61 62 ..........4.blab
6c 61 00 00 08 00 26 00 85 09 00 00 08 00 9f 00 la....&.........
00 00 00 00 08 00 27 00 00 00 00 00 08 00 a0 00 ......'.........
85 09 00 00 ....
--------------------------- END NETLINK MESSAGE ---------------------------
-------------------------- BEGIN NETLINK MESSAGE ---------------------------
[NETLINK HEADER] 16 octets
.nlmsg_len = 92
.type = 2 <ERROR>
.flags = 0 <>
.seq = 1542305664
.port = 813726157
[ERRORMSG] 20 octets
.error = -22 "Invalid argument"
[ORIGINAL MESSAGE] 16 octets
.nlmsg_len = 16
.type = 22 <0x16>
.flags = 5 <REQUEST,ACK>
.seq = 1542305664
.port = 813726157
--------------------------- END NETLINK MESSAGE ---------------------------
command failed: Invalid argument (-22)
# iw reg get
global
country 00: DFS-UNSET
# iw --debug wlan0 set channel 6
-------------------------- BEGIN NETLINK MESSAGE ---------------------------
[NETLINK HEADER] 16 octets
.nlmsg_len = 60
.type = 22 <0x16>
.flags = 5 <REQUEST,ACK>
.seq = 1542305850
.port = -939492680
[GENERIC NETLINK HEADER] 4 octets
.cmd = 2
.version = 0
.unused = 0
[PAYLOAD] 40 octets
08 00 03 00 06 00 00 00 08 00 26 00 85 09 00 00 ..........&.....
08 00 9f 00 00 00 00 00 08 00 27 00 00 00 00 00 ..........'.....
08 00 a0 00 85 09 00 00 ........
--------------------------- END NETLINK MESSAGE ---------------------------
-------------------------- BEGIN NETLINK MESSAGE ---------------------------
[NETLINK HEADER] 16 octets
.nlmsg_len = 80
.type = 2 <ERROR>
.flags = 0 <>
.seq = 1542305850
.port = -939492680
[ERRORMSG] 20 octets
.error = -22 "Invalid argument"
[ORIGINAL MESSAGE] 16 octets
.nlmsg_len = 16
.type = 22 <0x16>
.flags = 5 <REQUEST,ACK>
.seq = 1542305850
.port = -939492680
--------------------------- END NETLINK MESSAGE ---------------------------
command failed: Invalid argument (-22)
# ifconfig wlan0 down
kernel: b43-phy2 debug: Removing Interface type 1
kernel: b43-phy2 debug: Wireless interface stopped
kernel: b43-phy2 debug: DMA-32 rx_ring: Used slots 1/256, Failed frames 0/0 = 0.0%, Average tries 0.00
kernel: b43-phy2 debug: DMA-32 tx_ring_AC_BK: Used slots 0/256, Failed frames 0/0 = 0.0%, Average tries 0.00
kernel: b43-phy2 debug: DMA-32 tx_ring_AC_BE: Used slots 0/256, Failed frames 0/0 = 0.0%, Average tries 0.00
kernel: b43-phy2 debug: DMA-32 tx_ring_AC_VI: Used slots 0/256, Failed frames 0/0 = 0.0%, Average tries 0.00
kernel: b43-phy2 debug: DMA-32 tx_ring_AC_VO: Used slots 0/256, Failed frames 0/0 = 0.0%, Average tries 0.00
kernel: b43-phy2 debug: DMA-32 tx_ring_mcast: Used slots 0/256, Failed frames 0/0 = 0.0%, Average tries 0.00
# iwconfig wlan0 essid blabla
wlan0: Selected IBSS BSSID 52:fc:75:5d:a0:d4 based on configured SSID
wlan0: Failed to join IBSS, beacons forbidden
Hm, after upgrading my wireless-regdb package (and/or maybe crda), it seems to work now - I can create an IBSS and change channels. It appears to have been a "regulatory" issue? I did notice that before I was missing /lib/firmware/regulatory.db[.p7s]. Now my "iw reg get" values are slightly different:

# iw reg get
global
country 00: DFS-UNSET
(2402 - 2472 @ 40), (N/A, 20), (N/A)
(2457 - 2482 @ 20), (N/A, 20), (N/A), AUTO-BW, NO-IR
(2474 - 2494 @ 20), (N/A, 20), (N/A), NO-OFDM, NO-IR
(5170 - 5250 @ 80), (N/A, 20), (N/A), AUTO-BW, NO-IR
(5250 - 5330 @ 80), (N/A, 20), (0 ms), DFS, AUTO-BW, NO-IR
(5490 - 5730 @ 160), (N/A, 20), (0 ms), DFS, NO-IR
(5735 - 5835 @ 80), (N/A, 20), (N/A), NO-IR
(57240 - 63720 @ 2160), (N/A, 0), (N/A)

I'm still not sure exactly what the problem was. The error message "Invalid argument -22" was also less than helpful. Any way that message can be made more helpful to avoid this confusion?
Larry Finger
2018-11-16 16:40:41 UTC
Permalink
Post by Dennis New
I'm still not sure exactly what the problem was. The error message "Invalid argument -22" was also less than helpful. Any way that message can be made more helpful to avoid this confusion?
Of course that is possible, but if every error message were expanded to full
text, Linux would become as bloated and slow as Windows, and probably not run on
hardware old enough to have a BCM4318 network card.

By the way, the low-number error codes are available in
/usr/include/asm-generic/errno-base.h, and the entire list is at
http://www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/Errors/unix_system_errors.html,
or do a search for "Linux error codes".

Error number -22 is "Invalid argument".

Larry
Dennis New
2018-11-16 17:15:36 UTC
Permalink
Post by Larry Finger
Post by Dennis New
I'm still not sure exactly what the problem was. The error message
"Invalid argument -22" was also less than helpful. Any way that
message can be made more helpful to avoid this confusion?
Of course that is possible, but if every error message were expanded
to full text, Linux would become as bloated and slow as Windows, and
probably not run on hardware old enough to have a BCM4318 network
card.
By the way, the low-number error codes are available in
/usr/include/asm-generic/errno-base.h, and the entire list is at
http://www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/Errors/unix_system_errors.html,
or do a search for "Linux error codes".
Error number -22 is "Invalid argument".
But I don't think the problem actually was an invalid argument. (And I
already knew that, it told me that in the error message.) The exact
same command worked after I updated the regulatory stuff, I think.
Loading...