Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PW_SID:706060] [01/10] ap: make supported rates a common builder. #208

Open
wants to merge 16 commits into
base: workflow
Choose a base branch
from

Conversation

IWDTestBot
Copy link
Owner

The supported rates IE was being built in two places. This makes that
code common. Unfortunately it needs to support both an ie builder
and using a pointer directly which is why it only builds the contents
of the IE and the caller must set the type/length.

src/ap.c | 68 +++++++++++++++++++++++++-------------------------------
1 file changed, 30 insertions(+), 38 deletions(-)

This is taken care of by the individual cache items and
if none exist, tar fails.
The supported rates IE was being built in two places. This makes that
code common. Unfortunately it needs to support both an ie builder
and using a pointer directly which is why it only builds the contents
of the IE and the caller must set the type/length.
This is the last bit of information the kernel exposes about the
hardware's HT capabilities.
This adds some additional parsing to obtain the AMPDU parameter
byte as well as wiphy_get_ht_capabilities() which returns the
complete IE (combining the 3 separate kernel attributes).
For AP mode its convenient for IWD to choose an appropriate
channel definition rather than require the user provide very
low level parameters such as channel width, center1 frequency
etc. This adds two new APIs to generate a channel definition, one
for legacy and one for HT.

The legacy API is very simple and chooses the first matching
operating class using 20Mhz channel widths.

The HT API is a bit more complex since it has to take into account
40MHz and check any channel restrictions. If an operating class is
found that is supported/not restricted it is marked as 'best' until
a better one is found. In this case 'better' is a larger channel
width. Since this is HT only 20mhz and 40mhz widths are checked.
The WMM parameter IE is expected by the linux kernel for any AP
supporting HT/VHT etc. IWD won't actually use WMM and its not
clear exactly why the kernel uses this restriction, but regardless
it must be included to support HT.
If supported this will include the HT capabilities and HT
operations elements in beacons/probes. Some shortcuts were taken
here since not all the information is currently parsed from the
hardware. Namely the HT operation element does not include the
basic MCS set. Still, this will at least show stations that the
AP is capable of more than just basic rates.

The builders themselves are structured similar to the basic rates
builder where they build only the contents and return the length.
The caller must set the type/length manually. This is to support
the two use cases of using with an IE builder vs direct pointer.
To include HT support a chandef needs to be created for whatever
frequency is being used. This allows IWD to provide a secondary
channel to the kernel in the case of 40MHz operation. Now the AP
will generate a chandef when starting based on the channel set
in the user profile (or default).
@IWDTestBot
Copy link
Owner Author

Fetch PR
Test ID: fetch
Desc: Fetch the PR commits for this CI run
Duration: 3.68 seconds
Result: PASS

Make Distcheck
Test ID: makedistcheck
Desc: Run distcheck to check the distribution
Duration: 76.37 seconds
Result: PASS

Build - Configure
Test ID: build
Desc: Configure the BlueZ source tree
Duration: 18.52 seconds
Result: PASS

Make Check
Test ID: makecheck
Desc: Run 'make check'
Duration: 2.24 seconds
Result: PASS

Make Check w/Valgrind
Test ID: makecheckvalgrind
Desc: Run 'make check' with Valgrind
Duration: 159.84 seconds
Result: PASS

Incremental Build with patches
Test ID: incremental_build
Desc: Incremental build per patch in the series
Duration: 581.83 seconds
Result: FAIL

Output:

src/ap.c: In function 'ap_build_ht_operation':
src/ap.c:949:17: error: 'struct ap_state' has no member named 'chandef'; did you mean 'channel'?
  949 |         if (ap->chandef.channel_width == BAND_CHANDEF_WIDTH_20)
      |                 ^~~~~~~
      |                 channel
src/ap.c:951:22: error: 'struct ap_state' has no member named 'chandef'; did you mean 'channel'?
  951 |         else if (ap->chandef.frequency < ap->chandef.center1_frequency)
      |                      ^~~~~~~
      |                      channel
src/ap.c:951:46: error: 'struct ap_state' has no member named 'chandef'; did you mean 'channel'?
  951 |         else if (ap->chandef.frequency < ap->chandef.center1_frequency)
      |                                              ^~~~~~~
      |                                              channel
make[1]: *** [Makefile:2408: src/ap.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:1587: all] Error 2

@IWDTestBot
Copy link
Owner Author

Fetch PR
Test ID: fetch
Desc: Fetch the PR commits for this CI run
Duration: 3.74 seconds
Result: PASS

GitLint
Test ID: gitlint
Desc: Run gitlint with rule in .gitlint
Duration: 6.24 seconds
Result: FAIL

Output:

[01/10] ap: make supported rates a common builder.
1: T3 Title has trailing punctuation (.): "[01/10] ap: make supported rates a common builder."

Make Distcheck
Test ID: makedistcheck
Desc: Run distcheck to check the distribution
Duration: 64.88 seconds
Result: PASS

Build - Configure
Test ID: build
Desc: Configure the BlueZ source tree
Duration: 53.55 seconds
Result: PASS

Make Check
Test ID: makecheck
Desc: Run 'make check'
Duration: 10.00 seconds
Result: PASS

Make Check w/Valgrind
Test ID: makecheckvalgrind
Desc: Run 'make check' with Valgrind
Duration: 276.67 seconds
Result: PASS

Incremental Build with patches
Test ID: incremental_build
Desc: Incremental build per patch in the series
Duration: 954.03 seconds
Result: FAIL

Output:

src/ap.c: In function ‘ap_build_ht_operation’:
src/ap.c:949:17: error: ‘struct ap_state’ has no member named ‘chandef’; did you mean ‘channel’?
  949 |         if (ap->chandef.channel_width == BAND_CHANDEF_WIDTH_20)
      |                 ^~~~~~~
      |                 channel
src/ap.c:951:22: error: ‘struct ap_state’ has no member named ‘chandef’; did you mean ‘channel’?
  951 |         else if (ap->chandef.frequency < ap->chandef.center1_frequency)
      |                      ^~~~~~~
      |                      channel
src/ap.c:951:46: error: ‘struct ap_state’ has no member named ‘chandef’; did you mean ‘channel’?
  951 |         else if (ap->chandef.frequency < ap->chandef.center1_frequency)
      |                                              ^~~~~~~
      |                                              channel
make[1]: *** [Makefile:2407: src/ap.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:1586: all] Error 2

Autotest Runner
Test ID: testrunner
Desc: Runs IWD's autotest framework
Duration: 1307.19 seconds
Result: PASS

Output:

Tests testPSK-roam,testRoamRetry failed, but passed after re-running

Clang Build
Test ID: clang
Desc: Build IWD using clang compiler
Duration: 271.37 seconds
Result: PASS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants