unsigned int center_freq1;
unsigned int center_freq1_offset;
unsigned int center_freq2;
+ unsigned int punctured;
};
#define ARRAY_SIZE(ar) (sizeof(ar)/sizeof(ar[0]))
int parse_keys(struct nl_msg *msg, char **argv[], int *argc);
-#define _PARSE_FREQ_ARGS_OPT1 "<freq> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz|320MHz]"
-#define _PARSE_FREQ_ARGS_OPT2 "<control freq> [5|10|20|40|80|80+80|160|320] [<center1_freq> [<center2_freq>]]"
+#define _PARSE_FREQ_ARGS_OPT1 "<freq> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz|320MHz] [punct <bitmap>]"
+#define _PARSE_FREQ_ARGS_OPT2 "<control freq> [5|10|20|40|80|80+80|160|320] [<center1_freq> [<center2_freq>]] [punct <bitmap>]"
#define PARSE_FREQ_ARGS(pfx, sfx) \
pfx _PARSE_FREQ_ARGS_OPT1 sfx "\n" \
pfx _PARSE_FREQ_ARGS_OPT2 sfx
pfx _PARSE_FREQ_KHZ_ARGS_OPT1 sfx "\n" \
pfx _PARSE_FREQ_KHZ_ARGS_OPT2 sfx
#define PARSE_CHAN_ARGS(pfx) \
- pfx "<channel> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz|320MHz]"
+ pfx "<channel> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz|320MHz] [punct <bitmap>]"
int parse_freqchan(struct chandef *chandef, bool chan, int argc, char **argv,
int *parsed, bool freq_in_khz);
enum nl80211_chan_width str_to_bw(const char *str);
goto out;
}
- /* This was a only a channel definition, nothing further may follow. */
+ /* This was a only a channel definition, only puncturing may follow */
if (chan)
goto out;
res = parse_freqs(chandef, argc - 1, argv + 1, &_parsed, freq_in_khz);
out:
+ if (!freq_in_khz && argc > _parsed && strcmp(argv[_parsed], "punct") == 0) {
+ _parsed++;
+ if (argc <= _parsed)
+ return 1;
+ chandef->punctured = strtoul(argv[_parsed], &end, 10);
+ if (*end)
+ return 1;
+ _parsed++;
+ }
+
/* Error out if parsed is NULL. */
if (!parsed && _parsed != argc)
return 1;
NL80211_ATTR_CENTER_FREQ2,
chandef->center_freq2);
+ if (chandef->punctured)
+ NLA_PUT_U32(msg, NL80211_ATTR_PUNCT_BITMAP, chandef->punctured);
+
return 0;
nla_put_failure: