diff --git a/feeds.conf.default b/feeds.conf.default index fc679335e0e47f..521333f7de9dc5 100644 --- a/feeds.conf.default +++ b/feeds.conf.default @@ -1,5 +1,5 @@ src-git packages https://git.openwrt.org/feed/packages.git -src-git luci https://git.openwrt.org/project/luci.git +src-git luci https://github.com/danpawlik/luci.git;14be src-git routing https://git.openwrt.org/feed/routing.git src-git telephony https://git.openwrt.org/feed/telephony.git #src-git video https://github.com/openwrt/video.git diff --git a/package/kernel/mac80211/ath.mk b/package/kernel/mac80211/ath.mk index eecaef4588871e..5b13b6aac4ad99 100644 --- a/package/kernel/mac80211/ath.mk +++ b/package/kernel/mac80211/ath.mk @@ -362,7 +362,7 @@ define KernelPackage/ath12k URL:=https://wireless.wiki.kernel.org/en/users/drivers/ath12k DEPENDS+= @PCI_SUPPORT +kmod-ath +@DRIVER_11AC_SUPPORT +@DRIVER_11AX_SUPPORT \ +kmod-crypto-michael-mic +kmod-qrtr-mhi \ - +kmod-qcom-qmi-helpers + +kmod-qcom-qmi-helpers +@DRIVER_11BE_SUPPORT FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath12k/ath12k.ko AUTOLOAD:=$(call AutoProbe,ath12k) endef diff --git a/package/kernel/mt76/Makefile b/package/kernel/mt76/Makefile index 4d808c96b33c8b..00f9b1d315893d 100644 --- a/package/kernel/mt76/Makefile +++ b/package/kernel/mt76/Makefile @@ -8,9 +8,9 @@ PKG_LICENSE_FILES:= PKG_SOURCE_URL:=https://github.com/openwrt/mt76 PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2024-09-05 -PKG_SOURCE_VERSION:=65cc3daf2a332cc658e9f7438cdadde4392e672e -PKG_MIRROR_HASH:=c29c4f883051a6360119156a03e010ac11573011b23d9e873f83c720600970e7 +PKG_SOURCE_DATE:=2024-09-27 +PKG_SOURCE_VERSION:=addfbd141863a83ddf1dff60e1d85ff553b2b61e +# PKG_MIRROR_HASH:=c29c4f883051a6360119156a03e010ac11573011b23d9e873f83c720600970e7 PKG_MAINTAINER:=Felix Fietkau PKG_USE_NINJA:=0 @@ -318,7 +318,8 @@ endef define KernelPackage/mt7996e $(KernelPackage/mt76-default) TITLE:=MediaTek MT7996E wireless driver - DEPENDS+=@PCI_SUPPORT +kmod-mt76-connac +kmod-hwmon-core +@DRIVER_11AX_SUPPORT +@KERNEL_RELAY + DEPENDS+=@PCI_SUPPORT +kmod-mt76-connac +kmod-hwmon-core +@DRIVER_11AX_SUPPORT \ + +@KERNEL_RELAY +@DRIVER_11BE_SUPPORT FILES:= $(PKG_BUILD_DIR)/mt7996/mt7996e.ko AUTOLOAD:=$(call AutoProbe,mt7996e) endef @@ -339,7 +340,7 @@ define KernelPackage/mt7925-common $(KernelPackage/mt76-default) TITLE:=MediaTek MT7925 wireless driver common code HIDDEN:=1 - DEPENDS+=+kmod-mt792x-common +@DRIVER_11AX_SUPPORT +kmod-hwmon-core + DEPENDS+=+kmod-mt792x-common +@DRIVER_11AX_SUPPORT +kmod-hwmon-core +@DRIVER_11BE_SUPPORT FILES:= $(PKG_BUILD_DIR)/mt7925/mt7925-common.ko endef diff --git a/package/network/config/wifi-scripts/files/lib/netifd/wireless/mac80211.sh b/package/network/config/wifi-scripts/files/lib/netifd/wireless/mac80211.sh index 11b11c411f4358..23e557105bdbdc 100755 --- a/package/network/config/wifi-scripts/files/lib/netifd/wireless/mac80211.sh +++ b/package/network/config/wifi-scripts/files/lib/netifd/wireless/mac80211.sh @@ -159,77 +159,79 @@ mac80211_hostapd_setup_base() { chan_ofs=0 [ "$band" = "6g" ] && chan_ofs=1 - ieee80211n=1 - ht_capab= - case "$htmode" in - VHT20|HT20|HE20) ;; - HT40*|VHT40|VHT80|VHT160|HE40|HE80|HE160) - case "$hwmode" in - a) - case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in - 1) ht_capab="[HT40+]";; - 0) ht_capab="[HT40-]";; - esac - ;; - *) - case "$htmode" in - HT40+) ht_capab="[HT40+]";; - HT40-) ht_capab="[HT40-]";; - *) - if [ "$channel" -lt 7 ]; then - ht_capab="[HT40+]" - else - ht_capab="[HT40-]" - fi - ;; - esac - ;; - esac - [ "$auto_channel" -gt 0 ] && ht_capab="[HT40+]" - ;; - *) ieee80211n= ;; - esac - - [ -n "$ieee80211n" ] && { - append base_cfg "ieee80211n=1" "$N" - - set_default ht_coex 0 - append base_cfg "ht_coex=$ht_coex" "$N" - - json_get_vars \ - ldpc:1 \ - greenfield:0 \ - short_gi_20:1 \ - short_gi_40:1 \ - tx_stbc:1 \ - rx_stbc:3 \ - max_amsdu:1 \ - dsss_cck_40:1 - - ht_cap_mask=0 - for cap in $(iw phy "$phy" info | grep 'Capabilities:' | cut -d: -f2); do - ht_cap_mask="$(($ht_cap_mask | $cap))" - done + if [ "$band" != "6g" ]; then + ieee80211n=1 + ht_capab= + case "$htmode" in + VHT20|HT20|HE20|EHT20) ;; + HT40*|VHT40|VHT80|VHT160|HE40|HE80|HE160|EHT40|EHT80|EHT160) + case "$hwmode" in + a) + case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in + 1) ht_capab="[HT40+]";; + 0) ht_capab="[HT40-]";; + esac + ;; + *) + case "$htmode" in + HT40+) ht_capab="[HT40+]";; + HT40-) ht_capab="[HT40-]";; + *) + if [ "$channel" -lt 7 ]; then + ht_capab="[HT40+]" + else + ht_capab="[HT40-]" + fi + ;; + esac + ;; + esac + [ "$auto_channel" -gt 0 ] && ht_capab="[HT40+]" + ;; + *) ieee80211n= ;; + esac - cap_rx_stbc=$((($ht_cap_mask >> 8) & 3)) - [ "$rx_stbc" -lt "$cap_rx_stbc" ] && cap_rx_stbc="$rx_stbc" - ht_cap_mask="$(( ($ht_cap_mask & ~(0x300)) | ($cap_rx_stbc << 8) ))" - - mac80211_add_capabilities ht_capab_flags $ht_cap_mask \ - LDPC:0x1::$ldpc \ - GF:0x10::$greenfield \ - SHORT-GI-20:0x20::$short_gi_20 \ - SHORT-GI-40:0x40::$short_gi_40 \ - TX-STBC:0x80::$tx_stbc \ - RX-STBC1:0x300:0x100:1 \ - RX-STBC12:0x300:0x200:1 \ - RX-STBC123:0x300:0x300:1 \ - MAX-AMSDU-7935:0x800::$max_amsdu \ - DSSS_CCK-40:0x1000::$dsss_cck_40 - - ht_capab="$ht_capab$ht_capab_flags" - [ -n "$ht_capab" ] && append base_cfg "ht_capab=$ht_capab" "$N" - } + [ -n "$ieee80211n" ] && { + append base_cfg "ieee80211n=1" "$N" + + set_default ht_coex 0 + append base_cfg "ht_coex=$ht_coex" "$N" + + json_get_vars \ + ldpc:1 \ + greenfield:0 \ + short_gi_20:1 \ + short_gi_40:1 \ + tx_stbc:1 \ + rx_stbc:3 \ + max_amsdu:1 \ + dsss_cck_40:1 + + ht_cap_mask=0 + for cap in $(iw phy "$phy" info | grep 'Capabilities:' | cut -d: -f2); do + ht_cap_mask="$(($ht_cap_mask | $cap))" + done + + cap_rx_stbc=$((($ht_cap_mask >> 8) & 3)) + [ "$rx_stbc" -lt "$cap_rx_stbc" ] && cap_rx_stbc="$rx_stbc" + ht_cap_mask="$(( ($ht_cap_mask & ~(0x300)) | ($cap_rx_stbc << 8) ))" + + mac80211_add_capabilities ht_capab_flags $ht_cap_mask \ + LDPC:0x1::$ldpc \ + GF:0x10::$greenfield \ + SHORT-GI-20:0x20::$short_gi_20 \ + SHORT-GI-40:0x40::$short_gi_40 \ + TX-STBC:0x80::$tx_stbc \ + RX-STBC1:0x300:0x100:1 \ + RX-STBC12:0x300:0x200:1 \ + RX-STBC123:0x300:0x300:1 \ + MAX-AMSDU-7935:0x800::$max_amsdu \ + DSSS_CCK-40:0x1000::$dsss_cck_40 + + ht_capab="$ht_capab$ht_capab_flags" + [ -n "$ht_capab" ] && append base_cfg "ht_capab=$ht_capab" "$N" + } + fi # 802.11ac enable_ac=0 @@ -238,8 +240,8 @@ mac80211_hostapd_setup_base() { idx="$channel" case "$htmode" in - VHT20|HE20) enable_ac=1;; - VHT40|HE40) + VHT20|HE20|EHT20) enable_ac=1;; + VHT40|HE40|EHT40) case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in 1) idx=$(($channel + 2));; 0) idx=$(($channel - 2));; @@ -247,7 +249,7 @@ mac80211_hostapd_setup_base() { enable_ac=1 vht_center_seg0=$idx ;; - VHT80|HE80) + VHT80|HE80|EHT80) case "$(( (($channel / 4) + $chan_ofs) % 4 ))" in 1) idx=$(($channel + 6));; 2) idx=$(($channel + 2));; @@ -258,7 +260,7 @@ mac80211_hostapd_setup_base() { vht_oper_chwidth=1 vht_center_seg0=$idx ;; - VHT160|HE160) + VHT160|HE160|EHT160|EHT320) if [ "$band" = "6g" ]; then case "$channel" in 1|5|9|13|17|21|25|29) idx=15;; @@ -286,15 +288,32 @@ mac80211_hostapd_setup_base() { [ "$background_radar" -eq 1 ] && append base_cfg "enable_background_radar=1" "$N" } + + eht_oper_chwidth=$vht_oper_chwidth + eht_center_seg0=$vht_center_seg0 + [ "$band" = "6g" ] && { op_class= case "$htmode" in - HE20) op_class=131;; - HE*) op_class=$((132 + $vht_oper_chwidth)) + HE20|EHT20) op_class=131;; + EHT320) + case "$channel" in + 1|5|9|13|17|21|25|29|33|37|41|45|49|53|57|61) idx=31;; + 65|69|73|77|81|85|89|93|97|101|105|109|113|117|121|125) idx=95;; + 129|133|137|141|145|149|153|157|161|165|169|173|177|181|185|189) idx=159;; + 193|197|201|205|209|213|217|221) idx=191;; + esac + + op_class=137 + eht_center_seg0=$idx + eht_oper_chwidth=9 + ;; + HE*|EHT*) op_class=$((132 + $vht_oper_chwidth));; esac [ -n "$op_class" ] && append base_cfg "op_class=$op_class" "$N" } [ "$hwmode" = "a" ] || enable_ac=0 + [ "$band" = "6g" ] && enable_ac=0 if [ "$enable_ac" != "0" ]; then json_get_vars \ @@ -417,8 +436,10 @@ mac80211_hostapd_setup_base() { # 802.11ax enable_ax=0 + enable_be=0 case "$htmode" in HE*) enable_ax=1 ;; + EHT*) enable_ax=1; enable_be=1 ;; esac if [ "$enable_ax" != "0" ]; then @@ -492,6 +513,14 @@ mac80211_hostapd_setup_base() { append base_cfg "he_mu_edca_ac_vo_timer=255" "$N" fi + if [ "$enable_be" != "0" ]; then + append base_cfg "ieee80211be=1" "$N" + [ "$hwmode" = "a" ] && { + append base_cfg "eht_oper_chwidth=$eht_oper_chwidth" "$N" + append base_cfg "eht_oper_centr_freq_seg0_idx=$eht_center_seg0" "$N" + } + fi + hostapd_prepare_device_config "$hostapd_conf_file" nl80211 cat >> "$hostapd_conf_file" < 0) band_info.vht = true; let he_phy_cap = 0; + let eht_phy_cap = 0; for (let ift in band.iftype_data) { if (!ift.he_cap_phy) @@ -117,7 +118,12 @@ function wiphy_detect() { band_info.he = true; he_phy_cap |= ift.he_cap_phy[0]; - /* TODO: EHT */ + + if (!ift.eht_cap_phy) + continue; + + band_info.eht = true; + eht_phy_cap |= ift.eht_cap_phy[0]; } if (band_name != "2G" && @@ -138,14 +144,19 @@ function wiphy_detect() { push(modes, "VHT20"); if (band_info.he) push(modes, "HE20"); + if (band_info.eht) + push(modes, "EHT20"); if (band.ht_capa & 0x2) { push(modes, "HT40"); if (band_info.vht) push(modes, "VHT40") } - if (he_phy_cap & 0x2) + if (he_phy_cap & 2) push(modes, "HE40"); + if (eht_phy_cap && he_phy_cap & 2) + push(modes, "EHT40"); + for (let freq in band.freqs) { if (freq.disabled) continue; @@ -158,14 +169,26 @@ function wiphy_detect() { if (band_name == "2G") continue; + + if (he_phy_cap & 4) + push(modes, "HE40"); + if (eht_phy_cap && he_phy_cap & 4) + push(modes, "EHT40"); if (band_info.vht) push(modes, "VHT80"); if (he_phy_cap & 4) push(modes, "HE80"); + if (eht_phy_cap && he_phy_cap & 4) + push(modes, "EHT80"); if ((band.vht_capa >> 2) & 0x3) push(modes, "VHT160"); if (he_phy_cap & 0x18) push(modes, "HE160"); + if (eht_phy_cap && he_phy_cap & 0x18) + push(modes, "EHT160"); + + if (eht_phy_cap & 2) + push(modes, "ETH320"); } let entry = wiphy_get_entry(name, path); diff --git a/package/network/services/hostapd/Config.in b/package/network/services/hostapd/Config.in index 1fff4f8acd530b..742cd78a14627b 100644 --- a/package/network/services/hostapd/Config.in +++ b/package/network/services/hostapd/Config.in @@ -40,6 +40,10 @@ config DRIVER_11AX_SUPPORT default n select WPA_MBO_SUPPORT +config DRIVER_11BE_SUPPORT + bool + default n + config WPA_ENABLE_WEP bool "Enable support for unsecure and obsolete WEP" depends on PACKAGE_hostapd-common diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile index 1c0b6548662e37..0e3396262d0c13 100644 --- a/package/network/services/hostapd/Makefile +++ b/package/network/services/hostapd/Makefile @@ -27,6 +27,7 @@ PKG_CONFIG_DEPENDS:= \ CONFIG_WPA_RFKILL_SUPPORT \ CONFIG_DRIVER_11AC_SUPPORT \ CONFIG_DRIVER_11AX_SUPPORT \ + CONFIG_DRIVER_11BE_SUPPORT \ CONFIG_WPA_ENABLE_WEP PKG_BUILD_FLAGS:=gc-sections lto @@ -79,6 +80,10 @@ ifneq ($(CONFIG_DRIVER_11AX_SUPPORT),) HOSTAPD_IEEE80211AX:=y endif +ifneq ($(CONFIG_DRIVER_11BE_SUPPORT),) + HOSTAPD_IEEE80211BE:=y +endif + CORE_DEPENDS = +ucode +libubus +libucode +ucode-mod-fs +ucode-mod-nl80211 +ucode-mod-rtnl +ucode-mod-ubus +ucode-mod-uloop +libblobmsg-json +libudebug OPENSSL_DEPENDS = +PACKAGE_$(1):libopenssl +PACKAGE_$(1):libopenssl-legacy @@ -86,6 +91,7 @@ DRIVER_MAKEOPTS= \ CONFIG_ACS=y CONFIG_DRIVER_NL80211=y \ CONFIG_IEEE80211AC=$(HOSTAPD_IEEE80211AC) \ CONFIG_IEEE80211AX=$(HOSTAPD_IEEE80211AX) \ + CONFIG_IEEE80211BE=$(HOSTAPD_IEEE80211BE) \ CONFIG_MBO=$(CONFIG_WPA_MBO_SUPPORT) \ CONFIG_UCODE=y CONFIG_APUP=y diff --git a/package/network/services/hostapd/patches/803-hostapd-fix-80211be-build.patch b/package/network/services/hostapd/patches/803-hostapd-fix-80211be-build.patch new file mode 100644 index 00000000000000..55c6e635813c9d --- /dev/null +++ b/package/network/services/hostapd/patches/803-hostapd-fix-80211be-build.patch @@ -0,0 +1,53 @@ +--- a/src/ap/sta_info.c ++++ b/src/ap/sta_info.c +@@ -1836,3 +1836,22 @@ void ap_sta_free_sta_profile(struct mld_ + } + } + #endif /* CONFIG_IEEE80211BE */ ++ ++bool ap_sta_is_mld(struct hostapd_data *hapd, ++ struct sta_info *sta) ++{ ++#ifdef CONFIG_IEEE80211BE ++ return hapd->conf->mld_ap && sta && sta->mld_info.mld_sta; ++#else /* CONFIG_IEEE80211BE */ ++ return false; ++#endif /* CONFIG_IEEE80211BE */ ++} ++ ++void ap_sta_set_mld(struct sta_info *sta, bool mld) ++{ ++#ifdef CONFIG_IEEE80211BE ++ if (sta) ++ sta->mld_info.mld_sta = mld; ++#endif /* CONFIG_IEEE80211BE */ ++} ++ +--- a/src/ap/sta_info.h ++++ b/src/ap/sta_info.h +@@ -417,23 +417,8 @@ int ap_sta_re_add(struct hostapd_data *h + + void ap_free_sta_pasn(struct hostapd_data *hapd, struct sta_info *sta); + +-static inline bool ap_sta_is_mld(struct hostapd_data *hapd, +- struct sta_info *sta) +-{ +-#ifdef CONFIG_IEEE80211BE +- return hapd->conf->mld_ap && sta && sta->mld_info.mld_sta; +-#else /* CONFIG_IEEE80211BE */ +- return false; +-#endif /* CONFIG_IEEE80211BE */ +-} +- +-static inline void ap_sta_set_mld(struct sta_info *sta, bool mld) +-{ +-#ifdef CONFIG_IEEE80211BE +- if (sta) +- sta->mld_info.mld_sta = mld; +-#endif /* CONFIG_IEEE80211BE */ +-} ++bool ap_sta_is_mld(struct hostapd_data *hapd, struct sta_info *sta); ++void ap_sta_set_mld(struct sta_info *sta, bool mld); + + void ap_sta_free_sta_profile(struct mld_info *info); + diff --git a/package/network/services/hostapd/src/src/utils/build_features.h b/package/network/services/hostapd/src/src/utils/build_features.h index 553769ecebc84c..cc8831535c68da 100644 --- a/package/network/services/hostapd/src/src/utils/build_features.h +++ b/package/network/services/hostapd/src/src/utils/build_features.h @@ -15,6 +15,10 @@ static inline int has_feature(const char *feat) if (!strcmp(feat, "11ax")) return 1; #endif +#ifdef CONFIG_IEEE80211BE + if (!strcmp(feat, "11be")) + return 1; +#endif #ifdef CONFIG_IEEE80211R if (!strcmp(feat, "11r")) return 1; diff --git a/package/network/utils/iwinfo/Makefile b/package/network/utils/iwinfo/Makefile index 53f8d44f469200..fe9b706f6a88c9 100644 --- a/package/network/utils/iwinfo/Makefile +++ b/package/network/utils/iwinfo/Makefile @@ -10,10 +10,11 @@ PKG_NAME:=libiwinfo PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL=$(PROJECT_GIT)/project/iwinfo.git +# PKG_SOURCE_URL=$(PROJECT_GIT)/project/iwinfo.git +PKG_SOURCE_URL=https://github.com/danpawlik/iwinfo PKG_SOURCE_DATE:=2024-09-17 -PKG_SOURCE_VERSION:=268a662421fa03798881b34658a3d6bd6a30d97d -PKG_MIRROR_HASH:=2ea07521149fb45665184f80ee99595c8b4f06aaf2c1004b74c944da632778de +PKG_SOURCE_VERSION:=7eed433cd221c425c45f5a4e78b077d2d084dbd9 +# PKG_MIRROR_HASH:=2ea07521149fb45665184f80ee99595c8b4f06aaf2c1004b74c944da632778de PKG_MAINTAINER:=Jo-Philipp Wich PKG_LICENSE:=GPL-2.0 diff --git a/package/system/rpcd/Makefile b/package/system/rpcd/Makefile index da031db8498d0f..965681f99cdf8d 100644 --- a/package/system/rpcd/Makefile +++ b/package/system/rpcd/Makefile @@ -11,8 +11,9 @@ PKG_NAME:=rpcd PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL=$(PROJECT_GIT)/project/rpcd.git -PKG_MIRROR_HASH:=67b2cb985d8712a3e5a17ebf8c74fd35d553c8f9a4197616f9a3649a8740cc33 +# PKG_SOURCE_URL=$(PROJECT_GIT)/project/rpcd.git +PKG_SOURCE_URL=https://github.com/danpawlik/rpcd +# PKG_MIRROR_HASH:=67b2cb985d8712a3e5a17ebf8c74fd35d553c8f9a4197616f9a3649a8740cc33 PKG_SOURCE_DATE:=2024-09-17 PKG_SOURCE_VERSION:=9f4b86e70352ab9ca6aa272d096419acc53e2390 PKG_MAINTAINER:=Jo-Philipp Wich diff --git a/target/linux/mediatek/image/filogic.mk b/target/linux/mediatek/image/filogic.mk index bd8fcb16b644c0..5282bcdc5af671 100644 --- a/target/linux/mediatek/image/filogic.mk +++ b/target/linux/mediatek/image/filogic.mk @@ -373,7 +373,7 @@ define Device/bananapi_bpi-r4-common DEVICE_DTS_LOADADDR := 0x45f00000 DEVICE_DTS_OVERLAY:= mt7988a-bananapi-bpi-r4-emmc mt7988a-bananapi-bpi-r4-rtc mt7988a-bananapi-bpi-r4-sd mt7988a-bananapi-bpi-r4-wifi-mt7996a DEVICE_DTC_FLAGS := --pad 4096 - DEVICE_PACKAGES := kmod-hwmon-pwmfan kmod-i2c-mux-pca954x kmod-eeprom-at24 kmod-mt7996-firmware \ + DEVICE_PACKAGES := kmod-hwmon-pwmfan kmod-thermal kmod-i2c-mux-pca954x kmod-eeprom-at24 kmod-mt7996-firmware \ kmod-rtc-pcf8563 kmod-sfp kmod-usb3 e2fsprogs f2fsck mkf2fs IMAGES := sysupgrade.itb KERNEL_LOADADDR := 0x46000000