diff --git a/README.md b/README.md index 5f71d12..071d358 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ https://github.com/newracom/nrc7292_sw_pkg/tree/master/package/evk/sw_pkg/nrc_pk > For support regarding the SAE Hash-to-Element (H2E), please refer to https://github.com/newracom/nrc7292_sw_pkg/blob/master/README-H2E.md ### Release roadmap +- v1.5.1 (2024.05.10): Hotfix - v1.5 (2023.10.31) - v1.4.1 (2023.09.08) - v1.4 (2023.06.16) @@ -35,7 +36,7 @@ https://github.com/newracom/nrc7292_sw_pkg/tree/master/package/evk/sw_pkg/nrc_pk - v1.3.0 (2020.05.30) ### Latest release -- [NRC7292_SW_PKG_v1.5](https://github.com/newracom/nrc7292_sw_pkg/releases/tag/v1.5) +- [NRC7292_SW_PKG_v1.5.1](https://github.com/newracom/nrc7292_sw_pkg/releases/tag/v1.5.1) ### Release package contents - package: NRC7292 software package for global regulatory domains diff --git a/package/ChangeLog b/package/ChangeLog index 1f81c12..fbeea92 100644 --- a/package/ChangeLog +++ b/package/ChangeLog @@ -4,6 +4,26 @@ * ******************************************************************* +[2024-05-10] +Change summary for version 1.5.1: + + Hotfix + * Enhanced RC scheme + o Hotfix for slow rate adaptation in specific RF environments + + Changes + * Increase supported MTU size (up to 2304) + * Host driver update: beacon_loss_count=20 to accommodate weak RF field conditions + * Update cli_app command 'set rc_param' for the probe interval configuration + + Bugfix + * TX sequence number corruption issue + * Update the SN for devices in poor connectivity conditions to prevent discarding out-of-date frames in mac80211 + * Host driver memory leak issue + * Host driver kernel panic issue + * JP primary channel interoperability issue + * Multicast transmission halts when the duty window is set too small + [2023-10-31] Change summary for version 1.5: diff --git a/package/RN-7292-001-SW_PKG_release_note (v1.5).pdf b/package/RN-7292-001-SW_PKG_release_note (v1.5).pdf deleted file mode 100644 index 29ec397..0000000 Binary files a/package/RN-7292-001-SW_PKG_release_note (v1.5).pdf and /dev/null differ diff --git a/package/RN-7292-001-SW_PKG_release_note (v1.5.1).pdf b/package/RN-7292-001-SW_PKG_release_note (v1.5.1).pdf new file mode 100644 index 0000000..e4d3fdd Binary files /dev/null and b/package/RN-7292-001-SW_PKG_release_note (v1.5.1).pdf differ diff --git a/package/VERSION-SDK b/package/VERSION-SDK index c0fe417..4d3073b 100644 --- a/package/VERSION-SDK +++ b/package/VERSION-SDK @@ -1,3 +1,3 @@ VERSION_MAJOR 1 VERSION_MINOR 5 -VERSION_REVISION 0 +VERSION_REVISION 1 diff --git a/package/doc/UG-7292-003-S1G_Channel.pdf b/package/doc/UG-7292-003-S1G_Channel.pdf index ddc1f7a..1bd3a8e 100644 Binary files a/package/doc/UG-7292-003-S1G_Channel.pdf and b/package/doc/UG-7292-003-S1G_Channel.pdf differ diff --git a/package/doc/UG-7292-007-Commnad line application.pdf b/package/doc/UG-7292-007-Commnad line application.pdf index 8bdd599..9316f0d 100644 Binary files a/package/doc/UG-7292-007-Commnad line application.pdf and b/package/doc/UG-7292-007-Commnad line application.pdf differ diff --git a/package/doc/UG-7292-015-Transmit_Power_Control.pdf b/package/doc/UG-7292-015-Transmit_Power_Control.pdf deleted file mode 100644 index a7f3aa8..0000000 Binary files a/package/doc/UG-7292-015-Transmit_Power_Control.pdf and /dev/null differ diff --git a/package/doc/UG-7292-018-Raspberry_Pi_setup.pdf b/package/doc/UG-7292-018-Raspberry_Pi_setup.pdf index 1a4da6a..7428931 100644 Binary files a/package/doc/UG-7292-018-Raspberry_Pi_setup.pdf and b/package/doc/UG-7292-018-Raspberry_Pi_setup.pdf differ diff --git a/package/evk/binary/VERSION-SDK b/package/evk/binary/VERSION-SDK index c0fe417..4d3073b 100644 --- a/package/evk/binary/VERSION-SDK +++ b/package/evk/binary/VERSION-SDK @@ -1,3 +1,3 @@ VERSION_MAJOR 1 VERSION_MINOR 5 -VERSION_REVISION 0 +VERSION_REVISION 1 diff --git a/package/evk/binary/cli_app b/package/evk/binary/cli_app index 6bbcf7b..1cd1e9c 100644 Binary files a/package/evk/binary/cli_app and b/package/evk/binary/cli_app differ diff --git a/package/evk/binary/nrc.ko b/package/evk/binary/nrc.ko index c53d313..cdc9313 100644 Binary files a/package/evk/binary/nrc.ko and b/package/evk/binary/nrc.ko differ diff --git a/package/evk/binary/nrc7292_cspi.bin b/package/evk/binary/nrc7292_cspi.bin index 869828d..fb3f612 100755 Binary files a/package/evk/binary/nrc7292_cspi.bin and b/package/evk/binary/nrc7292_cspi.bin differ diff --git a/package/evk/sw_pkg/nrc_pkg/VERSION-SDK b/package/evk/sw_pkg/nrc_pkg/VERSION-SDK index c0fe417..4d3073b 100644 --- a/package/evk/sw_pkg/nrc_pkg/VERSION-SDK +++ b/package/evk/sw_pkg/nrc_pkg/VERSION-SDK @@ -1,3 +1,3 @@ VERSION_MAJOR 1 VERSION_MINOR 5 -VERSION_REVISION 0 +VERSION_REVISION 1 diff --git a/package/evk/sw_pkg/nrc_pkg/script/cli_app b/package/evk/sw_pkg/nrc_pkg/script/cli_app index 6bbcf7b..1cd1e9c 100644 Binary files a/package/evk/sw_pkg/nrc_pkg/script/cli_app and b/package/evk/sw_pkg/nrc_pkg/script/cli_app differ diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_open.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_open.conf index ab4c1c8..d224a6a 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_open.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_open.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_owe.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_owe.conf index 05563db..b5177f9 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_owe.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_owe.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_pbc.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_pbc.conf index cb47831..22ef149 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_pbc.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_pbc.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_sae.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_sae.conf index fa91b64..b81d869 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_sae.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_sae.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_wpa2.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_wpa2.conf index ed96015..14e3b00 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_wpa2.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/CN/map_halow_wpa2.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_open.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_open.conf index a163a25..58d4de6 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_open.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_open.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=halow_demo hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_owe.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_owe.conf index 51547ef..63fa746 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_owe.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_owe.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_pbc.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_pbc.conf index 39687a1..2eb5a41 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_pbc.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_pbc.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_sae.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_sae.conf index 476ba2f..9bd300f 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_sae.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_sae.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_wpa2.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_wpa2.conf index fe4f4b6..d69b67a 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_wpa2.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/EU/map_halow_wpa2.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_open.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_open.conf index 6aa0c54..57375cf 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_open.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_open.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_owe.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_owe.conf index b7de517..125a83f 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_owe.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_owe.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_pbc.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_pbc.conf index 2538538..61e7aeb 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_pbc.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_pbc.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_sae.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_sae.conf index 10308e7..51ab572 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_sae.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_sae.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_wpa2.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_wpa2.conf index eb22942..44be0b7 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_wpa2.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/JP/map_halow_wpa2.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_open.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_open.conf index 6f129a9..a10c8b4 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_open.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_open.conf @@ -6,6 +6,7 @@ ssid=nrc_mesh #ssid=halow_relay_1 hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_owe.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_owe.conf index a9518a2..a9acdb6 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_owe.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_owe.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_pbc.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_pbc.conf index 587360f..f4ca05c 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_pbc.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_pbc.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_sae.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_sae.conf index 7fffaac..afcaa20 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_sae.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_sae.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_wpa2.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_wpa2.conf index 9541b54..5b8e652 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_wpa2.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/K1/map_halow_wpa2.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_open.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_open.conf index edc92e4..296a2fe 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_open.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_open.conf @@ -6,6 +6,7 @@ ssid=nrc_mesh #ssid=halow_relay_1 hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_owe.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_owe.conf index c78d952..1ac12b1 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_owe.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_owe.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_pbc.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_pbc.conf index b8532a4..2046f32 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_pbc.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_pbc.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_sae.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_sae.conf index 1243797..f6c20b0 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_sae.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_sae.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_wpa2.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_wpa2.conf index e864a0b..c9ded79 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_wpa2.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/K2/map_halow_wpa2.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_open.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_open.conf index 19bdf0c..ba570ca 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_open.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_open.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_owe.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_owe.conf index 1527f50..b5f8936 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_owe.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_owe.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_pbc.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_pbc.conf index 90ccbbf..75b5417 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_pbc.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_pbc.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_sae.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_sae.conf index 8c7034b..3074bec 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_sae.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_sae.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_wpa2.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_wpa2.conf index 70fe9fb..6167914 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_wpa2.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/TW/map_halow_wpa2.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_open.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_open.conf index 3f23a13..56d9896 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_open.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_open.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_owe.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_owe.conf index 5c3ac37..7c6e6a6 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_owe.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_owe.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_pbc.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_pbc.conf index 3791a5c..a8b8016 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_pbc.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_pbc.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_sae.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_sae.conf index a25cd4b..c1f8644 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_sae.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_sae.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_wpa2.conf b/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_wpa2.conf index b1c67d7..49fbdab 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_wpa2.conf +++ b/package/evk/sw_pkg/nrc_pkg/script/conf/US/map_halow_wpa2.conf @@ -5,6 +5,7 @@ interface=wlan0 ssid=nrc_mesh hw_mode=a bridge=br0 +wds_sta=1 basic_rates=60 120 240 #1MHz diff --git a/package/evk/sw_pkg/nrc_pkg/script/start.py b/package/evk/sw_pkg/nrc_pkg/script/start.py index a5ac074..ac82377 100644 --- a/package/evk/sw_pkg/nrc_pkg/script/start.py +++ b/package/evk/sw_pkg/nrc_pkg/script/start.py @@ -49,7 +49,6 @@ ################################################################################# # RF Conf. max_txpwr = 24 # Maximum TX Power (in dBm) -epa = 0 # (7394 only) External PA : 0(none) or 1(used) bd_name = '' # board data name (bd defines max TX Power per CH/MCS/CC) # specify your bd name here. If not, follow naming rules in strBDName() ################################################################################## @@ -146,14 +145,6 @@ # Supported CH Width (STA Only) support_ch_width = 1 # 0 (1/2MHz Support) or 1 (1/2/4MHz Support) #--------------------------------------------------------------------------------# -# Rate control configuration -# Types of RC: (0) System default, (1)Disable,Use default_mcs (2)Feedback RC. (3)Consistent RC. -ap_rc_mode = 2 -sta_rc_mode = 2 -# Default MCS: (0 ~ 7) -ap_rc_default_mcs = 2 -sta_rc_default_mcs = 2 -#--------------------------------------------------------------------------------# # Use Power save pretend operation for no response STA power_save_pretend = 0 # 0 (disable) or 1 (enable) ################################################################################## @@ -342,16 +333,6 @@ def strOriCountry(): else: return str(sys.argv[3]) -def strRCMode(param): - if int(param) == 0: - return 'Disabled' - elif int(param) == 1: - return 'Feedback RC' - elif int(param) == 2: - return 'Consistent RC' - else: - return 'Invalid Mode' - def isNumber(s): try: float(s) @@ -421,12 +402,6 @@ def argv_print(): print("Listen Interval : " + str(listen_interval)) if strSTA() == 'MESH': print("Mesh Mode : " + strMeshMode()) - if strSTA() == 'AP': - print("Rate Control : " + strRCMode(ap_rc_mode)) - print("Default MCS : " + str(ap_rc_default_mcs)) - if strSTA() == 'STA': - print("Rate Control : " + strRCMode(sta_rc_mode)) - print("Default MCS : " + str(sta_rc_default_mcs)) print("------------------------------") def copyConf(): @@ -709,13 +684,6 @@ def setModuleParam(): # default: bd.dat bd_name_arg = " bd_name=" + strBDName() - # module param for rate control mode - # default: rc_mode=1(Individual for each STA) - rc_mode_arg = " ap_rc_mode=" + str(ap_rc_mode) + " sta_rc_mode=" + str(sta_rc_mode) - # default: rc_default_mcs=2(mcs2) - rc_default_mcs_arg = " ap_rc_default_mcs=" + str(ap_rc_default_mcs) + \ - " sta_rc_default_mcs=" + str(sta_rc_default_mcs) - # module parameter setting while loading NRC driver # Default value is used if arg is not defined module_param = "" @@ -737,7 +705,7 @@ def setModuleParam(): cqm_arg + listen_int_arg + drv_dbg_arg + \ sbi_arg + discard_deauth_arg + dbg_fc_arg + kr_band_arg + legacy_ack_arg + \ be_arg + rs_arg + beacon_bypass_arg + ps_gpio_arg + bd_name_arg + support_ch_width_arg + \ - rc_mode_arg + rc_default_mcs_arg + ps_pretend_arg \ + ps_pretend_arg \ return module_param diff --git a/package/evk/sw_pkg/nrc_pkg/sw/driver/nrc.ko b/package/evk/sw_pkg/nrc_pkg/sw/driver/nrc.ko index c53d313..cdc9313 100644 Binary files a/package/evk/sw_pkg/nrc_pkg/sw/driver/nrc.ko and b/package/evk/sw_pkg/nrc_pkg/sw/driver/nrc.ko differ diff --git a/package/evk/sw_pkg/nrc_pkg/sw/firmware/nrc7292_cspi.bin b/package/evk/sw_pkg/nrc_pkg/sw/firmware/nrc7292_cspi.bin index 869828d..fb3f612 100755 Binary files a/package/evk/sw_pkg/nrc_pkg/sw/firmware/nrc7292_cspi.bin and b/package/evk/sw_pkg/nrc_pkg/sw/firmware/nrc7292_cspi.bin differ diff --git a/package/src/cli_app/cli_cmd.c b/package/src/cli_app/cli_cmd.c index 7ba14a0..e9a914f 100644 --- a/package/src/cli_app/cli_cmd.c +++ b/package/src/cli_app/cli_cmd.c @@ -89,6 +89,7 @@ static int cmd_optimal_channel(cmd_tbl_t *t, int argc, char *argv[]); static int cmd_show_sysconfig(cmd_tbl_t *t, int argc, char *argv[]); static int cmd_show_bcn_mcs(cmd_tbl_t *t, int argc, char *argv[]); +static int cmd_show_rc(cmd_tbl_t *t, int argc, char *argv[]); static int cmd_show_rc_pf(cmd_tbl_t *t, int argc, char *argv[]); static int cmd_show_rc_param(cmd_tbl_t *t, int argc, char *argv[]); @@ -142,7 +143,6 @@ static int cmd_set_mesh_rssi_threshold(cmd_tbl_t *t, int argc, char *argv[]); * sub commands on set and show *******************************************************************************/ static int cmd_self_configuration(cmd_tbl_t *t, int argc, char *argv[]); -static int cmd_set_rc_pf(cmd_tbl_t *t, int argc, char *argv[]); static int cmd_set_rc_param(cmd_tbl_t *t, int argc, char *argv[]); /******************************************************************************* @@ -242,7 +242,7 @@ cmd_tbl_t show_sub_list[] = { { "optimal_channel", cmd_optimal_channel, "show optimal_channel", "show optimal_channel {Country(US,NZ...)} {BW} {dwell time}", "", 0}, { "app_version", cmd_show_app_version, "show app version", "show app_version", "", 0}, { "sysconfig", cmd_show_sysconfig, "show sysconfig", "show sysconfig", "", 0}, - { "rc_pf", cmd_show_rc_pf, "show rate control profile number", "show rc_pf", SHOW_RC_PF_KEY_LIST, 0}, + { "rc", cmd_show_rc, "show tx's retry mcs info, maxtp/tp2/maxp/lowest","show rc [vif_id] [aid]", SHOW_RC_KEY_LIST, 0}, { "rc_param", cmd_show_rc_param, "show configured rate control parameter", "show rc_param", SHOW_RC_PARAM_KEY_LIST, 0}, { "bcn_mcs", cmd_show_bcn_mcs, "show beacon mcs", "show bcn_mcs [vif_id]", "", 1}, }; @@ -272,9 +272,8 @@ cmd_tbl_t set_sub_list[] = { { "report", cmd_set_report, "set lmac periodic report", "set report {on/off}", "", 0}, { "support_ch_width", cmd_set_support_ch_width, "set supported ch width in s1g capa ie (0:1/2M, 1:1/2/4M)", "set support_ch_width [0|1]", "", 0}, { "ampdu_mode", cmd_set_ampdu_mode, "set ampdu_mode ", "set ampdu_mode [disable|manual|auto]", "", 0}, - { "bcn_mcs", cmd_set_bcn_mcs, "set bcn_mcs ", "set bcn_mcs [vif_id] [10|0|1|2|3|4|5|6|7]\n", "", 0}, - { "rc_pf", cmd_set_rc_pf, "set rate control profile number", "set rc_pf [1|2]", SET_RC_PF_KEY_LIST, 0}, - { "rc_param", cmd_set_rc_param, "set rate control parameter", "set rc_param {1|2|3|4|5} {1|2|3|4|5|6|7}", SET_RC_PARAM_KEY_LIST, 0}, + { "bcn_mcs", cmd_set_bcn_mcs, "set bcn_mcs ", "set bcn_mcs [vif_id] [10|0|1|2|3|4|5|6|7]", "", 0}, + { "rc_param", cmd_set_rc_param, "set rate control parameter", "set rc_param {1|2|3|4|5} {1|2|3|4|5|6|7} {1|..|255}", SET_RC_PARAM_KEY_LIST, 0}, { "bgscan_trx", cmd_set_bgscan_trx, "set bgscan_trx ", "set bgscan_trx [1:enable|0:disable] [wait time operation ch for rx: (0~100)msec]", "", 0}, { "scan_period", cmd_set_scan_period, "set scan_period", "set scan_period [dwell time (min 20ms)]", "", 0}, { "mesh_rssi_threshold", cmd_set_mesh_rssi_threshold, "set mesh_rssi_threshold ", "set mesh_rssi_threshold {-120~-10dBm}", "", 0}, @@ -352,7 +351,7 @@ cmd_tbl_t * get_cmd_list(enum cmd_list_type type, int *list_size, int *list_dept *list_size = sizeof(show_stats_sub_list)/sizeof(cmd_tbl_t); *list_depth = 2; break; - case SHWO_MAC_SUB_CMD: + case SHOW_MAC_SUB_CMD: ret = show_mac_sub_list; *list_size = sizeof(show_mac_sub_list)/sizeof(cmd_tbl_t); *list_depth = 2; @@ -550,7 +549,7 @@ static int cmd_help(cmd_tbl_t *t, int argc, char *argv[]) cmd_list_display(MAIN_CMD); cmd_list_display(SHOW_SUB_CMD); cmd_list_display(SHOW_STATS_SUB_CMD); - cmd_list_display(SHWO_MAC_SUB_CMD); + cmd_list_display(SHOW_MAC_SUB_CMD); cmd_list_display(SHOW_MAC_TX_SUB_CMD); cmd_list_display(SHOW_MAC_RX_SUB_CMD); cmd_list_display(SET_SUB_CMD); @@ -827,7 +826,7 @@ static int cmd_show_mac(cmd_tbl_t *t, int argc, char *argv[]) { int ret = CMD_RET_FAILURE; int sub_cmd_list_size, sub_cmd_list_depth; - cmd_tbl_t * sub_cmd_list = get_cmd_list(SHWO_MAC_SUB_CMD, &sub_cmd_list_size, &sub_cmd_list_depth); + cmd_tbl_t * sub_cmd_list = get_cmd_list(SHOW_MAC_SUB_CMD, &sub_cmd_list_size, &sub_cmd_list_depth); if(argc == sub_cmd_list_depth){ printf("There is no sub command. Please see the help.\n"); @@ -1393,38 +1392,13 @@ static int cmd_show_cca_thresh(cmd_tbl_t *t, int argc, char *argv[]) return ret; } -static int cmd_show_rc_pf(cmd_tbl_t *t, int argc, char *argv[]) -{ - int ret = CMD_RET_SUCCESS; - char param[NRC_MAX_CMDLINE_SIZE]; - char response[NL_MSG_MAX_RESPONSE_SIZE]; - int netlink_ret = 0; - int display_per_line= 1; - - memset(response, 0x0, NL_MSG_MAX_RESPONSE_SIZE); - memset(param, 0x0, sizeof(param)); - strcpy(param, "show rc_pf -sr"); - netlink_ret = netlink_send_data(NL_SHELL_RUN, param, response); - if(!netlink_ret){ - if(strcmp(response, response_timeout_str)== 0){ - ret = CMD_RET_RESPONSE_TIMEOUT; - }else{ - cmd_result_parse((char*)t->key_list, response, display_per_line); - ret = CMD_RET_SUCCESS; - } - }else{ - ret = CMD_RET_FAILURE; - } - return ret; -} - static int cmd_show_rc_param(cmd_tbl_t *t, int argc, char *argv[]) { int ret = CMD_RET_SUCCESS; char param[NRC_MAX_CMDLINE_SIZE]; char response[NL_MSG_MAX_RESPONSE_SIZE]; int netlink_ret = 0; - int display_per_line= 2; + int display_per_line= 1; memset(response, 0x0, NL_MSG_MAX_RESPONSE_SIZE); memset(param, 0x0, sizeof(param)); @@ -2338,34 +2312,26 @@ static int cmd_set_color(cmd_tbl_t *t, int argc, char *argv[]) return run_shell_cmd(t, argc, argv, "set color", NULL, 0); } -static int cmd_set_rc_pf(cmd_tbl_t *t, int argc, char *argv[]) +static int cmd_show_rc(cmd_tbl_t *t, int argc, char *argv[]) { int ret = CMD_RET_SUCCESS; - char param[NRC_MAX_CMDLINE_SIZE]; char response[NL_MSG_MAX_RESPONSE_SIZE]; - int netlink_ret = 0; - int display_per_line= 1; - - memset(response, 0x0, NL_MSG_MAX_RESPONSE_SIZE); - memset(param, 0x0, sizeof(param)); + const int display_per_line= 1; - if (argc < 3) { - return CMD_RET_FAILURE; + ret = run_shell_cmd(t, argc, argv, "show rc", response, sizeof(response)); + if(ret == CMD_RET_SUCCESS){ + printf("---------------------------------------- \n"); + printf(" order mcs bw \n"); + printf("---------------------------------------- \n"); + cmd_result_parse((char*)t->key_list, response, display_per_line); + printf("---------------------------------------- \n"); + } else if(ret == CMD_RET_FAILURE){ + printf("\nusage : %s\n\n", (char*)t->usage); + printf("AP mode needs to specify AID# of STA because our rate control algorithm has statistics per each STA.\n"); + printf("If you don't know corresponding AID# of STA, please use a cli command, 'show uinfo [vif_id] .\n"); + printf("You can check corresponding AID#.\n"); } - sprintf(param, "set rc_pf %s -sr", argv[2]); - - netlink_ret = netlink_send_data(NL_SHELL_RUN, param, response); - if(!netlink_ret){ - if(strcmp(response, response_timeout_str)== 0){ - ret = CMD_RET_RESPONSE_TIMEOUT; - }else{ - cmd_result_parse((char*)t->key_list, response, display_per_line); - ret = CMD_RET_SUCCESS; - } - }else{ - ret = CMD_RET_FAILURE; - } return ret; } @@ -2380,7 +2346,7 @@ static int cmd_set_rc_param(cmd_tbl_t *t, int argc, char *argv[]) memset(response, 0x0, NL_MSG_MAX_RESPONSE_SIZE); memset(param, 0x0, sizeof(param)); - if(argc == 4){ + if(argc == 5){ sprintf(param, "set rc_param %s %s -sr", argv[2], argv[3]); }else{ return CMD_RET_FAILURE; diff --git a/package/src/cli_app/cli_cmd.h b/package/src/cli_app/cli_cmd.h index f0d451d..b3de3cd 100755 --- a/package/src/cli_app/cli_cmd.h +++ b/package/src/cli_app/cli_cmd.h @@ -53,7 +53,7 @@ enum cmd_list_type { SYS_CMD, SHOW_SUB_CMD, SHOW_STATS_SUB_CMD, - SHWO_MAC_SUB_CMD, + SHOW_MAC_SUB_CMD, SHOW_MAC_TX_SUB_CMD, SHOW_MAC_RX_SUB_CMD, NRF_SUB_CMD, diff --git a/package/src/cli_app/cli_config.h b/package/src/cli_app/cli_config.h index e06aad5..414e2e8 100644 --- a/package/src/cli_app/cli_config.h +++ b/package/src/cli_app/cli_config.h @@ -26,7 +26,7 @@ #ifndef _CLI_CONFIG_H_ #define _CLI_CONFIG_H_ -#define NRC_CLI_APP_VER "2.21.5" +#define NRC_CLI_APP_VER "2.21.6" #define NRC_CLI_APP_NAME "Newracom Command Line Application" #define NRC_CLI_APP_EXIT_MSG "Exit Newracom Command Line Application" #define NRC_CLI_APP_PROMPT "NRC" diff --git a/package/src/cli_app/cli_key_list.h b/package/src/cli_app/cli_key_list.h index 2884ecb..af7330e 100644 --- a/package/src/cli_app/cli_key_list.h +++ b/package/src/cli_app/cli_key_list.h @@ -35,11 +35,14 @@ /* show config */ #define SHOW_CONFIG_DISP "%s,%s,\ -%s,%s,%d (%d),%d (%d),%s,%d,%s,%s,\ +%s,%s,%d (%d),%d (%d),\ +%d,%s,%s,%s,%s,\ %s,%s,%s,%d,%s,%s,%s,\ 0x%x,%s,%s,%s,%s,%d,%d,%s" + #define SHOW_CONFIG_KEY_LIST "[MAC Configuration]\nDevice Mode,MAC Address,\ -Country,Bandwidth,Frequency,MAC80211_freq,Rate Control, -MCS, -bw,Guard Interval,\ +Country,Bandwidth,Frequency,MAC80211_freq,\ +Default MCS,Rate Control, - Info, - MCS10(MGMT),Guard Interval,\ Security,Type,RTS,RTS threshold,Format,Preamble type,Promiscuous Mode,\ color,Auto CFO Cal,BSSID,AID,\n[PHY Configuration]\nTX_Gain,Base RX_Gain,Compensated RX_Gain,Tx Power Type" @@ -114,13 +117,9 @@ ampdu_len_exp,min mpdu_start_spacing,rx_s1gmcs_map" #define SET_RC_KEY_DISP "%s,%d,%s" #define SET_RC_KEY_LIST "rc,vif_id,mode" -/* set rc_pf [Profile#] */ -#define SET_RC_PF_KEY_DISP "%d" -#define SET_RC_PF_KEY_LIST "Profile#" - /* set rc_param */ -#define SET_RC_PARAM_KEY_DISP "%d,%d" -#define SET_RC_PARAM_KEY_LIST "EWMA value,Update interval value" +#define SET_RC_PARAM_KEY_DISP "%d,%d,%d" +#define SET_RC_PARAM_KEY_LIST "EWMA value,Update interval value,Probe interval value" /* set duty {duty window} {tx duration in duty window} {duty margin}*/ #define SET_DUTY_KEY_DISP "%s,%lu,%lu,%lu" @@ -191,12 +190,12 @@ Tx power index for MCS 6,Tx power index for MCS 7,Tx power index for MCS 10" #define SHOW_XTAL_STATUS_DISP "%d" #define SHOW_XTAL_STATUS_LIST "XTAL status" -/* show rc_pf */ -#define SHOW_RC_PF_KEY_DISP "%d" -#define SHOW_RC_PF_KEY_LIST "Profile#" +/* show rc */ +#define SHOW_RC_KEY_DISP "%2d %2d,%2d %2d,%2d %2d,%2d %2d" +#define SHOW_RC_KEY_LIST " maxtp, tp2, maxp, lowest" /* show rc_param */ -#define SHOW_RC_PARAM_KEY_DISP "%ld,%d" -#define SHOW_RC_PARAM_KEY_LIST "EWMA(%),Update interval(ms)" +#define SHOW_RC_PARAM_KEY_DISP "%ld,%d,%d" +#define SHOW_RC_PARAM_KEY_LIST "EWMA(%),Update interval(ms),Probe interval(ms)" #endif /* _CLI_KEY_LIST_H_ */ diff --git a/package/src/nrc/hif.c b/package/src/nrc/hif.c index 7e9a146..bf0e8a5 100644 --- a/package/src/nrc/hif.c +++ b/package/src/nrc/hif.c @@ -583,16 +583,16 @@ int nrc_xmit_wim_request(struct nrc *nw, struct sk_buff *skb) struct sk_buff *nrc_xmit_wim_request_wait(struct nrc *nw, struct sk_buff *skb, int timeout) { + mutex_lock(&nw->target_mtx); nw->last_wim_responded = NULL; - if (nrc_xmit_wim(nw, skb, HIF_WIM_SUB_REQUEST) < 0) + if (nrc_xmit_wim(nw, skb, HIF_WIM_SUB_REQUEST) < 0) { + mutex_unlock(&nw->target_mtx); return NULL; - - if (nw->last_wim_responded) { - pr_err("received already"); - return nw->last_wim_responded; } + mutex_unlock(&nw->target_mtx); + reinit_completion(&nw->wim_responded); if (wait_for_completion_timeout(&nw->wim_responded, timeout) == 0) diff --git a/package/src/nrc/nrc-init.c b/package/src/nrc/nrc-init.c index 320d52f..013c080 100644 --- a/package/src/nrc/nrc-init.c +++ b/package/src/nrc/nrc-init.c @@ -298,7 +298,7 @@ MODULE_PARM_DESC(power_save_gpio, "gpio for power save"); /** * Maximum beacon loss count */ -int beacon_loss_count = 7; +int beacon_loss_count = 20; module_param(beacon_loss_count, int, 0600); MODULE_PARM_DESC(beacon_loss_count, "Number of beacon intervals before we decide beacon was lost"); @@ -319,24 +319,24 @@ MODULE_PARM_DESC(support_ch_width, "Supported CH width (0:1/2MHz Support, 1:1/2/ /** * Set rate control mode */ -uint8_t ap_rc_mode = 2; -module_param(ap_rc_mode, byte, 0600); -MODULE_PARM_DESC(ap_rc_mode, "AP Rate control mode (1:Disable,Use default_mcs, 2:Individual RC for each STA. 3:RC incorporating RX MCS"); +uint8_t ap_rc_mode = 0xff; +//module_param(ap_rc_mode, byte, 0600); +//MODULE_PARM_DESC(ap_rc_mode, "AP Rate control mode (1:Disable,Use default_mcs, 2:Individual RC for each STA. 3:RC incorporating RX MCS"); -uint8_t sta_rc_mode = 2; -module_param(sta_rc_mode, byte, 0600); -MODULE_PARM_DESC(sta_rc_mode, "STA Rate control mode (1:Disable,Use default_mcs, 2:Individual RC for each STA. 3:RC incorporating RX MCS"); +uint8_t sta_rc_mode = 0xff; +//module_param(sta_rc_mode, byte, 0600); +//MODULE_PARM_DESC(sta_rc_mode, "STA Rate control mode (1:Disable,Use default_mcs, 2:Individual RC for each STA. 3:RC incorporating RX MCS"); /** * Set default mcs */ -uint8_t ap_rc_default_mcs = 2; -module_param(ap_rc_default_mcs, byte, 0600); -MODULE_PARM_DESC(ap_rc_default_mcs, "AP Default MCS"); +uint8_t ap_rc_default_mcs = 0xff; +//module_param(ap_rc_default_mcs, byte, 0600); +//MODULE_PARM_DESC(ap_rc_default_mcs, "AP Default MCS"); -uint8_t sta_rc_default_mcs = 2; -module_param(sta_rc_default_mcs, byte, 0600); -MODULE_PARM_DESC(sta_rc_default_mcs, "STA Default MCS"); +uint8_t sta_rc_default_mcs = 0xff; +//module_param(sta_rc_default_mcs, byte, 0600); +//MODULE_PARM_DESC(sta_rc_default_mcs, "STA Default MCS"); /** * Power save pretend value for no response STA @@ -545,7 +545,7 @@ int nrc_fw_start(struct nrc *nw) struct sk_buff *skb_req, *skb_resp; struct wim_drv_info_param *p; - skb_req = nrc_wim_alloc_skb(nw, WIM_CMD_START, sizeof(int)); + skb_req = nrc_wim_alloc_skb(nw, WIM_CMD_START, tlv_len(sizeof(struct wim_drv_info_param))); if (!skb_req) return -ENOMEM; diff --git a/package/src/nrc/nrc-mac80211.c b/package/src/nrc/nrc-mac80211.c index 9fdf221..8d5f8df 100644 --- a/package/src/nrc/nrc-mac80211.c +++ b/package/src/nrc/nrc-mac80211.c @@ -643,6 +643,12 @@ void nrc_cleanup_txq_by_macaddr (struct nrc *nw, struct ieee80211_vif *vif, sta = ieee80211_find_all_sta(vif, macaddr); + if (!sta) { + rcu_read_unlock(); + nrc_mac_dbg("[%s] sta is NULL", __func__); + return; + } + for (i = 0; i < ARRAY_SIZE(sta->txq); i++) { nrc_cleanup_txq(nw, sta->txq[i]); } @@ -1755,17 +1761,24 @@ void nrc_mac_bss_info_changed(struct ieee80211_hw *hw, if (info->assoc) { #endif nrc_bss_assoc(hw, vif, info, skb); + + spin_lock_bh(&nw->vif_lock); + nw->associated_vif = vif; if (!disable_cqm) { + nrc_mac_dbg("mod_timer in %s:%d", __FUNCTION__, __LINE__); mod_timer(&nw->bcn_mon_timer, jiffies + msecs_to_jiffies(nw->beacon_timeout)); } - nw->associated_vif = vif; + spin_unlock_bh(&nw->vif_lock); } else { + spin_lock_bh(&nw->vif_lock); if (!disable_cqm) { nw->beacon_timeout = 0; + nrc_mac_dbg("del_timer in %s:%d", __FUNCTION__, __LINE__); try_to_del_timer_sync(&nw->bcn_mon_timer); } nw->associated_vif = NULL; + spin_unlock_bh(&nw->vif_lock); } nrc_mac_dbg("[BSS_CHANGED_ASSOC] associated_vif:%d beacon_timeout:%lu", nw->associated_vif?i_vif->index:-1, nw->beacon_timeout); @@ -2021,6 +2034,13 @@ static void nrc_init_sta_ba_session(struct ieee80211_sta *sta) for (i=0 ; i < NRC_MAX_TID; i++) { i_sta->tx_ba_session[i] = IEEE80211_BA_NONE; i_sta->ba_req_last_jiffies[i] = 0; + i_sta->rx_ba_session[i].started = false; + i_sta->rx_ba_session[i].sn = 0; +#if KERNEL_VERSION(4, 19, 0) <= NRC_TARGET_KERNEL_VERSION + i_sta->rx_ba_session[i].buf_size = IEEE80211_MAX_AMPDU_BUF_HT; +#else + i_sta->rx_ba_session[i].buf_size = IEEE80211_MAX_AMPDU_BUF; +#endif } } } @@ -2105,6 +2125,17 @@ int nrc_mac_sta_state(struct ieee80211_hw *hw, struct ieee80211_vif *vif, list_add_tail(&i_sta->list, &i_vif->preassoc_sta_list); spin_unlock_irqrestore(&i_vif->preassoc_sta_lock, flags); + + /* This value is set in rx_h_bss_max_idle_period normally when assoc frames are received + but, While test of ifconfig up /down, some weired transition occured without any frame exchanges. + so, values is set to zero. this causes invalid timer setting on STA. + */ + + /* set default max_idle_period from AP */ + nrc_mac_dbg("%s: set default max_idle_period with AP's period: 0x%x", __FUNCTION__, i_vif->max_idle_period); + i_sta->max_idle.period = i_vif->max_idle_period; + i_sta->max_idle.options = 0; + } else if (state_changed(NONE, NOTEXIST)) { spin_lock_irqsave(&i_vif->preassoc_sta_lock, flags); list_del_init(&i_sta->list); @@ -2318,6 +2349,8 @@ static int nrc_mac_ampdu_action(struct ieee80211_hw *hw, enum ieee80211_ampdu_mlme_action action = params->action; struct ieee80211_sta *sta = params->sta; u16 tid = params->tid; + u16 *ssn = ¶ms->ssn; + u16 buf_size = params->buf_size; #endif if (nw->ampdu_supported && !nw->ampdu_started) { @@ -2382,6 +2415,9 @@ static int nrc_mac_ampdu_action(struct ieee80211_hw *hw, return 0; case IEEE80211_AMPDU_RX_START: nrc_dbg(NRC_DBG_MAC, "%s: IEEE80211_AMPDU_RX_START", __func__); + i_sta->rx_ba_session[tid].sn = *ssn; + i_sta->rx_ba_session[tid].buf_size = buf_size; + i_sta->rx_ba_session[tid].started = true; if (nw->ampdu_reject) { nrc_dbg(NRC_DBG_MAC, "%s: Reject AMPDU", __func__); return -EOPNOTSUPP; @@ -2389,6 +2425,7 @@ static int nrc_mac_ampdu_action(struct ieee80211_hw *hw, return 0; case IEEE80211_AMPDU_RX_STOP: nrc_dbg(NRC_DBG_MAC, "%s: IEEE80211_AMPDU_RX_STOP", __func__); + i_sta->rx_ba_session[tid].started = false; if (nw->ampdu_reject) { nrc_dbg(NRC_DBG_MAC, "%s: Reject AMPDU", __func__); return -EOPNOTSUPP; @@ -4752,7 +4789,7 @@ int nrc_register_hw(struct nrc *nw) hw->extra_tx_headroom = (sizeof(struct hif) + sizeof(struct frame_hdr) + 32); #ifdef CONFIG_USE_MAX_MTU - hw->max_mtu = ETH_DATA_LEN + 32; /* 32 for batman-adv */ + hw->max_mtu = IEEE80211_MAX_DATA_LEN; #endif hw->max_rates = 4; hw->max_rate_tries = 11; @@ -4880,11 +4917,17 @@ void nrc_send_beacon_loss(struct nrc *nw) { struct nrc_vif *i_vif; - BUG_ON(nw->associated_vif == NULL); + spin_lock_bh(&nw->vif_lock); + if (nw->associated_vif == NULL) { + nrc_mac_dbg("beacon loss event, but not associated"); + goto done; + } i_vif = to_i_vif(nw->associated_vif); nrc_mac_dbg("beacon loss event to vif(%d)", i_vif->index); ieee80211_beacon_loss(nw->associated_vif); +done: + spin_unlock_bh(&nw->vif_lock); } void nrc_cleanup_ba_session_sta (void *data, struct ieee80211_sta *sta) diff --git a/package/src/nrc/nrc-pm.c b/package/src/nrc/nrc-pm.c index d453995..cb4aa49 100644 --- a/package/src/nrc/nrc-pm.c +++ b/package/src/nrc/nrc-pm.c @@ -311,7 +311,7 @@ static void sta_max_idle_period_expire(struct timer_list *t) struct nrc_vif *i_vif = from_timer(i_vif, t, max_idle_timer); #endif struct ieee80211_hw *hw = i_vif->nw->hw; - struct nrc_sta *i_sta = NULL, *tmp = NULL; + struct nrc_sta *i_sta = NULL, *tmp = NULL, *tmp_sta = NULL; unsigned long flags; #ifdef CONFIG_SUPPORT_TX_CONTROL struct ieee80211_tx_control control; @@ -326,7 +326,10 @@ static void sta_max_idle_period_expire(struct timer_list *t) struct ieee80211_hdr_3addr_qos *qosnullfunc; spin_lock_irqsave(&i_vif->preassoc_sta_lock, flags); - list_for_each_entry_safe(i_sta, tmp, &i_vif->preassoc_sta_list, list) break; + list_for_each_entry_safe(tmp_sta, tmp, &i_vif->preassoc_sta_list, list) { + i_sta = tmp_sta; + break; + } spin_unlock_irqrestore(&i_vif->preassoc_sta_lock, flags); if(!i_sta){ @@ -720,16 +723,23 @@ static int rx_h_bss_max_idle_period(struct nrc_trx_data *rx) if (ie) { if (rx->vif->type == NL80211_IFTYPE_AP) { i_sta->max_idle.period = i_vif->max_idle_period; + nrc_mac_dbg("%s: IE exist, period from vif 0x%x", __FUNCTION__, i_vif->max_idle_period); i_sta->max_idle.options = 0; }else{ - i_sta->max_idle.period = ie->max_idle_period; - i_sta->max_idle.options = ie->idle_option; + if (ie->max_idle_period != 0) { + i_sta->max_idle.period = ie->max_idle_period; + i_sta->max_idle.options = ie->idle_option; + } else { + /* An case that can never happen */ + nrc_mac_dbg("%s: max_idle_period is zero in IE, no set!!!", __FUNCTION__); + } } } else { i_sta->max_idle.options = 0; if (rx->vif->type == NL80211_IFTYPE_AP) { i_sta->max_idle.period = i_vif->max_idle_period; + nrc_mac_dbg("%s: IE not exist, period from vif 0x%x", __FUNCTION__, i_vif->max_idle_period); } else { i_sta->max_idle.period = 0; } diff --git a/package/src/nrc/nrc-s1g.c b/package/src/nrc/nrc-s1g.c index 790fce8..0d45941 100644 --- a/package/src/nrc/nrc-s1g.c +++ b/package/src/nrc/nrc-s1g.c @@ -482,4 +482,4 @@ uint8_t nrc_get_pri_loc_by_freq(int freq) } return ptr_nrc_s1g_ch_table[0].primary_loc; } -#endif /* CONFIG_S1G_CHANNEL */ +#endif /* CONFIG_S1G_CHANNEL */ \ No newline at end of file diff --git a/package/src/nrc/nrc-trx.c b/package/src/nrc/nrc-trx.c index 8685f78..2466c67 100644 --- a/package/src/nrc/nrc-trx.c +++ b/package/src/nrc/nrc-trx.c @@ -853,10 +853,12 @@ int nrc_mac_rx(struct nrc *nw, struct sk_buff *skb) skb_deauth = ieee80211_deauth_get(nw->hw, mgmt->bssid, mgmt->sa, mgmt->bssid, WLAN_REASON_DEAUTH_LEAVING, NULL, false); if (!skb_deauth) { nrc_dbg(NRC_DBG_STATE, "%s Fail to alloc skb", __func__); + dev_kfree_skb(skb); return 0; } nrc_mac_dbg("%s: %pM connected, but auth received. send to kernel after convert auth -> deauth.", __func__, mgmt->sa); ieee80211_rx_irqsafe(nw->hw, skb_deauth); + dev_kfree_skb(skb); return 0; } } @@ -880,6 +882,7 @@ int nrc_mac_rx(struct nrc *nw, struct sk_buff *skb) } #endif ieee80211_rx_irqsafe(nw->hw, rx.skb); + if (ieee80211_hw_check(nw->hw, SUPPORTS_DYNAMIC_PS)) { if (ieee80211_is_data(fc) && nw->ps_enabled && nw->hw->conf.dynamic_ps_timeout > 0) { @@ -1006,6 +1009,54 @@ static int rx_h_decrypt(struct nrc_trx_data *rx) } RXH(rx_h_decrypt, NL80211_IFTYPE_ALL); +#if KERNEL_VERSION(4, 6, 0) <= NRC_TARGET_KERNEL_VERSION +static int rx_h_check_sn(struct nrc_trx_data *rx) +{ + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; + __le16 fc; + + if (!rx->sta) { + return 0; + } + + /* BA session sequence number inversion workaround. + * Over 2048 data frames can be transmitted while the peer is far away + * but enough to keep connection. When the peer comes back close to transmitter, + * the received packets will be dropped in mac80211 + * because 2048 sequence numbers are already missed in air. + * SN will be recovered after it increses by 4096. + * This is a normal operation in protocol but may cause problem in usecases. + * So, we need to check SN and clear BA session if necessary. + * Allow additional AMPDU buffer size since we can't get a head SN of the BA session. + * SN Inversion: 2048 < SN Diff < 4096 - AMPDU Buffer + */ + + fc = hdr->frame_control; + if (ieee80211_is_data_qos(fc) && !is_multicast_ether_addr(hdr->addr1)) { + struct nrc_sta *i_sta = to_i_sta(rx->sta); +#if KERNEL_VERSION(4, 17, 0) <= NRC_TARGET_KERNEL_VERSION + u8 tid = ieee80211_get_tid(hdr); +#else + u8 *qc = ieee80211_get_qos_ctl(hdr); + u8 tid = qc[0] & IEEE80211_QOS_CTL_TID_MASK; +#endif + if (tid < NRC_MAX_TID && i_sta->rx_ba_session[tid].started) { + u16 sn = (le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ) >> 4; + u16 sn_diff = (sn - i_sta->rx_ba_session[tid].sn) & IEEE80211_SN_MASK; + if (ieee80211_sn_less(sn, i_sta->rx_ba_session[tid].sn) && + sn_diff <= IEEE80211_SN_MODULO - i_sta->rx_ba_session[tid].buf_size) { + ieee80211_mark_rx_ba_filtered_frames(rx->sta, tid, sn, 0, IEEE80211_SN_MODULO >> 1); + nrc_mac_dbg("BA session[%d] SN inversion! last_sn:%d, sn:%d\n", tid, i_sta->rx_ba_session[tid].sn, sn); + } + i_sta->rx_ba_session[tid].sn = sn; + } + } + + return 0; +} +RXH(rx_h_check_sn, NL80211_IFTYPE_ALL); +#endif + #if defined (CONFIG_SUPPORT_IBSS) extern u64 current_bssid_beacon_timestamp; static int rx_h_ibss_get_bssid_tsf(struct nrc_trx_data *rx) diff --git a/package/src/nrc/nrc.h b/package/src/nrc/nrc.h index 95d3a61..048b5ad 100644 --- a/package/src/nrc/nrc.h +++ b/package/src/nrc/nrc.h @@ -361,6 +361,12 @@ static inline int hw_vifindex(struct ieee80211_vif *vif) return i_vif->index; } +struct rx_ba_session { + bool started; + u16 sn; + u16 buf_size; +}; + /* sta driver data structure */ struct nrc_sta { struct nrc *nw; @@ -381,6 +387,7 @@ struct nrc_sta { /* Block Ack Session per TID */ enum ieee80211_tx_ba_state tx_ba_session[NRC_MAX_TID]; uint32_t ba_req_last_jiffies[NRC_MAX_TID]; + struct rx_ba_session rx_ba_session[NRC_MAX_TID]; }; #define to_ieee80211_sta(s) \ diff --git a/package/src/nrc/wim.c b/package/src/nrc/wim.c index 05e4406..3020f54 100644 --- a/package/src/nrc/wim.c +++ b/package/src/nrc/wim.c @@ -527,26 +527,35 @@ int nrc_wim_set_sta_type(struct nrc *nw, struct ieee80211_vif *vif) if (sta_type == WIM_STA_TYPE_AP) { nrc_wim_set_ndp_preq(nw, skb, true); - if (ap_rc_mode > 3) { - ap_rc_mode = 3; + if (ap_rc_mode >= 1 && ap_rc_mode <= 3) { + nrc_dbg(NRC_DBG_MAC, "set ap rc_mode to %d", ap_rc_mode); + nrc_wim_set_rc_mode(nw, skb, ap_rc_mode); + } else { + nrc_dbg(NRC_DBG_MAC, "system default ap rc_mode"); } - nrc_wim_set_rc_mode(nw, skb, ap_rc_mode); - if (ap_rc_default_mcs > 7) { - ap_rc_default_mcs = 7; + if ((ap_rc_default_mcs >= 0 && ap_rc_default_mcs <= 7) || ap_rc_default_mcs == 10) { + nrc_dbg(NRC_DBG_MAC, "set ap default mcs to %d", ap_rc_default_mcs); + nrc_wim_set_default_mcs(nw, skb, ap_rc_default_mcs); + } else { + nrc_dbg(NRC_DBG_MAC, "system default ap mcs"); } - nrc_wim_set_default_mcs(nw, skb, ap_rc_default_mcs); } else if(sta_type == WIM_STA_TYPE_STA) { - if (sta_rc_mode > 3) { - sta_rc_mode = 3; + if (sta_rc_mode >= 1 && sta_rc_mode <= 3) { + nrc_dbg(NRC_DBG_MAC, "set sta rc_mode to %d", sta_rc_mode); + nrc_wim_set_rc_mode(nw, skb, sta_rc_mode); + } else { + nrc_dbg(NRC_DBG_MAC, "system default sta rc_mode"); } - nrc_wim_set_rc_mode(nw, skb, sta_rc_mode); - if (sta_rc_default_mcs > 7) { - sta_rc_default_mcs = 7; + if ((sta_rc_default_mcs >= 0 && sta_rc_default_mcs <= 7) || sta_rc_default_mcs == 10) { + nrc_dbg(NRC_DBG_MAC, "set sta default mcs to %d", sta_rc_default_mcs); + nrc_wim_set_default_mcs(nw, skb, sta_rc_default_mcs); + } else { + nrc_dbg(NRC_DBG_MAC, "system default sta mcs"); } - nrc_wim_set_default_mcs(nw, skb, sta_rc_default_mcs); + } } @@ -670,7 +679,9 @@ static int nrc_wim_request_handler(struct nrc *nw, static int nrc_wim_response_handler(struct nrc *nw, struct sk_buff *skb) { + mutex_lock(&nw->target_mtx); nw->last_wim_responded = skb; + mutex_unlock(&nw->target_mtx); if (completion_done(&nw->wim_responded)) { /* No completion waiters, free the SKB */ pr_err("no completion"); diff --git a/release_note/RN-7292-001-SW_PKG_release_note (v1.5.1).pdf b/release_note/RN-7292-001-SW_PKG_release_note (v1.5.1).pdf new file mode 100644 index 0000000..e4d3fdd Binary files /dev/null and b/release_note/RN-7292-001-SW_PKG_release_note (v1.5.1).pdf differ