diff mbox series

iw: add optional argument to parse 6G band channel

Message ID 1602283770-8026-1-git-send-email-pradeepc@codeaurora.org
State New
Headers show
Series iw: add optional argument to parse 6G band channel | expand

Commit Message

Pradeep Kumar Chitrapu Oct. 9, 2020, 10:49 p.m. UTC
Channel numbers of 6G band overlaps with those of 2G or 5G bands.
Therefore, an optional argument "6G" is added and expected next
to channel number to map it to correct 6GHz frequency. If not
specified, defaults to matching 2G or 5G frequency.

example:
iw wlanX set channel 149 6G 80MHz  --> maps to 6695 MHz
iw wlanX set channel 149 80MHz     --> maps to 5745 MHz

Signed-off-by: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org>
---
 interface.c |  5 +++--
 phy.c       |  8 ++++----
 util.c      | 13 +++++++++----
 3 files changed, 16 insertions(+), 10 deletions(-)

Comments

Johannes Berg Nov. 6, 2020, 8:55 a.m. UTC | #1
On Fri, 2020-10-09 at 15:49 -0700, Pradeep Kumar Chitrapu wrote:
> Channel numbers of 6G band overlaps with those of 2G or 5G bands.

> Therefore, an optional argument "6G" is added and expected next

> to channel number to map it to correct 6GHz frequency. If not

> specified, defaults to matching 2G or 5G frequency.

> 

> example:

> iw wlanX set channel 149 6G 80MHz  --> maps to 6695 MHz

> iw wlanX set channel 149 80MHz     --> maps to 5745 MHz


Hm. I can't really say I like this much.

Is it _really_ needed? I mean, we mostly specify the frequency today, so
... why not just always do that for 6 GHz?

johannes
Arend van Spriel Nov. 6, 2020, 9:05 a.m. UTC | #2
On 11/6/2020 9:55 AM, Johannes Berg wrote:
> On Fri, 2020-10-09 at 15:49 -0700, Pradeep Kumar Chitrapu wrote:
>> Channel numbers of 6G band overlaps with those of 2G or 5G bands.
>> Therefore, an optional argument "6G" is added and expected next
>> to channel number to map it to correct 6GHz frequency. If not
>> specified, defaults to matching 2G or 5G frequency.
>>
>> example:
>> iw wlanX set channel 149 6G 80MHz  --> maps to 6695 MHz
>> iw wlanX set channel 149 80MHz     --> maps to 5745 MHz
> 
> Hm. I can't really say I like this much.
> 
> Is it _really_ needed? I mean, we mostly specify the frequency today, so
> ... why not just always do that for 6 GHz?

I suspect there are people preferring channel numbers as much as there 
are people preferring frequencies. Personally, I think it is acceptable 
to put this limitation on 6G.

Regards,
Arend
Johannes Berg Nov. 6, 2020, 9:06 a.m. UTC | #3
On Fri, 2020-11-06 at 10:05 +0100, Arend Van Spriel wrote:
> On 11/6/2020 9:55 AM, Johannes Berg wrote:

> > On Fri, 2020-10-09 at 15:49 -0700, Pradeep Kumar Chitrapu wrote:

> > > Channel numbers of 6G band overlaps with those of 2G or 5G bands.

> > > Therefore, an optional argument "6G" is added and expected next

> > > to channel number to map it to correct 6GHz frequency. If not

> > > specified, defaults to matching 2G or 5G frequency.

> > > 

> > > example:

> > > iw wlanX set channel 149 6G 80MHz  --> maps to 6695 MHz

> > > iw wlanX set channel 149 80MHz     --> maps to 5745 MHz

> > 

> > Hm. I can't really say I like this much.

> > 

> > Is it _really_ needed? I mean, we mostly specify the frequency today, so

> > ... why not just always do that for 6 GHz?

> 

> I suspect there are people preferring channel numbers as much as there 

> are people preferring frequencies. Personally, I think it is acceptable 

> to put this limitation on 6G.


:)

After I sent the message I figured maybe then we should have different
syntax, where we say prefix the channel number by the band?

 iw wlanX set channel 6:149 ...
 iw wlanX set channel 5:149 ...
 iw wlanX set channel 2.4:11 ...

or so?

Seems better than having this optional argument '6G' in one place, and
could be supported in a more general fashion.

