Convert the karma changes to be an ioctl
[openwrt-10.03/.git] / package / madwifi / patches / 320-karma.patch
1 --- madwifi-ng-r2568-20070710/net80211/ieee80211_wireless.c     2007-10-19 08:04:23.000000000 +0200
2 +++ madwifi-ng-r2568-20070710.new/net80211/ieee80211_wireless.c 2007-10-19 07:52:40.000000000 +0200
3 @@ -72,6 +72,8 @@
4          (_vap)->iv_ic->ic_roaming == IEEE80211_ROAMING_AUTO)
5  #define        RESCAN  1
6  
7 +int karma_enable;
8 +
9  static void
10  pre_announced_chanswitch(struct net_device *dev, u_int32_t channel, u_int32_t tbtt);
11  
12 @@ -2616,6 +2618,12 @@
13                 else
14                         ic->ic_flags_ext &= ~IEEE80211_FEXT_MARKDFS;
15                 break;
16 +       case IEEE80211_PARAM_KARMA:
17 +               if (value)
18 +                       karma_enable = 1;
19 +               else
20 +                       karma_enable = 0;
21 +               break;
22  #ifdef ATH_REVERSE_ENGINEERING
23         case IEEE80211_PARAM_DUMPREGS:
24                 ieee80211_dump_registers(dev, info, w, extra);
25 @@ -2914,6 +2922,9 @@
26                 else
27                         param[0] = 0;
28                 break;
29 +       case IEEE80211_PARAM_KARMA:
30 +               param[0] = karma_enable;
31 +               break;
32         default:
33                 return -EOPNOTSUPP;
34         }
35 @@ -5271,6 +5282,10 @@
36         { IEEE80211_IOCTL_WRITEREG,
37           IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "writereg" },
38  #endif /* #ifdef ATH_REVERSE_ENGINEERING */
39 +       { IEEE80211_PARAM_KARMA,
40 +          IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "karma" },
41 +        { IEEE80211_PARAM_KARMA, 0,
42 +          IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_karma" },
43  };
44  
45  #define set_handler(x,f) [x - SIOCIWFIRST] = (iw_handler) f
46 --- madwifi-ng-r2568-20070710/net80211/ieee80211_input.c        2007-10-19 08:04:23.000000000 +0200
47 +++ madwifi-ng-r2568-20070710.new/net80211/ieee80211_input.c    2007-10-19 07:58:08.000000000 +0200
48 @@ -59,6 +59,8 @@
49  
50  #include <net80211/ieee80211_var.h>
51  
52 +extern int karma_enable;
53 +
54  #ifdef IEEE80211_DEBUG
55  /*
56   * Decide if a received management frame should be
57 @@ -1625,7 +1627,6 @@
58  } while (0)
59  
60  #ifdef IEEE80211_DEBUG
61 -static void
62  ieee80211_ssid_mismatch(struct ieee80211vap *vap, const char *tag,
63         u_int8_t mac[IEEE80211_ADDR_LEN], u_int8_t *ssid)
64  {
65 @@ -1634,7 +1635,6 @@
66         ieee80211_print_essid(ssid + 2, ssid[1]);
67         printf("\n");
68  }
69 -
70  #define        IEEE80211_VERIFY_SSID(_ni, _ssid) do {                          \
71         if ((_ssid)[1] != 0 &&                                          \
72             ((_ssid)[1] != (_ni)->ni_esslen ||                          \
73 @@ -2993,7 +2993,9 @@
74                         return;
75                 IEEE80211_VERIFY_ELEMENT(rates, IEEE80211_RATE_MAXSIZE);
76                 IEEE80211_VERIFY_ELEMENT(ssid, IEEE80211_NWID_LEN);
77 -               IEEE80211_VERIFY_SSID(vap->iv_bss, ssid);
78 +               // KARMA: Don't verify SSID on Probe Requests
79 +               if (!karma_enable)
80 +                       IEEE80211_VERIFY_SSID(vap->iv_bss, ssid);
81                 if ((vap->iv_flags & IEEE80211_F_HIDESSID) && ssid[1] == 0) {
82                         IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
83                                 wh, ieee80211_mgt_subtype_name[subtype >>
84 @@ -3041,6 +3043,14 @@
85                                         IEEE80211_FC0_SUBTYPE_SHIFT],
86                                 "%s", "recv'd rate set invalid");
87                 } else {
88 +                       // KARMA: Print the probe response if in adhoc mode
89 +                       if (karma_enable) {
90 +                               if (vap->iv_opmode == IEEE80211_M_IBSS) {
91 +                                       printf ("KARMA: Probe response for [");
92 +                                       ieee80211_print_essid(ssid + 2, ssid[1]);
93 +                                       printf ("]\n");
94 +                               }
95 +                       }
96                         IEEE80211_SEND_MGMT(ni,
97                                 IEEE80211_FC0_SUBTYPE_PROBE_RESP, 0);
98                 }
99 @@ -3229,7 +3239,9 @@
100                         return;
101                 IEEE80211_VERIFY_ELEMENT(rates, IEEE80211_RATE_MAXSIZE);
102                 IEEE80211_VERIFY_ELEMENT(ssid, IEEE80211_NWID_LEN);
103 -               IEEE80211_VERIFY_SSID(vap->iv_bss, ssid);
104 +               // KARMA: Don't verify SSID on Association Requests
105 +               if (!karma_enable)
106 +                       IEEE80211_VERIFY_SSID(vap->iv_bss, ssid);
107  
108                 if (ni == vap->iv_bss) {
109                         IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ANY, wh->i_addr2,
110 @@ -3408,6 +3420,15 @@
111  
112                 /* Send TGf L2UF frame on behalf of newly associated station */
113                 ieee80211_deliver_l2uf(ni);
114 +
115 +               // KARMA: Log SSID that client thinks they are associating to
116 +               if (karma_enable) {
117 +                       printf("KARMA: Node [%s] associating to ssid [",
118 +                               ether_sprintf(wh->i_addr2)); 
119 +                       ieee80211_print_essid(ssid + 2, ssid[1]);
120 +                       printf("]\n");
121 +               }
122 +
123                 ieee80211_node_join(ni, resp);
124  #ifdef ATH_SUPERG_XR
125                 if (ni->ni_prev_vap &&
126 --- madwifi-ng-r2568-20070710/net80211/ieee80211_output.c       2007-10-19 08:04:23.000000000 +0200
127 +++ madwifi-ng-r2568-20070710.new/net80211/ieee80211_output.c   2007-10-19 07:59:13.000000000 +0200
128 @@ -57,6 +57,8 @@
129  #include <net80211/ieee80211_monitor.h>
130  #include <net80211/if_athproto.h>
131  
132 +extern int karma_enable;
133 +
134  #ifdef IEEE80211_DEBUG
135  /*
136   * Decide if an outbound management frame should be
137 @@ -1876,10 +1878,17 @@
138                 *(__le16 *)frm = htole16(capinfo);
139                 frm += 2;
140  
141 -               /* ssid */
142 -               frm = ieee80211_add_ssid(frm, vap->iv_bss->ni_essid,
143 -                       vap->iv_bss->ni_esslen);
144 -
145 +               // KARMA: If argument is specified, on PROBE_RESP, it is
146 +               // the SSID to use in the response which is the same SSID
147 +               // has the client sent).
148 +               if (arg && karma_enable) {
149 +                       u_int8_t* ssid = (u_int8_t*)arg;
150 +                       frm = ieee80211_add_ssid(frm, ssid + 2, ssid[1]);
151 +               } else {
152 +                       /* ssid */
153 +                       frm = ieee80211_add_ssid(frm, vap->iv_bss->ni_essid,
154 +                               vap->iv_bss->ni_esslen);
155 +               }
156                 /* supported rates */
157                 frm = ieee80211_add_rates(frm, &ni->ni_rates);
158  
159 --- madwifi-ng-r2568-20070710/net80211/ieee80211_ioctl.h        2007-06-25 05:48:07.000000000 +0200
160 +++ madwifi-ng-r2568-20070710.new/net80211/ieee80211_ioctl.h    2007-10-19 07:43:12.000000000 +0200
161 @@ -603,6 +603,7 @@
162         IEEE80211_PARAM_DROPUNENC_EAPOL         = 60,   /* drop unencrypted eapol frames */
163         IEEE80211_PARAM_SHPREAMBLE              = 61,   /* Short Preamble */
164         IEEE80211_PARAM_DUMPREGS                = 62,   /* Pretty printed dump of Atheros hardware registers */
165 +       IEEE80211_PARAM_KARMA                   = 63,   /* Enable Karma */
166  };
167  
168  #define        SIOCG80211STATS                 (SIOCDEVPRIVATE+2)