"Could not get RID" error - RID len mismatch

Christophe Chaloin christophe.chaloin at rightvision.com
Thu Mar 20 06:42:56 EST 2003


I modified the sources from version 2002-10-12 of HostAP.
Here is the patch of my modifications.
Copy the diff above in the file "hostap_pci.patch" and apply with "patch -p1 < hostap_pci.patch".

Hope it will be useful !

Chris

---------------------------------------------- cut here -----------------------------------------------
--- old/hostap_hw.c Thu Mar 20 13:38:53 2003
+++ new/hostap_hw.c Thu Mar 20 13:39:36 2003
@@ -696,9 +696,7 @@
  return 0;
 }
 
-
-static int hfa384x_get_rid(struct net_device *dev, u16 rid, void *buf, int len,
-      int exact_len)
+static int hfa384x_get_rid_deported(struct net_device *dev, u16 rid, void *buf, int len, int exact_len)
 {
  local_info_t *local = (local_info_t *) dev->priv;
  int res, rlen = 0;
@@ -750,6 +748,19 @@
  return rlen;
 }
 
+static int hfa384x_get_rid(struct net_device *dev, u16 rid, void *buf, int len, int exact_len)
+{
+ int ret;
+ int counter = 0;
+
+ ret = hfa384x_get_rid_deported(dev, rid, buf, len, exact_len);
+ while((ret < 0) && (counter<20)) {
+  counter++;
+  ret = hfa384x_get_rid_deported(dev, rid, buf, len, exact_len);
+ }
+
+ return ret;
+}
 
 static int hfa384x_set_rid(struct net_device *dev, u16 rid, void *buf, int len)
 {
@@ -884,13 +895,21 @@
 }
 
 
-static int prism2_get_version_info(struct net_device *dev, u16 rid,
-       const char *txt)
+static int prism2_get_version_info(struct net_device *dev, u16 rid, const char *txt)
 {
  struct hfa384x_comp_ident comp;
+ int ret;
+ int counter = 0;
 
- if (hfa384x_get_rid(dev, rid, &comp, sizeof(comp), 1) < 0) {
-  printk(KERN_DEBUG "Could not get RID for component %s\n", txt);
+ ret = hfa384x_get_rid(dev, rid, &comp, sizeof(comp), 1);
+ printk(KERN_DEBUG "Reading %s with multiple attempts :\n", txt);
+ while((ret < 0) && (counter<20)) {
+  counter++;
+  ret = hfa384x_get_rid(dev, rid, &comp, sizeof(comp), 1);
+ }
+
+ if (counter>=20) {
+  printk(KERN_DEBUG "\nAborting\nCould not get RID for component %s\n", txt);
   return -1;
  }
 
@@ -1077,6 +1096,8 @@
 {
  local_info_t *local = (local_info_t *) dev->priv;
  int ret, i, first = 1;
+ int counter = 0;
+
 
  PDEBUG(DEBUG_FLOW, "prism2_hw_init()\n");
 
@@ -1165,11 +1186,20 @@
 
   prism2_check_sta_fw_version(local);
 
-  if (hfa384x_get_rid(dev, HFA384X_RID_CNFOWNMACADDR,
-        &dev->dev_addr, 6, 1) < 0) {
-   printk("%s: could not get own MAC address\n",
-          dev->name);
+  ret = hfa384x_get_rid(dev, HFA384X_RID_CNFOWNMACADDR, &dev->dev_addr, 6, 1);
+  printk(KERN_DEBUG "Reading MAC address with multiple attempts :\n");
+  while((ret < 0) && (counter<20)) {
+   counter++;
+   ret = hfa384x_get_rid(dev, HFA384X_RID_CNFOWNMACADDR, &dev->dev_addr, 6, 1);
   }
+
+  if (counter>=20) {
+   printk(KERN_DEBUG "\nAborting\n%s: could not get own MAC address\n", dev->name);
+   return -1;
+  }
+
+  printk(KERN_DEBUG "%s: MAC address OK\n", dev->name);
+
 #ifdef PRISM2_HOSTAPD
   memcpy(local->apdev->dev_addr, dev->dev_addr, ETH_ALEN);
 #endif /* PRISM2_HOSTAPD */
---------------------------------------------- cut here -----------------------------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.shmoo.com/pipermail/hostap/attachments/20030320/3f91358e/attachment.htm 


More information about the HostAP mailing list