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