[Prism54-devel] RE: Strange problem with wds in prism54
Sergio Ammirata
ammirata at econointl.com
Thu Apr 7 15:32:19 UTC 2005
Hello Jean-Baptiste,
> -----Original Message-----
> From: Jean-Baptiste Note [mailto:jean-baptiste.note at wanadoo.fr]
> Sent: Thursday, April 07, 2005 7:59 AM
> To: Sergio Ammirata
> Cc: 'Luis R. Rodriguez'; 'Denis Vlasenko'; 'Jouni Malinen'; prism54-
> devel at prism54.org
> Subject: Re: Strange problem with wds in prism54
>
>
> Hello Sergio, dear list,
>
> Sorry i'm new to WDS, so some things are not quite clear yet. I'll try
> to sum up :
>
> From what i understand, in the driver, you have the main ethX interface,
> which is always the interface representing the AP <-> stations wireless
> links, and you can spawn other interfaces with iwpriv ethx wdsadd, those
> interfaces being WDS links to other APs.
>
> You put all those interfaces into one br0 virtual interface, which
> basically tells the kernel : whatever packet you receive from one of the
> interfaces in br0, repeat them over to the other interfaces in br0 (this
> does the actual bridging, low-level forwarding, where simple interfaces
> were only available transport links).
That is exactly how it is supposed to work.
> One problem could be that in WDS mode, you're not sure to maintain the
> AP<->STA functionnality. From your comment "i still can associate to the
> AP, but IP connectivity is lost", I guess that the firmware allows the
> card to work with WDS and as an AP for STAs at the same time.
I am sure the driver supports WDS and AP at the same time because this same
card is used in a commercial device that does that ... I don't think they
are using linux or our prism54 driver but the point is that the firmware
does indeed support it.
> There can be two kinds of problems : problems on the rx path, problems
> on the tx path. I'd guess problems on the rx path, and this seems a good
> point to start debugging, so let's go !
>
> In the code, an essential part on the rx path seems to be the
> wds_find_device(unsigned char *wds_mac, struct wds_priv *wdsp) function
> in isl_wds.c, which dispatches the packets received to the correct
> net_device instances (one of ethX, or the ones that have been spawned
> with wdsadd).
>
> Can you enable WDS debugging (from the code i have at hand, you'll need
> to define the DEBUG macro in isl_wds.c, or change the DEBUG calls to
> printk), and report the logs you get, so that we know if the WDS address
> decoding works properly ?
>
> I you can't / don't know how to do this, can you point me to a precise
> tarball that compiles on your machine that i may modify for you to use ?
>
I am using yesterday's svn snapshot which, by the way, will not compile on
my machine unless I patch it (patch is at the end of the email):
In my configuration eth0 is the motherboard's built-in ethernet device. eth1
is the prism54 device and eht1_0 is the first wds device.
I modified the line on isl_wds.c that read
#define DEBUG(f, args...)
To read
#define DEBUG(f, args...) do { printk(KERN_DEBUG args); } while(0)
These are the results from dmesg when I enable wds:
wds_net_send_packet
wds_find_device
wds_find_device: WDS from mac 01-80-c2-00-00-00 not in current config,
returning NULL
When it is connecting I get a few of these:
wds_net_send_packet
wds_find_device
wds_find_device: WDS from mac ff-ff-ff-ff-ff-ff not in current config,
returning NULL
wds_net_send_packet
and then a lot more of these:
wds_net_send_packet
wds_find_device
wds_find_device: WDS from mac 01-80-c2-00-00-00 not in current config,
returning NULL
wds_net_send_packet
I connect with a static IP through the wireless interface and start a ping
towards the box and I get this for every ping
wds_net_send_packet
wds_find_device
wds_find_device: WDS from mac ff-ff-ff-ff-ff-ff not in current config,
returning NULL
wds_net_send_packet
wds_find_device
wds_find_device: WDS from mac 01-80-c2-00-00-00 not in current config,
returning NULL
wds_net_send_packet
wds_find_device
wds_find_device: WDS from mac 01-80-c2-00-00-00 not in current config,
returning NULL
wds_net_send_packet
wds_find_device
wds_find_device: WDS from mac 01-80-c2-00-00-00 not in current config,
returning NULL
When idle I keep getting a few of these every now and then:
wds_net_send_packet
wds_find_device
wds_find_device: WDS from mac 01-80-c2-00-00-00 not in current config,
returning NULL
This mac address (01-80-c2-00-00-00) does not come from the client and it is
not in the arp table either.
Some extra info:
/>brctl show
bridge name bridge id STP enabled interfaces
br0 000a.00026f229ad7 no eth1
eth1_0
/> brctl showmacs br0
port no mac addr is local? ageing timer
2 00:02:6f:22:9a:d7 yes 0.00
2 00:2e:42:42:03:00 no 0.78
2 08:00:45:00:00:4e no 21.88
2 08:00:45:00:00:ca no 45.98
2 08:00:45:00:00:f2 no 298.79
2 08:06:00:01:08:00 no 155.37
Maybe they are valid addresses on my eth0 network but I am not sure.
Hope this helps,
Sergio
======================================Patch==============================
--- ksrc/islpci_hotplug.c (revision 528)
+++ ksrc/islpci_hotplug.c (working copy)
@@ -277,7 +277,7 @@
printk(KERN_NOTICE "%s: got suspend request (state %d)\n",
ndev->name, state);
- pci_save_state(pdev, priv->pci_state);
+ pci_save_state(pdev);
/* tell the device not to trigger interrupts for now... */
isl38xx_disable_interrupts(priv->device_base);
@@ -303,7 +303,7 @@
printk(KERN_NOTICE "%s: got resume request\n", ndev->name);
- pci_restore_state(pdev, priv->pci_state);
+ pci_restore_state(pdev);
/* alright let's go into the PREBOOT state */
islpci_reset(priv, 1);
Index: ksrc/islpci_mgt.c
===================================================================
--- ksrc/islpci_mgt.c (revision 528)
+++ ksrc/islpci_mgt.c (working copy)
@@ -345,7 +345,7 @@
}
/* Ensure the results of device DMA are visible to the CPU.
*/
- pci_dma_sync_single(priv->pdev, buf->pci_addr,
+ pci_dma_sync_single_for_cpu(priv->pdev, buf->pci_addr,
frag_len, PCI_DMA_FROMDEVICE);
/* Perform endianess conversion for PIMFOR header in-place.
*/
More information about the Prism54-devel
mailing list