mirror of
https://github.com/bolucat/Archive.git
synced 2025-10-30 19:36:59 +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 Sat Jan 18 19:31:11 CET 2025
|
||||
Update On Sun Jan 19 19:31:01 CET 2025
|
||||
Update On Mon Jan 20 19:32:40 CET 2025
|
||||
|
||||
@@ -153,11 +153,11 @@ func (b *Base) DialOptions(opts ...dialer.Option) []dialer.Option {
|
||||
}
|
||||
|
||||
type BasicOption struct {
|
||||
TFO bool `proxy:"tfo,omitempty" group:"tfo,omitempty"`
|
||||
MPTCP bool `proxy:"mptcp,omitempty" group:"mptcp,omitempty"`
|
||||
TFO bool `proxy:"tfo,omitempty"`
|
||||
MPTCP bool `proxy:"mptcp,omitempty"`
|
||||
Interface string `proxy:"interface-name,omitempty" group:"interface-name,omitempty"`
|
||||
RoutingMark int `proxy:"routing-mark,omitempty" group:"routing-mark,omitempty"`
|
||||
IPVersion string `proxy:"ip-version,omitempty" group:"ip-version,omitempty"`
|
||||
IPVersion string `proxy:"ip-version,omitempty"`
|
||||
DialerProxy string `proxy:"dialer-proxy,omitempty"` // don't apply this option into groups, but can set a group name in a proxy
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,13 @@ type GroupBaseOption struct {
|
||||
}
|
||||
|
||||
func NewGroupBase(opt GroupBaseOption) *GroupBase {
|
||||
if opt.RoutingMark != 0 {
|
||||
log.Warnln("The group [%s] with routing-mark configuration is deprecated, please set it directly on the proxy instead", opt.Name)
|
||||
}
|
||||
if opt.Interface != "" {
|
||||
log.Warnln("The group [%s] with interface-name configuration is deprecated, please set it directly on the proxy instead", opt.Name)
|
||||
}
|
||||
|
||||
var excludeFilterReg *regexp2.Regexp
|
||||
if opt.excludeFilter != "" {
|
||||
excludeFilterReg = regexp2.MustCompile(opt.excludeFilter, regexp2.None)
|
||||
|
||||
@@ -17,7 +17,6 @@ import (
|
||||
C "github.com/metacubex/mihomo/constant"
|
||||
)
|
||||
|
||||
var trustCerts []*x509.Certificate
|
||||
var globalCertPool *x509.CertPool
|
||||
var mutex sync.RWMutex
|
||||
var errNotMatch = errors.New("certificate fingerprints do not match")
|
||||
@@ -30,11 +29,19 @@ var DisableSystemCa, _ = strconv.ParseBool(os.Getenv("DISABLE_SYSTEM_CA"))
|
||||
func AddCertificate(certificate string) error {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
if certificate == "" {
|
||||
return fmt.Errorf("certificate is empty")
|
||||
}
|
||||
if cert, err := x509.ParseCertificate([]byte(certificate)); err == nil {
|
||||
trustCerts = append(trustCerts, cert)
|
||||
|
||||
if globalCertPool == nil {
|
||||
initializeCertPool()
|
||||
}
|
||||
|
||||
if globalCertPool.AppendCertsFromPEM([]byte(certificate)) {
|
||||
return nil
|
||||
} else if cert, err := x509.ParseCertificate([]byte(certificate)); err == nil {
|
||||
globalCertPool.AddCert(cert)
|
||||
return nil
|
||||
} else {
|
||||
return fmt.Errorf("add certificate failed")
|
||||
@@ -51,9 +58,6 @@ func initializeCertPool() {
|
||||
globalCertPool = x509.NewCertPool()
|
||||
}
|
||||
}
|
||||
for _, cert := range trustCerts {
|
||||
globalCertPool.AddCert(cert)
|
||||
}
|
||||
if !DisableEmbedCa {
|
||||
globalCertPool.AppendCertsFromPEM(_CaCertificates)
|
||||
}
|
||||
@@ -62,7 +66,6 @@ func initializeCertPool() {
|
||||
func ResetCertificate() {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
trustCerts = nil
|
||||
initializeCertPool()
|
||||
}
|
||||
|
||||
|
||||
62
clash-nyanpasu/backend/Cargo.lock
generated
62
clash-nyanpasu/backend/Cargo.lock
generated
@@ -963,7 +963,7 @@ dependencies = [
|
||||
"boa_interner",
|
||||
"boa_macros",
|
||||
"boa_string",
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"num-bigint",
|
||||
"rustc-hash 2.1.0",
|
||||
]
|
||||
@@ -989,7 +989,7 @@ dependencies = [
|
||||
"fast-float2",
|
||||
"hashbrown 0.15.2",
|
||||
"icu_normalizer",
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"intrusive-collections",
|
||||
"itertools 0.13.0",
|
||||
"num-bigint",
|
||||
@@ -1035,7 +1035,7 @@ dependencies = [
|
||||
"boa_gc",
|
||||
"boa_macros",
|
||||
"hashbrown 0.15.2",
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"once_cell",
|
||||
"phf 0.11.3",
|
||||
"rustc-hash 2.1.0",
|
||||
@@ -1293,7 +1293,7 @@ checksum = "8769706aad5d996120af43197bf46ef6ad0fda35216b4505f926a365a232d924"
|
||||
dependencies = [
|
||||
"camino",
|
||||
"cargo-platform",
|
||||
"semver 1.0.24",
|
||||
"semver 1.0.25",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 2.0.11",
|
||||
@@ -1515,7 +1515,7 @@ dependencies = [
|
||||
"hex",
|
||||
"humansize",
|
||||
"image",
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"itertools 0.14.0",
|
||||
"log",
|
||||
"md-5",
|
||||
@@ -1552,7 +1552,7 @@ dependencies = [
|
||||
"runas",
|
||||
"rust-i18n",
|
||||
"rustc_version",
|
||||
"semver 1.0.24",
|
||||
"semver 1.0.25",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_yaml_ng",
|
||||
@@ -3676,7 +3676,7 @@ dependencies = [
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
"http 1.2.0",
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"slab",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
@@ -4244,9 +4244,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.7.0"
|
||||
version = "2.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f"
|
||||
checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown 0.15.2",
|
||||
@@ -5105,7 +5105,7 @@ dependencies = [
|
||||
"cfg_aliases 0.1.1",
|
||||
"codespan-reporting",
|
||||
"hexf-parse",
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"log",
|
||||
"rustc-hash 1.1.0",
|
||||
"spirv",
|
||||
@@ -6251,7 +6251,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
|
||||
dependencies = [
|
||||
"fixedbitset",
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -6460,7 +6460,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"quick-xml 0.32.0",
|
||||
"serde",
|
||||
"time",
|
||||
@@ -7299,7 +7299,7 @@ version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
|
||||
dependencies = [
|
||||
"semver 1.0.24",
|
||||
"semver 1.0.25",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -7519,9 +7519,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "semver"
|
||||
version = "1.0.24"
|
||||
version = "1.0.25"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba"
|
||||
checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
@@ -7595,9 +7595,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.136"
|
||||
version = "1.0.137"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "336a0c23cf42a38d9eaa7cd22c7040d04e1228a19a933890805ffd00a16437d2"
|
||||
checksum = "930cfb6e6abf99298aaad7d29abbef7a9999a9a8806a40088f55f0dcec03146b"
|
||||
dependencies = [
|
||||
"itoa 1.0.14",
|
||||
"memchr",
|
||||
@@ -7657,7 +7657,7 @@ dependencies = [
|
||||
"chrono",
|
||||
"hex",
|
||||
"indexmap 1.9.3",
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"serde_json",
|
||||
@@ -7682,7 +7682,7 @@ name = "serde_yaml_ng"
|
||||
version = "0.10.0"
|
||||
source = "git+https://github.com/libnyanpasu/serde-yaml-ng.git#39cfdee3ab2a9bf220bc285e8004bb1950fa317f"
|
||||
dependencies = [
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"itoa 1.0.14",
|
||||
"ryu",
|
||||
"serde",
|
||||
@@ -7695,7 +7695,7 @@ version = "0.0.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "48e76bab63c3fd98d27c17f9cbce177f64a91f5e69ac04cafe04e1bb25d1dc3c"
|
||||
dependencies = [
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"itoa 1.0.14",
|
||||
"libyml",
|
||||
"log",
|
||||
@@ -8463,7 +8463,7 @@ dependencies = [
|
||||
"heck 0.5.0",
|
||||
"json-patch",
|
||||
"schemars",
|
||||
"semver 1.0.24",
|
||||
"semver 1.0.25",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"tauri-utils",
|
||||
@@ -8486,7 +8486,7 @@ dependencies = [
|
||||
"png",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"semver 1.0.24",
|
||||
"semver 1.0.25",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sha2 0.10.8",
|
||||
@@ -8699,7 +8699,7 @@ dependencies = [
|
||||
"minisign-verify",
|
||||
"percent-encoding",
|
||||
"reqwest",
|
||||
"semver 1.0.24",
|
||||
"semver 1.0.25",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"tar",
|
||||
@@ -8782,7 +8782,7 @@ dependencies = [
|
||||
"quote",
|
||||
"regex",
|
||||
"schemars",
|
||||
"semver 1.0.24",
|
||||
"semver 1.0.25",
|
||||
"serde",
|
||||
"serde-untagged",
|
||||
"serde_json",
|
||||
@@ -9230,7 +9230,7 @@ version = "0.19.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
|
||||
dependencies = [
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"serde",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
@@ -9243,7 +9243,7 @@ version = "0.20.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
|
||||
dependencies = [
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"toml_datetime",
|
||||
"winnow 0.5.40",
|
||||
]
|
||||
@@ -9254,7 +9254,7 @@ version = "0.22.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5"
|
||||
dependencies = [
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"serde",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
@@ -9781,9 +9781,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
||||
|
||||
[[package]]
|
||||
name = "uuid"
|
||||
version = "1.11.1"
|
||||
version = "1.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4"
|
||||
checksum = "744018581f9a3454a9e15beb8a33b017183f1e7c0cd170232a2d1453b23a51c4"
|
||||
dependencies = [
|
||||
"getrandom 0.2.15",
|
||||
"serde",
|
||||
@@ -10311,7 +10311,7 @@ dependencies = [
|
||||
"bitflags 2.6.0",
|
||||
"cfg_aliases 0.1.1",
|
||||
"document-features",
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"log",
|
||||
"naga",
|
||||
"once_cell",
|
||||
@@ -11607,7 +11607,7 @@ dependencies = [
|
||||
"displaydoc",
|
||||
"flate2",
|
||||
"hmac",
|
||||
"indexmap 2.7.0",
|
||||
"indexmap 2.7.1",
|
||||
"lzma-rs",
|
||||
"memchr",
|
||||
"pbkdf2",
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
"unplugin-auto-import": "19.0.0",
|
||||
"unplugin-icons": "22.0.0",
|
||||
"validator": "13.12.0",
|
||||
"vite": "6.0.7",
|
||||
"vite": "6.0.9",
|
||||
"vite-plugin-html": "3.2.2",
|
||||
"vite-plugin-sass-dts": "1.3.30",
|
||||
"vite-plugin-svgr": "4.3.0",
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"react-error-boundary": "5.0.0",
|
||||
"react-i18next": "15.4.0",
|
||||
"react-use": "17.6.0",
|
||||
"vite": "6.0.7",
|
||||
"vite": "6.0.9",
|
||||
"vite-tsconfig-paths": "5.1.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"manifest_version": 1,
|
||||
"latest": {
|
||||
"mihomo": "v1.19.1",
|
||||
"mihomo_alpha": "alpha-192d769",
|
||||
"mihomo_alpha": "alpha-fc23318",
|
||||
"clash_rs": "v0.7.4",
|
||||
"clash_premium": "2023-09-05-gdcc8d87",
|
||||
"clash_rs_alpha": "0.7.4-alpha+sha.63aec82"
|
||||
@@ -69,5 +69,5 @@
|
||||
"linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf"
|
||||
}
|
||||
},
|
||||
"updated_at": "2025-01-16T22:20:32.490Z"
|
||||
"updated_at": "2025-01-19T22:20:36.800Z"
|
||||
}
|
||||
|
||||
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)
|
||||
'@tanstack/router-plugin':
|
||||
specifier: 1.97.3
|
||||
version: 1.97.3(@tanstack/react-router@1.97.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
version: 1.97.3(@tanstack/react-router@1.97.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
'@tauri-apps/plugin-clipboard-manager':
|
||||
specifier: 2.2.0
|
||||
version: 2.2.0
|
||||
@@ -367,13 +367,13 @@ importers:
|
||||
version: 13.12.2
|
||||
'@vitejs/plugin-legacy':
|
||||
specifier: 6.0.0
|
||||
version: 6.0.0(terser@5.36.0)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
version: 6.0.0(terser@5.36.0)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
'@vitejs/plugin-react':
|
||||
specifier: 4.3.4
|
||||
version: 4.3.4(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
version: 4.3.4(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
'@vitejs/plugin-react-swc':
|
||||
specifier: 3.7.2
|
||||
version: 3.7.2(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
version: 3.7.2(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
change-case:
|
||||
specifier: 5.4.4
|
||||
version: 5.4.4
|
||||
@@ -414,20 +414,20 @@ importers:
|
||||
specifier: 13.12.0
|
||||
version: 13.12.0
|
||||
vite:
|
||||
specifier: 6.0.7
|
||||
version: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
specifier: 6.0.9
|
||||
version: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
vite-plugin-html:
|
||||
specifier: 3.2.2
|
||||
version: 3.2.2(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
version: 3.2.2(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
vite-plugin-sass-dts:
|
||||
specifier: 1.3.30
|
||||
version: 1.3.30(postcss@8.5.1)(prettier@3.4.2)(sass-embedded@1.83.4)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
version: 1.3.30(postcss@8.5.1)(prettier@3.4.2)(sass-embedded@1.83.4)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
vite-plugin-svgr:
|
||||
specifier: 4.3.0
|
||||
version: 4.3.0(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
version: 4.3.0(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
vite-tsconfig-paths:
|
||||
specifier: 5.1.4
|
||||
version: 5.1.4(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
version: 5.1.4(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
zod:
|
||||
specifier: 3.24.1
|
||||
version: 3.24.1
|
||||
@@ -463,7 +463,7 @@ importers:
|
||||
version: 19.0.7
|
||||
'@vitejs/plugin-react':
|
||||
specifier: 4.3.4
|
||||
version: 4.3.4(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
version: 4.3.4(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
ahooks:
|
||||
specifier: 3.8.4
|
||||
version: 3.8.4(react@19.0.0)
|
||||
@@ -489,11 +489,11 @@ importers:
|
||||
specifier: 17.6.0
|
||||
version: 17.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
vite:
|
||||
specifier: 6.0.7
|
||||
version: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
specifier: 6.0.9
|
||||
version: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
vite-tsconfig-paths:
|
||||
specifier: 5.1.4
|
||||
version: 5.1.4(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
version: 5.1.4(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
devDependencies:
|
||||
'@emotion/react':
|
||||
specifier: 11.14.0
|
||||
@@ -518,7 +518,7 @@ importers:
|
||||
version: 5.1.0(typescript@5.7.3)
|
||||
vite-plugin-dts:
|
||||
specifier: 4.5.0
|
||||
version: 4.5.0(@types/node@22.10.7)(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
version: 4.5.0(@types/node@22.10.7)(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
|
||||
|
||||
scripts:
|
||||
dependencies:
|
||||
@@ -6549,10 +6549,6 @@ packages:
|
||||
resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
|
||||
postcss@8.4.49:
|
||||
resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
|
||||
postcss@8.5.1:
|
||||
resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
@@ -7999,8 +7995,8 @@ packages:
|
||||
vite:
|
||||
optional: true
|
||||
|
||||
vite@6.0.7:
|
||||
resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==}
|
||||
vite@6.0.9:
|
||||
resolution: {integrity: sha512-MSgUxHcaXLtnBPktkbUSoQUANApKYuxZ6DrbVENlIorbhL2dZydTLaZ01tjUoE3szeFzlFk9ANOKk0xurh4MKA==}
|
||||
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -10545,7 +10541,7 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@tanstack/react-router': 1.97.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
|
||||
'@tanstack/router-plugin@1.97.3(@tanstack/react-router@1.97.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))':
|
||||
'@tanstack/router-plugin@1.97.3(@tanstack/react-router@1.97.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))':
|
||||
dependencies:
|
||||
'@babel/core': 7.26.0
|
||||
'@babel/generator': 7.26.3
|
||||
@@ -10569,7 +10565,7 @@ snapshots:
|
||||
unplugin: 1.16.0
|
||||
zod: 3.24.1
|
||||
optionalDependencies:
|
||||
vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
transitivePeerDependencies:
|
||||
- '@tanstack/react-router'
|
||||
- supports-color
|
||||
@@ -11062,7 +11058,7 @@ snapshots:
|
||||
|
||||
'@ungap/structured-clone@1.2.0': {}
|
||||
|
||||
'@vitejs/plugin-legacy@6.0.0(terser@5.36.0)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))':
|
||||
'@vitejs/plugin-legacy@6.0.0(terser@5.36.0)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))':
|
||||
dependencies:
|
||||
'@babel/core': 7.26.0
|
||||
'@babel/preset-env': 7.26.0(@babel/core@7.26.0)
|
||||
@@ -11073,25 +11069,25 @@ snapshots:
|
||||
regenerator-runtime: 0.14.1
|
||||
systemjs: 6.15.1
|
||||
terser: 5.36.0
|
||||
vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@vitejs/plugin-react-swc@3.7.2(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))':
|
||||
'@vitejs/plugin-react-swc@3.7.2(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))':
|
||||
dependencies:
|
||||
'@swc/core': 1.7.26
|
||||
vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
transitivePeerDependencies:
|
||||
- '@swc/helpers'
|
||||
|
||||
'@vitejs/plugin-react@4.3.4(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))':
|
||||
'@vitejs/plugin-react@4.3.4(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))':
|
||||
dependencies:
|
||||
'@babel/core': 7.26.0
|
||||
'@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0)
|
||||
'@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0)
|
||||
'@types/babel__core': 7.20.5
|
||||
react-refresh: 0.14.2
|
||||
vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -14880,12 +14876,6 @@ snapshots:
|
||||
picocolors: 1.1.1
|
||||
source-map-js: 1.2.1
|
||||
|
||||
postcss@8.4.49:
|
||||
dependencies:
|
||||
nanoid: 3.3.7
|
||||
picocolors: 1.1.1
|
||||
source-map-js: 1.2.1
|
||||
|
||||
postcss@8.5.1:
|
||||
dependencies:
|
||||
nanoid: 3.3.8
|
||||
@@ -16453,7 +16443,7 @@ snapshots:
|
||||
- rollup
|
||||
- supports-color
|
||||
|
||||
vite-plugin-dts@4.5.0(@types/node@22.10.7)(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)):
|
||||
vite-plugin-dts@4.5.0(@types/node@22.10.7)(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)):
|
||||
dependencies:
|
||||
'@microsoft/api-extractor': 7.49.1(@types/node@22.10.7)
|
||||
'@rollup/pluginutils': 5.1.4(rollup@4.27.4)
|
||||
@@ -16466,13 +16456,13 @@ snapshots:
|
||||
magic-string: 0.30.17
|
||||
typescript: 5.7.3
|
||||
optionalDependencies:
|
||||
vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
- rollup
|
||||
- supports-color
|
||||
|
||||
vite-plugin-html@3.2.2(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)):
|
||||
vite-plugin-html@3.2.2(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)):
|
||||
dependencies:
|
||||
'@rollup/pluginutils': 4.2.1
|
||||
colorette: 2.0.20
|
||||
@@ -16486,42 +16476,42 @@ snapshots:
|
||||
html-minifier-terser: 6.1.0
|
||||
node-html-parser: 5.4.2
|
||||
pathe: 0.2.0
|
||||
vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
|
||||
vite-plugin-sass-dts@1.3.30(postcss@8.5.1)(prettier@3.4.2)(sass-embedded@1.83.4)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)):
|
||||
vite-plugin-sass-dts@1.3.30(postcss@8.5.1)(prettier@3.4.2)(sass-embedded@1.83.4)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)):
|
||||
dependencies:
|
||||
postcss: 8.5.1
|
||||
postcss-js: 4.0.1(postcss@8.5.1)
|
||||
prettier: 3.4.2
|
||||
sass-embedded: 1.83.4
|
||||
vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
|
||||
vite-plugin-svgr@4.3.0(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)):
|
||||
vite-plugin-svgr@4.3.0(rollup@4.27.4)(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)):
|
||||
dependencies:
|
||||
'@rollup/pluginutils': 5.1.3(rollup@4.27.4)
|
||||
'@svgr/core': 8.1.0(typescript@5.7.3)
|
||||
'@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.7.3))
|
||||
vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
transitivePeerDependencies:
|
||||
- rollup
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)):
|
||||
vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)):
|
||||
dependencies:
|
||||
debug: 4.3.7
|
||||
globrex: 0.1.2
|
||||
tsconfck: 3.0.3(typescript@5.7.3)
|
||||
optionalDependencies:
|
||||
vite: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1):
|
||||
vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(less@4.2.0)(sass-embedded@1.83.4)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1):
|
||||
dependencies:
|
||||
esbuild: 0.24.2
|
||||
postcss: 8.4.49
|
||||
postcss: 8.5.1
|
||||
rollup: 4.27.4
|
||||
optionalDependencies:
|
||||
'@types/node': 22.10.7
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
Package/ath11k-firmware-qca2066 = $(call Package/firmware-default,QCA2066 ath11k firmware)
|
||||
define Package/ath11k-firmware-qca2066/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCA2066/hw2.1
|
||||
$(INSTALL_DATA) \
|
||||
$(PKG_BUILD_DIR)/ath11k/QCA2066/hw2.1/* $(1)/lib/firmware/ath11k/QCA2066/hw2.1/
|
||||
endef
|
||||
$(eval $(call BuildPackage,ath11k-firmware-qca2066))
|
||||
|
||||
Package/ath11k-firmware-qca6390 = $(call Package/firmware-default,QCA6390 ath11k firmware)
|
||||
define Package/ath11k-firmware-qca6390/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCA6390/hw2.0
|
||||
|
||||
@@ -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);
|
||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
||||
@@ -371,13 +371,20 @@ static void ath11k_pci_sw_reset(struct a
|
||||
@@ -373,13 +373,20 @@ static void ath11k_pci_sw_reset(struct a
|
||||
static void ath11k_pci_init_qmi_ce_config(struct ath11k_base *ab)
|
||||
{
|
||||
struct ath11k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg;
|
||||
|
||||
@@ -15,7 +15,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
||||
@@ -459,7 +459,11 @@ static int ath11k_pci_alloc_msi(struct a
|
||||
@@ -461,7 +461,11 @@ static int ath11k_pci_alloc_msi(struct a
|
||||
pci_read_config_dword(pci_dev, pci_dev->msi_cap + PCI_MSI_ADDRESS_LO,
|
||||
&ab->pci.msi.addr_lo);
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||
{
|
||||
.hw_rev = ATH11K_HW_IPQ8074,
|
||||
.name = "ipq8074 hw2.0",
|
||||
@@ -2040,7 +2040,8 @@ static void ath11k_core_reset(struct wor
|
||||
@@ -2134,7 +2134,8 @@ static void ath11k_core_reset(struct wor
|
||||
static int ath11k_init_hw_params(struct ath11k_base *ab)
|
||||
{
|
||||
const struct ath11k_hw_params *hw_params = NULL;
|
||||
@@ -41,7 +41,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) {
|
||||
hw_params = &ath11k_hw_params[i];
|
||||
@@ -2056,7 +2057,31 @@ static int ath11k_init_hw_params(struct
|
||||
@@ -2150,7 +2151,31 @@ static int ath11k_init_hw_params(struct
|
||||
|
||||
ab->hw_params = *hw_params;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||
@@ -168,8 +168,8 @@ static struct ath11k_hw_params ath11k_hw
|
||||
@@ -169,8 +169,8 @@ static struct ath11k_hw_params ath11k_hw
|
||||
.supports_shadow_regs = false,
|
||||
.idle_ps = false,
|
||||
.supports_sta_ps = false,
|
||||
|
||||
@@ -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
|
||||
+++ b/backport-include/net/genetlink.h
|
||||
@@ -150,7 +150,7 @@ int genlmsg_multicast(const struct genl_
|
||||
@@ -199,7 +199,7 @@ int genlmsg_multicast(const struct genl_
|
||||
#define genlmsg_multicast_allns LINUX_BACKPORT(genlmsg_multicast_allns)
|
||||
int backport_genlmsg_multicast_allns(const struct genl_family *family,
|
||||
struct sk_buff *skb, u32 portid,
|
||||
@@ -80,7 +80,7 @@ Signed-off-by: Sasha Levin <sashal@kernel.org>
|
||||
static inline struct nlattr **genl_family_attrbuf(struct genl_family *family)
|
||||
--- a/compat/backport-genetlink.c
|
||||
+++ b/compat/backport-genetlink.c
|
||||
@@ -198,23 +198,23 @@ int genlmsg_multicast(const struct genl_
|
||||
@@ -364,23 +364,23 @@ int genlmsg_multicast(const struct genl_
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(genlmsg_multicast);
|
||||
|
||||
@@ -108,7 +108,7 @@ Signed-off-by: Sasha Levin <sashal@kernel.org>
|
||||
if (!err)
|
||||
delivered = true;
|
||||
else if (err != -ESRCH)
|
||||
@@ -223,25 +223,29 @@ static int genlmsg_mcast(struct sk_buff
|
||||
@@ -389,25 +389,29 @@ static int genlmsg_mcast(struct sk_buff
|
||||
|
||||
prev = net;
|
||||
}
|
||||
@@ -143,7 +143,7 @@ Signed-off-by: Sasha Levin <sashal@kernel.org>
|
||||
EXPORT_SYMBOL_GPL(backport_genlmsg_multicast_allns);
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -17596,10 +17596,15 @@
|
||||
@@ -17567,10 +17567,15 @@ void nl80211_common_reg_change_event(enu
|
||||
|
||||
genlmsg_end(msg, hdr);
|
||||
|
||||
@@ -159,7 +159,7 @@ Signed-off-by: Sasha Levin <sashal@kernel.org>
|
||||
|
||||
return;
|
||||
|
||||
@@ -18217,10 +18222,15 @@
|
||||
@@ -18188,10 +18193,15 @@ void nl80211_send_beacon_hint_event(stru
|
||||
|
||||
genlmsg_end(msg, hdr);
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
u8 rx_flags;
|
||||
--- a/drivers/net/wireless/mac80211_hwsim.c
|
||||
+++ b/drivers/net/wireless/mac80211_hwsim.c
|
||||
@@ -5750,7 +5750,11 @@
|
||||
@@ -5749,7 +5749,11 @@ static int __init init_mac80211_hwsim(vo
|
||||
if (err)
|
||||
goto out_exit_netlink;
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
static inline u32 __get_unaligned_be24(const u8 *p)
|
||||
--- a/net/wireless/core.c
|
||||
+++ b/net/wireless/core.c
|
||||
@@ -164,11 +164,19 @@
|
||||
@@ -164,11 +164,19 @@ int cfg80211_switch_netns(struct cfg8021
|
||||
list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
|
||||
if (!wdev->netdev)
|
||||
continue;
|
||||
@@ -34,7 +34,7 @@
|
||||
}
|
||||
|
||||
if (err) {
|
||||
@@ -180,11 +188,19 @@
|
||||
@@ -180,11 +188,19 @@ int cfg80211_switch_netns(struct cfg8021
|
||||
list) {
|
||||
if (!wdev->netdev)
|
||||
continue;
|
||||
@@ -54,7 +54,7 @@
|
||||
}
|
||||
|
||||
return err;
|
||||
@@ -1413,7 +1429,11 @@
|
||||
@@ -1428,7 +1444,11 @@ static int cfg80211_netdev_notifier_call
|
||||
SET_NETDEV_DEVTYPE(dev, &wiphy_type);
|
||||
wdev->netdev = dev;
|
||||
/* can only change netns with wiphy */
|
||||
@@ -67,8 +67,8 @@
|
||||
cfg80211_init_wdev(wdev);
|
||||
break;
|
||||
--- a/net/mac80211/rc80211_minstrel_ht_debugfs.c
|
||||
+++ a/net/mac80211/rc80211_minstrel_ht_debugfs.c
|
||||
@@ -187,7 +187,9 @@
|
||||
+++ b/net/mac80211/rc80211_minstrel_ht_debugfs.c
|
||||
@@ -187,7 +187,9 @@ static const struct file_operations mins
|
||||
.open = minstrel_ht_stats_open,
|
||||
.read = minstrel_stats_read,
|
||||
.release = minstrel_stats_release,
|
||||
@@ -78,7 +78,7 @@
|
||||
};
|
||||
|
||||
static char *
|
||||
@@ -323,7 +325,9 @@
|
||||
@@ -323,7 +325,9 @@ static const struct file_operations mins
|
||||
.open = minstrel_ht_stats_csv_open,
|
||||
.read = minstrel_stats_read,
|
||||
.release = minstrel_stats_release,
|
||||
|
||||
@@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3984,7 +3984,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
@@ -3988,7 +3988,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
|
||||
if (deficit < 0)
|
||||
sta->airtime[txqi->txq.ac].deficit +=
|
||||
@@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (deficit < 0 || !aql_check) {
|
||||
list_move_tail(&txqi->schedule_order,
|
||||
@@ -4127,7 +4127,8 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
@@ -4131,7 +4131,8 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
}
|
||||
sta = container_of(iter->txq.sta, struct sta_info, sta);
|
||||
if (ieee80211_sta_deficit(sta, ac) < 0)
|
||||
@@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
list_move_tail(&iter->schedule_order, &local->active_txqs[ac]);
|
||||
}
|
||||
|
||||
@@ -4135,7 +4136,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
@@ -4139,7 +4140,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
if (sta->airtime[ac].deficit >= 0)
|
||||
goto out;
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
*
|
||||
* Drivers can optionally delegate responsibility for scheduling queues to
|
||||
* mac80211, to take advantage of airtime fairness accounting. In this case, to
|
||||
@@ -2248,8 +2249,8 @@ struct ieee80211_link_sta {
|
||||
@@ -2259,8 +2260,8 @@ struct ieee80211_link_sta {
|
||||
* For non MLO STA it will point to the deflink data. For MLO STA
|
||||
* ieee80211_sta_recalc_aggregates() must be called to update it.
|
||||
* @support_p2p_ps: indicates whether the STA supports P2P PS mechanism or not.
|
||||
@@ -62,7 +62,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
* @deflink: This holds the default link STA information, for non MLO STA all link
|
||||
* specific STA information is accessed through @deflink or through
|
||||
* link[0] which points to address of @deflink. For MLO Link STA
|
||||
@@ -5687,7 +5688,7 @@ void ieee80211_key_replay(struct ieee802
|
||||
@@ -5698,7 +5699,7 @@ void ieee80211_key_replay(struct ieee802
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @queue: queue number (counted from zero).
|
||||
*
|
||||
@@ -71,7 +71,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
*/
|
||||
void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue);
|
||||
|
||||
@@ -5696,7 +5697,7 @@ void ieee80211_wake_queue(struct ieee802
|
||||
@@ -5707,7 +5708,7 @@ void ieee80211_wake_queue(struct ieee802
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @queue: queue number (counted from zero).
|
||||
*
|
||||
@@ -80,7 +80,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
*/
|
||||
void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue);
|
||||
|
||||
@@ -5705,7 +5706,7 @@ void ieee80211_stop_queue(struct ieee802
|
||||
@@ -5716,7 +5717,7 @@ void ieee80211_stop_queue(struct ieee802
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @queue: queue number (counted from zero).
|
||||
*
|
||||
@@ -89,7 +89,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
*
|
||||
* Return: %true if the queue is stopped. %false otherwise.
|
||||
*/
|
||||
@@ -5716,7 +5717,7 @@ int ieee80211_queue_stopped(struct ieee8
|
||||
@@ -5727,7 +5728,7 @@ int ieee80211_queue_stopped(struct ieee8
|
||||
* ieee80211_stop_queues - stop all queues
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
*
|
||||
@@ -98,7 +98,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
*/
|
||||
void ieee80211_stop_queues(struct ieee80211_hw *hw);
|
||||
|
||||
@@ -5724,7 +5725,7 @@ void ieee80211_stop_queues(struct ieee80
|
||||
@@ -5735,7 +5736,7 @@ void ieee80211_stop_queues(struct ieee80
|
||||
* ieee80211_wake_queues - wake all queues
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
*
|
||||
@@ -107,7 +107,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
*/
|
||||
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.
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -1600,9 +1600,6 @@ int ieee80211_txq_setup_flows(struct iee
|
||||
@@ -1604,9 +1604,6 @@ int ieee80211_txq_setup_flows(struct iee
|
||||
bool supp_vht = false;
|
||||
enum nl80211_band band;
|
||||
|
||||
@@ -397,7 +397,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
ret = fq_init(fq, 4096);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -1650,9 +1647,6 @@ void ieee80211_txq_teardown_flows(struct
|
||||
@@ -1654,9 +1651,6 @@ void ieee80211_txq_teardown_flows(struct
|
||||
{
|
||||
struct fq *fq = &local->fq;
|
||||
|
||||
@@ -407,7 +407,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
kfree(local->cvars);
|
||||
local->cvars = NULL;
|
||||
|
||||
@@ -1669,8 +1663,7 @@ static bool ieee80211_queue_skb(struct i
|
||||
@@ -1673,8 +1667,7 @@ static bool ieee80211_queue_skb(struct i
|
||||
struct ieee80211_vif *vif;
|
||||
struct txq_info *txqi;
|
||||
|
||||
@@ -417,7 +417,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
return false;
|
||||
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||
@@ -4193,12 +4186,7 @@ void __ieee80211_subif_start_xmit(struct
|
||||
@@ -4197,12 +4190,7 @@ void __ieee80211_subif_start_xmit(struct
|
||||
if (IS_ERR(sta))
|
||||
sta = NULL;
|
||||
|
||||
@@ -431,7 +431,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
ieee80211_aggr_check(sdata, sta, skb);
|
||||
|
||||
sk_pacing_shift_update(skb->sk, sdata->local->hw.tx_sk_pacing_shift);
|
||||
@@ -4509,11 +4497,7 @@ static void ieee80211_8023_xmit(struct i
|
||||
@@ -4513,11 +4501,7 @@ static void ieee80211_8023_xmit(struct i
|
||||
struct tid_ampdu_tx *tid_tx;
|
||||
u8 tid;
|
||||
|
||||
@@ -444,7 +444,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) &&
|
||||
test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state))
|
||||
@@ -4767,9 +4751,6 @@ void ieee80211_tx_pending(struct tasklet
|
||||
@@ -4771,9 +4755,6 @@ void ieee80211_tx_pending(struct tasklet
|
||||
if (!txok)
|
||||
break;
|
||||
}
|
||||
@@ -454,7 +454,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
}
|
||||
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)) {
|
||||
|
||||
@@ -59,7 +59,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
flow = fq_find_fattest_flow(fq);
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -1807,6 +1807,10 @@ struct ieee80211_vif_cfg {
|
||||
@@ -1818,6 +1818,10 @@ struct ieee80211_vif_cfg {
|
||||
* @addr: address of this interface
|
||||
* @p2p: indicates whether this AP or STA interface is a p2p
|
||||
* interface, i.e. a GO or p2p-sta respectively
|
||||
@@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
* @driver_flags: flags/capabilities the driver has for this interface,
|
||||
* these need to be set (or cleared) when the interface is added
|
||||
* or, if supported by the driver, the interface type is changed
|
||||
@@ -1846,6 +1850,7 @@ struct ieee80211_vif {
|
||||
@@ -1857,6 +1861,7 @@ struct ieee80211_vif {
|
||||
|
||||
struct ieee80211_txq *txq;
|
||||
|
||||
@@ -90,7 +90,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -1356,7 +1356,11 @@ static struct txq_info *ieee80211_get_tx
|
||||
@@ -1360,7 +1360,11 @@ static struct txq_info *ieee80211_get_tx
|
||||
|
||||
static void ieee80211_set_skb_enqueue_time(struct sk_buff *skb)
|
||||
{
|
||||
@@ -103,7 +103,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
static u32 codel_skb_len_func(const struct sk_buff *skb)
|
||||
@@ -3579,55 +3583,79 @@ ieee80211_xmit_fast_finish(struct ieee80
|
||||
@@ -3583,55 +3587,79 @@ ieee80211_xmit_fast_finish(struct ieee80
|
||||
return TX_CONTINUE;
|
||||
}
|
||||
|
||||
@@ -219,7 +219,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/* will not be crypto-handled beyond what we do here, so use false
|
||||
* as the may-encrypt argument for the resize to not account for
|
||||
@@ -3636,10 +3664,8 @@ static bool ieee80211_xmit_fast(struct i
|
||||
@@ -3640,10 +3668,8 @@ static bool ieee80211_xmit_fast(struct i
|
||||
if (unlikely(ieee80211_skb_resize(sdata, skb,
|
||||
max_t(int, extra_head + hw_headroom -
|
||||
skb_headroom(skb), 0),
|
||||
@@ -232,7 +232,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
memcpy(ð, skb->data, ETH_HLEN - 2);
|
||||
hdr = skb_push(skb, extra_head);
|
||||
@@ -3653,7 +3679,7 @@ static bool ieee80211_xmit_fast(struct i
|
||||
@@ -3657,7 +3683,7 @@ static bool ieee80211_xmit_fast(struct i
|
||||
info->control.vif = &sdata->vif;
|
||||
info->flags = IEEE80211_TX_CTL_FIRST_FRAGMENT |
|
||||
IEEE80211_TX_CTL_DONTFRAG |
|
||||
@@ -241,7 +241,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
info->control.flags = IEEE80211_TX_CTRL_FAST_XMIT |
|
||||
u32_encode_bits(IEEE80211_LINK_UNSPECIFIED,
|
||||
IEEE80211_TX_CTRL_MLO_LINK);
|
||||
@@ -3677,16 +3703,14 @@ static bool ieee80211_xmit_fast(struct i
|
||||
@@ -3681,16 +3707,14 @@ static bool ieee80211_xmit_fast(struct i
|
||||
tx.key = fast_tx->key;
|
||||
|
||||
if (ieee80211_queue_skb(local, sdata, sta, skb))
|
||||
@@ -261,7 +261,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||
sdata = container_of(sdata->bss,
|
||||
@@ -3694,6 +3718,56 @@ static bool ieee80211_xmit_fast(struct i
|
||||
@@ -3698,6 +3722,56 @@ static bool ieee80211_xmit_fast(struct i
|
||||
|
||||
__skb_queue_tail(&tx.skbs, skb);
|
||||
ieee80211_tx_frags(local, &sdata->vif, sta, &tx.skbs, false);
|
||||
@@ -318,7 +318,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -4201,31 +4275,14 @@ void __ieee80211_subif_start_xmit(struct
|
||||
@@ -4205,31 +4279,14 @@ void __ieee80211_subif_start_xmit(struct
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -358,7 +358,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
skb_list_walk_safe(skb, skb, next) {
|
||||
@@ -4443,9 +4500,11 @@ normal:
|
||||
@@ -4447,9 +4504,11 @@ normal:
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
||||
@@ -373,7 +373,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct ieee80211_tx_control control = {};
|
||||
@@ -4454,14 +4513,6 @@ static bool ieee80211_tx_8023(struct iee
|
||||
@@ -4458,14 +4517,6 @@ static bool ieee80211_tx_8023(struct iee
|
||||
unsigned long flags;
|
||||
int q = info->hw_queue;
|
||||
|
||||
@@ -388,7 +388,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
|
||||
|
||||
if (local->queue_stop_reasons[q] ||
|
||||
@@ -4488,6 +4539,26 @@ static bool ieee80211_tx_8023(struct iee
|
||||
@@ -4492,6 +4543,26 @@ static bool ieee80211_tx_8023(struct iee
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -415,7 +415,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata,
|
||||
struct net_device *dev, struct sta_info *sta,
|
||||
struct ieee80211_key *key, struct sk_buff *skb)
|
||||
@@ -4495,9 +4566,13 @@ static void ieee80211_8023_xmit(struct i
|
||||
@@ -4499,9 +4570,13 @@ static void ieee80211_8023_xmit(struct i
|
||||
struct ieee80211_tx_info *info;
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct tid_ampdu_tx *tid_tx;
|
||||
@@ -430,7 +430,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) &&
|
||||
test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state))
|
||||
@@ -4507,9 +4582,6 @@ static void ieee80211_8023_xmit(struct i
|
||||
@@ -4511,9 +4586,6 @@ static void ieee80211_8023_xmit(struct i
|
||||
if (unlikely(!skb))
|
||||
return;
|
||||
|
||||
@@ -440,7 +440,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
ieee80211_aggr_check(sdata, sta, skb);
|
||||
|
||||
tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
|
||||
@@ -4523,22 +4595,20 @@ static void ieee80211_8023_xmit(struct i
|
||||
@@ -4527,22 +4599,20 @@ static void ieee80211_8023_xmit(struct i
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -471,7 +471,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||
sdata = container_of(sdata->bss,
|
||||
@@ -4550,6 +4620,24 @@ static void ieee80211_8023_xmit(struct i
|
||||
@@ -4554,6 +4624,24 @@ static void ieee80211_8023_xmit(struct i
|
||||
if (key)
|
||||
info->control.hw_key = &key->conf;
|
||||
|
||||
@@ -496,7 +496,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
ieee80211_tx_8023(sdata, skb, sta, false);
|
||||
|
||||
return;
|
||||
@@ -4591,6 +4679,7 @@ netdev_tx_t ieee80211_subif_start_xmit_8
|
||||
@@ -4595,6 +4683,7 @@ netdev_tx_t ieee80211_subif_start_xmit_8
|
||||
key->conf.cipher == WLAN_CIPHER_SUITE_TKIP))
|
||||
goto skip_offload;
|
||||
|
||||
|
||||
@@ -728,7 +728,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3022,6 +3022,9 @@ void ieee80211_check_fast_xmit(struct st
|
||||
@@ -3026,6 +3026,9 @@ void ieee80211_check_fast_xmit(struct st
|
||||
if (!ieee80211_hw_check(&local->hw, SUPPORT_FAST_XMIT))
|
||||
return;
|
||||
|
||||
@@ -738,7 +738,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/* Locking here protects both the pointer itself, and against concurrent
|
||||
* invocations winning data access races to, e.g., the key pointer that
|
||||
* is used.
|
||||
@@ -3403,6 +3406,9 @@ static bool ieee80211_amsdu_aggregate(st
|
||||
@@ -3407,6 +3410,9 @@ static bool ieee80211_amsdu_aggregate(st
|
||||
if (sdata->vif.offload_flags & IEEE80211_OFFLOAD_ENCAP_ENABLED)
|
||||
return false;
|
||||
|
||||
@@ -748,7 +748,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (skb_is_gso(skb))
|
||||
return false;
|
||||
|
||||
@@ -3635,10 +3641,11 @@ free:
|
||||
@@ -3639,10 +3645,11 @@ free:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -764,7 +764,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct ieee80211_hdr *hdr = (void *)fast_tx->hdr;
|
||||
@@ -3647,7 +3654,6 @@ static void __ieee80211_xmit_fast(struct
|
||||
@@ -3651,7 +3658,6 @@ static void __ieee80211_xmit_fast(struct
|
||||
ieee80211_tx_result r;
|
||||
int hw_headroom = sdata->local->hw.extra_tx_headroom;
|
||||
int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2);
|
||||
@@ -772,7 +772,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
skb = skb_share_check(skb, GFP_ATOMIC);
|
||||
if (unlikely(!skb))
|
||||
@@ -3667,11 +3673,10 @@ static void __ieee80211_xmit_fast(struct
|
||||
@@ -3671,11 +3677,10 @@ static void __ieee80211_xmit_fast(struct
|
||||
ENCRYPT_NO)))
|
||||
goto free;
|
||||
|
||||
@@ -786,7 +786,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
info = IEEE80211_SKB_CB(skb);
|
||||
memset(info, 0, sizeof(*info));
|
||||
@@ -3690,7 +3695,8 @@ static void __ieee80211_xmit_fast(struct
|
||||
@@ -3694,7 +3699,8 @@ static void __ieee80211_xmit_fast(struct
|
||||
#endif
|
||||
|
||||
if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) {
|
||||
@@ -796,7 +796,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
*ieee80211_get_qos_ctl(hdr) = tid;
|
||||
}
|
||||
|
||||
@@ -3733,6 +3739,7 @@ static bool ieee80211_xmit_fast(struct i
|
||||
@@ -3737,6 +3743,7 @@ static bool ieee80211_xmit_fast(struct i
|
||||
struct ieee80211_hdr *hdr = (void *)fast_tx->hdr;
|
||||
struct tid_ampdu_tx *tid_tx = NULL;
|
||||
struct sk_buff *next;
|
||||
@@ -804,7 +804,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
u8 tid = IEEE80211_NUM_TIDS;
|
||||
|
||||
/* control port protocol needs a lot of special handling */
|
||||
@@ -3758,6 +3765,8 @@ static bool ieee80211_xmit_fast(struct i
|
||||
@@ -3762,6 +3769,8 @@ static bool ieee80211_xmit_fast(struct i
|
||||
}
|
||||
}
|
||||
|
||||
@@ -813,7 +813,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/* after this point (skb is modified) we cannot return false */
|
||||
skb = ieee80211_tx_skb_fixup(skb, ieee80211_sdata_netdev_features(sdata));
|
||||
if (!skb)
|
||||
@@ -3765,7 +3774,8 @@ static bool ieee80211_xmit_fast(struct i
|
||||
@@ -3769,7 +3778,8 @@ static bool ieee80211_xmit_fast(struct i
|
||||
|
||||
skb_list_walk_safe(skb, skb, next) {
|
||||
skb_mark_not_on_list(skb);
|
||||
@@ -823,7 +823,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -4252,8 +4262,15 @@ void __ieee80211_subif_start_xmit(struct
|
||||
@@ -4256,8 +4266,15 @@ void __ieee80211_subif_start_xmit(struct
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -839,7 +839,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (ieee80211_lookup_ra_sta(sdata, skb, &sta))
|
||||
goto out_free;
|
||||
|
||||
@@ -4263,8 +4280,6 @@ void __ieee80211_subif_start_xmit(struct
|
||||
@@ -4267,8 +4284,6 @@ void __ieee80211_subif_start_xmit(struct
|
||||
skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, sta, skb));
|
||||
ieee80211_aggr_check(sdata, sta, skb);
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata,
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -1191,10 +1191,8 @@ static bool ieee80211_tx_prep_agg(struct
|
||||
@@ -1195,10 +1195,8 @@ static bool ieee80211_tx_prep_agg(struct
|
||||
return queued;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -5964,6 +5964,18 @@ void ieee80211_queue_delayed_work(struct
|
||||
@@ -5975,6 +5975,18 @@ void ieee80211_queue_delayed_work(struct
|
||||
unsigned long delay);
|
||||
|
||||
/**
|
||||
|
||||
@@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -4192,6 +4192,10 @@ struct ieee80211_prep_tx_info {
|
||||
@@ -4203,6 +4203,10 @@ struct ieee80211_prep_tx_info {
|
||||
* Note that a sta can also be inserted or removed with valid links,
|
||||
* i.e. passed to @sta_add/@sta_state with sta->valid_links not zero.
|
||||
* In fact, cannot change from having valid_links and not having them.
|
||||
@@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
*/
|
||||
struct ieee80211_ops {
|
||||
void (*tx)(struct ieee80211_hw *hw,
|
||||
@@ -4547,6 +4551,11 @@ struct ieee80211_ops {
|
||||
@@ -4558,6 +4562,11 @@ struct ieee80211_ops {
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta,
|
||||
u16 old_links, u16 new_links);
|
||||
|
||||
@@ -15,7 +15,7 @@ Reviewed-by: Peer, Ilan <ilan.peer@intel.com>
|
||||
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
|
||||
@@ -601,8 +601,9 @@ static void iwl_mvm_skb_prepare_status(s
|
||||
@@ -605,8 +605,9 @@ static void iwl_mvm_skb_prepare_status(s
|
||||
|
||||
static int iwl_mvm_get_ctrl_vif_queue(struct iwl_mvm *mvm,
|
||||
struct ieee80211_tx_info *info,
|
||||
@@ -26,7 +26,7 @@ Reviewed-by: Peer, Ilan <ilan.peer@intel.com>
|
||||
struct iwl_mvm_vif *mvmvif =
|
||||
iwl_mvm_vif_from_mac80211(info->control.vif);
|
||||
__le16 fc = hdr->frame_control;
|
||||
@@ -621,7 +622,7 @@ static int iwl_mvm_get_ctrl_vif_queue(st
|
||||
@@ -625,7 +626,7 @@ static int iwl_mvm_get_ctrl_vif_queue(st
|
||||
* reason 7 ("Class 3 frame received from nonassociated STA").
|
||||
*/
|
||||
if (ieee80211_is_mgmt(fc) &&
|
||||
@@ -35,7 +35,7 @@ Reviewed-by: Peer, Ilan <ilan.peer@intel.com>
|
||||
ieee80211_is_deauth(fc) || ieee80211_is_disassoc(fc)))
|
||||
return mvm->probe_queue;
|
||||
|
||||
@@ -740,7 +741,7 @@ int iwl_mvm_tx_skb_non_sta(struct iwl_mv
|
||||
@@ -744,7 +745,7 @@ int iwl_mvm_tx_skb_non_sta(struct iwl_mv
|
||||
else
|
||||
sta_id = mvmvif->mcast_sta.sta_id;
|
||||
|
||||
@@ -114,7 +114,7 @@ Reviewed-by: Peer, Ilan <ilan.peer@intel.com>
|
||||
*/
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -488,7 +488,7 @@ ieee80211_tx_h_unicast_ps_buf(struct iee
|
||||
@@ -492,7 +492,7 @@ ieee80211_tx_h_unicast_ps_buf(struct iee
|
||||
int ac = skb_get_queue_mapping(tx->skb);
|
||||
|
||||
if (ieee80211_is_mgmt(hdr->frame_control) &&
|
||||
@@ -123,7 +123,7 @@ Reviewed-by: Peer, Ilan <ilan.peer@intel.com>
|
||||
info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER;
|
||||
return TX_CONTINUE;
|
||||
}
|
||||
@@ -1326,7 +1326,7 @@ static struct txq_info *ieee80211_get_tx
|
||||
@@ -1330,7 +1330,7 @@ static struct txq_info *ieee80211_get_tx
|
||||
if (!(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) &&
|
||||
unlikely(!ieee80211_is_data_present(hdr->frame_control))) {
|
||||
if ((!ieee80211_is_mgmt(hdr->frame_control) ||
|
||||
|
||||
@@ -12,7 +12,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -3918,6 +3918,10 @@ struct ieee80211_prep_tx_info {
|
||||
@@ -3929,6 +3929,10 @@ struct ieee80211_prep_tx_info {
|
||||
* Note that vif can be NULL.
|
||||
* The callback can sleep.
|
||||
*
|
||||
@@ -23,7 +23,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
||||
* @channel_switch: Drivers that need (or want) to offload the channel
|
||||
* switch operation for CSAs received from the AP may implement this
|
||||
* callback. They must then call ieee80211_chswitch_done() to indicate
|
||||
@@ -4372,6 +4376,8 @@ struct ieee80211_ops {
|
||||
@@ -4383,6 +4387,8 @@ struct ieee80211_ops {
|
||||
#endif
|
||||
void (*flush)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
u32 queues, bool drop);
|
||||
|
||||
@@ -38,7 +38,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -5252,6 +5252,74 @@ ieee80211_beacon_get_template(struct iee
|
||||
@@ -5263,6 +5263,74 @@ ieee80211_beacon_get_template(struct iee
|
||||
unsigned int link_id);
|
||||
|
||||
/**
|
||||
@@ -168,7 +168,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -5205,13 +5205,20 @@ ieee80211_beacon_get_finish(struct ieee8
|
||||
@@ -5209,13 +5209,20 @@ ieee80211_beacon_get_finish(struct ieee8
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -192,7 +192,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
for (i = 0; i < beacon->mbssid_ies->cnt; i++)
|
||||
skb_put_data(skb, beacon->mbssid_ies->elem[i].data,
|
||||
beacon->mbssid_ies->elem[i].len);
|
||||
@@ -5224,7 +5231,8 @@ ieee80211_beacon_get_ap(struct ieee80211
|
||||
@@ -5228,7 +5235,8 @@ ieee80211_beacon_get_ap(struct ieee80211
|
||||
struct ieee80211_mutable_offsets *offs,
|
||||
bool is_template,
|
||||
struct beacon_data *beacon,
|
||||
@@ -202,7 +202,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
|
||||
@@ -5243,7 +5251,9 @@ ieee80211_beacon_get_ap(struct ieee80211
|
||||
@@ -5247,7 +5255,9 @@ ieee80211_beacon_get_ap(struct ieee80211
|
||||
/* headroom, head length,
|
||||
* tail length, maximum TIM length and multiple BSSID length
|
||||
*/
|
||||
@@ -213,7 +213,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
skb = dev_alloc_skb(local->tx_headroom + beacon->head_len +
|
||||
beacon->tail_len + 256 +
|
||||
local->hw.extra_beacon_tailroom + mbssid_len);
|
||||
@@ -5261,7 +5271,7 @@ ieee80211_beacon_get_ap(struct ieee80211
|
||||
@@ -5265,7 +5275,7 @@ ieee80211_beacon_get_ap(struct ieee80211
|
||||
offs->cntdwn_counter_offs[0] = beacon->cntdwn_counter_offsets[0];
|
||||
|
||||
if (mbssid_len) {
|
||||
@@ -222,7 +222,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
offs->mbssid_off = skb->len - mbssid_len;
|
||||
}
|
||||
|
||||
@@ -5280,12 +5290,51 @@ ieee80211_beacon_get_ap(struct ieee80211
|
||||
@@ -5284,12 +5294,51 @@ ieee80211_beacon_get_ap(struct ieee80211
|
||||
return skb;
|
||||
}
|
||||
|
||||
@@ -275,7 +275,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
struct beacon_data *beacon = NULL;
|
||||
@@ -5314,8 +5363,29 @@ __ieee80211_beacon_get(struct ieee80211_
|
||||
@@ -5318,8 +5367,29 @@ __ieee80211_beacon_get(struct ieee80211_
|
||||
if (!beacon)
|
||||
goto out;
|
||||
|
||||
@@ -307,7 +307,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
} else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
|
||||
struct ieee80211_hdr *hdr;
|
||||
@@ -5403,10 +5473,50 @@ ieee80211_beacon_get_template(struct iee
|
||||
@@ -5407,10 +5477,50 @@ ieee80211_beacon_get_template(struct iee
|
||||
struct ieee80211_mutable_offsets *offs,
|
||||
unsigned int link_id)
|
||||
{
|
||||
@@ -359,7 +359,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
u16 *tim_offset, u16 *tim_length,
|
||||
@@ -5414,7 +5524,9 @@ struct sk_buff *ieee80211_beacon_get_tim
|
||||
@@ -5418,7 +5528,9 @@ struct sk_buff *ieee80211_beacon_get_tim
|
||||
{
|
||||
struct ieee80211_mutable_offsets offs = {};
|
||||
struct sk_buff *bcn = __ieee80211_beacon_get(hw, vif, &offs, false,
|
||||
|
||||
@@ -16,7 +16,7 @@ and we should ignore this.
|
||||
|
||||
--- a/net/wireless/core.c
|
||||
+++ b/net/wireless/core.c
|
||||
@@ -614,21 +614,6 @@ static int wiphy_verify_combinations(str
|
||||
@@ -630,21 +630,6 @@ static int wiphy_verify_combinations(str
|
||||
c->limits[j].max > 1))
|
||||
return -EINVAL;
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -1677,6 +1677,7 @@ enum ieee80211_smps_mode {
|
||||
@@ -1688,6 +1688,7 @@ enum ieee80211_smps_mode {
|
||||
*
|
||||
* @power_level: requested transmit power (in dBm), backward compatibility
|
||||
* value only that is set to the minimum of all interfaces
|
||||
@@ -26,7 +26,7 @@
|
||||
*
|
||||
* @chandef: the channel definition to tune to
|
||||
* @radar_enabled: whether radar detection is enabled
|
||||
@@ -1697,6 +1698,7 @@ enum ieee80211_smps_mode {
|
||||
@@ -1708,6 +1709,7 @@ enum ieee80211_smps_mode {
|
||||
struct ieee80211_conf {
|
||||
u32 flags;
|
||||
int power_level, dynamic_ps_timeout;
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -2422,6 +2422,13 @@ static void sta_stats_decode_rate(struct
|
||||
@@ -2363,6 +2363,13 @@ static void sta_stats_decode_rate(struct
|
||||
|
||||
sband = local->hw.wiphy->bands[band];
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -673,6 +673,12 @@
|
||||
@@ -673,6 +673,12 @@ struct ieee80211_fils_discovery {
|
||||
* @he_full_ul_mumimo: does this BSS support the reception (AP) or transmission
|
||||
* (non-AP STA) of an HE TB PPDU on an RU that spans the entire PPDU
|
||||
* bandwidth
|
||||
@@ -13,7 +13,7 @@
|
||||
*/
|
||||
struct ieee80211_bss_conf {
|
||||
const u8 *bssid;
|
||||
@@ -758,6 +764,9 @@
|
||||
@@ -758,6 +764,9 @@ struct ieee80211_bss_conf {
|
||||
bool he_su_beamformee;
|
||||
bool he_mu_beamformer;
|
||||
bool he_full_ul_mumimo;
|
||||
@@ -25,7 +25,7 @@
|
||||
/**
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -1307,6 +1307,27 @@
|
||||
@@ -1307,6 +1307,27 @@ static int ieee80211_start_ap(struct wip
|
||||
IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO;
|
||||
}
|
||||
|
||||
|
||||
@@ -153,11 +153,11 @@ func (b *Base) DialOptions(opts ...dialer.Option) []dialer.Option {
|
||||
}
|
||||
|
||||
type BasicOption struct {
|
||||
TFO bool `proxy:"tfo,omitempty" group:"tfo,omitempty"`
|
||||
MPTCP bool `proxy:"mptcp,omitempty" group:"mptcp,omitempty"`
|
||||
TFO bool `proxy:"tfo,omitempty"`
|
||||
MPTCP bool `proxy:"mptcp,omitempty"`
|
||||
Interface string `proxy:"interface-name,omitempty" group:"interface-name,omitempty"`
|
||||
RoutingMark int `proxy:"routing-mark,omitempty" group:"routing-mark,omitempty"`
|
||||
IPVersion string `proxy:"ip-version,omitempty" group:"ip-version,omitempty"`
|
||||
IPVersion string `proxy:"ip-version,omitempty"`
|
||||
DialerProxy string `proxy:"dialer-proxy,omitempty"` // don't apply this option into groups, but can set a group name in a proxy
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,13 @@ type GroupBaseOption struct {
|
||||
}
|
||||
|
||||
func NewGroupBase(opt GroupBaseOption) *GroupBase {
|
||||
if opt.RoutingMark != 0 {
|
||||
log.Warnln("The group [%s] with routing-mark configuration is deprecated, please set it directly on the proxy instead", opt.Name)
|
||||
}
|
||||
if opt.Interface != "" {
|
||||
log.Warnln("The group [%s] with interface-name configuration is deprecated, please set it directly on the proxy instead", opt.Name)
|
||||
}
|
||||
|
||||
var excludeFilterReg *regexp2.Regexp
|
||||
if opt.excludeFilter != "" {
|
||||
excludeFilterReg = regexp2.MustCompile(opt.excludeFilter, regexp2.None)
|
||||
|
||||
@@ -17,7 +17,6 @@ import (
|
||||
C "github.com/metacubex/mihomo/constant"
|
||||
)
|
||||
|
||||
var trustCerts []*x509.Certificate
|
||||
var globalCertPool *x509.CertPool
|
||||
var mutex sync.RWMutex
|
||||
var errNotMatch = errors.New("certificate fingerprints do not match")
|
||||
@@ -30,11 +29,19 @@ var DisableSystemCa, _ = strconv.ParseBool(os.Getenv("DISABLE_SYSTEM_CA"))
|
||||
func AddCertificate(certificate string) error {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
if certificate == "" {
|
||||
return fmt.Errorf("certificate is empty")
|
||||
}
|
||||
if cert, err := x509.ParseCertificate([]byte(certificate)); err == nil {
|
||||
trustCerts = append(trustCerts, cert)
|
||||
|
||||
if globalCertPool == nil {
|
||||
initializeCertPool()
|
||||
}
|
||||
|
||||
if globalCertPool.AppendCertsFromPEM([]byte(certificate)) {
|
||||
return nil
|
||||
} else if cert, err := x509.ParseCertificate([]byte(certificate)); err == nil {
|
||||
globalCertPool.AddCert(cert)
|
||||
return nil
|
||||
} else {
|
||||
return fmt.Errorf("add certificate failed")
|
||||
@@ -51,9 +58,6 @@ func initializeCertPool() {
|
||||
globalCertPool = x509.NewCertPool()
|
||||
}
|
||||
}
|
||||
for _, cert := range trustCerts {
|
||||
globalCertPool.AddCert(cert)
|
||||
}
|
||||
if !DisableEmbedCa {
|
||||
globalCertPool.AppendCertsFromPEM(_CaCertificates)
|
||||
}
|
||||
@@ -62,7 +66,6 @@ func initializeCertPool() {
|
||||
func ResetCertificate() {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
trustCerts = nil
|
||||
initializeCertPool()
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,12 @@ AC_DEFUN([ss_MBEDTLS],
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[
|
||||
#include <mbedtls/version.h>
|
||||
#if MBEDTLS_VERSION_NUMBER >= 0x03000000
|
||||
#include <mbedtls/mbedtls_config.h>
|
||||
#else
|
||||
#include <mbedtls/config.h>
|
||||
#endif
|
||||
]],
|
||||
[[
|
||||
#ifndef MBEDTLS_CIPHER_MODE_CFB
|
||||
@@ -48,7 +53,12 @@ AC_DEFUN([ss_MBEDTLS],
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[
|
||||
#include <mbedtls/version.h>
|
||||
#if MBEDTLS_VERSION_NUMBER >= 0x03000000
|
||||
#include <mbedtls/mbedtls_config.h>
|
||||
#else
|
||||
#include <mbedtls/config.h>
|
||||
#endif
|
||||
]],
|
||||
[[
|
||||
#ifndef MBEDTLS_ARC4_C
|
||||
@@ -64,7 +74,12 @@ AC_DEFUN([ss_MBEDTLS],
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[
|
||||
#include <mbedtls/version.h>
|
||||
#if MBEDTLS_VERSION_NUMBER >= 0x03000000
|
||||
#include <mbedtls/mbedtls_config.h>
|
||||
#else
|
||||
#include <mbedtls/config.h>
|
||||
#endif
|
||||
]],
|
||||
[[
|
||||
#ifndef MBEDTLS_BLOWFISH_C
|
||||
@@ -80,7 +95,12 @@ AC_DEFUN([ss_MBEDTLS],
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[
|
||||
#include <mbedtls/version.h>
|
||||
#if MBEDTLS_VERSION_NUMBER >= 0x03000000
|
||||
#include <mbedtls/mbedtls_config.h>
|
||||
#else
|
||||
#include <mbedtls/config.h>
|
||||
#endif
|
||||
]],
|
||||
[[
|
||||
#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.
|
||||
case AES192GCM:
|
||||
case AES128GCM:
|
||||
|
||||
#if MBEDTLS_VERSION_NUMBER < 0x03000000
|
||||
err = mbedtls_cipher_auth_encrypt(cipher_ctx->evp, n, nlen, ad, adlen,
|
||||
m, mlen, c, clen, c + mlen, tlen);
|
||||
#else
|
||||
err = mbedtls_cipher_auth_encrypt_ext(cipher_ctx->evp, n, nlen, ad, adlen,
|
||||
m, mlen, c, mlen + tlen, clen, tlen);
|
||||
#endif
|
||||
*clen += tlen;
|
||||
break;
|
||||
case CHACHA20POLY1305IETF:
|
||||
@@ -226,8 +230,13 @@ aead_cipher_decrypt(cipher_ctx_t *cipher_ctx,
|
||||
// Otherwise, just use the mbedTLS one with crappy AES-NI.
|
||||
case AES192GCM:
|
||||
case AES128GCM:
|
||||
#if MBEDTLS_VERSION_NUMBER < 0x03000000
|
||||
err = mbedtls_cipher_auth_decrypt(cipher_ctx->evp, n, nlen, ad, adlen,
|
||||
m, mlen - tlen, p, plen, m + mlen - tlen, tlen);
|
||||
#else
|
||||
err = mbedtls_cipher_auth_decrypt_ext(cipher_ctx->evp, n, nlen, ad, adlen,
|
||||
m, mlen, p, mlen - tlen, plen, tlen);
|
||||
#endif
|
||||
break;
|
||||
case CHACHA20POLY1305IETF:
|
||||
err = crypto_aead_chacha20poly1305_ietf_decrypt(p, &long_plen, NULL, m, mlen,
|
||||
@@ -721,17 +730,7 @@ aead_key_init(int method, const char *pass, const char *key)
|
||||
cipher_t *cipher = (cipher_t *)ss_malloc(sizeof(cipher_t));
|
||||
memset(cipher, 0, sizeof(cipher_t));
|
||||
|
||||
if (method >= CHACHA20POLY1305IETF) {
|
||||
cipher_kt_t *cipher_info = (cipher_kt_t *)ss_malloc(sizeof(cipher_kt_t));
|
||||
cipher->info = cipher_info;
|
||||
cipher->info->base = NULL;
|
||||
cipher->info->key_bitlen = supported_aead_ciphers_key_size[method] * 8;
|
||||
cipher->info->iv_size = supported_aead_ciphers_nonce_size[method];
|
||||
} else {
|
||||
cipher->info = (cipher_kt_t *)aead_get_cipher_type(method);
|
||||
}
|
||||
|
||||
if (cipher->info == NULL && cipher->key_len == 0) {
|
||||
if (method < CHACHA20POLY1305IETF && aead_get_cipher_type(method) == NULL) {
|
||||
LOGE("Cipher %s not found in crypto library", supported_aead_ciphers[method]);
|
||||
FATAL("Cannot initialize cipher");
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ crypto_md5(const unsigned char *d, size_t n, unsigned char *md)
|
||||
if (md == NULL) {
|
||||
md = m;
|
||||
}
|
||||
#if MBEDTLS_VERSION_NUMBER >= 0x02070000
|
||||
#if MBEDTLS_VERSION_NUMBER < 0x03000000 && MBEDTLS_VERSION_NUMBER >= 0x02070000
|
||||
if (mbedtls_md5_ret(d, n, md) != 0)
|
||||
FATAL("Failed to calculate MD5");
|
||||
#else
|
||||
|
||||
@@ -97,7 +97,6 @@ typedef struct buffer {
|
||||
typedef struct {
|
||||
int method;
|
||||
int skey;
|
||||
cipher_kt_t *info;
|
||||
size_t nonce_len;
|
||||
size_t key_len;
|
||||
size_t tag_len;
|
||||
|
||||
@@ -168,33 +168,6 @@ crypto_stream_xor_ic(uint8_t *c, const uint8_t *m, uint64_t mlen,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
cipher_nonce_size(const cipher_t *cipher)
|
||||
{
|
||||
if (cipher == NULL) {
|
||||
return 0;
|
||||
}
|
||||
return cipher->info->iv_size;
|
||||
}
|
||||
|
||||
int
|
||||
cipher_key_size(const cipher_t *cipher)
|
||||
{
|
||||
/*
|
||||
* Semi-API changes (technically public, morally prnonceate)
|
||||
* Renamed a few headers to include _internal in the name. Those headers are
|
||||
* not supposed to be included by users.
|
||||
* Changed md_info_t into an opaque structure (use md_get_xxx() accessors).
|
||||
* Changed pk_info_t into an opaque structure.
|
||||
* Changed cipher_base_t into an opaque structure.
|
||||
*/
|
||||
if (cipher == NULL) {
|
||||
return 0;
|
||||
}
|
||||
/* From Version 1.2.7 released 2013-04-13 Default Blowfish keysize is now 128-bits */
|
||||
return cipher->info->key_bitlen / 8;
|
||||
}
|
||||
|
||||
const cipher_kt_t *
|
||||
stream_get_cipher_type(int method)
|
||||
{
|
||||
@@ -642,34 +615,22 @@ stream_key_init(int method, const char *pass, const char *key)
|
||||
cipher_t *cipher = (cipher_t *)ss_malloc(sizeof(cipher_t));
|
||||
memset(cipher, 0, sizeof(cipher_t));
|
||||
|
||||
if (method == SALSA20 || method == CHACHA20 || method == CHACHA20IETF) {
|
||||
cipher_kt_t *cipher_info = (cipher_kt_t *)ss_malloc(sizeof(cipher_kt_t));
|
||||
cipher->info = cipher_info;
|
||||
cipher->info->base = NULL;
|
||||
cipher->info->key_bitlen = supported_stream_ciphers_key_size[method] * 8;
|
||||
cipher->info->iv_size = supported_stream_ciphers_nonce_size[method];
|
||||
} else {
|
||||
cipher->info = (cipher_kt_t *)stream_get_cipher_type(method);
|
||||
}
|
||||
|
||||
if (cipher->info == NULL && cipher->key_len == 0) {
|
||||
if (method < SALSA20 && stream_get_cipher_type(method) == NULL) {
|
||||
LOGE("Cipher %s not found in crypto library", supported_stream_ciphers[method]);
|
||||
FATAL("Cannot initialize cipher");
|
||||
}
|
||||
|
||||
if (key != NULL)
|
||||
cipher->key_len = crypto_parse_key(key, cipher->key, cipher_key_size(cipher));
|
||||
cipher->key_len = crypto_parse_key(key, cipher->key,
|
||||
supported_stream_ciphers_key_size[method]);
|
||||
else
|
||||
cipher->key_len = crypto_derive_key(pass, cipher->key, cipher_key_size(cipher));
|
||||
cipher->key_len = crypto_derive_key(pass, cipher->key,
|
||||
supported_stream_ciphers_key_size[method]);
|
||||
|
||||
if (cipher->key_len == 0) {
|
||||
FATAL("Cannot generate key and NONCE");
|
||||
}
|
||||
if (method == RC4_MD5) {
|
||||
cipher->nonce_len = 16;
|
||||
} else {
|
||||
cipher->nonce_len = cipher_nonce_size(cipher);
|
||||
}
|
||||
cipher->nonce_len = supported_stream_ciphers_nonce_size[method];
|
||||
cipher->method = method;
|
||||
|
||||
return cipher;
|
||||
|
||||
@@ -168,6 +168,7 @@ return view.extend({
|
||||
const res_ver_geoip = data[7];
|
||||
const res_ver_geosite = data[8];
|
||||
|
||||
const less_24_10 = !form.RichListValue;
|
||||
const dashboard_repo = uci.get(data[0], 'api', 'dashboard_repo');
|
||||
|
||||
let m, s, o, ss, so;
|
||||
@@ -472,7 +473,7 @@ return view.extend({
|
||||
}
|
||||
so.default = 'system';
|
||||
so.rmempty = false;
|
||||
if (!form.RichListValue)
|
||||
if (less_24_10)
|
||||
so.onchange = function(ev, section_id, value) {
|
||||
var desc = ev.target.nextSibling;
|
||||
if (value === 'mixed')
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=naiveproxy
|
||||
PKG_VERSION:=132.0.6834.79-1
|
||||
PKG_VERSION:=132.0.6834.79-2
|
||||
PKG_RELEASE:=1
|
||||
|
||||
# intel 80386 & riscv64 & cortex-a76
|
||||
@@ -20,47 +20,47 @@ else ifeq ($(ARCH_PREBUILT),riscv64_riscv64)
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH_PACKAGES),aarch64_cortex-a53)
|
||||
PKG_HASH:=4264588ab16565425a62436d5946a0630759acc3a71e2a673e2d5383caed8320
|
||||
PKG_HASH:=24548efa8a257320a169b9a9f4692043dc00ee7c35bd211ea04a2ec161bbf39d
|
||||
else ifeq ($(ARCH_PACKAGES),aarch64_cortex-a72)
|
||||
PKG_HASH:=f4272d75cdcf4e5f9328886e50e49115ea40b75c373dcd7bbce1045a791beed8
|
||||
PKG_HASH:=2849150414fd7ab21552cedc21bfa1c41a6ff1e1c3aa3cc2d44436aab74912e1
|
||||
else ifeq ($(ARCH_PACKAGES),aarch64_generic)
|
||||
PKG_HASH:=b50ef4064c8e609730233fc358b4e992f174323eb11153f63ecbb152cbe4b92e
|
||||
PKG_HASH:=71fbc160c5f8df9ae96d7f91b646e24f2eb142928df8186fe50a9d73cfac842e
|
||||
else ifeq ($(ARCH_PACKAGES),arm_arm1176jzf-s_vfp)
|
||||
PKG_HASH:=62cc7f13cbe49ff358692bb81c4ced66fbf0ec103dcff99f15ae7e56d9186b51
|
||||
PKG_HASH:=7ce0ba453c09f9978e421575aca96b34d381ec1731f19d29d8e16e7968fb1888
|
||||
else ifeq ($(ARCH_PACKAGES),arm_arm926ej-s)
|
||||
PKG_HASH:=bd050616edb6d6538001db64dc7dcfc13941855890ec5741beff1144a897530c
|
||||
PKG_HASH:=000d92d9865f406dfd9bf7848c455312a1ce42a778c970f484bdf93c3a805973
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a15_neon-vfpv4)
|
||||
PKG_HASH:=af2510de66dac0cde22b090864cfae314405969665a4abfc95bed51a77500e82
|
||||
PKG_HASH:=94f22ed0e270d47b035ec6380ce6b26db93ff01382641c222f2db11929cc0856
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a5_vfpv4)
|
||||
PKG_HASH:=2d12bb48e50fb88c3ab1375fc9f0df56d45aeaa3fc6c82b78555c1c4b7855266
|
||||
PKG_HASH:=a4cfc13e78000f3de8561f9f299e60536435b8e8b9208fc2ad34318662d78b28
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a7)
|
||||
PKG_HASH:=442133a5545fc83bb3c36ad14a631ccb930750e0969abf508636cf7f6cf29e7e
|
||||
PKG_HASH:=e27d13fc44deecd5083d0e5cdf9f0df83a642df714f4a13a69b706bb5198a61e
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_neon-vfpv4)
|
||||
PKG_HASH:=e144fafb14c8bad7e7d96d01f3d3d799fddfcd1f620e8f045376a19c497c0f54
|
||||
PKG_HASH:=15315b9671ca61fb848b4e8d6f8162a1ce9fc9fe4fad3702678256fa90414641
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_vfpv4)
|
||||
PKG_HASH:=5f65427412398053e9cecc3139c91fb8b09147ddfd42b91df742b9909b141bc8
|
||||
PKG_HASH:=6ad229a26fdaac664fa0bc5f8f4417e034fbf7ea8d6719eaf26882b758f8864e
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a8_vfpv3)
|
||||
PKG_HASH:=f9bdb669b6440d088336d17daaea24c6ecef85de4b8bac756a2d1fbd487fa1b1
|
||||
PKG_HASH:=871a8bc18bfcd5d9e2dcd965887be2f5617c9baec5bd0a6d17a5569782a69b8b
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a9)
|
||||
PKG_HASH:=8a4fbba18e8157dafddb7e684cf3c06bef2f10d3f9796bf0ea2496f9c788389c
|
||||
PKG_HASH:=137eb801293e8a3336626dc58434ee135751960332d8237d6c54aa6944eb17d4
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_neon)
|
||||
PKG_HASH:=b1371c204a9f4fa7cf98be0df0fbb257fd6708e7a096a57d9d31740b3ee74360
|
||||
PKG_HASH:=deace84168fdce2656c0b6d9fa094fdd8dbdd4e8f95c422043f5dee7cbdb5d26
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_vfpv3-d16)
|
||||
PKG_HASH:=fb3dde55b6642a0527b0ea9110fcad8081255248a4bc59bf530768eaaee1e5b8
|
||||
PKG_HASH:=51e4ee3521b575fc2c12a1baa276e0802d3fc10a32a62f190c2c9b56c008e40d
|
||||
else ifeq ($(ARCH_PACKAGES),arm_mpcore)
|
||||
PKG_HASH:=29293985c3d4af1bb0699a9907852555db6a3d8f1a01cc2a58651f9d20776e6f
|
||||
PKG_HASH:=008d2231c867614dc3e40c966261d9dc5c9931b3c68beb33549ad3d4f7bed2f1
|
||||
else ifeq ($(ARCH_PACKAGES),arm_xscale)
|
||||
PKG_HASH:=26909683e0586696f2b3c914be6fd1132c93c8eb4dec99bea93d70accddb66d6
|
||||
PKG_HASH:=d8160e3b0963d124eb91762c6df9d96207510dc1a5f28f32f3ad6f6133f49d75
|
||||
else ifeq ($(ARCH_PACKAGES),mipsel_24kc)
|
||||
PKG_HASH:=7ea7084fbcf22259a1ee7d785f886986f0f16e6dda86838991af50fb2b24cb72
|
||||
PKG_HASH:=f9c0a4049388058aaa881aa13385470497beaeeca6473baf6539905a75d098bf
|
||||
else ifeq ($(ARCH_PACKAGES),mipsel_mips32)
|
||||
PKG_HASH:=cea3005186f9010cb5270bc5fd99d68c5d7f77c8267129ab4f114c37699c2aa3
|
||||
PKG_HASH:=fd2520202c1cbe82498c90594a71cd1ed6aa4d8a6d470cf84871fd1d8f646380
|
||||
else ifeq ($(ARCH_PACKAGES),riscv64)
|
||||
PKG_HASH:=515d14ae15009abaad4016ba36848a71ba52bca9b4aa8f207eec2343d31ed608
|
||||
PKG_HASH:=557f8054e7643d6cdbbd1f70922ddf131f60ad03fb2cadf994ac15c9303d84ed
|
||||
else ifeq ($(ARCH_PACKAGES),x86)
|
||||
PKG_HASH:=f53aba8d13f8ba11af0ba26e27c8fc616b7a28a0e1d81814e0128c10cc92d3be
|
||||
PKG_HASH:=eab01156720906345230f6fb9cde7580b88e66799a4bdcef58636addbcab9a6c
|
||||
else ifeq ($(ARCH_PACKAGES),x86_64)
|
||||
PKG_HASH:=2369644fb5ccb41cf511ddca67d30cc7f04e64068f4d1d28c42155b86dfd4a06
|
||||
PKG_HASH:=95fd43646b86512ea46d87ccd0b5adda50aefe5c53dbcfd4b47930a146bec8b9
|
||||
else
|
||||
PKG_HASH:=dummy
|
||||
endif
|
||||
|
||||
@@ -30,13 +30,13 @@ define Download/geosite
|
||||
HASH:=aa65cee72dd6afbf9dd4c474b4ff28ceb063f6abf99249a084091adb4f282f09
|
||||
endef
|
||||
|
||||
GEOSITE_IRAN_VER:=202501130037
|
||||
GEOSITE_IRAN_VER:=202501200034
|
||||
GEOSITE_IRAN_FILE:=iran.dat.$(GEOSITE_IRAN_VER)
|
||||
define Download/geosite-ir
|
||||
URL:=https://github.com/bootmortis/iran-hosted-domains/releases/download/$(GEOSITE_IRAN_VER)/
|
||||
URL_FILE:=iran.dat
|
||||
FILE:=$(GEOSITE_IRAN_FILE)
|
||||
HASH:=72014870e40bd6a75bc3ee91d1bd578f766bbb5ccc237380a13aa1c6e1aee073
|
||||
HASH:=72a191d2ec9595484a1af53012d27fba74f1337dc258d62d862c69ca649dc1f8
|
||||
endef
|
||||
|
||||
define Package/v2ray-geodata/template
|
||||
|
||||
415
v2rayn/.gitignore
vendored
415
v2rayn/.gitignore
vendored
@@ -1,19 +1,400 @@
|
||||
################################################################################
|
||||
# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。
|
||||
################################################################################
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
||||
|
||||
/v2rayN/.vs/
|
||||
/v2rayN/v2rayN/bin/Debug/app.publish
|
||||
/v2rayN/v2rayN/bin/Debug
|
||||
/v2rayN/v2rayN/bin/Release
|
||||
/v2rayN/v2rayN/obj/
|
||||
/v2rayN/.vs/v2rayN/DesignTimeBuild
|
||||
/v2rayN/packages
|
||||
.vs/ProjectSettings.json
|
||||
.vs/slnx.sqlite
|
||||
.vs/VSWorkspaceState.json
|
||||
/v2rayN/v2rayUpgrade/bin/Debug
|
||||
/v2rayN/v2rayUpgrade/bin/Release
|
||||
/v2rayN/v2rayUpgrade/obj/
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
/.vs/v2rayN
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
# but not Directory.Build.rsp, as it configures directory-level build defaults
|
||||
!Directory.Build.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.tlog
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
|
||||
*.vbp
|
||||
|
||||
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
|
||||
*.dsw
|
||||
*.dsp
|
||||
|
||||
# Visual Studio 6 technical files
|
||||
*.ncb
|
||||
*.aps
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# Visual Studio History (VSHistory) files
|
||||
.vshistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
|
||||
# VS Code files for those working on multiple tools
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.code-workspace
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
# Windows Installer files from build outputs
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# JetBrains Rider
|
||||
*.sln.iml
|
||||
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)'
|
||||
|
||||
_INNERTUBE_CLIENTS = {
|
||||
'ios': {
|
||||
'INNERTUBE_CONTEXT': {
|
||||
'client': {
|
||||
'clientName': 'IOS',
|
||||
'clientVersion': '19.45.4',
|
||||
'deviceMake': 'Apple',
|
||||
'deviceModel': 'iPhone16,2',
|
||||
'userAgent': 'com.google.ios.youtube/19.45.4 (iPhone16,2; U; CPU iOS 18_1_0 like Mac OS X;)',
|
||||
'osName': 'iPhone',
|
||||
'osVersion': '18.1.0.22B83',
|
||||
},
|
||||
},
|
||||
'INNERTUBE_CONTEXT_CLIENT_NAME': 5,
|
||||
'REQUIRE_JS_PLAYER': False,
|
||||
'REQUIRE_PO_TOKEN': True,
|
||||
},
|
||||
# mweb has 'ultralow' formats
|
||||
# See: https://github.com/yt-dlp/yt-dlp/pull/557
|
||||
'mweb': {
|
||||
@@ -110,6 +126,17 @@ class YoutubeBaseInfoExtractor(InfoExtractor):
|
||||
'INNERTUBE_CONTEXT_CLIENT_NAME': 7,
|
||||
'SUPPORTS_COOKIES': True,
|
||||
},
|
||||
'web': {
|
||||
'INNERTUBE_CONTEXT': {
|
||||
'client': {
|
||||
'clientName': 'WEB',
|
||||
'clientVersion': '2.20241126.01.00',
|
||||
},
|
||||
},
|
||||
'INNERTUBE_CONTEXT_CLIENT_NAME': 1,
|
||||
'REQUIRE_PO_TOKEN': True,
|
||||
'SUPPORTS_COOKIES': True,
|
||||
},
|
||||
}
|
||||
|
||||
def _login(self):
|
||||
@@ -1995,6 +2022,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||
player_response = self._extract_yt_initial_variable(
|
||||
webpage, self._YT_INITIAL_PLAYER_RESPONSE_RE,
|
||||
video_id, 'initial player response')
|
||||
is_live = traverse_obj(player_response, ('videoDetails', 'isLive'))
|
||||
|
||||
if False and not player_response:
|
||||
player_response = self._call_api(
|
||||
'player', {'videoId': video_id}, video_id)
|
||||
@@ -2008,9 +2037,24 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||
if sts:
|
||||
pb_context['signatureTimestamp'] = sts
|
||||
|
||||
client = traverse_obj(self._INNERTUBE_CLIENTS, (
|
||||
lambda _, v: not v.get('REQUIRE_PO_TOKEN')),
|
||||
get_all=False)
|
||||
client_names = traverse_obj(self._INNERTUBE_CLIENTS, (
|
||||
T(dict.items), lambda _, k_v: not k_v[1].get('REQUIRE_PO_TOKEN'),
|
||||
0))[:1]
|
||||
|
||||
if is_live and 'ios' not in client_names:
|
||||
client_names.append('ios')
|
||||
|
||||
headers = {
|
||||
'Sec-Fetch-Mode': 'navigate',
|
||||
'Origin': origin,
|
||||
# 'X-Goog-Visitor-Id': self._extract_visitor_data(ytcfg) or '',
|
||||
}
|
||||
auth = self._generate_sapisidhash_header(origin)
|
||||
if auth is not None:
|
||||
headers['Authorization'] = auth
|
||||
headers['X-Origin'] = origin
|
||||
|
||||
for client in traverse_obj(self._INNERTUBE_CLIENTS, (client_names, T(dict))):
|
||||
|
||||
query = {
|
||||
'playbackContext': {
|
||||
@@ -2029,11 +2073,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||
'videoId': video_id,
|
||||
}
|
||||
|
||||
headers = merge_dicts({
|
||||
'Sec-Fetch-Mode': 'navigate',
|
||||
'Origin': origin,
|
||||
# 'X-Goog-Visitor-Id': self._extract_visitor_data(ytcfg) or '',
|
||||
}, traverse_obj(client, {
|
||||
api_headers = merge_dicts(headers, traverse_obj(client, {
|
||||
'X-YouTube-Client-Name': 'INNERTUBE_CONTEXT_CLIENT_NAME',
|
||||
'X-YouTube-Client-Version': (
|
||||
'INNERTUBE_CONTEXT', 'client', 'clientVersion'),
|
||||
@@ -2041,18 +2081,26 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||
'INNERTUBE_CONTEXT', 'client', 'userAgent'),
|
||||
}))
|
||||
|
||||
auth = self._generate_sapisidhash_header(origin)
|
||||
if auth is not None:
|
||||
headers['Authorization'] = auth
|
||||
headers['X-Origin'] = origin
|
||||
|
||||
player_response = self._call_api(
|
||||
'player', query, video_id, fatal=False, headers=headers,
|
||||
api_player_response = self._call_api(
|
||||
'player', query, video_id, fatal=False, headers=api_headers,
|
||||
note=join_nonempty(
|
||||
'Downloading', traverse_obj(query, (
|
||||
'context', 'client', 'clientName')),
|
||||
'API JSON', delim=' '))
|
||||
|
||||
hls = [
|
||||
traverse_obj(
|
||||
resp, ('streamingData', 'hlsManifestUrl', T(url_or_none)))
|
||||
for resp in (player_response, api_player_response)]
|
||||
if not hls[0] and hls[1]:
|
||||
player_response['streamingData']['hlsManifestUrl'] = hls[1]
|
||||
else:
|
||||
video_details = merge_dicts(*traverse_obj(
|
||||
(player_response, api_player_response),
|
||||
(Ellipsis, 'videoDetails', T(dict))))
|
||||
player_response.update(api_player_response or {})
|
||||
player_response['videoDetails'] = video_details
|
||||
|
||||
def is_agegated(playability):
|
||||
if not isinstance(playability, dict):
|
||||
return
|
||||
@@ -2194,6 +2242,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||
itag_qualities = {}
|
||||
q = qualities(['tiny', 'small', 'medium', 'large', 'hd720', 'hd1080', 'hd1440', 'hd2160', 'hd2880', 'highres'])
|
||||
CHUNK_SIZE = 10 << 20
|
||||
is_live = video_details.get('isLive')
|
||||
|
||||
streaming_data = player_response.get('streamingData') or {}
|
||||
streaming_formats = streaming_data.get('formats') or []
|
||||
@@ -2338,7 +2387,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||
hls_manifest_url = streaming_data.get('hlsManifestUrl')
|
||||
if hls_manifest_url:
|
||||
for f in self._extract_m3u8_formats(
|
||||
hls_manifest_url, video_id, 'mp4', fatal=False):
|
||||
hls_manifest_url, video_id, 'mp4',
|
||||
entry_protocol='m3u8_native', live=is_live, fatal=False):
|
||||
if process_manifest_format(
|
||||
f, 'hls', None, self._search_regex(
|
||||
r'/itag/(\d+)', f['url'], 'itag', default=None)):
|
||||
@@ -2444,8 +2494,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||
# Strictly de-prioritize damaged formats
|
||||
f['preference'] = -10
|
||||
|
||||
is_live = video_details.get('isLive')
|
||||
|
||||
owner_profile_url = self._yt_urljoin(self._extract_author_var(
|
||||
webpage, 'url', videodetails=video_details, metadata=microformat))
|
||||
|
||||
|
||||
@@ -585,6 +585,10 @@ from .egghead import (
|
||||
EggheadCourseIE,
|
||||
EggheadLessonIE,
|
||||
)
|
||||
from .eggs import (
|
||||
EggsArtistIE,
|
||||
EggsIE,
|
||||
)
|
||||
from .eighttracks import EightTracksIE
|
||||
from .eitb import EitbIE
|
||||
from .elementorembed import ElementorEmbedIE
|
||||
@@ -1279,6 +1283,10 @@ from .nebula import (
|
||||
)
|
||||
from .nekohacker import NekoHackerIE
|
||||
from .nerdcubed import NerdCubedFeedIE
|
||||
from .nest import (
|
||||
NestClipIE,
|
||||
NestIE,
|
||||
)
|
||||
from .neteasemusic import (
|
||||
NetEaseMusicAlbumIE,
|
||||
NetEaseMusicDjRadioIE,
|
||||
@@ -1533,6 +1541,10 @@ from .pinterest import (
|
||||
PinterestCollectionIE,
|
||||
PinterestIE,
|
||||
)
|
||||
from .piramidetv import (
|
||||
PiramideTVChannelIE,
|
||||
PiramideTVIE,
|
||||
)
|
||||
from .pixivsketch import (
|
||||
PixivSketchIE,
|
||||
PixivSketchUserIE,
|
||||
|
||||
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': {
|
||||
'id': '173250997',
|
||||
'title': 'Ekipa Bled',
|
||||
'description': 'md5:c88471e27a1268c448747a5325319ab7',
|
||||
'thumbnail': 'https://img.rtvcdn.si/_up/ava/ava_misc/show_logos/173250997/logo_wide1.jpg',
|
||||
},
|
||||
'playlist_count': 18,
|
||||
}]
|
||||
@@ -187,4 +189,7 @@ class RTVSLOShowIE(InfoExtractor):
|
||||
return self.playlist_from_matches(
|
||||
re.findall(r'<a [^>]*\bhref="(/arhiv/[^"]+)"', 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 ..utils import (
|
||||
ExtractorError,
|
||||
parse_qs,
|
||||
unsmuggle_url,
|
||||
UnsupportedError,
|
||||
make_archive_id,
|
||||
remove_end,
|
||||
url_or_none,
|
||||
)
|
||||
|
||||
_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'),
|
||||
}
|
||||
from ..utils.traversal import traverse_obj
|
||||
|
||||
|
||||
class SenateISVPIE(InfoExtractor):
|
||||
@@ -53,31 +22,46 @@ class SenateISVPIE(InfoExtractor):
|
||||
'info_dict': {
|
||||
'id': 'judiciary031715',
|
||||
'ext': 'mp4',
|
||||
'title': 'Integrated Senate Video Player',
|
||||
'title': 'ISVP',
|
||||
'thumbnail': r're:^https?://.*\.(?:jpg|png)$',
|
||||
'_old_archive_ids': ['senategov judiciary031715'],
|
||||
},
|
||||
'params': {
|
||||
# m3u8 download
|
||||
'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',
|
||||
'info_dict': {
|
||||
'id': 'commerce011514',
|
||||
'ext': 'mp4',
|
||||
'title': 'Integrated Senate Video Player',
|
||||
'_old_archive_ids': ['senategov commerce011514'],
|
||||
},
|
||||
'params': {
|
||||
# m3u8 download
|
||||
'skip_download': True,
|
||||
},
|
||||
'skip': 'This video is not available.',
|
||||
}, {
|
||||
'url': 'http://www.senate.gov/isvp/?type=arch&comm=intel&filename=intel090613&hc_location=ufi',
|
||||
# checksum differs each time
|
||||
'info_dict': {
|
||||
'id': 'intel090613',
|
||||
'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
|
||||
@@ -85,60 +69,81 @@ class SenateISVPIE(InfoExtractor):
|
||||
'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):
|
||||
url, smuggled_data = unsmuggle_url(url, {})
|
||||
|
||||
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)
|
||||
|
||||
video_id = re.sub(r'.mp4$', '', qs['filename'][0])
|
||||
filename = qs['filename'][0]
|
||||
video_id = remove_end(filename, '.mp4')
|
||||
|
||||
webpage = self._download_webpage(url, video_id)
|
||||
committee = qs['comm'][0]
|
||||
|
||||
if smuggled_data.get('force_title'):
|
||||
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]
|
||||
stream_num, stream_domain, stream_id, msl3 = self._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 = []
|
||||
if video_type == 'arch':
|
||||
filename = video_id if '.' in video_id else video_id + '.mp4'
|
||||
m3u8_url = urllib.parse.urljoin(domain, 'i/' + filename + '/master.m3u8')
|
||||
formats = self._extract_m3u8_formats(m3u8_url, video_id, ext='mp4', m3u8_id='m3u8')
|
||||
else:
|
||||
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)
|
||||
subtitles = {}
|
||||
for video_url in urls_alternatives:
|
||||
formats, subtitles = self._extract_m3u8_formats_and_subtitles(video_url, video_id, ext='mp4', fatal=False)
|
||||
if formats:
|
||||
break
|
||||
|
||||
return {
|
||||
'id': video_id,
|
||||
'title': title,
|
||||
'title': self._html_extract_title(webpage),
|
||||
'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):
|
||||
_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 = [{
|
||||
'url': 'https://www.help.senate.gov/hearings/vaccines-saving-lives-ensuring-confidence-and-protecting-public-health',
|
||||
'info_dict': {
|
||||
@@ -147,6 +152,9 @@ class SenateGovIE(InfoExtractor):
|
||||
'title': 'Vaccines: Saving Lives, Ensuring Confidence, and Protecting Public Health',
|
||||
'description': 'The U.S. Senate Committee on Health, Education, Labor & Pensions',
|
||||
'ext': 'mp4',
|
||||
'age_limit': 0,
|
||||
'thumbnail': 'https://www.help.senate.gov/assets/images/sharelogo.jpg',
|
||||
'_old_archive_ids': ['senategov help090920'],
|
||||
},
|
||||
'params': {'skip_download': 'm3u8'},
|
||||
}, {
|
||||
@@ -156,8 +164,12 @@ class SenateGovIE(InfoExtractor):
|
||||
'display_id': 'watch?hearingid=B8A25434-5056-A066-6020-1F68CB75F0CD',
|
||||
'title': 'Review of the FY2019 Budget Request for the U.S. Army',
|
||||
'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'},
|
||||
'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',
|
||||
'info_dict': {
|
||||
@@ -166,32 +178,65 @@ class SenateGovIE(InfoExtractor):
|
||||
'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',
|
||||
'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'},
|
||||
}, {
|
||||
'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):
|
||||
display_id = self._generic_id(url)
|
||||
webpage = self._download_webpage(url, display_id)
|
||||
parse_info = parse_qs(self._search_regex(
|
||||
r'<iframe class="[^>"]*streaminghearing[^>"]*"\s[^>]*\bsrc="([^">]*)', webpage, 'hearing 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')
|
||||
url_info = next(SenateISVPIE.extract_from_webpage(self._downloader, url, webpage), None)
|
||||
if not url_info:
|
||||
raise UnsupportedError(url)
|
||||
|
||||
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 {
|
||||
'id': re.sub(r'.mp4$', '', filename),
|
||||
**url_info,
|
||||
'_type': 'url_transparent',
|
||||
'display_id': display_id,
|
||||
'title': re.sub(r'\s+', ' ', title.split('|')[0]).strip(),
|
||||
'description': self._og_search_description(webpage, default=None),
|
||||
'thumbnail': self._og_search_thumbnail(webpage, default=None),
|
||||
'age_limit': self._rta_search(webpage),
|
||||
'formats': formats,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user