Date: Tue, 5 Sep 2017 13:49:55 -0700 From: Russell Haley <russ.haley@gmail.com> To: freebsd-arm <freebsd-arm@freebsd.org> Subject: Re: Beaglebone Black + FreeBSD + USB WiFi = WAP? Message-ID: <CABx9NuQzHAnCHEQ4Vyb0YVCiJruz86eAMG5S=XXtiL4OgwhruA@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
This got sent only to Chris by accident so I am forwarding it to the mailing list. Comment below... Russ ---------- Forwarded message ---------- From: Russell Haley <russ.haley@gmail.com> Date: Mon, Sep 4, 2017 at 10:59 PM Subject: Re: Beaglebone Black + FreeBSD + USB WiFi =3D WAP? To: Chris Gordon <freebsd@theory14.net> On Mon, Sep 4, 2017 at 10:50 PM, Russell Haley <russ.haley@gmail.com> wrote= : > On Sat, Aug 26, 2017 at 11:48 PM, Russell Haley <russ.haley@gmail.com> wr= ote: >> On Sat, Aug 26, 2017 at 11:35 PM, Russell Haley <russ.haley@gmail.com> w= rote: >>> On Thu, Aug 24, 2017 at 11:26 PM, Russell Haley <russ.haley@gmail.com> = wrote: >>>> On Tue, Aug 22, 2017 at 5:51 PM, Chris Gordon <freebsd@theory14.net> w= rote: >>>>> Ilya, >>>>> >>>>> Thanks for the follow up. >>>>> >>>>>> On Aug 22, 2017, at 3:11 PM, Ilya Bakulin <ilya@bakulin.de> wrote: >>>>>> >>>>>> Hi Chris, >>>>>> >>>>>> have you found the issue already? >>>>> >>>>> I have not. See below for some theories... >>>>> >>>>>> If not: what does `top -Sa` show when you're running your speed test= ? >>>>>> Specifically what does "CPU:" line look like, and what are the top p= rocesses in the list? >>>>> >>>>> The system stays at >90% idle through the entire test (upload and dow= nload). I see 2-4% WCPU for interrupts and 1-2% for USB. >>>>> >>>>>> I've had an issue with FreeBSD acting as WAP (although using Atheros= -based NIC) some years ago, >>>>>> the problem back then was that the machine CPU was just too slow to = process the traffic. >>>>> >>>>> I had initially thought that maybe the little CPU in the BeagleBone w= asn=E2=80=99t up to the WPA encryption or the interrupt rate + usb where ju= st too much for it. Sometimes changing channels helps for a little bit. S= ince I=E2=80=99ve been tinkering with this little project, I=E2=80=99ve bee= n paying a bit more attention to my overall WiFi performance and I=E2=80=99= m beginning to think there are just too many WiFi signals nearby and conges= tion is just killing my overall WiFi performance. >>>>> >>>>> Any other ideas? >>>> >>>> Hi, I'm just trying to reproduce your setup with my BBB and an ASUS >>>> wi-fi stick. The chipset is Ralink RT3052. I just got the dongle >>>> working so I'll see if I can set it up as an access point this >>>> weekend. I can't make any promises on play time though. :) >>> >>> >>> >>> Hi! >>> >>> So I'm only partially successful repeating your test so far, but I can >>> cause a kernel panic! The following are my observations: >>> >>> Running BBB through ftdi cable. >>> Asus WiFi Adapter, RT3071 chipset >>> https://wikidevi.com/files/Ralink/RT307x%20product%20brief.pdf >>> >>> root@bbb:~ # uname -a >>> FreeBSD bbb.highfell.local 12.0-CURRENT FreeBSD 12.0-CURRENT #7 >>> r321601M: Thu Aug 17 22:13:21 PDT 2017 >>> russellh@prescott.highfell.local:/usr/home/russellh/FreeBSD/rh-armv6/ob= j/arm.armv6/usr/home/russellh/FreeBSD/rh-armv6/src/sys/BEAGLEBONE-MMCCAM >>> arm >>> >>> root@bbb:~ # cat /boot/loader.conf >>> if_run0_load=3D"YES" >>> wlan_mac_load=3D"YES" >>> >>> root@bbb:~ # cat /etc/rc.conf >>> hostname=3D"bbb.highfell.local" >>> ifconfig_cpsw0=3D"inet 192.168.2.101 netmask 255.255.255.0" >>> defaultrouter=3D"192.168.2.1" >>> hostapd_enable=3D"YES" >>> wlans_run0=3D"wlan0" >>> create_args_wlan0=3D"wlanmode hostap" >>> ifconfig_wlan0=3D"up" >>> #gateway_enable=3D"YES" >>> cloned_interfaces=3D"bridge0" >>> ifconfig_bridge0=3D"addm cpsw0 addm wlan0 up" >>> >>> sshd_enable=3D"YES" >>> sendmail_enable=3D"NONE" >>> sendmail_submit_enable=3D"NO" >>> sendmail_outbound_enable=3D"NO" >>> sendmail_msp_queue_enable=3D"NO" >>> growfs_enable=3D"YES" >>> >>> >>> >>> root@bbb:~ # cat /etc/hostapd.conf >>> interface=3Dwlan0 >>> debug=3D1 >>> ctrl_interface=3D/var/run/hostapd >>> ctrl_interface_group=3Dwheel >>> ssid=3Dfreebsd >>> wpa=3D2 >>> wpa_passphrase=3Dtesting >>> wpa_key_mgmt=3DWPA-PSK >>> wpa_pairwise=3DCCMP >>> >>> root@bbb:~ # cat /etc/resolv.conf >>> # Generated by resolvconf >>> nameserver 192.168.2.1 >>> >>> >>> 1) Before the kernel loads, loader give the following errors: >>> >>> can't find 'if_run' >>> can't find 'wlan_mac' >>> >>> 2) It seems the run0 usb wi-fi interface only comes up after the >>> bridge0 is already enabled. dmesg does NOT capture the output from the >>> failed attempt to add the non-existent wlan0 interface. However, I >>> grabbed it from the boot output in the serial console: >>> >>> #From dmesg: >>> >>> ugen1.2: <Ralink 802.11 n WLAN> at usbus1 >>> random: unblocking device. >>> bridge0: Ethernet address: 02:94:dd:d7:a3:00 >>> cpsw0: link state changed to DOWN >>> cpsw0: promiscuous mode enabled >>> bridge0: link state changed to DOWN >>> cpsw0: link state changed to UP >>> bridge0: link state changed to UP >>> run0 on uhub1 >>> run0: <1.0> on usbus1 >>> run0: MAC/BBP RT3572 (rev 0x0223), RF RT3052 (MIMO 2T2R), address >>> 60:a4:4c:ec:c9:a5 >>> ieee80211_load_module: load the wlan_amrr module by hand for now. >>> wlan0: Ethernet address: 60:a4:4c:ec:c9:a5 >>> run0: firmware RT3071 ver. 0.33 loaded >>> >>> #From console grab: >>> >>> eeding entropy: . >>> ifconfig: SIOCIFCREATE2: Invalid argument >>> bridge0: Ethernet address: 02:94:dd:d7:a3:00 >>> Created clone interfaces: bridge0. >>> cpsw0: link state changed to DOWN >>> cpsw0: promiscuous mode enabled >>> bridge0: link state changed to DOWN >>> ifconfig: BRDGADD wlan0: No such file or directory >>> cpsw0: link state changed to UP >>> bridge0: link state changed to UP >>> Starting Network: lo0 cpsw0 bridge0. >>> lo0: flags=3D8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 >>> options=3D600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6> >>> inet6 ::1 prefixlen 128 >>> inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 >>> inet 127.0.0.1 netmask 0xff000000 >>> groups: lo >>> nd6 options=3D21<PERFORMNUD,AUTO_LINKLOCAL> >>> cpsw0: flags=3D8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> >>> metric 0 mtu 1500 >>> options=3D8000b<RXCSUM,TXCSUM,VLAN_MTU,LINKSTATE> >>> ether a0:f6:fd:8a:c5:be >>> hwaddr a0:f6:fd:8a:c5:be >>> inet 192.168.2.101 netmask 0xffffff00 broadcast 192.168.2.255 >>> media: Ethernet autoselect (100baseTX <full-duplex>) >>> status: active >>> nd6 options=3D29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> >>> bridge0: flags=3D8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 = mtu 1500 >>> ether 02:94:dd:d7:a3:00 >>> id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15 >>> maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200 >>> root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0 >>> member: cpsw0 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> >>> ifmaxaddr 0 port 1 priority 128 path cost 55 >>> groups: bridge >>> nd6 options=3D9<PERFORMNUD,IFDISABLED> >>> Starting devd. >>> run0 on uhub1 >>> run0: <1.0> on usbus1 >>> run0: MAC/BBP RT3572 (rev 0x0223), RF RT3052 (MIMO 2T2R), address >>> 60:a4:4c:ec:c9:a5 >>> ieee80211_load_module: load the wlan_amrr module by hand for now. >>> wlan0: Ethernet address: 60:a4:4c:ec:c9:a5 >>> Created wlan(4) interfaces: wlan0. >>> run0: firmware RT3071 ver. 0.33 loaded >>> Starting Network: wlan0. >>> wlan0: flags=3D8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mt= u 1500 >>> ether 60:a4:4c:ec:c9:a5 >>> hwaddr 60:a4:4c:ec:c9:a5 >>> groups: wlan >>> ssid "" channel 11 (2462 MHz 11g) >>> regdomain FCC country US authmode OPEN privacy OFF txpower 30 >>> scanvalid 60 protmode CTS wme dtimperiod 1 -dfs bintval 0 >>> media: IEEE 802.11 Wireless Ethernet autoselect <hostap> >>> (autoselect <hostap>) >>> status: no carrier >>> nd6 options=3D29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> >>> add host 127.0.0.1: gateway lo0 fib 0: route already in table >>> add net default: gateway 192.168.2.1 >>> add host ::1: gateway lo0 fib 0: route already in table >>> >>> >>> *Something else to note about this setup output is that wlan0 did NOT >>> get the ssid or the security setup from /etc/hostapd.conf >>> >>> After boot I manually add the wlan0 to the bridge and then set the ssid >>> >>> root@bbb:~ # ifconfig bridge0 addm wlan0 >>> root@bbb:~ # ifconfig wlan0 ssid freebsd >>> >>> I brought the interface down and back up again which made the AP is >>> available to the clients. I open the ipod and get the system to >>> associate with the ap and enter the following information >>> >>> static IP >>> >>> address: 192.168.2.102 >>> subnet: 255.255.255.0 >>> router: 192.168.2.1 >>> dns : 192.168.1 >>> >>> After numerous wrong attempts at configuring the client, I managed to >>> get exactly ONE request through. The freebsd.org page came up. I then >>> tried to search for the ookla page and my bbb kernel paniced! (yay!) >>> https://pastebin.com/zB9AnWTv >>> >>> The next time I booted the entire board hung right after the usb wifi >>> adapter loaded (chop of hung board output, full output here >>> https://pastebin.com/M09C5NEP): >>> >>> cpsw0: link state changed to UP >>> bridge0: link state changed to UP >>> Starting Network: lo0 cpsw0 bridge0. >>> lo0: flags=3D8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 >>> options=3D600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6> >>> inet6 ::1 prefixlen 128 >>> inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 >>> inet 127.0.0.1 netmask 0xff000000 >>> groups: lo >>> nd6 options=3D21<PERFORMNUD,AUTO_LINKLOCAL> >>> cpsw0: flags=3D8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> >>> metric 0 mtu 1500 >>> options=3D8000b<RXCSUM,TXCSUM,VLAN_MTU,LINKSTATE> >>> ether a0:f6:fd:8a:c5:be >>> hwaddr a0:f6:fd:8a:c5:be >>> inet 192.168.2.101 netmask 0xffffff00 broadcast 192.168.2.255 >>> media: Ethernet autoselect (100baseTX <full-duplex>) >>> status: active >>> nd6 options=3D29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> >>> bridge0: flags=3D8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 = mtu 1500 >>> ether 02:94:dd:d7:a3:00 >>> id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15 >>> maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200 >>> root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0 >>> member: cpsw0 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> >>> ifmaxaddr 0 port 1 priority 128 path cost 55 >>> groups: bridge >>> nd6 options=3D9<PERFORMNUD,IFDISABLED> >>> Starting devd. >>> run0 on uhub1 >>> run0: <1.0> on usbus1 >>> >>> U-Boot SPL 2015.10-00001-g143c9ee (Nov 06 2015 - 15:27:19) >>> bad magic >>> >>> Sometimes it boots, sometimes it hangs (I'd say 3 to 1). The lights on >>> the cpsw0 interface still blink but the serial console is dead. I'm >>> trying to *avoid* triggering that so I don't know the sequence that's >>> causing it. However, I can cause the kernel to panic on the BBB >>> relatively quickly from a handful of page requests on the ipod. No >>> more than three full page requests so far. It seems there is a bad >>> memory copy happening in bridge_broadcast() at bridge_broadcast+0x1c4? >>> >>> https://www.freebsd.org/cgi/man.cgi?apropos=3D0&sektion=3D9&query=3Dm_d= up >>> >>> Anyway, that's all the time I have for this weekend. I'm going to take >>> the chance that someone wants to see this and put it in bugzilla. >>> >>> Cheers, >>> >>> Russ >> >> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D221845 >> >> Cheers, >> Russ > > Hi, > > I've been digging into the code for if_bridge.c, which is found under > sys/net. bridge_broadcast only has one call to m_dup on line 2553. Hi, I've been digging into the code for if_bridge.c, which is found under sys/net. bridge_broadcast only has one call to m_dup on line 2553. mc =3D m_dup(m, M_NOWAIT); if (mc =3D=3D NULL) { if_inc_counter(sc->sc_ifp, IFCOUNTER_OERRORS, 1); continue; } This is just a guess: I'm wondering if the M_NOWAIT is causing the panic because... er... "someone has a sleep lock they shouldn't"? I don't really know what I'm talking about though (a little bit of knowledge...) I guess I'd have to try and correlate to some sort of lock begin held in the adapter specific code? Cheers, Russ
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CABx9NuQzHAnCHEQ4Vyb0YVCiJruz86eAMG5S=XXtiL4OgwhruA>