Skip to content
Snippets Groups Projects
Commit b7481fd0 authored by Matthias Schiffer's avatar Matthias Schiffer Committed by David Bauer
Browse files

modules: switch to OpenWrt 24.10

parent 3688bf2e
No related branches found
No related tags found
No related merge requests found
Showing with 28 additions and 1341 deletions
GLUON_FEEDS='gluon packages routing' GLUON_FEEDS='gluon packages routing'
OPENWRT_REPO=https://github.com/openwrt/openwrt.git OPENWRT_REPO=https://github.com/openwrt/openwrt.git
OPENWRT_BRANCH=openwrt-23.05 OPENWRT_BRANCH=openwrt-24.10
OPENWRT_COMMIT=cd9998ef1b7b842bf052fc5e7034f23a22e67bf7 OPENWRT_COMMIT=45f9f1551223b516cccbcca1e252e722bb3dbc08
PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git
PACKAGES_GLUON_COMMIT=3d08b0fee8dc5d96d8bcdb985fad1d5564de4022 PACKAGES_GLUON_COMMIT=3d08b0fee8dc5d96d8bcdb985fad1d5564de4022
PACKAGES_PACKAGES_REPO=https://github.com/openwrt/packages.git PACKAGES_PACKAGES_REPO=https://github.com/openwrt/packages.git
PACKAGES_PACKAGES_BRANCH=openwrt-23.05 PACKAGES_PACKAGES_BRANCH=openwrt-24.10
PACKAGES_PACKAGES_COMMIT=7ee4fe7705f8b44ccfd2ec9470e91c8d900a65ab PACKAGES_PACKAGES_COMMIT=d364dcb7e55ac4202853c48e2788f0d4fbb5c513
PACKAGES_ROUTING_REPO=https://github.com/openwrt/routing.git PACKAGES_ROUTING_REPO=https://github.com/openwrt/routing.git
PACKAGES_ROUTING_BRANCH=openwrt-23.05 PACKAGES_ROUTING_BRANCH=openwrt-24.10
PACKAGES_ROUTING_COMMIT=67fb1bc0cbe1cf26748e83acb872513434bd0471 PACKAGES_ROUTING_COMMIT=3f15699240c076d5ee9ed697fa5ef45355423f6f
...@@ -6,13 +6,13 @@ Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net> ...@@ -6,13 +6,13 @@ Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
diff --git a/package/network/services/dropbear/patches/700-failsafe-mode.patch b/package/network/services/dropbear/patches/700-failsafe-mode.patch diff --git a/package/network/services/dropbear/patches/700-failsafe-mode.patch b/package/network/services/dropbear/patches/700-failsafe-mode.patch
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..bd9cf1ce4234d94bcc5b782cc753f59993f999bc index 0000000000000000000000000000000000000000..9b619ce80b2963c67ac62bcf95b33b28b505ad2a
--- /dev/null --- /dev/null
+++ b/package/network/services/dropbear/patches/700-failsafe-mode.patch +++ b/package/network/services/dropbear/patches/700-failsafe-mode.patch
@@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
+--- a/svr-auth.c +--- a/src/svr-auth.c
++++ b/svr-auth.c ++++ b/src/svr-auth.c
+@@ -125,10 +125,11 @@ void recv_msg_userauth_request() { +@@ -124,10 +124,11 @@ void recv_msg_userauth_request() {
+ AUTH_METHOD_NONE_LEN) == 0) { + AUTH_METHOD_NONE_LEN) == 0) {
+ TRACE(("recv_msg_userauth_request: 'none' request")) + TRACE(("recv_msg_userauth_request: 'none' request"))
+ if (valid_user + if (valid_user
...@@ -28,38 +28,38 @@ index 0000000000000000000000000000000000000000..bd9cf1ce4234d94bcc5b782cc753f599 ...@@ -28,38 +28,38 @@ index 0000000000000000000000000000000000000000..bd9cf1ce4234d94bcc5b782cc753f599
+ { + {
+ dropbear_log(LOG_NOTICE, + dropbear_log(LOG_NOTICE,
+ "Auth succeeded with blank password for '%s' from %s", + "Auth succeeded with blank password for '%s' from %s",
+--- a/svr-runopts.c +--- a/src/svr-runopts.c
++++ b/svr-runopts.c ++++ b/src/svr-runopts.c
+@@ -77,6 +77,7 @@ static void printhelp(const char * progn +@@ -82,6 +82,7 @@ static void printhelp(const char * progn
+ "-s Disable password logins\n" + "-s Disable password logins\n"
+ "-g Disable password logins for root\n" + "-g Disable password logins for root\n"
+ "-B Allow blank password logins\n" + "-B Allow blank password logins\n"
++ "-f Failsafe mode: always allow password-less root login\n" ++ "-f Failsafe mode: always allow password-less root login\n"
+ "-t Enable two-factor authentication (both password and public key required)\n"
+ #endif + #endif
+ "-T Maximum authentication tries (default %d)\n" + "-T Maximum authentication tries (default %d)\n"
+ #if DROPBEAR_SVR_LOCALTCPFWD +@@ -166,6 +167,7 @@ void svr_getopts(int argc, char ** argv)
+@@ -144,6 +145,7 @@ void svr_getopts(int argc, char ** argv)
+ svr_opts.noauthpass = 0; + svr_opts.noauthpass = 0;
+ svr_opts.norootpass = 0; + svr_opts.norootpass = 0;
+ svr_opts.allowblankpass = 0; + svr_opts.allowblankpass = 0;
++ svr_opts.failsafe_mode = 0; ++ svr_opts.failsafe_mode = 0;
+ svr_opts.multiauthmethod = 0;
+ svr_opts.maxauthtries = MAX_AUTH_TRIES; + svr_opts.maxauthtries = MAX_AUTH_TRIES;
+ svr_opts.inetdmode = 0; + svr_opts.inetdmode = 0;
+ svr_opts.portcount = 0; +@@ -263,6 +265,9 @@ void svr_getopts(int argc, char ** argv)
+@@ -266,6 +268,9 @@ void svr_getopts(int argc, char ** argv) + case '2':
+ case 'B': + next = &reexec_fd_arg;
+ svr_opts.allowblankpass = 1;
+ break; + break;
++ case 'f': ++ case 'f':
++ svr_opts.failsafe_mode = 1; ++ svr_opts.failsafe_mode = 1;
++ break; ++ break;
+ #endif + #endif
+ case 'h': + case 'p':
+ printhelp(argv[0]); + nextisport = 1;
+--- a/runopts.h +--- a/src/runopts.h
++++ b/runopts.h ++++ b/src/runopts.h
+@@ -106,6 +106,8 @@ typedef struct svr_runopts { +@@ -110,6 +110,8 @@ typedef struct svr_runopts {
+ int allowblankpass; + int multiauthmethod;
+ unsigned int maxauthtries; + unsigned int maxauthtries;
+ +
++ int failsafe_mode; ++ int failsafe_mode;
......
From: Grische <github@grische.xyz>
Date: Sun, 18 Sep 2022 14:03:16 +0200
Subject: xrx200: migrate fritz7360-v2 using incorrect image
Migrate AVM FRITZ!Box 7360 v2 boards flashed with the incorrect v1 image to use
the newly added v2 target image during the next upgrade.
Using the v2 target image allows the boards to read the TFFS partition, which
is misaligned when using the v1 image.
Ref: https://github.com/freifunk-gluon/gluon/pull/2648
Co-authored-by: Jan-Niklas Burfeind <git@aiyionpri.me>
diff --git a/target/linux/lantiq/xrx200/base-files/lib/preinit/01_sysinfo.sh b/target/linux/lantiq/xrx200/base-files/lib/preinit/01_sysinfo.sh
new file mode 100644
index 0000000000000000000000000000000000000000..fab50d708e872f819c643cea79327e4f438de524
--- /dev/null
+++ b/target/linux/lantiq/xrx200/base-files/lib/preinit/01_sysinfo.sh
@@ -0,0 +1,62 @@
+set_sysinfo_xrx200_for_fritz7360_model() {
+ local board_name=$1
+ local model
+ local urlader_version urlader_memsize urlader_flashsize
+ local hexdump_format='4/1 "%02x""\n"'
+
+ # Values are based on urlader-parser-py
+ # https://github.com/grische/urlader-parser-py/blob/42970bf8dec7962317df4ff734c57ebf36df8905/parser.py#L77-L84
+ urlader_version="$(dd if=/dev/mtd0ro bs=1 skip=$((0x580+0x0)) count=4 | hexdump -e "${hexdump_format}")"
+ if [ "${urlader_version}" != "00000003" ]; then
+ logger -s -p warn -t sysinfo-xrx200 "unexpected urlader version found: ${urlader_version}"
+ return
+ fi
+
+ urlader_memsize="$(dd if=/dev/mtd0ro bs=1 skip=$((0x580+0x4)) count=4 | hexdump -e "${hexdump_format}")"
+ if [ "${urlader_memsize}" != "08000000" ]; then
+ logger -s -p warn -t sysinfo-xrx200 "unexpected memsize found: ${urlader_memsize}"
+ return
+ fi
+
+ urlader_flashsize="$(dd if=/dev/mtd0ro bs=1 skip=$((0x580+0x8)) count=4 | hexdump -e "${hexdump_format}")"
+ case "${urlader_flashsize}" in
+ "02000000") # 32MB
+ # see vr9_avm_fritz7360-v2.dts
+ board_name="avm,fritz7360-v2"
+ model="AVM FRITZ!Box 7360 V2"
+ ;;
+ "01000000") # 16MB
+ return
+ ;;
+ *)
+ logger -s -p warn -t sysinfo-xrx200 "unexpected flashsize found: ${urlader_flashsize}"
+ return
+ ;;
+ esac
+
+ logger -s -p notice -t sysinfo-xrx200 "detected ${board_name} from urlader partition /dev/mtd0ro. Enforcing model ${model}."
+ echo "${board_name}" > /tmp/sysinfo/board_name
+ echo "${model}" > /tmp/sysinfo/model
+}
+
+do_sysinfo_xrx200() {
+ local reported_board board_name model
+
+ [ -d /proc/device-tree ] || return
+ reported_board="$(strings /proc/device-tree/compatible | head -1)"
+
+ mkdir -p /tmp/sysinfo
+ # 7360 is notoriously known for not writing "v2" on their labels and many
+ # routers have flashed the wrong firmware with the wrong flash layout.
+ # We ensure that the underlying hardware is reported correctly, so that
+ # future upgrades will use the correct flash layout.
+ # Using 7360v2 hardware, an upgrade from a 7360v1/sl firmware to a 7360v2
+ # is working.
+ case "${reported_board}" in
+ avm,fritz7360sl)
+ set_sysinfo_xrx200_for_fritz7360_model "${reported_board}"
+ ;;
+ esac
+}
+
+boot_hook_add preinit_main do_sysinfo_xrx200
From: David Bauer <mail@david-bauer.net>
Date: Mon, 21 Aug 2023 23:16:14 +0200
Subject: ath79: don't create DIR-825 B1 factory image
Currently the build fails for the D-Link DIR-825 B1. THis is due to the
factory image being size-constrained. The sysupgrade image is not
affected, as OpenWrt now uses a concatenated firmware partition.
To newly install such a device, please use the latest OpenWrt 22.03
factory image and install a Gluon sysupgrade.
Signed-off-by: David Bauer <mail@david-bauer.net>
diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
index f264c14314ca862e39c71e821621a81f8f1957fa..d3e2a9ccd7ae3cb03e35bb4b68a2360bb4d4f84c 100644
--- a/target/linux/ath79/image/generic.mk
+++ b/target/linux/ath79/image/generic.mk
@@ -1073,11 +1073,6 @@ define Device/dlink_dir-825-b1
DEVICE_PACKAGES := kmod-usb-ohci kmod-usb2 kmod-usb-ledtrig-usbport \
kmod-leds-reset kmod-owl-loader kmod-switch-rtl8366s
IMAGE_SIZE := 7808k
- FACTORY_SIZE := 6144k
- IMAGES += factory.bin
- IMAGE/factory.bin = append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs | \
- pad-rootfs | check-size $$$$(FACTORY_SIZE) | pad-to $$$$(FACTORY_SIZE) | \
- append-string 01AP94-AR7161-RT-080619-00
endef
TARGET_DEVICES += dlink_dir-825-b1
From: David Bauer <mail@david-bauer.net>
Date: Thu, 18 Jan 2024 00:52:09 +0100
Subject: mac80211: silence warning for missing rate information
Silence warnings for missing rate information.
These warnings do not provide value. Instead, they might rotate more
crucial information out of the kernel message ringbuffer.
Link: https://github.com/freifunk-gluon/gluon/issues/3160
Signed-off-by: David Bauer <mail@david-bauer.net>
diff --git a/package/kernel/mac80211/patches/subsys/999-silence-missing-rate.patch b/package/kernel/mac80211/patches/subsys/999-silence-missing-rate.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a34455f78960ded59b60d3d9600823b39fc7b7a2
--- /dev/null
+++ b/package/kernel/mac80211/patches/subsys/999-silence-missing-rate.patch
@@ -0,0 +1,11 @@
+--- a/net/mac80211/mesh_hwmp.c
++++ b/net/mac80211/mesh_hwmp.c
+@@ -350,7 +350,7 @@ u32 airtime_link_metric_get(struct ieee8
+ return MAX_METRIC;
+
+ rate = ewma_mesh_tx_rate_avg_read(&sta->mesh->tx_rate_avg);
+- if (WARN_ON(!rate))
++ if (!rate)
+ return MAX_METRIC;
+
+ err = (fail_avg << ARITH_SHIFT) / 100;
From: Felix Fietkau <nbd@nbd.name>
Date: Fri, 9 Feb 2024 20:47:39 +0100
Subject: mac80211: add AQL support for broadcast/multicast packets
Should improve performance/reliability with lots of mcast packets
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 95e633efbd1b4ffbbfc2d8abba2b05291f6e9903)
diff --git a/package/kernel/mac80211/patches/subsys/330-mac80211-add-AQL-support-for-broadcast-packets.patch b/package/kernel/mac80211/patches/subsys/330-mac80211-add-AQL-support-for-broadcast-packets.patch
new file mode 100644
index 0000000000000000000000000000000000000000..5f6754e5024f90f7ba6833c3702fe3ce425c50bb
--- /dev/null
+++ b/package/kernel/mac80211/patches/subsys/330-mac80211-add-AQL-support-for-broadcast-packets.patch
@@ -0,0 +1,302 @@
+From: Felix Fietkau <nbd@nbd.name>
+Date: Fri, 9 Feb 2024 19:43:40 +0100
+Subject: [PATCH] mac80211: add AQL support for broadcast packets
+
+Excessive broadcast traffic with little competing unicast traffic can easily
+flood hardware queues, leading to throughput issues. Additionally, filling
+the hardware queues with too many packets breaks FQ for broadcast data.
+Fix this by enabling AQL for broadcast packets.
+
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+---
+
+--- a/include/net/cfg80211.h
++++ b/include/net/cfg80211.h
+@@ -3158,6 +3158,7 @@ enum wiphy_params_flags {
+ /* The per TXQ device queue limit in airtime */
+ #define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_L 5000
+ #define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_H 12000
++#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_BC 50000
+
+ /* The per interface airtime threshold to switch to lower queue limit */
+ #define IEEE80211_AQL_THRESHOLD 24000
+--- a/net/mac80211/debugfs.c
++++ b/net/mac80211/debugfs.c
+@@ -215,11 +215,13 @@ static ssize_t aql_pending_read(struct f
+ "VI %u us\n"
+ "BE %u us\n"
+ "BK %u us\n"
++ "BC/MC %u us\n"
+ "total %u us\n",
+ atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_VO]),
+ atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_VI]),
+ atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_BE]),
+ atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_BK]),
++ atomic_read(&local->aql_bc_pending_airtime),
+ atomic_read(&local->aql_total_pending_airtime));
+ return simple_read_from_buffer(user_buf, count, ppos,
+ buf, len);
+@@ -245,7 +247,8 @@ static ssize_t aql_txq_limit_read(struct
+ "VO %u %u\n"
+ "VI %u %u\n"
+ "BE %u %u\n"
+- "BK %u %u\n",
++ "BK %u %u\n"
++ "BC/MC %u\n",
+ local->aql_txq_limit_low[IEEE80211_AC_VO],
+ local->aql_txq_limit_high[IEEE80211_AC_VO],
+ local->aql_txq_limit_low[IEEE80211_AC_VI],
+@@ -253,7 +256,8 @@ static ssize_t aql_txq_limit_read(struct
+ local->aql_txq_limit_low[IEEE80211_AC_BE],
+ local->aql_txq_limit_high[IEEE80211_AC_BE],
+ local->aql_txq_limit_low[IEEE80211_AC_BK],
+- local->aql_txq_limit_high[IEEE80211_AC_BK]);
++ local->aql_txq_limit_high[IEEE80211_AC_BK],
++ local->aql_txq_limit_bc);
+ return simple_read_from_buffer(user_buf, count, ppos,
+ buf, len);
+ }
+@@ -279,6 +283,11 @@ static ssize_t aql_txq_limit_write(struc
+ else
+ buf[count] = '\0';
+
++ if (sscanf(buf, "mcast %u", &q_limit_low) == 1) {
++ local->aql_txq_limit_bc = q_limit_low;
++ return count;
++ }
++
+ if (sscanf(buf, "%u %u %u", &ac, &q_limit_low, &q_limit_high) != 3)
+ return -EINVAL;
+
+--- a/net/mac80211/ieee80211_i.h
++++ b/net/mac80211/ieee80211_i.h
+@@ -1300,10 +1300,12 @@ struct ieee80211_local {
+ u16 schedule_round[IEEE80211_NUM_ACS];
+
+ u16 airtime_flags;
++ u32 aql_txq_limit_bc;
+ u32 aql_txq_limit_low[IEEE80211_NUM_ACS];
+ u32 aql_txq_limit_high[IEEE80211_NUM_ACS];
+ u32 aql_threshold;
+ atomic_t aql_total_pending_airtime;
++ atomic_t aql_bc_pending_airtime;
+ atomic_t aql_ac_pending_airtime[IEEE80211_NUM_ACS];
+
+ const struct ieee80211_ops *ops;
+--- a/net/mac80211/main.c
++++ b/net/mac80211/main.c
+@@ -789,6 +789,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
+ spin_lock_init(&local->rx_path_lock);
+ spin_lock_init(&local->queue_stop_reason_lock);
+
++ local->aql_txq_limit_bc = IEEE80211_DEFAULT_AQL_TXQ_LIMIT_BC;
+ for (i = 0; i < IEEE80211_NUM_ACS; i++) {
+ INIT_LIST_HEAD(&local->active_txqs[i]);
+ spin_lock_init(&local->active_txq_lock[i]);
+--- a/net/mac80211/sta_info.c
++++ b/net/mac80211/sta_info.c
+@@ -2164,13 +2164,28 @@ EXPORT_SYMBOL(ieee80211_sta_recalc_aggre
+
+ void ieee80211_sta_update_pending_airtime(struct ieee80211_local *local,
+ struct sta_info *sta, u8 ac,
+- u16 tx_airtime, bool tx_completed)
++ u16 tx_airtime, bool tx_completed,
++ bool mcast)
+ {
+ int tx_pending;
+
+ if (!wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL))
+ return;
+
++ if (mcast) {
++ if (!tx_completed) {
++ atomic_add(tx_airtime, &local->aql_bc_pending_airtime);
++ return;
++ }
++
++ tx_pending = atomic_sub_return(tx_airtime,
++ &local->aql_bc_pending_airtime);
++ if (tx_pending < 0)
++ atomic_cmpxchg(&local->aql_bc_pending_airtime,
++ tx_pending, 0);
++ return;
++ }
++
+ if (!tx_completed) {
+ if (sta)
+ atomic_add(tx_airtime,
+--- a/net/mac80211/tx.c
++++ b/net/mac80211/tx.c
+@@ -2553,7 +2553,7 @@ static u16 ieee80211_store_ack_skb(struc
+
+ spin_lock_irqsave(&local->ack_status_lock, flags);
+ id = idr_alloc(&local->ack_status_frames, ack_skb,
+- 1, 0x2000, GFP_ATOMIC);
++ 1, 0x1000, GFP_ATOMIC);
+ spin_unlock_irqrestore(&local->ack_status_lock, flags);
+
+ if (id >= 0) {
+@@ -3957,20 +3957,20 @@ begin:
+ encap_out:
+ IEEE80211_SKB_CB(skb)->control.vif = vif;
+
+- if (tx.sta &&
+- wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL)) {
+- bool ampdu = txq->ac != IEEE80211_AC_VO;
++ if (wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL)) {
++ bool ampdu = txq->sta && txq->ac != IEEE80211_AC_VO;
+ u32 airtime;
+
+ airtime = ieee80211_calc_expected_tx_airtime(hw, vif, txq->sta,
+ skb->len, ampdu);
+- if (airtime) {
+- airtime = ieee80211_info_set_tx_time_est(info, airtime);
+- ieee80211_sta_update_pending_airtime(local, tx.sta,
+- txq->ac,
+- airtime,
+- false);
+- }
++ if (!airtime)
++ return skb;
++
++ airtime = ieee80211_info_set_tx_time_est(info, airtime);
++ info->tx_time_mc = !tx.sta;
++ ieee80211_sta_update_pending_airtime(local, tx.sta, txq->ac,
++ airtime, false,
++ info->tx_time_mc);
+ }
+
+ return skb;
+@@ -4025,6 +4025,7 @@ struct ieee80211_txq *ieee80211_next_txq
+ struct ieee80211_txq *ret = NULL;
+ struct txq_info *txqi = NULL, *head = NULL;
+ bool found_eligible_txq = false;
++ bool aql_check;
+
+ spin_lock_bh(&local->active_txq_lock[ac]);
+
+@@ -4048,26 +4049,26 @@ struct ieee80211_txq *ieee80211_next_txq
+ if (!head)
+ head = txqi;
+
++ aql_check = ieee80211_txq_airtime_check(hw, &txqi->txq);
++ if (aql_check)
++ found_eligible_txq = true;
++
+ if (txqi->txq.sta) {
+ struct sta_info *sta = container_of(txqi->txq.sta,
+ struct sta_info, sta);
+- bool aql_check = ieee80211_txq_airtime_check(hw, &txqi->txq);
+- s32 deficit = ieee80211_sta_deficit(sta, txqi->txq.ac);
+-
+- if (aql_check)
+- found_eligible_txq = true;
+-
+- if (deficit < 0)
++ if (ieee80211_sta_deficit(sta, txqi->txq.ac) < 0) {
+ sta->airtime[txqi->txq.ac].deficit +=
+ sta->airtime_weight << AIRTIME_QUANTUM_SHIFT;
+-
+- if (deficit < 0 || !aql_check) {
+- list_move_tail(&txqi->schedule_order,
+- &local->active_txqs[txqi->txq.ac]);
+- goto begin;
++ aql_check = false;
+ }
+ }
+
++ if (!aql_check) {
++ list_move_tail(&txqi->schedule_order,
++ &local->active_txqs[txqi->txq.ac]);
++ goto begin;
++ }
++
+ if (txqi->schedule_round == local->schedule_round[ac])
+ goto out;
+
+@@ -4132,7 +4133,8 @@ bool ieee80211_txq_airtime_check(struct
+ return true;
+
+ if (!txq->sta)
+- return true;
++ return atomic_read(&local->aql_bc_pending_airtime) <
++ local->aql_txq_limit_bc;
+
+ if (unlikely(txq->tid == IEEE80211_NUM_TIDS))
+ return true;
+@@ -4181,15 +4183,15 @@ bool ieee80211_txq_may_transmit(struct i
+
+ spin_lock_bh(&local->active_txq_lock[ac]);
+
+- if (!txqi->txq.sta)
+- goto out;
+-
+ if (list_empty(&txqi->schedule_order))
+ goto out;
+
+ if (!ieee80211_txq_schedule_airtime_check(local, ac))
+ goto out;
+
++ if (!txqi->txq.sta)
++ goto out;
++
+ list_for_each_entry_safe(iter, tmp, &local->active_txqs[ac],
+ schedule_order) {
+ if (iter == txqi)
+--- a/include/net/mac80211.h
++++ b/include/net/mac80211.h
+@@ -1092,6 +1092,7 @@ ieee80211_rate_get_vht_nss(const struct
+ * link the frame will be transmitted on
+ * @hw_queue: HW queue to put the frame on, skb_get_queue_mapping() gives the AC
+ * @ack_frame_id: internal frame ID for TX status, used internally
++ * @tx_time_mc: TX time is for a multicast packet
+ * @tx_time_est: TX time estimate in units of 4us, used internally
+ * @control: union part for control data
+ * @control.rates: TX rates array to try
+@@ -1131,8 +1132,9 @@ struct ieee80211_tx_info {
+ /* common information */
+ u32 flags;
+ u32 band:3,
+- ack_frame_id:13,
++ ack_frame_id:12,
+ hw_queue:4,
++ tx_time_mc:1,
+ tx_time_est:10;
+ /* 2 free bits */
+
+--- a/net/mac80211/sta_info.h
++++ b/net/mac80211/sta_info.h
+@@ -147,7 +147,8 @@ struct airtime_info {
+
+ void ieee80211_sta_update_pending_airtime(struct ieee80211_local *local,
+ struct sta_info *sta, u8 ac,
+- u16 tx_airtime, bool tx_completed);
++ u16 tx_airtime, bool tx_completed,
++ bool mcast);
+
+ struct sta_info;
+
+--- a/net/mac80211/status.c
++++ b/net/mac80211/status.c
+@@ -716,7 +716,7 @@ static void ieee80211_report_used_skb(st
+ ieee80211_sta_update_pending_airtime(local, sta,
+ skb_get_queue_mapping(skb),
+ tx_time_est,
+- true);
++ true, info->tx_time_mc);
+ rcu_read_unlock();
+ }
+
+@@ -1127,10 +1127,11 @@ void ieee80211_tx_status_ext(struct ieee
+ /* Do this here to avoid the expensive lookup of the sta
+ * in ieee80211_report_used_skb().
+ */
++ bool mcast = IEEE80211_SKB_CB(skb)->tx_time_mc;
+ ieee80211_sta_update_pending_airtime(local, sta,
+ skb_get_queue_mapping(skb),
+ tx_time_est,
+- true);
++ true, mcast);
+ ieee80211_info_set_tx_time_est(IEEE80211_SKB_CB(skb), 0);
+ }
+
...@@ -8,10 +8,10 @@ https://github.com/openwrt/packages/issues/8238 ...@@ -8,10 +8,10 @@ https://github.com/openwrt/packages/issues/8238
https://github.com/openwrt/packages/pull/17274 https://github.com/openwrt/packages/pull/17274
diff --git a/lang/perl/Makefile b/lang/perl/Makefile diff --git a/lang/perl/Makefile b/lang/perl/Makefile
index 2763de2777f8e3e60db9917ad64da7d5d127ba8f..7468e6db8ea561a6285b77990c8786ef3d46967f 100644 index 6a6dd5ea86798e7e95e3657a94cca829dbd0924b..a0ffd0e982b59b871e683f745231579404a206c3 100644
--- a/lang/perl/Makefile --- a/lang/perl/Makefile
+++ b/lang/perl/Makefile +++ b/lang/perl/Makefile
@@ -34,8 +34,8 @@ PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_NAME)-$(PKG_VERSION) @@ -27,8 +27,8 @@ PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_NAME)-$(PKG_VERSION)
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/$(PKG_NAME)-$(PKG_VERSION) HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/$(PKG_NAME)-$(PKG_VERSION)
PKG_INSTALL:=1 PKG_INSTALL:=1
PKG_BUILD_DEPENDS:=perl/host PKG_BUILD_DEPENDS:=perl/host
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment