]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/9/pc/wifi.h
wifi: allow selecting specific access point with bssid= parameter and wifictl command
[plan9front.git] / sys / src / 9 / pc / wifi.h
index 25a290d6cd0441df29489aa72e6110ffe6725164..8f67324eb35356492580531bd1dbe2b889a73f4d 100644 (file)
@@ -1,46 +1,75 @@
+typedef struct Wkey Wkey;
 typedef struct Wnode Wnode;
 typedef struct Wifi Wifi;
-
 typedef struct Wifipkt Wifipkt;
 
-struct Wifipkt
-{
-       uchar   fc[2];
-       uchar   dur[2];
-       uchar   a1[Eaddrlen];
-       uchar   a2[Eaddrlen];
-       uchar   a3[Eaddrlen];
-       uchar   seq[2];
+enum {
+       Essidlen = 32,
 };
 
+/* cipher */
 enum {
-       WIFIHDRSIZE = 2+2+3*6+2,
+       TKIP    = 1,
+       CCMP    = 2,
+};
+
+struct Wkey
+{
+       int     cipher;
+       int     len;
+       uchar   key[32];
+       uvlong  tsc;
 };
 
 struct Wnode
 {
        uchar   bssid[Eaddrlen];
-       char    ssid[32+2];
+       char    ssid[Essidlen+2];
+
+       int     rsnelen;
+       uchar   rsne[258];
+       Wkey    txkey[1];
+       Wkey    rxkey[5];
+
+       /* stuff from beacon */
        int     ival;
        int     cap;
        int     aid;
        int     channel;
        long    lastseen;
+       int     brsnelen;
+       uchar   brsne[258];
 };
 
 struct Wifi
 {
        Ether   *ether;
 
+       int     debug;
+
        Queue   *iq;
        char    *status;
+       Ref     txseq;
        void    (*transmit)(Wifi*, Wnode*, Block*);
 
-       Wnode   node[16];
+       /* for searching */
+       uchar   bssid[Eaddrlen];
+       char    essid[Essidlen+2];
+
+       /* effective base station */
        Wnode   *bss;
 
-       uint    txseq;
-       char    essid[32+2];
+       Wnode   node[32];
+};
+
+struct Wifipkt
+{
+       uchar   fc[2];
+       uchar   dur[2];
+       uchar   a1[Eaddrlen];
+       uchar   a2[Eaddrlen];
+       uchar   a3[Eaddrlen];
+       uchar   seq[2];
 };
 
 Wifi *wifiattach(Ether *ether, void (*transmit)(Wifi*, Wnode*, Block*));
@@ -48,4 +77,3 @@ void wifiiq(Wifi*, Block*);
 
 long wifistat(Wifi*, void*, long, ulong);
 long wifictl(Wifi*, void*, long);
-