mirror of
https://github.com/pentoo/pentoo-overlay
synced 2026-01-29 11:33:05 +01:00
299 lines
11 KiB
Diff
299 lines
11 KiB
Diff
diff -Naur linux-2.6.28-pentoo-r4/drivers/staging/wlan-ng/hfa384x.c linux-2.6.28-pentoo-r4-fauxpas/drivers/staging/wlan-ng/hfa384x.c
|
|
--- linux-2.6.28-pentoo-r4/drivers/staging/wlan-ng/hfa384x.c 2008-12-24 18:26:37.000000000 -0500
|
|
+++ linux-2.6.28-pentoo-r4-fauxpas/drivers/staging/wlan-ng/hfa384x.c 2009-04-04 22:53:46.000000000 -0400
|
|
@@ -1873,8 +1873,16 @@
|
|
|
|
DBFENTER;
|
|
|
|
- cmd.cmd = HFA384x_CMD_CMDCODE_SET(HFA384x_CMDCODE_MONITOR) |
|
|
- HFA384x_CMD_AINFO_SET(enable);
|
|
+// cmd.cmd = HFA384x_CMD_CMDCODE_SET(HFA384x_CMDCODE_MONITOR) |
|
|
+// HFA384x_CMD_AINFO_SET(enable);
|
|
+ if (enable == HFA384x_MONITOR_ENABLE) {
|
|
+ // KoreK: get into test mode 0x0a
|
|
+ cmd.cmd = HFA384x_CMD_CMDCODE_SET(HFA384x_CMDCODE_MONITOR) |
|
|
+ HFA384x_CMD_AINFO_SET(0x0a);
|
|
+ } else {
|
|
+ cmd.cmd = HFA384x_CMD_CMDCODE_SET(HFA384x_CMDCODE_MONITOR) |
|
|
+ HFA384x_CMD_AINFO_SET(enable);
|
|
+ }
|
|
cmd.parm0 = 0;
|
|
cmd.parm1 = 0;
|
|
cmd.parm2 = 0;
|
|
@@ -3114,11 +3122,32 @@
|
|
#endif
|
|
|
|
/* if we're using host WEP, increase size by IV+ICV */
|
|
- if (p80211_wep->data) {
|
|
- txdesc.data_len = host2hfa384x_16(skb->len+8);
|
|
- // txdesc.tx_control |= HFA384x_TX_NOENCRYPT_SET(1);
|
|
- } else {
|
|
- txdesc.data_len = host2hfa384x_16(skb->len);
|
|
+// if (p80211_wep->data) {
|
|
+// txdesc.data_len = host2hfa384x_16(skb->len+8);
|
|
+// // txdesc.tx_control |= HFA384x_TX_NOENCRYPT_SET(1);
|
|
+// } else {
|
|
+// txdesc.data_len = host2hfa384x_16(skb->len);
|
|
+// }
|
|
+
|
|
+ if (skb->protocol != htons(ETH_P_80211_RAW)) {
|
|
+ /* if we're using host WEP, increase size by IV+ICV */
|
|
+ if (p80211_wep->data) {
|
|
+ txdesc.data_len = host2hfa384x_16(skb->len+8);
|
|
+ // txdesc.tx_control |= HFA384x_TX_NOENCRYPT_SET(1);
|
|
+ } else {
|
|
+ txdesc.data_len = host2hfa384x_16(skb->len);
|
|
+ }
|
|
+ } else {
|
|
+ /* KoreK: raw injection (monitor mode): pull the rest of
|
|
+ the header and ssanity check on txdesc.data_len */
|
|
+ memcpy(&(txdesc.data_len), skb->data, 16);
|
|
+ skb_pull(skb,16);
|
|
+ if (txdesc.data_len != host2hfa384x_16(skb->len)) {
|
|
+ printk(KERN_DEBUG "mismatch frame_len, drop frame\n");
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ txdesc.tx_control |= HFA384x_TX_RETRYSTRAT_SET(1);
|
|
}
|
|
|
|
txdesc.tx_control = host2hfa384x_16(txdesc.tx_control);
|
|
@@ -3142,7 +3171,8 @@
|
|
spin_lock(&hw->cmdlock);
|
|
|
|
/* Copy descriptor+payload to FID */
|
|
- if (p80211_wep->data) {
|
|
+// if (p80211_wep->data) {
|
|
+ if (p80211_wep->data && (skb->protocol != htons(ETH_P_80211_RAW))) {
|
|
result = hfa384x_copy_to_bap4(hw, HFA384x_BAP_PROC, fid, 0,
|
|
&txdesc, sizeof(txdesc),
|
|
p80211_wep->iv, sizeof(p80211_wep->iv),
|
|
@@ -3588,6 +3618,17 @@
|
|
{
|
|
case 0:
|
|
|
|
+ /* KoreK: this testmode uses macport 0 */
|
|
+ if ((wlandev->netdev->type == ARPHRD_IEEE80211) ||
|
|
+ (wlandev->netdev->type == ARPHRD_IEEE80211_PRISM)) {
|
|
+ if ( ! HFA384x_RXSTATUS_ISFCSERR(rxdesc.status) ) {
|
|
+ hfa384x_int_rxmonitor( wlandev, rxfid, &rxdesc);
|
|
+ } else {
|
|
+ WLAN_LOG_DEBUG(3,"Received monitor frame: FCSerr set\n");
|
|
+ }
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
fc = ieee2host16(rxdesc.frame_control);
|
|
|
|
/* If exclude and we receive an unencrypted, drop it */
|
|
diff -Naur linux-2.6.28-pentoo-r4/drivers/staging/wlan-ng/hfa384x_usb.c linux-2.6.28-pentoo-r4-fauxpas/drivers/staging/wlan-ng/hfa384x_usb.c
|
|
--- linux-2.6.28-pentoo-r4/drivers/staging/wlan-ng/hfa384x_usb.c 2008-12-24 18:26:37.000000000 -0500
|
|
+++ linux-2.6.28-pentoo-r4-fauxpas/drivers/staging/wlan-ng/hfa384x_usb.c 2009-04-04 23:13:53.000000000 -0400
|
|
@@ -1430,8 +1430,17 @@
|
|
|
|
DBFENTER;
|
|
|
|
- cmd.cmd = HFA384x_CMD_CMDCODE_SET(HFA384x_CMDCODE_MONITOR) |
|
|
- HFA384x_CMD_AINFO_SET(enable);
|
|
+// cmd.cmd = HFA384x_CMD_CMDCODE_SET(HFA384x_CMDCODE_MONITOR) |
|
|
+// HFA384x_CMD_AINFO_SET(enable);
|
|
+ if (enable == HFA384x_MONITOR_ENABLE) {
|
|
+ // KoreK: get into test mode 0x0a
|
|
+ cmd.cmd = HFA384x_CMD_CMDCODE_SET(HFA384x_CMDCODE_MONITOR) |
|
|
+ HFA384x_CMD_AINFO_SET(0x0a);
|
|
+ } else {
|
|
+ cmd.cmd = HFA384x_CMD_CMDCODE_SET(HFA384x_CMDCODE_MONITOR) |
|
|
+ HFA384x_CMD_AINFO_SET(enable);
|
|
+ }
|
|
+
|
|
cmd.parm0 = 0;
|
|
cmd.parm1 = 0;
|
|
cmd.parm2 = 0;
|
|
@@ -3431,37 +3440,71 @@
|
|
HFA384x_TX_MACPORT_SET(0) | HFA384x_TX_STRUCTYPE_SET(1) |
|
|
HFA384x_TX_TXEX_SET(0) | HFA384x_TX_TXOK_SET(0);
|
|
#endif
|
|
- hw->txbuff.txfrm.desc.tx_control =
|
|
- host2hfa384x_16(hw->txbuff.txfrm.desc.tx_control);
|
|
+// hw->txbuff.txfrm.desc.tx_control =
|
|
+// host2hfa384x_16(hw->txbuff.txfrm.desc.tx_control);
|
|
|
|
- /* copy the header over to the txdesc */
|
|
- memcpy(&(hw->txbuff.txfrm.desc.frame_control), p80211_hdr, sizeof(p80211_hdr_t));
|
|
-
|
|
- /* if we're using host WEP, increase size by IV+ICV */
|
|
- if (p80211_wep->data) {
|
|
- hw->txbuff.txfrm.desc.data_len = host2hfa384x_16(skb->len+8);
|
|
- // hw->txbuff.txfrm.desc.tx_control |= HFA384x_TX_NOENCRYPT_SET(1);
|
|
- usbpktlen+=8;
|
|
- } else {
|
|
- hw->txbuff.txfrm.desc.data_len = host2hfa384x_16(skb->len);
|
|
+// /* copy the header over to the txdesc */
|
|
+// memcpy(&(hw->txbuff.txfrm.desc.frame_control), p80211_hdr, sizeof(p80211_hdr_t));
|
|
+ if (skb->protocol != htons(ETH_P_80211_RAW)) {
|
|
+ hw->txbuff.txfrm.desc.tx_control =
|
|
+ host2hfa384x_16(hw->txbuff.txfrm.desc.tx_control);
|
|
+
|
|
+ /* copy the header over to the txdesc */
|
|
+ memcpy(&(hw->txbuff.txfrm.desc.frame_control), p80211_hdr,
|
|
+ sizeof(p80211_hdr_t));
|
|
+
|
|
+ /* if we're using host WEP, increase size by IV+ICV */
|
|
+ if (p80211_wep->data) {
|
|
+ hw->txbuff.txfrm.desc.data_len = host2hfa384x_16(skb->len+8);
|
|
+ // hw->txbuff.txfrm.desc.tx_control |= HFA384x_TX_NOENCRYPT_SET(1);
|
|
+ usbpktlen+=8;
|
|
+ } else {
|
|
+ hw->txbuff.txfrm.desc.data_len = host2hfa384x_16(skb->len);
|
|
+ }
|
|
+ } else {
|
|
+ /* KoreK: raw injection (monitor mode): pull the rest of
|
|
+ the header and ssanity check on txdesc.data_len */
|
|
+ memcpy(&(hw->txbuff.txfrm.desc.data_len), skb->data, 16);
|
|
+ skb_pull(skb,16);
|
|
+ if (hw->txbuff.txfrm.desc.data_len != host2hfa384x_16(skb->len)) {
|
|
+ printk(KERN_DEBUG "mismatch frame_len, drop frame\n");
|
|
+ return 0;
|
|
+ }
|
|
+// /* if we're using host WEP, increase size by IV+ICV */
|
|
+// if (p80211_wep->data) {
|
|
+// hw->txbuff.txfrm.desc.data_len = host2hfa384x_16(skb->len+8);
|
|
+// // hw->txbuff.txfrm.desc.tx_control |= HFA384x_TX_NOENCRYPT_SET(1);
|
|
+// usbpktlen+=8;
|
|
+// } else {
|
|
+// hw->txbuff.txfrm.desc.data_len = host2hfa384x_16(skb->len);
|
|
+ hw->txbuff.txfrm.desc.tx_control |= HFA384x_TX_RETRYSTRAT_SET(1);
|
|
+ hw->txbuff.txfrm.desc.tx_control =
|
|
+ host2hfa384x_16(hw->txbuff.txfrm.desc.tx_control);
|
|
+
|
|
+ /* copy the header over to the txdesc */
|
|
+ memcpy(&(hw->txbuff.txfrm.desc.frame_control), p80211_hdr,
|
|
+ sizeof(p80211_hdr_t));
|
|
}
|
|
|
|
usbpktlen += skb->len;
|
|
|
|
/* copy over the WEP IV if we are using host WEP */
|
|
ptr = hw->txbuff.txfrm.data;
|
|
- if (p80211_wep->data) {
|
|
+// if (p80211_wep->data) {
|
|
+ if (p80211_wep->data && skb->protocol != htons(ETH_P_80211_RAW)) {
|
|
memcpy(ptr, p80211_wep->iv, sizeof(p80211_wep->iv));
|
|
ptr+= sizeof(p80211_wep->iv);
|
|
memcpy(ptr, p80211_wep->data, skb->len);
|
|
} else {
|
|
memcpy(ptr, skb->data, skb->len);
|
|
}
|
|
+
|
|
/* copy over the packet data */
|
|
ptr+= skb->len;
|
|
|
|
/* copy over the WEP ICV if we are using host WEP */
|
|
- if (p80211_wep->data) {
|
|
+// if (p80211_wep->data) {
|
|
+ if (p80211_wep->data && skb->protocol != htons(ETH_P_80211_RAW)) {
|
|
memcpy(ptr, p80211_wep->icv, sizeof(p80211_wep->icv));
|
|
}
|
|
|
|
@@ -4223,6 +4266,17 @@
|
|
switch( HFA384x_RXSTATUS_MACPORT_GET(usbin->rxfrm.desc.status) )
|
|
{
|
|
case 0:
|
|
+ /* KoreK: this testmode uses macport 0 */
|
|
+ if ((wlandev->netdev->type == ARPHRD_IEEE80211) ||
|
|
+ (wlandev->netdev->type == ARPHRD_IEEE80211_PRISM)) {
|
|
+ if ( ! HFA384x_RXSTATUS_ISFCSERR(usbin->rxfrm.desc.status) ) {
|
|
+ hfa384x_int_rxmonitor(wlandev, &usbin->rxfrm);
|
|
+ } else {
|
|
+ WLAN_LOG_DEBUG(3,"Received monitor frame: FCSerr set\n");
|
|
+ }
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
fc = ieee2host16(usbin->rxfrm.desc.frame_control);
|
|
|
|
/* If exclude and we receive an unencrypted, drop it */
|
|
diff -Naur linux-2.6.28-pentoo-r4/drivers/staging/wlan-ng/p80211netdev.c linux-2.6.28-pentoo-r4-fauxpas/drivers/staging/wlan-ng/p80211netdev.c
|
|
--- linux-2.6.28-pentoo-r4/drivers/staging/wlan-ng/p80211netdev.c 2008-12-24 18:26:37.000000000 -0500
|
|
+++ linux-2.6.28-pentoo-r4-fauxpas/drivers/staging/wlan-ng/p80211netdev.c 2009-04-04 22:42:15.000000000 -0400
|
|
@@ -512,7 +512,7 @@
|
|
* and return success .
|
|
* TODO: we need a saner way to handle this
|
|
*/
|
|
- if(skb->protocol != ETH_P_80211_RAW) {
|
|
+ if(skb->protocol != htons(ETH_P_80211_RAW)) {
|
|
p80211netdev_start_queue(wlandev);
|
|
WLAN_LOG_NOTICE(
|
|
"Tx attempt prior to association, frame dropped.\n");
|
|
@@ -524,7 +524,7 @@
|
|
}
|
|
|
|
/* Check for raw transmits */
|
|
- if(skb->protocol == ETH_P_80211_RAW) {
|
|
+ if(skb->protocol == htons(ETH_P_80211_RAW)) {
|
|
if (!capable(CAP_NET_ADMIN)) {
|
|
result = 1;
|
|
goto failed;
|
|
@@ -952,8 +952,9 @@
|
|
dev->set_mac_address = p80211knetdev_set_mac_address;
|
|
#endif
|
|
#ifdef HAVE_TX_TIMEOUT
|
|
- dev->tx_timeout = &p80211knetdev_tx_timeout;
|
|
- dev->watchdog_timeo = (wlan_watchdog * HZ) / 1000;
|
|
+// korek: still not implemented (XXX: Why exactly do we remove this???)
|
|
+// dev->tx_timeout = &p80211knetdev_tx_timeout;
|
|
+// dev->watchdog_timeo = (wlan_watchdog * HZ) / 1000;
|
|
#endif
|
|
netif_carrier_off(dev);
|
|
}
|
|
diff -Naur linux-2.6.28-pentoo-r4/drivers/staging/wlan-ng/prism2mgmt.c linux-2.6.28-pentoo-r4-fauxpas/drivers/staging/wlan-ng/prism2mgmt.c
|
|
--- linux-2.6.28-pentoo-r4/drivers/staging/wlan-ng/prism2mgmt.c 2008-12-24 18:26:37.000000000 -0500
|
|
+++ linux-2.6.28-pentoo-r4-fauxpas/drivers/staging/wlan-ng/prism2mgmt.c 2009-04-04 23:18:35.000000000 -0400
|
|
@@ -2860,9 +2860,12 @@
|
|
}
|
|
|
|
/* Now if we're already sniffing, we can skip the rest */
|
|
- if (wlandev->netdev->type != ARPHRD_ETHER) {
|
|
+// if (wlandev->netdev->type != ARPHRD_ETHER) {
|
|
+ if ((wlandev->netdev->type != ARPHRD_IEEE80211) &&
|
|
+ (wlandev->netdev->type != ARPHRD_IEEE80211_PRISM)) {
|
|
/* Set the port type to pIbss */
|
|
- word = HFA384x_PORTTYPE_PSUEDOIBSS;
|
|
+// word = HFA384x_PORTTYPE_PSUEDOIBSS;
|
|
+ word = 5; // HFA384x_PORTTYPE_PSUEDOIBSS;
|
|
result = hfa384x_drvr_setconfig16(hw,
|
|
HFA384x_RID_CNFPORTTYPE, word);
|
|
if ( result ) {
|
|
@@ -2874,6 +2877,8 @@
|
|
}
|
|
if ((msg->keepwepflags.status == P80211ENUM_msgitem_status_data_ok) && (msg->keepwepflags.data != P80211ENUM_truth_true)) {
|
|
/* Set the wepflags for no decryption */
|
|
+ /* doesn't work - done from the CLI */
|
|
+ /* Fix? KoreK */
|
|
word = HFA384x_WEPFLAGS_DISABLE_TXCRYPT |
|
|
HFA384x_WEPFLAGS_DISABLE_RXCRYPT;
|
|
result = hfa384x_drvr_setconfig16(hw, HFA384x_RID_CNFWEPFLAGS, word);
|
|
@@ -2919,7 +2924,9 @@
|
|
goto failed;
|
|
}
|
|
|
|
- if (wlandev->netdev->type == ARPHRD_ETHER) {
|
|
+// if (wlandev->netdev->type == ARPHRD_ETHER) {
|
|
+ if ((wlandev->netdev->type != ARPHRD_IEEE80211) &&
|
|
+ (wlandev->netdev->type != ARPHRD_IEEE80211_PRISM)) {
|
|
WLAN_LOG_INFO("monitor mode enabled\n");
|
|
}
|
|
|
|
diff -Naur linux-2.6.28-pentoo-r4/drivers/staging/wlan-ng/prism2sta.c linux-2.6.28-pentoo-r4-fauxpas/drivers/staging/wlan-ng/prism2sta.c
|
|
--- linux-2.6.28-pentoo-r4/drivers/staging/wlan-ng/prism2sta.c 2008-12-24 18:26:37.000000000 -0500
|
|
+++ linux-2.6.28-pentoo-r4-fauxpas/drivers/staging/wlan-ng/prism2sta.c 2009-04-04 23:20:58.000000000 -0400
|
|
@@ -411,7 +411,9 @@
|
|
DBFENTER;
|
|
|
|
/* If necessary, set the 802.11 WEP bit */
|
|
- if ((wlandev->hostwep & (HOSTWEP_PRIVACYINVOKED | HOSTWEP_ENCRYPT)) == HOSTWEP_PRIVACYINVOKED) {
|
|
+// if ((wlandev->hostwep & (HOSTWEP_PRIVACYINVOKED | HOSTWEP_ENCRYPT)) == HOSTWEP_PRIVACYINVOKED) {
|
|
+ if (((wlandev->hostwep & (HOSTWEP_PRIVACYINVOKED | HOSTWEP_ENCRYPT)) == HOSTWEP_PRIVACYINVOKED)
|
|
+ && (skb->protocol != htons(ETH_P_80211_RAW))) {
|
|
p80211_hdr->a3.fc |= host2ieee16(WLAN_SET_FC_ISWEP(1));
|
|
}
|