[oe-commits] org.oe.dev linux-rp-2.6.20: Add hostap monitor patch from Zero_Chaos

rpurdie commit openembedded-commits at lists.openembedded.org
Thu Mar 1 23:42:09 UTC 2007


linux-rp-2.6.20: Add hostap monitor patch from Zero_Chaos

Author: rpurdie at openembedded.org
Branch: org.openembedded.dev
Revision: c5e68e96cb50e930019af9172c2924c6ebc1a24f
ViewMTN: http://monotone.openembedded.org/revision.psp?id=c5e68e96cb50e930019af9172c2924c6ebc1a24f
Files:
1
packages/linux/linux-rp-2.6.20/hostap-monitor-mode.patch
packages/linux/linux-rp_2.6.20.bb
Diffs:

#
# mt diff -r796fa3a157fb58e763443bd70d5995ad8ee62293 -rc5e68e96cb50e930019af9172c2924c6ebc1a24f
#
# 
# 
# add_file "packages/linux/linux-rp-2.6.20/hostap-monitor-mode.patch"
#  content [7b6d1b43c24eb7c1135e018aa8ef42f28f5ded00]
# 
# patch "packages/linux/linux-rp_2.6.20.bb"
#  from [a3290d11ef1b58b1ed0ae2f953a5565c472d41cf]
#    to [e9ded4dfeed5a0b0079bd0dfa8013a87f7788ac4]
# 
============================================================
--- packages/linux/linux-rp-2.6.20/hostap-monitor-mode.patch	7b6d1b43c24eb7c1135e018aa8ef42f28f5ded00
+++ packages/linux/linux-rp-2.6.20/hostap-monitor-mode.patch	7b6d1b43c24eb7c1135e018aa8ef42f28f5ded00
@@ -0,0 +1,209 @@
+This is a patch that I've been maintaining for a few years, and I'd 
+really like to see it added to the mainstream zaurus kernel so I can 
+finally stop distributing my own.
+
+This patch only effects the card while in monitor mode, and does not 
+cause any known stability issues.
+
+http://patches.aircrack-ng.org/hostap-kernel-2.6.18.patch
+
+Rick Farina (Zero_Chaos)
+
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c	2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c	2006-09-21 01:30:18.000000000 -0400
+@@ -69,6 +69,9 @@
+ 	iface = netdev_priv(dev);
+ 	local = iface->local;
+ 
++	if (local->iw_mode == IW_MODE_MONITOR)
++		goto xmit;
++
+ 	if (skb->len < ETH_HLEN) {
+ 		printk(KERN_DEBUG "%s: hostap_data_start_xmit: short skb "
+ 		       "(len=%d)\n", dev->name, skb->len);
+@@ -234,6 +237,7 @@
+ 		memcpy(skb_put(skb, ETH_ALEN), &hdr.addr4, ETH_ALEN);
+ 	}
+ 
++xmit:
+ 	iface->stats.tx_packets++;
+ 	iface->stats.tx_bytes += skb->len;
+ 
+@@ -404,8 +408,6 @@
+ 	}
+ 
+ 	if (skb->len < 24) {
+-		printk(KERN_DEBUG "%s: hostap_master_start_xmit: short skb "
+-		       "(len=%d)\n", dev->name, skb->len);
+ 		ret = 0;
+ 		iface->stats.tx_dropped++;
+ 		goto fail;
+Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.orig
+Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.rej
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c	2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c	2006-09-21 01:30:18.000000000 -0400
+@@ -1005,6 +1005,35 @@
+ 	return fid;
+ }
+ 
++static int prism2_monitor_enable(struct net_device *dev)
++{
++	if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE, 5)) {
++		printk(KERN_DEBUG "Port type setting for monitor mode "
++			"failed\n");
++		return -EOPNOTSUPP;
++	}
++
++	if (hfa384x_cmd(dev, HFA384X_CMDCODE_TEST | (0x0a << 8),
++			     0, NULL, NULL)) {
++		printk(KERN_DEBUG "Could not enter testmode 0x0a\n");
++		return -EOPNOTSUPP;
++	}
++
++	if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
++			    HFA384X_WEPFLAGS_PRIVACYINVOKED |
++			    HFA384X_WEPFLAGS_HOSTENCRYPT |
++			    HFA384X_WEPFLAGS_HOSTDECRYPT)) {
++		printk(KERN_DEBUG "WEP flags setting failed\n");
++		return -EOPNOTSUPP;
++	}
++
++	if (hostap_set_word(dev, HFA384X_RID_PROMISCUOUSMODE, 1)) {
++		printk(KERN_DEBUG "Could not set promiscuous mode\n");
++		return -EOPNOTSUPP;
++	}
++
++	return 0;
++}
+ 
+ static int prism2_reset_port(struct net_device *dev)
+ {
+@@ -1031,6 +1060,10 @@
+ 			       "port\n", dev->name);
+ 	}
+ 
++	if (local->iw_mode == IW_MODE_MONITOR)
++		/* force mode 0x0a after port 0 reset */
++		return prism2_monitor_enable(dev);
++
+ 	/* It looks like at least some STA firmware versions reset
+ 	 * fragmentation threshold back to 2346 after enable command. Restore
+ 	 * the configured value, if it differs from this default. */
+@@ -1466,6 +1499,10 @@
+ 		return 1;
+ 	}
+ 
++	if (local->iw_mode == IW_MODE_MONITOR)
++		/* force mode 0x0a after port 0 reset */
++		prism2_monitor_enable(dev);
++
+ 	local->hw_ready = 1;
+ 	local->hw_reset_tries = 0;
+ 	local->hw_resetting = 0;
+@@ -3156,6 +3193,7 @@
+ 	local->func->hw_config = prism2_hw_config;
+ 	local->func->hw_reset = prism2_hw_reset;
+ 	local->func->hw_shutdown = prism2_hw_shutdown;
++	local->func->monitor_enable = prism2_monitor_enable;
+ 	local->func->reset_port = prism2_reset_port;
+ 	local->func->schedule_reset = prism2_schedule_reset;
+ #ifdef PRISM2_DOWNLOAD_SUPPORT
+Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_hw.c.orig
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c	2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c	2006-09-21 01:30:18.000000000 -0400
+@@ -1104,33 +1104,7 @@
+ 
+ 	printk(KERN_DEBUG "Enabling monitor mode\n");
+ 	hostap_monitor_set_type(local);
+-
+-	if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE,
+-			    HFA384X_PORTTYPE_PSEUDO_IBSS)) {
+-		printk(KERN_DEBUG "Port type setting for monitor mode "
+-		       "failed\n");
+-		return -EOPNOTSUPP;
+-	}
+-
+-	/* Host decrypt is needed to get the IV and ICV fields;
+-	 * however, monitor mode seems to remove WEP flag from frame
+-	 * control field */
+-	if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
+-			    HFA384X_WEPFLAGS_HOSTENCRYPT |
+-			    HFA384X_WEPFLAGS_HOSTDECRYPT)) {
+-		printk(KERN_DEBUG "WEP flags setting failed\n");
+-		return -EOPNOTSUPP;
+-	}
+-
+-	if (local->func->reset_port(dev) ||
+-	    local->func->cmd(dev, HFA384X_CMDCODE_TEST |
+-			     (HFA384X_TEST_MONITOR << 8),
+-			     0, NULL, NULL)) {
+-		printk(KERN_DEBUG "Setting monitor mode failed\n");
+-		return -EOPNOTSUPP;
+-	}
+-
+-	return 0;
++	return local->func->reset_port(dev);
+ }
+ 
+ 
+@@ -1199,7 +1173,7 @@
+ 	local->iw_mode = *mode;
+ 
+ 	if (local->iw_mode == IW_MODE_MONITOR)
+-		hostap_monitor_mode_enable(local);
++		return hostap_monitor_mode_enable(local);
+ 	else if (local->iw_mode == IW_MODE_MASTER && !local->host_encrypt &&
+ 		 !local->fw_encrypt_ok) {
+ 		printk(KERN_DEBUG "%s: defaulting to host-based encryption as "
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c	2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c	2006-09-21 01:30:18.000000000 -0400
+@@ -331,7 +331,7 @@
+ 	if (local->iw_mode == IW_MODE_REPEAT)
+ 		return HFA384X_PORTTYPE_WDS;
+ 	if (local->iw_mode == IW_MODE_MONITOR)
+-		return HFA384X_PORTTYPE_PSEUDO_IBSS;
++		return 5; /*HFA384X_PORTTYPE_PSEUDO_IBSS;*/
+ 	return HFA384X_PORTTYPE_HOSTAP;
+ }
+ 
+Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_main.c.orig
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c	2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c	2006-09-21 01:30:18.000000000 -0400
+@@ -48,6 +48,8 @@
+ 	{ 0x1260, 0x3873, PCI_ANY_ID, PCI_ANY_ID },
+ 	/* Samsung MagicLAN SWL-2210P */
+ 	{ 0x167d, 0xa000, PCI_ANY_ID, PCI_ANY_ID },
++	/* NETGEAR MA311 */
++	{ 0x1385, 0x3872, PCI_ANY_ID, PCI_ANY_ID },
+ 	{ 0 }
+ };
+ 
+Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_pci.c.orig
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c	2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c	2006-09-21 01:30:18.000000000 -0400
+@@ -101,6 +101,7 @@
+ 	{ 0xc250, 0x0002 } /* EMTAC A2424i */,
+ 	{ 0xd601, 0x0002 } /* Z-Com XI300 */,
+ 	{ 0xd601, 0x0005 } /* Zcomax XI-325H 200mW */,
++	{ 0xd601, 0x0010 } /* Zcomax XI-325H 100mW */,
+ 	{ 0, 0}
+ };
+ 
+Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_plx.c.orig
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h	2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h	2006-09-21 01:30:18.000000000 -0400
+@@ -575,6 +575,7 @@
+ 	int (*hw_config)(struct net_device *dev, int initial);
+ 	void (*hw_reset)(struct net_device *dev);
+ 	void (*hw_shutdown)(struct net_device *dev, int no_disable);
++	int (*monitor_enable)(struct net_device *dev);
+ 	int (*reset_port)(struct net_device *dev);
+ 	void (*schedule_reset)(local_info_t *local);
+ 	int (*download)(local_info_t *local,
============================================================
--- packages/linux/linux-rp_2.6.20.bb	a3290d11ef1b58b1ed0ae2f953a5565c472d41cf
+++ packages/linux/linux-rp_2.6.20.bb	e9ded4dfeed5a0b0079bd0dfa8013a87f7788ac4
@@ -1,6 +1,6 @@ require linux-rp.inc
 require linux-rp.inc
 
-PR = "r4"
+PR = "r5"
 
 # Handy URLs
 # git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
@@ -39,6 +39,7 @@ SRC_URI = "http://www.kernel.org/pub/lin
            ${RPSRC}/poodle_pm-r3.patch;patch=1 \
            ${RPSRC}/pxa27x_overlay-r5.patch;patch=1 \
            ${RPSRC}/w100_extaccel-r0.patch;patch=1 \
+           file://hostap-monitor-mode.patch;patch=1 \
            file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \
            ${RPSRC}/logo_oh-r0.patch.bz2;patch=1;status=unmergable \
            ${RPSRC}/logo_oz-r2.patch.bz2;patch=1;status=unmergable \






More information about the Openembedded-commits mailing list