Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1e838bf31c3a24596621026c7d1ca69da068af83
Commit:     1e838bf31c3a24596621026c7d1ca69da068af83
Parent:     ab6179711a5e46ed1db739bef7752d65ce836dce
Author:     Luis Carlos Cobo <[EMAIL PROTECTED]>
AuthorDate: Thu Aug 2 10:51:27 2007 -0400
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Oct 10 16:49:40 2007 -0700

    [PATCH] libertas: specific mesh scan for mshX interface
    
    With this patch, scanning with mshX interface will only return mesh 
networks. To
    differentiate them, a specific mesh IE in beacons/probe responses is used. 
This
    IE has been introduced in firmware release 5.110.14. Note:
    
    Even though there can be at most a single mesh per channel, this scan might
    return several networks in the same channel.
    
    If all nodes in a mesh network are associated to an AP, they won't produce
    beacons/probe responses, thus the network will not be listed. This will be 
fixed
    in future firmware releases.
    
    Scan on ethX interface is not filtered, so it will list both mesh and 
non-mesh
    networks.
    
    Signed-off-by: Luis Carlos Cobo <[EMAIL PROTECTED]>
    Signed-off-by: John W. Linville <[EMAIL PROTECTED]>
---
 drivers/net/wireless/libertas/defs.h |    2 ++
 drivers/net/wireless/libertas/scan.c |   10 ++++++++++
 drivers/net/wireless/libertas/scan.h |    2 ++
 3 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/libertas/defs.h 
b/drivers/net/wireless/libertas/defs.h
index de0756e..a5d70c1 100644
--- a/drivers/net/wireless/libertas/defs.h
+++ b/drivers/net/wireless/libertas/defs.h
@@ -156,6 +156,8 @@ static inline void lbs_dbg_hex(char *prompt, u8 * buf, int 
len)
 #define MRVDRV_MAX_BEACON_INTERVAL             1000
 #define MRVDRV_BEACON_INTERVAL                 100
 
+#define MARVELL_MESH_IE_LENGTH         9
+
 /** INT status Bit Definition*/
 #define his_cmddnldrdy                 0x01
 #define his_cardevent                  0x02
diff --git a/drivers/net/wireless/libertas/scan.c 
b/drivers/net/wireless/libertas/scan.c
index 2d6bc78..a98feed 100644
--- a/drivers/net/wireless/libertas/scan.c
+++ b/drivers/net/wireless/libertas/scan.c
@@ -1099,6 +1099,12 @@ static int libertas_process_bss(struct bss_descriptor * 
bss,
                                memcpy(bss->wpa_ie, elem, bss->wpa_ie_len);
                                lbs_dbg_hex("process_bss: WPA IE", bss->wpa_ie,
                                            elem->len);
+                       } else if (elem->len >= MARVELL_MESH_IE_LENGTH &&
+                           elem->data[0] == 0x00 &&
+                           elem->data[1] == 0x50 &&
+                           elem->data[2] == 0x43 &&
+                           elem->data[3] == 0x04) {
+                               bss->mesh = 1;
                        }
                        break;
 
@@ -1611,6 +1617,10 @@ int libertas_get_scan(struct net_device *dev, struct 
iw_request_info *info,
                        break;
                }
 
+               /* For mesh device, list only mesh networks */
+               if (dev == priv->mesh_dev && !iter_bss->mesh)
+                       continue;
+
                /* Prune old an old scan result */
                stale_time = iter_bss->last_scanned + DEFAULT_MAX_SCAN_AGE;
                if (time_after(jiffies, stale_time)) {
diff --git a/drivers/net/wireless/libertas/scan.h 
b/drivers/net/wireless/libertas/scan.h
index 2a09573..23c539c 100644
--- a/drivers/net/wireless/libertas/scan.h
+++ b/drivers/net/wireless/libertas/scan.h
@@ -170,6 +170,8 @@ struct bss_descriptor {
        u8 rsn_ie[MAX_WPA_IE_LEN];
        size_t rsn_ie_len;
 
+       u8 mesh;
+
        struct list_head list;
 };
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to