Преглед изворни кода

Build a karma variant of madwifi

SVN-Revision: 9316
Florian Fainelli пре 18 година
родитељ
комит
93c450a043
2 измењених фајлова са 116 додато и 0 уклоњено
  1. 22 0
      package/madwifi/Makefile
  2. 94 0
      package/madwifi/files/karma.patch

+ 22 - 0
package/madwifi/Makefile

@@ -103,6 +103,17 @@ define KernelPackage/madwifi/description
  This package contains a driver for Atheros 802.11a/b/g chipsets.
 endef
 
+define KernelPackage/madwifi-karma
+  $(call KernelPackage/madwifi)
+  TITLE:=Madwifi for Karma support
+  URL:=http://www.digininja.org/
+endef
+
+define KernelPackage/madwifi-karma/description
+  This package contains a modified driver to be used with 
+  the Karma software for Atheros 802.11a/b/g chipsets.
+endef
+
 MAKE_ARGS:= \
 	PATH="$(TARGET_PATH)" \
 	ARCH="$(LINUX_KARCH)" \
@@ -135,6 +146,9 @@ endif
 
 define Build/Configure
 	$(SED) 's,-E[LB] ,,g' $(PKG_BUILD_DIR)/hal/public/*.inc
+ifneq ($(CONFIG_PACKAGE_kmod-madwifi-karma),)
+	$(PATCH) $(PKG_BUILD_DIR) ./files
+endif
 endef
 
 define Build/Compile
@@ -160,4 +174,12 @@ define KernelPackage/madwifi/install
 	$(CP) $(PKG_BUILD_DIR)/tools/{madwifi_multi,80211stats,athchans,athctrl,athkey,athstats,wlanconfig} $(1)/usr/sbin/
 endef
 
+define KernelPackage/madwifi-karma/install
+	$(INSTALL_DIR) $(1)/lib/wifi
+	$(INSTALL_DATA) ./files/lib/wifi/madwifi.sh $(1)/lib/wifi
+	$(INSTALL_DIR) $(1)/usr/sbin
+	$(CP) $(PKG_BUILD_DIR)/tools/{madwifi_multi,80211stats,athchans,athctrl,athkey,athstats,wlanconfig} $(1)/usr/sbin/
+endef
+
 $(eval $(call KernelPackage,madwifi))
+$(eval $(call KernelPackage,madwifi-karma))

+ 94 - 0
package/madwifi/files/karma.patch

@@ -0,0 +1,94 @@
+diff -urN madwifi-ng-r2568-20070710/net80211/ieee80211_input.c madwifi-ng-r2568-20070710.new/net80211/ieee80211_input.c
+--- madwifi-ng-r2568-20070710/net80211/ieee80211_input.c	2007-10-14 12:52:10.000000000 +0200
++++ madwifi-ng-r2568-20070710.new/net80211/ieee80211_input.c	2007-10-14 12:57:27.000000000 +0200
+@@ -1625,7 +1625,8 @@
+ } while (0)
+ 
+ #ifdef IEEE80211_DEBUG
+-static void
++/* Not used by karma
++ * 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,7 @@
+ 	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 +2994,8 @@
+ 			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
++		//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,12 @@
+ 					IEEE80211_FC0_SUBTYPE_SHIFT],
+ 				"%s", "recv'd rate set invalid");
+ 		} else {
++			// KARMA: Print the probe response if in adhoc mode
++			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 +3237,8 @@
+ 			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
++		//IEEE80211_VERIFY_SSID(vap->iv_bss, ssid);
+ 
+ 		if (ni == vap->iv_bss) {
+ 			IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ANY, wh->i_addr2,
+@@ -3408,6 +3417,13 @@
+ 
+ 		/* Send TGf L2UF frame on behalf of newly associated station */
+ 		ieee80211_deliver_l2uf(ni);
++
++		// KARMA: Log SSID that client thinks they are associating to
++		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 &&
+diff -urN madwifi-ng-r2568-20070710/net80211/ieee80211_output.c madwifi-ng-r2568-20070710.new/net80211/ieee80211_output.c
+--- madwifi-ng-r2568-20070710/net80211/ieee80211_output.c	2007-10-14 12:52:10.000000000 +0200
++++ madwifi-ng-r2568-20070710.new/net80211/ieee80211_output.c	2007-10-14 12:58:53.000000000 +0200
+@@ -1876,10 +1876,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) {
++			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);
+