o11s / open80211s

open80211s
Other
242 stars 55 forks source link

Mesh nodes should respond to probe requests #1

Open jcard0na opened 12 years ago

jcard0na commented 12 years ago

It's not hard. Here's an outline of what needs to be implemented:

diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
index c707c8b..6b4254e 100644
--- a/net/mac80211/mesh.c
+++ b/net/mac80211/mesh.c
@@ -609,6 +609,48 @@ void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata)
    ieee80211_configure_filter(local);
 }

+static void ieee80211_mesh_rx_preq(struct ieee80211_sub_if_data *sdata,
+                                       u16 stype,
+                                       struct ieee80211_mgmt *mgmt,
+                                       size_t len,
+                                       struct ieee80211_rx_status *rx_status)
+{
+     /* TODO: parse probe request, and respond with probe response if 
+        appropriate. */
+}
+
 static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
                    u16 stype,
                    struct ieee80211_mgmt *mgmt,
@@ -695,6 +737,10 @@ void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
        ieee80211_mesh_rx_bcn_presp(sdata, stype, mgmt, skb->len,
                        rx_status);
        break;
+       case IEEE80211_STYPE_PROBE_REQ:
+               ieee80211_mesh_rx_bcn_preq(sdata, stype, mgmt, skb->len,
+                                           rx_status);
+               break;
    case IEEE80211_STYPE_ACTION:
        ieee80211_mesh_rx_mgmt_action(sdata, mgmt, skb->len, rx_status);
        break;
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 7a4ff02..e13fc40 100644
--- a/net/mac80211/rx.c
        break;
    case cpu_to_le16(IEEE80211_STYPE_PROBE_REQ):
        /* process only for ibss */
-               if (sdata->vif.type != NL80211_IFTYPE_ADHOC)
+               if (sdata->vif.type != NL80211_IFTYPE_ADHOC &&
+                       sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
            return RX_DROP_MONITOR;
        break;
    default:
twpedersen commented 12 years ago

At least on wl12xx, the firmware will generate a probe response from the beacon template and send a probe response as necessary, but the MBSS still doesn't show up in scan results, so we'll need a separate patch for that as well.

On Thu, Mar 1, 2012 at 11:55 AM, jcard0na reply@reply.github.com wrote:

It's not hard.  Here's an outline of what needs to be implemented:

       diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c        index c707c8b..6b4254e 100644        --- a/net/mac80211/mesh.c        +++ b/net/mac80211/mesh.c        @@ -609,6 +609,48 @@ void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata)                ieee80211_configure_filter(local);         }

       +static void ieee80211_mesh_rx_preq(struct ieee80211_sub_if_data _sdata,        +                                       u16 stype,        +                                       struct ieee80211_mgmt mgmt,        +                                       size_t len,        +                                       struct ieee80211_rx_status rxstatus)        +{        +     / TODO: parse probe request, and respond with probe response if        +        appropriate. _/        +}        +         static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data sdata,                                                u16 stype,                                                struct ieee80211_mgmt mgmt,        @@ -695,6 +737,10 @@ void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data sdata,                        ieee80211_mesh_rx_bcn_presp(sdata, stype, mgmt, skb->len,                                                    rx_status);                        break;        +       case IEEE80211_STYPE_PROBE_REQ:        +               ieee80211_mesh_rx_bcn_preq(sdata, stype, mgmt, skb->len,        +                                           rx_status);        +               break;                case IEEE80211_STYPE_ACTION:                        ieee80211_mesh_rx_mgmt_action(sdata, mgmt, skb->len, rx_status);                        break;        diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c        index 7a4ff02..e13fc40 100644        --- a/net/mac80211/rx.c                        break;                case cpu_to_le16(IEEE80211_STYPE_PROBEREQ):                        / process only for ibss /        -               if (sdata->vif.type != NL80211_IFTYPE_ADHOC)        +               if (sdata->vif.type != NL80211_IFTYPE_ADHOC ||        +                       sdata->vif.type != NL80211_IFTYPE_MESH_POINT)                                return RX_DROP_MONITOR;                        break;                default:


Reply to this email directly or view it on GitHub: https://github.com/cozybit/open80211s/issues/1