johannes
Arend van Spriel Nov. 6, 2020, 9:12 a.m. UTC | #4
On 11/6/2020 10:06 AM, Johannes Berg wrote:
> On Fri, 2020-11-06 at 10:05 +0100, Arend Van Spriel wrote:
>> On 11/6/2020 9:55 AM, Johannes Berg wrote:
>>> On Fri, 2020-10-09 at 15:49 -0700, Pradeep Kumar Chitrapu wrote:
>>>> Channel numbers of 6G band overlaps with those of 2G or 5G bands.
>>>> Therefore, an optional argument "6G" is added and expected next
>>>> to channel number to map it to correct 6GHz frequency. If not
>>>> specified, defaults to matching 2G or 5G frequency.
>>>>
>>>> example:
>>>> iw wlanX set channel 149 6G 80MHz  --> maps to 6695 MHz
>>>> iw wlanX set channel 149 80MHz     --> maps to 5745 MHz
>>>
>>> Hm. I can't really say I like this much.
>>>
>>> Is it _really_ needed? I mean, we mostly specify the frequency today, so
>>> ... why not just always do that for 6 GHz?
>>
>> I suspect there are people preferring channel numbers as much as there
>> are people preferring frequencies. Personally, I think it is acceptable
>> to put this limitation on 6G.
> 
> :)
> 
> After I sent the message I figured maybe then we should have different
> syntax, where we say prefix the channel number by the band?
> 
>   iw wlanX set channel 6:149 ...
>   iw wlanX set channel 5:149 ...
>   iw wlanX set channel 2.4:11 ...

Do you want to make that band: prefix required or optional. btw. starts 
to look like the format we use with our wl utility ;-)

Regards,
Arend
Johannes Berg Nov. 6, 2020, 9:12 a.m. UTC | #5
On Fri, 2020-11-06 at 10:12 +0100, Arend Van Spriel wrote:
> On 11/6/2020 10:06 AM, Johannes Berg wrote:

> > On Fri, 2020-11-06 at 10:05 +0100, Arend Van Spriel wrote:

> > > On 11/6/2020 9:55 AM, Johannes Berg wrote:

> > > > On Fri, 2020-10-09 at 15:49 -0700, Pradeep Kumar Chitrapu wrote:

> > > > > Channel numbers of 6G band overlaps with those of 2G or 5G bands.

> > > > > Therefore, an optional argument "6G" is added and expected next

> > > > > to channel number to map it to correct 6GHz frequency. If not

> > > > > specified, defaults to matching 2G or 5G frequency.

> > > > > 

> > > > > example:

> > > > > iw wlanX set channel 149 6G 80MHz  --> maps to 6695 MHz

> > > > > iw wlanX set channel 149 80MHz     --> maps to 5745 MHz

> > > > 

> > > > Hm. I can't really say I like this much.

> > > > 

> > > > Is it _really_ needed? I mean, we mostly specify the frequency today, so

> > > > ... why not just always do that for 6 GHz?

> > > 

> > > I suspect there are people preferring channel numbers as much as there

> > > are people preferring frequencies. Personally, I think it is acceptable

> > > to put this limitation on 6G.

> > 

> > :)

> > 

> > After I sent the message I figured maybe then we should have different

> > syntax, where we say prefix the channel number by the band?

> > 

> >   iw wlanX set channel 6:149 ...

> >   iw wlanX set channel 5:149 ...

> >   iw wlanX set channel 2.4:11 ...

> 

> Do you want to make that band: prefix required or optional.


That's a good question. Probably should be optional, otherwise
everything breaks ...

> btw. starts 

> to look like the format we use with our wl utility ;-)


Hah! Maybe you have a better idea there? :)

johannes
Arend van Spriel Nov. 6, 2020, 9:19 a.m. UTC | #6
On 11/6/2020 10:12 AM, Johannes Berg wrote:
> On Fri, 2020-11-06 at 10:12 +0100, Arend Van Spriel wrote:
>> On 11/6/2020 10:06 AM, Johannes Berg wrote:
>>> On Fri, 2020-11-06 at 10:05 +0100, Arend Van Spriel wrote:
>>>> On 11/6/2020 9:55 AM, Johannes Berg wrote:
>>>>> On Fri, 2020-10-09 at 15:49 -0700, Pradeep Kumar Chitrapu wrote:
>>>>>> Channel numbers of 6G band overlaps with those of 2G or 5G bands.
>>>>>> Therefore, an optional argument "6G" is added and expected next
>>>>>> to channel number to map it to correct 6GHz frequency. If not
>>>>>> specified, defaults to matching 2G or 5G frequency.
>>>>>>
>>>>>> example:
>>>>>> iw wlanX set channel 149 6G 80MHz  --> maps to 6695 MHz
>>>>>> iw wlanX set channel 149 80MHz     --> maps to 5745 MHz
>>>>>
>>>>> Hm. I can't really say I like this much.
>>>>>
>>>>> Is it _really_ needed? I mean, we mostly specify the frequency today, so
>>>>> ... why not just always do that for 6 GHz?
>>>>
>>>> I suspect there are people preferring channel numbers as much as there
>>>> are people preferring frequencies. Personally, I think it is acceptable
>>>> to put this limitation on 6G.
>>>
>>> :)
>>>
>>> After I sent the message I figured maybe then we should have different
>>> syntax, where we say prefix the channel number by the band?
>>>
>>>    iw wlanX set channel 6:149 ...
>>>    iw wlanX set channel 5:149 ...
>>>    iw wlanX set channel 2.4:11 ...
>>
>> Do you want to make that band: prefix required or optional.
> 
> That's a good question. Probably should be optional, otherwise
> everything breaks ...

