mirror of
https://github.com/distribution/distribution.git
synced 2026-10-28 10:15:27 +08:00
fix(deps): update deps to fix security vulns (#4965)
This commit is contained in:
116 files changed
+3481
-2469
No files matched your search
@@ -37,10 +37,10 @@ require (
|
||||
go.opentelemetry.io/otel/sdk v1.44.0
|
||||
go.opentelemetry.io/otel/trace v1.44.0
|
||||
go.yaml.in/yaml/v2 v2.4.4
|
||||
golang.org/x/crypto v0.52.0
|
||||
golang.org/x/net v0.55.0
|
||||
golang.org/x/crypto v0.57.0
|
||||
golang.org/x/net v0.59.0
|
||||
golang.org/x/oauth2 v0.36.0
|
||||
golang.org/x/sync v0.20.0
|
||||
golang.org/x/sync v0.23.0
|
||||
google.golang.org/api v0.264.0
|
||||
)
|
||||
|
||||
@@ -109,12 +109,12 @@ require (
|
||||
go.opentelemetry.io/otel/sdk/metric v1.44.0 // indirect
|
||||
go.opentelemetry.io/proto/otlp v1.10.0 // indirect
|
||||
go.yaml.in/yaml/v3 v3.0.5 // indirect
|
||||
golang.org/x/sys v0.45.0 // indirect
|
||||
golang.org/x/text v0.37.0 // indirect
|
||||
golang.org/x/sys v0.48.0 // indirect
|
||||
golang.org/x/text v0.42.0 // indirect
|
||||
golang.org/x/time v0.14.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect
|
||||
google.golang.org/grpc v1.83.1 // indirect
|
||||
google.golang.org/grpc v1.83.2 // indirect
|
||||
google.golang.org/protobuf v1.36.11 // indirect
|
||||
)
|
||||
@@ -259,21 +259,21 @@ go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ=
|
||||
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
|
||||
go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw=
|
||||
go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg=
|
||||
golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988=
|
||||
golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc=
|
||||
golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
|
||||
golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
|
||||
golang.org/x/crypto v0.57.0 h1:3ZVCjf8Ggz7zneR/EHRVx68Ctf+2pmIMP2UFhh9cC6M=
|
||||
golang.org/x/crypto v0.57.0/go.mod h1:Fdz0i5U6CoizGwLda9DttjSk6qlZo25zYNtR+ycvuZA=
|
||||
golang.org/x/net v0.59.0 h1:5zfYln+w5XCxwrnMMJPufRgNoXEaGxl0wo5GqPXyues=
|
||||
golang.org/x/net v0.59.0/go.mod h1:2DA/G1UfVbCpQPeWTmMPGY7Cs2PkBkwu743bVX5PIVg=
|
||||
golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
|
||||
golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
|
||||
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
|
||||
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
|
||||
golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk=
|
||||
golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
|
||||
golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
||||
golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
|
||||
golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
|
||||
golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo=
|
||||
golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og=
|
||||
golang.org/x/text v0.42.0 h1:JbOZXgfeCPU9gacVtYliJqOhD+zhrEqK4LfdpmlUZqI=
|
||||
golang.org/x/text v0.42.0/go.mod h1:ojzP1Z+2QtioaF8DTtO8K5q7JWVVYwZKenzujK0Zd0E=
|
||||
golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
|
||||
golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
|
||||
gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
|
||||
@@ -286,8 +286,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa h1:
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:q4lMZS6kskjT5HvCPrnnypcDPVJqT/f4nfxmkE7gryY=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1:mZHHdPZl0dbGHCflZgAq/Q468DWVFcU2whhB2KAo8fk=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
|
||||
google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y=
|
||||
google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ=
|
||||
google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU=
|
||||
google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8=
|
||||
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
|
||||
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
||||
+21
-23
@@ -564,24 +564,21 @@ func encodeECDSAKey(w io.Writer, key *ecdsa.PrivateKey) error {
|
||||
// If the domain is already being verified, it waits for the existing verification to complete.
|
||||
// Either way, createCert blocks for the duration of the whole process.
|
||||
func (m *Manager) createCert(ctx context.Context, ck certKey) (*tls.Certificate, error) {
|
||||
// TODO: maybe rewrite this whole piece using sync.Once
|
||||
state, err := m.certState(ck)
|
||||
state, owner, err := m.certState(ck)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// state may exist if another goroutine is already working on it
|
||||
// in which case just wait for it to finish
|
||||
if !state.locked {
|
||||
// If another goroutine is already working on this state, wait for it
|
||||
// to finish by taking the read lock
|
||||
if !owner {
|
||||
state.RLock()
|
||||
defer state.RUnlock()
|
||||
return state.tlscert()
|
||||
}
|
||||
|
||||
// We are the first; state is locked.
|
||||
// Unblock the readers when domain ownership is verified
|
||||
// and we got the cert or the process failed.
|
||||
// We are the first to work on this certKey, so state is write-locked.
|
||||
// Unblock the readers when our work is complete.
|
||||
defer state.Unlock()
|
||||
state.locked = false
|
||||
|
||||
der, leaf, err := m.authorizedCert(ctx, state.key, ck)
|
||||
if err != nil {
|
||||
@@ -611,10 +608,15 @@ func (m *Manager) createCert(ctx context.Context, ck certKey) (*tls.Certificate,
|
||||
return state.tlscert()
|
||||
}
|
||||
|
||||
// certState returns a new or existing certState.
|
||||
// If a new certState is returned, state.exist is false and the state is locked.
|
||||
// certState returns a new or existing certState along with a boolean
|
||||
// indicating whether the caller is the owner of the state.
|
||||
//
|
||||
// The owner of the state is responsible for performing the ACME work and
|
||||
// must unlock the state's write lock when done. Non-owner callers should
|
||||
// wait on the state's read lock for the owner to finish.
|
||||
//
|
||||
// The returned error is non-nil only in the case where a new state could not be created.
|
||||
func (m *Manager) certState(ck certKey) (*certState, error) {
|
||||
func (m *Manager) certState(ck certKey) (*certState, bool, error) {
|
||||
m.stateMu.Lock()
|
||||
defer m.stateMu.Unlock()
|
||||
if m.state == nil {
|
||||
@@ -622,7 +624,7 @@ func (m *Manager) certState(ck certKey) (*certState, error) {
|
||||
}
|
||||
// existing state
|
||||
if state, ok := m.state[ck]; ok {
|
||||
return state, nil
|
||||
return state, false, nil
|
||||
}
|
||||
|
||||
// new locked state
|
||||
@@ -636,16 +638,13 @@ func (m *Manager) certState(ck certKey) (*certState, error) {
|
||||
key, err = ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, false, err
|
||||
}
|
||||
|
||||
state := &certState{
|
||||
key: key,
|
||||
locked: true,
|
||||
}
|
||||
state := &certState{key: key}
|
||||
state.Lock() // will be unlocked by m.certState caller
|
||||
m.state[ck] = state
|
||||
return state, nil
|
||||
return state, true, nil
|
||||
}
|
||||
|
||||
// authorizedCert starts the domain ownership verification process and requests a new cert upon success.
|
||||
@@ -1035,10 +1034,9 @@ func (m *Manager) now() time.Time {
|
||||
// certState is ready when its mutex is unlocked for reading.
|
||||
type certState struct {
|
||||
sync.RWMutex
|
||||
locked bool // locked for read/write
|
||||
key crypto.Signer // private key for cert
|
||||
cert [][]byte // DER encoding
|
||||
leaf *x509.Certificate // parsed cert[0]; always non-nil if cert != nil
|
||||
key crypto.Signer // private key for cert
|
||||
cert [][]byte // DER encoding
|
||||
leaf *x509.Certificate // parsed cert[0]; always non-nil if cert != nil
|
||||
}
|
||||
|
||||
// tlscert creates a tls.Certificate from s.key and s.cert.
|
||||
|
||||
+5
-8
@@ -103,9 +103,7 @@ func jwsEncodeJSON(claimset interface{}, key crypto.Signer, kid KeyID, nonce, ur
|
||||
}
|
||||
payload = base64.RawURLEncoding.EncodeToString(cs)
|
||||
}
|
||||
hash := sha.New()
|
||||
hash.Write([]byte(phead + "." + payload))
|
||||
sig, err := jwsSign(key, sha, hash.Sum(nil))
|
||||
sig, err := jwsSign(key, sha, []byte(phead+"."+payload))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -195,14 +193,13 @@ func jwkEncode(pub crypto.PublicKey) (string, error) {
|
||||
return "", ErrUnsupportedKey
|
||||
}
|
||||
|
||||
// jwsSign signs the digest using the given key.
|
||||
// The hash is unused for ECDSA keys.
|
||||
func jwsSign(key crypto.Signer, hash crypto.Hash, digest []byte) ([]byte, error) {
|
||||
// jwsSign signs the payload using the given key.
|
||||
func jwsSign(key crypto.Signer, hash crypto.Hash, payload []byte) ([]byte, error) {
|
||||
switch pub := key.Public().(type) {
|
||||
case *rsa.PublicKey:
|
||||
return key.Sign(rand.Reader, digest, hash)
|
||||
return crypto.SignMessage(key, rand.Reader, payload, hash)
|
||||
case *ecdsa.PublicKey:
|
||||
sigASN1, err := key.Sign(rand.Reader, digest, hash)
|
||||
sigASN1, err := crypto.SignMessage(key, rand.Reader, payload, hash)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
+5
-4
@@ -114,14 +114,15 @@ type Error struct {
|
||||
}
|
||||
|
||||
func (e *Error) Error() string {
|
||||
str := fmt.Sprintf("%d %s: %s", e.StatusCode, e.ProblemType, e.Detail)
|
||||
var sb strings.Builder
|
||||
fmt.Fprintf(&sb, "%d %s: %s", e.StatusCode, e.ProblemType, e.Detail)
|
||||
if len(e.Subproblems) > 0 {
|
||||
str += fmt.Sprintf("; subproblems:")
|
||||
sb.WriteString("; subproblems:")
|
||||
for _, sp := range e.Subproblems {
|
||||
str += fmt.Sprintf("\n\t%s", sp)
|
||||
fmt.Fprintf(&sb, "\n\t%s", sp)
|
||||
}
|
||||
}
|
||||
return str
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
// AuthorizationError indicates that an authorization for an identifier
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build (!amd64 && !loong64 && !ppc64le && !ppc64 && !s390x) || !gc || purego
|
||||
//go:build (!amd64 && !loong64 && !ppc64le && !ppc64 && !riscv64 && !s390x) || !gc || purego
|
||||
|
||||
package poly1305
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build gc && !purego && (amd64 || loong64 || ppc64 || ppc64le)
|
||||
//go:build gc && !purego && (amd64 || loong64 || ppc64 || ppc64le || riscv64)
|
||||
|
||||
package poly1305
|
||||
|
||||
|
||||
+158
@@ -0,0 +1,158 @@
|
||||
// Copyright 2026 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build gc && !purego
|
||||
|
||||
#define LOAD64U(base, offset, t0, t1, t2, t3, dst) \
|
||||
MOVBU (offset+0*1)(base), t0; \
|
||||
MOVBU (offset+1*1)(base), t1; \
|
||||
MOVBU (offset+2*1)(base), t2; \
|
||||
MOVBU (offset+3*1)(base), t3; \
|
||||
SLL $8, t1; \
|
||||
SLL $16, t2; \
|
||||
SLL $24, t3; \
|
||||
OR t1, t0; \
|
||||
OR t3, t2; \
|
||||
OR t2, t0, dst; \
|
||||
MOVBU (offset+4*1)(base), t0; \
|
||||
MOVBU (offset+5*1)(base), t1; \
|
||||
MOVBU (offset+6*1)(base), t2; \
|
||||
MOVBU (offset+7*1)(base), t3; \
|
||||
SLL $32, t0; \
|
||||
SLL $40, t1; \
|
||||
SLL $48, t2; \
|
||||
SLL $56, t3; \
|
||||
OR t1, t0; \
|
||||
OR t3, t2; \
|
||||
OR t2, t0; \
|
||||
OR t0, dst
|
||||
|
||||
// func update(state *macState, msg []byte)
|
||||
TEXT ·update(SB), $0-32
|
||||
MOV state+0(FP), X5
|
||||
MOV msg_base+8(FP), X6
|
||||
MOV msg_len+16(FP), X7
|
||||
|
||||
MOV $16, X8
|
||||
|
||||
AND $7, X6, X28
|
||||
|
||||
MOV (0*8)(X5), X9 // h0
|
||||
MOV (1*8)(X5), X10 // h1
|
||||
MOV (2*8)(X5), X11 // h2
|
||||
MOV (3*8)(X5), X12 // r0
|
||||
MOV (4*8)(X5), X13 // r1
|
||||
|
||||
BLT X7, X8, tail
|
||||
|
||||
loop:
|
||||
BEQZ X28, aligned_load
|
||||
|
||||
LOAD64U(X6, 0*8, X16, X18, X19, X20, X15) // msg[0:8]
|
||||
LOAD64U(X6, 1*8, X16, X18, X19, X20, X17) // msg[8:16]
|
||||
JMP block
|
||||
|
||||
aligned_load:
|
||||
MOV (0*8)(X6), X15 // msg[0:8]
|
||||
MOV (1*8)(X6), X17 // msg[8:16]
|
||||
|
||||
block:
|
||||
ADD X15, X9 // h0 (x1 + y1 = z1', if z1' < x1 then z1' overflow)
|
||||
SLTU X15, X9, X19 // h0.carry
|
||||
ADD X17, X10, X22
|
||||
SLTU X17, X22, X23
|
||||
ADD X22, X19, X10 // h1
|
||||
SLTU X22, X10, X19
|
||||
OR X23, X19 // h1.carry
|
||||
ADD $1, X19
|
||||
ADD X19, X11 // h2
|
||||
|
||||
ADD $16, X6 // msg = msg[16:]
|
||||
|
||||
multiply:
|
||||
MULHU X9, X12, X16 // h0r0.hi
|
||||
MUL X9, X12, X15 // h0r0.lo
|
||||
MULHU X10, X12, X17 // h1r0.hi
|
||||
MUL X10, X12, X14 // h1r0.lo
|
||||
ADD X14, X16
|
||||
SLTU X14, X16, X19
|
||||
ADD X19, X17
|
||||
MUL X11, X12, X20
|
||||
ADD X17, X20
|
||||
MULHU X9, X13, X17 // h0r1.hi
|
||||
MUL X9, X13, X14 // h0r1.lo
|
||||
ADD X14, X16
|
||||
SLTU X14, X16, X19
|
||||
ADD X19, X17
|
||||
MOV X17, X9
|
||||
MUL X11, X13, X21 // h2r1
|
||||
MULHU X10, X13, X17 // h1r1.hi
|
||||
MUL X10, X13, X14 // h1r1.lo
|
||||
ADD X14, X20
|
||||
ADD X17, X21, X22
|
||||
SLTU X14, X20, X19
|
||||
ADD X22, X19, X21
|
||||
ADD X9, X20
|
||||
SLTU X9, X20, X19
|
||||
ADD X19, X21
|
||||
AND $3, X20, X11
|
||||
AND $-4, X20, X18
|
||||
ADD X18, X15, X9
|
||||
ADD X21, X16, X22
|
||||
SLTU X18, X9, X19
|
||||
SLTU X21, X22, X23
|
||||
ADD X22, X19, X10
|
||||
SLTU X22, X10, X19
|
||||
OR X19, X23, X19
|
||||
ADD X19, X11
|
||||
SLL $62, X21, X22
|
||||
SRL $2, X20, X23
|
||||
SRL $2, X21, X21
|
||||
OR X22, X23, X20
|
||||
ADD X20, X9, X9
|
||||
ADD X21, X10, X22
|
||||
SLTU X20, X9, X19
|
||||
SLTU X21, X22, X23
|
||||
ADD X22, X19, X10
|
||||
SLTU X22, X10, X19
|
||||
OR X19, X23, X19
|
||||
ADD X19, X11, X11
|
||||
|
||||
SUB $16, X7, X7
|
||||
BGE X7, X8, loop
|
||||
|
||||
tail:
|
||||
BEQ X7, X0, done
|
||||
MOV $1, X15
|
||||
MOV $0, X16
|
||||
ADD X7, X6, X6
|
||||
|
||||
flush_buffer:
|
||||
MOVBU -1(X6), X20
|
||||
SRL $56, X15, X19
|
||||
SLL $8, X16, X23
|
||||
SLL $8, X15, X15
|
||||
OR X19, X23, X16
|
||||
XOR X20, X15
|
||||
SUB $1, X7, X7
|
||||
SUB $1, X6, X6
|
||||
BNE X7, X0, flush_buffer
|
||||
|
||||
ADD X15, X9
|
||||
SLTU X15, X9, X19
|
||||
ADD X16, X10, X22
|
||||
SLTU X16, X22, X23
|
||||
ADD X22, X19, X10
|
||||
SLTU X22, X10, X19
|
||||
OR X23, X19
|
||||
ADD X19, X11
|
||||
|
||||
MOV $16, X7
|
||||
JMP multiply
|
||||
|
||||
done:
|
||||
MOV X9, (0*8)(X5) // h0
|
||||
MOV X10, (1*8)(X5)
|
||||
MOV X11, (2*8)(X5)
|
||||
RET
|
||||
+4
@@ -80,6 +80,10 @@ func pbDecrypterFor(algorithm pkix.AlgorithmIdentifier, password []byte) (cipher
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
if params.Iterations < 0 || params.Iterations > maxIterations {
|
||||
return nil, 0, NotImplementedError("iteration count is invalid or too high")
|
||||
}
|
||||
|
||||
key := cipherType.deriveKey(params.Salt, password, params.Iterations)
|
||||
iv := cipherType.deriveIV(params.Salt, password, params.Iterations)
|
||||
|
||||
|
||||
+8
@@ -27,11 +27,19 @@ var (
|
||||
oidSHA1 = asn1.ObjectIdentifier([]int{1, 3, 14, 3, 2, 26})
|
||||
)
|
||||
|
||||
// maxIterations is a safety limit to prevent CPU exhaustion from
|
||||
// crafted PKCS#12 files with unreasonable iteration counts.
|
||||
const maxIterations = 1 << 20 // ~1 million
|
||||
|
||||
func verifyMac(macData *macData, message, password []byte) error {
|
||||
if !macData.Mac.Algorithm.Algorithm.Equal(oidSHA1) {
|
||||
return NotImplementedError("unknown digest algorithm: " + macData.Mac.Algorithm.Algorithm.String())
|
||||
}
|
||||
|
||||
if macData.Iterations < 0 || macData.Iterations > maxIterations {
|
||||
return NotImplementedError("iteration count is invalid or too high")
|
||||
}
|
||||
|
||||
key := pbkdf(sha1Sum, 20, 64, macData.MacSalt, password, macData.Iterations, 3, 20)
|
||||
|
||||
mac := hmac.New(sha1.New, key)
|
||||
|
||||
+13
-1
@@ -4,7 +4,9 @@
|
||||
|
||||
package http2
|
||||
|
||||
import "strings"
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// The HTTP protocols are defined in terms of ASCII, not Unicode. This file
|
||||
// contains helper functions which may use Unicode-aware functions which would
|
||||
@@ -43,6 +45,16 @@ func isASCIIPrint(s string) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// isASCII returns whether s is ASCII.
|
||||
func isASCII(s string) bool {
|
||||
for i := 0; i < len(s); i++ {
|
||||
if s[i] > 0x7f {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// asciiToLower returns the lowercase version of s if s is ASCII and printable,
|
||||
// and whether or not it was.
|
||||
func asciiToLower(s string) (lower string, ok bool) {
|
||||
|
||||
+1
-4
@@ -121,10 +121,7 @@ func (b *dataBuffer) Write(p []byte) (int, error) {
|
||||
// If the last chunk is empty, allocate a new chunk. Try to allocate
|
||||
// enough to fully copy p plus any additional bytes we expect to
|
||||
// receive. However, this may allocate less than len(p).
|
||||
want := int64(len(p))
|
||||
if b.expected > want {
|
||||
want = b.expected
|
||||
}
|
||||
want := max(int64(len(p)), b.expected)
|
||||
chunk := b.lastChunkOrAlloc(want)
|
||||
n := copy(chunk[b.w:], p)
|
||||
p = p[n:]
|
||||
|
||||
-1
@@ -39,7 +39,6 @@ func NewEncoder(w io.Writer) *Encoder {
|
||||
tableSizeUpdate: false,
|
||||
w: w,
|
||||
}
|
||||
e.dynTab.table.init()
|
||||
e.dynTab.setMaxSize(initialHeaderTableSize)
|
||||
return e
|
||||
}
|
||||
|
||||
-1
@@ -105,7 +105,6 @@ func NewDecoder(maxDynamicTableSize uint32, emitFunc func(f HeaderField)) *Decod
|
||||
emitEnabled: true,
|
||||
firstField: true,
|
||||
}
|
||||
d.dynTab.table.init()
|
||||
d.dynTab.allowedMaxSize = maxDynamicTableSize
|
||||
d.dynTab.setMaxSize(maxDynamicTableSize)
|
||||
return d
|
||||
|
||||
+37
-14
@@ -31,10 +31,18 @@ type headerFieldTable struct {
|
||||
|
||||
// byName maps a HeaderField name to the unique id of the newest entry with
|
||||
// the same name. See above for a definition of "unique id".
|
||||
//
|
||||
// byName and byNameValue are used only by search, which is only called
|
||||
// for tables used by encoders. For tables used only by decoders, the
|
||||
// maps are never built, as a memory optimization for servers with many
|
||||
// mostly-idle connections, each pinning a dynamic table. The maps are
|
||||
// built lazily by the first search call and are nil until then. The two
|
||||
// maps are always both nil or both non-nil.
|
||||
byName map[string]uint64
|
||||
|
||||
// byNameValue maps a HeaderField name/value pair to the unique id of the newest
|
||||
// entry with the same name and value. See above for a definition of "unique id".
|
||||
// See byName for when this map is non-nil.
|
||||
byNameValue map[pairNameValue]uint64
|
||||
}
|
||||
|
||||
@@ -42,9 +50,17 @@ type pairNameValue struct {
|
||||
name, value string
|
||||
}
|
||||
|
||||
func (t *headerFieldTable) init() {
|
||||
t.byName = make(map[string]uint64)
|
||||
t.byNameValue = make(map[pairNameValue]uint64)
|
||||
// buildMaps initializes byName and byNameValue from ents.
|
||||
func (t *headerFieldTable) buildMaps() {
|
||||
t.byName = make(map[string]uint64, len(t.ents))
|
||||
t.byNameValue = make(map[pairNameValue]uint64, len(t.ents))
|
||||
for k, f := range t.ents {
|
||||
// Map to the newest matching entry: later (newer) entries
|
||||
// overwrite earlier ones, matching addEntry's behavior.
|
||||
id := t.evictCount + uint64(k) + 1
|
||||
t.byName[f.Name] = id
|
||||
t.byNameValue[pairNameValue{f.Name, f.Value}] = id
|
||||
}
|
||||
}
|
||||
|
||||
// len reports the number of entries in the table.
|
||||
@@ -54,9 +70,11 @@ func (t *headerFieldTable) len() int {
|
||||
|
||||
// addEntry adds a new entry.
|
||||
func (t *headerFieldTable) addEntry(f HeaderField) {
|
||||
id := uint64(t.len()) + t.evictCount + 1
|
||||
t.byName[f.Name] = id
|
||||
t.byNameValue[pairNameValue{f.Name, f.Value}] = id
|
||||
if t.byName != nil {
|
||||
id := uint64(t.len()) + t.evictCount + 1
|
||||
t.byName[f.Name] = id
|
||||
t.byNameValue[pairNameValue{f.Name, f.Value}] = id
|
||||
}
|
||||
t.ents = append(t.ents, f)
|
||||
}
|
||||
|
||||
@@ -65,14 +83,16 @@ func (t *headerFieldTable) evictOldest(n int) {
|
||||
if n > t.len() {
|
||||
panic(fmt.Sprintf("evictOldest(%v) on table with %v entries", n, t.len()))
|
||||
}
|
||||
for k := 0; k < n; k++ {
|
||||
f := t.ents[k]
|
||||
id := t.evictCount + uint64(k) + 1
|
||||
if t.byName[f.Name] == id {
|
||||
delete(t.byName, f.Name)
|
||||
}
|
||||
if p := (pairNameValue{f.Name, f.Value}); t.byNameValue[p] == id {
|
||||
delete(t.byNameValue, p)
|
||||
if t.byName != nil {
|
||||
for k := 0; k < n; k++ {
|
||||
f := t.ents[k]
|
||||
id := t.evictCount + uint64(k) + 1
|
||||
if t.byName[f.Name] == id {
|
||||
delete(t.byName, f.Name)
|
||||
}
|
||||
if p := (pairNameValue{f.Name, f.Value}); t.byNameValue[p] == id {
|
||||
delete(t.byNameValue, p)
|
||||
}
|
||||
}
|
||||
}
|
||||
copy(t.ents, t.ents[n:])
|
||||
@@ -100,6 +120,9 @@ func (t *headerFieldTable) evictOldest(n int) {
|
||||
//
|
||||
// See Section 2.3.3.
|
||||
func (t *headerFieldTable) search(f HeaderField) (i uint64, nameValueMatch bool) {
|
||||
if t.byName == nil {
|
||||
t.buildMaps()
|
||||
}
|
||||
if !f.Sensitive {
|
||||
if id := t.byNameValue[pairNameValue{f.Name, f.Value}]; id != 0 {
|
||||
return t.idToIndex(id), true
|
||||
|
||||
+47
@@ -25,6 +25,8 @@ import (
|
||||
//
|
||||
// https://golang.org/pkg/net/http/#ResponseWriter
|
||||
// https://golang.org/pkg/net/http/#example_ResponseWriter_trailers
|
||||
//
|
||||
// Deprecated: Use [http.TrailerPrefix] instead.
|
||||
const TrailerPrefix = "Trailer:"
|
||||
|
||||
// Push errors.
|
||||
@@ -38,16 +40,22 @@ var (
|
||||
// The configuration conf may be nil.
|
||||
//
|
||||
// ConfigureServer must be called before s begins serving.
|
||||
//
|
||||
// Deprecated: Set [http.Server.Protocols] instead.
|
||||
func ConfigureServer(s *http.Server, conf *Server) error {
|
||||
return configureServer(s, conf)
|
||||
}
|
||||
|
||||
// Server is an HTTP/2 server.
|
||||
//
|
||||
// Deprecated: Use [http.Server] instead.
|
||||
type Server struct {
|
||||
// MaxHandlers limits the number of http.Handler ServeHTTP goroutines
|
||||
// which may run at a time over all connections.
|
||||
// Negative or zero no limit.
|
||||
// TODO: implement
|
||||
//
|
||||
// Deprecated: This field has never had any effect.
|
||||
MaxHandlers int
|
||||
|
||||
// MaxConcurrentStreams optionally specifies the number of
|
||||
@@ -56,6 +64,9 @@ type Server struct {
|
||||
// which may be active globally, which is MaxHandlers.
|
||||
// If zero, MaxConcurrentStreams defaults to at least 100, per
|
||||
// the HTTP/2 spec's recommendations.
|
||||
//
|
||||
// Deprecated: Use [http.Server.HTTP2] and
|
||||
// [http.HTTP2Config.MaxConcurrentStreams] instead.
|
||||
MaxConcurrentStreams uint32
|
||||
|
||||
// MaxDecoderHeaderTableSize optionally specifies the http2
|
||||
@@ -63,44 +74,67 @@ type Server struct {
|
||||
// informs the remote endpoint of the maximum size of the header compression
|
||||
// table used to decode header blocks, in octets. If zero, the default value
|
||||
// of 4096 is used.
|
||||
//
|
||||
// Deprecated: Use [http.Server.HTTP2] and
|
||||
// [http.HTTP2Config.MaxDecoderHeaderTableSize] instead.
|
||||
MaxDecoderHeaderTableSize uint32
|
||||
|
||||
// MaxEncoderHeaderTableSize optionally specifies an upper limit for the
|
||||
// header compression table used for encoding request headers. Received
|
||||
// SETTINGS_HEADER_TABLE_SIZE settings are capped at this limit. If zero,
|
||||
// the default value of 4096 is used.
|
||||
//
|
||||
// Deprecated: Use [http.Server.HTTP2] and
|
||||
// [http.HTTP2Config.MaxEncoderHeaderTableSize] instead.
|
||||
MaxEncoderHeaderTableSize uint32
|
||||
|
||||
// MaxReadFrameSize optionally specifies the largest frame
|
||||
// this server is willing to read. A valid value is between
|
||||
// 16k and 16M, inclusive. If zero or otherwise invalid, a
|
||||
// default value is used.
|
||||
//
|
||||
// Deprecated: Use [http.Server.HTTP2] and
|
||||
// [http.HTTP2Config.MaxReadFrameSize] instead.
|
||||
MaxReadFrameSize uint32
|
||||
|
||||
// PermitProhibitedCipherSuites, if true, permits the use of
|
||||
// cipher suites prohibited by the HTTP/2 spec.
|
||||
//
|
||||
// Deprecated: Use [http.Server.HTTP2] and
|
||||
// [http.HTTP2Config.PermitProhibitedCipherSuites] instead.
|
||||
PermitProhibitedCipherSuites bool
|
||||
|
||||
// IdleTimeout specifies how long until idle clients should be
|
||||
// closed with a GOAWAY frame. PING frames are not considered
|
||||
// activity for the purposes of IdleTimeout.
|
||||
// If zero or negative, there is no timeout.
|
||||
//
|
||||
// Deprecated: Use [http.Server.IdleTimeout] instead.
|
||||
IdleTimeout time.Duration
|
||||
|
||||
// ReadIdleTimeout is the timeout after which a health check using a ping
|
||||
// frame will be carried out if no frame is received on the connection.
|
||||
// If zero, no health check is performed.
|
||||
//
|
||||
// Deprecated: Use [http.Server.HTTP2] and
|
||||
// [http.HTTP2Config.SendPingTimeout] instead.
|
||||
ReadIdleTimeout time.Duration
|
||||
|
||||
// PingTimeout is the timeout after which the connection will be closed
|
||||
// if a response to a ping is not received.
|
||||
// If zero, a default of 15 seconds is used.
|
||||
//
|
||||
// Deprecated: Use [http.Server.HTTP2] and
|
||||
// [http.HTTP2Config.PingTimeout] instead.
|
||||
PingTimeout time.Duration
|
||||
|
||||
// WriteByteTimeout is the timeout after which a connection will be
|
||||
// closed if no data can be written to it. The timeout begins when data is
|
||||
// available to write, and is extended whenever any bytes are written.
|
||||
// If zero or negative, there is no timeout.
|
||||
//
|
||||
// Deprecated: Use [http.Server.HTTP2] and
|
||||
// [http.HTTP2Config.WriteByteTimeout] instead.
|
||||
WriteByteTimeout time.Duration
|
||||
|
||||
// MaxUploadBufferPerConnection is the size of the initial flow
|
||||
@@ -108,12 +142,18 @@ type Server struct {
|
||||
// allow this to be smaller than 65535 or larger than 2^32-1.
|
||||
// If the value is outside this range, a default value will be
|
||||
// used instead.
|
||||
//
|
||||
// Deprecated: Use [http.Server.HTTP2] and
|
||||
// [http.HTTP2Config.MaxReceiveBufferPerConnection] instead.
|
||||
MaxUploadBufferPerConnection int32
|
||||
|
||||
// MaxUploadBufferPerStream is the size of the initial flow control
|
||||
// window for each stream. The HTTP/2 spec does not allow this to
|
||||
// be larger than 2^32-1. If the value is zero or larger than the
|
||||
// maximum, a default value will be used instead.
|
||||
//
|
||||
// Deprecated: Use [http.Server.HTTP2] and
|
||||
// [http.HTTP2Config.MaxReceiveBufferPerStream] instead.
|
||||
MaxUploadBufferPerStream int32
|
||||
|
||||
// NewWriteScheduler constructs a write scheduler for a connection.
|
||||
@@ -126,6 +166,9 @@ type Server struct {
|
||||
// It's intended to increment a metric for monitoring, such
|
||||
// as an expvar or Prometheus metric.
|
||||
// The errType consists of only ASCII word characters.
|
||||
//
|
||||
// Deprecated: Use [http.Server.HTTP2] and
|
||||
// [http.HTTP2Config.CountError] instead.
|
||||
CountError func(errType string)
|
||||
|
||||
// Internal state. This is a pointer (rather than embedded directly)
|
||||
@@ -135,6 +178,8 @@ type Server struct {
|
||||
}
|
||||
|
||||
// ServeConnOpts are options for the Server.ServeConn method.
|
||||
//
|
||||
// Deprecated: ServeConnOpts is deprecated.
|
||||
type ServeConnOpts struct {
|
||||
// Context is the base context to use.
|
||||
// If nil, context.Background is used.
|
||||
@@ -178,6 +223,8 @@ type ServeConnOpts struct {
|
||||
// implemented in terms of providing a suitably-behaving net.Conn.
|
||||
//
|
||||
// The opts parameter is optional. If nil, default values are used.
|
||||
//
|
||||
// Deprecated: Use [http.Server.Serve] or [http.Server.ServeTLS] instead.
|
||||
func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
|
||||
if opts == nil {
|
||||
opts = &ServeConnOpts{}
|
||||
|
||||
+16
@@ -10,9 +10,11 @@ package http2
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"net"
|
||||
"net/http"
|
||||
"slices"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
@@ -44,6 +46,20 @@ func configureServer(s *http.Server, conf *Server) error {
|
||||
h2.IdleTimeout = h1.ReadTimeout
|
||||
}
|
||||
}
|
||||
|
||||
// Register h2 and http/1.1 ALPN protocols on s.TLSConfig, matching
|
||||
// the pre-wrapping implementation in server.go, so that TLS listeners
|
||||
// built from s.TLSConfig still negotiate HTTP/2.
|
||||
if s.TLSConfig == nil {
|
||||
s.TLSConfig = new(tls.Config)
|
||||
}
|
||||
if !slices.Contains(s.TLSConfig.NextProtos, NextProtoTLS) {
|
||||
s.TLSConfig.NextProtos = append(s.TLSConfig.NextProtos, NextProtoTLS)
|
||||
}
|
||||
if !slices.Contains(s.TLSConfig.NextProtos, "http/1.1") {
|
||||
s.TLSConfig.NextProtos = append(s.TLSConfig.NextProtos, "http/1.1")
|
||||
}
|
||||
|
||||
conf.state = &serverInternalState{
|
||||
s1: s,
|
||||
}
|
||||
|
||||
+2
@@ -184,6 +184,8 @@ func (t *Transport) initConnPool() {
|
||||
|
||||
// ClientConn is the state of a single HTTP/2 client connection to an
|
||||
// HTTP/2 server.
|
||||
//
|
||||
// Deprecated: Use [http.ClientConn] instead.
|
||||
type ClientConn struct {
|
||||
t *Transport
|
||||
tconn net.Conn // usually *tls.Conn, except specialized impls
|
||||
|
||||
+74
-5
@@ -24,6 +24,8 @@ import (
|
||||
// It returns an error if t1 has already been HTTP/2-enabled.
|
||||
//
|
||||
// Use ConfigureTransports instead to configure the HTTP/2 Transport.
|
||||
//
|
||||
// Deprecated: Set [http.Transport.Protocols] instead.
|
||||
func ConfigureTransport(t1 *http.Transport) error {
|
||||
return configureTransport(t1)
|
||||
}
|
||||
@@ -31,6 +33,8 @@ func ConfigureTransport(t1 *http.Transport) error {
|
||||
// ConfigureTransports configures a net/http HTTP/1 Transport to use HTTP/2.
|
||||
// It returns a new HTTP/2 Transport for further configuration.
|
||||
// It returns an error if t1 has already been HTTP/2-enabled.
|
||||
//
|
||||
// Deprecated: Set [http.Transport.Protocols] instead.
|
||||
func ConfigureTransports(t1 *http.Transport) (*Transport, error) {
|
||||
return configureTransports(t1)
|
||||
}
|
||||
@@ -39,6 +43,8 @@ func ConfigureTransports(t1 *http.Transport) (*Transport, error) {
|
||||
//
|
||||
// A Transport internally caches connections to servers. It is safe
|
||||
// for concurrent use by multiple goroutines.
|
||||
//
|
||||
// Deprecated: Use [http.Transport] instead.
|
||||
type Transport struct {
|
||||
// DialTLSContext specifies an optional dial function with context for
|
||||
// creating TLS connections for requests.
|
||||
@@ -47,6 +53,8 @@ type Transport struct {
|
||||
//
|
||||
// If the returned net.Conn has a ConnectionState method like tls.Conn,
|
||||
// it will be used to set http.Response.TLS.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.DialTLSContext] instead.
|
||||
DialTLSContext func(ctx context.Context, network, addr string, cfg *tls.Config) (net.Conn, error)
|
||||
|
||||
// DialTLS specifies an optional dial function for creating
|
||||
@@ -54,17 +62,21 @@ type Transport struct {
|
||||
//
|
||||
// If DialTLSContext and DialTLS is nil, tls.Dial is used.
|
||||
//
|
||||
// Deprecated: Use DialTLSContext instead, which allows the transport
|
||||
// to cancel dials as soon as they are no longer needed.
|
||||
// If both are set, DialTLSContext takes priority.
|
||||
// Deprecated: Use [http.Transport.DialTLSContext] instead.
|
||||
DialTLS func(network, addr string, cfg *tls.Config) (net.Conn, error)
|
||||
|
||||
// TLSClientConfig specifies the TLS configuration to use with
|
||||
// tls.Client. If nil, the default configuration is used.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.TLSClientConfig] instead.
|
||||
TLSClientConfig *tls.Config
|
||||
|
||||
// ConnPool optionally specifies an alternate connection pool to use.
|
||||
// If nil, the default is used.
|
||||
//
|
||||
// Deprecated: To create a custom connection pool, implement
|
||||
// [http.RoundTripper]. Use [http.Transport.NewClientConn]
|
||||
// to create connections for the pool.
|
||||
ConnPool ClientConnPool
|
||||
|
||||
// DisableCompression, if true, prevents the Transport from
|
||||
@@ -75,10 +87,14 @@ type Transport struct {
|
||||
// decoded in the Response.Body. However, if the user
|
||||
// explicitly requested gzip it is not automatically
|
||||
// uncompressed.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.DisableCompression] instead.
|
||||
DisableCompression bool
|
||||
|
||||
// AllowHTTP, if true, permits HTTP/2 requests using the insecure,
|
||||
// plain-text "http" scheme. Note that this does not enable h2c support.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.Protocols] instead.
|
||||
AllowHTTP bool
|
||||
|
||||
// MaxHeaderListSize is the http2 SETTINGS_MAX_HEADER_LIST_SIZE to
|
||||
@@ -88,6 +104,8 @@ type Transport struct {
|
||||
// want to advertise an unlimited value to the peer, Transport
|
||||
// interprets the highest possible value here (0xffffffff or 1<<32-1)
|
||||
// to mean no limit.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.MaxResponseHeaderBytes] instead.
|
||||
MaxHeaderListSize uint32
|
||||
|
||||
// MaxReadFrameSize is the http2 SETTINGS_MAX_FRAME_SIZE to send in the
|
||||
@@ -97,6 +115,9 @@ type Transport struct {
|
||||
// according to the spec:
|
||||
// https://datatracker.ietf.org/doc/html/rfc7540#section-6.5.2.
|
||||
// Values are bounded in the range 16k to 16M.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.HTTP2] and
|
||||
// [http.HTTP2Config.MaxReadFrameSize] instead.
|
||||
MaxReadFrameSize uint32
|
||||
|
||||
// MaxDecoderHeaderTableSize optionally specifies the http2
|
||||
@@ -104,12 +125,18 @@ type Transport struct {
|
||||
// informs the remote endpoint of the maximum size of the header compression
|
||||
// table used to decode header blocks, in octets. If zero, the default value
|
||||
// of 4096 is used.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.HTTP2] and
|
||||
// [http.HTTP2Config.MaxDecoderHeaderTableSize] instead.
|
||||
MaxDecoderHeaderTableSize uint32
|
||||
|
||||
// MaxEncoderHeaderTableSize optionally specifies an upper limit for the
|
||||
// header compression table used for encoding request headers. Received
|
||||
// SETTINGS_HEADER_TABLE_SIZE settings are capped at this limit. If zero,
|
||||
// the default value of 4096 is used.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.HTTP2] and
|
||||
// [http.HTTP2Config.MaxEncoderHeaderTableSize] instead.
|
||||
MaxEncoderHeaderTableSize uint32
|
||||
|
||||
// StrictMaxConcurrentStreams controls whether the server's
|
||||
@@ -120,12 +147,17 @@ type Transport struct {
|
||||
// server's SETTINGS_MAX_CONCURRENT_STREAMS is interpreted as
|
||||
// a global limit and callers of RoundTrip block when needed,
|
||||
// waiting for their turn.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.HTTP2] and
|
||||
// [http.HTTP2Config.StrictMaxConcurrentRequests] instead.
|
||||
StrictMaxConcurrentStreams bool
|
||||
|
||||
// IdleConnTimeout is the maximum amount of time an idle
|
||||
// (keep-alive) connection will remain idle before closing
|
||||
// itself.
|
||||
// Zero means no limit.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.IdleConnTimeout] instead.
|
||||
IdleConnTimeout time.Duration
|
||||
|
||||
// ReadIdleTimeout is the timeout after which a health check using ping
|
||||
@@ -134,22 +166,34 @@ type Transport struct {
|
||||
// there is no other traffic on the connection, the health check will
|
||||
// be performed every ReadIdleTimeout interval.
|
||||
// If zero, no health check is performed.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.HTTP2] and
|
||||
// [http.HTTP2Config.SendPingTimeout] instead.
|
||||
ReadIdleTimeout time.Duration
|
||||
|
||||
// PingTimeout is the timeout after which the connection will be closed
|
||||
// if a response to Ping is not received.
|
||||
// Defaults to 15s.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.HTTP2] and
|
||||
// [http.HTTP2Config.PingTimeout] instead.
|
||||
PingTimeout time.Duration
|
||||
|
||||
// WriteByteTimeout is the timeout after which the connection will be
|
||||
// closed no data can be written to it. The timeout begins when data is
|
||||
// available to write, and is extended whenever any bytes are written.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.HTTP2] and
|
||||
// [http.HTTP2Config.WriteByteTimeout] instead.
|
||||
WriteByteTimeout time.Duration
|
||||
|
||||
// CountError, if non-nil, is called on HTTP/2 transport errors.
|
||||
// It's intended to increment a metric for monitoring, such
|
||||
// as an expvar or Prometheus metric.
|
||||
// The errType consists of only ASCII word characters.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.HTTP2] and
|
||||
// [http.HTTP2Config.CountError] instead.
|
||||
CountError func(errType string)
|
||||
|
||||
// Internal state, differs between wrapped and non-wrapped implementations.
|
||||
@@ -165,6 +209,10 @@ var (
|
||||
)
|
||||
|
||||
// ClientConnPool manages a pool of HTTP/2 client connections.
|
||||
//
|
||||
// Deprecated: To create a custom connection pool, implement
|
||||
// [http.RoundTripper]. Use [http.Transport.NewClientConn]
|
||||
// to create connections for the pool.
|
||||
type ClientConnPool interface {
|
||||
// GetClientConn returns a specific HTTP/2 connection (usually
|
||||
// a TLS-TCP connection) to an HTTP/2 server. On success, the
|
||||
@@ -177,6 +225,8 @@ type ClientConnPool interface {
|
||||
}
|
||||
|
||||
// ClientConnState describes the state of a ClientConn.
|
||||
//
|
||||
// Deprecated: Use [http.ClientConn] instead.
|
||||
type ClientConnState struct {
|
||||
// Closed is whether the connection is closed.
|
||||
Closed bool
|
||||
@@ -210,6 +260,8 @@ type ClientConnState struct {
|
||||
}
|
||||
|
||||
// RoundTripOpt are options for the Transport.RoundTripOpt method.
|
||||
//
|
||||
// Deprecated: There are no options to set.
|
||||
type RoundTripOpt struct {
|
||||
// OnlyCachedConn controls whether RoundTripOpt may
|
||||
// create a new TCP connection. If set true and
|
||||
@@ -222,11 +274,14 @@ type RoundTripOpt struct {
|
||||
allowHTTP bool // allow http:// URLs
|
||||
}
|
||||
|
||||
// Deprecated: Use [http.Transport.RoundTrip] instead.
|
||||
func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||
return t.RoundTripOpt(req, RoundTripOpt{})
|
||||
}
|
||||
|
||||
// RoundTripOpt is like RoundTrip, but takes options.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.RoundTrip] instead.
|
||||
func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) {
|
||||
return t.roundTripOpt(req, opt)
|
||||
}
|
||||
@@ -234,10 +289,15 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res
|
||||
// CloseIdleConnections closes any connections which were previously
|
||||
// connected from previous requests but are now sitting idle.
|
||||
// It does not interrupt any connections currently in use.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.CloseIdleConnections] instead.
|
||||
func (t *Transport) CloseIdleConnections() {
|
||||
t.closeIdleConnections()
|
||||
}
|
||||
|
||||
// NewClientConn is deprecated.
|
||||
//
|
||||
// Deprecated: Use [http.Transport.NewClientConn] instead.
|
||||
func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) {
|
||||
return t.newUserClientConn(c)
|
||||
}
|
||||
@@ -256,8 +316,15 @@ func authorityAddr(scheme string, authority string) (addr string) {
|
||||
port = "80"
|
||||
}
|
||||
}
|
||||
if a, err := idna.ToASCII(host); err == nil {
|
||||
host = a
|
||||
// Skip IDNA processing on hosts which are already ASCII.
|
||||
// This is consistent with net/http and the WHATWG URL Specification.
|
||||
// (We currently don't follow all of WHATWG, but we're aligned on
|
||||
// permitting all-ASCII hostnames which fail IDNA validation.
|
||||
// There are existing, valid domain names which TR #46 processing rejects.)
|
||||
if !isASCII(host) {
|
||||
if a, err := idna.Lookup.ToASCII(host); err == nil && a != "" {
|
||||
host = a
|
||||
}
|
||||
}
|
||||
// IPv6 address literal, without a port:
|
||||
if strings.HasPrefix(host, "[") && strings.HasSuffix(host, "]") {
|
||||
@@ -414,6 +481,8 @@ func (t *Transport) dialTLSWithContext(ctx context.Context, network, addr string
|
||||
|
||||
// GoAwayError is returned by the Transport when the server closes the
|
||||
// TCP connection after sending a GOAWAY frame.
|
||||
//
|
||||
// Deprecated: GoAwayError is deprecated.
|
||||
type GoAwayError struct {
|
||||
LastStreamID uint32
|
||||
ErrCode ErrCode
|
||||
|
||||
+60
-32
@@ -22,8 +22,8 @@ import (
|
||||
)
|
||||
|
||||
func configureTransport(t1 *http.Transport) error {
|
||||
// ConfigureTransport is a no-op: The http.Transport already supports HTTP/2.
|
||||
return nil
|
||||
_, err := configureTransports(t1)
|
||||
return err
|
||||
}
|
||||
|
||||
func configureTransports(t1 *http.Transport) (*Transport, error) {
|
||||
@@ -31,6 +31,17 @@ func configureTransports(t1 *http.Transport) (*Transport, error) {
|
||||
// linked to the http.Transport's.
|
||||
tr2 := &Transport{}
|
||||
tr2.configure(t1)
|
||||
// Enable HTTP/2 on the transport, as the pre-wrapping implementation did:
|
||||
// net/http does not auto-enable it for a transport with a custom
|
||||
// TLSClientConfig or dialer.
|
||||
if t1.TLSClientConfig == nil {
|
||||
t1.TLSClientConfig = &tls.Config{}
|
||||
}
|
||||
if t1.Protocols == nil {
|
||||
t1.Protocols = new(http.Protocols)
|
||||
t1.Protocols.SetHTTP1(true)
|
||||
}
|
||||
t1.Protocols.SetHTTP2(true)
|
||||
return tr2, nil
|
||||
}
|
||||
|
||||
@@ -44,7 +55,7 @@ type transportConfig struct {
|
||||
// Registered is called by net/http.Transport.RegisterProtocol,
|
||||
// to let us know that it understands the registration mechanism we're using.
|
||||
func (t transportConfig) Registered(t1 *http.Transport) {
|
||||
t.t.t1 = t1
|
||||
t.t.lazyt1 = t1
|
||||
}
|
||||
|
||||
func (t transportConfig) DisableCompression() bool {
|
||||
@@ -134,29 +145,30 @@ func (t transportConfig) DialFromContext(ctx context.Context, network, address s
|
||||
|
||||
type transportInternal struct {
|
||||
initOnce sync.Once
|
||||
t1 *http.Transport
|
||||
lazyt1 *http.Transport
|
||||
}
|
||||
|
||||
func (t *Transport) init() {
|
||||
func (t *Transport) init() *http.Transport {
|
||||
t.initOnce.Do(func() {
|
||||
if t.t1 != nil {
|
||||
if t.lazyt1 != nil {
|
||||
return
|
||||
}
|
||||
t1 := &http.Transport{}
|
||||
t.configure(t1)
|
||||
})
|
||||
return t.lazyt1
|
||||
}
|
||||
|
||||
func (t *Transport) configure(t1 *http.Transport) {
|
||||
t1.RegisterProtocol("http/2", transportConfig{t})
|
||||
// tr2.t1 is set by transportConfig.Registered.
|
||||
if t.t1 != t1 {
|
||||
// tr2.lazyt1 is set by transportConfig.Registered.
|
||||
if t.lazyt1 != t1 {
|
||||
panic("http2: net/http does not support this version of x/net/http2")
|
||||
}
|
||||
}
|
||||
|
||||
func (t *Transport) roundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) {
|
||||
t.init()
|
||||
t1 := t.init()
|
||||
|
||||
if req.URL.Scheme == "http" && !t.AllowHTTP {
|
||||
return nil, errors.New("http2: unencrypted HTTP/2 not enabled")
|
||||
@@ -177,22 +189,23 @@ func (t *Transport) roundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res
|
||||
ctx := context.WithValue(req.Context(), http2TransportContextKey{}, t)
|
||||
req = req.WithContext(ctx)
|
||||
|
||||
return t.t1.RoundTrip(req)
|
||||
return t1.RoundTrip(req)
|
||||
}
|
||||
|
||||
func (t *Transport) closeIdleConnections() {
|
||||
t.init()
|
||||
t.t1.CloseIdleConnections()
|
||||
t1 := t.init()
|
||||
t1.CloseIdleConnections()
|
||||
}
|
||||
|
||||
func (t *Transport) newUserClientConn(c net.Conn) (*ClientConn, error) {
|
||||
t1 := t.init()
|
||||
// http.Transport's NewClientConn doesn't provide a supported way to create
|
||||
// a connection from a net.Conn. (This might be useful to add in the future?)
|
||||
// We're going to craftily sneak one in via the context key, with the
|
||||
// scheme of "http/2" telling NewClientConn to look for it.
|
||||
ctx := context.WithValue(context.Background(), netConnContextKey{}, c)
|
||||
|
||||
nhcc, err := t.t1.NewClientConn(ctx, "http/2", "")
|
||||
nhcc, err := t1.NewClientConn(ctx, "http/2", "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -203,6 +216,8 @@ func (t *Transport) newUserClientConn(c net.Conn) (*ClientConn, error) {
|
||||
|
||||
// ClientConn is the state of a single HTTP/2 client connection to an
|
||||
// HTTP/2 server.
|
||||
//
|
||||
// Deprecated: Use [http.ClientConn] instead.
|
||||
type ClientConn struct {
|
||||
cc *http.ClientConn
|
||||
tconn net.Conn
|
||||
@@ -224,32 +239,40 @@ type ClientConn struct {
|
||||
}
|
||||
|
||||
func (cc *ClientConn) roundTrip(req *http.Request) (*http.Response, error) {
|
||||
err := func() error {
|
||||
haveReservation, err := func() (bool, error) {
|
||||
cc.mu.Lock()
|
||||
defer cc.mu.Unlock()
|
||||
if cc.doNotReuse {
|
||||
return errClientConnUnusable
|
||||
}
|
||||
cc.roundTrips++
|
||||
if cc.reserved > 0 {
|
||||
// We've already reserved a concurrency slot for this request.
|
||||
cc.reserved--
|
||||
} else if cc.cc.Reserve() != nil {
|
||||
// We don't seem to have an available concurrency slot,
|
||||
// so bump the pending count (requests waiting for a slot).
|
||||
cc.pending++
|
||||
return false, errClientConnUnusable
|
||||
}
|
||||
|
||||
// ClientConn.Shutdown will not shut down the conn while
|
||||
// cc.starting > 0 or cc.cc.InFlight() > 0.
|
||||
//
|
||||
// The starting state covers the gap between us deciding to
|
||||
// start sending the request, and actually sending it.
|
||||
cc.starting++
|
||||
return nil
|
||||
|
||||
cc.roundTrips++
|
||||
if cc.reserved == 0 {
|
||||
// We do not have a concurrency slot reserved for this request.
|
||||
return false, nil
|
||||
}
|
||||
cc.reserved--
|
||||
return true, nil
|
||||
}()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// If we have no reservation, try to acquire one.
|
||||
// (This must be done without cc.mu held, since Reserve may call back to the state hook.)
|
||||
if !haveReservation && cc.cc.Reserve() != nil {
|
||||
// We could not acquire a concurrency slot, so bump the pending count
|
||||
// (requests waiting for a slot).
|
||||
cc.mu.Lock()
|
||||
cc.pending++
|
||||
cc.mu.Unlock()
|
||||
}
|
||||
resp, err := cc.cc.RoundTrip(req)
|
||||
cc.mu.Lock()
|
||||
cc.starting--
|
||||
@@ -280,16 +303,21 @@ func (cc *ClientConn) ping(ctx context.Context) error {
|
||||
}
|
||||
|
||||
func (cc *ClientConn) reserveNewRequest() bool {
|
||||
cc.mu.Lock()
|
||||
defer cc.mu.Unlock()
|
||||
if cc.doNotReuse {
|
||||
return false
|
||||
}
|
||||
if err := cc.cc.Reserve(); err != nil {
|
||||
return false
|
||||
}
|
||||
cc.reserved++
|
||||
return true
|
||||
reserved := true
|
||||
cc.mu.Lock()
|
||||
if cc.doNotReuse {
|
||||
reserved = false
|
||||
} else {
|
||||
cc.reserved++
|
||||
}
|
||||
cc.mu.Unlock()
|
||||
if !reserved {
|
||||
cc.cc.Release()
|
||||
}
|
||||
return reserved
|
||||
}
|
||||
|
||||
func (cc *ClientConn) setDoNotReuse() {
|
||||
|
||||
+5
-1
@@ -400,7 +400,11 @@ func (p *Profile) process(s string, toASCII bool) (string, error) {
|
||||
// Spec says keep the old label.
|
||||
continue
|
||||
}
|
||||
if unicode16 && err == nil && len(u) > 0 && isASCII(u) {
|
||||
if err == nil && len(u) > 0 && isASCII(u) {
|
||||
// UTS 43 pre-revision 33 doesn't classify a xn-- label
|
||||
// which contains only ASCII characters as an error,
|
||||
// but that's a specification bug and a security issue.
|
||||
// Always return an error in this case.
|
||||
err = punyError(enc)
|
||||
}
|
||||
isBidi = isBidi || bidirule.DirectionString(u) != bidi.LeftToRight
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
These two packages are identical:
|
||||
|
||||
- net/http/internal/httpcommon
|
||||
- golang.org/x/net/internal/httpcommon
|
||||
|
||||
The two are kept in sync manually.
|
||||
Any change to one should be made in the other.
|
||||
+31
-3
@@ -391,6 +391,7 @@ type ServerRequestParam struct {
|
||||
// ServerRequestResult is the result of NewServerRequest.
|
||||
type ServerRequestResult struct {
|
||||
// Various http.Request fields.
|
||||
Host string
|
||||
URL *url.URL
|
||||
RequestURI string
|
||||
Trailer map[string][]string
|
||||
@@ -433,20 +434,46 @@ func NewServerRequest(rp ServerRequestParam) ServerRequestResult {
|
||||
}
|
||||
delete(rp.Header, "Trailer")
|
||||
|
||||
authority := rp.Authority
|
||||
if host := rp.Header["Host"]; len(host) == 1 {
|
||||
// HTTP/2 and HTTP/3 permit the Host header to be present,
|
||||
// but it must match the :authority pseudo-header.
|
||||
if authority == "" {
|
||||
authority = host[0]
|
||||
} else if host[0] != authority {
|
||||
return ServerRequestResult{
|
||||
InvalidReason: "authority_host_mismatch",
|
||||
}
|
||||
}
|
||||
delete(rp.Header, "Host")
|
||||
} else if len(host) > 1 {
|
||||
// HTTP/1.1 rejects any request containing more than one Host header.
|
||||
// HTTP/2 and HTTP/3 don't use the Host header, but reject multiple anyway.
|
||||
return ServerRequestResult{
|
||||
InvalidReason: "multiple_host_headers",
|
||||
}
|
||||
}
|
||||
|
||||
// "':authority' MUST NOT include the deprecated userinfo subcomponent
|
||||
// for "http" or "https" schemed URIs."
|
||||
// https://www.rfc-editor.org/rfc/rfc9113.html#section-8.3.1-2.3.8
|
||||
if strings.IndexByte(rp.Authority, '@') != -1 && (rp.Scheme == "http" || rp.Scheme == "https") {
|
||||
if strings.IndexByte(authority, '@') != -1 && (rp.Scheme == "http" || rp.Scheme == "https") {
|
||||
return ServerRequestResult{
|
||||
InvalidReason: "userinfo_in_authority",
|
||||
}
|
||||
}
|
||||
|
||||
if authority != "" && !httpguts.ValidHostHeader(authority) {
|
||||
return ServerRequestResult{
|
||||
InvalidReason: "invalid_authority",
|
||||
}
|
||||
}
|
||||
|
||||
var url_ *url.URL
|
||||
var requestURI string
|
||||
if rp.Method == "CONNECT" && rp.Protocol == "" {
|
||||
url_ = &url.URL{Host: rp.Authority}
|
||||
requestURI = rp.Authority // mimic HTTP/1 server behavior
|
||||
url_ = &url.URL{Host: authority}
|
||||
requestURI = authority // mimic HTTP/1 server behavior
|
||||
} else {
|
||||
// "[The :path] pseudo-header field MUST NOT be empty [...]"
|
||||
// https://www.rfc-editor.org/rfc/rfc9113.html#section-8.3.1-2.4.2
|
||||
@@ -467,6 +494,7 @@ func NewServerRequest(rp ServerRequestParam) ServerRequestResult {
|
||||
}
|
||||
|
||||
return ServerRequestResult{
|
||||
Host: authority,
|
||||
URL: url_,
|
||||
NeedsContinue: needsContinue,
|
||||
RequestURI: requestURI,
|
||||
|
||||
+1
-4
@@ -70,10 +70,7 @@ func log2(i int64) int {
|
||||
}
|
||||
|
||||
func getBucket(i int64) (index int) {
|
||||
index = log2(i) - 1
|
||||
if index < 0 {
|
||||
index = 0
|
||||
}
|
||||
index = max(log2(i)-1, 0)
|
||||
if index >= bucketCount {
|
||||
index = bucketCount - 1
|
||||
}
|
||||
|
||||
+1
-1
@@ -109,7 +109,7 @@ func (g *Group) TryGo(f func() error) bool {
|
||||
if g.sem != nil {
|
||||
select {
|
||||
case g.sem <- token{}:
|
||||
// Note: this allows barging iff channels in general allow barging.
|
||||
// Note: this allows barging if and only if channels in general allow barging.
|
||||
default:
|
||||
return false
|
||||
}
|
||||
|
||||
+24
-12
@@ -17,14 +17,17 @@ type waiter struct {
|
||||
}
|
||||
|
||||
// NewWeighted creates a new weighted semaphore with the given
|
||||
// maximum combined weight for concurrent access.
|
||||
// maximum combined weight for concurrent access. NewWeighted panics if n is
|
||||
// negative.
|
||||
func NewWeighted(n int64) *Weighted {
|
||||
w := &Weighted{size: n}
|
||||
return w
|
||||
if n < 0 {
|
||||
panic("semaphore: size < 0")
|
||||
}
|
||||
return &Weighted{size: n}
|
||||
}
|
||||
|
||||
// Weighted provides a way to bound concurrent access to a resource.
|
||||
// The callers can request access with a given weight.
|
||||
// The callers can request access with a given non-negative weight.
|
||||
type Weighted struct {
|
||||
size int64
|
||||
cur int64
|
||||
@@ -32,10 +35,13 @@ type Weighted struct {
|
||||
waiters list.List
|
||||
}
|
||||
|
||||
// Acquire acquires the semaphore with a weight of n, blocking until resources
|
||||
// Acquire acquires the semaphore with a non-negative weight of n, blocking until resources
|
||||
// are available or ctx is done. On success, returns nil. On failure, returns
|
||||
// ctx.Err() and leaves the semaphore unchanged.
|
||||
func (s *Weighted) Acquire(ctx context.Context, n int64) error {
|
||||
if n < 0 {
|
||||
panic("semaphore: n < 0")
|
||||
}
|
||||
done := ctx.Done()
|
||||
|
||||
s.mu.Lock()
|
||||
@@ -83,7 +89,7 @@ func (s *Weighted) Acquire(ctx context.Context, n int64) error {
|
||||
default:
|
||||
isFront := s.waiters.Front() == elem
|
||||
s.waiters.Remove(elem)
|
||||
// If we're at the front and there're extra tokens left, notify other waiters.
|
||||
// If we're at the front and there are extra tokens left, notify other waiters.
|
||||
if isFront && s.size > s.cur {
|
||||
s.notifyWaiters()
|
||||
}
|
||||
@@ -106,9 +112,12 @@ func (s *Weighted) Acquire(ctx context.Context, n int64) error {
|
||||
}
|
||||
}
|
||||
|
||||
// TryAcquire acquires the semaphore with a weight of n without blocking.
|
||||
// TryAcquire acquires the semaphore with a non-negative weight of n without blocking.
|
||||
// On success, returns true. On failure, returns false and leaves the semaphore unchanged.
|
||||
func (s *Weighted) TryAcquire(n int64) bool {
|
||||
if n < 0 {
|
||||
panic("semaphore: n < 0")
|
||||
}
|
||||
s.mu.Lock()
|
||||
success := s.size-s.cur >= n && s.waiters.Len() == 0
|
||||
if success {
|
||||
@@ -118,8 +127,11 @@ func (s *Weighted) TryAcquire(n int64) bool {
|
||||
return success
|
||||
}
|
||||
|
||||
// Release releases the semaphore with a weight of n.
|
||||
// Release releases the semaphore with a non-negative weight of n.
|
||||
func (s *Weighted) Release(n int64) {
|
||||
if n < 0 {
|
||||
panic("semaphore: n < 0")
|
||||
}
|
||||
s.mu.Lock()
|
||||
s.cur -= n
|
||||
if s.cur < 0 {
|
||||
@@ -139,15 +151,15 @@ func (s *Weighted) notifyWaiters() {
|
||||
|
||||
w := next.Value.(waiter)
|
||||
if s.size-s.cur < w.n {
|
||||
// Not enough tokens for the next waiter. We could keep going (to try to
|
||||
// Not enough tokens for the next waiter. We could keep going (to try to
|
||||
// find a waiter with a smaller request), but under load that could cause
|
||||
// starvation for large requests; instead, we leave all remaining waiters
|
||||
// blocked.
|
||||
//
|
||||
// Consider a semaphore used as a read-write lock, with N tokens, N
|
||||
// readers, and one writer. Each reader can Acquire(1) to obtain a read
|
||||
// lock. The writer can Acquire(N) to obtain a write lock, excluding all
|
||||
// of the readers. If we allow the readers to jump ahead in the queue,
|
||||
// readers, and one writer. Each reader can Acquire(1) to obtain a read
|
||||
// lock. The writer can Acquire(N) to obtain a write lock, excluding all
|
||||
// of the readers. If we allow the readers to jump ahead in the queue,
|
||||
// the writer will starve — there is always one token available for every
|
||||
// reader.
|
||||
break
|
||||
|
||||
+15
-6
@@ -182,12 +182,13 @@ var MIPS64X struct {
|
||||
// require kernel support to work (DARN, SCV), so there are feature bits for
|
||||
// those as well. The struct is padded to avoid false sharing.
|
||||
var PPC64 struct {
|
||||
_ CacheLinePad
|
||||
HasDARN bool // Hardware random number generator (requires kernel enablement)
|
||||
HasSCV bool // Syscall vectored (requires kernel enablement)
|
||||
IsPOWER8 bool // ISA v2.07 (POWER8)
|
||||
IsPOWER9 bool // ISA v3.00 (POWER9), implies IsPOWER8
|
||||
_ CacheLinePad
|
||||
_ CacheLinePad
|
||||
HasDARN bool // Hardware random number generator (requires kernel enablement)
|
||||
HasSCV bool // Syscall vectored (requires kernel enablement)
|
||||
IsPOWER8 bool // ISA v2.07 (POWER8)
|
||||
IsPOWER9 bool // ISA v3.00 (POWER9), implies IsPOWER8
|
||||
IsPOWER10 bool // ISA v3.1 (POWER10 and POWER11; POWER11 did not add a new architected level), implies IsPOWER9
|
||||
_ CacheLinePad
|
||||
}
|
||||
|
||||
// S390X contains the supported CPU features of the current IBM Z
|
||||
@@ -248,13 +249,21 @@ var RISCV64 struct {
|
||||
HasZvks bool // ShangMi Algorithm Suite
|
||||
HasZvksc bool // ShangMi Algorithm Suite with carryless multiplication
|
||||
HasZvksg bool // ShangMi Algorithm Suite with GCM
|
||||
VLENB uint // Vector register length in bytes, 0 if undetected
|
||||
_ CacheLinePad
|
||||
}
|
||||
|
||||
// doDerived, if non-nil, is called after processing GODEBUG to set "derived"
|
||||
// feature flags.
|
||||
var doDerived func()
|
||||
|
||||
func init() {
|
||||
archInit()
|
||||
initOptions()
|
||||
processOptions()
|
||||
if doDerived != nil {
|
||||
doDerived()
|
||||
}
|
||||
}
|
||||
|
||||
// options contains the cpu debug options that can be used in GODEBUG.
|
||||
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
// Copyright 2026 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build gc
|
||||
|
||||
package cpu
|
||||
|
||||
// Can only be called when the vector extension is present.
|
||||
// Implemented in cpu_riscv64.s.
|
||||
func readVLENB() uint
|
||||
+4
@@ -11,6 +11,7 @@ const (
|
||||
// ISA Level
|
||||
_PPC_FEATURE2_ARCH_2_07 = 0x80000000
|
||||
_PPC_FEATURE2_ARCH_3_00 = 0x00800000
|
||||
_PPC_FEATURE2_ARCH_3_1 = 0x00040000
|
||||
|
||||
// CPU features
|
||||
_PPC_FEATURE2_DARN = 0x00200000
|
||||
@@ -21,6 +22,9 @@ func doinit() {
|
||||
// HWCAP2 feature bits
|
||||
PPC64.IsPOWER8 = isSet(hwCap2, _PPC_FEATURE2_ARCH_2_07)
|
||||
PPC64.IsPOWER9 = isSet(hwCap2, _PPC_FEATURE2_ARCH_3_00)
|
||||
// ISA 3.1 covers both POWER10 and POWER11: POWER11 did not introduce a
|
||||
// new architected HWCAP level, so there is no separate IsPOWER11.
|
||||
PPC64.IsPOWER10 = isSet(hwCap2, _PPC_FEATURE2_ARCH_3_1)
|
||||
PPC64.HasDARN = isSet(hwCap2, _PPC_FEATURE2_DARN)
|
||||
PPC64.HasSCV = isSet(hwCap2, _PPC_FEATURE2_SCV)
|
||||
}
|
||||
|
||||
+11
@@ -130,6 +130,9 @@ func doinit() {
|
||||
RISCV64.HasFastMisaligned = v == riscv_HWPROBE_MISALIGNED_FAST
|
||||
}
|
||||
}
|
||||
if RISCV64.HasV {
|
||||
RISCV64.VLENB = readVLENB()
|
||||
}
|
||||
|
||||
// Let's double check with HWCAP if the C extension does not appear to be supported.
|
||||
// This may happen if we're running on a kernel older than 6.4.
|
||||
@@ -137,6 +140,14 @@ func doinit() {
|
||||
if !RISCV64.HasC {
|
||||
RISCV64.HasC = isSet(hwCap, hwcap_RISCV_ISA_C)
|
||||
}
|
||||
|
||||
doDerived = func() {
|
||||
// If the vector extension is disabled by GODEBUG, then the VLENB is zero.
|
||||
if !RISCV64.HasV {
|
||||
RISCV64.VLENB = 0
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func isSet(hwc uint, value uint) bool {
|
||||
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
// Copyright 2026 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build netbsd && amd64 && gc
|
||||
|
||||
package cpu
|
||||
|
||||
func doinit() {
|
||||
// NetBSD corrupts avx registers when receiving signals.
|
||||
// See issue 80285.
|
||||
// TODO: when NetBSD fixes the bug, add a version
|
||||
// check and skip here.
|
||||
X86.HasAVX = false
|
||||
X86.HasAVX2 = false
|
||||
// Set these also, just to be safe
|
||||
X86.HasAVXVNNI = false
|
||||
X86.HasAVX512 = false
|
||||
X86.HasAVX512F = false
|
||||
X86.HasAVX512CD = false
|
||||
X86.HasAVX512CD = false
|
||||
X86.HasAVX512ER = false
|
||||
X86.HasAVX512PF = false
|
||||
X86.HasAVX512VL = false
|
||||
X86.HasAVX512BW = false
|
||||
X86.HasAVX512DQ = false
|
||||
X86.HasAVX512IFMA = false
|
||||
X86.HasAVX512VBMI = false
|
||||
X86.HasAVX5124VNNIW = false
|
||||
X86.HasAVX5124FMAPS = false
|
||||
X86.HasAVX512VPOPCNTDQ = false
|
||||
X86.HasAVX512VPCLMULQDQ = false
|
||||
X86.HasAVX512VNNI = false
|
||||
X86.HasAVX512GFNI = false
|
||||
X86.HasAVX512VAES = false
|
||||
X86.HasAVX512VBMI2 = false
|
||||
X86.HasAVX512BITALG = false
|
||||
X86.HasAVX512BF16 = false
|
||||
X86.HasAVXIFMA = false
|
||||
X86.HasAVXVNNI = false
|
||||
X86.HasAVXVNNIInt8 = false
|
||||
|
||||
}
|
||||
|
||||
func darwinSupportsAVX512() bool {
|
||||
panic("only implemented for gc && amd64 && darwin")
|
||||
}
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build 386 || amd64p32 || (amd64 && (!darwin || !gc))
|
||||
//go:build 386 || amd64p32 || (amd64 && ((!darwin && !netbsd) || !gc))
|
||||
|
||||
package cpu
|
||||
|
||||
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// Copyright 2026 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build gc
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
// Read the vector register length in bytes from the vlenb CSR.
|
||||
// May only be called when the vector extension is present.
|
||||
// func readVLENB() uint
|
||||
TEXT ·readVLENB(SB), NOSPLIT|NOFRAME, $0-8
|
||||
// Go 1.25's assembler does not recognize VLENB, so use its raw CSRR encoding.
|
||||
// Replace WORD with CSRR VLENB, X10 once go.mod requires Go 1.27.
|
||||
WORD $0xc2202573
|
||||
MOV X10, ret+0(FP)
|
||||
RET
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// Copyright 2026 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build sparc64
|
||||
|
||||
package cpu
|
||||
|
||||
// The L1 line is 32 bytes; false sharing is governed by the 64-byte L2 line.
|
||||
const cacheLineSize = 64
|
||||
|
||||
func initOptions() {}
|
||||
+37
-25
@@ -6,38 +6,50 @@ package cpu
|
||||
|
||||
import "strconv"
|
||||
|
||||
// parseRelease parses a dot-separated version number. It follows the semver
|
||||
// syntax, but allows the minor and patch versions to be elided.
|
||||
// parseRelease parses a dot-separated version number from the prefix
|
||||
// of rel. It returns ok=true only if at least the major and minor
|
||||
// components were successfully parsed; the patch component is
|
||||
// best-effort. Trailing vendor or build suffixes such as
|
||||
// "-generic", "+", "_hi3535", or "-rc1" are ignored.
|
||||
//
|
||||
// This is a copy of the Go runtime's parseRelease from
|
||||
// https://golang.org/cl/209597.
|
||||
// https://golang.org/cl/209597, updated in https://golang.org/cl/781800.
|
||||
func parseRelease(rel string) (major, minor, patch int, ok bool) {
|
||||
// Strip anything after a dash or plus.
|
||||
for i := range len(rel) {
|
||||
if rel[i] == '-' || rel[i] == '+' {
|
||||
rel = rel[:i]
|
||||
break
|
||||
// next consumes a run of decimal digits from the front of rel,
|
||||
// returning the parsed value. If the digits are followed by a
|
||||
// '.', it is consumed and more is set so the caller knows to
|
||||
// parse another component; otherwise scanning terminates and
|
||||
// the rest of rel is discarded.
|
||||
next := func() (n int, more, ok bool) {
|
||||
i := 0
|
||||
for i < len(rel) && rel[i] >= '0' && rel[i] <= '9' {
|
||||
i++
|
||||
}
|
||||
if i == 0 {
|
||||
return 0, false, false
|
||||
}
|
||||
n, err := strconv.Atoi(rel[:i])
|
||||
if err != nil {
|
||||
return 0, false, false
|
||||
}
|
||||
if i < len(rel) && rel[i] == '.' {
|
||||
rel = rel[i+1:]
|
||||
return n, true, true
|
||||
}
|
||||
rel = ""
|
||||
return n, false, true
|
||||
}
|
||||
|
||||
next := func() (int, bool) {
|
||||
for i := range len(rel) {
|
||||
if rel[i] == '.' {
|
||||
ver, err := strconv.Atoi(rel[:i])
|
||||
rel = rel[i+1:]
|
||||
return ver, err == nil
|
||||
}
|
||||
}
|
||||
ver, err := strconv.Atoi(rel)
|
||||
rel = ""
|
||||
return ver, err == nil
|
||||
var more bool
|
||||
if major, more, ok = next(); !ok || !more {
|
||||
return 0, 0, 0, false
|
||||
}
|
||||
if major, ok = next(); !ok || rel == "" {
|
||||
return
|
||||
if minor, more, ok = next(); !ok {
|
||||
return 0, 0, 0, false
|
||||
}
|
||||
if minor, ok = next(); !ok || rel == "" {
|
||||
return
|
||||
if !more {
|
||||
return major, minor, 0, true
|
||||
}
|
||||
patch, ok = next()
|
||||
return
|
||||
patch, _, _ = next()
|
||||
return major, minor, patch, true
|
||||
}
|
||||
+7
-1
@@ -22,7 +22,13 @@ import (
|
||||
// fields can be get and set using the following methods:
|
||||
// - Uint16/SetUint16: flags
|
||||
// - Uint32/SetUint32: ifindex, metric, mtu
|
||||
type Ifreq struct{ raw ifreq }
|
||||
type Ifreq struct {
|
||||
// Aligns the union for the accessors below, which cast it in place;
|
||||
// the generated ifreq is all byte arrays, so its alignment is one.
|
||||
_ [0]int64
|
||||
|
||||
raw ifreq
|
||||
}
|
||||
|
||||
// NewIfreq creates an Ifreq with the input network interface name after
|
||||
// validating the name does not exceed IFNAMSIZ-1 (trailing NULL required)
|
||||
|
||||
+7
@@ -332,3 +332,10 @@ func IoctlLoopSetStatus64(fd int, value *LoopInfo64) error {
|
||||
func IoctlLoopConfigure(fd int, value *LoopConfig) error {
|
||||
return ioctlPtr(fd, LOOP_CONFIGURE, unsafe.Pointer(value))
|
||||
}
|
||||
|
||||
// IoctlPidfdInfo fetches information about a pidfd.
|
||||
// The Mask field of the info argument indicates which
|
||||
// values to fetch.
|
||||
func IoctlPidfdInfo(fd int, info *PidfdInfo) error {
|
||||
return ioctlPtr(fd, PIDFD_GET_INFO, unsafe.Pointer(info))
|
||||
}
|
||||
+1
-8
@@ -290,14 +290,7 @@ struct ltchars {
|
||||
#include <mtd/mtd-user.h>
|
||||
#include <net/route.h>
|
||||
|
||||
#if defined(__sparc__)
|
||||
// On sparc{,64}, the kernel defines struct termios2 itself which clashes with the
|
||||
// definition in glibc. As only the error constants are needed here, include the
|
||||
// generic termibits.h (which is included by termbits.h on sparc).
|
||||
#include <asm-generic/termbits.h>
|
||||
#else
|
||||
#include <asm/termbits.h>
|
||||
#endif
|
||||
|
||||
#ifndef PTRACE_GETREGS
|
||||
#define PTRACE_GETREGS 0xc
|
||||
@@ -544,7 +537,7 @@ ccflags="$@"
|
||||
$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
|
||||
$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||
|
||||
$2 == "LOOP_CONFIGURE" ||
|
||||
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ ||
|
||||
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|MLOCK|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ ||
|
||||
$2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ ||
|
||||
$2 ~ /^NFC_.*_(MAX)?SIZE$/ ||
|
||||
$2 ~ /^PTP_/ ||
|
||||
|
||||
+1
-1
@@ -76,7 +76,7 @@ func BytePtrToString(p *byte) string {
|
||||
// Find NUL terminator.
|
||||
n := 0
|
||||
for ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ {
|
||||
ptr = unsafe.Pointer(uintptr(ptr) + 1)
|
||||
ptr = unsafe.Add(ptr, 1)
|
||||
}
|
||||
|
||||
return string(unsafe.Slice(p, n))
|
||||
|
||||
+1
-1
@@ -188,7 +188,7 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
||||
}
|
||||
sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL
|
||||
sa.raw.Family = AF_UNIX
|
||||
for i := 0; i < n; i++ {
|
||||
for i := range n {
|
||||
sa.raw.Path[i] = int8(name[i])
|
||||
}
|
||||
return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
|
||||
|
||||
+2
-1
@@ -1874,6 +1874,7 @@ func Dup2(oldfd, newfd int) error {
|
||||
//sys Dup3(oldfd int, newfd int, flags int) (err error)
|
||||
//sysnb EpollCreate1(flag int) (fd int, err error)
|
||||
//sysnb EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error)
|
||||
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
|
||||
//sys Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2
|
||||
//sys Exit(code int) = SYS_EXIT_GROUP
|
||||
//sys Fallocate(fd int, mode uint32, off int64, len int64) (err error)
|
||||
@@ -2362,7 +2363,7 @@ func (fh *FileHandle) Bytes() []byte {
|
||||
if n == 0 {
|
||||
return nil
|
||||
}
|
||||
return unsafe.Slice((*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type))+4)), n)
|
||||
return unsafe.Slice((*byte)(unsafe.Add(unsafe.Pointer(&fh.fileHandle.Type), 4)), n)
|
||||
}
|
||||
|
||||
// NameToHandleAt wraps the name_to_handle_at system call; it obtains
|
||||
|
||||
-1
@@ -20,7 +20,6 @@ func setTimeval(sec, usec int64) Timeval {
|
||||
|
||||
// 64-bit file system and 32-bit uid calls
|
||||
// (386 default is 32-bit file system and 16-bit uid).
|
||||
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64
|
||||
//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
|
||||
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
|
||||
|
||||
-1
@@ -6,7 +6,6 @@
|
||||
|
||||
package unix
|
||||
|
||||
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
|
||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
||||
//sys Fstat(fd int, stat *Stat_t) (err error)
|
||||
|
||||
-1
@@ -44,7 +44,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
|
||||
|
||||
// 64-bit file system and 32-bit uid calls
|
||||
// (16-bit uid calls are not always supported in newer kernels)
|
||||
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
|
||||
//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
|
||||
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
|
||||
//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
|
||||
|
||||
-1
@@ -8,7 +8,6 @@ package unix
|
||||
|
||||
import "unsafe"
|
||||
|
||||
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
|
||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
||||
//sys Fstat(fd int, stat *Stat_t) (err error)
|
||||
|
||||
-1
@@ -8,7 +8,6 @@ package unix
|
||||
|
||||
import "unsafe"
|
||||
|
||||
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
|
||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
||||
//sys Fstatfs(fd int, buf *Statfs_t) (err error)
|
||||
|
||||
-1
@@ -6,7 +6,6 @@
|
||||
|
||||
package unix
|
||||
|
||||
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
|
||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
||||
//sys Fstatfs(fd int, buf *Statfs_t) (err error)
|
||||
|
||||
-1
@@ -13,7 +13,6 @@ import (
|
||||
|
||||
func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
||||
|
||||
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
|
||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
||||
//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
|
||||
|
||||
-1
@@ -11,7 +11,6 @@ import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
|
||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
||||
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
|
||||
//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
|
||||
|
||||
-1
@@ -6,7 +6,6 @@
|
||||
|
||||
package unix
|
||||
|
||||
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
|
||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
||||
//sys Fstat(fd int, stat *Stat_t) (err error)
|
||||
|
||||
-1
@@ -8,7 +8,6 @@ package unix
|
||||
|
||||
import "unsafe"
|
||||
|
||||
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
|
||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
||||
//sys Fstat(fd int, stat *Stat_t) (err error)
|
||||
|
||||
-1
@@ -10,7 +10,6 @@ import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
|
||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
||||
//sys Fstat(fd int, stat *Stat_t) (err error)
|
||||
|
||||
-1
@@ -6,7 +6,6 @@
|
||||
|
||||
package unix
|
||||
|
||||
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
|
||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
||||
//sys Fstat(fd int, stat *Stat_t) (err error)
|
||||
|
||||
+9
-1
@@ -1359,6 +1359,7 @@ const (
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
FD_CLOEXEC = 0x1
|
||||
FD_PIDFS_ROOT = -0x2712
|
||||
FD_SETSIZE = 0x400
|
||||
FF0 = 0x0
|
||||
FIB_RULE_DEV_DETACHED = 0x8
|
||||
@@ -1970,6 +1971,8 @@ const (
|
||||
MADV_DONTNEED = 0x4
|
||||
MADV_DONTNEED_LOCKED = 0x18
|
||||
MADV_FREE = 0x8
|
||||
MADV_GUARD_INSTALL = 0x66
|
||||
MADV_GUARD_REMOVE = 0x67
|
||||
MADV_HUGEPAGE = 0xe
|
||||
MADV_HWPOISON = 0x64
|
||||
MADV_KEEPONFORK = 0x13
|
||||
@@ -2045,6 +2048,7 @@ const (
|
||||
MINIX3_SUPER_MAGIC = 0x4d5a
|
||||
MINIX_SUPER_MAGIC = 0x137f
|
||||
MINIX_SUPER_MAGIC2 = 0x138f
|
||||
MLOCK_ONFAULT = 0x1
|
||||
MNT_DETACH = 0x2
|
||||
MNT_EXPIRE = 0x4
|
||||
MNT_FORCE = 0x1
|
||||
@@ -2114,7 +2118,7 @@ const (
|
||||
MS_NOSEC = 0x10000000
|
||||
MS_NOSUID = 0x2
|
||||
MS_NOSYMFOLLOW = 0x100
|
||||
MS_NOUSER = -0x80000000
|
||||
MS_NOUSER = 0x80000000
|
||||
MS_POSIXACL = 0x10000
|
||||
MS_PRIVATE = 0x40000
|
||||
MS_RDONLY = 0x1
|
||||
@@ -3786,6 +3790,9 @@ const (
|
||||
TCPOPT_TIMESTAMP = 0x8
|
||||
TCPOPT_TSTAMP_HDR = 0x101080a
|
||||
TCPOPT_WINDOW = 0x3
|
||||
TCP_AO_KEYF_EXCLUDE_OPT = 0x2
|
||||
TCP_AO_KEYF_IFINDEX = 0x1
|
||||
TCP_AO_MAXKEYLEN = 0x50
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
@@ -3856,6 +3863,7 @@ const (
|
||||
TIOCPKT_NOSTOP = 0x10
|
||||
TIOCPKT_START = 0x8
|
||||
TIOCPKT_STOP = 0x4
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIPC_ADDR_ID = 0x3
|
||||
TIPC_ADDR_MCAST = 0x1
|
||||
TIPC_ADDR_NAME = 0x2
|
||||
|
||||
-1
@@ -483,7 +483,6 @@ const (
|
||||
TIOCSERGWILD = 0x5454
|
||||
TIOCSERSETMULTI = 0x545b
|
||||
TIOCSERSWILD = 0x5455
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETD = 0x5423
|
||||
TIOCSIG = 0x40045436
|
||||
TIOCSISO7816 = 0xc0285443
|
||||
|
||||
-1
@@ -484,7 +484,6 @@ const (
|
||||
TIOCSERGWILD = 0x5454
|
||||
TIOCSERSETMULTI = 0x545b
|
||||
TIOCSERSWILD = 0x5455
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETD = 0x5423
|
||||
TIOCSIG = 0x40045436
|
||||
TIOCSISO7816 = 0xc0285443
|
||||
|
||||
-1
@@ -489,7 +489,6 @@ const (
|
||||
TIOCSERGWILD = 0x5454
|
||||
TIOCSERSETMULTI = 0x545b
|
||||
TIOCSERSWILD = 0x5455
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETD = 0x5423
|
||||
TIOCSIG = 0x40045436
|
||||
TIOCSISO7816 = 0xc0285443
|
||||
|
||||
-1
@@ -483,7 +483,6 @@ const (
|
||||
TIOCSERGWILD = 0x5454
|
||||
TIOCSERSETMULTI = 0x545b
|
||||
TIOCSERSWILD = 0x5455
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETD = 0x5423
|
||||
TIOCSIG = 0x40045436
|
||||
TIOCSISO7816 = 0xc0285443
|
||||
|
||||
-1
@@ -476,7 +476,6 @@ const (
|
||||
TIOCSERGWILD = 0x5454
|
||||
TIOCSERSETMULTI = 0x545b
|
||||
TIOCSERSWILD = 0x5455
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETD = 0x5423
|
||||
TIOCSIG = 0x40045436
|
||||
TIOCSISO7816 = 0xc0285443
|
||||
|
||||
-1
@@ -481,7 +481,6 @@ const (
|
||||
TIOCSERGWILD = 0x5489
|
||||
TIOCSERSETMULTI = 0x5490
|
||||
TIOCSERSWILD = 0x548a
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETD = 0x7401
|
||||
TIOCSETN = 0x740a
|
||||
TIOCSETP = 0x7409
|
||||
|
||||
-1
@@ -481,7 +481,6 @@ const (
|
||||
TIOCSERGWILD = 0x5489
|
||||
TIOCSERSETMULTI = 0x5490
|
||||
TIOCSERSWILD = 0x548a
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETD = 0x7401
|
||||
TIOCSETN = 0x740a
|
||||
TIOCSETP = 0x7409
|
||||
|
||||
-1
@@ -481,7 +481,6 @@ const (
|
||||
TIOCSERGWILD = 0x5489
|
||||
TIOCSERSETMULTI = 0x5490
|
||||
TIOCSERSWILD = 0x548a
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETD = 0x7401
|
||||
TIOCSETN = 0x740a
|
||||
TIOCSETP = 0x7409
|
||||
|
||||
-1
@@ -481,7 +481,6 @@ const (
|
||||
TIOCSERGWILD = 0x5489
|
||||
TIOCSERSETMULTI = 0x5490
|
||||
TIOCSERSWILD = 0x548a
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETD = 0x7401
|
||||
TIOCSETN = 0x740a
|
||||
TIOCSETP = 0x7409
|
||||
|
||||
-1
@@ -535,7 +535,6 @@ const (
|
||||
TIOCSERGWILD = 0x5454
|
||||
TIOCSERSETMULTI = 0x545b
|
||||
TIOCSERSWILD = 0x5455
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETC = 0x80067411
|
||||
TIOCSETD = 0x5423
|
||||
TIOCSETN = 0x8006740a
|
||||
|
||||
-1
@@ -539,7 +539,6 @@ const (
|
||||
TIOCSERGWILD = 0x5454
|
||||
TIOCSERSETMULTI = 0x545b
|
||||
TIOCSERSWILD = 0x5455
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETC = 0x80067411
|
||||
TIOCSETD = 0x5423
|
||||
TIOCSETN = 0x8006740a
|
||||
|
||||
-1
@@ -539,7 +539,6 @@ const (
|
||||
TIOCSERGWILD = 0x5454
|
||||
TIOCSERSETMULTI = 0x545b
|
||||
TIOCSERSWILD = 0x5455
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETC = 0x80067411
|
||||
TIOCSETD = 0x5423
|
||||
TIOCSETN = 0x8006740a
|
||||
|
||||
-1
@@ -486,7 +486,6 @@ const (
|
||||
TIOCSERGWILD = 0x5454
|
||||
TIOCSERSETMULTI = 0x545b
|
||||
TIOCSERSWILD = 0x5455
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETD = 0x5423
|
||||
TIOCSIG = 0x40045436
|
||||
TIOCSISO7816 = 0xc0285443
|
||||
|
||||
-1
@@ -545,7 +545,6 @@ const (
|
||||
TIOCSERGWILD = 0x5454
|
||||
TIOCSERSETMULTI = 0x545b
|
||||
TIOCSERSWILD = 0x5455
|
||||
TIOCSER_TEMT = 0x1
|
||||
TIOCSETD = 0x5423
|
||||
TIOCSIG = 0x40045436
|
||||
TIOCSISO7816 = 0xc0285443
|
||||
|
||||
+20
-15
@@ -14,21 +14,21 @@ const (
|
||||
ASI_LEON_DFLUSH = 0x11
|
||||
ASI_LEON_IFLUSH = 0x10
|
||||
ASI_LEON_MMUFLUSH = 0x18
|
||||
B1000000 = 0x1008
|
||||
B1000000 = 0x100c
|
||||
B115200 = 0x1002
|
||||
B1152000 = 0x1009
|
||||
B1500000 = 0x100a
|
||||
B2000000 = 0x100b
|
||||
B1152000 = 0x100d
|
||||
B1500000 = 0x100e
|
||||
B153600 = 0x1006
|
||||
B2000000 = 0x100f
|
||||
B230400 = 0x1003
|
||||
B2500000 = 0x100c
|
||||
B3000000 = 0x100d
|
||||
B3500000 = 0x100e
|
||||
B4000000 = 0x100f
|
||||
B307200 = 0x1007
|
||||
B460800 = 0x1004
|
||||
B500000 = 0x1005
|
||||
B500000 = 0x100a
|
||||
B57600 = 0x1001
|
||||
B576000 = 0x1006
|
||||
B921600 = 0x1007
|
||||
B576000 = 0x100b
|
||||
B614400 = 0x1008
|
||||
B76800 = 0x1005
|
||||
B921600 = 0x1009
|
||||
BLKALIGNOFF = 0x2000127a
|
||||
BLKBSZGET = 0x40081270
|
||||
BLKBSZSET = 0x80081271
|
||||
@@ -91,7 +91,7 @@ const (
|
||||
FFDLY = 0x8000
|
||||
FICLONE = 0x80049409
|
||||
FICLONERANGE = 0x8020940d
|
||||
FLUSHO = 0x1000
|
||||
FLUSHO = 0x2000
|
||||
FS_IOC_ENABLE_VERITY = 0x80806685
|
||||
FS_IOC_GETFLAGS = 0x40086601
|
||||
FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b
|
||||
@@ -563,6 +563,9 @@ const (
|
||||
TIOCM_CD = 0x40
|
||||
TIOCM_CTS = 0x20
|
||||
TIOCM_DSR = 0x100
|
||||
TIOCM_LOOP = 0x8000
|
||||
TIOCM_OUT1 = 0x2000
|
||||
TIOCM_OUT2 = 0x4000
|
||||
TIOCM_RI = 0x80
|
||||
TIOCM_RNG = 0x80
|
||||
TIOCM_SR = 0x10
|
||||
@@ -641,10 +644,11 @@ const (
|
||||
UBI_IOCVOLRMBLK = 0x20004f08
|
||||
UBI_IOCVOLUP = 0x80084f00
|
||||
VDISCARD = 0xd
|
||||
VDSUSP = 0xb
|
||||
VEOF = 0x4
|
||||
VEOL = 0xb
|
||||
VEOL2 = 0x10
|
||||
VMIN = 0x6
|
||||
VEOL = 0x5
|
||||
VEOL2 = 0x6
|
||||
VMIN = 0x4
|
||||
VREPRINT = 0xc
|
||||
VSTART = 0x8
|
||||
VSTOP = 0x9
|
||||
@@ -664,6 +668,7 @@ const (
|
||||
WDIOC_KEEPALIVE = 0x40045705
|
||||
WDIOC_SETOPTIONS = 0x40045704
|
||||
WORDSIZE = 0x40
|
||||
WRAP = 0x20000
|
||||
XCASE = 0x4
|
||||
XTABS = 0x1800
|
||||
_HIDIOCGRAWNAME = 0x40804804
|
||||
|
||||
+17
@@ -700,6 +700,23 @@ func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Eventfd(initval uint, flags int) (fd int, err error) {
|
||||
r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
|
||||
fd = int(r0)
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice))
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -213,23 +213,6 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fchown(fd int, uid int, gid int) (err error) {
|
||||
_, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fchown(fd int, uid int, gid int) (err error) {
|
||||
_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
-17
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(events) > 0 {
|
||||
_p0 = unsafe.Pointer(&events[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
+155
-7
@@ -4264,19 +4264,29 @@ type HwTstampConfig struct {
|
||||
}
|
||||
|
||||
const (
|
||||
HWTSTAMP_FILTER_NONE = 0x0
|
||||
HWTSTAMP_FILTER_ALL = 0x1
|
||||
HWTSTAMP_FILTER_SOME = 0x2
|
||||
HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 0x3
|
||||
HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 0x6
|
||||
HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 0x9
|
||||
HWTSTAMP_FILTER_PTP_V2_EVENT = 0xc
|
||||
HWTSTAMP_FILTER_NONE = 0x0
|
||||
HWTSTAMP_FILTER_ALL = 0x1
|
||||
HWTSTAMP_FILTER_SOME = 0x2
|
||||
HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 0x3
|
||||
HWTSTAMP_FILTER_PTP_V1_L4_SYNC = 0x4
|
||||
HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 0x5
|
||||
HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 0x6
|
||||
HWTSTAMP_FILTER_PTP_V2_L4_SYNC = 0x7
|
||||
HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 0x8
|
||||
HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 0x9
|
||||
HWTSTAMP_FILTER_PTP_V2_L2_SYNC = 0xa
|
||||
HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 0xb
|
||||
HWTSTAMP_FILTER_PTP_V2_EVENT = 0xc
|
||||
HWTSTAMP_FILTER_PTP_V2_SYNC = 0xd
|
||||
HWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 0xe
|
||||
HWTSTAMP_FILTER_NTP_ALL = 0xf
|
||||
)
|
||||
|
||||
const (
|
||||
HWTSTAMP_TX_OFF = 0x0
|
||||
HWTSTAMP_TX_ON = 0x1
|
||||
HWTSTAMP_TX_ONESTEP_SYNC = 0x2
|
||||
HWTSTAMP_TX_ONESTEP_P2P = 0x3
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -4541,6 +4551,48 @@ const (
|
||||
LANDLOCK_RULE_PATH_BENEATH = 0x1
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_SIGNAL_THREAD = 0x1
|
||||
PIDFD_SIGNAL_THREAD_GROUP = 0x2
|
||||
PIDFD_SIGNAL_PROCESS_GROUP = 0x4
|
||||
PIDFD_SELF_THREAD = -0x2710
|
||||
PIDFD_SELF_THREAD_GROUP = -0x2711
|
||||
PIDFD_SELF = -0x2710
|
||||
PIDFD_SELF_PROCESS = -0x2711
|
||||
PIDFD_INFO_PID = 0x1
|
||||
PIDFD_INFO_CREDS = 0x2
|
||||
PIDFD_INFO_CGROUPID = 0x4
|
||||
PIDFD_INFO_EXIT = 0x8
|
||||
PIDFD_INFO_COREDUMP = 0x10
|
||||
PIDFD_COREDUMPED = 0x1
|
||||
PIDFD_COREDUMP_SKIP = 0x2
|
||||
PIDFD_COREDUMP_USER = 0x4
|
||||
PIDFD_COREDUMP_ROOT = 0x8
|
||||
PIDFD_INFO_SIZE_VER0 = 0x40
|
||||
PIDFD_GET_INFO = 0xc048ff0b
|
||||
)
|
||||
|
||||
const SizeofPidfdInfo = 0x48
|
||||
|
||||
type PidfdInfo struct {
|
||||
Mask uint64
|
||||
Cgroupid uint64
|
||||
Pid uint32
|
||||
Tgid uint32
|
||||
Ppid uint32
|
||||
Ruid uint32
|
||||
Rgid uint32
|
||||
Euid uint32
|
||||
Egid uint32
|
||||
Suid uint32
|
||||
Sgid uint32
|
||||
Fsuid uint32
|
||||
Fsgid uint32
|
||||
Exit_code int32
|
||||
Coredump_mask uint32
|
||||
_ uint32
|
||||
}
|
||||
|
||||
const (
|
||||
IPC_CREAT = 0x200
|
||||
IPC_EXCL = 0x400
|
||||
@@ -6397,3 +6449,99 @@ const (
|
||||
MPOL_PREFERRED_MANY = 0x5
|
||||
MPOL_WEIGHTED_INTERLEAVE = 0x6
|
||||
)
|
||||
|
||||
const (
|
||||
GPIO_V2_GET_LINEINFO_IOCTL = 0xc100b405
|
||||
GPIO_V2_GET_LINE_IOCTL = 0xc250b407
|
||||
GPIO_V2_LINE_GET_VALUES_IOCTL = 0xc010b40e
|
||||
GPIO_V2_LINE_SET_VALUES_IOCTL = 0xc010b40f
|
||||
GPIO_V2_GET_LINEINFO_WATCH_IOCTL = 0xc100b406
|
||||
GPIO_GET_LINEINFO_UNWATCH_IOCTL = 0xc004b40c
|
||||
)
|
||||
const (
|
||||
GPIO_V2_LINE_ATTR_ID_FLAGS = 0x1
|
||||
GPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES = 0x2
|
||||
GPIO_V2_LINE_ATTR_ID_DEBOUNCE = 0x3
|
||||
GPIO_V2_LINE_CHANGED_REQUESTED = 0x1
|
||||
GPIO_V2_LINE_CHANGED_RELEASED = 0x2
|
||||
GPIO_V2_LINE_CHANGED_CONFIG = 0x3
|
||||
GPIO_V2_LINE_EVENT_RISING_EDGE = 0x1
|
||||
GPIO_V2_LINE_EVENT_FALLING_EDGE = 0x2
|
||||
)
|
||||
|
||||
type GPIOChipInfo struct {
|
||||
Name [32]byte
|
||||
Label [32]byte
|
||||
Lines uint32
|
||||
}
|
||||
type GPIOV2LineValues struct {
|
||||
Bits uint64
|
||||
Mask uint64
|
||||
}
|
||||
type GPIOV2LineAttribute struct {
|
||||
Id uint32
|
||||
_ uint32
|
||||
Flags uint64
|
||||
}
|
||||
type GPIOV2LineConfigAttribute struct {
|
||||
Attr GPIOV2LineAttribute
|
||||
Mask uint64
|
||||
}
|
||||
type GPIOV2LineConfig struct {
|
||||
Flags uint64
|
||||
Num_attrs uint32
|
||||
_ [5]uint32
|
||||
Attrs [10]GPIOV2LineConfigAttribute
|
||||
}
|
||||
type GPIOV2LineRequest struct {
|
||||
Offsets [64]uint32
|
||||
Consumer [32]byte
|
||||
Config GPIOV2LineConfig
|
||||
Num_lines uint32
|
||||
Event_buffer_size uint32
|
||||
_ [5]uint32
|
||||
Fd int32
|
||||
}
|
||||
type GPIOV2LineInfo struct {
|
||||
Name [32]byte
|
||||
Consumer [32]byte
|
||||
Offset uint32
|
||||
Num_attrs uint32
|
||||
Flags uint64
|
||||
Attrs [10]GPIOV2LineAttribute
|
||||
_ [4]uint32
|
||||
}
|
||||
type GPIOV2LineInfoChanged struct {
|
||||
Info GPIOV2LineInfo
|
||||
Timestamp_ns uint64
|
||||
Event_type uint32
|
||||
_ [5]uint32
|
||||
}
|
||||
type GPIOV2LineEvent struct {
|
||||
Timestamp_ns uint64
|
||||
Id uint32
|
||||
Offset uint32
|
||||
Seqno uint32
|
||||
Line_seqno uint32
|
||||
_ [6]uint32
|
||||
}
|
||||
|
||||
const (
|
||||
IPMI_MAX_ADDR_SIZE = 0x20
|
||||
IPMI_SYSTEM_INTERFACE_ADDR_TYPE = 0xc
|
||||
IPMI_BMC_CHANNEL = 0xf
|
||||
IPMI_RESPONSE_RECV_TYPE = 0x1
|
||||
)
|
||||
|
||||
type IPMISystemInterfaceAddr struct {
|
||||
Type int32
|
||||
Channel int16
|
||||
Lun uint8
|
||||
_ [1]byte
|
||||
}
|
||||
type IPMIMsg struct {
|
||||
Netfn uint8
|
||||
Cmd uint8
|
||||
Len uint16
|
||||
Data *uint8
|
||||
}
|
||||
+35
-1
@@ -680,7 +680,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_THREAD = 0x80
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0xff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0xff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0xff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0xff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0xff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0xff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0xff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0xff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -711,3 +722,26 @@ type SysvShmDesc struct {
|
||||
_ uint32
|
||||
_ uint32
|
||||
}
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x8014690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc018690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int32
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int32
|
||||
Msg IPMIMsg
|
||||
}
|
||||
+35
-1
@@ -697,7 +697,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_THREAD = 0x80
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0xff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0xff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0xff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0xff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0xff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0xff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0xff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0xff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -725,3 +736,26 @@ type SysvShmDesc struct {
|
||||
_ uint64
|
||||
_ uint64
|
||||
}
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x8028690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc030690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
+35
-1
@@ -674,7 +674,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_THREAD = 0x80
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0xff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0xff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0xff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0xff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0xff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0xff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0xff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0xff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -705,3 +716,26 @@ type SysvShmDesc struct {
|
||||
_ uint32
|
||||
_ uint32
|
||||
}
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x8014690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc018690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int32
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int32
|
||||
Msg IPMIMsg
|
||||
}
|
||||
+35
-1
@@ -676,7 +676,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_THREAD = 0x80
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0xff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0xff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0xff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0xff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0xff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0xff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0xff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0xff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -704,3 +715,26 @@ type SysvShmDesc struct {
|
||||
_ uint64
|
||||
_ uint64
|
||||
}
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x8028690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc030690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
+35
-1
@@ -677,7 +677,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_THREAD = 0x80
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0xff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0xff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0xff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0xff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0xff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0xff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0xff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0xff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -705,3 +716,26 @@ type SysvShmDesc struct {
|
||||
_ uint64
|
||||
_ uint64
|
||||
}
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x8028690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc030690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
+35
-1
@@ -680,7 +680,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x80
|
||||
PIDFD_NONBLOCK = 0x80
|
||||
PIDFD_THREAD = 0x400
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0x2000ff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0x2000ff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0x2000ff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0x2000ff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0x2000ff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0x2000ff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -710,3 +721,26 @@ type SysvShmDesc struct {
|
||||
Ctime_high uint16
|
||||
_ uint16
|
||||
}
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x4014690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc018690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int32
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int32
|
||||
Msg IPMIMsg
|
||||
}
|
||||
+35
-1
@@ -679,7 +679,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x80
|
||||
PIDFD_NONBLOCK = 0x80
|
||||
PIDFD_THREAD = 0x400
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0x2000ff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0x2000ff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0x2000ff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0x2000ff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0x2000ff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0x2000ff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -707,3 +718,26 @@ type SysvShmDesc struct {
|
||||
_ uint64
|
||||
_ uint64
|
||||
}
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x4028690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc030690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
+35
-1
@@ -679,7 +679,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x80
|
||||
PIDFD_NONBLOCK = 0x80
|
||||
PIDFD_THREAD = 0x400
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0x2000ff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0x2000ff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0x2000ff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0x2000ff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0x2000ff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0x2000ff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -707,3 +718,26 @@ type SysvShmDesc struct {
|
||||
_ uint64
|
||||
_ uint64
|
||||
}
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x4028690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc030690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
+35
-1
@@ -680,7 +680,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x80
|
||||
PIDFD_NONBLOCK = 0x80
|
||||
PIDFD_THREAD = 0x400
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0x2000ff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0x2000ff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0x2000ff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0x2000ff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0x2000ff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0x2000ff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -710,3 +721,26 @@ type SysvShmDesc struct {
|
||||
Ctime_high uint16
|
||||
_ uint16
|
||||
}
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x4014690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc018690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int32
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int32
|
||||
Msg IPMIMsg
|
||||
}
|
||||
+35
-1
@@ -686,7 +686,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_THREAD = 0x80
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0x2000ff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0x2000ff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0x2000ff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0x2000ff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0x2000ff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0x2000ff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -718,3 +729,26 @@ type SysvShmDesc struct {
|
||||
_ uint32
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x4014690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc018690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int32
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int32
|
||||
Msg IPMIMsg
|
||||
}
|
||||
+35
-1
@@ -686,7 +686,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_THREAD = 0x80
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0x2000ff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0x2000ff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0x2000ff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0x2000ff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0x2000ff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0x2000ff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -713,3 +724,26 @@ type SysvShmDesc struct {
|
||||
_ uint64
|
||||
_ uint64
|
||||
}
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x4028690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc030690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
+35
-1
@@ -686,7 +686,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_THREAD = 0x80
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0x2000ff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0x2000ff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0x2000ff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0x2000ff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0x2000ff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0x2000ff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -713,3 +724,26 @@ type SysvShmDesc struct {
|
||||
_ uint64
|
||||
_ uint64
|
||||
}
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x4028690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc030690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
+35
-1
@@ -704,7 +704,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_THREAD = 0x80
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0xff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0xff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0xff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0xff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0xff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0xff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0xff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0xff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -792,3 +803,26 @@ const (
|
||||
RISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE = 0x6
|
||||
RISCV_HWPROBE_WHICH_CPUS = 0x1
|
||||
)
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x8028690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc030690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
+35
-1
@@ -700,7 +700,18 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_NONBLOCK = 0x800
|
||||
PIDFD_THREAD = 0x80
|
||||
PIDFD_GET_CGROUP_NAMESPACE = 0xff01
|
||||
PIDFD_GET_IPC_NAMESPACE = 0xff02
|
||||
PIDFD_GET_MNT_NAMESPACE = 0xff03
|
||||
PIDFD_GET_NET_NAMESPACE = 0xff04
|
||||
PIDFD_GET_PID_NAMESPACE = 0xff05
|
||||
PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06
|
||||
PIDFD_GET_TIME_NAMESPACE = 0xff07
|
||||
PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08
|
||||
PIDFD_GET_USER_NAMESPACE = 0xff09
|
||||
PIDFD_GET_UTS_NAMESPACE = 0xff0a
|
||||
)
|
||||
|
||||
type SysvIpcPerm struct {
|
||||
@@ -727,3 +738,26 @@ type SysvShmDesc struct {
|
||||
_ uint64
|
||||
_ uint64
|
||||
}
|
||||
|
||||
const (
|
||||
GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
|
||||
)
|
||||
|
||||
const (
|
||||
IPMICTL_SEND_COMMAND = 0x8028690d
|
||||
IPMICTL_RECEIVE_MSG = 0xc030690c
|
||||
)
|
||||
|
||||
type IPMIReq struct {
|
||||
Addr *uint8
|
||||
Len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
type IPMIRecv struct {
|
||||
Recv_type int32
|
||||
Addr *uint8
|
||||
Addr_len uint32
|
||||
Msgid int64
|
||||
Msg IPMIMsg
|
||||
}
|
||||
Loaded 100 of 116 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user