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