hostap-driver-0.3.9.patch
上传用户:fubang
上传日期:2009-06-18
资源大小:2071k
文件大小:6k
源码类别:

其他

开发平台:

Unix_Linux

  1. diff -ur ../hostap-driver-0.3.9/driver/modules/hostap.c ./driver/modules/hostap.c
  2. --- ../hostap-driver-0.3.9/driver/modules/hostap.c 2004-08-28 05:26:46.000000000 +0200
  3. +++ ./driver/modules/hostap.c 2005-07-29 12:13:38.000000000 +0200
  4. @@ -401,7 +401,7 @@
  5.   if (local->iw_mode == IW_MODE_REPEAT)
  6.   return HFA384X_PORTTYPE_WDS;
  7.   if (local->iw_mode == IW_MODE_MONITOR)
  8. - return HFA384X_PORTTYPE_PSEUDO_IBSS;
  9. + return 5; /*HFA384X_PORTTYPE_PSEUDO_IBSS;*/
  10.   return HFA384X_PORTTYPE_HOSTAP;
  11.  }
  12.  
  13. diff -ur ../hostap-driver-0.3.9/driver/modules/hostap_80211_tx.c ./driver/modules/hostap_80211_tx.c
  14. --- ../hostap-driver-0.3.9/driver/modules/hostap_80211_tx.c 2004-07-06 01:45:01.000000000 +0200
  15. +++ ./driver/modules/hostap_80211_tx.c 2005-07-29 12:26:05.000000000 +0200
  16. @@ -51,6 +51,9 @@
  17.   int to_assoc_ap = 0;
  18.   struct hostap_skb_tx_data *meta;
  19.  
  20. + if (local->iw_mode == IW_MODE_MONITOR)
  21. + goto xmit;
  22. +
  23.   if (skb->len < ETH_HLEN) {
  24.   printk(KERN_DEBUG "%s: hostap_data_start_xmit: short skb "
  25.          "(len=%d)n", dev->name, skb->len);
  26. @@ -216,6 +219,7 @@
  27.   memcpy(skb_put(skb, ETH_ALEN), &hdr.addr4, ETH_ALEN);
  28.   }
  29.  
  30. +xmit:
  31.   iface->stats.tx_packets++;
  32.   iface->stats.tx_bytes += skb->len;
  33.  
  34. @@ -376,8 +380,6 @@
  35.   }
  36.  
  37.   if (skb->len < 24) {
  38. - printk(KERN_DEBUG "%s: hostap_master_start_xmit: short skb "
  39. -        "(len=%d)n", dev->name, skb->len);
  40.   ret = 0;
  41.   iface->stats.tx_dropped++;
  42.   goto fail;
  43. diff -ur ../hostap-driver-0.3.9/driver/modules/hostap_config.h ./driver/modules/hostap_config.h
  44. --- ../hostap-driver-0.3.9/driver/modules/hostap_config.h 2005-06-11 05:03:36.000000000 +0200
  45. +++ ./driver/modules/hostap_config.h 2005-07-29 12:13:38.000000000 +0200
  46. @@ -59,7 +59,7 @@
  47.   * In addition, please note that it is possible to kill your card with
  48.   * non-volatile download if you are using incorrect image. This feature has not
  49.   * been fully tested, so please be careful with it. */
  50. -/* #define PRISM2_NON_VOLATILE_DOWNLOAD */
  51. +#define PRISM2_NON_VOLATILE_DOWNLOAD
  52.  #endif /* PRISM2_DOWNLOAD_SUPPORT */
  53.  
  54.  /* Include wireless extensions sub-ioctl support even if wireless extensions
  55. diff -ur ../hostap-driver-0.3.9/driver/modules/hostap_hw.c ./driver/modules/hostap_hw.c
  56. --- ../hostap-driver-0.3.9/driver/modules/hostap_hw.c 2005-05-18 05:31:21.000000000 +0200
  57. +++ ./driver/modules/hostap_hw.c 2005-07-29 12:13:38.000000000 +0200
  58. @@ -1005,6 +1005,35 @@
  59.   return fid;
  60.  }
  61.  
  62. +static int prism2_monitor_enable(struct net_device *dev)
  63. +{
  64. + if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE, 5)) {
  65. + printk(KERN_DEBUG "Port type setting for monitor mode "
  66. + "failedn");
  67. + return -EOPNOTSUPP;
  68. + }
  69. +
  70. + if (hfa384x_cmd(dev, HFA384X_CMDCODE_TEST | (0x0a << 8),
  71. +      0, NULL, NULL)) {
  72. + printk(KERN_DEBUG "Could not enter testmode 0x0an");
  73. + return -EOPNOTSUPP;
  74. + }
  75. +
  76. + if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
  77. +     HFA384X_WEPFLAGS_PRIVACYINVOKED |
  78. +     HFA384X_WEPFLAGS_HOSTENCRYPT |
  79. +     HFA384X_WEPFLAGS_HOSTDECRYPT)) {
  80. + printk(KERN_DEBUG "WEP flags setting failedn");
  81. + return -EOPNOTSUPP;
  82. + }
  83. +
  84. + if (hostap_set_word(dev, HFA384X_RID_PROMISCUOUSMODE, 1)) {
  85. + printk(KERN_DEBUG "Could not set promiscuous moden");
  86. + return -EOPNOTSUPP;
  87. + }
  88. +
  89. + return 0;
  90. +}
  91.  
  92.  static int prism2_reset_port(struct net_device *dev)
  93.  {
  94. @@ -1028,6 +1057,10 @@
  95.          "portn", dev->name);
  96.   }
  97.  
  98. + if (local->iw_mode == IW_MODE_MONITOR)
  99. + /* force mode 0x0a after port 0 reset */
  100. + return prism2_monitor_enable(dev);
  101. +
  102.   /* It looks like at least some STA firmware versions reset
  103.    * fragmentation threshold back to 2346 after enable command. Restore
  104.    * the configured value, if it differs from this default. */
  105. @@ -1444,6 +1477,10 @@
  106.   return 1;
  107.   }
  108.  
  109. + if (local->iw_mode == IW_MODE_MONITOR)
  110. + /* force mode 0x0a after port 0 reset */
  111. + prism2_monitor_enable(dev);
  112. +
  113.   local->hw_ready = 1;
  114.   local->hw_reset_tries = 0;
  115.   local->hw_resetting = 0;
  116. @@ -3259,6 +3296,7 @@
  117.   local->func->hw_config = prism2_hw_config;
  118.   local->func->hw_reset = prism2_hw_reset;
  119.   local->func->hw_shutdown = prism2_hw_shutdown;
  120. + local->func->monitor_enable = prism2_monitor_enable;
  121.   local->func->reset_port = prism2_reset_port;
  122.   local->func->schedule_reset = prism2_schedule_reset;
  123.  #ifdef PRISM2_DOWNLOAD_SUPPORT
  124. diff -ur ../hostap-driver-0.3.9/driver/modules/hostap_ioctl.c ./driver/modules/hostap_ioctl.c
  125. --- ../hostap-driver-0.3.9/driver/modules/hostap_ioctl.c 2005-05-18 05:33:28.000000000 +0200
  126. +++ ./driver/modules/hostap_ioctl.c 2005-07-29 12:13:38.000000000 +0200
  127. @@ -1067,33 +1067,7 @@
  128.  
  129.   printk(KERN_DEBUG "Enabling monitor moden");
  130.   hostap_monitor_set_type(local);
  131. -
  132. - if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE,
  133. -     HFA384X_PORTTYPE_PSEUDO_IBSS)) {
  134. - printk(KERN_DEBUG "Port type setting for monitor mode "
  135. -        "failedn");
  136. - return -EOPNOTSUPP;
  137. - }
  138. -
  139. - /* Host decrypt is needed to get the IV and ICV fields;
  140. -  * however, monitor mode seems to remove WEP flag from frame
  141. -  * control field */
  142. - if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
  143. -     HFA384X_WEPFLAGS_HOSTENCRYPT |
  144. -     HFA384X_WEPFLAGS_HOSTDECRYPT)) {
  145. - printk(KERN_DEBUG "WEP flags setting failedn");
  146. - return -EOPNOTSUPP;
  147. - }
  148. -
  149. - if (local->func->reset_port(dev) ||
  150. -     local->func->cmd(dev, HFA384X_CMDCODE_TEST |
  151. -      (HFA384X_TEST_MONITOR << 8),
  152. -      0, NULL, NULL)) {
  153. - printk(KERN_DEBUG "Setting monitor mode failedn");
  154. - return -EOPNOTSUPP;
  155. - }
  156. -
  157. - return 0;
  158. + return local->func->reset_port(dev);
  159.  }
  160.  
  161.  
  162. @@ -1159,7 +1133,7 @@
  163.   local->iw_mode = *mode;
  164.  
  165.   if (local->iw_mode == IW_MODE_MONITOR)
  166. - hostap_monitor_mode_enable(local);
  167. + return hostap_monitor_mode_enable(local);
  168.   else if (local->iw_mode == IW_MODE_MASTER && !local->host_encrypt &&
  169.    !local->fw_encrypt_ok) {
  170.   printk(KERN_DEBUG "%s: defaulting to host-based encryption as "
  171. diff -ur ../hostap-driver-0.3.9/driver/modules/hostap_wlan.h ./driver/modules/hostap_wlan.h
  172. --- ../hostap-driver-0.3.9/driver/modules/hostap_wlan.h 2005-05-18 05:31:22.000000000 +0200
  173. +++ ./driver/modules/hostap_wlan.h 2005-07-29 12:13:38.000000000 +0200
  174. @@ -591,6 +591,7 @@
  175.   int (*hw_config)(struct net_device *dev, int initial);
  176.   void (*hw_reset)(struct net_device *dev);
  177.   void (*hw_shutdown)(struct net_device *dev, int no_disable);
  178. + int (*monitor_enable)(struct net_device *dev);
  179.   int (*reset_port)(struct net_device *dev);
  180.   void (*schedule_reset)(local_info_t *local);
  181.   int (*download)(local_info_t *local,