diff --git a/.github/update.log b/.github/update.log index b80d86a9d8..9c0904267c 100644 --- a/.github/update.log +++ b/.github/update.log @@ -888,3 +888,4 @@ Update On Thu Jan 16 19:32:38 CET 2025 Update On Fri Jan 17 19:33:42 CET 2025 Update On Sat Jan 18 19:31:11 CET 2025 Update On Sun Jan 19 19:31:01 CET 2025 +Update On Mon Jan 20 19:32:40 CET 2025 diff --git a/clash-meta/adapter/outbound/base.go b/clash-meta/adapter/outbound/base.go index dd226f74a7..56bed9d53e 100644 --- a/clash-meta/adapter/outbound/base.go +++ b/clash-meta/adapter/outbound/base.go @@ -153,11 +153,11 @@ func (b *Base) DialOptions(opts ...dialer.Option) []dialer.Option { } type BasicOption struct { - TFO bool `proxy:"tfo,omitempty" group:"tfo,omitempty"` - MPTCP bool `proxy:"mptcp,omitempty" group:"mptcp,omitempty"` + TFO bool `proxy:"tfo,omitempty"` + MPTCP bool `proxy:"mptcp,omitempty"` Interface string `proxy:"interface-name,omitempty" group:"interface-name,omitempty"` RoutingMark int `proxy:"routing-mark,omitempty" group:"routing-mark,omitempty"` - IPVersion string `proxy:"ip-version,omitempty" group:"ip-version,omitempty"` + IPVersion string `proxy:"ip-version,omitempty"` DialerProxy string `proxy:"dialer-proxy,omitempty"` // don't apply this option into groups, but can set a group name in a proxy } diff --git a/clash-meta/adapter/outboundgroup/groupbase.go b/clash-meta/adapter/outboundgroup/groupbase.go index 69fbb61799..f2a567ae8c 100644 --- a/clash-meta/adapter/outboundgroup/groupbase.go +++ b/clash-meta/adapter/outboundgroup/groupbase.go @@ -46,6 +46,13 @@ type GroupBaseOption struct { } func NewGroupBase(opt GroupBaseOption) *GroupBase { + if opt.RoutingMark != 0 { + log.Warnln("The group [%s] with routing-mark configuration is deprecated, please set it directly on the proxy instead", opt.Name) + } + if opt.Interface != "" { + log.Warnln("The group [%s] with interface-name configuration is deprecated, please set it directly on the proxy instead", opt.Name) + } + var excludeFilterReg *regexp2.Regexp if opt.excludeFilter != "" { excludeFilterReg = regexp2.MustCompile(opt.excludeFilter, regexp2.None) diff --git a/clash-meta/component/ca/config.go b/clash-meta/component/ca/config.go index 9d002db639..0a76189270 100644 --- a/clash-meta/component/ca/config.go +++ b/clash-meta/component/ca/config.go @@ -17,7 +17,6 @@ import ( C "github.com/metacubex/mihomo/constant" ) -var trustCerts []*x509.Certificate var globalCertPool *x509.CertPool var mutex sync.RWMutex var errNotMatch = errors.New("certificate fingerprints do not match") @@ -30,11 +29,19 @@ var DisableSystemCa, _ = strconv.ParseBool(os.Getenv("DISABLE_SYSTEM_CA")) func AddCertificate(certificate string) error { mutex.Lock() defer mutex.Unlock() + if certificate == "" { return fmt.Errorf("certificate is empty") } - if cert, err := x509.ParseCertificate([]byte(certificate)); err == nil { - trustCerts = append(trustCerts, cert) + + if globalCertPool == nil { + initializeCertPool() + } + + if globalCertPool.AppendCertsFromPEM([]byte(certificate)) { + return nil + } else if cert, err := x509.ParseCertificate([]byte(certificate)); err == nil { + globalCertPool.AddCert(cert) return nil } else { return fmt.Errorf("add certificate failed") @@ -51,9 +58,6 @@ func initializeCertPool() { globalCertPool = x509.NewCertPool() } } - for _, cert := range trustCerts { - globalCertPool.AddCert(cert) - } if !DisableEmbedCa { globalCertPool.AppendCertsFromPEM(_CaCertificates) } @@ -62,7 +66,6 @@ func initializeCertPool() { func ResetCertificate() { mutex.Lock() defer mutex.Unlock() - trustCerts = nil initializeCertPool() } diff --git a/clash-nyanpasu/backend/Cargo.lock b/clash-nyanpasu/backend/Cargo.lock index 699ecfabe5..3886ee4d98 100644 --- a/clash-nyanpasu/backend/Cargo.lock +++ b/clash-nyanpasu/backend/Cargo.lock @@ -963,7 +963,7 @@ dependencies = [ "boa_interner", "boa_macros", "boa_string", - "indexmap 2.7.0", + "indexmap 2.7.1", "num-bigint", "rustc-hash 2.1.0", ] @@ -989,7 +989,7 @@ dependencies = [ "fast-float2", "hashbrown 0.15.2", "icu_normalizer", - "indexmap 2.7.0", + "indexmap 2.7.1", "intrusive-collections", "itertools 0.13.0", "num-bigint", @@ -1035,7 +1035,7 @@ dependencies = [ "boa_gc", "boa_macros", "hashbrown 0.15.2", - "indexmap 2.7.0", + "indexmap 2.7.1", "once_cell", "phf 0.11.3", "rustc-hash 2.1.0", @@ -1293,7 +1293,7 @@ checksum = "8769706aad5d996120af43197bf46ef6ad0fda35216b4505f926a365a232d924" dependencies = [ "camino", "cargo-platform", - "semver 1.0.24", + "semver 1.0.25", "serde", "serde_json", "thiserror 2.0.11", @@ -1515,7 +1515,7 @@ dependencies = [ "hex", "humansize", "image", - "indexmap 2.7.0", + "indexmap 2.7.1", "itertools 0.14.0", "log", "md-5", @@ -1552,7 +1552,7 @@ dependencies = [ "runas", "rust-i18n", "rustc_version", - "semver 1.0.24", + "semver 1.0.25", "serde", "serde_json", "serde_yaml_ng", @@ -3676,7 +3676,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.2.0", - "indexmap 2.7.0", + "indexmap 2.7.1", "slab", "tokio", "tokio-util", @@ -4244,9 +4244,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -5105,7 +5105,7 @@ dependencies = [ "cfg_aliases 0.1.1", "codespan-reporting", "hexf-parse", - "indexmap 2.7.0", + "indexmap 2.7.1", "log", "rustc-hash 1.1.0", "spirv", @@ -6251,7 +6251,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.7.0", + "indexmap 2.7.1", ] [[package]] @@ -6460,7 +6460,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ "base64 0.22.1", - "indexmap 2.7.0", + "indexmap 2.7.1", "quick-xml 0.32.0", "serde", "time", @@ -7299,7 +7299,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.24", + "semver 1.0.25", ] [[package]] @@ -7519,9 +7519,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" dependencies = [ "serde", ] @@ -7595,9 +7595,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "336a0c23cf42a38d9eaa7cd22c7040d04e1228a19a933890805ffd00a16437d2" +checksum = "930cfb6e6abf99298aaad7d29abbef7a9999a9a8806a40088f55f0dcec03146b" dependencies = [ "itoa 1.0.14", "memchr", @@ -7657,7 +7657,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.7.0", + "indexmap 2.7.1", "serde", "serde_derive", "serde_json", @@ -7682,7 +7682,7 @@ name = "serde_yaml_ng" version = "0.10.0" source = "git+https://github.com/libnyanpasu/serde-yaml-ng.git#39cfdee3ab2a9bf220bc285e8004bb1950fa317f" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.7.1", "itoa 1.0.14", "ryu", "serde", @@ -7695,7 +7695,7 @@ version = "0.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48e76bab63c3fd98d27c17f9cbce177f64a91f5e69ac04cafe04e1bb25d1dc3c" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.7.1", "itoa 1.0.14", "libyml", "log", @@ -8463,7 +8463,7 @@ dependencies = [ "heck 0.5.0", "json-patch", "schemars", - "semver 1.0.24", + "semver 1.0.25", "serde", "serde_json", "tauri-utils", @@ -8486,7 +8486,7 @@ dependencies = [ "png", "proc-macro2", "quote", - "semver 1.0.24", + "semver 1.0.25", "serde", "serde_json", "sha2 0.10.8", @@ -8699,7 +8699,7 @@ dependencies = [ "minisign-verify", "percent-encoding", "reqwest", - "semver 1.0.24", + "semver 1.0.25", "serde", "serde_json", "tar", @@ -8782,7 +8782,7 @@ dependencies = [ "quote", "regex", "schemars", - "semver 1.0.24", + "semver 1.0.25", "serde", "serde-untagged", "serde_json", @@ -9230,7 +9230,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", @@ -9243,7 +9243,7 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.7.1", "toml_datetime", "winnow 0.5.40", ] @@ -9254,7 +9254,7 @@ version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", @@ -9781,9 +9781,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" +checksum = "744018581f9a3454a9e15beb8a33b017183f1e7c0cd170232a2d1453b23a51c4" dependencies = [ "getrandom 0.2.15", "serde", @@ -10311,7 +10311,7 @@ dependencies = [ "bitflags 2.6.0", "cfg_aliases 0.1.1", "document-features", - "indexmap 2.7.0", + "indexmap 2.7.1", "log", "naga", "once_cell", @@ -11607,7 +11607,7 @@ dependencies = [ "displaydoc", "flate2", "hmac", - "indexmap 2.7.0", + "indexmap 2.7.1", "lzma-rs", "memchr", "pbkdf2", diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index 6be8260ca3..84812a0178 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -85,7 +85,7 @@ "unplugin-auto-import": "19.0.0", "unplugin-icons": "22.0.0", "validator": "13.12.0", - "vite": "6.0.7", + "vite": "6.0.9", "vite-plugin-html": "3.2.2", "vite-plugin-sass-dts": "1.3.30", "vite-plugin-svgr": "4.3.0", diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json index 4f5bd1eb9f..4613de57b6 100644 --- a/clash-nyanpasu/frontend/ui/package.json +++ b/clash-nyanpasu/frontend/ui/package.json @@ -34,7 +34,7 @@ "react-error-boundary": "5.0.0", "react-i18next": "15.4.0", "react-use": "17.6.0", - "vite": "6.0.7", + "vite": "6.0.9", "vite-tsconfig-paths": "5.1.4" }, "devDependencies": { diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json index 63f01b896f..6493bde699 100644 --- a/clash-nyanpasu/manifest/version.json +++ b/clash-nyanpasu/manifest/version.json @@ -2,7 +2,7 @@ "manifest_version": 1, "latest": { "mihomo": "v1.19.1", - "mihomo_alpha": "alpha-192d769", + "mihomo_alpha": "alpha-fc23318", "clash_rs": "v0.7.4", "clash_premium": "2023-09-05-gdcc8d87", "clash_rs_alpha": "0.7.4-alpha+sha.63aec82" @@ -69,5 +69,5 @@ "linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf" } }, - "updated_at": "2025-01-16T22:20:32.490Z" + "updated_at": "2025-01-19T22:20:36.800Z" } diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index 92384f553f..eaf560d060 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -331,7 +331,7 @@ importers: version: 1.97.3(@tanstack/react-router@1.97.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(csstype@3.1.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@tanstack/router-plugin': specifier: 1.97.3 - version: 1.97.3(@tanstack/react-router@1.97.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 1.97.3(@tanstack/react-router@1.97.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) '@tauri-apps/plugin-clipboard-manager': specifier: 2.2.0 version: 2.2.0 @@ -367,13 +367,13 @@ importers: version: 13.12.2 '@vitejs/plugin-legacy': specifier: 6.0.0 - version: 6.0.0(terser@5.36.0)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 6.0.0(terser@5.36.0)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) '@vitejs/plugin-react': specifier: 4.3.4 - version: 4.3.4(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 4.3.4(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) '@vitejs/plugin-react-swc': specifier: 3.7.2 - version: 3.7.2(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 3.7.2(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) change-case: specifier: 5.4.4 version: 5.4.4 @@ -414,20 +414,20 @@ importers: specifier: 13.12.0 version: 13.12.0 vite: - specifier: 6.0.7 - version: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + specifier: 6.0.9 + version: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) vite-plugin-html: specifier: 3.2.2 - version: 3.2.2(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 3.2.2(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) vite-plugin-sass-dts: specifier: 1.3.30 - version: 1.3.30(postcss@8.5.1)(prettier@3.4.2)(sass-embedded@1.83.4)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 1.3.30(postcss@8.5.1)(prettier@3.4.2)(sass-embedded@1.83.4)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) vite-plugin-svgr: specifier: 4.3.0 - version: 4.3.0(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 4.3.0(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 5.1.4(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) zod: specifier: 3.24.1 version: 3.24.1 @@ -463,7 +463,7 @@ importers: version: 19.0.7 '@vitejs/plugin-react': specifier: 4.3.4 - version: 4.3.4(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 4.3.4(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) ahooks: specifier: 3.8.4 version: 3.8.4(react@19.0.0) @@ -489,11 +489,11 @@ importers: specifier: 17.6.0 version: 17.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) vite: - specifier: 6.0.7 - version: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + specifier: 6.0.9 + version: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 5.1.4(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) devDependencies: '@emotion/react': specifier: 11.14.0 @@ -518,7 +518,7 @@ importers: version: 5.1.0(typescript@5.7.3) vite-plugin-dts: specifier: 4.5.0 - version: 4.5.0(@types/node@22.10.7)(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 4.5.0(@types/node@22.10.7)(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) scripts: dependencies: @@ -6549,10 +6549,6 @@ packages: resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.1: resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} engines: {node: ^10 || ^12 || >=14} @@ -7999,8 +7995,8 @@ packages: vite: optional: true - vite@6.0.7: - resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} + vite@6.0.9: + resolution: {integrity: sha512-MSgUxHcaXLtnBPktkbUSoQUANApKYuxZ6DrbVENlIorbhL2dZydTLaZ01tjUoE3szeFzlFk9ANOKk0xurh4MKA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -10545,7 +10541,7 @@ snapshots: optionalDependencies: '@tanstack/react-router': 1.97.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@tanstack/router-plugin@1.97.3(@tanstack/react-router@1.97.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))': + '@tanstack/router-plugin@1.97.3(@tanstack/react-router@1.97.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))': dependencies: '@babel/core': 7.26.0 '@babel/generator': 7.26.3 @@ -10569,7 +10565,7 @@ snapshots: unplugin: 1.16.0 zod: 3.24.1 optionalDependencies: - vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - '@tanstack/react-router' - supports-color @@ -11062,7 +11058,7 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-legacy@6.0.0(terser@5.36.0)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))': + '@vitejs/plugin-legacy@6.0.0(terser@5.36.0)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))': dependencies: '@babel/core': 7.26.0 '@babel/preset-env': 7.26.0(@babel/core@7.26.0) @@ -11073,25 +11069,25 @@ snapshots: regenerator-runtime: 0.14.1 systemjs: 6.15.1 terser: 5.36.0 - vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react-swc@3.7.2(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))': + '@vitejs/plugin-react-swc@3.7.2(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))': dependencies: '@swc/core': 1.7.26 - vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@4.3.4(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))': + '@vitejs/plugin-react@4.3.4(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - supports-color @@ -14880,12 +14876,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.4.49: - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.5.1: dependencies: nanoid: 3.3.8 @@ -16453,7 +16443,7 @@ snapshots: - rollup - supports-color - vite-plugin-dts@4.5.0(@types/node@22.10.7)(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)): + vite-plugin-dts@4.5.0(@types/node@22.10.7)(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)): dependencies: '@microsoft/api-extractor': 7.49.1(@types/node@22.10.7) '@rollup/pluginutils': 5.1.4(rollup@4.27.4) @@ -16466,13 +16456,13 @@ snapshots: magic-string: 0.30.17 typescript: 5.7.3 optionalDependencies: - vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-html@3.2.2(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)): + vite-plugin-html@3.2.2(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)): dependencies: '@rollup/pluginutils': 4.2.1 colorette: 2.0.20 @@ -16486,42 +16476,42 @@ snapshots: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) - vite-plugin-sass-dts@1.3.30(postcss@8.5.1)(prettier@3.4.2)(sass-embedded@1.83.4)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)): + vite-plugin-sass-dts@1.3.30(postcss@8.5.1)(prettier@3.4.2)(sass-embedded@1.83.4)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)): dependencies: postcss: 8.5.1 postcss-js: 4.0.1(postcss@8.5.1) prettier: 3.4.2 sass-embedded: 1.83.4 - vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) - vite-plugin-svgr@4.3.0(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)): + vite-plugin-svgr@4.3.0(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)): dependencies: '@rollup/pluginutils': 5.1.3(rollup@4.27.4) '@svgr/core': 8.1.0(typescript@5.7.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.7.3)) - vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - rollup - supports-color - typescript - vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)): + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)): dependencies: debug: 4.3.7 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.7.3) optionalDependencies: - vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - supports-color - typescript - vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1): + vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1): dependencies: esbuild: 0.24.2 - postcss: 8.4.49 + postcss: 8.5.1 rollup: 4.27.4 optionalDependencies: '@types/node': 22.10.7 diff --git a/lede/package/firmware/linux-firmware/qca_ath11k.mk b/lede/package/firmware/linux-firmware/qca_ath11k.mk index db163a8258..05e9a99e85 100644 --- a/lede/package/firmware/linux-firmware/qca_ath11k.mk +++ b/lede/package/firmware/linux-firmware/qca_ath11k.mk @@ -1,3 +1,11 @@ +Package/ath11k-firmware-qca2066 = $(call Package/firmware-default,QCA2066 ath11k firmware) +define Package/ath11k-firmware-qca2066/install + $(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCA2066/hw2.1 + $(INSTALL_DATA) \ + $(PKG_BUILD_DIR)/ath11k/QCA2066/hw2.1/* $(1)/lib/firmware/ath11k/QCA2066/hw2.1/ +endef +$(eval $(call BuildPackage,ath11k-firmware-qca2066)) + Package/ath11k-firmware-qca6390 = $(call Package/firmware-default,QCA6390 ath11k firmware) define Package/ath11k-firmware-qca6390/install $(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCA6390/hw2.0 diff --git a/lede/package/kernel/mac80211/patches/ath11k/0094-wifi-ath11k-Don-t-drop-tx_status-when-peer-cannot-be.patch b/lede/package/kernel/mac80211/patches/ath11k/0094-wifi-ath11k-Don-t-drop-tx_status-when-peer-cannot-be.patch new file mode 100644 index 0000000000..e404a7849e --- /dev/null +++ b/lede/package/kernel/mac80211/patches/ath11k/0094-wifi-ath11k-Don-t-drop-tx_status-when-peer-cannot-be.patch @@ -0,0 +1,53 @@ +From 400ece6c7f346b0a30867bd00b03b5b2563d4357 Mon Sep 17 00:00:00 2001 +From: Sven Eckelmann +Date: Tue, 22 Aug 2023 16:42:24 +0300 +Subject: [PATCH] wifi: ath11k: Don't drop tx_status when peer cannot be found + +When a station idles for a long time, hostapd will try to send a QoS Null +frame to the station as "poll". NL80211_CMD_PROBE_CLIENT is used for this +purpose. And the skb will be added to ack_status_frame - waiting for a +completion via ieee80211_report_ack_skb(). + +But when the peer was already removed before the tx_complete arrives, the +peer will be missing. And when using dev_kfree_skb_any (instead of going +through mac80211), the entry will stay inside ack_status_frames. This IDR +will therefore run full after 8K request were generated for such clients. +At this point, the access point will then just stall and not allow any new +clients because idr_alloc() for ack_status_frame will fail. + +ieee80211_free_txskb() on the other hand will (when required) call +ieee80211_report_ack_skb() and make sure that (when required) remove the +entry from the ack_status_frame. + +Tested-on: IPQ6018 hw1.0 WLAN.HK.2.5.0.1-01100-QCAHKSWPL_SILICONZ-1 + +Fixes: 6257c702264c ("wifi: ath11k: fix tx status reporting in encap offload mode") +Fixes: 94739d45c388 ("ath11k: switch to using ieee80211_tx_status_ext()") +Cc: stable@vger.kernel.org +Signed-off-by: Sven Eckelmann +Signed-off-by: Kalle Valo +Link: https://lore.kernel.org/r/20230802-ath11k-ack_status_leak-v2-1-c0af729d6229@narfation.org +--- + drivers/net/wireless/ath/ath11k/dp_tx.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/ath/ath11k/dp_tx.c ++++ b/drivers/net/wireless/ath/ath11k/dp_tx.c +@@ -369,7 +369,7 @@ ath11k_dp_tx_htt_tx_complete_buf(struct + "dp_tx: failed to find the peer with peer_id %d\n", + ts->peer_id); + spin_unlock_bh(&ab->base_lock); +- dev_kfree_skb_any(msdu); ++ ieee80211_free_txskb(ar->hw, msdu); + return; + } + spin_unlock_bh(&ab->base_lock); +@@ -624,7 +624,7 @@ static void ath11k_dp_tx_complete_msdu(s + "dp_tx: failed to find the peer with peer_id %d\n", + ts->peer_id); + spin_unlock_bh(&ab->base_lock); +- dev_kfree_skb_any(msdu); ++ ieee80211_free_txskb(ar->hw, msdu); + return; + } + arsta = (struct ath11k_sta *)peer->sta->drv_priv; diff --git a/lede/package/kernel/mac80211/patches/ath11k/0097-wifi-ath11k-move-pci.ops-registration-ahead.patch b/lede/package/kernel/mac80211/patches/ath11k/0097-wifi-ath11k-move-pci.ops-registration-ahead.patch new file mode 100644 index 0000000000..93ebf83ba2 --- /dev/null +++ b/lede/package/kernel/mac80211/patches/ath11k/0097-wifi-ath11k-move-pci.ops-registration-ahead.patch @@ -0,0 +1,96 @@ +From 515bcdf587f9911f2d5de51524cb7e048d295052 Mon Sep 17 00:00:00 2001 +From: Baochen Qiang +Date: Tue, 9 Jan 2024 10:13:35 +0800 +Subject: [PATCH] wifi: ath11k: move pci.ops registration ahead + +In ath11k_pci_probe() there is a switch statement that, based +upon the PCI device ID, assigns pci_ops. After the switch, +ath11k_pcic_register_pci_ops() is called to register the pci_ops. + +Unfortunately, this registration is too late if any of the cases +in the switch need to perform operations that require the pci_ops +to already be registered. In particular, an upcoming patch for +QCA2066 needs to call ath11k_pcic_read32(). + +To address this issue, call ath11k_pcic_register_pci_ops() from +each case instead of doing so after the switch. That way the ops +will be registered if any subsequent operations within the case +processing require the ops to be present. + +Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3 + +Signed-off-by: Baochen Qiang +Signed-off-by: Kalle Valo +Link: https://msgid.link/20240109021336.4143-2-quic_bqiang@quicinc.com +--- + drivers/net/wireless/ath/ath11k/pci.c | 26 ++++++++++++++++---------- + 1 file changed, 16 insertions(+), 10 deletions(-) + +--- a/drivers/net/wireless/ath/ath11k/pci.c ++++ b/drivers/net/wireless/ath/ath11k/pci.c +@@ -729,7 +729,6 @@ static int ath11k_pci_probe(struct pci_d + struct ath11k_base *ab; + struct ath11k_pci *ab_pci; + u32 soc_hw_version_major, soc_hw_version_minor, addr; +- const struct ath11k_pci_ops *pci_ops; + int ret; + + ab = ath11k_core_alloc(&pdev->dev, sizeof(*ab_pci), ATH11K_BUS_PCI); +@@ -775,6 +774,12 @@ static int ath11k_pci_probe(struct pci_d + + switch (pci_dev->device) { + case QCA6390_DEVICE_ID: ++ ret = ath11k_pcic_register_pci_ops(ab, &ath11k_pci_ops_qca6390); ++ if (ret) { ++ ath11k_err(ab, "failed to register PCI ops: %d\n", ret); ++ goto err_pci_free_region; ++ } ++ + ath11k_pci_read_hw_version(ab, &soc_hw_version_major, + &soc_hw_version_minor); + switch (soc_hw_version_major) { +@@ -788,13 +793,21 @@ static int ath11k_pci_probe(struct pci_d + goto err_pci_free_region; + } + +- pci_ops = &ath11k_pci_ops_qca6390; + break; + case QCN9074_DEVICE_ID: +- pci_ops = &ath11k_pci_ops_qcn9074; ++ ret = ath11k_pcic_register_pci_ops(ab, &ath11k_pci_ops_qcn9074); ++ if (ret) { ++ ath11k_err(ab, "failed to register PCI ops: %d\n", ret); ++ goto err_pci_free_region; ++ } + ab->hw_rev = ATH11K_HW_QCN9074_HW10; + break; + case WCN6855_DEVICE_ID: ++ ret = ath11k_pcic_register_pci_ops(ab, &ath11k_pci_ops_qca6390); ++ if (ret) { ++ ath11k_err(ab, "failed to register PCI ops: %d\n", ret); ++ goto err_pci_free_region; ++ } + ab->id.bdf_search = ATH11K_BDF_SEARCH_BUS_AND_BOARD; + ath11k_pci_read_hw_version(ab, &soc_hw_version_major, + &soc_hw_version_minor); +@@ -821,7 +834,6 @@ unsupported_wcn6855_soc: + goto err_pci_free_region; + } + +- pci_ops = &ath11k_pci_ops_qca6390; + break; + default: + dev_err(&pdev->dev, "Unknown PCI device found: 0x%x\n", +@@ -830,12 +842,6 @@ unsupported_wcn6855_soc: + goto err_pci_free_region; + } + +- ret = ath11k_pcic_register_pci_ops(ab, pci_ops); +- if (ret) { +- ath11k_err(ab, "failed to register PCI ops: %d\n", ret); +- goto err_pci_free_region; +- } +- + ret = ath11k_pcic_init_msi_config(ab); + if (ret) { + ath11k_err(ab, "failed to init msi config: %d\n", ret); diff --git a/lede/package/kernel/mac80211/patches/ath11k/0098-wifi-ath11k-support-2-station-interfaces.patch b/lede/package/kernel/mac80211/patches/ath11k/0098-wifi-ath11k-support-2-station-interfaces.patch new file mode 100644 index 0000000000..1718de926c --- /dev/null +++ b/lede/package/kernel/mac80211/patches/ath11k/0098-wifi-ath11k-support-2-station-interfaces.patch @@ -0,0 +1,219 @@ +From f019f4dff2e4cb8704dc608496e3f2829de3e919 Mon Sep 17 00:00:00 2001 +From: Carl Huang +Date: Wed, 14 Feb 2024 10:38:10 +0200 +Subject: [PATCH] wifi: ath11k: support 2 station interfaces + +Add hardware parameter support_dual_stations to indicate whether 2 station +interfaces are supported. For chips which support this feature, limit total +number of AP interface and mesh point to 1. The max interfaces are 3 for such +chips. + +The chips affected are: + + QCA6390 hw2.0 + WCN6855 hw2.0 + WCN6855 hw2.1 + +Other chips are not affected. + +For affected chips, remove radar_detect_widths because now +num_different_channels is set to 2. radar_detect_widths can be set only when +num_different_channels is 1, see mac80211 function wiphy_verify_combinations +for details. This means that in affectected chips DFS cannot be enabled in AP +mode. + +Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3 + +Signed-off-by: Carl Huang +Signed-off-by: Kalle Valo +Link: https://msgid.link/20230714023801.2621802-2-quic_cjhuang@quicinc.com +--- + drivers/net/wireless/ath/ath11k/core.c | 14 ++++-- + drivers/net/wireless/ath/ath11k/hw.c | 2 +- + drivers/net/wireless/ath/ath11k/hw.h | 1 + + drivers/net/wireless/ath/ath11k/mac.c | 62 +++++++++++++++++--------- + 4 files changed, 53 insertions(+), 26 deletions(-) + +--- a/drivers/net/wireless/ath/ath11k/core.c ++++ b/drivers/net/wireless/ath/ath11k/core.c +@@ -121,6 +121,7 @@ static const struct ath11k_hw_params ath + .tcl_ring_retry = true, + .tx_ring_size = DP_TCL_DATA_RING_SIZE, + .smp2p_wow_exit = false, ++ .support_dual_stations = false, + }, + { + .hw_rev = ATH11K_HW_IPQ6018_HW10, +@@ -204,6 +205,7 @@ static const struct ath11k_hw_params ath + .tx_ring_size = DP_TCL_DATA_RING_SIZE, + .smp2p_wow_exit = false, + .support_fw_mac_sequence = false, ++ .support_dual_stations = false, + }, + { + .name = "qca6390 hw2.0", +@@ -254,7 +256,7 @@ static const struct ath11k_hw_params ath + .coldboot_cal_ftm = false, + .cbcal_restart_fw = false, + .fw_mem_mode = 0, +- .num_vdevs = 16 + 1, ++ .num_vdevs = 2 + 1, + .num_peers = 512, + .supports_suspend = true, + .hal_desc_sz = sizeof(struct hal_rx_desc_ipq8074), +@@ -289,6 +291,7 @@ static const struct ath11k_hw_params ath + .tx_ring_size = DP_TCL_DATA_RING_SIZE, + .smp2p_wow_exit = false, + .support_fw_mac_sequence = true, ++ .support_dual_stations = true, + }, + { + .name = "qcn9074 hw1.0", +@@ -371,6 +374,7 @@ static const struct ath11k_hw_params ath + .tx_ring_size = DP_TCL_DATA_RING_SIZE, + .smp2p_wow_exit = false, + .support_fw_mac_sequence = false, ++ .support_dual_stations = false, + }, + { + .name = "wcn6855 hw2.0", +@@ -421,7 +425,7 @@ static const struct ath11k_hw_params ath + .coldboot_cal_ftm = false, + .cbcal_restart_fw = false, + .fw_mem_mode = 0, +- .num_vdevs = 16 + 1, ++ .num_vdevs = 2 + 1, + .num_peers = 512, + .supports_suspend = true, + .hal_desc_sz = sizeof(struct hal_rx_desc_wcn6855), +@@ -456,6 +460,7 @@ static const struct ath11k_hw_params ath + .tx_ring_size = DP_TCL_DATA_RING_SIZE, + .smp2p_wow_exit = false, + .support_fw_mac_sequence = true, ++ .support_dual_stations = true, + }, + { + .name = "wcn6855 hw2.1", +@@ -504,7 +509,7 @@ static const struct ath11k_hw_params ath + .coldboot_cal_ftm = false, + .cbcal_restart_fw = false, + .fw_mem_mode = 0, +- .num_vdevs = 16 + 1, ++ .num_vdevs = 2 + 1, + .num_peers = 512, + .supports_suspend = true, + .hal_desc_sz = sizeof(struct hal_rx_desc_wcn6855), +@@ -539,6 +544,7 @@ static const struct ath11k_hw_params ath + .tx_ring_size = DP_TCL_DATA_RING_SIZE, + .smp2p_wow_exit = false, + .support_fw_mac_sequence = true, ++ .support_dual_stations = true, + }, + { + .name = "wcn6750 hw1.0", +@@ -620,6 +626,7 @@ static const struct ath11k_hw_params ath + .tx_ring_size = DP_TCL_DATA_RING_SIZE_WCN6750, + .smp2p_wow_exit = true, + .support_fw_mac_sequence = true, ++ .support_dual_stations = false, + }, + { + .hw_rev = ATH11K_HW_IPQ5018_HW10, +@@ -701,6 +708,7 @@ static const struct ath11k_hw_params ath + .tx_ring_size = DP_TCL_DATA_RING_SIZE, + .smp2p_wow_exit = false, + .support_fw_mac_sequence = false, ++ .support_dual_stations = false, + }, + }; + +--- a/drivers/net/wireless/ath/ath11k/hw.c ++++ b/drivers/net/wireless/ath/ath11k/hw.c +@@ -58,7 +58,7 @@ static void ath11k_hw_wcn6855_tx_mesh_en + static void ath11k_init_wmi_config_qca6390(struct ath11k_base *ab, + struct target_resource_config *config) + { +- config->num_vdevs = 4; ++ config->num_vdevs = ab->hw_params.num_vdevs; + config->num_peers = 16; + config->num_tids = 32; + +--- a/drivers/net/wireless/ath/ath11k/hw.h ++++ b/drivers/net/wireless/ath/ath11k/hw.h +@@ -226,6 +226,7 @@ struct ath11k_hw_params { + u32 tx_ring_size; + bool smp2p_wow_exit; + bool support_fw_mac_sequence; ++ bool support_dual_stations; + }; + + struct ath11k_hw_ops { +--- a/drivers/net/wireless/ath/ath11k/mac.c ++++ b/drivers/net/wireless/ath/ath11k/mac.c +@@ -9287,28 +9287,46 @@ static int ath11k_mac_setup_iface_combin + return -ENOMEM; + } + +- limits[0].max = 1; +- limits[0].types |= BIT(NL80211_IFTYPE_STATION); ++ if (ab->hw_params.support_dual_stations) { ++ limits[0].max = 2; ++ limits[0].types |= BIT(NL80211_IFTYPE_STATION); + +- limits[1].max = 16; +- limits[1].types |= BIT(NL80211_IFTYPE_AP); ++ limits[1].max = 1; ++ limits[1].types |= BIT(NL80211_IFTYPE_AP); ++ if (IS_ENABLED(CPTCFG_MAC80211_MESH) && ++ ab->hw_params.interface_modes & BIT(NL80211_IFTYPE_MESH_POINT)) ++ limits[1].types |= BIT(NL80211_IFTYPE_MESH_POINT); + +- if (IS_ENABLED(CPTCFG_MAC80211_MESH) && +- ab->hw_params.interface_modes & BIT(NL80211_IFTYPE_MESH_POINT)) +- limits[1].types |= BIT(NL80211_IFTYPE_MESH_POINT); +- +- combinations[0].limits = limits; +- combinations[0].n_limits = n_limits; +- combinations[0].max_interfaces = 16; +- combinations[0].num_different_channels = 1; +- combinations[0].beacon_int_infra_match = true; +- combinations[0].beacon_int_min_gcd = 100; +- combinations[0].radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) | +- BIT(NL80211_CHAN_WIDTH_20) | +- BIT(NL80211_CHAN_WIDTH_40) | +- BIT(NL80211_CHAN_WIDTH_80) | +- BIT(NL80211_CHAN_WIDTH_80P80) | +- BIT(NL80211_CHAN_WIDTH_160); ++ combinations[0].limits = limits; ++ combinations[0].n_limits = 2; ++ combinations[0].max_interfaces = ab->hw_params.num_vdevs; ++ combinations[0].num_different_channels = 2; ++ combinations[0].beacon_int_infra_match = true; ++ combinations[0].beacon_int_min_gcd = 100; ++ } else { ++ limits[0].max = 1; ++ limits[0].types |= BIT(NL80211_IFTYPE_STATION); ++ ++ limits[1].max = 16; ++ limits[1].types |= BIT(NL80211_IFTYPE_AP); ++ ++ if (IS_ENABLED(CPTCFG_MAC80211_MESH) && ++ ab->hw_params.interface_modes & BIT(NL80211_IFTYPE_MESH_POINT)) ++ limits[1].types |= BIT(NL80211_IFTYPE_MESH_POINT); ++ ++ combinations[0].limits = limits; ++ combinations[0].n_limits = 2; ++ combinations[0].max_interfaces = 16; ++ combinations[0].num_different_channels = 1; ++ combinations[0].beacon_int_infra_match = true; ++ combinations[0].beacon_int_min_gcd = 100; ++ combinations[0].radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) | ++ BIT(NL80211_CHAN_WIDTH_20) | ++ BIT(NL80211_CHAN_WIDTH_40) | ++ BIT(NL80211_CHAN_WIDTH_80) | ++ BIT(NL80211_CHAN_WIDTH_80P80) | ++ BIT(NL80211_CHAN_WIDTH_160); ++ } + + ar->hw->wiphy->iface_combinations = combinations; + ar->hw->wiphy->n_iface_combinations = 1; diff --git a/lede/package/kernel/mac80211/patches/ath11k/0099-wifi-ath11k-add-support-for-QCA2066.patch b/lede/package/kernel/mac80211/patches/ath11k/0099-wifi-ath11k-add-support-for-QCA2066.patch new file mode 100644 index 0000000000..03c1ea7eba --- /dev/null +++ b/lede/package/kernel/mac80211/patches/ath11k/0099-wifi-ath11k-add-support-for-QCA2066.patch @@ -0,0 +1,202 @@ +From 5dc9d1a55e953d9059ecbdd8fe6ec81e9edd349e Mon Sep 17 00:00:00 2001 +From: Baochen Qiang +Date: Tue, 9 Jan 2024 10:13:36 +0800 +Subject: [PATCH] wifi: ath11k: add support for QCA2066 + +QCA2066 is a PCI based DBS device. It is very similar to WCN6855 +overall: they share the same PCI device ID, the same major and +minor version numbers, the same register address, and same HAL +descriptors etc. The most significant difference is that QCA2066 +supports 3-antenna configuration while WCN6855 does not. To differentiate +them, subversion numbers are used. Currently four numbers are used +by QCA2066: 0x1019A0E1, 0x1019B0E1, 0x1019C0E1 and 0x1019D0E1. + +Tested-on: QCA2066 hw2.1 PCI WLAN.HSP.1.1-03737-QCAHSPSWPL_V2_SILICONZ_CE-1 +Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3 + +Signed-off-by: Baochen Qiang +Signed-off-by: Kalle Valo +Link: https://msgid.link/20240109021336.4143-3-quic_bqiang@quicinc.com +--- + drivers/net/wireless/ath/ath11k/core.c | 86 ++++++++++++++++++++++++++ + drivers/net/wireless/ath/ath11k/core.h | 1 + + drivers/net/wireless/ath/ath11k/mhi.c | 1 + + drivers/net/wireless/ath/ath11k/pci.c | 17 ++++- + drivers/net/wireless/ath/ath11k/pcic.c | 11 ++++ + 5 files changed, 115 insertions(+), 1 deletion(-) + +--- a/drivers/net/wireless/ath/ath11k/core.c ++++ b/drivers/net/wireless/ath/ath11k/core.c +@@ -710,6 +710,92 @@ static const struct ath11k_hw_params ath + .support_fw_mac_sequence = false, + .support_dual_stations = false, + }, ++ { ++ .name = "qca2066 hw2.1", ++ .hw_rev = ATH11K_HW_QCA2066_HW21, ++ .fw = { ++ .dir = "QCA2066/hw2.1", ++ .board_size = 256 * 1024, ++ .cal_offset = 128 * 1024, ++ }, ++ .max_radios = 3, ++ .bdf_addr = 0x4B0C0000, ++ .hw_ops = &wcn6855_ops, ++ .ring_mask = &ath11k_hw_ring_mask_qca6390, ++ .internal_sleep_clock = true, ++ .regs = &wcn6855_regs, ++ .qmi_service_ins_id = ATH11K_QMI_WLFW_SERVICE_INS_ID_V01_QCA6390, ++ .host_ce_config = ath11k_host_ce_config_qca6390, ++ .ce_count = 9, ++ .target_ce_config = ath11k_target_ce_config_wlan_qca6390, ++ .target_ce_count = 9, ++ .svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_qca6390, ++ .svc_to_ce_map_len = 14, ++ .ce_ie_addr = &ath11k_ce_ie_addr_ipq8074, ++ .single_pdev_only = true, ++ .rxdma1_enable = false, ++ .num_rxmda_per_pdev = 2, ++ .rx_mac_buf_ring = true, ++ .vdev_start_delay = true, ++ .htt_peer_map_v2 = false, ++ ++ .spectral = { ++ .fft_sz = 0, ++ .fft_pad_sz = 0, ++ .summary_pad_sz = 0, ++ .fft_hdr_len = 0, ++ .max_fft_bins = 0, ++ .fragment_160mhz = false, ++ }, ++ ++ .interface_modes = BIT(NL80211_IFTYPE_STATION) | ++ BIT(NL80211_IFTYPE_AP), ++ .supports_monitor = false, ++ .full_monitor_mode = false, ++ .supports_shadow_regs = true, ++ .idle_ps = true, ++ .supports_sta_ps = true, ++ .coldboot_cal_mm = false, ++ .coldboot_cal_ftm = false, ++ .cbcal_restart_fw = false, ++ .fw_mem_mode = 0, ++ .num_vdevs = 2 + 1, ++ .num_peers = 512, ++ .supports_suspend = true, ++ .hal_desc_sz = sizeof(struct hal_rx_desc_wcn6855), ++ .supports_regdb = true, ++ .fix_l1ss = false, ++ .credit_flow = true, ++ .max_tx_ring = DP_TCL_NUM_RING_MAX_QCA6390, ++ .hal_params = &ath11k_hw_hal_params_qca6390, ++ .supports_dynamic_smps_6ghz = false, ++ .alloc_cacheable_memory = false, ++ .supports_rssi_stats = true, ++ .fw_wmi_diag_event = true, ++ .current_cc_support = true, ++ .dbr_debug_support = false, ++ .global_reset = true, ++ .bios_sar_capa = &ath11k_hw_sar_capa_wcn6855, ++ .m3_fw_support = true, ++ .fixed_bdf_addr = false, ++ .fixed_mem_region = false, ++ .static_window_map = false, ++ .hybrid_bus_type = false, ++ .fixed_fw_mem = false, ++ .support_off_channel_tx = true, ++ .supports_multi_bssid = true, ++ ++ .sram_dump = { ++ .start = 0x01400000, ++ .end = 0x0177ffff, ++ }, ++ ++ .tcl_ring_retry = true, ++ .tx_ring_size = DP_TCL_DATA_RING_SIZE, ++ .smp2p_wow_exit = false, ++ .support_fw_mac_sequence = true, ++ .support_dual_stations = true, ++ }, + }; + + static inline struct ath11k_pdev *ath11k_core_get_single_pdev(struct ath11k_base *ab) +--- a/drivers/net/wireless/ath/ath11k/core.h ++++ b/drivers/net/wireless/ath/ath11k/core.h +@@ -144,6 +144,7 @@ enum ath11k_hw_rev { + ATH11K_HW_WCN6855_HW21, + ATH11K_HW_WCN6750_HW10, + ATH11K_HW_IPQ5018_HW10, ++ ATH11K_HW_QCA2066_HW21, + }; + + enum ath11k_firmware_mode { +--- a/drivers/net/wireless/ath/ath11k/mhi.c ++++ b/drivers/net/wireless/ath/ath11k/mhi.c +@@ -437,6 +437,7 @@ int ath11k_mhi_register(struct ath11k_pc + case ATH11K_HW_QCA6390_HW20: + case ATH11K_HW_WCN6855_HW20: + case ATH11K_HW_WCN6855_HW21: ++ case ATH11K_HW_QCA2066_HW21: + ath11k_mhi_config = &ath11k_mhi_config_qca6390; + break; + default: +--- a/drivers/net/wireless/ath/ath11k/pci.c ++++ b/drivers/net/wireless/ath/ath11k/pci.c +@@ -28,6 +28,8 @@ + #define QCN9074_DEVICE_ID 0x1104 + #define WCN6855_DEVICE_ID 0x1103 + ++#define TCSR_SOC_HW_SUB_VER 0x1910010 ++ + static const struct pci_device_id ath11k_pci_id_table[] = { + { PCI_VDEVICE(QCOM, QCA6390_DEVICE_ID) }, + { PCI_VDEVICE(QCOM, WCN6855_DEVICE_ID) }, +@@ -730,6 +732,7 @@ static int ath11k_pci_probe(struct pci_d + struct ath11k_pci *ab_pci; + u32 soc_hw_version_major, soc_hw_version_minor, addr; + int ret; ++ u32 sub_version; + + ab = ath11k_core_alloc(&pdev->dev, sizeof(*ab_pci), ATH11K_BUS_PCI); + +@@ -820,7 +823,19 @@ static int ath11k_pci_probe(struct pci_d + break; + case 0x10: + case 0x11: +- ab->hw_rev = ATH11K_HW_WCN6855_HW21; ++ sub_version = ath11k_pcic_read32(ab, TCSR_SOC_HW_SUB_VER); ++ ath11k_dbg(ab, ATH11K_DBG_PCI, "sub_version 0x%x\n", ++ sub_version); ++ switch (sub_version) { ++ case 0x1019A0E1: ++ case 0x1019B0E1: ++ case 0x1019C0E1: ++ case 0x1019D0E1: ++ ab->hw_rev = ATH11K_HW_QCA2066_HW21; ++ break; ++ default: ++ ab->hw_rev = ATH11K_HW_WCN6855_HW21; ++ } + break; + default: + goto unsupported_wcn6855_soc; +--- a/drivers/net/wireless/ath/ath11k/pcic.c ++++ b/drivers/net/wireless/ath/ath11k/pcic.c +@@ -115,6 +115,17 @@ static const struct ath11k_msi_config at + }, + .hw_rev = ATH11K_HW_WCN6750_HW10, + }, ++ { ++ .total_vectors = 32, ++ .total_users = 4, ++ .users = (struct ath11k_msi_user[]) { ++ { .name = "MHI", .num_vectors = 3, .base_vector = 0 }, ++ { .name = "CE", .num_vectors = 10, .base_vector = 3 }, ++ { .name = "WAKE", .num_vectors = 1, .base_vector = 13 }, ++ { .name = "DP", .num_vectors = 18, .base_vector = 14 }, ++ }, ++ .hw_rev = ATH11K_HW_QCA2066_HW21, ++ }, + }; + + int ath11k_pcic_init_msi_config(struct ath11k_base *ab) diff --git a/lede/package/kernel/mac80211/patches/ath11k/100-wifi-ath11k-use-unique-QRTR-instance-ID.patch b/lede/package/kernel/mac80211/patches/ath11k/100-wifi-ath11k-use-unique-QRTR-instance-ID.patch index 30472b3229..fa6b9b3170 100644 --- a/lede/package/kernel/mac80211/patches/ath11k/100-wifi-ath11k-use-unique-QRTR-instance-ID.patch +++ b/lede/package/kernel/mac80211/patches/ath11k/100-wifi-ath11k-use-unique-QRTR-instance-ID.patch @@ -138,7 +138,7 @@ Signed-off-by: Robert Marko int ath11k_mhi_register(struct ath11k_pci *ar_pci); --- a/drivers/net/wireless/ath/ath11k/pci.c +++ b/drivers/net/wireless/ath/ath11k/pci.c -@@ -371,13 +371,20 @@ static void ath11k_pci_sw_reset(struct a +@@ -373,13 +373,20 @@ static void ath11k_pci_sw_reset(struct a static void ath11k_pci_init_qmi_ce_config(struct ath11k_base *ab) { struct ath11k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg; diff --git a/lede/package/kernel/mac80211/patches/ath11k/901-wifi-ath11k-pci-fix-compilation-in-5.16-and-older.patch b/lede/package/kernel/mac80211/patches/ath11k/901-wifi-ath11k-pci-fix-compilation-in-5.16-and-older.patch index 9a0ca80090..aeefb069c0 100644 --- a/lede/package/kernel/mac80211/patches/ath11k/901-wifi-ath11k-pci-fix-compilation-in-5.16-and-older.patch +++ b/lede/package/kernel/mac80211/patches/ath11k/901-wifi-ath11k-pci-fix-compilation-in-5.16-and-older.patch @@ -15,7 +15,7 @@ Signed-off-by: Robert Marko --- a/drivers/net/wireless/ath/ath11k/pci.c +++ b/drivers/net/wireless/ath/ath11k/pci.c -@@ -459,7 +459,11 @@ static int ath11k_pci_alloc_msi(struct a +@@ -461,7 +461,11 @@ static int ath11k_pci_alloc_msi(struct a pci_read_config_dword(pci_dev, pci_dev->msi_cap + PCI_MSI_ADDRESS_LO, &ab->pci.msi.addr_lo); diff --git a/lede/package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch b/lede/package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch index 71373b2136..8d2c16499a 100644 --- a/lede/package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch +++ b/lede/package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch @@ -31,7 +31,7 @@ Signed-off-by: Robert Marko { .hw_rev = ATH11K_HW_IPQ8074, .name = "ipq8074 hw2.0", -@@ -2040,7 +2040,8 @@ static void ath11k_core_reset(struct wor +@@ -2134,7 +2134,8 @@ static void ath11k_core_reset(struct wor static int ath11k_init_hw_params(struct ath11k_base *ab) { const struct ath11k_hw_params *hw_params = NULL; @@ -41,7 +41,7 @@ Signed-off-by: Robert Marko for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) { hw_params = &ath11k_hw_params[i]; -@@ -2056,7 +2057,31 @@ static int ath11k_init_hw_params(struct +@@ -2150,7 +2151,31 @@ static int ath11k_init_hw_params(struct ab->hw_params = *hw_params; diff --git a/lede/package/kernel/mac80211/patches/ath11k/906-ath11k-Disable-coldboot-calibration-for-IPQ6018.patch b/lede/package/kernel/mac80211/patches/ath11k/906-ath11k-Disable-coldboot-calibration-for-IPQ6018.patch index 39a11d7225..06cdcb4128 100644 --- a/lede/package/kernel/mac80211/patches/ath11k/906-ath11k-Disable-coldboot-calibration-for-IPQ6018.patch +++ b/lede/package/kernel/mac80211/patches/ath11k/906-ath11k-Disable-coldboot-calibration-for-IPQ6018.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath11k/core.c +++ b/drivers/net/wireless/ath/ath11k/core.c -@@ -168,8 +168,8 @@ static struct ath11k_hw_params ath11k_hw +@@ -169,8 +169,8 @@ static struct ath11k_hw_params ath11k_hw .supports_shadow_regs = false, .idle_ps = false, .supports_sta_ps = false, diff --git a/lede/package/kernel/mac80211/patches/ath11k/907-ath11k-6.12-support.patch b/lede/package/kernel/mac80211/patches/ath11k/907-ath11k-6.12-support.patch deleted file mode 100644 index 6d1cba6c7c..0000000000 --- a/lede/package/kernel/mac80211/patches/ath11k/907-ath11k-6.12-support.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- a/drivers/net/wireless/ath/ath11k/mhi.c -+++ b/drivers/net/wireless/ath/ath11k/mhi.c -@@ -343,8 +343,10 @@ - return "MHI_CB_FATAL_ERROR"; - case MHI_CB_BW_REQ: - return "MHI_CB_BW_REQ"; -+#if LINUX_VERSION_IS_LESS(6,11,0) - case MHI_CB_EE_SBL_MODE: - return "MHI_CB_EE_SBL_MODE"; -+#endif - default: - return "UNKNOWN"; - } -@@ -367,9 +369,11 @@ - if (!(test_bit(ATH11K_FLAG_UNREGISTERING, &ab->dev_flags))) - queue_work(ab->workqueue_aux, &ab->reset_work); - break; -+#if LINUX_VERSION_IS_LESS(6,11,0) - case MHI_CB_EE_SBL_MODE: - ath11k_mhi_qrtr_instance_set(mhi_cntrl); - break; -+#endif - default: - break; - } diff --git a/lede/package/kernel/mac80211/patches/build/236-fix-genlmsg_multicast_allns-build-error.patch b/lede/package/kernel/mac80211/patches/build/236-fix-genlmsg_multicast_allns-build-error.patch index 891099c30b..345415a1fb 100644 --- a/lede/package/kernel/mac80211/patches/build/236-fix-genlmsg_multicast_allns-build-error.patch +++ b/lede/package/kernel/mac80211/patches/build/236-fix-genlmsg_multicast_allns-build-error.patch @@ -69,7 +69,7 @@ Signed-off-by: Sasha Levin --- a/backport-include/net/genetlink.h +++ b/backport-include/net/genetlink.h -@@ -150,7 +150,7 @@ int genlmsg_multicast(const struct genl_ +@@ -199,7 +199,7 @@ int genlmsg_multicast(const struct genl_ #define genlmsg_multicast_allns LINUX_BACKPORT(genlmsg_multicast_allns) int backport_genlmsg_multicast_allns(const struct genl_family *family, struct sk_buff *skb, u32 portid, @@ -80,7 +80,7 @@ Signed-off-by: Sasha Levin static inline struct nlattr **genl_family_attrbuf(struct genl_family *family) --- a/compat/backport-genetlink.c +++ b/compat/backport-genetlink.c -@@ -198,23 +198,23 @@ int genlmsg_multicast(const struct genl_ +@@ -364,23 +364,23 @@ int genlmsg_multicast(const struct genl_ } EXPORT_SYMBOL_GPL(genlmsg_multicast); @@ -108,7 +108,7 @@ Signed-off-by: Sasha Levin if (!err) delivered = true; else if (err != -ESRCH) -@@ -223,25 +223,29 @@ static int genlmsg_mcast(struct sk_buff +@@ -389,25 +389,29 @@ static int genlmsg_mcast(struct sk_buff prev = net; } @@ -143,7 +143,7 @@ Signed-off-by: Sasha Levin EXPORT_SYMBOL_GPL(backport_genlmsg_multicast_allns); --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c -@@ -17596,10 +17596,15 @@ +@@ -17567,10 +17567,15 @@ void nl80211_common_reg_change_event(enu genlmsg_end(msg, hdr); @@ -159,7 +159,7 @@ Signed-off-by: Sasha Levin return; -@@ -18217,10 +18222,15 @@ +@@ -18188,10 +18193,15 @@ void nl80211_send_beacon_hint_event(stru genlmsg_end(msg, hdr); diff --git a/lede/package/kernel/mac80211/patches/build/990-add_kernel_6.6_support.patch b/lede/package/kernel/mac80211/patches/build/990-add_kernel_6.6_support.patch index 33ed7360c5..070317f360 100644 --- a/lede/package/kernel/mac80211/patches/build/990-add_kernel_6.6_support.patch +++ b/lede/package/kernel/mac80211/patches/build/990-add_kernel_6.6_support.patch @@ -113,7 +113,7 @@ u8 rx_flags; --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c -@@ -5750,7 +5750,11 @@ +@@ -5749,7 +5749,11 @@ static int __init init_mac80211_hwsim(vo if (err) goto out_exit_netlink; diff --git a/lede/package/kernel/mac80211/patches/build/991-add_kernel_6.12_support.patch b/lede/package/kernel/mac80211/patches/build/991-add_kernel_6.12_support.patch index 2d92c7fb6f..8f6d787812 100644 --- a/lede/package/kernel/mac80211/patches/build/991-add_kernel_6.12_support.patch +++ b/lede/package/kernel/mac80211/patches/build/991-add_kernel_6.12_support.patch @@ -14,7 +14,7 @@ static inline u32 __get_unaligned_be24(const u8 *p) --- a/net/wireless/core.c +++ b/net/wireless/core.c -@@ -164,11 +164,19 @@ +@@ -164,11 +164,19 @@ int cfg80211_switch_netns(struct cfg8021 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { if (!wdev->netdev) continue; @@ -34,7 +34,7 @@ } if (err) { -@@ -180,11 +188,19 @@ +@@ -180,11 +188,19 @@ int cfg80211_switch_netns(struct cfg8021 list) { if (!wdev->netdev) continue; @@ -54,7 +54,7 @@ } return err; -@@ -1413,7 +1429,11 @@ +@@ -1428,7 +1444,11 @@ static int cfg80211_netdev_notifier_call SET_NETDEV_DEVTYPE(dev, &wiphy_type); wdev->netdev = dev; /* can only change netns with wiphy */ @@ -67,8 +67,8 @@ cfg80211_init_wdev(wdev); break; --- a/net/mac80211/rc80211_minstrel_ht_debugfs.c -+++ a/net/mac80211/rc80211_minstrel_ht_debugfs.c -@@ -187,7 +187,9 @@ ++++ b/net/mac80211/rc80211_minstrel_ht_debugfs.c +@@ -187,7 +187,9 @@ static const struct file_operations mins .open = minstrel_ht_stats_open, .read = minstrel_stats_read, .release = minstrel_stats_release, @@ -78,7 +78,7 @@ }; static char * -@@ -323,7 +325,9 @@ +@@ -323,7 +325,9 @@ static const struct file_operations mins .open = minstrel_ht_stats_csv_open, .read = minstrel_stats_read, .release = minstrel_stats_release, diff --git a/lede/package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch b/lede/package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch index 0ac972955f..e2c10b6c33 100644 --- a/lede/package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch +++ b/lede/package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch @@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -3984,7 +3984,7 @@ struct ieee80211_txq *ieee80211_next_txq +@@ -3988,7 +3988,7 @@ struct ieee80211_txq *ieee80211_next_txq if (deficit < 0) sta->airtime[txqi->txq.ac].deficit += @@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau if (deficit < 0 || !aql_check) { list_move_tail(&txqi->schedule_order, -@@ -4127,7 +4127,8 @@ bool ieee80211_txq_may_transmit(struct i +@@ -4131,7 +4131,8 @@ bool ieee80211_txq_may_transmit(struct i } sta = container_of(iter->txq.sta, struct sta_info, sta); if (ieee80211_sta_deficit(sta, ac) < 0) @@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau list_move_tail(&iter->schedule_order, &local->active_txqs[ac]); } -@@ -4135,7 +4136,7 @@ bool ieee80211_txq_may_transmit(struct i +@@ -4139,7 +4140,7 @@ bool ieee80211_txq_may_transmit(struct i if (sta->airtime[ac].deficit >= 0) goto out; diff --git a/lede/package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch b/lede/package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch index d14ba05e69..c7ac38a77b 100644 --- a/lede/package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch +++ b/lede/package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch @@ -51,7 +51,7 @@ Signed-off-by: Johannes Berg * * Drivers can optionally delegate responsibility for scheduling queues to * mac80211, to take advantage of airtime fairness accounting. In this case, to -@@ -2248,8 +2249,8 @@ struct ieee80211_link_sta { +@@ -2259,8 +2260,8 @@ struct ieee80211_link_sta { * For non MLO STA it will point to the deflink data. For MLO STA * ieee80211_sta_recalc_aggregates() must be called to update it. * @support_p2p_ps: indicates whether the STA supports P2P PS mechanism or not. @@ -62,7 +62,7 @@ Signed-off-by: Johannes Berg * @deflink: This holds the default link STA information, for non MLO STA all link * specific STA information is accessed through @deflink or through * link[0] which points to address of @deflink. For MLO Link STA -@@ -5687,7 +5688,7 @@ void ieee80211_key_replay(struct ieee802 +@@ -5698,7 +5699,7 @@ void ieee80211_key_replay(struct ieee802 * @hw: pointer as obtained from ieee80211_alloc_hw(). * @queue: queue number (counted from zero). * @@ -71,7 +71,7 @@ Signed-off-by: Johannes Berg */ void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue); -@@ -5696,7 +5697,7 @@ void ieee80211_wake_queue(struct ieee802 +@@ -5707,7 +5708,7 @@ void ieee80211_wake_queue(struct ieee802 * @hw: pointer as obtained from ieee80211_alloc_hw(). * @queue: queue number (counted from zero). * @@ -80,7 +80,7 @@ Signed-off-by: Johannes Berg */ void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue); -@@ -5705,7 +5706,7 @@ void ieee80211_stop_queue(struct ieee802 +@@ -5716,7 +5717,7 @@ void ieee80211_stop_queue(struct ieee802 * @hw: pointer as obtained from ieee80211_alloc_hw(). * @queue: queue number (counted from zero). * @@ -89,7 +89,7 @@ Signed-off-by: Johannes Berg * * Return: %true if the queue is stopped. %false otherwise. */ -@@ -5716,7 +5717,7 @@ int ieee80211_queue_stopped(struct ieee8 +@@ -5727,7 +5728,7 @@ int ieee80211_queue_stopped(struct ieee8 * ieee80211_stop_queues - stop all queues * @hw: pointer as obtained from ieee80211_alloc_hw(). * @@ -98,7 +98,7 @@ Signed-off-by: Johannes Berg */ void ieee80211_stop_queues(struct ieee80211_hw *hw); -@@ -5724,7 +5725,7 @@ void ieee80211_stop_queues(struct ieee80 +@@ -5735,7 +5736,7 @@ void ieee80211_stop_queues(struct ieee80 * ieee80211_wake_queues - wake all queues * @hw: pointer as obtained from ieee80211_alloc_hw(). * @@ -107,7 +107,7 @@ Signed-off-by: Johannes Berg */ void ieee80211_wake_queues(struct ieee80211_hw *hw); -@@ -6946,6 +6947,18 @@ static inline struct sk_buff *ieee80211_ +@@ -6957,6 +6958,18 @@ static inline struct sk_buff *ieee80211_ } /** diff --git a/lede/package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch b/lede/package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch index f9f9977cee..716b10977b 100644 --- a/lede/package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch +++ b/lede/package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch @@ -387,7 +387,7 @@ Signed-off-by: Johannes Berg * Set the WLAN_TDLS_TEARDOWN flag to indicate a teardown in progress. --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -1600,9 +1600,6 @@ int ieee80211_txq_setup_flows(struct iee +@@ -1604,9 +1604,6 @@ int ieee80211_txq_setup_flows(struct iee bool supp_vht = false; enum nl80211_band band; @@ -397,7 +397,7 @@ Signed-off-by: Johannes Berg ret = fq_init(fq, 4096); if (ret) return ret; -@@ -1650,9 +1647,6 @@ void ieee80211_txq_teardown_flows(struct +@@ -1654,9 +1651,6 @@ void ieee80211_txq_teardown_flows(struct { struct fq *fq = &local->fq; @@ -407,7 +407,7 @@ Signed-off-by: Johannes Berg kfree(local->cvars); local->cvars = NULL; -@@ -1669,8 +1663,7 @@ static bool ieee80211_queue_skb(struct i +@@ -1673,8 +1667,7 @@ static bool ieee80211_queue_skb(struct i struct ieee80211_vif *vif; struct txq_info *txqi; @@ -417,7 +417,7 @@ Signed-off-by: Johannes Berg return false; if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) -@@ -4193,12 +4186,7 @@ void __ieee80211_subif_start_xmit(struct +@@ -4197,12 +4190,7 @@ void __ieee80211_subif_start_xmit(struct if (IS_ERR(sta)) sta = NULL; @@ -431,7 +431,7 @@ Signed-off-by: Johannes Berg ieee80211_aggr_check(sdata, sta, skb); sk_pacing_shift_update(skb->sk, sdata->local->hw.tx_sk_pacing_shift); -@@ -4509,11 +4497,7 @@ static void ieee80211_8023_xmit(struct i +@@ -4513,11 +4501,7 @@ static void ieee80211_8023_xmit(struct i struct tid_ampdu_tx *tid_tx; u8 tid; @@ -444,7 +444,7 @@ Signed-off-by: Johannes Berg if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) && test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)) -@@ -4767,9 +4751,6 @@ void ieee80211_tx_pending(struct tasklet +@@ -4771,9 +4755,6 @@ void ieee80211_tx_pending(struct tasklet if (!txok) break; } @@ -454,7 +454,7 @@ Signed-off-by: Johannes Berg } spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); -@@ -5962,10 +5943,9 @@ int ieee80211_tx_control_port(struct wip +@@ -5966,10 +5947,9 @@ int ieee80211_tx_control_port(struct wip } if (!IS_ERR(sta)) { diff --git a/lede/package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch b/lede/package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch index 812b12189c..0a93fafbc3 100644 --- a/lede/package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch +++ b/lede/package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch @@ -59,7 +59,7 @@ Signed-off-by: Felix Fietkau flow = fq_find_fattest_flow(fq); --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -1807,6 +1807,10 @@ struct ieee80211_vif_cfg { +@@ -1818,6 +1818,10 @@ struct ieee80211_vif_cfg { * @addr: address of this interface * @p2p: indicates whether this AP or STA interface is a p2p * interface, i.e. a GO or p2p-sta respectively @@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau * @driver_flags: flags/capabilities the driver has for this interface, * these need to be set (or cleared) when the interface is added * or, if supported by the driver, the interface type is changed -@@ -1846,6 +1850,7 @@ struct ieee80211_vif { +@@ -1857,6 +1861,7 @@ struct ieee80211_vif { struct ieee80211_txq *txq; @@ -90,7 +90,7 @@ Signed-off-by: Felix Fietkau --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -1356,7 +1356,11 @@ static struct txq_info *ieee80211_get_tx +@@ -1360,7 +1360,11 @@ static struct txq_info *ieee80211_get_tx static void ieee80211_set_skb_enqueue_time(struct sk_buff *skb) { @@ -103,7 +103,7 @@ Signed-off-by: Felix Fietkau } static u32 codel_skb_len_func(const struct sk_buff *skb) -@@ -3579,55 +3583,79 @@ ieee80211_xmit_fast_finish(struct ieee80 +@@ -3583,55 +3587,79 @@ ieee80211_xmit_fast_finish(struct ieee80 return TX_CONTINUE; } @@ -219,7 +219,7 @@ Signed-off-by: Felix Fietkau /* will not be crypto-handled beyond what we do here, so use false * as the may-encrypt argument for the resize to not account for -@@ -3636,10 +3664,8 @@ static bool ieee80211_xmit_fast(struct i +@@ -3640,10 +3668,8 @@ static bool ieee80211_xmit_fast(struct i if (unlikely(ieee80211_skb_resize(sdata, skb, max_t(int, extra_head + hw_headroom - skb_headroom(skb), 0), @@ -232,7 +232,7 @@ Signed-off-by: Felix Fietkau memcpy(ð, skb->data, ETH_HLEN - 2); hdr = skb_push(skb, extra_head); -@@ -3653,7 +3679,7 @@ static bool ieee80211_xmit_fast(struct i +@@ -3657,7 +3683,7 @@ static bool ieee80211_xmit_fast(struct i info->control.vif = &sdata->vif; info->flags = IEEE80211_TX_CTL_FIRST_FRAGMENT | IEEE80211_TX_CTL_DONTFRAG | @@ -241,7 +241,7 @@ Signed-off-by: Felix Fietkau info->control.flags = IEEE80211_TX_CTRL_FAST_XMIT | u32_encode_bits(IEEE80211_LINK_UNSPECIFIED, IEEE80211_TX_CTRL_MLO_LINK); -@@ -3677,16 +3703,14 @@ static bool ieee80211_xmit_fast(struct i +@@ -3681,16 +3707,14 @@ static bool ieee80211_xmit_fast(struct i tx.key = fast_tx->key; if (ieee80211_queue_skb(local, sdata, sta, skb)) @@ -261,7 +261,7 @@ Signed-off-by: Felix Fietkau if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) sdata = container_of(sdata->bss, -@@ -3694,6 +3718,56 @@ static bool ieee80211_xmit_fast(struct i +@@ -3698,6 +3722,56 @@ static bool ieee80211_xmit_fast(struct i __skb_queue_tail(&tx.skbs, skb); ieee80211_tx_frags(local, &sdata->vif, sta, &tx.skbs, false); @@ -318,7 +318,7 @@ Signed-off-by: Felix Fietkau return true; } -@@ -4201,31 +4275,14 @@ void __ieee80211_subif_start_xmit(struct +@@ -4205,31 +4279,14 @@ void __ieee80211_subif_start_xmit(struct goto out; } @@ -358,7 +358,7 @@ Signed-off-by: Felix Fietkau } skb_list_walk_safe(skb, skb, next) { -@@ -4443,9 +4500,11 @@ normal: +@@ -4447,9 +4504,11 @@ normal: return NETDEV_TX_OK; } @@ -373,7 +373,7 @@ Signed-off-by: Felix Fietkau { struct ieee80211_local *local = sdata->local; struct ieee80211_tx_control control = {}; -@@ -4454,14 +4513,6 @@ static bool ieee80211_tx_8023(struct iee +@@ -4458,14 +4517,6 @@ static bool ieee80211_tx_8023(struct iee unsigned long flags; int q = info->hw_queue; @@ -388,7 +388,7 @@ Signed-off-by: Felix Fietkau spin_lock_irqsave(&local->queue_stop_reason_lock, flags); if (local->queue_stop_reasons[q] || -@@ -4488,6 +4539,26 @@ static bool ieee80211_tx_8023(struct iee +@@ -4492,6 +4543,26 @@ static bool ieee80211_tx_8023(struct iee return true; } @@ -415,7 +415,7 @@ Signed-off-by: Felix Fietkau static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata, struct net_device *dev, struct sta_info *sta, struct ieee80211_key *key, struct sk_buff *skb) -@@ -4495,9 +4566,13 @@ static void ieee80211_8023_xmit(struct i +@@ -4499,9 +4570,13 @@ static void ieee80211_8023_xmit(struct i struct ieee80211_tx_info *info; struct ieee80211_local *local = sdata->local; struct tid_ampdu_tx *tid_tx; @@ -430,7 +430,7 @@ Signed-off-by: Felix Fietkau if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) && test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)) -@@ -4507,9 +4582,6 @@ static void ieee80211_8023_xmit(struct i +@@ -4511,9 +4586,6 @@ static void ieee80211_8023_xmit(struct i if (unlikely(!skb)) return; @@ -440,7 +440,7 @@ Signed-off-by: Felix Fietkau ieee80211_aggr_check(sdata, sta, skb); tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK; -@@ -4523,22 +4595,20 @@ static void ieee80211_8023_xmit(struct i +@@ -4527,22 +4599,20 @@ static void ieee80211_8023_xmit(struct i return; } @@ -471,7 +471,7 @@ Signed-off-by: Felix Fietkau if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) sdata = container_of(sdata->bss, -@@ -4550,6 +4620,24 @@ static void ieee80211_8023_xmit(struct i +@@ -4554,6 +4624,24 @@ static void ieee80211_8023_xmit(struct i if (key) info->control.hw_key = &key->conf; @@ -496,7 +496,7 @@ Signed-off-by: Felix Fietkau ieee80211_tx_8023(sdata, skb, sta, false); return; -@@ -4591,6 +4679,7 @@ netdev_tx_t ieee80211_subif_start_xmit_8 +@@ -4595,6 +4683,7 @@ netdev_tx_t ieee80211_subif_start_xmit_8 key->conf.cipher == WLAN_CIPHER_SUITE_TKIP)) goto skip_offload; diff --git a/lede/package/kernel/mac80211/patches/subsys/319-wifi-mac80211-mesh-fast-xmit-support.patch b/lede/package/kernel/mac80211/patches/subsys/319-wifi-mac80211-mesh-fast-xmit-support.patch index 968d2885f2..bbca773f6c 100644 --- a/lede/package/kernel/mac80211/patches/subsys/319-wifi-mac80211-mesh-fast-xmit-support.patch +++ b/lede/package/kernel/mac80211/patches/subsys/319-wifi-mac80211-mesh-fast-xmit-support.patch @@ -728,7 +728,7 @@ Signed-off-by: Felix Fietkau --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -3022,6 +3022,9 @@ void ieee80211_check_fast_xmit(struct st +@@ -3026,6 +3026,9 @@ void ieee80211_check_fast_xmit(struct st if (!ieee80211_hw_check(&local->hw, SUPPORT_FAST_XMIT)) return; @@ -738,7 +738,7 @@ Signed-off-by: Felix Fietkau /* Locking here protects both the pointer itself, and against concurrent * invocations winning data access races to, e.g., the key pointer that * is used. -@@ -3403,6 +3406,9 @@ static bool ieee80211_amsdu_aggregate(st +@@ -3407,6 +3410,9 @@ static bool ieee80211_amsdu_aggregate(st if (sdata->vif.offload_flags & IEEE80211_OFFLOAD_ENCAP_ENABLED) return false; @@ -748,7 +748,7 @@ Signed-off-by: Felix Fietkau if (skb_is_gso(skb)) return false; -@@ -3635,10 +3641,11 @@ free: +@@ -3639,10 +3645,11 @@ free: return NULL; } @@ -764,7 +764,7 @@ Signed-off-by: Felix Fietkau { struct ieee80211_local *local = sdata->local; struct ieee80211_hdr *hdr = (void *)fast_tx->hdr; -@@ -3647,7 +3654,6 @@ static void __ieee80211_xmit_fast(struct +@@ -3651,7 +3658,6 @@ static void __ieee80211_xmit_fast(struct ieee80211_tx_result r; int hw_headroom = sdata->local->hw.extra_tx_headroom; int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2); @@ -772,7 +772,7 @@ Signed-off-by: Felix Fietkau skb = skb_share_check(skb, GFP_ATOMIC); if (unlikely(!skb)) -@@ -3667,11 +3673,10 @@ static void __ieee80211_xmit_fast(struct +@@ -3671,11 +3677,10 @@ static void __ieee80211_xmit_fast(struct ENCRYPT_NO))) goto free; @@ -786,7 +786,7 @@ Signed-off-by: Felix Fietkau info = IEEE80211_SKB_CB(skb); memset(info, 0, sizeof(*info)); -@@ -3690,7 +3695,8 @@ static void __ieee80211_xmit_fast(struct +@@ -3694,7 +3699,8 @@ static void __ieee80211_xmit_fast(struct #endif if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) { @@ -796,7 +796,7 @@ Signed-off-by: Felix Fietkau *ieee80211_get_qos_ctl(hdr) = tid; } -@@ -3733,6 +3739,7 @@ static bool ieee80211_xmit_fast(struct i +@@ -3737,6 +3743,7 @@ static bool ieee80211_xmit_fast(struct i struct ieee80211_hdr *hdr = (void *)fast_tx->hdr; struct tid_ampdu_tx *tid_tx = NULL; struct sk_buff *next; @@ -804,7 +804,7 @@ Signed-off-by: Felix Fietkau u8 tid = IEEE80211_NUM_TIDS; /* control port protocol needs a lot of special handling */ -@@ -3758,6 +3765,8 @@ static bool ieee80211_xmit_fast(struct i +@@ -3762,6 +3769,8 @@ static bool ieee80211_xmit_fast(struct i } } @@ -813,7 +813,7 @@ Signed-off-by: Felix Fietkau /* after this point (skb is modified) we cannot return false */ skb = ieee80211_tx_skb_fixup(skb, ieee80211_sdata_netdev_features(sdata)); if (!skb) -@@ -3765,7 +3774,8 @@ static bool ieee80211_xmit_fast(struct i +@@ -3769,7 +3778,8 @@ static bool ieee80211_xmit_fast(struct i skb_list_walk_safe(skb, skb, next) { skb_mark_not_on_list(skb); @@ -823,7 +823,7 @@ Signed-off-by: Felix Fietkau } return true; -@@ -4252,8 +4262,15 @@ void __ieee80211_subif_start_xmit(struct +@@ -4256,8 +4266,15 @@ void __ieee80211_subif_start_xmit(struct return; } @@ -839,7 +839,7 @@ Signed-off-by: Felix Fietkau if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) goto out_free; -@@ -4263,8 +4280,6 @@ void __ieee80211_subif_start_xmit(struct +@@ -4267,8 +4284,6 @@ void __ieee80211_subif_start_xmit(struct skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, sta, skb)); ieee80211_aggr_check(sdata, sta, skb); diff --git a/lede/package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch b/lede/package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch index 28b1ff1106..711c5f3629 100644 --- a/lede/package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch +++ b/lede/package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch @@ -117,7 +117,7 @@ Signed-off-by: Felix Fietkau void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -1191,10 +1191,8 @@ static bool ieee80211_tx_prep_agg(struct +@@ -1195,10 +1195,8 @@ static bool ieee80211_tx_prep_agg(struct return queued; } diff --git a/lede/package/kernel/mac80211/patches/subsys/325-wifi-mac80211-introduce-ieee80211_refresh_tx_agg_ses.patch b/lede/package/kernel/mac80211/patches/subsys/325-wifi-mac80211-introduce-ieee80211_refresh_tx_agg_ses.patch index 1be5fcfbfa..978f82b24e 100644 --- a/lede/package/kernel/mac80211/patches/subsys/325-wifi-mac80211-introduce-ieee80211_refresh_tx_agg_ses.patch +++ b/lede/package/kernel/mac80211/patches/subsys/325-wifi-mac80211-introduce-ieee80211_refresh_tx_agg_ses.patch @@ -13,7 +13,7 @@ Signed-off-by: Ryder Lee --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -5964,6 +5964,18 @@ void ieee80211_queue_delayed_work(struct +@@ -5975,6 +5975,18 @@ void ieee80211_queue_delayed_work(struct unsigned long delay); /** diff --git a/lede/package/kernel/mac80211/patches/subsys/327-wifi-mac80211-add-support-for-letting-drivers-regist.patch b/lede/package/kernel/mac80211/patches/subsys/327-wifi-mac80211-add-support-for-letting-drivers-regist.patch index ac290b5360..e47b10bf17 100644 --- a/lede/package/kernel/mac80211/patches/subsys/327-wifi-mac80211-add-support-for-letting-drivers-regist.patch +++ b/lede/package/kernel/mac80211/patches/subsys/327-wifi-mac80211-add-support-for-letting-drivers-regist.patch @@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -4192,6 +4192,10 @@ struct ieee80211_prep_tx_info { +@@ -4203,6 +4203,10 @@ struct ieee80211_prep_tx_info { * Note that a sta can also be inserted or removed with valid links, * i.e. passed to @sta_add/@sta_state with sta->valid_links not zero. * In fact, cannot change from having valid_links and not having them. @@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau */ struct ieee80211_ops { void (*tx)(struct ieee80211_hw *hw, -@@ -4547,6 +4551,11 @@ struct ieee80211_ops { +@@ -4558,6 +4562,11 @@ struct ieee80211_ops { struct ieee80211_vif *vif, struct ieee80211_sta *sta, u16 old_links, u16 new_links); diff --git a/lede/package/kernel/mac80211/patches/subsys/330-wifi-ieee80211-correctly-mark-FTM-frames-non-buffera.patch b/lede/package/kernel/mac80211/patches/subsys/330-wifi-ieee80211-correctly-mark-FTM-frames-non-buffera.patch index 079dd2a868..1e57a590b4 100644 --- a/lede/package/kernel/mac80211/patches/subsys/330-wifi-ieee80211-correctly-mark-FTM-frames-non-buffera.patch +++ b/lede/package/kernel/mac80211/patches/subsys/330-wifi-ieee80211-correctly-mark-FTM-frames-non-buffera.patch @@ -15,7 +15,7 @@ Reviewed-by: Peer, Ilan --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c -@@ -601,8 +601,9 @@ static void iwl_mvm_skb_prepare_status(s +@@ -605,8 +605,9 @@ static void iwl_mvm_skb_prepare_status(s static int iwl_mvm_get_ctrl_vif_queue(struct iwl_mvm *mvm, struct ieee80211_tx_info *info, @@ -26,7 +26,7 @@ Reviewed-by: Peer, Ilan struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(info->control.vif); __le16 fc = hdr->frame_control; -@@ -621,7 +622,7 @@ static int iwl_mvm_get_ctrl_vif_queue(st +@@ -625,7 +626,7 @@ static int iwl_mvm_get_ctrl_vif_queue(st * reason 7 ("Class 3 frame received from nonassociated STA"). */ if (ieee80211_is_mgmt(fc) && @@ -35,7 +35,7 @@ Reviewed-by: Peer, Ilan ieee80211_is_deauth(fc) || ieee80211_is_disassoc(fc))) return mvm->probe_queue; -@@ -740,7 +741,7 @@ int iwl_mvm_tx_skb_non_sta(struct iwl_mv +@@ -744,7 +745,7 @@ int iwl_mvm_tx_skb_non_sta(struct iwl_mv else sta_id = mvmvif->mcast_sta.sta_id; @@ -114,7 +114,7 @@ Reviewed-by: Peer, Ilan */ --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -488,7 +488,7 @@ ieee80211_tx_h_unicast_ps_buf(struct iee +@@ -492,7 +492,7 @@ ieee80211_tx_h_unicast_ps_buf(struct iee int ac = skb_get_queue_mapping(tx->skb); if (ieee80211_is_mgmt(hdr->frame_control) && @@ -123,7 +123,7 @@ Reviewed-by: Peer, Ilan info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; return TX_CONTINUE; } -@@ -1326,7 +1326,7 @@ static struct txq_info *ieee80211_get_tx +@@ -1330,7 +1330,7 @@ static struct txq_info *ieee80211_get_tx if (!(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) && unlikely(!ieee80211_is_data_present(hdr->frame_control))) { if ((!ieee80211_is_mgmt(hdr->frame_control) || diff --git a/lede/package/kernel/mac80211/patches/subsys/333-wifi-mac80211-add-flush_sta-method.patch b/lede/package/kernel/mac80211/patches/subsys/333-wifi-mac80211-add-flush_sta-method.patch index 3bba0b7e66..1a70e77b51 100644 --- a/lede/package/kernel/mac80211/patches/subsys/333-wifi-mac80211-add-flush_sta-method.patch +++ b/lede/package/kernel/mac80211/patches/subsys/333-wifi-mac80211-add-flush_sta-method.patch @@ -12,7 +12,7 @@ Reviewed-by: Greenman, Gregory --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -3918,6 +3918,10 @@ struct ieee80211_prep_tx_info { +@@ -3929,6 +3929,10 @@ struct ieee80211_prep_tx_info { * Note that vif can be NULL. * The callback can sleep. * @@ -23,7 +23,7 @@ Reviewed-by: Greenman, Gregory * @channel_switch: Drivers that need (or want) to offload the channel * switch operation for CSAs received from the AP may implement this * callback. They must then call ieee80211_chswitch_done() to indicate -@@ -4372,6 +4376,8 @@ struct ieee80211_ops { +@@ -4383,6 +4387,8 @@ struct ieee80211_ops { #endif void (*flush)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u32 queues, bool drop); diff --git a/lede/package/kernel/mac80211/patches/subsys/336-v6.4-wifi-mac80211-generate-EMA-beacons-in-AP-mode.patch b/lede/package/kernel/mac80211/patches/subsys/336-v6.4-wifi-mac80211-generate-EMA-beacons-in-AP-mode.patch index 088f468e37..8eb93b0ef8 100644 --- a/lede/package/kernel/mac80211/patches/subsys/336-v6.4-wifi-mac80211-generate-EMA-beacons-in-AP-mode.patch +++ b/lede/package/kernel/mac80211/patches/subsys/336-v6.4-wifi-mac80211-generate-EMA-beacons-in-AP-mode.patch @@ -38,7 +38,7 @@ Signed-off-by: Johannes Berg --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -5252,6 +5252,74 @@ ieee80211_beacon_get_template(struct iee +@@ -5263,6 +5263,74 @@ ieee80211_beacon_get_template(struct iee unsigned int link_id); /** @@ -168,7 +168,7 @@ Signed-off-by: Johannes Berg --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -5205,13 +5205,20 @@ ieee80211_beacon_get_finish(struct ieee8 +@@ -5209,13 +5209,20 @@ ieee80211_beacon_get_finish(struct ieee8 } static void @@ -192,7 +192,7 @@ Signed-off-by: Johannes Berg for (i = 0; i < beacon->mbssid_ies->cnt; i++) skb_put_data(skb, beacon->mbssid_ies->elem[i].data, beacon->mbssid_ies->elem[i].len); -@@ -5224,7 +5231,8 @@ ieee80211_beacon_get_ap(struct ieee80211 +@@ -5228,7 +5235,8 @@ ieee80211_beacon_get_ap(struct ieee80211 struct ieee80211_mutable_offsets *offs, bool is_template, struct beacon_data *beacon, @@ -202,7 +202,7 @@ Signed-off-by: Johannes Berg { struct ieee80211_local *local = hw_to_local(hw); struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); -@@ -5243,7 +5251,9 @@ ieee80211_beacon_get_ap(struct ieee80211 +@@ -5247,7 +5255,9 @@ ieee80211_beacon_get_ap(struct ieee80211 /* headroom, head length, * tail length, maximum TIM length and multiple BSSID length */ @@ -213,7 +213,7 @@ Signed-off-by: Johannes Berg skb = dev_alloc_skb(local->tx_headroom + beacon->head_len + beacon->tail_len + 256 + local->hw.extra_beacon_tailroom + mbssid_len); -@@ -5261,7 +5271,7 @@ ieee80211_beacon_get_ap(struct ieee80211 +@@ -5265,7 +5275,7 @@ ieee80211_beacon_get_ap(struct ieee80211 offs->cntdwn_counter_offs[0] = beacon->cntdwn_counter_offsets[0]; if (mbssid_len) { @@ -222,7 +222,7 @@ Signed-off-by: Johannes Berg offs->mbssid_off = skb->len - mbssid_len; } -@@ -5280,12 +5290,51 @@ ieee80211_beacon_get_ap(struct ieee80211 +@@ -5284,12 +5294,51 @@ ieee80211_beacon_get_ap(struct ieee80211 return skb; } @@ -275,7 +275,7 @@ Signed-off-by: Johannes Berg { struct ieee80211_local *local = hw_to_local(hw); struct beacon_data *beacon = NULL; -@@ -5314,8 +5363,29 @@ __ieee80211_beacon_get(struct ieee80211_ +@@ -5318,8 +5367,29 @@ __ieee80211_beacon_get(struct ieee80211_ if (!beacon) goto out; @@ -307,7 +307,7 @@ Signed-off-by: Johannes Berg } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) { struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; struct ieee80211_hdr *hdr; -@@ -5403,10 +5473,50 @@ ieee80211_beacon_get_template(struct iee +@@ -5407,10 +5477,50 @@ ieee80211_beacon_get_template(struct iee struct ieee80211_mutable_offsets *offs, unsigned int link_id) { @@ -359,7 +359,7 @@ Signed-off-by: Johannes Berg struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 *tim_offset, u16 *tim_length, -@@ -5414,7 +5524,9 @@ struct sk_buff *ieee80211_beacon_get_tim +@@ -5418,7 +5528,9 @@ struct sk_buff *ieee80211_beacon_get_tim { struct ieee80211_mutable_offsets offs = {}; struct sk_buff *bcn = __ieee80211_beacon_get(hw, vif, &offs, false, diff --git a/lede/package/kernel/mac80211/patches/subsys/400-allow-ibss-mixed.patch b/lede/package/kernel/mac80211/patches/subsys/400-allow-ibss-mixed.patch index c38fa13f03..8701564887 100644 --- a/lede/package/kernel/mac80211/patches/subsys/400-allow-ibss-mixed.patch +++ b/lede/package/kernel/mac80211/patches/subsys/400-allow-ibss-mixed.patch @@ -16,7 +16,7 @@ and we should ignore this. --- a/net/wireless/core.c +++ b/net/wireless/core.c -@@ -614,21 +614,6 @@ static int wiphy_verify_combinations(str +@@ -630,21 +630,6 @@ static int wiphy_verify_combinations(str c->limits[j].max > 1)) return -EINVAL; diff --git a/lede/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch b/lede/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch index bc5e7e76cb..aeedcdab7f 100644 --- a/lede/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch +++ b/lede/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch @@ -18,7 +18,7 @@ --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -1677,6 +1677,7 @@ enum ieee80211_smps_mode { +@@ -1688,6 +1688,7 @@ enum ieee80211_smps_mode { * * @power_level: requested transmit power (in dBm), backward compatibility * value only that is set to the minimum of all interfaces @@ -26,7 +26,7 @@ * * @chandef: the channel definition to tune to * @radar_enabled: whether radar detection is enabled -@@ -1697,6 +1698,7 @@ enum ieee80211_smps_mode { +@@ -1708,6 +1709,7 @@ enum ieee80211_smps_mode { struct ieee80211_conf { u32 flags; int power_level, dynamic_ps_timeout; diff --git a/lede/package/kernel/mac80211/patches/subsys/780-avoid-crashing-missing-band.patch b/lede/package/kernel/mac80211/patches/subsys/780-avoid-crashing-missing-band.patch index 2bc11efd00..f8d3774265 100644 --- a/lede/package/kernel/mac80211/patches/subsys/780-avoid-crashing-missing-band.patch +++ b/lede/package/kernel/mac80211/patches/subsys/780-avoid-crashing-missing-band.patch @@ -18,7 +18,7 @@ Signed-off-by: David Bauer --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c -@@ -2422,6 +2422,13 @@ static void sta_stats_decode_rate(struct +@@ -2363,6 +2363,13 @@ static void sta_stats_decode_rate(struct sband = local->hw.wiphy->bands[band]; diff --git a/lede/package/kernel/mac80211/patches/subsys/900-add-eth-ieee80211_bss_conf.patch b/lede/package/kernel/mac80211/patches/subsys/900-add-eth-ieee80211_bss_conf.patch index 55e2e1b73c..80668db3d2 100644 --- a/lede/package/kernel/mac80211/patches/subsys/900-add-eth-ieee80211_bss_conf.patch +++ b/lede/package/kernel/mac80211/patches/subsys/900-add-eth-ieee80211_bss_conf.patch @@ -1,6 +1,6 @@ --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -673,6 +673,12 @@ +@@ -673,6 +673,12 @@ struct ieee80211_fils_discovery { * @he_full_ul_mumimo: does this BSS support the reception (AP) or transmission * (non-AP STA) of an HE TB PPDU on an RU that spans the entire PPDU * bandwidth @@ -13,7 +13,7 @@ */ struct ieee80211_bss_conf { const u8 *bssid; -@@ -758,6 +764,9 @@ +@@ -758,6 +764,9 @@ struct ieee80211_bss_conf { bool he_su_beamformee; bool he_mu_beamformer; bool he_full_ul_mumimo; @@ -25,7 +25,7 @@ /** --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -1307,6 +1307,27 @@ +@@ -1307,6 +1307,27 @@ static int ieee80211_start_ap(struct wip IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO; } diff --git a/mihomo/adapter/outbound/base.go b/mihomo/adapter/outbound/base.go index dd226f74a7..56bed9d53e 100644 --- a/mihomo/adapter/outbound/base.go +++ b/mihomo/adapter/outbound/base.go @@ -153,11 +153,11 @@ func (b *Base) DialOptions(opts ...dialer.Option) []dialer.Option { } type BasicOption struct { - TFO bool `proxy:"tfo,omitempty" group:"tfo,omitempty"` - MPTCP bool `proxy:"mptcp,omitempty" group:"mptcp,omitempty"` + TFO bool `proxy:"tfo,omitempty"` + MPTCP bool `proxy:"mptcp,omitempty"` Interface string `proxy:"interface-name,omitempty" group:"interface-name,omitempty"` RoutingMark int `proxy:"routing-mark,omitempty" group:"routing-mark,omitempty"` - IPVersion string `proxy:"ip-version,omitempty" group:"ip-version,omitempty"` + IPVersion string `proxy:"ip-version,omitempty"` DialerProxy string `proxy:"dialer-proxy,omitempty"` // don't apply this option into groups, but can set a group name in a proxy } diff --git a/mihomo/adapter/outboundgroup/groupbase.go b/mihomo/adapter/outboundgroup/groupbase.go index 69fbb61799..f2a567ae8c 100644 --- a/mihomo/adapter/outboundgroup/groupbase.go +++ b/mihomo/adapter/outboundgroup/groupbase.go @@ -46,6 +46,13 @@ type GroupBaseOption struct { } func NewGroupBase(opt GroupBaseOption) *GroupBase { + if opt.RoutingMark != 0 { + log.Warnln("The group [%s] with routing-mark configuration is deprecated, please set it directly on the proxy instead", opt.Name) + } + if opt.Interface != "" { + log.Warnln("The group [%s] with interface-name configuration is deprecated, please set it directly on the proxy instead", opt.Name) + } + var excludeFilterReg *regexp2.Regexp if opt.excludeFilter != "" { excludeFilterReg = regexp2.MustCompile(opt.excludeFilter, regexp2.None) diff --git a/mihomo/component/ca/config.go b/mihomo/component/ca/config.go index 9d002db639..0a76189270 100644 --- a/mihomo/component/ca/config.go +++ b/mihomo/component/ca/config.go @@ -17,7 +17,6 @@ import ( C "github.com/metacubex/mihomo/constant" ) -var trustCerts []*x509.Certificate var globalCertPool *x509.CertPool var mutex sync.RWMutex var errNotMatch = errors.New("certificate fingerprints do not match") @@ -30,11 +29,19 @@ var DisableSystemCa, _ = strconv.ParseBool(os.Getenv("DISABLE_SYSTEM_CA")) func AddCertificate(certificate string) error { mutex.Lock() defer mutex.Unlock() + if certificate == "" { return fmt.Errorf("certificate is empty") } - if cert, err := x509.ParseCertificate([]byte(certificate)); err == nil { - trustCerts = append(trustCerts, cert) + + if globalCertPool == nil { + initializeCertPool() + } + + if globalCertPool.AppendCertsFromPEM([]byte(certificate)) { + return nil + } else if cert, err := x509.ParseCertificate([]byte(certificate)); err == nil { + globalCertPool.AddCert(cert) return nil } else { return fmt.Errorf("add certificate failed") @@ -51,9 +58,6 @@ func initializeCertPool() { globalCertPool = x509.NewCertPool() } } - for _, cert := range trustCerts { - globalCertPool.AddCert(cert) - } if !DisableEmbedCa { globalCertPool.AppendCertsFromPEM(_CaCertificates) } @@ -62,7 +66,6 @@ func initializeCertPool() { func ResetCertificate() { mutex.Lock() defer mutex.Unlock() - trustCerts = nil initializeCertPool() } diff --git a/shadowsocks-libev/m4/mbedtls.m4 b/shadowsocks-libev/m4/mbedtls.m4 index 2c478b9601..a795790ca8 100644 --- a/shadowsocks-libev/m4/mbedtls.m4 +++ b/shadowsocks-libev/m4/mbedtls.m4 @@ -31,7 +31,12 @@ AC_DEFUN([ss_MBEDTLS], AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ +#include +#if MBEDTLS_VERSION_NUMBER >= 0x03000000 +#include +#else #include +#endif ]], [[ #ifndef MBEDTLS_CIPHER_MODE_CFB @@ -48,7 +53,12 @@ AC_DEFUN([ss_MBEDTLS], AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ +#include +#if MBEDTLS_VERSION_NUMBER >= 0x03000000 +#include +#else #include +#endif ]], [[ #ifndef MBEDTLS_ARC4_C @@ -64,7 +74,12 @@ AC_DEFUN([ss_MBEDTLS], AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ +#include +#if MBEDTLS_VERSION_NUMBER >= 0x03000000 +#include +#else #include +#endif ]], [[ #ifndef MBEDTLS_BLOWFISH_C @@ -80,7 +95,12 @@ AC_DEFUN([ss_MBEDTLS], AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ +#include +#if MBEDTLS_VERSION_NUMBER >= 0x03000000 +#include +#else #include +#endif ]], [[ #ifndef MBEDTLS_CAMELLIA_C diff --git a/shadowsocks-libev/src/aead.c b/shadowsocks-libev/src/aead.c index 358ec9381f..73349da64c 100644 --- a/shadowsocks-libev/src/aead.c +++ b/shadowsocks-libev/src/aead.c @@ -177,9 +177,13 @@ aead_cipher_encrypt(cipher_ctx_t *cipher_ctx, // Otherwise, just use the mbedTLS one with crappy AES-NI. case AES192GCM: case AES128GCM: - +#if MBEDTLS_VERSION_NUMBER < 0x03000000 err = mbedtls_cipher_auth_encrypt(cipher_ctx->evp, n, nlen, ad, adlen, m, mlen, c, clen, c + mlen, tlen); +#else + err = mbedtls_cipher_auth_encrypt_ext(cipher_ctx->evp, n, nlen, ad, adlen, + m, mlen, c, mlen + tlen, clen, tlen); +#endif *clen += tlen; break; case CHACHA20POLY1305IETF: @@ -226,8 +230,13 @@ aead_cipher_decrypt(cipher_ctx_t *cipher_ctx, // Otherwise, just use the mbedTLS one with crappy AES-NI. case AES192GCM: case AES128GCM: +#if MBEDTLS_VERSION_NUMBER < 0x03000000 err = mbedtls_cipher_auth_decrypt(cipher_ctx->evp, n, nlen, ad, adlen, m, mlen - tlen, p, plen, m + mlen - tlen, tlen); +#else + err = mbedtls_cipher_auth_decrypt_ext(cipher_ctx->evp, n, nlen, ad, adlen, + m, mlen, p, mlen - tlen, plen, tlen); +#endif break; case CHACHA20POLY1305IETF: err = crypto_aead_chacha20poly1305_ietf_decrypt(p, &long_plen, NULL, m, mlen, @@ -721,17 +730,7 @@ aead_key_init(int method, const char *pass, const char *key) cipher_t *cipher = (cipher_t *)ss_malloc(sizeof(cipher_t)); memset(cipher, 0, sizeof(cipher_t)); - if (method >= CHACHA20POLY1305IETF) { - cipher_kt_t *cipher_info = (cipher_kt_t *)ss_malloc(sizeof(cipher_kt_t)); - cipher->info = cipher_info; - cipher->info->base = NULL; - cipher->info->key_bitlen = supported_aead_ciphers_key_size[method] * 8; - cipher->info->iv_size = supported_aead_ciphers_nonce_size[method]; - } else { - cipher->info = (cipher_kt_t *)aead_get_cipher_type(method); - } - - if (cipher->info == NULL && cipher->key_len == 0) { + if (method < CHACHA20POLY1305IETF && aead_get_cipher_type(method) == NULL) { LOGE("Cipher %s not found in crypto library", supported_aead_ciphers[method]); FATAL("Cannot initialize cipher"); } diff --git a/shadowsocks-libev/src/crypto.c b/shadowsocks-libev/src/crypto.c index b44d8674cb..76c426b533 100644 --- a/shadowsocks-libev/src/crypto.c +++ b/shadowsocks-libev/src/crypto.c @@ -103,7 +103,7 @@ crypto_md5(const unsigned char *d, size_t n, unsigned char *md) if (md == NULL) { md = m; } -#if MBEDTLS_VERSION_NUMBER >= 0x02070000 +#if MBEDTLS_VERSION_NUMBER < 0x03000000 && MBEDTLS_VERSION_NUMBER >= 0x02070000 if (mbedtls_md5_ret(d, n, md) != 0) FATAL("Failed to calculate MD5"); #else diff --git a/shadowsocks-libev/src/crypto.h b/shadowsocks-libev/src/crypto.h index 1791551ff2..70707932b0 100644 --- a/shadowsocks-libev/src/crypto.h +++ b/shadowsocks-libev/src/crypto.h @@ -97,7 +97,6 @@ typedef struct buffer { typedef struct { int method; int skey; - cipher_kt_t *info; size_t nonce_len; size_t key_len; size_t tag_len; diff --git a/shadowsocks-libev/src/stream.c b/shadowsocks-libev/src/stream.c index 35d9050b36..b2e2cea828 100644 --- a/shadowsocks-libev/src/stream.c +++ b/shadowsocks-libev/src/stream.c @@ -168,33 +168,6 @@ crypto_stream_xor_ic(uint8_t *c, const uint8_t *m, uint64_t mlen, return 0; } -int -cipher_nonce_size(const cipher_t *cipher) -{ - if (cipher == NULL) { - return 0; - } - return cipher->info->iv_size; -} - -int -cipher_key_size(const cipher_t *cipher) -{ - /* - * Semi-API changes (technically public, morally prnonceate) - * Renamed a few headers to include _internal in the name. Those headers are - * not supposed to be included by users. - * Changed md_info_t into an opaque structure (use md_get_xxx() accessors). - * Changed pk_info_t into an opaque structure. - * Changed cipher_base_t into an opaque structure. - */ - if (cipher == NULL) { - return 0; - } - /* From Version 1.2.7 released 2013-04-13 Default Blowfish keysize is now 128-bits */ - return cipher->info->key_bitlen / 8; -} - const cipher_kt_t * stream_get_cipher_type(int method) { @@ -642,34 +615,22 @@ stream_key_init(int method, const char *pass, const char *key) cipher_t *cipher = (cipher_t *)ss_malloc(sizeof(cipher_t)); memset(cipher, 0, sizeof(cipher_t)); - if (method == SALSA20 || method == CHACHA20 || method == CHACHA20IETF) { - cipher_kt_t *cipher_info = (cipher_kt_t *)ss_malloc(sizeof(cipher_kt_t)); - cipher->info = cipher_info; - cipher->info->base = NULL; - cipher->info->key_bitlen = supported_stream_ciphers_key_size[method] * 8; - cipher->info->iv_size = supported_stream_ciphers_nonce_size[method]; - } else { - cipher->info = (cipher_kt_t *)stream_get_cipher_type(method); - } - - if (cipher->info == NULL && cipher->key_len == 0) { + if (method < SALSA20 && stream_get_cipher_type(method) == NULL) { LOGE("Cipher %s not found in crypto library", supported_stream_ciphers[method]); FATAL("Cannot initialize cipher"); } if (key != NULL) - cipher->key_len = crypto_parse_key(key, cipher->key, cipher_key_size(cipher)); + cipher->key_len = crypto_parse_key(key, cipher->key, + supported_stream_ciphers_key_size[method]); else - cipher->key_len = crypto_derive_key(pass, cipher->key, cipher_key_size(cipher)); + cipher->key_len = crypto_derive_key(pass, cipher->key, + supported_stream_ciphers_key_size[method]); if (cipher->key_len == 0) { FATAL("Cannot generate key and NONCE"); } - if (method == RC4_MD5) { - cipher->nonce_len = 16; - } else { - cipher->nonce_len = cipher_nonce_size(cipher); - } + cipher->nonce_len = supported_stream_ciphers_nonce_size[method]; cipher->method = method; return cipher; diff --git a/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/global.js b/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/global.js index 029347e152..2e76e4729d 100644 --- a/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/global.js +++ b/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/global.js @@ -168,6 +168,7 @@ return view.extend({ const res_ver_geoip = data[7]; const res_ver_geosite = data[8]; + const less_24_10 = !form.RichListValue; const dashboard_repo = uci.get(data[0], 'api', 'dashboard_repo'); let m, s, o, ss, so; @@ -472,7 +473,7 @@ return view.extend({ } so.default = 'system'; so.rmempty = false; - if (!form.RichListValue) + if (less_24_10) so.onchange = function(ev, section_id, value) { var desc = ev.target.nextSibling; if (value === 'mixed') diff --git a/small/naiveproxy/Makefile b/small/naiveproxy/Makefile index 9c10f72587..78b902f245 100644 --- a/small/naiveproxy/Makefile +++ b/small/naiveproxy/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=naiveproxy -PKG_VERSION:=132.0.6834.79-1 +PKG_VERSION:=132.0.6834.79-2 PKG_RELEASE:=1 # intel 80386 & riscv64 & cortex-a76 @@ -20,47 +20,47 @@ else ifeq ($(ARCH_PREBUILT),riscv64_riscv64) endif ifeq ($(ARCH_PACKAGES),aarch64_cortex-a53) - PKG_HASH:=4264588ab16565425a62436d5946a0630759acc3a71e2a673e2d5383caed8320 + PKG_HASH:=24548efa8a257320a169b9a9f4692043dc00ee7c35bd211ea04a2ec161bbf39d else ifeq ($(ARCH_PACKAGES),aarch64_cortex-a72) - PKG_HASH:=f4272d75cdcf4e5f9328886e50e49115ea40b75c373dcd7bbce1045a791beed8 + PKG_HASH:=2849150414fd7ab21552cedc21bfa1c41a6ff1e1c3aa3cc2d44436aab74912e1 else ifeq ($(ARCH_PACKAGES),aarch64_generic) - PKG_HASH:=b50ef4064c8e609730233fc358b4e992f174323eb11153f63ecbb152cbe4b92e + PKG_HASH:=71fbc160c5f8df9ae96d7f91b646e24f2eb142928df8186fe50a9d73cfac842e else ifeq ($(ARCH_PACKAGES),arm_arm1176jzf-s_vfp) - PKG_HASH:=62cc7f13cbe49ff358692bb81c4ced66fbf0ec103dcff99f15ae7e56d9186b51 + PKG_HASH:=7ce0ba453c09f9978e421575aca96b34d381ec1731f19d29d8e16e7968fb1888 else ifeq ($(ARCH_PACKAGES),arm_arm926ej-s) - PKG_HASH:=bd050616edb6d6538001db64dc7dcfc13941855890ec5741beff1144a897530c + PKG_HASH:=000d92d9865f406dfd9bf7848c455312a1ce42a778c970f484bdf93c3a805973 else ifeq ($(ARCH_PACKAGES),arm_cortex-a15_neon-vfpv4) - PKG_HASH:=af2510de66dac0cde22b090864cfae314405969665a4abfc95bed51a77500e82 + PKG_HASH:=94f22ed0e270d47b035ec6380ce6b26db93ff01382641c222f2db11929cc0856 else ifeq ($(ARCH_PACKAGES),arm_cortex-a5_vfpv4) - PKG_HASH:=2d12bb48e50fb88c3ab1375fc9f0df56d45aeaa3fc6c82b78555c1c4b7855266 + PKG_HASH:=a4cfc13e78000f3de8561f9f299e60536435b8e8b9208fc2ad34318662d78b28 else ifeq ($(ARCH_PACKAGES),arm_cortex-a7) - PKG_HASH:=442133a5545fc83bb3c36ad14a631ccb930750e0969abf508636cf7f6cf29e7e + PKG_HASH:=e27d13fc44deecd5083d0e5cdf9f0df83a642df714f4a13a69b706bb5198a61e else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_neon-vfpv4) - PKG_HASH:=e144fafb14c8bad7e7d96d01f3d3d799fddfcd1f620e8f045376a19c497c0f54 + PKG_HASH:=15315b9671ca61fb848b4e8d6f8162a1ce9fc9fe4fad3702678256fa90414641 else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_vfpv4) - PKG_HASH:=5f65427412398053e9cecc3139c91fb8b09147ddfd42b91df742b9909b141bc8 + PKG_HASH:=6ad229a26fdaac664fa0bc5f8f4417e034fbf7ea8d6719eaf26882b758f8864e else ifeq ($(ARCH_PACKAGES),arm_cortex-a8_vfpv3) - PKG_HASH:=f9bdb669b6440d088336d17daaea24c6ecef85de4b8bac756a2d1fbd487fa1b1 + PKG_HASH:=871a8bc18bfcd5d9e2dcd965887be2f5617c9baec5bd0a6d17a5569782a69b8b else ifeq ($(ARCH_PACKAGES),arm_cortex-a9) - PKG_HASH:=8a4fbba18e8157dafddb7e684cf3c06bef2f10d3f9796bf0ea2496f9c788389c + PKG_HASH:=137eb801293e8a3336626dc58434ee135751960332d8237d6c54aa6944eb17d4 else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_neon) - PKG_HASH:=b1371c204a9f4fa7cf98be0df0fbb257fd6708e7a096a57d9d31740b3ee74360 + PKG_HASH:=deace84168fdce2656c0b6d9fa094fdd8dbdd4e8f95c422043f5dee7cbdb5d26 else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_vfpv3-d16) - PKG_HASH:=fb3dde55b6642a0527b0ea9110fcad8081255248a4bc59bf530768eaaee1e5b8 + PKG_HASH:=51e4ee3521b575fc2c12a1baa276e0802d3fc10a32a62f190c2c9b56c008e40d else ifeq ($(ARCH_PACKAGES),arm_mpcore) - PKG_HASH:=29293985c3d4af1bb0699a9907852555db6a3d8f1a01cc2a58651f9d20776e6f + PKG_HASH:=008d2231c867614dc3e40c966261d9dc5c9931b3c68beb33549ad3d4f7bed2f1 else ifeq ($(ARCH_PACKAGES),arm_xscale) - PKG_HASH:=26909683e0586696f2b3c914be6fd1132c93c8eb4dec99bea93d70accddb66d6 + PKG_HASH:=d8160e3b0963d124eb91762c6df9d96207510dc1a5f28f32f3ad6f6133f49d75 else ifeq ($(ARCH_PACKAGES),mipsel_24kc) - PKG_HASH:=7ea7084fbcf22259a1ee7d785f886986f0f16e6dda86838991af50fb2b24cb72 + PKG_HASH:=f9c0a4049388058aaa881aa13385470497beaeeca6473baf6539905a75d098bf else ifeq ($(ARCH_PACKAGES),mipsel_mips32) - PKG_HASH:=cea3005186f9010cb5270bc5fd99d68c5d7f77c8267129ab4f114c37699c2aa3 + PKG_HASH:=fd2520202c1cbe82498c90594a71cd1ed6aa4d8a6d470cf84871fd1d8f646380 else ifeq ($(ARCH_PACKAGES),riscv64) - PKG_HASH:=515d14ae15009abaad4016ba36848a71ba52bca9b4aa8f207eec2343d31ed608 + PKG_HASH:=557f8054e7643d6cdbbd1f70922ddf131f60ad03fb2cadf994ac15c9303d84ed else ifeq ($(ARCH_PACKAGES),x86) - PKG_HASH:=f53aba8d13f8ba11af0ba26e27c8fc616b7a28a0e1d81814e0128c10cc92d3be + PKG_HASH:=eab01156720906345230f6fb9cde7580b88e66799a4bdcef58636addbcab9a6c else ifeq ($(ARCH_PACKAGES),x86_64) - PKG_HASH:=2369644fb5ccb41cf511ddca67d30cc7f04e64068f4d1d28c42155b86dfd4a06 + PKG_HASH:=95fd43646b86512ea46d87ccd0b5adda50aefe5c53dbcfd4b47930a146bec8b9 else PKG_HASH:=dummy endif diff --git a/small/v2ray-geodata/Makefile b/small/v2ray-geodata/Makefile index ab3f0b2d3d..03c43eb0c7 100644 --- a/small/v2ray-geodata/Makefile +++ b/small/v2ray-geodata/Makefile @@ -30,13 +30,13 @@ define Download/geosite HASH:=aa65cee72dd6afbf9dd4c474b4ff28ceb063f6abf99249a084091adb4f282f09 endef -GEOSITE_IRAN_VER:=202501130037 +GEOSITE_IRAN_VER:=202501200034 GEOSITE_IRAN_FILE:=iran.dat.$(GEOSITE_IRAN_VER) define Download/geosite-ir URL:=https://github.com/bootmortis/iran-hosted-domains/releases/download/$(GEOSITE_IRAN_VER)/ URL_FILE:=iran.dat FILE:=$(GEOSITE_IRAN_FILE) - HASH:=72014870e40bd6a75bc3ee91d1bd578f766bbb5ccc237380a13aa1c6e1aee073 + HASH:=72a191d2ec9595484a1af53012d27fba74f1337dc258d62d862c69ca649dc1f8 endef define Package/v2ray-geodata/template diff --git a/v2rayn/v2rayN/.gitattributes b/v2rayn/.gitattributes similarity index 100% rename from v2rayn/v2rayN/.gitattributes rename to v2rayn/.gitattributes diff --git a/v2rayn/.gitignore b/v2rayn/.gitignore index 4f3e075c07..524d236bee 100644 --- a/v2rayn/.gitignore +++ b/v2rayn/.gitignore @@ -1,19 +1,400 @@ -################################################################################ -# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。 -################################################################################ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore -/v2rayN/.vs/ -/v2rayN/v2rayN/bin/Debug/app.publish -/v2rayN/v2rayN/bin/Debug -/v2rayN/v2rayN/bin/Release -/v2rayN/v2rayN/obj/ -/v2rayN/.vs/v2rayN/DesignTimeBuild -/v2rayN/packages -.vs/ProjectSettings.json -.vs/slnx.sqlite -.vs/VSWorkspaceState.json -/v2rayN/v2rayUpgrade/bin/Debug -/v2rayN/v2rayUpgrade/bin/Release -/v2rayN/v2rayUpgrade/obj/ +# User-specific files +*.rsuser +*.suo *.user -/.vs/v2rayN +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +# but not Directory.Build.rsp, as it configures directory-level build defaults +!Directory.Build.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml \ No newline at end of file diff --git a/v2rayn/v2rayN/.gitignore b/v2rayn/v2rayN/.gitignore deleted file mode 100644 index 9491a2fda2..0000000000 --- a/v2rayn/v2rayN/.gitignore +++ /dev/null @@ -1,363 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Oo]ut/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd \ No newline at end of file diff --git a/youtube-dl/youtube_dl/extractor/youtube.py b/youtube-dl/youtube_dl/extractor/youtube.py index f0406b3572..edaae5bd3a 100644 --- a/youtube-dl/youtube_dl/extractor/youtube.py +++ b/youtube-dl/youtube_dl/extractor/youtube.py @@ -85,6 +85,22 @@ class YoutubeBaseInfoExtractor(InfoExtractor): _PLAYLIST_ID_RE = r'(?:(?:PL|LL|EC|UU|FL|RD|UL|TL|PU|OLAK5uy_)[0-9A-Za-z-_]{10,}|RDMM)' _INNERTUBE_CLIENTS = { + 'ios': { + 'INNERTUBE_CONTEXT': { + 'client': { + 'clientName': 'IOS', + 'clientVersion': '19.45.4', + 'deviceMake': 'Apple', + 'deviceModel': 'iPhone16,2', + 'userAgent': 'com.google.ios.youtube/19.45.4 (iPhone16,2; U; CPU iOS 18_1_0 like Mac OS X;)', + 'osName': 'iPhone', + 'osVersion': '18.1.0.22B83', + }, + }, + 'INNERTUBE_CONTEXT_CLIENT_NAME': 5, + 'REQUIRE_JS_PLAYER': False, + 'REQUIRE_PO_TOKEN': True, + }, # mweb has 'ultralow' formats # See: https://github.com/yt-dlp/yt-dlp/pull/557 'mweb': { @@ -110,6 +126,17 @@ class YoutubeBaseInfoExtractor(InfoExtractor): 'INNERTUBE_CONTEXT_CLIENT_NAME': 7, 'SUPPORTS_COOKIES': True, }, + 'web': { + 'INNERTUBE_CONTEXT': { + 'client': { + 'clientName': 'WEB', + 'clientVersion': '2.20241126.01.00', + }, + }, + 'INNERTUBE_CONTEXT_CLIENT_NAME': 1, + 'REQUIRE_PO_TOKEN': True, + 'SUPPORTS_COOKIES': True, + }, } def _login(self): @@ -1995,6 +2022,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor): player_response = self._extract_yt_initial_variable( webpage, self._YT_INITIAL_PLAYER_RESPONSE_RE, video_id, 'initial player response') + is_live = traverse_obj(player_response, ('videoDetails', 'isLive')) + if False and not player_response: player_response = self._call_api( 'player', {'videoId': video_id}, video_id) @@ -2008,50 +2037,69 @@ class YoutubeIE(YoutubeBaseInfoExtractor): if sts: pb_context['signatureTimestamp'] = sts - client = traverse_obj(self._INNERTUBE_CLIENTS, ( - lambda _, v: not v.get('REQUIRE_PO_TOKEN')), - get_all=False) + client_names = traverse_obj(self._INNERTUBE_CLIENTS, ( + T(dict.items), lambda _, k_v: not k_v[1].get('REQUIRE_PO_TOKEN'), + 0))[:1] - query = { - 'playbackContext': { - 'contentPlaybackContext': pb_context, - 'contentCheckOk': True, - 'racyCheckOk': True, - }, - 'context': { - 'client': merge_dicts( - traverse_obj(client, ('INNERTUBE_CONTEXT', 'client')), { - 'hl': 'en', - 'timeZone': 'UTC', - 'utcOffsetMinutes': 0, - }), - }, - 'videoId': video_id, - } + if is_live and 'ios' not in client_names: + client_names.append('ios') - headers = merge_dicts({ + headers = { 'Sec-Fetch-Mode': 'navigate', 'Origin': origin, # 'X-Goog-Visitor-Id': self._extract_visitor_data(ytcfg) or '', - }, traverse_obj(client, { - 'X-YouTube-Client-Name': 'INNERTUBE_CONTEXT_CLIENT_NAME', - 'X-YouTube-Client-Version': ( - 'INNERTUBE_CONTEXT', 'client', 'clientVersion'), - 'User-Agent': ( - 'INNERTUBE_CONTEXT', 'client', 'userAgent'), - })) - + } auth = self._generate_sapisidhash_header(origin) if auth is not None: headers['Authorization'] = auth headers['X-Origin'] = origin - player_response = self._call_api( - 'player', query, video_id, fatal=False, headers=headers, - note=join_nonempty( - 'Downloading', traverse_obj(query, ( - 'context', 'client', 'clientName')), - 'API JSON', delim=' ')) + for client in traverse_obj(self._INNERTUBE_CLIENTS, (client_names, T(dict))): + + query = { + 'playbackContext': { + 'contentPlaybackContext': pb_context, + 'contentCheckOk': True, + 'racyCheckOk': True, + }, + 'context': { + 'client': merge_dicts( + traverse_obj(client, ('INNERTUBE_CONTEXT', 'client')), { + 'hl': 'en', + 'timeZone': 'UTC', + 'utcOffsetMinutes': 0, + }), + }, + 'videoId': video_id, + } + + api_headers = merge_dicts(headers, traverse_obj(client, { + 'X-YouTube-Client-Name': 'INNERTUBE_CONTEXT_CLIENT_NAME', + 'X-YouTube-Client-Version': ( + 'INNERTUBE_CONTEXT', 'client', 'clientVersion'), + 'User-Agent': ( + 'INNERTUBE_CONTEXT', 'client', 'userAgent'), + })) + + api_player_response = self._call_api( + 'player', query, video_id, fatal=False, headers=api_headers, + note=join_nonempty( + 'Downloading', traverse_obj(query, ( + 'context', 'client', 'clientName')), + 'API JSON', delim=' ')) + + hls = [ + traverse_obj( + resp, ('streamingData', 'hlsManifestUrl', T(url_or_none))) + for resp in (player_response, api_player_response)] + if not hls[0] and hls[1]: + player_response['streamingData']['hlsManifestUrl'] = hls[1] + else: + video_details = merge_dicts(*traverse_obj( + (player_response, api_player_response), + (Ellipsis, 'videoDetails', T(dict)))) + player_response.update(api_player_response or {}) + player_response['videoDetails'] = video_details def is_agegated(playability): if not isinstance(playability, dict): @@ -2194,6 +2242,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor): itag_qualities = {} q = qualities(['tiny', 'small', 'medium', 'large', 'hd720', 'hd1080', 'hd1440', 'hd2160', 'hd2880', 'highres']) CHUNK_SIZE = 10 << 20 + is_live = video_details.get('isLive') streaming_data = player_response.get('streamingData') or {} streaming_formats = streaming_data.get('formats') or [] @@ -2338,7 +2387,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor): hls_manifest_url = streaming_data.get('hlsManifestUrl') if hls_manifest_url: for f in self._extract_m3u8_formats( - hls_manifest_url, video_id, 'mp4', fatal=False): + hls_manifest_url, video_id, 'mp4', + entry_protocol='m3u8_native', live=is_live, fatal=False): if process_manifest_format( f, 'hls', None, self._search_regex( r'/itag/(\d+)', f['url'], 'itag', default=None)): @@ -2444,8 +2494,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor): # Strictly de-prioritize damaged formats f['preference'] = -10 - is_live = video_details.get('isLive') - owner_profile_url = self._yt_urljoin(self._extract_author_var( webpage, 'url', videodetails=video_details, metadata=microformat)) diff --git a/yt-dlp/yt_dlp/extractor/_extractors.py b/yt-dlp/yt_dlp/extractor/_extractors.py index d42bce21b2..ff441d5eed 100644 --- a/yt-dlp/yt_dlp/extractor/_extractors.py +++ b/yt-dlp/yt_dlp/extractor/_extractors.py @@ -585,6 +585,10 @@ from .egghead import ( EggheadCourseIE, EggheadLessonIE, ) +from .eggs import ( + EggsArtistIE, + EggsIE, +) from .eighttracks import EightTracksIE from .eitb import EitbIE from .elementorembed import ElementorEmbedIE @@ -1279,6 +1283,10 @@ from .nebula import ( ) from .nekohacker import NekoHackerIE from .nerdcubed import NerdCubedFeedIE +from .nest import ( + NestClipIE, + NestIE, +) from .neteasemusic import ( NetEaseMusicAlbumIE, NetEaseMusicDjRadioIE, @@ -1533,6 +1541,10 @@ from .pinterest import ( PinterestCollectionIE, PinterestIE, ) +from .piramidetv import ( + PiramideTVChannelIE, + PiramideTVIE, +) from .pixivsketch import ( PixivSketchIE, PixivSketchUserIE, diff --git a/yt-dlp/yt_dlp/extractor/eggs.py b/yt-dlp/yt_dlp/extractor/eggs.py new file mode 100644 index 0000000000..6e032441cf --- /dev/null +++ b/yt-dlp/yt_dlp/extractor/eggs.py @@ -0,0 +1,155 @@ +import secrets + +from .common import InfoExtractor +from .youtube import YoutubeIE +from ..utils import ( + int_or_none, + parse_iso8601, + str_or_none, + url_or_none, +) +from ..utils.traversal import traverse_obj + + +class EggsBaseIE(InfoExtractor): + _API_HEADERS = { + 'Accept': '*/*', + 'apVersion': '8.2.00', + 'deviceName': 'Android', + } + + def _real_initialize(self): + self._API_HEADERS['deviceId'] = secrets.token_hex(8) + + def _call_api(self, endpoint, video_id): + return self._download_json( + f'https://app-front-api.eggs.mu/v1/{endpoint}', video_id, + headers=self._API_HEADERS) + + def _extract_music_info(self, data): + if yt_url := traverse_obj(data, ('youtubeUrl', {url_or_none})): + return self.url_result(yt_url, ie=YoutubeIE) + + artist_name = traverse_obj(data, ('artist', 'artistName', {str_or_none})) + music_id = traverse_obj(data, ('musicId', {str_or_none})) + webpage_url = None + if artist_name and music_id: + webpage_url = f'https://eggs.mu/artist/{artist_name}/song/{music_id}' + + return { + 'id': music_id, + 'vcodec': 'none', + 'webpage_url': webpage_url, + 'extractor_key': EggsIE.ie_key(), + 'extractor': EggsIE.IE_NAME, + **traverse_obj(data, { + 'title': ('musicTitle', {str}), + 'url': ('musicDataPath', {url_or_none}), + 'uploader': ('artist', 'displayName', {str}), + 'uploader_id': ('artist', 'artistId', {str_or_none}), + 'thumbnail': ('imageDataPath', {url_or_none}), + 'view_count': ('numberOfMusicPlays', {int_or_none}), + 'like_count': ('numberOfLikes', {int_or_none}), + 'comment_count': ('numberOfComments', {int_or_none}), + 'composers': ('composer', {str}, all), + 'tags': ('tags', ..., {str}), + 'timestamp': ('releaseDate', {parse_iso8601}), + 'artist': ('artist', 'displayName', {str}), + })} + + +class EggsIE(EggsBaseIE): + IE_NAME = 'eggs:single' + _VALID_URL = r'https?://eggs\.mu/artist/[^/?#]+/song/(?P[\da-f-]+)' + + _TESTS = [{ + 'url': 'https://eggs.mu/artist/32_sunny_girl/song/0e95fd1d-4d61-4d5b-8b18-6092c551da90', + 'info_dict': { + 'id': '0e95fd1d-4d61-4d5b-8b18-6092c551da90', + 'ext': 'm4a', + 'title': 'シネマと信号', + 'uploader': 'Sunny Girl', + 'thumbnail': r're:https?://.*\.jpg(?:\?.*)?$', + 'uploader_id': '1607', + 'like_count': int, + 'timestamp': 1731327327, + 'composers': ['橘高連太郎'], + 'view_count': int, + 'comment_count': int, + 'artists': ['Sunny Girl'], + 'upload_date': '20241111', + 'tags': ['SunnyGirl', 'シネマと信号'], + }, + }, { + 'url': 'https://eggs.mu/artist/KAMO_3pband/song/1d4bc45f-1af6-47a9-8b30-a70cae350b4f', + 'info_dict': { + 'id': '80cLKA2wnoA', + 'ext': 'mp4', + 'title': 'KAMO「いい女だから」Audio', + 'uploader': 'KAMO', + 'live_status': 'not_live', + 'channel_id': 'UCsHLBw2__5Q9y55skXPotOg', + 'channel_follower_count': int, + 'description': 'md5:d260da711ecbec3e720293dc11401b87', + 'availability': 'public', + 'uploader_id': '@KAMO_band', + 'upload_date': '20240925', + 'thumbnail': 'https://i.ytimg.com/vi/80cLKA2wnoA/maxresdefault.jpg', + 'comment_count': int, + 'channel_url': 'https://www.youtube.com/channel/UCsHLBw2__5Q9y55skXPotOg', + 'view_count': int, + 'duration': 151, + 'like_count': int, + 'channel': 'KAMO', + 'playable_in_embed': True, + 'uploader_url': 'https://www.youtube.com/@KAMO_band', + 'tags': [], + 'timestamp': 1727271121, + 'age_limit': 0, + 'categories': ['People & Blogs'], + }, + 'add_ie': ['Youtube'], + 'params': {'skip_download': 'Youtube'}, + }] + + def _real_extract(self, url): + song_id = self._match_id(url) + json_data = self._call_api(f'musics/{song_id}', song_id) + return self._extract_music_info(json_data) + + +class EggsArtistIE(EggsBaseIE): + IE_NAME = 'eggs:artist' + _VALID_URL = r'https?://eggs\.mu/artist/(?P\w+)/?(?:[?#&]|$)' + + _TESTS = [{ + 'url': 'https://eggs.mu/artist/32_sunny_girl', + 'info_dict': { + 'id': '32_sunny_girl', + 'thumbnail': 'https://image-pro.eggs.mu/profile/1607.jpeg?updated_at=2024-04-03T20%3A06%3A00%2B09%3A00', + 'description': 'Muddy Mine / 東京高田馬場CLUB PHASE / Gt.Vo 橘高 連太郎 / Ba.Cho 小野 ゆうき / Dr 大森 りゅうひこ', + 'title': 'Sunny Girl', + }, + 'playlist_mincount': 18, + }, { + 'url': 'https://eggs.mu/artist/KAMO_3pband', + 'info_dict': { + 'id': 'KAMO_3pband', + 'description': '川崎発3ピースバンド', + 'thumbnail': 'https://image-pro.eggs.mu/profile/35217.jpeg?updated_at=2024-11-27T16%3A31%3A50%2B09%3A00', + 'title': 'KAMO', + }, + 'playlist_mincount': 2, + }] + + def _real_extract(self, url): + artist_id = self._match_id(url) + artist_data = self._call_api(f'artists/{artist_id}', artist_id) + song_data = self._call_api(f'artists/{artist_id}/musics', artist_id) + return self.playlist_result( + traverse_obj(song_data, ('data', ..., {dict}, {self._extract_music_info})), + playlist_id=artist_id, **traverse_obj(artist_data, { + 'title': ('displayName', {str}), + 'description': ('profile', {str}), + 'thumbnail': ('imageDataPath', {url_or_none}), + })) diff --git a/yt-dlp/yt_dlp/extractor/nest.py b/yt-dlp/yt_dlp/extractor/nest.py new file mode 100644 index 0000000000..3f8316b3e5 --- /dev/null +++ b/yt-dlp/yt_dlp/extractor/nest.py @@ -0,0 +1,117 @@ +from .common import InfoExtractor +from ..utils import ExtractorError, float_or_none, update_url_query, url_or_none +from ..utils.traversal import traverse_obj + + +class NestIE(InfoExtractor): + _VALID_URL = r'https?://video\.nest\.com/(?:embedded/)?live/(?P\w+)' + _EMBED_REGEX = [rf'