wsupp.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. #include "common.h"
  2. #define SSIDLEN 32
  3. #define NCONNS 10
  4. #define NSCANS 30
  5. #define MACLEN 6
  6. /* authstate */
  7. #define AS_IDLE 0
  8. #define AS_AUTHENTICATING 1
  9. #define AS_ASSOCIATING 2
  10. #define AS_CONNECTING 3
  11. #define AS_CONNECTED 4
  12. #define AS_DISCONNECTING 5
  13. #define AS_NETDOWN 7
  14. #define AS_EXTERNAL 8
  15. /* eapolstate */
  16. #define ES_IDLE 0
  17. #define ES_WAITING_1_4 1
  18. #define ES_WAITING_2_4 2
  19. #define ES_WAITING_3_4 3
  20. #define ES_NEGOTIATED 4
  21. /* scanstate */
  22. #define SS_IDLE 0
  23. #define SS_SCANNING 1
  24. #define SS_SCANDUMP 2
  25. /* opermode */
  26. #define OP_EXIT 0
  27. #define OP_EXITREQ 1
  28. #define OP_NEUTRAL 2
  29. #define OP_ONESHOT 3
  30. #define OP_ACTIVE 4
  31. #define OP_RESCAN 5
  32. /* scan.type */
  33. #define ST_WPS (1<<0)
  34. #define ST_WPA (1<<1)
  35. #define ST_RSN (1<<3)
  36. #define ST_RSN_PSK (1<<4)
  37. #define ST_RSN_P_TKIP (1<<5) /* pairwise */
  38. #define ST_RSN_P_CCMP (1<<6)
  39. #define ST_RSN_G_TKIP (1<<7) /* group */
  40. #define ST_RSN_G_CCMP (1<<8)
  41. #define SF_SEEN (1<<0)
  42. #define SF_GOOD (1<<1)
  43. #define SF_PASS (1<<2)
  44. #define SF_STALE (1<<3)
  45. #define SF_TRIED (1<<4)
  46. struct scan {
  47. short freq;
  48. short signal;
  49. short flags;
  50. short type;
  51. uint8_t bssid[6];
  52. ushort slen;
  53. uint8_t ssid[SSIDLEN];
  54. };
  55. struct conn {
  56. int fd;
  57. int rep;
  58. };
  59. extern char* ifname;
  60. extern int ifindex;
  61. extern int ctrlfd; /* control socket */
  62. extern int rfkill; /* fd, /dev/rfkill */
  63. extern int rawsock; /* fd, EAPOL socket */
  64. extern int netlink; /* fd, GENL */
  65. extern struct scan scans[];
  66. extern struct conn conns[];
  67. extern int nscans;
  68. extern int nconns;
  69. extern int opermode;
  70. extern int scanstate;
  71. extern int authstate;
  72. extern int rfkilled;
  73. /* The AP we're tuned on */
  74. extern struct ap {
  75. byte bssid[6];
  76. short freq;
  77. short signal;
  78. ushort slen;
  79. short type;
  80. uint8_t ssid[SSIDLEN];
  81. const void* ies;
  82. uint iesize;
  83. int fixed;
  84. int unsaved;
  85. int tkipgroup;
  86. int success;
  87. int rescans;
  88. } ap;
  89. /* Config file parsing */
  90. struct line {
  91. char* start;
  92. char* end;
  93. };
  94. struct chunk {
  95. char* start;
  96. char* end;
  97. };
  98. /* Encryption parameters */
  99. extern byte PSK[32];
  100. extern byte amac[6]; /* == ap.bssid */
  101. extern byte smac[6];
  102. /* see definitions for these */
  103. extern byte KCK[16];
  104. extern byte KEK[16];
  105. extern byte PTK[16];
  106. extern byte GTK[32];
  107. extern byte RSC[6];
  108. extern int gtkindex;
  109. extern int pollset;
  110. void setup_netlink(void);
  111. void setup_iface(char* name);
  112. void setup_control(void);
  113. void unlink_control(void);
  114. void reopen_rawsock(void);
  115. void handle_netlink(void);
  116. void handle_rawsock(void);
  117. void handle_control(void);
  118. void handle_conn(struct conn* cn);
  119. void handle_rfkill(void);
  120. void retry_rfkill(void);
  121. void upload_ptk(void);
  122. void upload_gtk(void);
  123. void prime_eapol_state(void);
  124. void allow_eapol_sends(void);
  125. void reset_eapol_state(void);
  126. int start_full_scan(void);
  127. int start_void_scan(void);
  128. int start_scan(int freq);
  129. int start_disconnect(void);
  130. int start_connection(void);
  131. #define PF __attribute__((format(printf,1,2)))
  132. void quit(const char* fmt, ...) PF noreturn;
  133. void quitx(const char* fmt, ...) PF noreturn;
  134. void abort_connection(void);
  135. struct scan* grab_scan_slot(byte bssid[6]);
  136. struct conn* grab_conn_slot(void);
  137. void free_scan_slot(struct scan* sc);
  138. void parse_station_ies(struct scan* sc, char* buf, uint len);
  139. struct scan* find_scan_slot(byte bssid[6]);
  140. void reconnect_to_current_ap(void);
  141. void reassess_wifi_situation(void);
  142. void handle_connect(void);
  143. void handle_disconnect(void);
  144. void handle_rfrestored(void);
  145. void check_new_scan_results(void);
  146. int run_stamped_scan(void);
  147. int load_config(void);
  148. void save_config(void);
  149. void drop_config(void);
  150. void load_state(void);
  151. void save_state(void);
  152. int got_psk_for(byte* ssid, int slen);
  153. int load_psk(byte* ssid, int slen, byte psk[32]);
  154. void save_psk(byte* ssid, int slen, byte psk[32]);
  155. int drop_psk(byte* ssid, int slen);
  156. void set_timer(int seconds);
  157. void clr_timer(void);
  158. void reset_station(void);
  159. int set_fixed_saved(byte* ssid, int slen);
  160. int set_fixed_given(byte* ssid, int slen, byte psk[32]);
  161. void report_net_down(void);
  162. void report_scanning(void);
  163. void report_scan_done(void);
  164. void report_scan_fail(void);
  165. void report_no_connect(void);
  166. void report_disconnect(void);
  167. void report_connected(void);
  168. void trigger_dhcp(void);
  169. void kill_dhcp(void);
  170. void reap_dhcp(void);
  171. void routine_fg_scan(void);
  172. void routine_bg_scan(void);
  173. int maybe_start_scan(void);