Right.

>> btw. starts
>> to look like the format we use with our wl utility ;-)
> 
> Hah! Maybe you have a better idea there? :)

Not really. The above format seems fine as is.

Gr. AvS
diff mbox series

Patch

diff --git a/interface.c b/interface.c
index 89c95a9ac4ab..8e85f831f9f9 100644
--- a/interface.c
+++ b/interface.c
@@ -725,8 +725,9 @@  COMMAND(switch, freq,
 	"<control freq> [5|10|20|40|80|80+80|160] [<center1_freq> [<center2_freq>]] [beacons <count>] [block-tx]",
 	NL80211_CMD_CHANNEL_SWITCH, 0, CIB_NETDEV, handle_freq,
 	"Switch the operating channel by sending a channel switch announcement (CSA).");
-COMMAND(switch, channel, "<channel> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz] [beacons <count>] [block-tx]",
-	NL80211_CMD_CHANNEL_SWITCH, 0, CIB_NETDEV, handle_chan, NULL);
+COMMAND(switch, channel, "<channel> [6G] [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz] [beacons <count>] [block-tx]",
+	NL80211_CMD_CHANNEL_SWITCH, 0, CIB_NETDEV, handle_chan,
+	"6GHz channels expects '6G' in argument. If not specified, defaults to 5GHz or 2GHz channels");
 
 
 static int toggle_tid_param(const char *argv0, const char *argv1,
diff --git a/phy.c b/phy.c
index 2d489efd7690..31d96cec7886 100644
--- a/phy.c
+++ b/phy.c
@@ -222,9 +222,9 @@  static int handle_chan(struct nl80211_state *state, struct nl_msg *msg,
 
 	return put_chandef(msg, &chandef);
 }
-COMMAND(set, channel, "<channel> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz]",
+COMMAND(set, channel, "<channel> [6G] [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz]",
 	NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_chan, NULL);
-COMMAND(set, channel, "<channel> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz]",
+COMMAND(set, channel, "<channel> [6G] [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz]",
 	NL80211_CMD_SET_WIPHY, 0, CIB_NETDEV, handle_chan, NULL);
 
 
@@ -369,12 +369,12 @@  err_out:
 		free(cac_trigger_argv);
 	return err;
 }
-TOPLEVEL(cac, "channel <channel> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]\n"
+TOPLEVEL(cac, "channel <channel> [6G] [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]\n"
 	      "freq <freq> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]\n"
 	      "freq <control freq> [5|10|20|40|80|80+80|160] [<center1_freq> [<center2_freq>]]",
 	 0, 0, CIB_NETDEV, handle_cac, NULL);
 COMMAND(cac, trigger,
-	"channel <channel> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]\n"
+	"channel <channel> [6G] [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]\n"
 	"freq <frequency> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]\n"
 	"freq <frequency> [5|10|20|40|80|80+80|160] [<center1_freq> [<center2_freq>]]",
 	NL80211_CMD_RADAR_DETECT, 0, CIB_NETDEV, handle_cac_trigger,
diff --git a/util.c b/util.c
index 0a9083c613a4..9ca32c5295ae 100644
--- a/util.c
+++ b/util.c
@@ -576,7 +576,7 @@  static int parse_freqs(struct chandef *chandef, int argc, char **argv,
  * user by giving "NOHT" instead.
  *
  * The working specifier if chan is set are:
- *   <channel> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz]
+ *   <channel> [6G] [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz]
  *
  * And if frequency is set:
  *   <freq> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz|160MHz]
@@ -648,7 +648,12 @@  int parse_freqchan(struct chandef *chandef, bool chan, int argc, char **argv,
 	if (chan) {
 		enum nl80211_band band;
 
-		band = freq <= 14 ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ;
+		if (argc > 1 && strcmp(argv[1], "6G") == 0) {
+			band = NL80211_BAND_6GHZ;
+			_parsed += 1;
+		} else {
+			band = freq <= 14 ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ;
+		}
 		freq = ieee80211_channel_to_frequency(freq, band);
 	}
 	chandef->control_freq = freq;
@@ -656,9 +661,9 @@  int parse_freqchan(struct chandef *chandef, bool chan, int argc, char **argv,
 	chandef->center_freq1 = freq;
 
 	/* Try to parse HT mode definitions */
-	if (argc > 1) {
+	if ((argc - _parsed) > 0) {
 		for (i = 0; i < ARRAY_SIZE(chanmode); i++) {
-			if (strcasecmp(chanmode[i].name, argv[1]) == 0) {
+			if (strcasecmp(chanmode[i].name, argv[_parsed]) == 0) {
 				chanmode_selected = &chanmode[i];
 				_parsed += 1;
 				break;