mirror of
				https://github.com/bolucat/Archive.git
				synced 2025-10-31 11:57:05 +08:00 
			
		
		
		
	Update On Mon Jan 20 19:32:49 CET 2025
This commit is contained in:
		
							
								
								
									
										1
									
								
								.github/update.log
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/update.log
									
									
									
									
										vendored
									
									
								
							| @@ -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 Fri Jan 17 19:33:42 CET 2025 | ||||||
| Update On Sat Jan 18 19:31:11 CET 2025 | Update On Sat Jan 18 19:31:11 CET 2025 | ||||||
| Update On Sun Jan 19 19:31:01 CET 2025 | Update On Sun Jan 19 19:31:01 CET 2025 | ||||||
|  | Update On Mon Jan 20 19:32:40 CET 2025 | ||||||
|   | |||||||
| @@ -153,11 +153,11 @@ func (b *Base) DialOptions(opts ...dialer.Option) []dialer.Option { | |||||||
| } | } | ||||||
|  |  | ||||||
| type BasicOption struct { | type BasicOption struct { | ||||||
| 	TFO         bool   `proxy:"tfo,omitempty" group:"tfo,omitempty"` | 	TFO         bool   `proxy:"tfo,omitempty"` | ||||||
| 	MPTCP       bool   `proxy:"mptcp,omitempty" group:"mptcp,omitempty"` | 	MPTCP       bool   `proxy:"mptcp,omitempty"` | ||||||
| 	Interface   string `proxy:"interface-name,omitempty" group:"interface-name,omitempty"` | 	Interface   string `proxy:"interface-name,omitempty" group:"interface-name,omitempty"` | ||||||
| 	RoutingMark int    `proxy:"routing-mark,omitempty" group:"routing-mark,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 | 	DialerProxy string `proxy:"dialer-proxy,omitempty"` // don't apply this option into groups, but can set a group name in a proxy | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -46,6 +46,13 @@ type GroupBaseOption struct { | |||||||
| } | } | ||||||
|  |  | ||||||
| func NewGroupBase(opt GroupBaseOption) *GroupBase { | 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 | 	var excludeFilterReg *regexp2.Regexp | ||||||
| 	if opt.excludeFilter != "" { | 	if opt.excludeFilter != "" { | ||||||
| 		excludeFilterReg = regexp2.MustCompile(opt.excludeFilter, regexp2.None) | 		excludeFilterReg = regexp2.MustCompile(opt.excludeFilter, regexp2.None) | ||||||
|   | |||||||
| @@ -17,7 +17,6 @@ import ( | |||||||
| 	C "github.com/metacubex/mihomo/constant" | 	C "github.com/metacubex/mihomo/constant" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| var trustCerts []*x509.Certificate |  | ||||||
| var globalCertPool *x509.CertPool | var globalCertPool *x509.CertPool | ||||||
| var mutex sync.RWMutex | var mutex sync.RWMutex | ||||||
| var errNotMatch = errors.New("certificate fingerprints do not match") | 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 { | func AddCertificate(certificate string) error { | ||||||
| 	mutex.Lock() | 	mutex.Lock() | ||||||
| 	defer mutex.Unlock() | 	defer mutex.Unlock() | ||||||
|  |  | ||||||
| 	if certificate == "" { | 	if certificate == "" { | ||||||
| 		return fmt.Errorf("certificate is empty") | 		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 | 		return nil | ||||||
| 	} else { | 	} else { | ||||||
| 		return fmt.Errorf("add certificate failed") | 		return fmt.Errorf("add certificate failed") | ||||||
| @@ -51,9 +58,6 @@ func initializeCertPool() { | |||||||
| 			globalCertPool = x509.NewCertPool() | 			globalCertPool = x509.NewCertPool() | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	for _, cert := range trustCerts { |  | ||||||
| 		globalCertPool.AddCert(cert) |  | ||||||
| 	} |  | ||||||
| 	if !DisableEmbedCa { | 	if !DisableEmbedCa { | ||||||
| 		globalCertPool.AppendCertsFromPEM(_CaCertificates) | 		globalCertPool.AppendCertsFromPEM(_CaCertificates) | ||||||
| 	} | 	} | ||||||
| @@ -62,7 +66,6 @@ func initializeCertPool() { | |||||||
| func ResetCertificate() { | func ResetCertificate() { | ||||||
| 	mutex.Lock() | 	mutex.Lock() | ||||||
| 	defer mutex.Unlock() | 	defer mutex.Unlock() | ||||||
| 	trustCerts = nil |  | ||||||
| 	initializeCertPool() | 	initializeCertPool() | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										62
									
								
								clash-nyanpasu/backend/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										62
									
								
								clash-nyanpasu/backend/Cargo.lock
									
									
									
										generated
									
									
									
								
							| @@ -963,7 +963,7 @@ dependencies = [ | |||||||
|  "boa_interner", |  "boa_interner", | ||||||
|  "boa_macros", |  "boa_macros", | ||||||
|  "boa_string", |  "boa_string", | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "num-bigint", |  "num-bigint", | ||||||
|  "rustc-hash 2.1.0", |  "rustc-hash 2.1.0", | ||||||
| ] | ] | ||||||
| @@ -989,7 +989,7 @@ dependencies = [ | |||||||
|  "fast-float2", |  "fast-float2", | ||||||
|  "hashbrown 0.15.2", |  "hashbrown 0.15.2", | ||||||
|  "icu_normalizer", |  "icu_normalizer", | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "intrusive-collections", |  "intrusive-collections", | ||||||
|  "itertools 0.13.0", |  "itertools 0.13.0", | ||||||
|  "num-bigint", |  "num-bigint", | ||||||
| @@ -1035,7 +1035,7 @@ dependencies = [ | |||||||
|  "boa_gc", |  "boa_gc", | ||||||
|  "boa_macros", |  "boa_macros", | ||||||
|  "hashbrown 0.15.2", |  "hashbrown 0.15.2", | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "once_cell", |  "once_cell", | ||||||
|  "phf 0.11.3", |  "phf 0.11.3", | ||||||
|  "rustc-hash 2.1.0", |  "rustc-hash 2.1.0", | ||||||
| @@ -1293,7 +1293,7 @@ checksum = "8769706aad5d996120af43197bf46ef6ad0fda35216b4505f926a365a232d924" | |||||||
| dependencies = [ | dependencies = [ | ||||||
|  "camino", |  "camino", | ||||||
|  "cargo-platform", |  "cargo-platform", | ||||||
|  "semver 1.0.24", |  "semver 1.0.25", | ||||||
|  "serde", |  "serde", | ||||||
|  "serde_json", |  "serde_json", | ||||||
|  "thiserror 2.0.11", |  "thiserror 2.0.11", | ||||||
| @@ -1515,7 +1515,7 @@ dependencies = [ | |||||||
|  "hex", |  "hex", | ||||||
|  "humansize", |  "humansize", | ||||||
|  "image", |  "image", | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "itertools 0.14.0", |  "itertools 0.14.0", | ||||||
|  "log", |  "log", | ||||||
|  "md-5", |  "md-5", | ||||||
| @@ -1552,7 +1552,7 @@ dependencies = [ | |||||||
|  "runas", |  "runas", | ||||||
|  "rust-i18n", |  "rust-i18n", | ||||||
|  "rustc_version", |  "rustc_version", | ||||||
|  "semver 1.0.24", |  "semver 1.0.25", | ||||||
|  "serde", |  "serde", | ||||||
|  "serde_json", |  "serde_json", | ||||||
|  "serde_yaml_ng", |  "serde_yaml_ng", | ||||||
| @@ -3676,7 +3676,7 @@ dependencies = [ | |||||||
|  "futures-core", |  "futures-core", | ||||||
|  "futures-sink", |  "futures-sink", | ||||||
|  "http 1.2.0", |  "http 1.2.0", | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "slab", |  "slab", | ||||||
|  "tokio", |  "tokio", | ||||||
|  "tokio-util", |  "tokio-util", | ||||||
| @@ -4244,9 +4244,9 @@ dependencies = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "indexmap" | name = "indexmap" | ||||||
| version = "2.7.0" | version = "2.7.1" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" | checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "equivalent", |  "equivalent", | ||||||
|  "hashbrown 0.15.2", |  "hashbrown 0.15.2", | ||||||
| @@ -5105,7 +5105,7 @@ dependencies = [ | |||||||
|  "cfg_aliases 0.1.1", |  "cfg_aliases 0.1.1", | ||||||
|  "codespan-reporting", |  "codespan-reporting", | ||||||
|  "hexf-parse", |  "hexf-parse", | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "log", |  "log", | ||||||
|  "rustc-hash 1.1.0", |  "rustc-hash 1.1.0", | ||||||
|  "spirv", |  "spirv", | ||||||
| @@ -6251,7 +6251,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | |||||||
| checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" | checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "fixedbitset", |  "fixedbitset", | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
| ] | ] | ||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| @@ -6460,7 +6460,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | |||||||
| checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" | checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "base64 0.22.1", |  "base64 0.22.1", | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "quick-xml 0.32.0", |  "quick-xml 0.32.0", | ||||||
|  "serde", |  "serde", | ||||||
|  "time", |  "time", | ||||||
| @@ -7299,7 +7299,7 @@ version = "0.4.1" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" | checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "semver 1.0.24", |  "semver 1.0.25", | ||||||
| ] | ] | ||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| @@ -7519,9 +7519,9 @@ dependencies = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "semver" | name = "semver" | ||||||
| version = "1.0.24" | version = "1.0.25" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" | checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "serde", |  "serde", | ||||||
| ] | ] | ||||||
| @@ -7595,9 +7595,9 @@ dependencies = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "serde_json" | name = "serde_json" | ||||||
| version = "1.0.136" | version = "1.0.137" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "336a0c23cf42a38d9eaa7cd22c7040d04e1228a19a933890805ffd00a16437d2" | checksum = "930cfb6e6abf99298aaad7d29abbef7a9999a9a8806a40088f55f0dcec03146b" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "itoa 1.0.14", |  "itoa 1.0.14", | ||||||
|  "memchr", |  "memchr", | ||||||
| @@ -7657,7 +7657,7 @@ dependencies = [ | |||||||
|  "chrono", |  "chrono", | ||||||
|  "hex", |  "hex", | ||||||
|  "indexmap 1.9.3", |  "indexmap 1.9.3", | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "serde", |  "serde", | ||||||
|  "serde_derive", |  "serde_derive", | ||||||
|  "serde_json", |  "serde_json", | ||||||
| @@ -7682,7 +7682,7 @@ name = "serde_yaml_ng" | |||||||
| version = "0.10.0" | version = "0.10.0" | ||||||
| source = "git+https://github.com/libnyanpasu/serde-yaml-ng.git#39cfdee3ab2a9bf220bc285e8004bb1950fa317f" | source = "git+https://github.com/libnyanpasu/serde-yaml-ng.git#39cfdee3ab2a9bf220bc285e8004bb1950fa317f" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "itoa 1.0.14", |  "itoa 1.0.14", | ||||||
|  "ryu", |  "ryu", | ||||||
|  "serde", |  "serde", | ||||||
| @@ -7695,7 +7695,7 @@ version = "0.0.11" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "48e76bab63c3fd98d27c17f9cbce177f64a91f5e69ac04cafe04e1bb25d1dc3c" | checksum = "48e76bab63c3fd98d27c17f9cbce177f64a91f5e69ac04cafe04e1bb25d1dc3c" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "itoa 1.0.14", |  "itoa 1.0.14", | ||||||
|  "libyml", |  "libyml", | ||||||
|  "log", |  "log", | ||||||
| @@ -8463,7 +8463,7 @@ dependencies = [ | |||||||
|  "heck 0.5.0", |  "heck 0.5.0", | ||||||
|  "json-patch", |  "json-patch", | ||||||
|  "schemars", |  "schemars", | ||||||
|  "semver 1.0.24", |  "semver 1.0.25", | ||||||
|  "serde", |  "serde", | ||||||
|  "serde_json", |  "serde_json", | ||||||
|  "tauri-utils", |  "tauri-utils", | ||||||
| @@ -8486,7 +8486,7 @@ dependencies = [ | |||||||
|  "png", |  "png", | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
|  "quote", |  "quote", | ||||||
|  "semver 1.0.24", |  "semver 1.0.25", | ||||||
|  "serde", |  "serde", | ||||||
|  "serde_json", |  "serde_json", | ||||||
|  "sha2 0.10.8", |  "sha2 0.10.8", | ||||||
| @@ -8699,7 +8699,7 @@ dependencies = [ | |||||||
|  "minisign-verify", |  "minisign-verify", | ||||||
|  "percent-encoding", |  "percent-encoding", | ||||||
|  "reqwest", |  "reqwest", | ||||||
|  "semver 1.0.24", |  "semver 1.0.25", | ||||||
|  "serde", |  "serde", | ||||||
|  "serde_json", |  "serde_json", | ||||||
|  "tar", |  "tar", | ||||||
| @@ -8782,7 +8782,7 @@ dependencies = [ | |||||||
|  "quote", |  "quote", | ||||||
|  "regex", |  "regex", | ||||||
|  "schemars", |  "schemars", | ||||||
|  "semver 1.0.24", |  "semver 1.0.25", | ||||||
|  "serde", |  "serde", | ||||||
|  "serde-untagged", |  "serde-untagged", | ||||||
|  "serde_json", |  "serde_json", | ||||||
| @@ -9230,7 +9230,7 @@ version = "0.19.15" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" | checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "serde", |  "serde", | ||||||
|  "serde_spanned", |  "serde_spanned", | ||||||
|  "toml_datetime", |  "toml_datetime", | ||||||
| @@ -9243,7 +9243,7 @@ version = "0.20.7" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" | checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "toml_datetime", |  "toml_datetime", | ||||||
|  "winnow 0.5.40", |  "winnow 0.5.40", | ||||||
| ] | ] | ||||||
| @@ -9254,7 +9254,7 @@ version = "0.22.22" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" | checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "serde", |  "serde", | ||||||
|  "serde_spanned", |  "serde_spanned", | ||||||
|  "toml_datetime", |  "toml_datetime", | ||||||
| @@ -9781,9 +9781,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "uuid" | name = "uuid" | ||||||
| version = "1.11.1" | version = "1.12.0" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" | checksum = "744018581f9a3454a9e15beb8a33b017183f1e7c0cd170232a2d1453b23a51c4" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "getrandom 0.2.15", |  "getrandom 0.2.15", | ||||||
|  "serde", |  "serde", | ||||||
| @@ -10311,7 +10311,7 @@ dependencies = [ | |||||||
|  "bitflags 2.6.0", |  "bitflags 2.6.0", | ||||||
|  "cfg_aliases 0.1.1", |  "cfg_aliases 0.1.1", | ||||||
|  "document-features", |  "document-features", | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "log", |  "log", | ||||||
|  "naga", |  "naga", | ||||||
|  "once_cell", |  "once_cell", | ||||||
| @@ -11607,7 +11607,7 @@ dependencies = [ | |||||||
|  "displaydoc", |  "displaydoc", | ||||||
|  "flate2", |  "flate2", | ||||||
|  "hmac", |  "hmac", | ||||||
|  "indexmap 2.7.0", |  "indexmap 2.7.1", | ||||||
|  "lzma-rs", |  "lzma-rs", | ||||||
|  "memchr", |  "memchr", | ||||||
|  "pbkdf2", |  "pbkdf2", | ||||||
|   | |||||||
| @@ -85,7 +85,7 @@ | |||||||
|     "unplugin-auto-import": "19.0.0", |     "unplugin-auto-import": "19.0.0", | ||||||
|     "unplugin-icons": "22.0.0", |     "unplugin-icons": "22.0.0", | ||||||
|     "validator": "13.12.0", |     "validator": "13.12.0", | ||||||
|     "vite": "6.0.7", |     "vite": "6.0.9", | ||||||
|     "vite-plugin-html": "3.2.2", |     "vite-plugin-html": "3.2.2", | ||||||
|     "vite-plugin-sass-dts": "1.3.30", |     "vite-plugin-sass-dts": "1.3.30", | ||||||
|     "vite-plugin-svgr": "4.3.0", |     "vite-plugin-svgr": "4.3.0", | ||||||
|   | |||||||
| @@ -34,7 +34,7 @@ | |||||||
|     "react-error-boundary": "5.0.0", |     "react-error-boundary": "5.0.0", | ||||||
|     "react-i18next": "15.4.0", |     "react-i18next": "15.4.0", | ||||||
|     "react-use": "17.6.0", |     "react-use": "17.6.0", | ||||||
|     "vite": "6.0.7", |     "vite": "6.0.9", | ||||||
|     "vite-tsconfig-paths": "5.1.4" |     "vite-tsconfig-paths": "5.1.4" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|   "manifest_version": 1, |   "manifest_version": 1, | ||||||
|   "latest": { |   "latest": { | ||||||
|     "mihomo": "v1.19.1", |     "mihomo": "v1.19.1", | ||||||
|     "mihomo_alpha": "alpha-192d769", |     "mihomo_alpha": "alpha-fc23318", | ||||||
|     "clash_rs": "v0.7.4", |     "clash_rs": "v0.7.4", | ||||||
|     "clash_premium": "2023-09-05-gdcc8d87", |     "clash_premium": "2023-09-05-gdcc8d87", | ||||||
|     "clash_rs_alpha": "0.7.4-alpha+sha.63aec82" |     "clash_rs_alpha": "0.7.4-alpha+sha.63aec82" | ||||||
| @@ -69,5 +69,5 @@ | |||||||
|       "linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf" |       "linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf" | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "updated_at": "2025-01-16T22:20:32.490Z" |   "updated_at": "2025-01-19T22:20:36.800Z" | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										84
									
								
								clash-nyanpasu/pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										84
									
								
								clash-nyanpasu/pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							| @@ -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) |         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': |       '@tanstack/router-plugin': | ||||||
|         specifier: 1.97.3 |         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': |       '@tauri-apps/plugin-clipboard-manager': | ||||||
|         specifier: 2.2.0 |         specifier: 2.2.0 | ||||||
|         version: 2.2.0 |         version: 2.2.0 | ||||||
| @@ -367,13 +367,13 @@ importers: | |||||||
|         version: 13.12.2 |         version: 13.12.2 | ||||||
|       '@vitejs/plugin-legacy': |       '@vitejs/plugin-legacy': | ||||||
|         specifier: 6.0.0 |         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': |       '@vitejs/plugin-react': | ||||||
|         specifier: 4.3.4 |         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': |       '@vitejs/plugin-react-swc': | ||||||
|         specifier: 3.7.2 |         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: |       change-case: | ||||||
|         specifier: 5.4.4 |         specifier: 5.4.4 | ||||||
|         version: 5.4.4 |         version: 5.4.4 | ||||||
| @@ -414,20 +414,20 @@ importers: | |||||||
|         specifier: 13.12.0 |         specifier: 13.12.0 | ||||||
|         version: 13.12.0 |         version: 13.12.0 | ||||||
|       vite: |       vite: | ||||||
|         specifier: 6.0.7 |         specifier: 6.0.9 | ||||||
|         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) |         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: |       vite-plugin-html: | ||||||
|         specifier: 3.2.2 |         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: |       vite-plugin-sass-dts: | ||||||
|         specifier: 1.3.30 |         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: |       vite-plugin-svgr: | ||||||
|         specifier: 4.3.0 |         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: |       vite-tsconfig-paths: | ||||||
|         specifier: 5.1.4 |         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: |       zod: | ||||||
|         specifier: 3.24.1 |         specifier: 3.24.1 | ||||||
|         version: 3.24.1 |         version: 3.24.1 | ||||||
| @@ -463,7 +463,7 @@ importers: | |||||||
|         version: 19.0.7 |         version: 19.0.7 | ||||||
|       '@vitejs/plugin-react': |       '@vitejs/plugin-react': | ||||||
|         specifier: 4.3.4 |         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: |       ahooks: | ||||||
|         specifier: 3.8.4 |         specifier: 3.8.4 | ||||||
|         version: 3.8.4(react@19.0.0) |         version: 3.8.4(react@19.0.0) | ||||||
| @@ -489,11 +489,11 @@ importers: | |||||||
|         specifier: 17.6.0 |         specifier: 17.6.0 | ||||||
|         version: 17.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) |         version: 17.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) | ||||||
|       vite: |       vite: | ||||||
|         specifier: 6.0.7 |         specifier: 6.0.9 | ||||||
|         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) |         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: |       vite-tsconfig-paths: | ||||||
|         specifier: 5.1.4 |         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: |     devDependencies: | ||||||
|       '@emotion/react': |       '@emotion/react': | ||||||
|         specifier: 11.14.0 |         specifier: 11.14.0 | ||||||
| @@ -518,7 +518,7 @@ importers: | |||||||
|         version: 5.1.0(typescript@5.7.3) |         version: 5.1.0(typescript@5.7.3) | ||||||
|       vite-plugin-dts: |       vite-plugin-dts: | ||||||
|         specifier: 4.5.0 |         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: |   scripts: | ||||||
|     dependencies: |     dependencies: | ||||||
| @@ -6549,10 +6549,6 @@ packages: | |||||||
|     resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} |     resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} | ||||||
|     engines: {node: ^10 || ^12 || >=14} |     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: |   postcss@8.5.1: | ||||||
|     resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} |     resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} | ||||||
|     engines: {node: ^10 || ^12 || >=14} |     engines: {node: ^10 || ^12 || >=14} | ||||||
| @@ -7999,8 +7995,8 @@ packages: | |||||||
|       vite: |       vite: | ||||||
|         optional: true |         optional: true | ||||||
|  |  | ||||||
|   vite@6.0.7: |   vite@6.0.9: | ||||||
|     resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} |     resolution: {integrity: sha512-MSgUxHcaXLtnBPktkbUSoQUANApKYuxZ6DrbVENlIorbhL2dZydTLaZ01tjUoE3szeFzlFk9ANOKk0xurh4MKA==} | ||||||
|     engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} |     engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} | ||||||
|     hasBin: true |     hasBin: true | ||||||
|     peerDependencies: |     peerDependencies: | ||||||
| @@ -10545,7 +10541,7 @@ snapshots: | |||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@tanstack/react-router': 1.97.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) |       '@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: |     dependencies: | ||||||
|       '@babel/core': 7.26.0 |       '@babel/core': 7.26.0 | ||||||
|       '@babel/generator': 7.26.3 |       '@babel/generator': 7.26.3 | ||||||
| @@ -10569,7 +10565,7 @@ snapshots: | |||||||
|       unplugin: 1.16.0 |       unplugin: 1.16.0 | ||||||
|       zod: 3.24.1 |       zod: 3.24.1 | ||||||
|     optionalDependencies: |     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: |     transitivePeerDependencies: | ||||||
|       - '@tanstack/react-router' |       - '@tanstack/react-router' | ||||||
|       - supports-color |       - supports-color | ||||||
| @@ -11062,7 +11058,7 @@ snapshots: | |||||||
|  |  | ||||||
|   '@ungap/structured-clone@1.2.0': {} |   '@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: |     dependencies: | ||||||
|       '@babel/core': 7.26.0 |       '@babel/core': 7.26.0 | ||||||
|       '@babel/preset-env': 7.26.0(@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 |       regenerator-runtime: 0.14.1 | ||||||
|       systemjs: 6.15.1 |       systemjs: 6.15.1 | ||||||
|       terser: 5.36.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) |       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: |     transitivePeerDependencies: | ||||||
|       - supports-color |       - 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: |     dependencies: | ||||||
|       '@swc/core': 1.7.26 |       '@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: |     transitivePeerDependencies: | ||||||
|       - '@swc/helpers' |       - '@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: |     dependencies: | ||||||
|       '@babel/core': 7.26.0 |       '@babel/core': 7.26.0 | ||||||
|       '@babel/plugin-transform-react-jsx-self': 7.25.9(@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) |       '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) | ||||||
|       '@types/babel__core': 7.20.5 |       '@types/babel__core': 7.20.5 | ||||||
|       react-refresh: 0.14.2 |       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: |     transitivePeerDependencies: | ||||||
|       - supports-color |       - supports-color | ||||||
|  |  | ||||||
| @@ -14880,12 +14876,6 @@ snapshots: | |||||||
|       picocolors: 1.1.1 |       picocolors: 1.1.1 | ||||||
|       source-map-js: 1.2.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: |   postcss@8.5.1: | ||||||
|     dependencies: |     dependencies: | ||||||
|       nanoid: 3.3.8 |       nanoid: 3.3.8 | ||||||
| @@ -16453,7 +16443,7 @@ snapshots: | |||||||
|       - rollup |       - rollup | ||||||
|       - supports-color |       - 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: |     dependencies: | ||||||
|       '@microsoft/api-extractor': 7.49.1(@types/node@22.10.7) |       '@microsoft/api-extractor': 7.49.1(@types/node@22.10.7) | ||||||
|       '@rollup/pluginutils': 5.1.4(rollup@4.27.4) |       '@rollup/pluginutils': 5.1.4(rollup@4.27.4) | ||||||
| @@ -16466,13 +16456,13 @@ snapshots: | |||||||
|       magic-string: 0.30.17 |       magic-string: 0.30.17 | ||||||
|       typescript: 5.7.3 |       typescript: 5.7.3 | ||||||
|     optionalDependencies: |     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: |     transitivePeerDependencies: | ||||||
|       - '@types/node' |       - '@types/node' | ||||||
|       - rollup |       - rollup | ||||||
|       - supports-color |       - 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: |     dependencies: | ||||||
|       '@rollup/pluginutils': 4.2.1 |       '@rollup/pluginutils': 4.2.1 | ||||||
|       colorette: 2.0.20 |       colorette: 2.0.20 | ||||||
| @@ -16486,42 +16476,42 @@ snapshots: | |||||||
|       html-minifier-terser: 6.1.0 |       html-minifier-terser: 6.1.0 | ||||||
|       node-html-parser: 5.4.2 |       node-html-parser: 5.4.2 | ||||||
|       pathe: 0.2.0 |       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: |     dependencies: | ||||||
|       postcss: 8.5.1 |       postcss: 8.5.1 | ||||||
|       postcss-js: 4.0.1(postcss@8.5.1) |       postcss-js: 4.0.1(postcss@8.5.1) | ||||||
|       prettier: 3.4.2 |       prettier: 3.4.2 | ||||||
|       sass-embedded: 1.83.4 |       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: |     dependencies: | ||||||
|       '@rollup/pluginutils': 5.1.3(rollup@4.27.4) |       '@rollup/pluginutils': 5.1.3(rollup@4.27.4) | ||||||
|       '@svgr/core': 8.1.0(typescript@5.7.3) |       '@svgr/core': 8.1.0(typescript@5.7.3) | ||||||
|       '@svgr/plugin-jsx': 8.1.0(@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: |     transitivePeerDependencies: | ||||||
|       - rollup |       - rollup | ||||||
|       - supports-color |       - supports-color | ||||||
|       - typescript |       - 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: |     dependencies: | ||||||
|       debug: 4.3.7 |       debug: 4.3.7 | ||||||
|       globrex: 0.1.2 |       globrex: 0.1.2 | ||||||
|       tsconfck: 3.0.3(typescript@5.7.3) |       tsconfck: 3.0.3(typescript@5.7.3) | ||||||
|     optionalDependencies: |     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: |     transitivePeerDependencies: | ||||||
|       - supports-color |       - supports-color | ||||||
|       - typescript |       - 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: |     dependencies: | ||||||
|       esbuild: 0.24.2 |       esbuild: 0.24.2 | ||||||
|       postcss: 8.4.49 |       postcss: 8.5.1 | ||||||
|       rollup: 4.27.4 |       rollup: 4.27.4 | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.10.7 |       '@types/node': 22.10.7 | ||||||
|   | |||||||
| @@ -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) | Package/ath11k-firmware-qca6390 = $(call Package/firmware-default,QCA6390 ath11k firmware) | ||||||
| define Package/ath11k-firmware-qca6390/install | define Package/ath11k-firmware-qca6390/install | ||||||
| 	$(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCA6390/hw2.0 | 	$(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCA6390/hw2.0 | ||||||
|   | |||||||
| @@ -0,0 +1,53 @@ | |||||||
|  | From 400ece6c7f346b0a30867bd00b03b5b2563d4357 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Sven Eckelmann <sven@narfation.org> | ||||||
|  | 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 <sven@narfation.org> | ||||||
|  | Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> | ||||||
|  | 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; | ||||||
| @@ -0,0 +1,96 @@ | |||||||
|  | From 515bcdf587f9911f2d5de51524cb7e048d295052 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Baochen Qiang <quic_bqiang@quicinc.com> | ||||||
|  | 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 <quic_bqiang@quicinc.com> | ||||||
|  | Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> | ||||||
|  | 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); | ||||||
| @@ -0,0 +1,219 @@ | |||||||
|  | From f019f4dff2e4cb8704dc608496e3f2829de3e919 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Carl Huang <quic_cjhuang@quicinc.com> | ||||||
|  | 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 <quic_cjhuang@quicinc.com> | ||||||
|  | Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> | ||||||
|  | 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; | ||||||
| @@ -0,0 +1,202 @@ | |||||||
|  | From 5dc9d1a55e953d9059ecbdd8fe6ec81e9edd349e Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Baochen Qiang <quic_bqiang@quicinc.com> | ||||||
|  | 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 <quic_bqiang@quicinc.com> | ||||||
|  | Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> | ||||||
|  | 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) | ||||||
| @@ -138,7 +138,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com> | |||||||
|  int ath11k_mhi_register(struct ath11k_pci *ar_pci); |  int ath11k_mhi_register(struct ath11k_pci *ar_pci); | ||||||
| --- a/drivers/net/wireless/ath/ath11k/pci.c | --- a/drivers/net/wireless/ath/ath11k/pci.c | ||||||
| +++ b/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) |  static void ath11k_pci_init_qmi_ce_config(struct ath11k_base *ab) | ||||||
|  { |  { | ||||||
|  	struct ath11k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg; |  	struct ath11k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg; | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ath/ath11k/pci.c | --- a/drivers/net/wireless/ath/ath11k/pci.c | ||||||
| +++ b/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, |  	pci_read_config_dword(pci_dev, pci_dev->msi_cap + PCI_MSI_ADDRESS_LO, | ||||||
|  			      &ab->pci.msi.addr_lo); |  			      &ab->pci.msi.addr_lo); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com> | |||||||
|  	{ |  	{ | ||||||
|  		.hw_rev = ATH11K_HW_IPQ8074, |  		.hw_rev = ATH11K_HW_IPQ8074, | ||||||
|  		.name = "ipq8074 hw2.0", |  		.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) |  static int ath11k_init_hw_params(struct ath11k_base *ab) | ||||||
|  { |  { | ||||||
|  	const struct ath11k_hw_params *hw_params = NULL; |  	const struct ath11k_hw_params *hw_params = NULL; | ||||||
| @@ -41,7 +41,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com> | |||||||
|   |   | ||||||
|  	for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) { |  	for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) { | ||||||
|  		hw_params = &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; |  	ab->hw_params = *hw_params; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/ath/ath11k/core.c | --- a/drivers/net/wireless/ath/ath11k/core.c | ||||||
| +++ b/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, |  		.supports_shadow_regs = false, | ||||||
|  		.idle_ps = false, |  		.idle_ps = false, | ||||||
|  		.supports_sta_ps = false, |  		.supports_sta_ps = false, | ||||||
|   | |||||||
| @@ -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; |  | ||||||
|  	} |  | ||||||
| @@ -69,7 +69,7 @@ Signed-off-by: Sasha Levin <sashal@kernel.org> | |||||||
|  |  | ||||||
| --- a/backport-include/net/genetlink.h | --- a/backport-include/net/genetlink.h | ||||||
| +++ b/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) |  #define genlmsg_multicast_allns LINUX_BACKPORT(genlmsg_multicast_allns) | ||||||
|  int backport_genlmsg_multicast_allns(const struct genl_family *family, |  int backport_genlmsg_multicast_allns(const struct genl_family *family, | ||||||
|  				     struct sk_buff *skb, u32 portid, |  				     struct sk_buff *skb, u32 portid, | ||||||
| @@ -80,7 +80,7 @@ Signed-off-by: Sasha Levin <sashal@kernel.org> | |||||||
|  static inline struct nlattr **genl_family_attrbuf(struct genl_family *family) |  static inline struct nlattr **genl_family_attrbuf(struct genl_family *family) | ||||||
| --- a/compat/backport-genetlink.c | --- a/compat/backport-genetlink.c | ||||||
| +++ b/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); |  EXPORT_SYMBOL_GPL(genlmsg_multicast); | ||||||
|   |   | ||||||
| @@ -108,7 +108,7 @@ Signed-off-by: Sasha Levin <sashal@kernel.org> | |||||||
|  			if (!err) |  			if (!err) | ||||||
|  				delivered = true; |  				delivered = true; | ||||||
|  			else if (err != -ESRCH) |  			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; |  		prev = net; | ||||||
|  	} |  	} | ||||||
| @@ -143,7 +143,7 @@ Signed-off-by: Sasha Levin <sashal@kernel.org> | |||||||
|  EXPORT_SYMBOL_GPL(backport_genlmsg_multicast_allns); |  EXPORT_SYMBOL_GPL(backport_genlmsg_multicast_allns); | ||||||
| --- a/net/wireless/nl80211.c | --- a/net/wireless/nl80211.c | ||||||
| +++ b/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); |  	genlmsg_end(msg, hdr); | ||||||
|   |   | ||||||
| @@ -159,7 +159,7 @@ Signed-off-by: Sasha Levin <sashal@kernel.org> | |||||||
|   |   | ||||||
|  	return; |  	return; | ||||||
|   |   | ||||||
| @@ -18217,10 +18222,15 @@ | @@ -18188,10 +18193,15 @@ void nl80211_send_beacon_hint_event(stru | ||||||
|   |   | ||||||
|  	genlmsg_end(msg, hdr); |  	genlmsg_end(msg, hdr); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -113,7 +113,7 @@ | |||||||
|  	u8 rx_flags; |  	u8 rx_flags; | ||||||
| --- a/drivers/net/wireless/mac80211_hwsim.c | --- a/drivers/net/wireless/mac80211_hwsim.c | ||||||
| +++ b/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) |  	if (err) | ||||||
|  		goto out_exit_netlink; |  		goto out_exit_netlink; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ | |||||||
|  static inline u32 __get_unaligned_be24(const u8 *p) |  static inline u32 __get_unaligned_be24(const u8 *p) | ||||||
| --- a/net/wireless/core.c | --- a/net/wireless/core.c | ||||||
| +++ b/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) { |  	list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { | ||||||
|  		if (!wdev->netdev) |  		if (!wdev->netdev) | ||||||
|  			continue; |  			continue; | ||||||
| @@ -34,7 +34,7 @@ | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	if (err) { |  	if (err) { | ||||||
| @@ -180,11 +188,19 @@ | @@ -180,11 +188,19 @@ int cfg80211_switch_netns(struct cfg8021 | ||||||
|  						     list) { |  						     list) { | ||||||
|  			if (!wdev->netdev) |  			if (!wdev->netdev) | ||||||
|  				continue; |  				continue; | ||||||
| @@ -54,7 +54,7 @@ | |||||||
|  		} |  		} | ||||||
|   |   | ||||||
|  		return err; |  		return err; | ||||||
| @@ -1413,7 +1429,11 @@ | @@ -1428,7 +1444,11 @@ static int cfg80211_netdev_notifier_call | ||||||
|  		SET_NETDEV_DEVTYPE(dev, &wiphy_type); |  		SET_NETDEV_DEVTYPE(dev, &wiphy_type); | ||||||
|  		wdev->netdev = dev; |  		wdev->netdev = dev; | ||||||
|  		/* can only change netns with wiphy */ |  		/* can only change netns with wiphy */ | ||||||
| @@ -67,8 +67,8 @@ | |||||||
|  		cfg80211_init_wdev(wdev); |  		cfg80211_init_wdev(wdev); | ||||||
|  		break; |  		break; | ||||||
| --- a/net/mac80211/rc80211_minstrel_ht_debugfs.c | --- a/net/mac80211/rc80211_minstrel_ht_debugfs.c | ||||||
| +++ a/net/mac80211/rc80211_minstrel_ht_debugfs.c | +++ b/net/mac80211/rc80211_minstrel_ht_debugfs.c | ||||||
| @@ -187,7 +187,9 @@ | @@ -187,7 +187,9 @@ static const struct file_operations mins | ||||||
|  	.open = minstrel_ht_stats_open, |  	.open = minstrel_ht_stats_open, | ||||||
|  	.read = minstrel_stats_read, |  	.read = minstrel_stats_read, | ||||||
|  	.release = minstrel_stats_release, |  	.release = minstrel_stats_release, | ||||||
| @@ -78,7 +78,7 @@ | |||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  static char * |  static char * | ||||||
| @@ -323,7 +325,9 @@ | @@ -323,7 +325,9 @@ static const struct file_operations mins | ||||||
|  	.open = minstrel_ht_stats_csv_open, |  	.open = minstrel_ht_stats_csv_open, | ||||||
|  	.read = minstrel_stats_read, |  	.read = minstrel_stats_read, | ||||||
|  	.release = minstrel_stats_release, |  	.release = minstrel_stats_release, | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
| --- a/net/mac80211/tx.c | --- a/net/mac80211/tx.c | ||||||
| +++ b/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) |  		if (deficit < 0) | ||||||
|  			sta->airtime[txqi->txq.ac].deficit += |  			sta->airtime[txqi->txq.ac].deficit += | ||||||
| @@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  		if (deficit < 0 || !aql_check) { |  		if (deficit < 0 || !aql_check) { | ||||||
|  			list_move_tail(&txqi->schedule_order, |  			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); |  		sta = container_of(iter->txq.sta, struct sta_info, sta); | ||||||
|  		if (ieee80211_sta_deficit(sta, ac) < 0) |  		if (ieee80211_sta_deficit(sta, ac) < 0) | ||||||
| @@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  		list_move_tail(&iter->schedule_order, &local->active_txqs[ac]); |  		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) |  	if (sta->airtime[ac].deficit >= 0) | ||||||
|  		goto out; |  		goto out; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -51,7 +51,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|   * |   * | ||||||
|   * Drivers can optionally delegate responsibility for scheduling queues to |   * Drivers can optionally delegate responsibility for scheduling queues to | ||||||
|   * mac80211, to take advantage of airtime fairness accounting. In this case, 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 |   *	For non MLO STA it will point to the deflink data. For MLO STA | ||||||
|   *	ieee80211_sta_recalc_aggregates() must be called to update it. |   *	ieee80211_sta_recalc_aggregates() must be called to update it. | ||||||
|   * @support_p2p_ps: indicates whether the STA supports P2P PS mechanism or not. |   * @support_p2p_ps: indicates whether the STA supports P2P PS mechanism or not. | ||||||
| @@ -62,7 +62,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|   * @deflink: This holds the default link STA information, for non MLO STA all link |   * @deflink: This holds the default link STA information, for non MLO STA all link | ||||||
|   *	specific STA information is accessed through @deflink or through |   *	specific STA information is accessed through @deflink or through | ||||||
|   *	link[0] which points to address of @deflink. For MLO Link STA |   *	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(). |   * @hw: pointer as obtained from ieee80211_alloc_hw(). | ||||||
|   * @queue: queue number (counted from zero). |   * @queue: queue number (counted from zero). | ||||||
|   * |   * | ||||||
| @@ -71,7 +71,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|   */ |   */ | ||||||
|  void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue); |  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(). |   * @hw: pointer as obtained from ieee80211_alloc_hw(). | ||||||
|   * @queue: queue number (counted from zero). |   * @queue: queue number (counted from zero). | ||||||
|   * |   * | ||||||
| @@ -80,7 +80,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|   */ |   */ | ||||||
|  void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue); |  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(). |   * @hw: pointer as obtained from ieee80211_alloc_hw(). | ||||||
|   * @queue: queue number (counted from zero). |   * @queue: queue number (counted from zero). | ||||||
|   * |   * | ||||||
| @@ -89,7 +89,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|   * |   * | ||||||
|   * Return: %true if the queue is stopped. %false otherwise. |   * 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 |   * ieee80211_stop_queues - stop all queues | ||||||
|   * @hw: pointer as obtained from ieee80211_alloc_hw(). |   * @hw: pointer as obtained from ieee80211_alloc_hw(). | ||||||
|   * |   * | ||||||
| @@ -98,7 +98,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|   */ |   */ | ||||||
|  void ieee80211_stop_queues(struct ieee80211_hw *hw); |  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 |   * ieee80211_wake_queues - wake all queues | ||||||
|   * @hw: pointer as obtained from ieee80211_alloc_hw(). |   * @hw: pointer as obtained from ieee80211_alloc_hw(). | ||||||
|   * |   * | ||||||
| @@ -107,7 +107,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|   */ |   */ | ||||||
|  void ieee80211_wake_queues(struct ieee80211_hw *hw); |  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_ | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  /** |  /** | ||||||
|   | |||||||
| @@ -387,7 +387,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  	 * Set the WLAN_TDLS_TEARDOWN flag to indicate a teardown in progress. |  	 * Set the WLAN_TDLS_TEARDOWN flag to indicate a teardown in progress. | ||||||
| --- a/net/mac80211/tx.c | --- a/net/mac80211/tx.c | ||||||
| +++ b/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; |  	bool supp_vht = false; | ||||||
|  	enum nl80211_band band; |  	enum nl80211_band band; | ||||||
|   |   | ||||||
| @@ -397,7 +397,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  	ret = fq_init(fq, 4096); |  	ret = fq_init(fq, 4096); | ||||||
|  	if (ret) |  	if (ret) | ||||||
|  		return 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; |  	struct fq *fq = &local->fq; | ||||||
|   |   | ||||||
| @@ -407,7 +407,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  	kfree(local->cvars); |  	kfree(local->cvars); | ||||||
|  	local->cvars = NULL; |  	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 ieee80211_vif *vif; | ||||||
|  	struct txq_info *txqi; |  	struct txq_info *txqi; | ||||||
|   |   | ||||||
| @@ -417,7 +417,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  		return false; |  		return false; | ||||||
|   |   | ||||||
|  	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) |  	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)) |  	if (IS_ERR(sta)) | ||||||
|  		sta = NULL; |  		sta = NULL; | ||||||
|   |   | ||||||
| @@ -431,7 +431,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  	ieee80211_aggr_check(sdata, sta, skb); |  	ieee80211_aggr_check(sdata, sta, skb); | ||||||
|   |   | ||||||
|  	sk_pacing_shift_update(skb->sk, sdata->local->hw.tx_sk_pacing_shift); |  	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; |  	struct tid_ampdu_tx *tid_tx; | ||||||
|  	u8 tid; |  	u8 tid; | ||||||
|   |   | ||||||
| @@ -444,7 +444,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|   |   | ||||||
|  	if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) && |  	if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) && | ||||||
|  	    test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)) |  	    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) |  			if (!txok) | ||||||
|  				break; |  				break; | ||||||
|  		} |  		} | ||||||
| @@ -454,7 +454,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  	} |  	} | ||||||
|  	spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); |  	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)) { |  	if (!IS_ERR(sta)) { | ||||||
|   | |||||||
| @@ -59,7 +59,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  		flow = fq_find_fattest_flow(fq); |  		flow = fq_find_fattest_flow(fq); | ||||||
| --- a/include/net/mac80211.h | --- a/include/net/mac80211.h | ||||||
| +++ b/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 |   * @addr: address of this interface | ||||||
|   * @p2p: indicates whether this AP or STA interface is a p2p |   * @p2p: indicates whether this AP or STA interface is a p2p | ||||||
|   *	interface, i.e. a GO or p2p-sta respectively |   *	interface, i.e. a GO or p2p-sta respectively | ||||||
| @@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   * @driver_flags: flags/capabilities the driver has for this interface, |   * @driver_flags: flags/capabilities the driver has for this interface, | ||||||
|   *	these need to be set (or cleared) when the interface is added |   *	these need to be set (or cleared) when the interface is added | ||||||
|   *	or, if supported by the driver, the interface type is changed |   *	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; |  	struct ieee80211_txq *txq; | ||||||
|   |   | ||||||
| @@ -90,7 +90,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
| --- a/net/mac80211/tx.c | --- a/net/mac80211/tx.c | ||||||
| +++ b/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) |  static void ieee80211_set_skb_enqueue_time(struct sk_buff *skb) | ||||||
|  { |  { | ||||||
| @@ -103,7 +103,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  static u32 codel_skb_len_func(const struct sk_buff *skb) |  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; |  	return TX_CONTINUE; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -219,7 +219,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  	/* will not be crypto-handled beyond what we do here, so use false |  	/* 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 |  	 * 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, |  	if (unlikely(ieee80211_skb_resize(sdata, skb, | ||||||
|  					  max_t(int, extra_head + hw_headroom - |  					  max_t(int, extra_head + hw_headroom - | ||||||
|  						     skb_headroom(skb), 0), |  						     skb_headroom(skb), 0), | ||||||
| @@ -232,7 +232,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  	memcpy(ð, skb->data, ETH_HLEN - 2); |  	memcpy(ð, skb->data, ETH_HLEN - 2); | ||||||
|  	hdr = skb_push(skb, extra_head); |  	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->control.vif = &sdata->vif; | ||||||
|  	info->flags = IEEE80211_TX_CTL_FIRST_FRAGMENT | |  	info->flags = IEEE80211_TX_CTL_FIRST_FRAGMENT | | ||||||
|  		      IEEE80211_TX_CTL_DONTFRAG | |  		      IEEE80211_TX_CTL_DONTFRAG | | ||||||
| @@ -241,7 +241,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	info->control.flags = IEEE80211_TX_CTRL_FAST_XMIT | |  	info->control.flags = IEEE80211_TX_CTRL_FAST_XMIT | | ||||||
|  			      u32_encode_bits(IEEE80211_LINK_UNSPECIFIED, |  			      u32_encode_bits(IEEE80211_LINK_UNSPECIFIED, | ||||||
|  					      IEEE80211_TX_CTRL_MLO_LINK); |  					      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; |  	tx.key = fast_tx->key; | ||||||
|   |   | ||||||
|  	if (ieee80211_queue_skb(local, sdata, sta, skb)) |  	if (ieee80211_queue_skb(local, sdata, sta, skb)) | ||||||
| @@ -261,7 +261,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) |  	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) | ||||||
|  		sdata = container_of(sdata->bss, |  		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); |  	__skb_queue_tail(&tx.skbs, skb); | ||||||
|  	ieee80211_tx_frags(local, &sdata->vif, sta, &tx.skbs, false); |  	ieee80211_tx_frags(local, &sdata->vif, sta, &tx.skbs, false); | ||||||
| @@ -318,7 +318,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	return true; |  	return true; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -4201,31 +4275,14 @@ void __ieee80211_subif_start_xmit(struct | @@ -4205,31 +4279,14 @@ void __ieee80211_subif_start_xmit(struct | ||||||
|  			goto out; |  			goto out; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -358,7 +358,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	skb_list_walk_safe(skb, skb, next) { |  	skb_list_walk_safe(skb, skb, next) { | ||||||
| @@ -4443,9 +4500,11 @@ normal: | @@ -4447,9 +4504,11 @@ normal: | ||||||
|  	return NETDEV_TX_OK; |  	return NETDEV_TX_OK; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -373,7 +373,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  { |  { | ||||||
|  	struct ieee80211_local *local = sdata->local; |  	struct ieee80211_local *local = sdata->local; | ||||||
|  	struct ieee80211_tx_control control = {}; |  	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; |  	unsigned long flags; | ||||||
|  	int q = info->hw_queue; |  	int q = info->hw_queue; | ||||||
|   |   | ||||||
| @@ -388,7 +388,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	spin_lock_irqsave(&local->queue_stop_reason_lock, flags); |  	spin_lock_irqsave(&local->queue_stop_reason_lock, flags); | ||||||
|   |   | ||||||
|  	if (local->queue_stop_reasons[q] || |  	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; |  	return true; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -415,7 +415,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata, |  static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata, | ||||||
|  				struct net_device *dev, struct sta_info *sta, |  				struct net_device *dev, struct sta_info *sta, | ||||||
|  				struct ieee80211_key *key, struct sk_buff *skb) |  				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_tx_info *info; | ||||||
|  	struct ieee80211_local *local = sdata->local; |  	struct ieee80211_local *local = sdata->local; | ||||||
|  	struct tid_ampdu_tx *tid_tx; |  	struct tid_ampdu_tx *tid_tx; | ||||||
| @@ -430,7 +430,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  	if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) && |  	if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) && | ||||||
|  	    test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)) |  	    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)) |  	if (unlikely(!skb)) | ||||||
|  		return; |  		return; | ||||||
|   |   | ||||||
| @@ -440,7 +440,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	ieee80211_aggr_check(sdata, sta, skb); |  	ieee80211_aggr_check(sdata, sta, skb); | ||||||
|   |   | ||||||
|  	tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK; |  	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; |  			return; | ||||||
|  		} |  		} | ||||||
|   |   | ||||||
| @@ -471,7 +471,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) |  	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) | ||||||
|  		sdata = container_of(sdata->bss, |  		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) |  	if (key) | ||||||
|  		info->control.hw_key = &key->conf; |  		info->control.hw_key = &key->conf; | ||||||
|   |   | ||||||
| @@ -496,7 +496,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	ieee80211_tx_8023(sdata, skb, sta, false); |  	ieee80211_tx_8023(sdata, skb, sta, false); | ||||||
|   |   | ||||||
|  	return; |  	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)) |  		    key->conf.cipher == WLAN_CIPHER_SUITE_TKIP)) | ||||||
|  		goto skip_offload; |  		goto skip_offload; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -728,7 +728,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
| --- a/net/mac80211/tx.c | --- a/net/mac80211/tx.c | ||||||
| +++ b/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)) |  	if (!ieee80211_hw_check(&local->hw, SUPPORT_FAST_XMIT)) | ||||||
|  		return; |  		return; | ||||||
|   |   | ||||||
| @@ -738,7 +738,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	/* Locking here protects both the pointer itself, and against concurrent |  	/* Locking here protects both the pointer itself, and against concurrent | ||||||
|  	 * invocations winning data access races to, e.g., the key pointer that |  	 * invocations winning data access races to, e.g., the key pointer that | ||||||
|  	 * is used. |  	 * 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) |  	if (sdata->vif.offload_flags & IEEE80211_OFFLOAD_ENCAP_ENABLED) | ||||||
|  		return false; |  		return false; | ||||||
|   |   | ||||||
| @@ -748,7 +748,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	if (skb_is_gso(skb)) |  	if (skb_is_gso(skb)) | ||||||
|  		return false; |  		return false; | ||||||
|   |   | ||||||
| @@ -3635,10 +3641,11 @@ free: | @@ -3639,10 +3645,11 @@ free: | ||||||
|  	return NULL; |  	return NULL; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -764,7 +764,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  { |  { | ||||||
|  	struct ieee80211_local *local = sdata->local; |  	struct ieee80211_local *local = sdata->local; | ||||||
|  	struct ieee80211_hdr *hdr = (void *)fast_tx->hdr; |  	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; |  	ieee80211_tx_result r; | ||||||
|  	int hw_headroom = sdata->local->hw.extra_tx_headroom; |  	int hw_headroom = sdata->local->hw.extra_tx_headroom; | ||||||
|  	int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2); |  	int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2); | ||||||
| @@ -772,7 +772,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  	skb = skb_share_check(skb, GFP_ATOMIC); |  	skb = skb_share_check(skb, GFP_ATOMIC); | ||||||
|  	if (unlikely(!skb)) |  	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))) |  					  ENCRYPT_NO))) | ||||||
|  		goto free; |  		goto free; | ||||||
|   |   | ||||||
| @@ -786,7 +786,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  	info = IEEE80211_SKB_CB(skb); |  	info = IEEE80211_SKB_CB(skb); | ||||||
|  	memset(info, 0, sizeof(*info)); |  	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 |  #endif | ||||||
|   |   | ||||||
|  	if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) { |  	if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) { | ||||||
| @@ -796,7 +796,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  		*ieee80211_get_qos_ctl(hdr) = tid; |  		*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 ieee80211_hdr *hdr = (void *)fast_tx->hdr; | ||||||
|  	struct tid_ampdu_tx *tid_tx = NULL; |  	struct tid_ampdu_tx *tid_tx = NULL; | ||||||
|  	struct sk_buff *next; |  	struct sk_buff *next; | ||||||
| @@ -804,7 +804,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	u8 tid = IEEE80211_NUM_TIDS; |  	u8 tid = IEEE80211_NUM_TIDS; | ||||||
|   |   | ||||||
|  	/* control port protocol needs a lot of special handling */ |  	/* 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 <nbd@nbd.name> | |||||||
|  	/* after this point (skb is modified) we cannot return false */ |  	/* after this point (skb is modified) we cannot return false */ | ||||||
|  	skb = ieee80211_tx_skb_fixup(skb, ieee80211_sdata_netdev_features(sdata)); |  	skb = ieee80211_tx_skb_fixup(skb, ieee80211_sdata_netdev_features(sdata)); | ||||||
|  	if (!skb) |  	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_list_walk_safe(skb, skb, next) { | ||||||
|  		skb_mark_not_on_list(skb); |  		skb_mark_not_on_list(skb); | ||||||
| @@ -823,7 +823,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	return true; |  	return true; | ||||||
| @@ -4252,8 +4262,15 @@ void __ieee80211_subif_start_xmit(struct | @@ -4256,8 +4266,15 @@ void __ieee80211_subif_start_xmit(struct | ||||||
|  		return; |  		return; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -839,7 +839,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) |  	if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) | ||||||
|  		goto out_free; |  		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)); |  	skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, sta, skb)); | ||||||
|  	ieee80211_aggr_check(sdata, sta, skb); |  	ieee80211_aggr_check(sdata, sta, skb); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -117,7 +117,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, |  void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, | ||||||
| --- a/net/mac80211/tx.c | --- a/net/mac80211/tx.c | ||||||
| +++ b/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; |  	return queued; | ||||||
|  } |  } | ||||||
|   |   | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com> | |||||||
|  |  | ||||||
| --- a/include/net/mac80211.h | --- a/include/net/mac80211.h | ||||||
| +++ b/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); |  				  unsigned long delay); | ||||||
|   |   | ||||||
|  /** |  /** | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/include/net/mac80211.h | --- a/include/net/mac80211.h | ||||||
| +++ b/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, |   *	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. |   *	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. |   *	In fact, cannot change from having valid_links and not having them. | ||||||
| @@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   */ |   */ | ||||||
|  struct ieee80211_ops { |  struct ieee80211_ops { | ||||||
|  	void (*tx)(struct ieee80211_hw *hw, |  	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_vif *vif, | ||||||
|  				struct ieee80211_sta *sta, |  				struct ieee80211_sta *sta, | ||||||
|  				u16 old_links, u16 new_links); |  				u16 old_links, u16 new_links); | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ Reviewed-by: Peer, Ilan <ilan.peer@intel.com> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c | --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c | ||||||
| +++ b/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, |  static int iwl_mvm_get_ctrl_vif_queue(struct iwl_mvm *mvm, | ||||||
|  				      struct ieee80211_tx_info *info, |  				      struct ieee80211_tx_info *info, | ||||||
| @@ -26,7 +26,7 @@ Reviewed-by: Peer, Ilan <ilan.peer@intel.com> | |||||||
|  	struct iwl_mvm_vif *mvmvif = |  	struct iwl_mvm_vif *mvmvif = | ||||||
|  		iwl_mvm_vif_from_mac80211(info->control.vif); |  		iwl_mvm_vif_from_mac80211(info->control.vif); | ||||||
|  	__le16 fc = hdr->frame_control; |  	__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"). |  		 * reason 7 ("Class 3 frame received from nonassociated STA"). | ||||||
|  		 */ |  		 */ | ||||||
|  		if (ieee80211_is_mgmt(fc) && |  		if (ieee80211_is_mgmt(fc) && | ||||||
| @@ -35,7 +35,7 @@ Reviewed-by: Peer, Ilan <ilan.peer@intel.com> | |||||||
|  		     ieee80211_is_deauth(fc) || ieee80211_is_disassoc(fc))) |  		     ieee80211_is_deauth(fc) || ieee80211_is_disassoc(fc))) | ||||||
|  			return mvm->probe_queue; |  			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 |  			else | ||||||
|  				sta_id = mvmvif->mcast_sta.sta_id; |  				sta_id = mvmvif->mcast_sta.sta_id; | ||||||
|   |   | ||||||
| @@ -114,7 +114,7 @@ Reviewed-by: Peer, Ilan <ilan.peer@intel.com> | |||||||
|   */ |   */ | ||||||
| --- a/net/mac80211/tx.c | --- a/net/mac80211/tx.c | ||||||
| +++ b/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); |  		int ac = skb_get_queue_mapping(tx->skb); | ||||||
|   |   | ||||||
|  		if (ieee80211_is_mgmt(hdr->frame_control) && |  		if (ieee80211_is_mgmt(hdr->frame_control) && | ||||||
| @@ -123,7 +123,7 @@ Reviewed-by: Peer, Ilan <ilan.peer@intel.com> | |||||||
|  			info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; |  			info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; | ||||||
|  			return TX_CONTINUE; |  			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) && |  	if (!(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) && | ||||||
|  	    unlikely(!ieee80211_is_data_present(hdr->frame_control))) { |  	    unlikely(!ieee80211_is_data_present(hdr->frame_control))) { | ||||||
|  		if ((!ieee80211_is_mgmt(hdr->frame_control) || |  		if ((!ieee80211_is_mgmt(hdr->frame_control) || | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com> | |||||||
|  |  | ||||||
| --- a/include/net/mac80211.h | --- a/include/net/mac80211.h | ||||||
| +++ b/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. |   *	Note that vif can be NULL. | ||||||
|   *	The callback can sleep. |   *	The callback can sleep. | ||||||
|   * |   * | ||||||
| @@ -23,7 +23,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com> | |||||||
|   * @channel_switch: Drivers that need (or want) to offload the channel |   * @channel_switch: Drivers that need (or want) to offload the channel | ||||||
|   *	switch operation for CSAs received from the AP may implement this |   *	switch operation for CSAs received from the AP may implement this | ||||||
|   *	callback. They must then call ieee80211_chswitch_done() to indicate |   *	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 |  #endif | ||||||
|  	void (*flush)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, |  	void (*flush)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, | ||||||
|  		      u32 queues, bool drop); |  		      u32 queues, bool drop); | ||||||
|   | |||||||
| @@ -38,7 +38,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  |  | ||||||
| --- a/include/net/mac80211.h | --- a/include/net/mac80211.h | ||||||
| +++ b/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); |  			      unsigned int link_id); | ||||||
|   |   | ||||||
|  /** |  /** | ||||||
| @@ -168,7 +168,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|   |   | ||||||
| --- a/net/mac80211/tx.c | --- a/net/mac80211/tx.c | ||||||
| +++ b/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 |  static void | ||||||
| @@ -192,7 +192,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  	for (i = 0; i < beacon->mbssid_ies->cnt; i++) |  	for (i = 0; i < beacon->mbssid_ies->cnt; i++) | ||||||
|  		skb_put_data(skb, beacon->mbssid_ies->elem[i].data, |  		skb_put_data(skb, beacon->mbssid_ies->elem[i].data, | ||||||
|  			     beacon->mbssid_ies->elem[i].len); |  			     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, |  			struct ieee80211_mutable_offsets *offs, | ||||||
|  			bool is_template, |  			bool is_template, | ||||||
|  			struct beacon_data *beacon, |  			struct beacon_data *beacon, | ||||||
| @@ -202,7 +202,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  { |  { | ||||||
|  	struct ieee80211_local *local = hw_to_local(hw); |  	struct ieee80211_local *local = hw_to_local(hw); | ||||||
|  	struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); |  	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, |  	/* headroom, head length, | ||||||
|  	 * tail length, maximum TIM length and multiple BSSID length |  	 * tail length, maximum TIM length and multiple BSSID length | ||||||
|  	 */ |  	 */ | ||||||
| @@ -213,7 +213,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  	skb = dev_alloc_skb(local->tx_headroom + beacon->head_len + |  	skb = dev_alloc_skb(local->tx_headroom + beacon->head_len + | ||||||
|  			    beacon->tail_len + 256 + |  			    beacon->tail_len + 256 + | ||||||
|  			    local->hw.extra_beacon_tailroom + mbssid_len); |  			    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]; |  		offs->cntdwn_counter_offs[0] = beacon->cntdwn_counter_offsets[0]; | ||||||
|   |   | ||||||
|  		if (mbssid_len) { |  		if (mbssid_len) { | ||||||
| @@ -222,7 +222,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  			offs->mbssid_off = skb->len - mbssid_len; |  			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; |  	return skb; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -275,7 +275,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  { |  { | ||||||
|  	struct ieee80211_local *local = hw_to_local(hw); |  	struct ieee80211_local *local = hw_to_local(hw); | ||||||
|  	struct beacon_data *beacon = NULL; |  	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) |  		if (!beacon) | ||||||
|  			goto out; |  			goto out; | ||||||
|   |   | ||||||
| @@ -307,7 +307,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  	} else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) { |  	} else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) { | ||||||
|  		struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; |  		struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; | ||||||
|  		struct ieee80211_hdr *hdr; |  		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, |  			      struct ieee80211_mutable_offsets *offs, | ||||||
|  			      unsigned int link_id) |  			      unsigned int link_id) | ||||||
|  { |  { | ||||||
| @@ -359,7 +359,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw, |  struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw, | ||||||
|  					 struct ieee80211_vif *vif, |  					 struct ieee80211_vif *vif, | ||||||
|  					 u16 *tim_offset, u16 *tim_length, |  					 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 ieee80211_mutable_offsets offs = {}; | ||||||
|  	struct sk_buff *bcn = __ieee80211_beacon_get(hw, vif, &offs, false, |  	struct sk_buff *bcn = __ieee80211_beacon_get(hw, vif, &offs, false, | ||||||
|   | |||||||
| @@ -16,7 +16,7 @@ and we should ignore this. | |||||||
|  |  | ||||||
| --- a/net/wireless/core.c | --- a/net/wireless/core.c | ||||||
| +++ b/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)) |  				    c->limits[j].max > 1)) | ||||||
|  				return -EINVAL; |  				return -EINVAL; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ | |||||||
|   |   | ||||||
| --- a/include/net/mac80211.h | --- a/include/net/mac80211.h | ||||||
| +++ b/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 |   * @power_level: requested transmit power (in dBm), backward compatibility | ||||||
|   *	value only that is set to the minimum of all interfaces |   *	value only that is set to the minimum of all interfaces | ||||||
| @@ -26,7 +26,7 @@ | |||||||
|   * |   * | ||||||
|   * @chandef: the channel definition to tune to |   * @chandef: the channel definition to tune to | ||||||
|   * @radar_enabled: whether radar detection is enabled |   * @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 { |  struct ieee80211_conf { | ||||||
|  	u32 flags; |  	u32 flags; | ||||||
|  	int power_level, dynamic_ps_timeout; |  	int power_level, dynamic_ps_timeout; | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net> | |||||||
|  |  | ||||||
| --- a/net/mac80211/sta_info.c | --- a/net/mac80211/sta_info.c | ||||||
| +++ b/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]; |  		sband = local->hw.wiphy->bands[band]; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/include/net/mac80211.h | --- a/include/net/mac80211.h | ||||||
| +++ b/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 |   * @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 |   *	(non-AP STA) of an HE TB PPDU on an RU that spans the entire PPDU | ||||||
|   *	bandwidth |   *	bandwidth | ||||||
| @@ -13,7 +13,7 @@ | |||||||
|   */ |   */ | ||||||
|  struct ieee80211_bss_conf { |  struct ieee80211_bss_conf { | ||||||
|  	const u8 *bssid; |  	const u8 *bssid; | ||||||
| @@ -758,6 +764,9 @@ | @@ -758,6 +764,9 @@ struct ieee80211_bss_conf { | ||||||
|  	bool he_su_beamformee; |  	bool he_su_beamformee; | ||||||
|  	bool he_mu_beamformer; |  	bool he_mu_beamformer; | ||||||
|  	bool he_full_ul_mumimo; |  	bool he_full_ul_mumimo; | ||||||
| @@ -25,7 +25,7 @@ | |||||||
|  /** |  /** | ||||||
| --- a/net/mac80211/cfg.c | --- a/net/mac80211/cfg.c | ||||||
| +++ b/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; |  				IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
| @@ -153,11 +153,11 @@ func (b *Base) DialOptions(opts ...dialer.Option) []dialer.Option { | |||||||
| } | } | ||||||
|  |  | ||||||
| type BasicOption struct { | type BasicOption struct { | ||||||
| 	TFO         bool   `proxy:"tfo,omitempty" group:"tfo,omitempty"` | 	TFO         bool   `proxy:"tfo,omitempty"` | ||||||
| 	MPTCP       bool   `proxy:"mptcp,omitempty" group:"mptcp,omitempty"` | 	MPTCP       bool   `proxy:"mptcp,omitempty"` | ||||||
| 	Interface   string `proxy:"interface-name,omitempty" group:"interface-name,omitempty"` | 	Interface   string `proxy:"interface-name,omitempty" group:"interface-name,omitempty"` | ||||||
| 	RoutingMark int    `proxy:"routing-mark,omitempty" group:"routing-mark,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 | 	DialerProxy string `proxy:"dialer-proxy,omitempty"` // don't apply this option into groups, but can set a group name in a proxy | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -46,6 +46,13 @@ type GroupBaseOption struct { | |||||||
| } | } | ||||||
|  |  | ||||||
| func NewGroupBase(opt GroupBaseOption) *GroupBase { | 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 | 	var excludeFilterReg *regexp2.Regexp | ||||||
| 	if opt.excludeFilter != "" { | 	if opt.excludeFilter != "" { | ||||||
| 		excludeFilterReg = regexp2.MustCompile(opt.excludeFilter, regexp2.None) | 		excludeFilterReg = regexp2.MustCompile(opt.excludeFilter, regexp2.None) | ||||||
|   | |||||||
| @@ -17,7 +17,6 @@ import ( | |||||||
| 	C "github.com/metacubex/mihomo/constant" | 	C "github.com/metacubex/mihomo/constant" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| var trustCerts []*x509.Certificate |  | ||||||
| var globalCertPool *x509.CertPool | var globalCertPool *x509.CertPool | ||||||
| var mutex sync.RWMutex | var mutex sync.RWMutex | ||||||
| var errNotMatch = errors.New("certificate fingerprints do not match") | 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 { | func AddCertificate(certificate string) error { | ||||||
| 	mutex.Lock() | 	mutex.Lock() | ||||||
| 	defer mutex.Unlock() | 	defer mutex.Unlock() | ||||||
|  |  | ||||||
| 	if certificate == "" { | 	if certificate == "" { | ||||||
| 		return fmt.Errorf("certificate is empty") | 		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 | 		return nil | ||||||
| 	} else { | 	} else { | ||||||
| 		return fmt.Errorf("add certificate failed") | 		return fmt.Errorf("add certificate failed") | ||||||
| @@ -51,9 +58,6 @@ func initializeCertPool() { | |||||||
| 			globalCertPool = x509.NewCertPool() | 			globalCertPool = x509.NewCertPool() | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	for _, cert := range trustCerts { |  | ||||||
| 		globalCertPool.AddCert(cert) |  | ||||||
| 	} |  | ||||||
| 	if !DisableEmbedCa { | 	if !DisableEmbedCa { | ||||||
| 		globalCertPool.AppendCertsFromPEM(_CaCertificates) | 		globalCertPool.AppendCertsFromPEM(_CaCertificates) | ||||||
| 	} | 	} | ||||||
| @@ -62,7 +66,6 @@ func initializeCertPool() { | |||||||
| func ResetCertificate() { | func ResetCertificate() { | ||||||
| 	mutex.Lock() | 	mutex.Lock() | ||||||
| 	defer mutex.Unlock() | 	defer mutex.Unlock() | ||||||
| 	trustCerts = nil |  | ||||||
| 	initializeCertPool() | 	initializeCertPool() | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -31,7 +31,12 @@ AC_DEFUN([ss_MBEDTLS], | |||||||
|   AC_COMPILE_IFELSE( |   AC_COMPILE_IFELSE( | ||||||
|     [AC_LANG_PROGRAM( |     [AC_LANG_PROGRAM( | ||||||
|       [[ |       [[ | ||||||
|  | #include <mbedtls/version.h> | ||||||
|  | #if MBEDTLS_VERSION_NUMBER >= 0x03000000 | ||||||
|  | #include <mbedtls/mbedtls_config.h> | ||||||
|  | #else | ||||||
| #include <mbedtls/config.h> | #include <mbedtls/config.h> | ||||||
|  | #endif | ||||||
|       ]], |       ]], | ||||||
|       [[ |       [[ | ||||||
| #ifndef MBEDTLS_CIPHER_MODE_CFB | #ifndef MBEDTLS_CIPHER_MODE_CFB | ||||||
| @@ -48,7 +53,12 @@ AC_DEFUN([ss_MBEDTLS], | |||||||
|   AC_COMPILE_IFELSE( |   AC_COMPILE_IFELSE( | ||||||
|     [AC_LANG_PROGRAM( |     [AC_LANG_PROGRAM( | ||||||
|       [[ |       [[ | ||||||
|  | #include <mbedtls/version.h> | ||||||
|  | #if MBEDTLS_VERSION_NUMBER >= 0x03000000 | ||||||
|  | #include <mbedtls/mbedtls_config.h> | ||||||
|  | #else | ||||||
| #include <mbedtls/config.h> | #include <mbedtls/config.h> | ||||||
|  | #endif | ||||||
|       ]], |       ]], | ||||||
|       [[ |       [[ | ||||||
| #ifndef MBEDTLS_ARC4_C | #ifndef MBEDTLS_ARC4_C | ||||||
| @@ -64,7 +74,12 @@ AC_DEFUN([ss_MBEDTLS], | |||||||
|   AC_COMPILE_IFELSE( |   AC_COMPILE_IFELSE( | ||||||
|     [AC_LANG_PROGRAM( |     [AC_LANG_PROGRAM( | ||||||
|       [[ |       [[ | ||||||
|  | #include <mbedtls/version.h> | ||||||
|  | #if MBEDTLS_VERSION_NUMBER >= 0x03000000 | ||||||
|  | #include <mbedtls/mbedtls_config.h> | ||||||
|  | #else | ||||||
| #include <mbedtls/config.h> | #include <mbedtls/config.h> | ||||||
|  | #endif | ||||||
|       ]], |       ]], | ||||||
|       [[ |       [[ | ||||||
| #ifndef MBEDTLS_BLOWFISH_C | #ifndef MBEDTLS_BLOWFISH_C | ||||||
| @@ -80,7 +95,12 @@ AC_DEFUN([ss_MBEDTLS], | |||||||
|   AC_COMPILE_IFELSE( |   AC_COMPILE_IFELSE( | ||||||
|     [AC_LANG_PROGRAM( |     [AC_LANG_PROGRAM( | ||||||
|       [[ |       [[ | ||||||
|  | #include <mbedtls/version.h> | ||||||
|  | #if MBEDTLS_VERSION_NUMBER >= 0x03000000 | ||||||
|  | #include <mbedtls/mbedtls_config.h> | ||||||
|  | #else | ||||||
| #include <mbedtls/config.h> | #include <mbedtls/config.h> | ||||||
|  | #endif | ||||||
|       ]], |       ]], | ||||||
|       [[ |       [[ | ||||||
| #ifndef MBEDTLS_CAMELLIA_C | #ifndef MBEDTLS_CAMELLIA_C | ||||||
|   | |||||||
| @@ -177,9 +177,13 @@ aead_cipher_encrypt(cipher_ctx_t *cipher_ctx, | |||||||
|     // Otherwise, just use the mbedTLS one with crappy AES-NI. |     // Otherwise, just use the mbedTLS one with crappy AES-NI. | ||||||
|     case AES192GCM: |     case AES192GCM: | ||||||
|     case AES128GCM: |     case AES128GCM: | ||||||
|  | #if MBEDTLS_VERSION_NUMBER < 0x03000000 | ||||||
|         err = mbedtls_cipher_auth_encrypt(cipher_ctx->evp, n, nlen, ad, adlen, |         err = mbedtls_cipher_auth_encrypt(cipher_ctx->evp, n, nlen, ad, adlen, | ||||||
|                                           m, mlen, c, clen, c + mlen, tlen); |                                           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; |         *clen += tlen; | ||||||
|         break; |         break; | ||||||
|     case CHACHA20POLY1305IETF: |     case CHACHA20POLY1305IETF: | ||||||
| @@ -226,8 +230,13 @@ aead_cipher_decrypt(cipher_ctx_t *cipher_ctx, | |||||||
|     // Otherwise, just use the mbedTLS one with crappy AES-NI. |     // Otherwise, just use the mbedTLS one with crappy AES-NI. | ||||||
|     case AES192GCM: |     case AES192GCM: | ||||||
|     case AES128GCM: |     case AES128GCM: | ||||||
|  | #if MBEDTLS_VERSION_NUMBER < 0x03000000 | ||||||
|         err = mbedtls_cipher_auth_decrypt(cipher_ctx->evp, n, nlen, ad, adlen, |         err = mbedtls_cipher_auth_decrypt(cipher_ctx->evp, n, nlen, ad, adlen, | ||||||
|                                           m, mlen - tlen, p, plen, m + mlen - tlen, tlen); |                                           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; |         break; | ||||||
|     case CHACHA20POLY1305IETF: |     case CHACHA20POLY1305IETF: | ||||||
|         err = crypto_aead_chacha20poly1305_ietf_decrypt(p, &long_plen, NULL, m, mlen, |         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)); |     cipher_t *cipher = (cipher_t *)ss_malloc(sizeof(cipher_t)); | ||||||
|     memset(cipher, 0, sizeof(cipher_t)); |     memset(cipher, 0, sizeof(cipher_t)); | ||||||
|  |  | ||||||
|     if (method >= CHACHA20POLY1305IETF) { |     if (method < CHACHA20POLY1305IETF && aead_get_cipher_type(method) == NULL) { | ||||||
|         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) { |  | ||||||
|         LOGE("Cipher %s not found in crypto library", supported_aead_ciphers[method]); |         LOGE("Cipher %s not found in crypto library", supported_aead_ciphers[method]); | ||||||
|         FATAL("Cannot initialize cipher"); |         FATAL("Cannot initialize cipher"); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -103,7 +103,7 @@ crypto_md5(const unsigned char *d, size_t n, unsigned char *md) | |||||||
|     if (md == NULL) { |     if (md == NULL) { | ||||||
|         md = m; |         md = m; | ||||||
|     } |     } | ||||||
| #if MBEDTLS_VERSION_NUMBER >= 0x02070000 | #if MBEDTLS_VERSION_NUMBER < 0x03000000 && MBEDTLS_VERSION_NUMBER >= 0x02070000 | ||||||
|     if (mbedtls_md5_ret(d, n, md) != 0) |     if (mbedtls_md5_ret(d, n, md) != 0) | ||||||
|         FATAL("Failed to calculate MD5"); |         FATAL("Failed to calculate MD5"); | ||||||
| #else | #else | ||||||
|   | |||||||
| @@ -97,7 +97,6 @@ typedef struct buffer { | |||||||
| typedef struct { | typedef struct { | ||||||
|     int method; |     int method; | ||||||
|     int skey; |     int skey; | ||||||
|     cipher_kt_t *info; |  | ||||||
|     size_t nonce_len; |     size_t nonce_len; | ||||||
|     size_t key_len; |     size_t key_len; | ||||||
|     size_t tag_len; |     size_t tag_len; | ||||||
|   | |||||||
| @@ -168,33 +168,6 @@ crypto_stream_xor_ic(uint8_t *c, const uint8_t *m, uint64_t mlen, | |||||||
|     return 0; |     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 * | const cipher_kt_t * | ||||||
| stream_get_cipher_type(int method) | 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)); |     cipher_t *cipher = (cipher_t *)ss_malloc(sizeof(cipher_t)); | ||||||
|     memset(cipher, 0, sizeof(cipher_t)); |     memset(cipher, 0, sizeof(cipher_t)); | ||||||
|  |  | ||||||
|     if (method == SALSA20 || method == CHACHA20 || method == CHACHA20IETF) { |     if (method < SALSA20 && stream_get_cipher_type(method) == NULL) { | ||||||
|         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) { |  | ||||||
|         LOGE("Cipher %s not found in crypto library", supported_stream_ciphers[method]); |         LOGE("Cipher %s not found in crypto library", supported_stream_ciphers[method]); | ||||||
|         FATAL("Cannot initialize cipher"); |         FATAL("Cannot initialize cipher"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (key != NULL) |     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 |     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) { |     if (cipher->key_len == 0) { | ||||||
|         FATAL("Cannot generate key and NONCE"); |         FATAL("Cannot generate key and NONCE"); | ||||||
|     } |     } | ||||||
|     if (method == RC4_MD5) { |     cipher->nonce_len = supported_stream_ciphers_nonce_size[method]; | ||||||
|         cipher->nonce_len = 16; |  | ||||||
|     } else { |  | ||||||
|         cipher->nonce_len = cipher_nonce_size(cipher); |  | ||||||
|     } |  | ||||||
|     cipher->method = method; |     cipher->method = method; | ||||||
|  |  | ||||||
|     return cipher; |     return cipher; | ||||||
|   | |||||||
| @@ -168,6 +168,7 @@ return view.extend({ | |||||||
| 		const res_ver_geoip = data[7]; | 		const res_ver_geoip = data[7]; | ||||||
| 		const res_ver_geosite = data[8]; | 		const res_ver_geosite = data[8]; | ||||||
|  |  | ||||||
|  | 		const less_24_10 = !form.RichListValue; | ||||||
| 		const dashboard_repo = uci.get(data[0], 'api', 'dashboard_repo'); | 		const dashboard_repo = uci.get(data[0], 'api', 'dashboard_repo'); | ||||||
|  |  | ||||||
| 		let m, s, o, ss, so; | 		let m, s, o, ss, so; | ||||||
| @@ -472,7 +473,7 @@ return view.extend({ | |||||||
| 		} | 		} | ||||||
| 		so.default = 'system'; | 		so.default = 'system'; | ||||||
| 		so.rmempty = false; | 		so.rmempty = false; | ||||||
| 		if (!form.RichListValue) | 		if (less_24_10) | ||||||
| 			so.onchange = function(ev, section_id, value) { | 			so.onchange = function(ev, section_id, value) { | ||||||
| 				var desc = ev.target.nextSibling; | 				var desc = ev.target.nextSibling; | ||||||
| 				if (value === 'mixed') | 				if (value === 'mixed') | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| include $(TOPDIR)/rules.mk | include $(TOPDIR)/rules.mk | ||||||
|  |  | ||||||
| PKG_NAME:=naiveproxy | PKG_NAME:=naiveproxy | ||||||
| PKG_VERSION:=132.0.6834.79-1 | PKG_VERSION:=132.0.6834.79-2 | ||||||
| PKG_RELEASE:=1 | PKG_RELEASE:=1 | ||||||
|  |  | ||||||
| # intel 80386 & riscv64 & cortex-a76 | # intel 80386 & riscv64 & cortex-a76 | ||||||
| @@ -20,47 +20,47 @@ else ifeq ($(ARCH_PREBUILT),riscv64_riscv64) | |||||||
| endif | endif | ||||||
|  |  | ||||||
| ifeq ($(ARCH_PACKAGES),aarch64_cortex-a53) | ifeq ($(ARCH_PACKAGES),aarch64_cortex-a53) | ||||||
|   PKG_HASH:=4264588ab16565425a62436d5946a0630759acc3a71e2a673e2d5383caed8320 |   PKG_HASH:=24548efa8a257320a169b9a9f4692043dc00ee7c35bd211ea04a2ec161bbf39d | ||||||
| else ifeq ($(ARCH_PACKAGES),aarch64_cortex-a72) | else ifeq ($(ARCH_PACKAGES),aarch64_cortex-a72) | ||||||
|   PKG_HASH:=f4272d75cdcf4e5f9328886e50e49115ea40b75c373dcd7bbce1045a791beed8 |   PKG_HASH:=2849150414fd7ab21552cedc21bfa1c41a6ff1e1c3aa3cc2d44436aab74912e1 | ||||||
| else ifeq ($(ARCH_PACKAGES),aarch64_generic) | else ifeq ($(ARCH_PACKAGES),aarch64_generic) | ||||||
|   PKG_HASH:=b50ef4064c8e609730233fc358b4e992f174323eb11153f63ecbb152cbe4b92e |   PKG_HASH:=71fbc160c5f8df9ae96d7f91b646e24f2eb142928df8186fe50a9d73cfac842e | ||||||
| else ifeq ($(ARCH_PACKAGES),arm_arm1176jzf-s_vfp) | else ifeq ($(ARCH_PACKAGES),arm_arm1176jzf-s_vfp) | ||||||
|   PKG_HASH:=62cc7f13cbe49ff358692bb81c4ced66fbf0ec103dcff99f15ae7e56d9186b51 |   PKG_HASH:=7ce0ba453c09f9978e421575aca96b34d381ec1731f19d29d8e16e7968fb1888 | ||||||
| else ifeq ($(ARCH_PACKAGES),arm_arm926ej-s) | else ifeq ($(ARCH_PACKAGES),arm_arm926ej-s) | ||||||
|   PKG_HASH:=bd050616edb6d6538001db64dc7dcfc13941855890ec5741beff1144a897530c |   PKG_HASH:=000d92d9865f406dfd9bf7848c455312a1ce42a778c970f484bdf93c3a805973 | ||||||
| else ifeq ($(ARCH_PACKAGES),arm_cortex-a15_neon-vfpv4) | else ifeq ($(ARCH_PACKAGES),arm_cortex-a15_neon-vfpv4) | ||||||
|   PKG_HASH:=af2510de66dac0cde22b090864cfae314405969665a4abfc95bed51a77500e82 |   PKG_HASH:=94f22ed0e270d47b035ec6380ce6b26db93ff01382641c222f2db11929cc0856 | ||||||
| else ifeq ($(ARCH_PACKAGES),arm_cortex-a5_vfpv4) | else ifeq ($(ARCH_PACKAGES),arm_cortex-a5_vfpv4) | ||||||
|   PKG_HASH:=2d12bb48e50fb88c3ab1375fc9f0df56d45aeaa3fc6c82b78555c1c4b7855266 |   PKG_HASH:=a4cfc13e78000f3de8561f9f299e60536435b8e8b9208fc2ad34318662d78b28 | ||||||
| else ifeq ($(ARCH_PACKAGES),arm_cortex-a7) | else ifeq ($(ARCH_PACKAGES),arm_cortex-a7) | ||||||
|   PKG_HASH:=442133a5545fc83bb3c36ad14a631ccb930750e0969abf508636cf7f6cf29e7e |   PKG_HASH:=e27d13fc44deecd5083d0e5cdf9f0df83a642df714f4a13a69b706bb5198a61e | ||||||
| else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_neon-vfpv4) | else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_neon-vfpv4) | ||||||
|   PKG_HASH:=e144fafb14c8bad7e7d96d01f3d3d799fddfcd1f620e8f045376a19c497c0f54 |   PKG_HASH:=15315b9671ca61fb848b4e8d6f8162a1ce9fc9fe4fad3702678256fa90414641 | ||||||
| else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_vfpv4) | else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_vfpv4) | ||||||
|   PKG_HASH:=5f65427412398053e9cecc3139c91fb8b09147ddfd42b91df742b9909b141bc8 |   PKG_HASH:=6ad229a26fdaac664fa0bc5f8f4417e034fbf7ea8d6719eaf26882b758f8864e | ||||||
| else ifeq ($(ARCH_PACKAGES),arm_cortex-a8_vfpv3) | else ifeq ($(ARCH_PACKAGES),arm_cortex-a8_vfpv3) | ||||||
|   PKG_HASH:=f9bdb669b6440d088336d17daaea24c6ecef85de4b8bac756a2d1fbd487fa1b1 |   PKG_HASH:=871a8bc18bfcd5d9e2dcd965887be2f5617c9baec5bd0a6d17a5569782a69b8b | ||||||
| else ifeq ($(ARCH_PACKAGES),arm_cortex-a9) | else ifeq ($(ARCH_PACKAGES),arm_cortex-a9) | ||||||
|   PKG_HASH:=8a4fbba18e8157dafddb7e684cf3c06bef2f10d3f9796bf0ea2496f9c788389c |   PKG_HASH:=137eb801293e8a3336626dc58434ee135751960332d8237d6c54aa6944eb17d4 | ||||||
| else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_neon) | else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_neon) | ||||||
|   PKG_HASH:=b1371c204a9f4fa7cf98be0df0fbb257fd6708e7a096a57d9d31740b3ee74360 |   PKG_HASH:=deace84168fdce2656c0b6d9fa094fdd8dbdd4e8f95c422043f5dee7cbdb5d26 | ||||||
| else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_vfpv3-d16) | else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_vfpv3-d16) | ||||||
|   PKG_HASH:=fb3dde55b6642a0527b0ea9110fcad8081255248a4bc59bf530768eaaee1e5b8 |   PKG_HASH:=51e4ee3521b575fc2c12a1baa276e0802d3fc10a32a62f190c2c9b56c008e40d | ||||||
| else ifeq ($(ARCH_PACKAGES),arm_mpcore) | else ifeq ($(ARCH_PACKAGES),arm_mpcore) | ||||||
|   PKG_HASH:=29293985c3d4af1bb0699a9907852555db6a3d8f1a01cc2a58651f9d20776e6f |   PKG_HASH:=008d2231c867614dc3e40c966261d9dc5c9931b3c68beb33549ad3d4f7bed2f1 | ||||||
| else ifeq ($(ARCH_PACKAGES),arm_xscale) | else ifeq ($(ARCH_PACKAGES),arm_xscale) | ||||||
|   PKG_HASH:=26909683e0586696f2b3c914be6fd1132c93c8eb4dec99bea93d70accddb66d6 |   PKG_HASH:=d8160e3b0963d124eb91762c6df9d96207510dc1a5f28f32f3ad6f6133f49d75 | ||||||
| else ifeq ($(ARCH_PACKAGES),mipsel_24kc) | else ifeq ($(ARCH_PACKAGES),mipsel_24kc) | ||||||
|   PKG_HASH:=7ea7084fbcf22259a1ee7d785f886986f0f16e6dda86838991af50fb2b24cb72 |   PKG_HASH:=f9c0a4049388058aaa881aa13385470497beaeeca6473baf6539905a75d098bf | ||||||
| else ifeq ($(ARCH_PACKAGES),mipsel_mips32) | else ifeq ($(ARCH_PACKAGES),mipsel_mips32) | ||||||
|   PKG_HASH:=cea3005186f9010cb5270bc5fd99d68c5d7f77c8267129ab4f114c37699c2aa3 |   PKG_HASH:=fd2520202c1cbe82498c90594a71cd1ed6aa4d8a6d470cf84871fd1d8f646380 | ||||||
| else ifeq ($(ARCH_PACKAGES),riscv64) | else ifeq ($(ARCH_PACKAGES),riscv64) | ||||||
|   PKG_HASH:=515d14ae15009abaad4016ba36848a71ba52bca9b4aa8f207eec2343d31ed608 |   PKG_HASH:=557f8054e7643d6cdbbd1f70922ddf131f60ad03fb2cadf994ac15c9303d84ed | ||||||
| else ifeq ($(ARCH_PACKAGES),x86) | else ifeq ($(ARCH_PACKAGES),x86) | ||||||
|   PKG_HASH:=f53aba8d13f8ba11af0ba26e27c8fc616b7a28a0e1d81814e0128c10cc92d3be |   PKG_HASH:=eab01156720906345230f6fb9cde7580b88e66799a4bdcef58636addbcab9a6c | ||||||
| else ifeq ($(ARCH_PACKAGES),x86_64) | else ifeq ($(ARCH_PACKAGES),x86_64) | ||||||
|   PKG_HASH:=2369644fb5ccb41cf511ddca67d30cc7f04e64068f4d1d28c42155b86dfd4a06 |   PKG_HASH:=95fd43646b86512ea46d87ccd0b5adda50aefe5c53dbcfd4b47930a146bec8b9 | ||||||
| else | else | ||||||
|   PKG_HASH:=dummy |   PKG_HASH:=dummy | ||||||
| endif | endif | ||||||
|   | |||||||
| @@ -30,13 +30,13 @@ define Download/geosite | |||||||
|   HASH:=aa65cee72dd6afbf9dd4c474b4ff28ceb063f6abf99249a084091adb4f282f09 |   HASH:=aa65cee72dd6afbf9dd4c474b4ff28ceb063f6abf99249a084091adb4f282f09 | ||||||
| endef | endef | ||||||
|  |  | ||||||
| GEOSITE_IRAN_VER:=202501130037 | GEOSITE_IRAN_VER:=202501200034 | ||||||
| GEOSITE_IRAN_FILE:=iran.dat.$(GEOSITE_IRAN_VER) | GEOSITE_IRAN_FILE:=iran.dat.$(GEOSITE_IRAN_VER) | ||||||
| define Download/geosite-ir | define Download/geosite-ir | ||||||
|   URL:=https://github.com/bootmortis/iran-hosted-domains/releases/download/$(GEOSITE_IRAN_VER)/ |   URL:=https://github.com/bootmortis/iran-hosted-domains/releases/download/$(GEOSITE_IRAN_VER)/ | ||||||
|   URL_FILE:=iran.dat |   URL_FILE:=iran.dat | ||||||
|   FILE:=$(GEOSITE_IRAN_FILE) |   FILE:=$(GEOSITE_IRAN_FILE) | ||||||
|   HASH:=72014870e40bd6a75bc3ee91d1bd578f766bbb5ccc237380a13aa1c6e1aee073 |   HASH:=72a191d2ec9595484a1af53012d27fba74f1337dc258d62d862c69ca649dc1f8 | ||||||
| endef | endef | ||||||
|  |  | ||||||
| define Package/v2ray-geodata/template | define Package/v2ray-geodata/template | ||||||
|   | |||||||
							
								
								
									
										415
									
								
								v2rayn/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										415
									
								
								v2rayn/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,19 +1,400 @@ | |||||||
| ################################################################################ | ## Ignore Visual Studio temporary files, build results, and | ||||||
| # 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。 | ## files generated by popular Visual Studio add-ons. | ||||||
| ################################################################################ | ## | ||||||
|  | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore | ||||||
|  |  | ||||||
| /v2rayN/.vs/ | # User-specific files | ||||||
| /v2rayN/v2rayN/bin/Debug/app.publish | *.rsuser | ||||||
| /v2rayN/v2rayN/bin/Debug | *.suo | ||||||
| /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 | *.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 | ||||||
							
								
								
									
										363
									
								
								v2rayn/v2rayN/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										363
									
								
								v2rayn/v2rayN/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -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 |  | ||||||
| @@ -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)' |     _PLAYLIST_ID_RE = r'(?:(?:PL|LL|EC|UU|FL|RD|UL|TL|PU|OLAK5uy_)[0-9A-Za-z-_]{10,}|RDMM)' | ||||||
|  |  | ||||||
|     _INNERTUBE_CLIENTS = { |     _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 |         # mweb has 'ultralow' formats | ||||||
|         # See: https://github.com/yt-dlp/yt-dlp/pull/557 |         # See: https://github.com/yt-dlp/yt-dlp/pull/557 | ||||||
|         'mweb': { |         'mweb': { | ||||||
| @@ -110,6 +126,17 @@ class YoutubeBaseInfoExtractor(InfoExtractor): | |||||||
|             'INNERTUBE_CONTEXT_CLIENT_NAME': 7, |             'INNERTUBE_CONTEXT_CLIENT_NAME': 7, | ||||||
|             'SUPPORTS_COOKIES': True, |             '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): |     def _login(self): | ||||||
| @@ -1995,6 +2022,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor): | |||||||
|             player_response = self._extract_yt_initial_variable( |             player_response = self._extract_yt_initial_variable( | ||||||
|                 webpage, self._YT_INITIAL_PLAYER_RESPONSE_RE, |                 webpage, self._YT_INITIAL_PLAYER_RESPONSE_RE, | ||||||
|                 video_id, 'initial player response') |                 video_id, 'initial player response') | ||||||
|  |         is_live = traverse_obj(player_response, ('videoDetails', 'isLive')) | ||||||
|  |  | ||||||
|         if False and not player_response: |         if False and not player_response: | ||||||
|             player_response = self._call_api( |             player_response = self._call_api( | ||||||
|                 'player', {'videoId': video_id}, video_id) |                 'player', {'videoId': video_id}, video_id) | ||||||
| @@ -2008,50 +2037,69 @@ class YoutubeIE(YoutubeBaseInfoExtractor): | |||||||
|             if sts: |             if sts: | ||||||
|                 pb_context['signatureTimestamp'] = sts |                 pb_context['signatureTimestamp'] = sts | ||||||
|  |  | ||||||
|             client = traverse_obj(self._INNERTUBE_CLIENTS, ( |             client_names = traverse_obj(self._INNERTUBE_CLIENTS, ( | ||||||
|                 lambda _, v: not v.get('REQUIRE_PO_TOKEN')), |                 T(dict.items), lambda _, k_v: not k_v[1].get('REQUIRE_PO_TOKEN'), | ||||||
|                 get_all=False) |                 0))[:1] | ||||||
|  |  | ||||||
|             query = { |             if is_live and 'ios' not in client_names: | ||||||
|                 'playbackContext': { |                 client_names.append('ios') | ||||||
|                     '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, |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             headers = merge_dicts({ |             headers = { | ||||||
|                 'Sec-Fetch-Mode': 'navigate', |                 'Sec-Fetch-Mode': 'navigate', | ||||||
|                 'Origin': origin, |                 'Origin': origin, | ||||||
|                 # 'X-Goog-Visitor-Id': self._extract_visitor_data(ytcfg) or '', |                 # '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) |             auth = self._generate_sapisidhash_header(origin) | ||||||
|             if auth is not None: |             if auth is not None: | ||||||
|                 headers['Authorization'] = auth |                 headers['Authorization'] = auth | ||||||
|                 headers['X-Origin'] = origin |                 headers['X-Origin'] = origin | ||||||
|  |  | ||||||
|             player_response = self._call_api( |             for client in traverse_obj(self._INNERTUBE_CLIENTS, (client_names, T(dict))): | ||||||
|                 'player', query, video_id, fatal=False, headers=headers, |  | ||||||
|                 note=join_nonempty( |                 query = { | ||||||
|                     'Downloading', traverse_obj(query, ( |                     'playbackContext': { | ||||||
|                         'context', 'client', 'clientName')), |                         'contentPlaybackContext': pb_context, | ||||||
|                     'API JSON', delim=' ')) |                         '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): |         def is_agegated(playability): | ||||||
|             if not isinstance(playability, dict): |             if not isinstance(playability, dict): | ||||||
| @@ -2194,6 +2242,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor): | |||||||
|         itag_qualities = {} |         itag_qualities = {} | ||||||
|         q = qualities(['tiny', 'small', 'medium', 'large', 'hd720', 'hd1080', 'hd1440', 'hd2160', 'hd2880', 'highres']) |         q = qualities(['tiny', 'small', 'medium', 'large', 'hd720', 'hd1080', 'hd1440', 'hd2160', 'hd2880', 'highres']) | ||||||
|         CHUNK_SIZE = 10 << 20 |         CHUNK_SIZE = 10 << 20 | ||||||
|  |         is_live = video_details.get('isLive') | ||||||
|  |  | ||||||
|         streaming_data = player_response.get('streamingData') or {} |         streaming_data = player_response.get('streamingData') or {} | ||||||
|         streaming_formats = streaming_data.get('formats') or [] |         streaming_formats = streaming_data.get('formats') or [] | ||||||
| @@ -2338,7 +2387,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor): | |||||||
|         hls_manifest_url = streaming_data.get('hlsManifestUrl') |         hls_manifest_url = streaming_data.get('hlsManifestUrl') | ||||||
|         if hls_manifest_url: |         if hls_manifest_url: | ||||||
|             for f in self._extract_m3u8_formats( |             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( |                 if process_manifest_format( | ||||||
|                         f, 'hls', None, self._search_regex( |                         f, 'hls', None, self._search_regex( | ||||||
|                             r'/itag/(\d+)', f['url'], 'itag', default=None)): |                             r'/itag/(\d+)', f['url'], 'itag', default=None)): | ||||||
| @@ -2444,8 +2494,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor): | |||||||
|                 # Strictly de-prioritize damaged formats |                 # Strictly de-prioritize damaged formats | ||||||
|                 f['preference'] = -10 |                 f['preference'] = -10 | ||||||
|  |  | ||||||
|         is_live = video_details.get('isLive') |  | ||||||
|  |  | ||||||
|         owner_profile_url = self._yt_urljoin(self._extract_author_var( |         owner_profile_url = self._yt_urljoin(self._extract_author_var( | ||||||
|             webpage, 'url', videodetails=video_details, metadata=microformat)) |             webpage, 'url', videodetails=video_details, metadata=microformat)) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -585,6 +585,10 @@ from .egghead import ( | |||||||
|     EggheadCourseIE, |     EggheadCourseIE, | ||||||
|     EggheadLessonIE, |     EggheadLessonIE, | ||||||
| ) | ) | ||||||
|  | from .eggs import ( | ||||||
|  |     EggsArtistIE, | ||||||
|  |     EggsIE, | ||||||
|  | ) | ||||||
| from .eighttracks import EightTracksIE | from .eighttracks import EightTracksIE | ||||||
| from .eitb import EitbIE | from .eitb import EitbIE | ||||||
| from .elementorembed import ElementorEmbedIE | from .elementorembed import ElementorEmbedIE | ||||||
| @@ -1279,6 +1283,10 @@ from .nebula import ( | |||||||
| ) | ) | ||||||
| from .nekohacker import NekoHackerIE | from .nekohacker import NekoHackerIE | ||||||
| from .nerdcubed import NerdCubedFeedIE | from .nerdcubed import NerdCubedFeedIE | ||||||
|  | from .nest import ( | ||||||
|  |     NestClipIE, | ||||||
|  |     NestIE, | ||||||
|  | ) | ||||||
| from .neteasemusic import ( | from .neteasemusic import ( | ||||||
|     NetEaseMusicAlbumIE, |     NetEaseMusicAlbumIE, | ||||||
|     NetEaseMusicDjRadioIE, |     NetEaseMusicDjRadioIE, | ||||||
| @@ -1533,6 +1541,10 @@ from .pinterest import ( | |||||||
|     PinterestCollectionIE, |     PinterestCollectionIE, | ||||||
|     PinterestIE, |     PinterestIE, | ||||||
| ) | ) | ||||||
|  | from .piramidetv import ( | ||||||
|  |     PiramideTVChannelIE, | ||||||
|  |     PiramideTVIE, | ||||||
|  | ) | ||||||
| from .pixivsketch import ( | from .pixivsketch import ( | ||||||
|     PixivSketchIE, |     PixivSketchIE, | ||||||
|     PixivSketchUserIE, |     PixivSketchUserIE, | ||||||
|   | |||||||
							
								
								
									
										155
									
								
								yt-dlp/yt_dlp/extractor/eggs.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								yt-dlp/yt_dlp/extractor/eggs.py
									
									
									
									
									
										Normal file
									
								
							| @@ -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<id>[\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<id>\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}), | ||||||
|  |             })) | ||||||
							
								
								
									
										117
									
								
								yt-dlp/yt_dlp/extractor/nest.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								yt-dlp/yt_dlp/extractor/nest.py
									
									
									
									
									
										Normal file
									
								
							| @@ -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<id>\w+)' | ||||||
|  |     _EMBED_REGEX = [rf'<iframe [^>]*\bsrc=[\'"](?P<url>{_VALID_URL})'] | ||||||
|  |     _TESTS = [{ | ||||||
|  |         'url': 'https://video.nest.com/embedded/live/4fvYdSo8AX?autoplay=0', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': '4fvYdSo8AX', | ||||||
|  |             'ext': 'mp4', | ||||||
|  |             'title': 'startswith:Outside ', | ||||||
|  |             'alt_title': 'Outside', | ||||||
|  |             'description': '<null>', | ||||||
|  |             'location': 'Los Angeles', | ||||||
|  |             'availability': 'public', | ||||||
|  |             'thumbnail': r're:https?://', | ||||||
|  |             'live_status': 'is_live', | ||||||
|  |         }, | ||||||
|  |         'params': { | ||||||
|  |             # m3u8 download | ||||||
|  |             'skip_download': True, | ||||||
|  |         }, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://video.nest.com/live/4fvYdSo8AX', | ||||||
|  |         'only_matching': True, | ||||||
|  |     }] | ||||||
|  |     _WEBPAGE_TESTS = [{ | ||||||
|  |         'url': 'https://www.pacificblue.biz/noyo-harbor-webcam/', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': '4fvYdSo8AX', | ||||||
|  |             'ext': 'mp4', | ||||||
|  |             'title': 'startswith:Outside ', | ||||||
|  |             'alt_title': 'Outside', | ||||||
|  |             'description': '<null>', | ||||||
|  |             'location': 'Los Angeles', | ||||||
|  |             'availability': 'public', | ||||||
|  |             'thumbnail': r're:https?://', | ||||||
|  |             'live_status': 'is_live', | ||||||
|  |         }, | ||||||
|  |         'params': { | ||||||
|  |             # m3u8 download | ||||||
|  |             'skip_download': True, | ||||||
|  |         }, | ||||||
|  |     }] | ||||||
|  | 
 | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         video_id = self._match_id(url) | ||||||
|  |         item = self._download_json( | ||||||
|  |             'https://video.nest.com/api/dropcam/cameras.get_by_public_token', | ||||||
|  |             video_id, query={'token': video_id})['items'][0] | ||||||
|  |         uuid = item.get('uuid') | ||||||
|  |         stream_domain = item.get('live_stream_host') | ||||||
|  |         if not stream_domain or not uuid: | ||||||
|  |             raise ExtractorError('Unable to construct playlist URL') | ||||||
|  | 
 | ||||||
|  |         thumb_domain = item.get('nexus_api_nest_domain_host') | ||||||
|  |         return { | ||||||
|  |             'id': video_id, | ||||||
|  |             **traverse_obj(item, { | ||||||
|  |                 'description': ('description', {str}), | ||||||
|  |                 'title': (('title', 'name', 'where'), {str}, filter, any), | ||||||
|  |                 'alt_title': ('name', {str}), | ||||||
|  |                 'location': ((('timezone', {lambda x: x.split('/')[1].replace('_', ' ')}), 'where'), {str}, filter, any), | ||||||
|  |             }), | ||||||
|  |             'thumbnail': update_url_query( | ||||||
|  |                 f'https://{thumb_domain}/get_image', | ||||||
|  |                 {'uuid': uuid, 'public': video_id}) if thumb_domain else None, | ||||||
|  |             'availability': self._availability(is_private=item.get('is_public') is False), | ||||||
|  |             'formats': self._extract_m3u8_formats( | ||||||
|  |                 f'https://{stream_domain}/nexus_aac/{uuid}/playlist.m3u8', | ||||||
|  |                 video_id, 'mp4', live=True, query={'public': video_id}), | ||||||
|  |             'is_live': True, | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class NestClipIE(InfoExtractor): | ||||||
|  |     _VALID_URL = r'https?://video\.nest\.com/(?:embedded/)?clip/(?P<id>\w+)' | ||||||
|  |     _EMBED_REGEX = [rf'<iframe [^>]*\bsrc=[\'"](?P<url>{_VALID_URL})'] | ||||||
|  |     _TESTS = [{ | ||||||
|  |         'url': 'https://video.nest.com/clip/f34c9dd237a44eca9a0001af685e3dff', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': 'f34c9dd237a44eca9a0001af685e3dff', | ||||||
|  |             'ext': 'mp4', | ||||||
|  |             'title': 'NestClip video #f34c9dd237a44eca9a0001af685e3dff', | ||||||
|  |             'thumbnail': 'https://clips.dropcam.com/f34c9dd237a44eca9a0001af685e3dff.jpg', | ||||||
|  |             'timestamp': 1735413474.468, | ||||||
|  |             'upload_date': '20241228', | ||||||
|  |         }, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://video.nest.com/embedded/clip/34e0432adc3c46a98529443d8ad5aa76', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': '34e0432adc3c46a98529443d8ad5aa76', | ||||||
|  |             'ext': 'mp4', | ||||||
|  |             'title': 'Shootout at Veterans Boulevard at Fleur De Lis Drive', | ||||||
|  |             'thumbnail': 'https://clips.dropcam.com/34e0432adc3c46a98529443d8ad5aa76.jpg', | ||||||
|  |             'upload_date': '20230817', | ||||||
|  |             'timestamp': 1692262897.191, | ||||||
|  |         }, | ||||||
|  |     }] | ||||||
|  | 
 | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         video_id = self._match_id(url) | ||||||
|  |         data = self._download_json( | ||||||
|  |             'https://video.nest.com/api/dropcam/videos.get_by_filename', video_id, | ||||||
|  |             query={'filename': f'{video_id}.mp4'}) | ||||||
|  |         return { | ||||||
|  |             'id': video_id, | ||||||
|  |             **traverse_obj(data, ('items', 0, { | ||||||
|  |                 'title': ('title', {str}), | ||||||
|  |                 'thumbnail': ('thumbnail_url', {url_or_none}), | ||||||
|  |                 'url': ('download_url', {url_or_none}), | ||||||
|  |                 'timestamp': ('start_time', {float_or_none}), | ||||||
|  |             })), | ||||||
|  |         } | ||||||
							
								
								
									
										99
									
								
								yt-dlp/yt_dlp/extractor/piramidetv.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								yt-dlp/yt_dlp/extractor/piramidetv.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,99 @@ | |||||||
|  | from .common import InfoExtractor | ||||||
|  | from ..utils import parse_iso8601, smuggle_url, unsmuggle_url, url_or_none | ||||||
|  | from ..utils.traversal import traverse_obj | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class PiramideTVIE(InfoExtractor): | ||||||
|  |     _VALID_URL = r'https?://piramide\.tv/video/(?P<id>[\w-]+)' | ||||||
|  |     _TESTS = [{ | ||||||
|  |         'url': 'https://piramide.tv/video/wWtBAORdJUTh', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': 'wWtBAORdJUTh', | ||||||
|  |             'ext': 'mp4', | ||||||
|  |             'title': 'md5:79f9c8183ea6a35c836923142cf0abcc', | ||||||
|  |             'description': '', | ||||||
|  |             'thumbnail': 'https://cdn.jwplayer.com/v2/media/W86PgQDn/thumbnails/B9gpIxkH.jpg', | ||||||
|  |             'channel': 'León Picarón', | ||||||
|  |             'channel_id': 'leonpicaron', | ||||||
|  |             'timestamp': 1696460362, | ||||||
|  |             'upload_date': '20231004', | ||||||
|  |         }, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://piramide.tv/video/wcYn6li79NgN', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': 'wcYn6li79NgN', | ||||||
|  |             'ext': 'mp4', | ||||||
|  |             'title': 'ACEPTO TENER UN BEBE CON MI NOVIA\u2026? | Parte 1', | ||||||
|  |             'description': '', | ||||||
|  |             'channel': 'ARTA GAME', | ||||||
|  |             'channel_id': 'arta_game', | ||||||
|  |             'thumbnail': 'https://cdn.jwplayer.com/v2/media/cnEdGp5X/thumbnails/rHAaWfP7.jpg', | ||||||
|  |             'timestamp': 1703434976, | ||||||
|  |             'upload_date': '20231224', | ||||||
|  |         }, | ||||||
|  |     }] | ||||||
|  | 
 | ||||||
|  |     def _extract_video(self, video_id): | ||||||
|  |         video_data = self._download_json( | ||||||
|  |             f'https://hermes.piramide.tv/video/data/{video_id}', video_id, fatal=False) | ||||||
|  |         formats, subtitles = self._extract_m3u8_formats_and_subtitles( | ||||||
|  |             f'https://cdn.piramide.tv/video/{video_id}/manifest.m3u8', video_id, fatal=False) | ||||||
|  |         next_video = traverse_obj(video_data, ('video', 'next_video', 'id', {str})) | ||||||
|  |         return next_video, { | ||||||
|  |             'id': video_id, | ||||||
|  |             'formats': formats, | ||||||
|  |             'subtitles': subtitles, | ||||||
|  |             **traverse_obj(video_data, ('video', { | ||||||
|  |                 'id': ('id', {str}), | ||||||
|  |                 'title': ('title', {str}), | ||||||
|  |                 'description': ('description', {str}), | ||||||
|  |                 'thumbnail': ('media', 'thumbnail', {url_or_none}), | ||||||
|  |                 'channel': ('channel', 'name', {str}), | ||||||
|  |                 'channel_id': ('channel', 'id', {str}), | ||||||
|  |                 'timestamp': ('date', {parse_iso8601}), | ||||||
|  |             })), | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     def _entries(self, video_id): | ||||||
|  |         visited = set() | ||||||
|  |         while True: | ||||||
|  |             visited.add(video_id) | ||||||
|  |             next_video, info = self._extract_video(video_id) | ||||||
|  |             yield info | ||||||
|  |             if not next_video or next_video in visited: | ||||||
|  |                 break | ||||||
|  |             video_id = next_video | ||||||
|  | 
 | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         url, smuggled_data = unsmuggle_url(url, {}) | ||||||
|  |         video_id = self._match_id(url) | ||||||
|  |         if self._yes_playlist(video_id, video_id, smuggled_data): | ||||||
|  |             return self.playlist_result(self._entries(video_id), video_id) | ||||||
|  |         return self._extract_video(video_id)[1] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class PiramideTVChannelIE(InfoExtractor): | ||||||
|  |     _VALID_URL = r'https?://piramide\.tv/channel/(?P<id>[\w-]+)' | ||||||
|  |     _TESTS = [{ | ||||||
|  |         'url': 'https://piramide.tv/channel/thekalo', | ||||||
|  |         'playlist_mincount': 10, | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': 'thekalo', | ||||||
|  |         }, | ||||||
|  |     }] | ||||||
|  | 
 | ||||||
|  |     def _entries(self, channel_name): | ||||||
|  |         videos = self._download_json( | ||||||
|  |             f'https://hermes.piramide.tv/channel/list/{channel_name}/date/100000', channel_name) | ||||||
|  |         for video in traverse_obj(videos, ('videos', lambda _, v: v['id'])): | ||||||
|  |             yield self.url_result(smuggle_url( | ||||||
|  |                 f'https://piramide.tv/video/{video["id"]}', {'force_noplaylist': True}), | ||||||
|  |                 **traverse_obj(video, { | ||||||
|  |                     'id': ('id', {str}), | ||||||
|  |                     'title': ('title', {str}), | ||||||
|  |                     'description': ('description', {str}), | ||||||
|  |                 })) | ||||||
|  | 
 | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         channel_name = self._match_id(url) | ||||||
|  |         return self.playlist_result(self._entries(channel_name), channel_name) | ||||||
| @@ -176,6 +176,8 @@ class RTVSLOShowIE(InfoExtractor): | |||||||
|         'info_dict': { |         'info_dict': { | ||||||
|             'id': '173250997', |             'id': '173250997', | ||||||
|             'title': 'Ekipa Bled', |             'title': 'Ekipa Bled', | ||||||
|  |             'description': 'md5:c88471e27a1268c448747a5325319ab7', | ||||||
|  |             'thumbnail': 'https://img.rtvcdn.si/_up/ava/ava_misc/show_logos/173250997/logo_wide1.jpg', | ||||||
|         }, |         }, | ||||||
|         'playlist_count': 18, |         'playlist_count': 18, | ||||||
|     }] |     }] | ||||||
| @@ -187,4 +189,7 @@ class RTVSLOShowIE(InfoExtractor): | |||||||
|         return self.playlist_from_matches( |         return self.playlist_from_matches( | ||||||
|             re.findall(r'<a [^>]*\bhref="(/arhiv/[^"]+)"', webpage), |             re.findall(r'<a [^>]*\bhref="(/arhiv/[^"]+)"', webpage), | ||||||
|             playlist_id, self._html_extract_title(webpage), |             playlist_id, self._html_extract_title(webpage), | ||||||
|             getter=urljoin('https://365.rtvslo.si'), ie=RTVSLOIE) |             getter=urljoin('https://365.rtvslo.si'), ie=RTVSLOIE, | ||||||
|  |             description=self._og_search_description(webpage), | ||||||
|  |             thumbnail=self._og_search_thumbnail(webpage), | ||||||
|  |         ) | ||||||
|   | |||||||
| @@ -4,43 +4,12 @@ import urllib.parse | |||||||
| from .common import InfoExtractor | from .common import InfoExtractor | ||||||
| from ..utils import ( | from ..utils import ( | ||||||
|     ExtractorError, |     ExtractorError, | ||||||
|     parse_qs, |     UnsupportedError, | ||||||
|     unsmuggle_url, |     make_archive_id, | ||||||
|  |     remove_end, | ||||||
|  |     url_or_none, | ||||||
| ) | ) | ||||||
| 
 | from ..utils.traversal import traverse_obj | ||||||
| _COMMITTEES = { |  | ||||||
|     'ag': ('76440', 'http://ag-f.akamaihd.net'), |  | ||||||
|     'aging': ('76442', 'http://aging-f.akamaihd.net'), |  | ||||||
|     'approps': ('76441', 'http://approps-f.akamaihd.net'), |  | ||||||
|     'arch': ('', 'http://ussenate-f.akamaihd.net'), |  | ||||||
|     'armed': ('76445', 'http://armed-f.akamaihd.net'), |  | ||||||
|     'banking': ('76446', 'http://banking-f.akamaihd.net'), |  | ||||||
|     'budget': ('76447', 'http://budget-f.akamaihd.net'), |  | ||||||
|     'cecc': ('76486', 'http://srs-f.akamaihd.net'), |  | ||||||
|     'commerce': ('80177', 'http://commerce1-f.akamaihd.net'), |  | ||||||
|     'csce': ('75229', 'http://srs-f.akamaihd.net'), |  | ||||||
|     'dpc': ('76590', 'http://dpc-f.akamaihd.net'), |  | ||||||
|     'energy': ('76448', 'http://energy-f.akamaihd.net'), |  | ||||||
|     'epw': ('76478', 'http://epw-f.akamaihd.net'), |  | ||||||
|     'ethics': ('76449', 'http://ethics-f.akamaihd.net'), |  | ||||||
|     'finance': ('76450', 'http://finance-f.akamaihd.net'), |  | ||||||
|     'foreign': ('76451', 'http://foreign-f.akamaihd.net'), |  | ||||||
|     'govtaff': ('76453', 'http://govtaff-f.akamaihd.net'), |  | ||||||
|     'help': ('76452', 'http://help-f.akamaihd.net'), |  | ||||||
|     'indian': ('76455', 'http://indian-f.akamaihd.net'), |  | ||||||
|     'intel': ('76456', 'http://intel-f.akamaihd.net'), |  | ||||||
|     'intlnarc': ('76457', 'http://intlnarc-f.akamaihd.net'), |  | ||||||
|     'jccic': ('85180', 'http://jccic-f.akamaihd.net'), |  | ||||||
|     'jec': ('76458', 'http://jec-f.akamaihd.net'), |  | ||||||
|     'judiciary': ('76459', 'http://judiciary-f.akamaihd.net'), |  | ||||||
|     'rpc': ('76591', 'http://rpc-f.akamaihd.net'), |  | ||||||
|     'rules': ('76460', 'http://rules-f.akamaihd.net'), |  | ||||||
|     'saa': ('76489', 'http://srs-f.akamaihd.net'), |  | ||||||
|     'smbiz': ('76461', 'http://smbiz-f.akamaihd.net'), |  | ||||||
|     'srs': ('75229', 'http://srs-f.akamaihd.net'), |  | ||||||
|     'uscc': ('76487', 'http://srs-f.akamaihd.net'), |  | ||||||
|     'vetaff': ('76462', 'http://vetaff-f.akamaihd.net'), |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class SenateISVPIE(InfoExtractor): | class SenateISVPIE(InfoExtractor): | ||||||
| @@ -53,31 +22,46 @@ class SenateISVPIE(InfoExtractor): | |||||||
|         'info_dict': { |         'info_dict': { | ||||||
|             'id': 'judiciary031715', |             'id': 'judiciary031715', | ||||||
|             'ext': 'mp4', |             'ext': 'mp4', | ||||||
|             'title': 'Integrated Senate Video Player', |             'title': 'ISVP', | ||||||
|             'thumbnail': r're:^https?://.*\.(?:jpg|png)$', |             'thumbnail': r're:^https?://.*\.(?:jpg|png)$', | ||||||
|  |             '_old_archive_ids': ['senategov judiciary031715'], | ||||||
|         }, |         }, | ||||||
|         'params': { |         'params': { | ||||||
|             # m3u8 download |             # m3u8 download | ||||||
|             'skip_download': True, |             'skip_download': True, | ||||||
|         }, |         }, | ||||||
|  |         'expected_warnings': ['Failed to download m3u8 information'], | ||||||
|     }, { |     }, { | ||||||
|         'url': 'http://www.senate.gov/isvp/?type=live&comm=commerce&filename=commerce011514.mp4&auto_play=false', |         'url': 'http://www.senate.gov/isvp/?type=live&comm=commerce&filename=commerce011514.mp4&auto_play=false', | ||||||
|         'info_dict': { |         'info_dict': { | ||||||
|             'id': 'commerce011514', |             'id': 'commerce011514', | ||||||
|             'ext': 'mp4', |             'ext': 'mp4', | ||||||
|             'title': 'Integrated Senate Video Player', |             'title': 'Integrated Senate Video Player', | ||||||
|  |             '_old_archive_ids': ['senategov commerce011514'], | ||||||
|         }, |         }, | ||||||
|         'params': { |         'params': { | ||||||
|             # m3u8 download |             # m3u8 download | ||||||
|             'skip_download': True, |             'skip_download': True, | ||||||
|         }, |         }, | ||||||
|  |         'skip': 'This video is not available.', | ||||||
|     }, { |     }, { | ||||||
|         'url': 'http://www.senate.gov/isvp/?type=arch&comm=intel&filename=intel090613&hc_location=ufi', |         'url': 'http://www.senate.gov/isvp/?type=arch&comm=intel&filename=intel090613&hc_location=ufi', | ||||||
|         # checksum differs each time |         # checksum differs each time | ||||||
|         'info_dict': { |         'info_dict': { | ||||||
|             'id': 'intel090613', |             'id': 'intel090613', | ||||||
|             'ext': 'mp4', |             'ext': 'mp4', | ||||||
|             'title': 'Integrated Senate Video Player', |             'title': 'ISVP', | ||||||
|  |             '_old_archive_ids': ['senategov intel090613'], | ||||||
|  |         }, | ||||||
|  |         'expected_warnings': ['Failed to download m3u8 information'], | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.senate.gov/isvp/?auto_play=false&comm=help&filename=help090920&poster=https://www.help.senate.gov/assets/images/video-poster.png&stt=950', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': 'help090920', | ||||||
|  |             'ext': 'mp4', | ||||||
|  |             'title': 'ISVP', | ||||||
|  |             'thumbnail': 'https://www.help.senate.gov/assets/images/video-poster.png', | ||||||
|  |             '_old_archive_ids': ['senategov help090920'], | ||||||
|         }, |         }, | ||||||
|     }, { |     }, { | ||||||
|         # From http://www.c-span.org/video/?96791-1 |         # From http://www.c-span.org/video/?96791-1 | ||||||
| @@ -85,60 +69,81 @@ class SenateISVPIE(InfoExtractor): | |||||||
|         'only_matching': True, |         'only_matching': True, | ||||||
|     }] |     }] | ||||||
| 
 | 
 | ||||||
|  |     _COMMITTEES = { | ||||||
|  |         'ag': ('76440', 'https://ag-f.akamaihd.net', '2036803', 'agriculture'), | ||||||
|  |         'aging': ('76442', 'https://aging-f.akamaihd.net', '2036801', 'aging'), | ||||||
|  |         'approps': ('76441', 'https://approps-f.akamaihd.net', '2036802', 'appropriations'), | ||||||
|  |         'arch': ('', 'https://ussenate-f.akamaihd.net', '', 'arch'), | ||||||
|  |         'armed': ('76445', 'https://armed-f.akamaihd.net', '2036800', 'armedservices'), | ||||||
|  |         'banking': ('76446', 'https://banking-f.akamaihd.net', '2036799', 'banking'), | ||||||
|  |         'budget': ('76447', 'https://budget-f.akamaihd.net', '2036798', 'budget'), | ||||||
|  |         'cecc': ('76486', 'https://srs-f.akamaihd.net', '2036782', 'srs_cecc'), | ||||||
|  |         'commerce': ('80177', 'https://commerce1-f.akamaihd.net', '2036779', 'commerce'), | ||||||
|  |         'csce': ('75229', 'https://srs-f.akamaihd.net', '2036777', 'srs_srs'), | ||||||
|  |         'dpc': ('76590', 'https://dpc-f.akamaihd.net', '', 'dpc'), | ||||||
|  |         'energy': ('76448', 'https://energy-f.akamaihd.net', '2036797', 'energy'), | ||||||
|  |         'epw': ('76478', 'https://epw-f.akamaihd.net', '2036783', 'environment'), | ||||||
|  |         'ethics': ('76449', 'https://ethics-f.akamaihd.net', '2036796', 'ethics'), | ||||||
|  |         'finance': ('76450', 'https://finance-f.akamaihd.net', '2036795', 'finance_finance'), | ||||||
|  |         'foreign': ('76451', 'https://foreign-f.akamaihd.net', '2036794', 'foreignrelations'), | ||||||
|  |         'govtaff': ('76453', 'https://govtaff-f.akamaihd.net', '2036792', 'hsgac'), | ||||||
|  |         'help': ('76452', 'https://help-f.akamaihd.net', '2036793', 'help'), | ||||||
|  |         'indian': ('76455', 'https://indian-f.akamaihd.net', '2036791', 'indianaffairs'), | ||||||
|  |         'intel': ('76456', 'https://intel-f.akamaihd.net', '2036790', 'intelligence'), | ||||||
|  |         'intlnarc': ('76457', 'https://intlnarc-f.akamaihd.net', '', 'internationalnarcoticscaucus'), | ||||||
|  |         'jccic': ('85180', 'https://jccic-f.akamaihd.net', '2036778', 'jccic'), | ||||||
|  |         'jec': ('76458', 'https://jec-f.akamaihd.net', '2036789', 'jointeconomic'), | ||||||
|  |         'judiciary': ('76459', 'https://judiciary-f.akamaihd.net', '2036788', 'judiciary'), | ||||||
|  |         'rpc': ('76591', 'https://rpc-f.akamaihd.net', '', 'rpc'), | ||||||
|  |         'rules': ('76460', 'https://rules-f.akamaihd.net', '2036787', 'rules'), | ||||||
|  |         'saa': ('76489', 'https://srs-f.akamaihd.net', '2036780', 'srs_saa'), | ||||||
|  |         'smbiz': ('76461', 'https://smbiz-f.akamaihd.net', '2036786', 'smallbusiness'), | ||||||
|  |         'srs': ('75229', 'https://srs-f.akamaihd.net', '2031966', 'srs_srs'), | ||||||
|  |         'uscc': ('76487', 'https://srs-f.akamaihd.net', '2036781', 'srs_uscc'), | ||||||
|  |         'vetaff': ('76462', 'https://vetaff-f.akamaihd.net', '2036785', 'veteransaffairs'), | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     def _real_extract(self, url): |     def _real_extract(self, url): | ||||||
|         url, smuggled_data = unsmuggle_url(url, {}) |  | ||||||
| 
 |  | ||||||
|         qs = urllib.parse.parse_qs(self._match_valid_url(url).group('qs')) |         qs = urllib.parse.parse_qs(self._match_valid_url(url).group('qs')) | ||||||
|         if not qs.get('filename') or not qs.get('type') or not qs.get('comm'): |         if not qs.get('filename') or not qs.get('comm'): | ||||||
|             raise ExtractorError('Invalid URL', expected=True) |             raise ExtractorError('Invalid URL', expected=True) | ||||||
| 
 |         filename = qs['filename'][0] | ||||||
|         video_id = re.sub(r'.mp4$', '', qs['filename'][0]) |         video_id = remove_end(filename, '.mp4') | ||||||
| 
 | 
 | ||||||
|         webpage = self._download_webpage(url, video_id) |         webpage = self._download_webpage(url, video_id) | ||||||
|  |         committee = qs['comm'][0] | ||||||
| 
 | 
 | ||||||
|         if smuggled_data.get('force_title'): |         stream_num, stream_domain, stream_id, msl3 = self._COMMITTEES[committee] | ||||||
|             title = smuggled_data['force_title'] |  | ||||||
|         else: |  | ||||||
|             title = self._html_extract_title(webpage) |  | ||||||
|         poster = qs.get('poster') |  | ||||||
|         thumbnail = poster[0] if poster else None |  | ||||||
| 
 |  | ||||||
|         video_type = qs['type'][0] |  | ||||||
|         committee = video_type if video_type == 'arch' else qs['comm'][0] |  | ||||||
| 
 |  | ||||||
|         stream_num, domain = _COMMITTEES[committee] |  | ||||||
| 
 | 
 | ||||||
|  |         urls_alternatives = [f'https://www-senate-gov-media-srs.akamaized.net/hls/live/{stream_id}/{committee}/{filename}/master.m3u8', | ||||||
|  |                              f'https://www-senate-gov-msl3archive.akamaized.net/{msl3}/{filename}_1/master.m3u8', | ||||||
|  |                              f'{stream_domain}/i/{filename}_1@{stream_num}/master.m3u8', | ||||||
|  |                              f'{stream_domain}/i/{filename}.mp4/master.m3u8'] | ||||||
|         formats = [] |         formats = [] | ||||||
|         if video_type == 'arch': |         subtitles = {} | ||||||
|             filename = video_id if '.' in video_id else video_id + '.mp4' |         for video_url in urls_alternatives: | ||||||
|             m3u8_url = urllib.parse.urljoin(domain, 'i/' + filename + '/master.m3u8') |             formats, subtitles = self._extract_m3u8_formats_and_subtitles(video_url, video_id, ext='mp4', fatal=False) | ||||||
|             formats = self._extract_m3u8_formats(m3u8_url, video_id, ext='mp4', m3u8_id='m3u8') |             if formats: | ||||||
|         else: |                 break | ||||||
|             hdcore_sign = 'hdcore=3.1.0' |  | ||||||
|             url_params = (domain, video_id, stream_num) |  | ||||||
|             f4m_url = f'%s/z/%s_1@%s/manifest.f4m?{hdcore_sign}' % url_params |  | ||||||
|             m3u8_url = '{}/i/{}_1@{}/master.m3u8'.format(*url_params) |  | ||||||
|             for entry in self._extract_f4m_formats(f4m_url, video_id, f4m_id='f4m'): |  | ||||||
|                 # URLs without the extra param induce an 404 error |  | ||||||
|                 entry.update({'extra_param_to_segment_url': hdcore_sign}) |  | ||||||
|                 formats.append(entry) |  | ||||||
|             for entry in self._extract_m3u8_formats(m3u8_url, video_id, ext='mp4', m3u8_id='m3u8'): |  | ||||||
|                 mobj = re.search(r'(?P<tag>(?:-p|-b)).m3u8', entry['url']) |  | ||||||
|                 if mobj: |  | ||||||
|                     entry['format_id'] += mobj.group('tag') |  | ||||||
|                 formats.append(entry) |  | ||||||
| 
 | 
 | ||||||
|         return { |         return { | ||||||
|             'id': video_id, |             'id': video_id, | ||||||
|             'title': title, |             'title': self._html_extract_title(webpage), | ||||||
|             'formats': formats, |             'formats': formats, | ||||||
|             'thumbnail': thumbnail, |             'subtitles': subtitles, | ||||||
|  |             'thumbnail': traverse_obj(qs, ('poster', 0, {url_or_none})), | ||||||
|  |             '_old_archive_ids': [make_archive_id(SenateGovIE, video_id)], | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class SenateGovIE(InfoExtractor): | class SenateGovIE(InfoExtractor): | ||||||
|     _IE_NAME = 'senate.gov' |     _IE_NAME = 'senate.gov' | ||||||
|     _VALID_URL = r'https?:\/\/(?:www\.)?(help|appropriations|judiciary|banking|armed-services|finance)\.senate\.gov' |     _SUBDOMAIN_RE = '|'.join(map(re.escape, ( | ||||||
|  |         'agriculture', 'aging', 'appropriations', 'armed-services', 'banking', | ||||||
|  |         'budget', 'commerce', 'energy', 'epw', 'finance', 'foreign', 'help', | ||||||
|  |         'intelligence', 'inaugural', 'judiciary', 'rules', 'sbc', 'veterans', | ||||||
|  |     ))) | ||||||
|  |     _VALID_URL = rf'https?://(?:www\.)?(?:{_SUBDOMAIN_RE})\.senate\.gov' | ||||||
|     _TESTS = [{ |     _TESTS = [{ | ||||||
|         'url': 'https://www.help.senate.gov/hearings/vaccines-saving-lives-ensuring-confidence-and-protecting-public-health', |         'url': 'https://www.help.senate.gov/hearings/vaccines-saving-lives-ensuring-confidence-and-protecting-public-health', | ||||||
|         'info_dict': { |         'info_dict': { | ||||||
| @@ -147,6 +152,9 @@ class SenateGovIE(InfoExtractor): | |||||||
|             'title': 'Vaccines: Saving Lives, Ensuring Confidence, and Protecting Public Health', |             'title': 'Vaccines: Saving Lives, Ensuring Confidence, and Protecting Public Health', | ||||||
|             'description': 'The U.S. Senate Committee on Health, Education, Labor & Pensions', |             'description': 'The U.S. Senate Committee on Health, Education, Labor & Pensions', | ||||||
|             'ext': 'mp4', |             'ext': 'mp4', | ||||||
|  |             'age_limit': 0, | ||||||
|  |             'thumbnail': 'https://www.help.senate.gov/assets/images/sharelogo.jpg', | ||||||
|  |             '_old_archive_ids': ['senategov help090920'], | ||||||
|         }, |         }, | ||||||
|         'params': {'skip_download': 'm3u8'}, |         'params': {'skip_download': 'm3u8'}, | ||||||
|     }, { |     }, { | ||||||
| @@ -156,8 +164,12 @@ class SenateGovIE(InfoExtractor): | |||||||
|             'display_id': 'watch?hearingid=B8A25434-5056-A066-6020-1F68CB75F0CD', |             'display_id': 'watch?hearingid=B8A25434-5056-A066-6020-1F68CB75F0CD', | ||||||
|             'title': 'Review of the FY2019 Budget Request for the U.S. Army', |             'title': 'Review of the FY2019 Budget Request for the U.S. Army', | ||||||
|             'ext': 'mp4', |             'ext': 'mp4', | ||||||
|  |             'age_limit': 0, | ||||||
|  |             'thumbnail': 'https://www.appropriations.senate.gov/themes/appropriations/images/video-poster-flash-fit.png', | ||||||
|  |             '_old_archive_ids': ['senategov appropsA051518'], | ||||||
|         }, |         }, | ||||||
|         'params': {'skip_download': 'm3u8'}, |         'params': {'skip_download': 'm3u8'}, | ||||||
|  |         'expected_warnings': ['Failed to download m3u8 information'], | ||||||
|     }, { |     }, { | ||||||
|         'url': 'https://www.banking.senate.gov/hearings/21st-century-communities-public-transportation-infrastructure-investment-and-fast-act-reauthorization', |         'url': 'https://www.banking.senate.gov/hearings/21st-century-communities-public-transportation-infrastructure-investment-and-fast-act-reauthorization', | ||||||
|         'info_dict': { |         'info_dict': { | ||||||
| @@ -166,32 +178,65 @@ class SenateGovIE(InfoExtractor): | |||||||
|             'title': '21st Century Communities: Public Transportation Infrastructure Investment and FAST Act Reauthorization', |             'title': '21st Century Communities: Public Transportation Infrastructure Investment and FAST Act Reauthorization', | ||||||
|             'description': 'The Official website of The United States Committee on Banking, Housing, and Urban Affairs', |             'description': 'The Official website of The United States Committee on Banking, Housing, and Urban Affairs', | ||||||
|             'ext': 'mp4', |             'ext': 'mp4', | ||||||
|  |             'thumbnail': 'https://www.banking.senate.gov/themes/banking/images/sharelogo.jpg', | ||||||
|  |             'age_limit': 0, | ||||||
|  |             '_old_archive_ids': ['senategov banking041521'], | ||||||
|         }, |         }, | ||||||
|         'params': {'skip_download': 'm3u8'}, |         'params': {'skip_download': 'm3u8'}, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.agriculture.senate.gov/hearings/hemp-production-and-the-2018-farm-bill', | ||||||
|  |         'only_matching': True, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.aging.senate.gov/hearings/the-older-americans-act-the-local-impact-of-the-law-and-the-upcoming-reauthorization', | ||||||
|  |         'only_matching': True, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.budget.senate.gov/hearings/improving-care-lowering-costs-achieving-health-care-efficiency', | ||||||
|  |         'only_matching': True, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.commerce.senate.gov/2024/12/communications-networks-safety-and-security', | ||||||
|  |         'only_matching': True, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.energy.senate.gov/hearings/2024/2/full-committee-hearing-to-examine', | ||||||
|  |         'only_matching': True, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.epw.senate.gov/public/index.cfm/hearings?ID=F63083EA-2C13-498C-B548-341BED68C209', | ||||||
|  |         'only_matching': True, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.foreign.senate.gov/hearings/american-diplomacy-and-global-leadership-review-of-the-fy25-state-department-budget-request', | ||||||
|  |         'only_matching': True, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.intelligence.senate.gov/hearings/foreign-threats-elections-2024-%E2%80%93-roles-and-responsibilities-us-tech-providers', | ||||||
|  |         'only_matching': True, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.inaugural.senate.gov/52nd-inaugural-ceremonies/', | ||||||
|  |         'only_matching': True, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.rules.senate.gov/hearings/02/07/2023/business-meeting', | ||||||
|  |         'only_matching': True, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.sbc.senate.gov/public/index.cfm/hearings?ID=5B13AA6B-8279-45AF-B54B-94156DC7A2AB', | ||||||
|  |         'only_matching': True, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.veterans.senate.gov/2024/5/frontier-health-care-ensuring-veterans-access-no-matter-where-they-live', | ||||||
|  |         'only_matching': True, | ||||||
|     }] |     }] | ||||||
| 
 | 
 | ||||||
|     def _real_extract(self, url): |     def _real_extract(self, url): | ||||||
|         display_id = self._generic_id(url) |         display_id = self._generic_id(url) | ||||||
|         webpage = self._download_webpage(url, display_id) |         webpage = self._download_webpage(url, display_id) | ||||||
|         parse_info = parse_qs(self._search_regex( |         url_info = next(SenateISVPIE.extract_from_webpage(self._downloader, url, webpage), None) | ||||||
|             r'<iframe class="[^>"]*streaminghearing[^>"]*"\s[^>]*\bsrc="([^">]*)', webpage, 'hearing URL')) |         if not url_info: | ||||||
| 
 |             raise UnsupportedError(url) | ||||||
|         stream_num, stream_domain = _COMMITTEES[parse_info['comm'][-1]] |  | ||||||
|         filename = parse_info['filename'][-1] |  | ||||||
| 
 |  | ||||||
|         formats = self._extract_m3u8_formats( |  | ||||||
|             f'{stream_domain}/i/{filename}_1@{stream_num}/master.m3u8', |  | ||||||
|             display_id, ext='mp4') |  | ||||||
| 
 | 
 | ||||||
|         title = self._html_search_regex( |         title = self._html_search_regex( | ||||||
|             (*self._og_regexes('title'), r'(?s)<title>([^<]*?)</title>'), webpage, 'video title') |             (*self._og_regexes('title'), r'(?s)<title>([^<]*?)</title>'), webpage, 'video title', fatal=False) | ||||||
| 
 | 
 | ||||||
|         return { |         return { | ||||||
|             'id': re.sub(r'.mp4$', '', filename), |             **url_info, | ||||||
|  |             '_type': 'url_transparent', | ||||||
|             'display_id': display_id, |             'display_id': display_id, | ||||||
|             'title': re.sub(r'\s+', ' ', title.split('|')[0]).strip(), |             'title': re.sub(r'\s+', ' ', title.split('|')[0]).strip(), | ||||||
|             'description': self._og_search_description(webpage, default=None), |             'description': self._og_search_description(webpage, default=None), | ||||||
|             'thumbnail': self._og_search_thumbnail(webpage, default=None), |             'thumbnail': self._og_search_thumbnail(webpage, default=None), | ||||||
|             'age_limit': self._rta_search(webpage), |             'age_limit': self._rta_search(webpage), | ||||||
|             'formats': formats, |  | ||||||
|         } |         } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 github-action[bot]
					github-action[bot]