On Dec 19, 2013 7:56 AM, "Sergey Ryazanov" <[email protected]> wrote:
>
> 2013/12/19 Thomas Pedersen <[email protected]>:
> > On starting a mesh, ad-hoc, or AP BSS, the interface
> > dtim_count countdown should match that of the driver TSF.
> >
> ...
> >
> > diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
> > index ac18528..8211d30 100644
> > --- a/net/mac80211/cfg.c
> > +++ b/net/mac80211/cfg.c
> > @@ -951,6 +951,7 @@ static int ieee80211_start_ap(struct wiphy *wiphy,
struct net_device *dev,
> >                               struct cfg80211_ap_settings *params)
> >  {
> >         struct ieee80211_sub_if_data *sdata =
IEEE80211_DEV_TO_SUB_IF(dev);
> > +       struct ieee80211_local *local = sdata->local;
> >         struct beacon_data *old;
> >         struct ieee80211_sub_if_data *vlan;
> >         u32 changed = BSS_CHANGED_BEACON_INT |
> > @@ -1030,6 +1031,7 @@ static int ieee80211_start_ap(struct wiphy
*wiphy, struct net_device *dev,
> >                 return err;
> >         }
> >
> > +       ieee80211_recalc_dtim(local, sdata);
> >         ieee80211_bss_info_change_notify(sdata, changed);
> >
> >         netif_carrier_on(dev);
> > diff --git a/net/mac80211/debugfs_netdev.c
b/net/mac80211/debugfs_netdev.c
> > index 04b5a14..89160f7 100644
> > --- a/net/mac80211/debugfs_netdev.c
> > +++ b/net/mac80211/debugfs_netdev.c
> > @@ -468,6 +468,7 @@ static ssize_t ieee80211_if_parse_tsf(
> >                 }
> >         }
> >
> > +       ieee80211_recalc_dtim(local, sdata);
> >         return buflen;
> >  }
> >  __IEEE80211_IF_FILE_W(tsf);
> > diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
> > index d6ba8414..a92c8a9 100644
> > --- a/net/mac80211/ibss.c
> > +++ b/net/mac80211/ibss.c
> > @@ -369,6 +369,7 @@ static void __ieee80211_sta_join_ibss(struct
ieee80211_sub_if_data *sdata,
> >                 return;
> >         }
> >
> > +       ieee80211_recalc_dtim(local, sdata);
> >         ieee80211_bss_info_change_notify(sdata, bss_change);
> >
> >         ifibss->state = IEEE80211_IBSS_MLME_JOINED;
> ...
> > diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
> > index 5a74b24..5b919ca 100644
> > --- a/net/mac80211/mesh.c
> > +++ b/net/mac80211/mesh.c
> > @@ -807,6 +807,7 @@ int ieee80211_start_mesh(struct
ieee80211_sub_if_data *sdata)
> >                 return -ENOMEM;
> >         }
> >
> > +       ieee80211_recalc_dtim(local, sdata);
> >         ieee80211_bss_info_change_notify(sdata, changed);
> >
> >         netif_carrier_on(sdata->dev);
> > diff --git a/net/mac80211/util.c b/net/mac80211/util.c
> > index 656648b..599cf37 100644
> > --- a/net/mac80211/util.c
> > +++ b/net/mac80211/util.c
> > @@ -2588,3 +2588,31 @@ int ieee80211_cs_headroom(struct ieee80211_local
*local,
> >
> >         return headroom;
> >  }
> > +
> > +void ieee80211_recalc_dtim(struct ieee80211_local *local,
> > +                          struct ieee80211_sub_if_data *sdata)
> > +{
> ...
> > +       sdata->u.mesh.ps.dtim_count = dtim_count;
> > +}
>
> Apologize for my intrusiveness, but could this write operation lead to
> unpredictable results for non-mesh interfaces.

Doh! Yes. Sorry I had this patch lying around and forgot to port it to the
general case.

Thanks!
Thomas
_______________________________________________
Devel mailing list
[email protected]
http://lists.open80211s.org/cgi-bin/mailman/listinfo/devel

Reply via email to