On 08/15/2017 10:36 AM, Rafał Miłecki wrote:
> From: Rafał Miłecki <ra...@milecki.pl>
> 
> In order to get more details about each frequency we will need to set
> NL80211_ATTR_SPLIT_WIPHY_DUMP in the future. This will result in our
> callback being called multiple times. Modify it to support such a
> scenario:
> 1) Start putting new frequencies after the last set one
> 2) Make sure that attribute is set before iterating it
> 
> Signed-off-by: Rafał Miłecki <ra...@milecki.pl>

Acked-by: Jo-Philipp Wich <j...@mein.io>

> ---
>  iwinfo_nl80211.c | 45 ++++++++++++++++++++++++++-------------------
>  1 file changed, 26 insertions(+), 19 deletions(-)
> 
> diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c
> index db0fc42..f9b13dd 100644
> --- a/iwinfo_nl80211.c
> +++ b/iwinfo_nl80211.c
> @@ -2367,37 +2367,44 @@ static int nl80211_get_freqlist_cb(struct nl_msg 
> *msg, void *arg)
>       int bands_remain, freqs_remain;
>  
>       struct nl80211_array_buf *arr = arg;
> -     struct iwinfo_freqlist_entry *e = arr->buf;
> +     struct iwinfo_freqlist_entry *e;
>  
>       struct nlattr **attr = nl80211_parse(msg);
>       struct nlattr *bands[NL80211_BAND_ATTR_MAX + 1];
>       struct nlattr *freqs[NL80211_FREQUENCY_ATTR_MAX + 1];
>       struct nlattr *band, *freq;
>  
> -     nla_for_each_nested(band, attr[NL80211_ATTR_WIPHY_BANDS], bands_remain)
> -     {
> -             nla_parse(bands, NL80211_BAND_ATTR_MAX,
> -                       nla_data(band), nla_len(band), NULL);
> +     e = arr->buf;
> +     e += arr->count;
>  
> -             nla_for_each_nested(freq, bands[NL80211_BAND_ATTR_FREQS], 
> freqs_remain)
> +     if (attr[NL80211_ATTR_WIPHY_BANDS]) {
> +             nla_for_each_nested(band, attr[NL80211_ATTR_WIPHY_BANDS], 
> bands_remain)
>               {
> -                     nla_parse(freqs, NL80211_FREQUENCY_ATTR_MAX,
> -                               nla_data(freq), nla_len(freq), NULL);
> +                     nla_parse(bands, NL80211_BAND_ATTR_MAX,
> +                             nla_data(band), nla_len(band), NULL);
>  
> -                     if (!freqs[NL80211_FREQUENCY_ATTR_FREQ] ||
> -                         freqs[NL80211_FREQUENCY_ATTR_DISABLED])
> -                             continue;
> +                     if (bands[NL80211_BAND_ATTR_FREQS]) {
> +                             nla_for_each_nested(freq, 
> bands[NL80211_BAND_ATTR_FREQS], freqs_remain)
> +                             {
> +                                     nla_parse(freqs, 
> NL80211_FREQUENCY_ATTR_MAX,
> +                                             nla_data(freq), nla_len(freq), 
> NULL);
>  
> -                     e->mhz = 
> nla_get_u32(freqs[NL80211_FREQUENCY_ATTR_FREQ]);
> -                     e->channel = nl80211_freq2channel(e->mhz);
> +                                     if (!freqs[NL80211_FREQUENCY_ATTR_FREQ] 
> ||
> +                                     freqs[NL80211_FREQUENCY_ATTR_DISABLED])
> +                                             continue;
>  
> -                     e->restricted = (
> -                             freqs[NL80211_FREQUENCY_ATTR_NO_IR] &&
> -                             !freqs[NL80211_FREQUENCY_ATTR_RADAR]
> -                     ) ? 1 : 0;
> +                                     e->mhz = 
> nla_get_u32(freqs[NL80211_FREQUENCY_ATTR_FREQ]);
> +                                     e->channel = 
> nl80211_freq2channel(e->mhz);
>  
> -                     e++;
> -                     arr->count++;
> +                                     e->restricted = (
> +                                             
> freqs[NL80211_FREQUENCY_ATTR_NO_IR] &&
> +                                             
> !freqs[NL80211_FREQUENCY_ATTR_RADAR]
> +                                     ) ? 1 : 0;
> +
> +                                     e++;
> +                                     arr->count++;
> +                             }
> +                     }
>               }
>       }
>  
> 


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to