hah, make no assumptions about correctness. :)

Some of these NICs will do hostap mode themselves - you configure them
in hostap mode and they take care of managing beaconing, station
state, power save management, etc. This patch doesn't do that - it's
just treating the NIC as a mostly dumb device and expecting the stack
to do it.

It's fine as a starting point, as long as the NIC and its firmware is
happy with it. But yes, we do need to figure out how to get the beacon
updates to push new beacon frames into the NIC as required.



-adrian


On 17 September 2015 at 09:29, Matthew Grooms <mgro...@shrew.net> wrote:
> I just assumed that the card was doing the right thing with the beacon since
> it was being loaded into a specific queue. Like I said, I'm fumbling around
> here. Ok, I see the NetBSD commit now. It doesn't look anything like the
> patch I was working with. It also doesn't look specific to RTL8188E ...
>
> http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/dev/usb/if_urtwn.c.diff?r1=1.25&r2=1.26&only_with_tag=MAIN
>
> I should have checked NetBSD before hand :/
>
> -Matthew
>
>
> On 9/17/2015 10:22 AM, Adrian Chadd wrote:
>>
>> I think this patch is missing beacon updates - it just transmits the
>> same beacon over and oveR?
>>
>>
>> -a
>>
>>
>> On 17 September 2015 at 08:12, Kevin Lo <ke...@freebsd.org> wrote:
>>>
>>> On Thu, Sep 17, 2015 at 01:39:30AM -0500, Matthew Grooms wrote:
>>>>
>>>> Seems to behave better now and hostap appears to be working ...
>>>>
>>>> #ifconfig wlan0 create wlandev urtwn0 wlanmode hostap
>>>> #ifconfig wlan0 list caps
>>>>
>>>> drivercaps=2181c401<STA,HOSTAP,SHSLOT,SHPREAMBLE,MONITOR,WPA1,WPA2,BGSCAN>
>>>>
>>>> #ifconfig wlan0 up ssid freebsdap mode 11g channel 1
>>>> #ifconfig bridge0 create up addm em0 addm wlan0
>>>>
>>>> #ifconfig wlan0
>>>> wlan0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric
>>>> 0 mtu 1500
>>>>           ether 00:c3:e1:16:11:32
>>>>           nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
>>>>           media: IEEE 802.11 Wireless Ethernet autoselect mode 11g
>>>> <hostap>
>>>>           status: running
>>>>           ssid freebsdap channel 1 (2412 MHz 11g) bssid
>>>> 00:c3:e1:16:11:32
>>>>           country US authmode OPEN privacy OFF txpower 0 scanvalid 60
>>>>           protmode CTS dtimperiod 1 -dfs
>>>>           groups: wlan
>>>>
>>>> #ifconfig bridge0
>>>> bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu
>>>> 1500
>>>>           ether 02:df:20:d2:42:00
>>>>           nd6 options=1<PERFORMNUD>
>>>>           groups: bridge
>>>>           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: wlan0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
>>>>                   ifmaxaddr 0 port 3 priority 128 path cost 370370
>>>>           member: em0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
>>>>                   ifmaxaddr 0 port 1 priority 128 path cost 20000
>>>>
>>>> The speed leaves a lot to be desired. Throughput for the associated host
>>>> is typically about 2Mbit down and 6Mbit up. I'm assume that's indicative
>>>> of a problem. Occasionally I also see the this message on the console
>>>> when I'm bringing the adapter up ...
>>>>
>>>> wlan0: ieee80211_new_state_locked: pending INIT -> SCAN transition lost
>>>>
>>>> If I down and up the adapter again, it seems to correct itself. Not sure
>>>> what that's all about. I am passing the USB adapter through to a VM
>>>> inside of ESXi to test the patch, so maybe that has something to do with
>>>> these quirks. I'll try to run some tests with the adapter associated to
>>>> a physical AP tomorrow to get a baseline.
>>>
>>> I knew OpenBSD had patches about hostap support for urtwn(4), but those
>>> don't look quite right.  I think that's why OpenBSD developers didn't
>>> commit them.  BTW, NetBSD adopted OpenBSD's patches, I tested it on
>>> NetBSD
>>> about four months ago, the connection was not stable...
>>>
>>>> Thanks,
>>>>
>>>> -Matthew
>>>
>>>          Kevin
>>>
>>>> On 9/16/2015 11:24 AM, Adrian Chadd wrote:
>>>>>
>>>>> The only one to look at is ath(4). I've not fixed/hacked on any other
>>>>> hostap chips. :)
>>>>>
>>>>> if_ath_beacon.c has the logic - it gets a reference when creating a
>>>>> beacon frame.
>>>>>
>>>>>
>>>>>
>>>>> -adrian
>>>>>
>>>>>
>>>>> On 16 September 2015 at 09:21, Matthew Grooms <mgro...@shrew.net>
>>>>> wrote:
>>>>>>
>>>>>> On 9/16/2015 10:58 AM, Adrian Chadd wrote:
>>>>>>>
>>>>>>> I think the net80211 beacon create routine doesn't allocate a node
>>>>>>> ref. Yeah, it doesn't. You have to do ieee80211_ref_node() after
>>>>>>> calling becaon_create(), and deref it if the tx fails. The TX success
>>>>>>> will free the node ref for you.
>>>>>>>
>>>>>> Got it. I'll take another look at one of the drivers that support
>>>>>> hostap to
>>>>>> make sure I'm following the same pattern. Thanks again for the
>>>>>> feedback!
>>>>>>
>>>>>> -Matthew
>>>>>>
>>>>>>
>>>>>>> -adrian
>>>>>>>
>>>>>>>
>>>>>>> On 16 September 2015 at 04:27, Idwer Vollering <vid...@gmail.com>
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> 2015-09-16 8:06 GMT+02:00 Matthew Grooms <mgro...@shrew.net>:
>>>>>>>>
>>>>>>>>> It looks like my screenshot got scrubbed. Here is my hopefully
>>>>>>>>> faithful
>>>>>>>>> transcription ...
>>>>>>>>>
>>>>>>>>> Fatal trap 9: general protection fault while in kernel mode
>>>>>>>>> cpuid = 3; apic id = 03
>>>>>>>>> instruction pointer = 0x20:0xffffffff80a01105
>>>>>>>>> stack pointer           = 0x28:0xfffffe0092fe86f0
>>>>>>>>> frame pointer         = 0x28:0xfffffe0092fe8740
>>>>>>>>> code segment         = base 0x0, limit 0xfffff, type 0x1b
>>>>>>>>>                                     = DPL 0, pres 1, long 1, def32
>>>>>>>>> 0, gran
>>>>>>>>> 1
>>>>>>>>> processor eflags     = interrupt enabled, resume, IOPL = 0
>>>>>>>>> current process      = 716 (ifconfig)
>>>>>>>>> [thread pid 716 tid 100082 ]
>>>>>>>>> Stopped at      __mtx_lock_flags+0x55:  movq    (%r13),%rax
>>>>>>>>> db> bt
>>>>>>>>> Tracing pid 716 tid 100082 td 0xffffff800512814d0
>>>>>>>>> __mtx_lock_flags() at __mtx_lock_flags+0x55/frame
>>>>>>>>> 0xfffffe0092fe8740
>>>>>>>>> ieee80211_free_node() at ieee80211_free_node()_0x38/frame
>>>>>>>>> 0xfffffe0092fe8780
>>>>>>>>> ieee80211_node_vdetach() at ieee80211_node_vdetach()+0x2d/frame
>>>>>>>>> 0xfffffe0092fe87a0
>>>>>>>>> ieee80211_vap_detach() at ieee80211_vap_detach()+0x35e/frame
>>>>>>>>> 0xfffffe0092fe87d0
>>>>>>>>> urtwn_vap_delete() at urtwn_vap_delete()+0xe/frame
>>>>>>>>> 0xfffffe0092fe87f0
>>>>>>>>> if_clone_destroyif() at if_clone_destroyif()+0x1aa/frame
>>>>>>>>> 0xfffffe0092fe8840
>>>>>>>>> if_clone_destroy() at if_clone_destroy()0x8e/frame
>>>>>>>>> 0xfffffe0092fe8860
>>>>>>>>> kern_ioctl() at kern_ioctl()+0x230/frame 0xfffffe0092fe88c0
>>>>>>>>> sys_ioctl() at sys_ioctl()+0x153/frame 0xfffffe0092fe89a0
>>>>>>>>> amd64_syscall() at amd64_syscall()+0x282/frame 0xfffffe0092fe8ab0
>>>>>>>>> Xfast_syscall() at Xfast_syscall()+0xfb/frame 0xfffffe0092fe8ab0
>>>>>>>>> -- syscall (54, FreeBSD ELF64, sys_ioctl), rip = 0x8011e8c8a, rsp =
>>>>>>>>> 0x7fffffffe2f8, rbp = 0x7fffffffe310 --
>>>>>>>>> db>
>>>>>>>>
>>>>>>>> Assuming dumpdev="AUTO" is set in /etc/rc.conf, you should have
>>>>>>>> entered 'dump' at the db> blinker :)
>>>>>>>>
>>>>>>>> The trap details are found in /var/crash/, run kgdb: "kgdb
>>>>>>>> /boot/kernel/kernel /var/crash/vmcore.last", then run 'bt' and 'up'
>>>>>>>> at
>>>>>>>> its prompt.
>>>>>>>>
>>>>>>>>> -Matthew
>>>>>>>>> _______________________________________________
>>>>>>>>> freebsd-wireless@freebsd.org mailing list
>>>>>>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-wireless
>>>>>>>>> To unsubscribe, send any mail to
>>>>>>>>> "freebsd-wireless-unsubscr...@freebsd.org"
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> freebsd-wireless@freebsd.org mailing list
>>>>>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-wireless
>>>>>>>> To unsubscribe, send any mail to
>>>>>>>> "freebsd-wireless-unsubscr...@freebsd.org"
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> freebsd-wireless@freebsd.org mailing list
>>>>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-wireless
>>>>>>> To unsubscribe, send any mail to
>>>>>>> "freebsd-wireless-unsubscr...@freebsd.org"
>>>>>>
>>>>>> _______________________________________________
>>>>>> freebsd-wireless@freebsd.org mailing list
>>>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-wireless
>>>>>> To unsubscribe, send any mail to
>>>>>> "freebsd-wireless-unsubscr...@freebsd.org"
>>>>
>>>> Index: sys/dev/usb/wlan/if_urtwn.c
>>>> ===================================================================
>>>> --- sys/dev/usb/wlan/if_urtwn.c       (revision 287342)
>>>> +++ sys/dev/usb/wlan/if_urtwn.c       (working copy)
>>>> @@ -181,6 +181,8 @@
>>>>   static struct mbuf * urtwn_rxeof(struct usb_xfer *, struct urtwn_data
>>>> *,
>>>>                            int *, int8_t *);
>>>>   static void          urtwn_txeof(struct usb_xfer *, struct urtwn_data
>>>> *);
>>>> +int                  urtwn_txbcn(struct ieee80211vap *vap,
>>>> +                         struct ieee80211_node *);
>>>>   static int           urtwn_alloc_list(struct urtwn_softc *,
>>>>                            struct urtwn_data[], int, int);
>>>>   static int           urtwn_alloc_rx_list(struct urtwn_softc *);
>>>> @@ -436,6 +438,10 @@
>>>>                | IEEE80211_C_WPA               /* 802.11i */
>>>>                ;
>>>>
>>>> +     if (sc->chip & URTWN_CHIP_88E)
>>>> +             ic->ic_caps |=
>>>> +                 IEEE80211_C_HOSTAP;         /* HostAp mode supported
>>>> */
>>>> +
>>>>        bands = 0;
>>>>        setbit(&bands, IEEE80211_MODE_11B);
>>>>        setbit(&bands, IEEE80211_MODE_11G);
>>>> @@ -857,6 +863,39 @@
>>>>        sc->sc_txtimer = 0;
>>>>   }
>>>>
>>>> +/*
>>>> + * Push a beacon frame into the chip and check if it was accepted.
>>>> Beacon will
>>>> + * be repeated by the chip every R92C_BCN_INTERVAL.
>>>> + */
>>>> +int
>>>> +urtwn_txbcn(struct ieee80211vap *vap, struct ieee80211_node *ni)
>>>> +{
>>>> +     struct ieee80211com *ic = ni->ni_ic;
>>>> +     struct urtwn_softc *sc = ic->ic_softc;
>>>> +     struct urtwn_data *bf;
>>>> +     struct mbuf *m;
>>>> +
>>>> +     ieee80211_ref_node(ni);
>>>> +     m = ieee80211_beacon_alloc(ni, &URTWN_VAP(vap)->bo);
>>>> +
>>>> +     bf = urtwn_getbuf(sc);
>>>> +     if (bf == NULL) {
>>>> +             ieee80211_free_node(ni);
>>>> +             m_freem(m);
>>>> +             return (ENOBUFS);
>>>> +     }
>>>> +
>>>> +     if (urtwn_tx_start(sc, ni, m, bf) != 0) {
>>>> +             ieee80211_free_node(ni);
>>>> +             STAILQ_INSERT_HEAD(&sc->sc_tx_inactive, bf, next);
>>>> +             return (EIO);
>>>> +     }
>>>> +
>>>> +     sc->sc_txtimer = 5;
>>>> +
>>>> +     return (0);
>>>> +}
>>>> +
>>>>   static void
>>>>   urtwn_bulk_tx_callback(struct usb_xfer *xfer, usb_error_t error)
>>>>   {
>>>> @@ -1466,6 +1505,7 @@
>>>>        struct ieee80211_node *ni;
>>>>        enum ieee80211_state ostate;
>>>>        uint32_t reg;
>>>> +     int error;
>>>>
>>>>        ostate = vap->iv_state;
>>>>        DPRINTF("%s -> %s\n", ieee80211_state_name[ostate],
>>>> @@ -1553,23 +1593,68 @@
>>>>                }
>>>>
>>>>                ni = ieee80211_ref_node(vap->iv_bss);
>>>> -             /* Set media status to 'Associated'. */
>>>> -             reg = urtwn_read_4(sc, R92C_CR);
>>>> -             reg = RW(reg, R92C_CR_NETTYPE, R92C_CR_NETTYPE_INFRA);
>>>> -             urtwn_write_4(sc, R92C_CR, reg);
>>>>
>>>> -             /* Set BSSID. */
>>>> -             urtwn_write_4(sc, R92C_BSSID + 0,
>>>> LE_READ_4(&ni->ni_bssid[0]));
>>>> -             urtwn_write_4(sc, R92C_BSSID + 4,
>>>> LE_READ_2(&ni->ni_bssid[4]));
>>>> +             if (ic->ic_opmode == IEEE80211_M_STA) {
>>>> +                     /* Set BSSID. */
>>>> +                     urtwn_write_4(sc, R92C_BSSID + 0,
>>>> +                             LE_READ_4(&ni->ni_bssid[0]));
>>>> +                     urtwn_write_4(sc, R92C_BSSID + 4,
>>>> +                             LE_READ_2(&ni->ni_bssid[4]));
>>>>
>>>> -             if (ic->ic_curmode == IEEE80211_MODE_11B)
>>>> -                     urtwn_write_1(sc, R92C_INIRTS_RATE_SEL, 0);
>>>> -             else    /* 802.11b/g */
>>>> -                     urtwn_write_1(sc, R92C_INIRTS_RATE_SEL, 3);
>>>> +                     if (ic->ic_curmode == IEEE80211_MODE_11B)
>>>> +                             urtwn_write_1(sc, R92C_INIRTS_RATE_SEL,
>>>> 0);
>>>> +                     else    /* 802.11b/g */
>>>> +                             urtwn_write_1(sc, R92C_INIRTS_RATE_SEL,
>>>> 3);
>>>>
>>>> -             /* Enable Rx of data frames. */
>>>> -             urtwn_write_2(sc, R92C_RXFLTMAP2, 0xffff);
>>>> +                     /* Enable Rx of data frames. */
>>>> +                     urtwn_write_2(sc, R92C_RXFLTMAP2, 0xffff);
>>>>
>>>> +                     /* Allow Rx from our BSSID only. */
>>>> +                     urtwn_write_4(sc, R92C_RCR, urtwn_read_4(sc,
>>>> R92C_RCR) |
>>>> +                         R92C_RCR_CBSSID_DATA | R92C_RCR_CBSSID_BCN);
>>>> +
>>>> +                     /* Set media status to 'Associated'. */
>>>> +                     reg = urtwn_read_4(sc, R92C_CR);
>>>> +                     reg = RW(reg, R92C_CR_NETTYPE,
>>>> R92C_CR_NETTYPE_INFRA);
>>>> +                     urtwn_write_4(sc, R92C_CR, reg);
>>>> +             }
>>>> +
>>>> +             if (ic->ic_opmode == IEEE80211_M_HOSTAP) {
>>>> +                     /* Set media status to 'AP'. */
>>>> +                     reg = urtwn_read_4(sc, R92C_CR);
>>>> +                     reg = RW(reg, R92C_CR_NETTYPE,
>>>> R92C_CR_NETTYPE_AP);
>>>> +                     urtwn_write_4(sc, R92C_CR, reg);
>>>> +
>>>> +                     /* Set BSSID. */
>>>> +                     urtwn_write_4(sc, R92C_BSSID + 0,
>>>> +                         LE_READ_4(&ni->ni_bssid[0]));
>>>> +                     urtwn_write_4(sc, R92C_BSSID + 4,
>>>> +                         LE_READ_2(&ni->ni_bssid[4]));
>>>> +
>>>> +                     /*
>>>> +                      * If 3rd or 4th bits are set to zero chip will
>>>> stop
>>>> +                      * repeating beacon after first transmission for
>>>> port0
>>>> +                      * and port1 respectively. This will cause STAs to
>>>> +                      * disconnect after short period of time.
>>>> +                      */
>>>> +                     reg = urtwn_read_1(sc, R92C_MBID_NUM);
>>>> +                     reg |= 0x8;
>>>> +                     reg |= 0x10;
>>>> +                     urtwn_write_1(sc, R92C_MBID_NUM, reg);
>>>> +
>>>> +                     /* Invalidate cam entries */
>>>> +                     urtwn_cam_init(sc);
>>>> +
>>>> +                     /* Set chan/bw */
>>>> +                     urtwn_set_chan(sc, ic->ic_curchan, NULL);
>>>> +
>>>> +                     /* Push beacon frame into the chip */
>>>> +                     error = urtwn_txbcn(vap, ni);
>>>> +                     if (error != 0)
>>>> +                             printf("%s: unable to push beacon into
>>>> the"
>>>> +                                 " chip\n",
>>>> device_get_nameunit(sc->sc_dev));
>>>> +             }
>>>> +
>>>>                /* Flush all AC queues. */
>>>>                urtwn_write_1(sc, R92C_TXPAUSE, 0);
>>>>
>>>> @@ -1576,11 +1661,6 @@
>>>>                /* Set beacon interval. */
>>>>                urtwn_write_2(sc, R92C_BCN_INTERVAL, ni->ni_intval);
>>>>
>>>> -             /* Allow Rx from our BSSID only. */
>>>> -             urtwn_write_4(sc, R92C_RCR,
>>>> -                 urtwn_read_4(sc, R92C_RCR) |
>>>> -                 R92C_RCR_CBSSID_DATA | R92C_RCR_CBSSID_BCN);
>>>> -
>>>>                /* Enable TSF synchronization. */
>>>>                urtwn_tsf_sync_enable(sc);
>>>>
>>>> @@ -1754,7 +1834,7 @@
>>>>        struct ieee80211vap *vap = ni->ni_vap;
>>>>        struct usb_xfer *xfer;
>>>>        struct r92c_tx_desc *txd;
>>>> -     uint8_t raid, type;
>>>> +     uint8_t raid, type, subtype;
>>>>        uint16_t sum;
>>>>        int i, hasqos, xferlen;
>>>>        struct usb_xfer *urtwn_pipes[4] = {
>>>> @@ -1771,6 +1851,7 @@
>>>>         */
>>>>        wh = mtod(m0, struct ieee80211_frame *);
>>>>        type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
>>>> +     subtype = wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
>>>>
>>>>        if (wh->i_fc[1] & IEEE80211_FC1_PROTECTED) {
>>>>                k = ieee80211_crypto_encap(ni, m0);
>>>> @@ -1819,7 +1900,7 @@
>>>>                if (sc->chip & URTWN_CHIP_88E) {
>>>>                        txd->txdw1 |= htole32(
>>>>                            SM(R88E_TXDW1_MACID, URTWN_MACID_BSS) |
>>>> -                         SM(R92C_TXDW1_QSEL, R92C_TXDW1_QSEL_BE) |
>>>> +                         SM(R92C_TXDW1_QSEL, R88E_TXDW1_QSEL_BE) |
>>>>                            SM(R92C_TXDW1_RAID, raid));
>>>>                        txd->txdw2 |= htole32(R88E_TXDW2_AGGBK);
>>>>                } else {
>>>> @@ -1843,9 +1924,20 @@
>>>>                /* Send data at OFDM54. */
>>>>                txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE, 11));
>>>>        } else {
>>>> +             /*
>>>> +              * If beacon frame is pushed into wrong queue, the chip
>>>> won't
>>>> +              * start repeating it.
>>>> +              */
>>>> +             if (subtype == IEEE80211_FC0_SUBTYPE_BEACON &&
>>>> +                 sc->chip & URTWN_CHIP_88E)
>>>> +                     txd->txdw1 |= htole32(SM(R92C_TXDW1_QSEL,
>>>> +                         R88E_TXDW1_QSEL_MGNT));
>>>> +             else
>>>> +                     txd->txdw1 |= htole32(SM(R92C_TXDW1_QSEL,
>>>> +                         R92C_TXDW1_QSEL_MGNT));
>>>> +
>>>>                txd->txdw1 |= htole32(
>>>>                    SM(R92C_TXDW1_MACID, 0) |
>>>> -                 SM(R92C_TXDW1_QSEL, R92C_TXDW1_QSEL_MGNT) |
>>>>                    SM(R92C_TXDW1_RAID, R92C_RAID_11B));
>>>>
>>>>                /* Force CCK1. */
>>>> Index: sys/dev/usb/wlan/if_urtwnreg.h
>>>> ===================================================================
>>>> --- sys/dev/usb/wlan/if_urtwnreg.h    (revision 287342)
>>>> +++ sys/dev/usb/wlan/if_urtwnreg.h    (working copy)
>>>> @@ -1019,7 +1019,9 @@
>>>>   #define R92C_TXDW1_QSEL_M    0x00001f00
>>>>   #define R92C_TXDW1_QSEL_S    8
>>>>   #define R92C_TXDW1_QSEL_BE   0x00
>>>> +#define R88E_TXDW1_QSEL_BE   0x03
>>>>   #define R92C_TXDW1_QSEL_MGNT 0x12
>>>> +#define R88E_TXDW1_QSEL_MGNT 0x10
>>>>   #define R92C_TXDW1_RAID_M    0x000f0000
>>>>   #define R92C_TXDW1_RAID_S    16
>>>>   #define R92C_TXDW1_CIPHER_M  0x00c00000
>>>> _______________________________________________
>>>> freebsd-wireless@freebsd.org mailing list
>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-wireless
>>>> To unsubscribe, send any mail to
>>>> "freebsd-wireless-unsubscr...@freebsd.org"
>
>
_______________________________________________
freebsd-wireless@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-wireless
To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org"

Reply via email to