[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