mirror of https://github.com/knative/caching.git
upgrade to latest dependencies (#730)
bumping golang.org/x/term 03fcf44...d974fe8: > d974fe8 go.mod: update golang.org/x dependencies > 1efcd90 go.mod: update golang.org/x dependencies > 97ca0e3 go.mod: update golang.org/x dependencies > f72a2d8 go.mod: update golang.org/x dependencies > f6f2839 term: remove unused variable > 8365914 go.mod: update golang.org/x dependencies > 7a66f97 term_test.go: replace io/ioutil with io and os package > a9ba230 A+C: delete AUTHORS and CONTRIBUTORS > 065cf7b x/term: prevent invalid indexing into stRingBuffer > e5f449a all: gofmt bumping golang.org/x/text 383b2e7...71a9c9a: > 71a9c9a all: fix some comments > ec5565b README.md: update documentation of module versioning > c8236a6 unicode/bidi: remove unused global > ada7473 all: remove redundant type conversion > 1bdb400 language: remove compatibility with go < 1.2 > 252bee0 go.mod: ignore cyclic dependency for tagging > ecab6e5 go.mod: ignore cyclic dependency for tagging > 369c86b all: fix a few function names on comments > 434eadc language: reject excessively large Accept-Language strings > 23407e7 go.mod: ignore cyclic dependency for tagging > b18d3dd secure/precis: replace bytes.Compare with bytes.Equal > 795e854 all: replace io/ioutil with io and os package > b0ca10f internal/language: bump script types to uint16 and update registry > ba9b0e1 go.mod: update x/tools to HEAD > d03b418 A+C: delete AUTHORS and CONTRIBUTORS > b4bca84 language/display: fix Tag method comment > ea49e3e go.mod: update x/tools to HEAD > 78819d0 go.mod: update to golang.org/x/text v0.1.10 > 8db23f8 all: gofmt > d1c84af message/pipeline: skip TestFullCycle on plan9-arm > 18b340f language: fix typo in update docs > 7d87486 text/unicod/bidi: remove duplicate assignment > 310d592 cmd/gotext: only match files ending with pattern > 459fa28 text/currency: format currency amount according to the locale > 85a1c56 text/collate: add testable examples > 8da7c0f gen.go: copy all tablesXX.X.X.go versions to golang.org/x/net > 835dae6 internal/export/idna: use nontransitional processing in Go 1.18 > 593da8d internal/export/idna: avoid strconv.Unquote errors on surrogate halves > 86e65b8 internal/export/idna: fix int32 overflows > bb1c798 internal/export/idna: make Transitional an actual toggle > 5bd84dd encoding/simplifiedchinese: Fixes € encoding in GB18030 > 1b99300 all: upgrade x/tools to latest > 22bfdb6 language: fix ExampleMatcher output > 29bf010 Revert "number: match input example to be Dutch as in the output" > 2ca5a52 internal/language: fix canonicalization of extlang bumping golang.org/x/sys 8c9f86f...90c8f94: > 90c8f94 unix: avoid converting non-pointers to unsafe.Pointer in PtraceIO > 4e121b1 unix: add missing address operator in initxattrdest > 68f9dcb windows/debug/svc: buffer channel passed to signal.Notify > 0e1262c unix: add ptrace(PT_DENY_ATTACH) wrapper for darwin > 6938dae unix: add missing constants used with struct Timex on Linux > 01b330b unix: improve flaky solaris test logging > e7d7f63 all: fix some comments > 7a75290 unix/linux: update to glibc 2.36 > 4112509 windows/mkwinsyscall: write source to temp file if formatting fails > 71da690 windows/mkwinsyscall: support "." and "-" in DLL name > b829a39 unix/linux: update to gcc 13.0.0, qemu 7.1.0 for loong64 > c3037ed unix: add support for clock_adjtime on Linux > 13fe000 cpu: add IsBigEndian > 17fce3a unix: avoid false positive in vet shift check > a6f4650 windows: use UTF16FromString and UTF16ToString from syscall > 6e4d1c5 unix/linux: update to Linux kernel 6.1 and Go 1.20-rc2 > b8be2fd cpu: add //go:build line to cpu_gccgo_x86.c > 1e9f341 unix: add //go:build line to gccgo_c.c > b60007c unix: add Uvmexp and SysctlUvmexp for NetBSD > b751db5 unix: gofmt hurd files after CL 459895 > b360406 unix: support TIOCGETA on GNU/Hurd > 3086868 unix: regen on OpenBSD 7.2 > 2b11e6b unix: remove Mclpool from openbsd types > 7c6badc unix: convert openbsd/mips64 to direct libc calls > 3b1fc93 unix: avoid allocations for common uses of Readv, Writev, etc. > 2204b66 cpu: parse /proc/cpuinfo on linux/arm64 on old kernels when needed > 72f772c unix: offs2lohi should shift by bits, not bytes > cffae8e unix: add ClockGettime on *bsd and solaris > 96e75de unix: improve Sendmsg and Recvmsg documentation > 127c0dd unix/linux: use Go 1.20rc1 to generate files > 3ca3b18 windows: add GetLargePageMinimum > d684c6f execabs: isGo119ErrDot: use errors.Is instead of string-matching > fc697a3 unix: add ParseOneSocketControlMessage to parse control messages without allocating > 5726498 unix: in Linux sendmsgN actually send one normal byte > 95e765b x/sys/unix: make ReadDirent available on zOS > 090e330 unix: add support for openbsd/ppc64 > 3938a4f cpu: add support for ppc64 on platforms other than aix and linux > a970992 unix: add support for openbsd/riscv64 > e2bdbfe unix: flip openbsd libc build tags > abe0a0a windows: replace uses of Close() with CloseHandle() > 68d869b unix: migrate some illumos definitions to solaris > 84dc82d all: use grep -E/-F instead of fgrep/egrep > f11e5e4 unix: use unsafe.Slice in (*FileHandle).Bytes > 6fa7a7c windows: allow calling WSASendto with nil Sockaddr > c57c793 unix: add SIG_BLOCK and friends for Linux > d9d178b unix: add PthreadSigmask for Linux > 8cfa568 unix: allow calling Sendto with nil Sockaddr > fb04ddd windows: add DWM window attribute related syscalls > 7b5979e unix: remove Go 1.12 compatibility on darwin > 63ea559 unix: add namespaced versions of Listxattr/Flistxattr/Llistxattr on *BSD > 76c7481 all: simplify unsafe.Slice usage in {Byte,UTF16}PtrToString > 3275c40 windows: add window handle related system calls > aba9fc2 unix: use unsafe.Slice instead of unsafeheader package > 2771309 unix: fix event port panic after close > 7ac13a9 unix: don't call t.Fatal from goroutine in TestSendmsgBuffers > 87db552 plan9: use unsafe.Slice instead of unsafeheader package > d0df966 unix: support all Setuid/Setgid and related syscalls on Linux > 9e1f761 x/sys/unix: use uintptr for tracee addresses on FreeBSD > d48e67d unix: use strconv.Itoa instead of local implementation > 2c41d75 unix: add IoctlLoop{Get,Set}Status64 on linux > c680a09 unix: improve solaris event port panic message > 20c2bfd cpu: fix cpu cacheLineSize for arm64 darwin(a.k.a. M1) > 2296e01 windows: remove duplicate words from comments > 5a39038 unix: convert openbsd/arm to direct libc calls > fbc7d0a unix: convert openbsd/386 to direct libc calls > 5f8f020 unix: convert openbsd/amd64 to direct libc calls > 74508da unix: convert openbsd/arm64 to direct libc calls > 1c4a2a7 unix: make mkasm_darwin.go usable with other operating systems > 3d627bb cpu: implement CPU feature detection for openbsd/arm64 > e9af53b unix: improve and simplify mkasm_darwin.go > 8e32c04 unix: add missing IFLA_* consts on linux > e052cef unix/linux: run each mkall.go target in a seperate goroutine > 6e608f9 unix: update perf_event_attr_go > a90be44 unix: fix sendmsgN return value for empty iovecs and non-empty oob > 66a0560 windows: support Windows SOCKADDR_BTH structure > 1609e55 windows: add QueryWorkingSetEx > 3c1f352 unix: implement recvmsgRaw and sendmsgN on aix > e65921a unix/linux: use Go 1.19rc2 instead of building gotip bumping golang.org/x/net a158d28...8e2b117: > 8e2b117 http2/hpack: avoid quadratic complexity in hpack decoding > 547e7ed http2: avoid referencing ResponseWrite.Write parameter after returning > 39940ad html: parse comments per HTML spec > 87ce33e go.mod: update golang.org/x dependencies > 415cb6d all: fix some comments > 7e3c19c all: correct typos in comments > 296f09a http2: case insensitive handling for 100-continue > f8411da nettest: fix tests on dragonfly and js/wasm > 8e0e7d8 go.mod: update golang.org/x dependencies > 7805fdc http2: rewrite inbound flow control tracking > 2aa8215 nettest: use RoutedInterface for probing network stack capability > ad92d3d websocket: don't recommend Gorilla > e1ec361 http2: fix race in TestCanonicalHeaderCacheGrowth > 1e63c2f http2: limit canonical header cache by bytes, not entries > 3247b5b go.mod: update golang.org/x dependencies > ecf7fda http2: deflake TestTransportMaxFrameReadSize > 0833b63 publicsuffix: embed table data > ecf091a publicsuffix: update table to latest list from publicsuffix.org > 2f8c3d1 http2: add Transport.MaxReadFrameSize configuration setting > 0e478a2 http2: add SETTINGS_HEADER_TABLE_SIZE support > a2d827a go.mod: update golang.org/x dependencies > 15e1b25 http2: speed up TestTransportRetryHasLimit > 93ec86b http2: support SetReadDeadline, SetWriteDeadline, FlushError > efda1ce http2: return os.ErrDeadlineExceeded from timed-out response body writes > a870f35 http2: support Server.ReadTimeout > d7f77dc Revert "http2: Send WindowUpdates when remaining bytes are below a threshold" > 702349b http2/h2c: handle errors when reading HTTP/1 request body > 7a67682 x/net/http2: gzipReader will reset zr to nil after closing body > a1278a7 http2: add common header caching to Transport to reduce allocations > c877839 http2: add a few other common headers to the shared headermap cache > c630100 http2: discard more frames after GOAWAY > 0c1aede http2: calculate a correct window increment size for a stream > 84c13af http2/hpack: build static table with go generate > 430a433 html: properly handle exclamation marks in comments > da05058 net/http: remove unnecessary slicing > 1568cf9 go.mod: update golang.org/x dependencies > cb67ada internal/socket: add support for openbsd/ppc64 > 311fa19 internal/socket: add support for openbsd/riscv64 > f25eb7e all: update golang.org/x/sys > f15817d webdav: ignore path and perm errors in PROPFIND > 0b7e1fb all: fix a few function names on comments > 8021a29 publicsuffix: change node table entry size to 40 bits > bcab684 all: use time.Since instead of time.Now().Sub > 107f3e3 http2: don't return from RoundTrip until request body is closed > f486391 http2: improved Request.Body.Close not to hold lock on connection > aa73b25 http2: handle MaxUploadBufferPerConnection of 65535 > 02166a9 internal/socket: properly reset Iov and Control on the msghdr > 8be6392 webdav: replace os.SEEK_XXX with io.SeekXXX > d300de1 http2: don't rely on double-close of a net.Conn failing > db77216 http2: remove race from TestTransportCancelDataResponseRace > d0c6ba3 http2: close client connections after receiving GOAWAY > 2e0b12c http2: Send WindowUpdates when remaining bytes are below a threshold > bf014ff http2: send undeclared trailers when body is not written > 4a395b0 Revert "http2: Send WindowUpdates when remaining bytes are below a threshold" > f2f64eb http2: Send WindowUpdates when remaining bytes are below a threshold > ca03788 dns/dnsmessage: remove unnecessary []byte conversions > 0081b4b http2/h2c: propagate HTTP/1 server configuration to HTTP/2 > f8f703f http2: accept HEAD requests with a body > bea034e all: remove redundant type conversion > 1e95f45 http/httpproxy: remove comment on https proxy precedance > f3363e0 http2: handle server errors after sending GOAWAY > 83b083e internal/socket: add missing import to zos-s390x file > b0a4917 dns/dnsmessage: use exported MustNewName in example > 3211cb9 nettest: fix Unix socket test on macOS > 4c34ddd http2: delete multipart form tempfiles after ServeHTTP returns > 1d4ff48 http2: add DialTLSContext to Transport > 13a9a73 http2: fix conn flow control when stream closes on bad content-length > 07c6da5 dns/dnsmessage: add AD and CD bits support > f428fae all: add FreeBSD riscv64 support > a33c5aa route: import syscall rather than golang.org/x/sys/unix > 7431dee lif: import syscall rather than golang.org/x/sys/unix > 0bcc04d http2: fix spec document links > c7608f3 ipv4, ipv6: enable additional tests on darwin and ios > f92ba40 route: remove RTM_LOCK on openbsd > 1f511ac internal/socket: delete darwin/{386,arm} code > 41545e8 route: drops const that x/unix has > 993b7b1 net: update to new x/sys version > 0699458 html: escape comment and doctype tokens' data > 46097bf internal/socket: support building with gccgo bumping knative.dev/pkg 2fdd6bf...645afb2: > 645afb2 bump golang.org/x/net to v0.7.0 (# 2695) > 0591b75 bump net and text packages (# 2692) Signed-off-by: Knative Automation <automation@knative.team>
This commit is contained in:
parent
4ee229f529
commit
051fc0940d
10
go.mod
10
go.mod
|
@ -12,7 +12,7 @@ require (
|
||||||
k8s.io/code-generator v0.25.4
|
k8s.io/code-generator v0.25.4
|
||||||
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1
|
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1
|
||||||
knative.dev/hack v0.0.0-20230217131352-f2f3107be156
|
knative.dev/hack v0.0.0-20230217131352-f2f3107be156
|
||||||
knative.dev/pkg v0.0.0-20230222150228-2fdd6bf8be31
|
knative.dev/pkg v0.0.0-20230224190030-645afb2d5dad
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
@ -61,12 +61,12 @@ require (
|
||||||
go.uber.org/atomic v1.9.0 // indirect
|
go.uber.org/atomic v1.9.0 // indirect
|
||||||
go.uber.org/multierr v1.6.0 // indirect
|
go.uber.org/multierr v1.6.0 // indirect
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect
|
golang.org/x/net v0.7.0 // indirect
|
||||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect
|
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect
|
golang.org/x/sys v0.5.0 // indirect
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
golang.org/x/term v0.5.0 // indirect
|
||||||
golang.org/x/text v0.3.7 // indirect
|
golang.org/x/text v0.7.0 // indirect
|
||||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
|
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
|
||||||
golang.org/x/tools v0.1.12 // indirect
|
golang.org/x/tools v0.1.12 // indirect
|
||||||
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
|
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
|
||||||
|
|
20
go.sum
20
go.sum
|
@ -437,8 +437,8 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd
|
||||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||||
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0=
|
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
|
@ -524,11 +524,11 @@ golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||||
golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
|
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
@ -537,8 +537,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
|
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
|
@ -800,8 +800,8 @@ k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 h1:GfD9OzL11kvZN5iArC6oTS7RTj7oJ
|
||||||
k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||||
knative.dev/hack v0.0.0-20230217131352-f2f3107be156 h1:l4/KJeKC7Nrm9WUF3AhAnvoj00OogWfPJKrBP8tbN8c=
|
knative.dev/hack v0.0.0-20230217131352-f2f3107be156 h1:l4/KJeKC7Nrm9WUF3AhAnvoj00OogWfPJKrBP8tbN8c=
|
||||||
knative.dev/hack v0.0.0-20230217131352-f2f3107be156/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q=
|
knative.dev/hack v0.0.0-20230217131352-f2f3107be156/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q=
|
||||||
knative.dev/pkg v0.0.0-20230222150228-2fdd6bf8be31 h1:/A/yJ4IzvMLYCCiQ8Ew3DweTtF2s7t3LQosmmo5T46o=
|
knative.dev/pkg v0.0.0-20230224190030-645afb2d5dad h1:RIjysOocoRfalLJgaSBkKHf6NrgdvAagF1x2CNihjqc=
|
||||||
knative.dev/pkg v0.0.0-20230222150228-2fdd6bf8be31/go.mod h1:FLoALs9HfjVPT7sjrpvNLqO+mx+RzJZwUJ2b0UsLLus=
|
knative.dev/pkg v0.0.0-20230224190030-645afb2d5dad/go.mod h1:TlO24rbgdsfqpkwZi1Ddue/LiVbvzankhaXpVdP+Nok=
|
||||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||||
|
|
|
@ -32,7 +32,7 @@ var DeadlineExceeded = context.DeadlineExceeded
|
||||||
// call cancel as soon as the operations running in this Context complete.
|
// call cancel as soon as the operations running in this Context complete.
|
||||||
func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
|
func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
|
||||||
ctx, f := context.WithCancel(parent)
|
ctx, f := context.WithCancel(parent)
|
||||||
return ctx, CancelFunc(f)
|
return ctx, f
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithDeadline returns a copy of the parent context with the deadline adjusted
|
// WithDeadline returns a copy of the parent context with the deadline adjusted
|
||||||
|
@ -46,7 +46,7 @@ func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
|
||||||
// call cancel as soon as the operations running in this Context complete.
|
// call cancel as soon as the operations running in this Context complete.
|
||||||
func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {
|
func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {
|
||||||
ctx, f := context.WithDeadline(parent, deadline)
|
ctx, f := context.WithDeadline(parent, deadline)
|
||||||
return ctx, CancelFunc(f)
|
return ctx, f
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).
|
// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).
|
||||||
|
|
|
@ -6,23 +6,91 @@
|
||||||
|
|
||||||
package http2
|
package http2
|
||||||
|
|
||||||
// flow is the flow control window's size.
|
// inflowMinRefresh is the minimum number of bytes we'll send for a
|
||||||
type flow struct {
|
// flow control window update.
|
||||||
|
const inflowMinRefresh = 4 << 10
|
||||||
|
|
||||||
|
// inflow accounts for an inbound flow control window.
|
||||||
|
// It tracks both the latest window sent to the peer (used for enforcement)
|
||||||
|
// and the accumulated unsent window.
|
||||||
|
type inflow struct {
|
||||||
|
avail int32
|
||||||
|
unsent int32
|
||||||
|
}
|
||||||
|
|
||||||
|
// init sets the initial window.
|
||||||
|
func (f *inflow) init(n int32) {
|
||||||
|
f.avail = n
|
||||||
|
}
|
||||||
|
|
||||||
|
// add adds n bytes to the window, with a maximum window size of max,
|
||||||
|
// indicating that the peer can now send us more data.
|
||||||
|
// For example, the user read from a {Request,Response} body and consumed
|
||||||
|
// some of the buffered data, so the peer can now send more.
|
||||||
|
// It returns the number of bytes to send in a WINDOW_UPDATE frame to the peer.
|
||||||
|
// Window updates are accumulated and sent when the unsent capacity
|
||||||
|
// is at least inflowMinRefresh or will at least double the peer's available window.
|
||||||
|
func (f *inflow) add(n int) (connAdd int32) {
|
||||||
|
if n < 0 {
|
||||||
|
panic("negative update")
|
||||||
|
}
|
||||||
|
unsent := int64(f.unsent) + int64(n)
|
||||||
|
// "A sender MUST NOT allow a flow-control window to exceed 2^31-1 octets."
|
||||||
|
// RFC 7540 Section 6.9.1.
|
||||||
|
const maxWindow = 1<<31 - 1
|
||||||
|
if unsent+int64(f.avail) > maxWindow {
|
||||||
|
panic("flow control update exceeds maximum window size")
|
||||||
|
}
|
||||||
|
f.unsent = int32(unsent)
|
||||||
|
if f.unsent < inflowMinRefresh && f.unsent < f.avail {
|
||||||
|
// If there aren't at least inflowMinRefresh bytes of window to send,
|
||||||
|
// and this update won't at least double the window, buffer the update for later.
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
f.avail += f.unsent
|
||||||
|
f.unsent = 0
|
||||||
|
return int32(unsent)
|
||||||
|
}
|
||||||
|
|
||||||
|
// take attempts to take n bytes from the peer's flow control window.
|
||||||
|
// It reports whether the window has available capacity.
|
||||||
|
func (f *inflow) take(n uint32) bool {
|
||||||
|
if n > uint32(f.avail) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
f.avail -= int32(n)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// takeInflows attempts to take n bytes from two inflows,
|
||||||
|
// typically connection-level and stream-level flows.
|
||||||
|
// It reports whether both windows have available capacity.
|
||||||
|
func takeInflows(f1, f2 *inflow, n uint32) bool {
|
||||||
|
if n > uint32(f1.avail) || n > uint32(f2.avail) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
f1.avail -= int32(n)
|
||||||
|
f2.avail -= int32(n)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// outflow is the outbound flow control window's size.
|
||||||
|
type outflow struct {
|
||||||
_ incomparable
|
_ incomparable
|
||||||
|
|
||||||
// n is the number of DATA bytes we're allowed to send.
|
// n is the number of DATA bytes we're allowed to send.
|
||||||
// A flow is kept both on a conn and a per-stream.
|
// An outflow is kept both on a conn and a per-stream.
|
||||||
n int32
|
n int32
|
||||||
|
|
||||||
// conn points to the shared connection-level flow that is
|
// conn points to the shared connection-level outflow that is
|
||||||
// shared by all streams on that conn. It is nil for the flow
|
// shared by all streams on that conn. It is nil for the outflow
|
||||||
// that's on the conn directly.
|
// that's on the conn directly.
|
||||||
conn *flow
|
conn *outflow
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *flow) setConnFlow(cf *flow) { f.conn = cf }
|
func (f *outflow) setConnFlow(cf *outflow) { f.conn = cf }
|
||||||
|
|
||||||
func (f *flow) available() int32 {
|
func (f *outflow) available() int32 {
|
||||||
n := f.n
|
n := f.n
|
||||||
if f.conn != nil && f.conn.n < n {
|
if f.conn != nil && f.conn.n < n {
|
||||||
n = f.conn.n
|
n = f.conn.n
|
||||||
|
@ -30,7 +98,7 @@ func (f *flow) available() int32 {
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *flow) take(n int32) {
|
func (f *outflow) take(n int32) {
|
||||||
if n > f.available() {
|
if n > f.available() {
|
||||||
panic("internal error: took too much")
|
panic("internal error: took too much")
|
||||||
}
|
}
|
||||||
|
@ -42,7 +110,7 @@ func (f *flow) take(n int32) {
|
||||||
|
|
||||||
// add adds n bytes (positive or negative) to the flow control window.
|
// add adds n bytes (positive or negative) to the flow control window.
|
||||||
// It returns false if the sum would exceed 2^31-1.
|
// It returns false if the sum would exceed 2^31-1.
|
||||||
func (f *flow) add(n int32) bool {
|
func (f *outflow) add(n int32) bool {
|
||||||
sum := f.n + n
|
sum := f.n + n
|
||||||
if (sum > n) == (f.n > 0) {
|
if (sum > n) == (f.n > 0) {
|
||||||
f.n = sum
|
f.n = sum
|
||||||
|
|
|
@ -23,7 +23,7 @@ const frameHeaderLen = 9
|
||||||
var padZeros = make([]byte, 255) // zeros for padding
|
var padZeros = make([]byte, 255) // zeros for padding
|
||||||
|
|
||||||
// A FrameType is a registered frame type as defined in
|
// A FrameType is a registered frame type as defined in
|
||||||
// http://http2.github.io/http2-spec/#rfc.section.11.2
|
// https://httpwg.org/specs/rfc7540.html#rfc.section.11.2
|
||||||
type FrameType uint8
|
type FrameType uint8
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -146,7 +146,7 @@ func typeFrameParser(t FrameType) frameParser {
|
||||||
|
|
||||||
// A FrameHeader is the 9 byte header of all HTTP/2 frames.
|
// A FrameHeader is the 9 byte header of all HTTP/2 frames.
|
||||||
//
|
//
|
||||||
// See http://http2.github.io/http2-spec/#FrameHeader
|
// See https://httpwg.org/specs/rfc7540.html#FrameHeader
|
||||||
type FrameHeader struct {
|
type FrameHeader struct {
|
||||||
valid bool // caller can access []byte fields in the Frame
|
valid bool // caller can access []byte fields in the Frame
|
||||||
|
|
||||||
|
@ -575,7 +575,7 @@ func (fr *Framer) checkFrameOrder(f Frame) error {
|
||||||
|
|
||||||
// A DataFrame conveys arbitrary, variable-length sequences of octets
|
// A DataFrame conveys arbitrary, variable-length sequences of octets
|
||||||
// associated with a stream.
|
// associated with a stream.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.1
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.1
|
||||||
type DataFrame struct {
|
type DataFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
data []byte
|
data []byte
|
||||||
|
@ -662,6 +662,15 @@ func (f *Framer) WriteData(streamID uint32, endStream bool, data []byte) error {
|
||||||
// It is the caller's responsibility not to violate the maximum frame size
|
// It is the caller's responsibility not to violate the maximum frame size
|
||||||
// and to not call other Write methods concurrently.
|
// and to not call other Write methods concurrently.
|
||||||
func (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []byte) error {
|
func (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []byte) error {
|
||||||
|
if err := f.startWriteDataPadded(streamID, endStream, data, pad); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return f.endWrite()
|
||||||
|
}
|
||||||
|
|
||||||
|
// startWriteDataPadded is WriteDataPadded, but only writes the frame to the Framer's internal buffer.
|
||||||
|
// The caller should call endWrite to flush the frame to the underlying writer.
|
||||||
|
func (f *Framer) startWriteDataPadded(streamID uint32, endStream bool, data, pad []byte) error {
|
||||||
if !validStreamID(streamID) && !f.AllowIllegalWrites {
|
if !validStreamID(streamID) && !f.AllowIllegalWrites {
|
||||||
return errStreamID
|
return errStreamID
|
||||||
}
|
}
|
||||||
|
@ -691,14 +700,14 @@ func (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []by
|
||||||
}
|
}
|
||||||
f.wbuf = append(f.wbuf, data...)
|
f.wbuf = append(f.wbuf, data...)
|
||||||
f.wbuf = append(f.wbuf, pad...)
|
f.wbuf = append(f.wbuf, pad...)
|
||||||
return f.endWrite()
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// A SettingsFrame conveys configuration parameters that affect how
|
// A SettingsFrame conveys configuration parameters that affect how
|
||||||
// endpoints communicate, such as preferences and constraints on peer
|
// endpoints communicate, such as preferences and constraints on peer
|
||||||
// behavior.
|
// behavior.
|
||||||
//
|
//
|
||||||
// See http://http2.github.io/http2-spec/#SETTINGS
|
// See https://httpwg.org/specs/rfc7540.html#SETTINGS
|
||||||
type SettingsFrame struct {
|
type SettingsFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
p []byte
|
p []byte
|
||||||
|
@ -837,7 +846,7 @@ func (f *Framer) WriteSettingsAck() error {
|
||||||
// A PingFrame is a mechanism for measuring a minimal round trip time
|
// A PingFrame is a mechanism for measuring a minimal round trip time
|
||||||
// from the sender, as well as determining whether an idle connection
|
// from the sender, as well as determining whether an idle connection
|
||||||
// is still functional.
|
// is still functional.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.7
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.7
|
||||||
type PingFrame struct {
|
type PingFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
Data [8]byte
|
Data [8]byte
|
||||||
|
@ -870,7 +879,7 @@ func (f *Framer) WritePing(ack bool, data [8]byte) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// A GoAwayFrame informs the remote peer to stop creating streams on this connection.
|
// A GoAwayFrame informs the remote peer to stop creating streams on this connection.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.8
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.8
|
||||||
type GoAwayFrame struct {
|
type GoAwayFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
LastStreamID uint32
|
LastStreamID uint32
|
||||||
|
@ -934,7 +943,7 @@ func parseUnknownFrame(_ *frameCache, fh FrameHeader, countError func(string), p
|
||||||
}
|
}
|
||||||
|
|
||||||
// A WindowUpdateFrame is used to implement flow control.
|
// A WindowUpdateFrame is used to implement flow control.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.9
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.9
|
||||||
type WindowUpdateFrame struct {
|
type WindowUpdateFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
Increment uint32 // never read with high bit set
|
Increment uint32 // never read with high bit set
|
||||||
|
@ -1123,7 +1132,7 @@ func (f *Framer) WriteHeaders(p HeadersFrameParam) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// A PriorityFrame specifies the sender-advised priority of a stream.
|
// A PriorityFrame specifies the sender-advised priority of a stream.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.3
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.3
|
||||||
type PriorityFrame struct {
|
type PriorityFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
PriorityParam
|
PriorityParam
|
||||||
|
@ -1193,7 +1202,7 @@ func (f *Framer) WritePriority(streamID uint32, p PriorityParam) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// A RSTStreamFrame allows for abnormal termination of a stream.
|
// A RSTStreamFrame allows for abnormal termination of a stream.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.4
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.4
|
||||||
type RSTStreamFrame struct {
|
type RSTStreamFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
ErrCode ErrCode
|
ErrCode ErrCode
|
||||||
|
@ -1225,7 +1234,7 @@ func (f *Framer) WriteRSTStream(streamID uint32, code ErrCode) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// A ContinuationFrame is used to continue a sequence of header block fragments.
|
// A ContinuationFrame is used to continue a sequence of header block fragments.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.10
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.10
|
||||||
type ContinuationFrame struct {
|
type ContinuationFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
headerFragBuf []byte
|
headerFragBuf []byte
|
||||||
|
@ -1266,7 +1275,7 @@ func (f *Framer) WriteContinuation(streamID uint32, endHeaders bool, headerBlock
|
||||||
}
|
}
|
||||||
|
|
||||||
// A PushPromiseFrame is used to initiate a server stream.
|
// A PushPromiseFrame is used to initiate a server stream.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.6
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.6
|
||||||
type PushPromiseFrame struct {
|
type PushPromiseFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
PromiseID uint32
|
PromiseID uint32
|
||||||
|
|
|
@ -70,6 +70,15 @@ func NewHandler(h http.Handler, s *http2.Server) http.Handler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// extractServer extracts existing http.Server instance from http.Request or create an empty http.Server
|
||||||
|
func extractServer(r *http.Request) *http.Server {
|
||||||
|
server, ok := r.Context().Value(http.ServerContextKey).(*http.Server)
|
||||||
|
if ok {
|
||||||
|
return server
|
||||||
|
}
|
||||||
|
return new(http.Server)
|
||||||
|
}
|
||||||
|
|
||||||
// ServeHTTP implement the h2c support that is enabled by h2c.GetH2CHandler.
|
// ServeHTTP implement the h2c support that is enabled by h2c.GetH2CHandler.
|
||||||
func (s h2cHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (s h2cHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
// Handle h2c with prior knowledge (RFC 7540 Section 3.4)
|
// Handle h2c with prior knowledge (RFC 7540 Section 3.4)
|
||||||
|
@ -87,6 +96,7 @@ func (s h2cHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
s.s.ServeConn(conn, &http2.ServeConnOpts{
|
s.s.ServeConn(conn, &http2.ServeConnOpts{
|
||||||
Context: r.Context(),
|
Context: r.Context(),
|
||||||
|
BaseConfig: extractServer(r),
|
||||||
Handler: s.Handler,
|
Handler: s.Handler,
|
||||||
SawClientPreface: true,
|
SawClientPreface: true,
|
||||||
})
|
})
|
||||||
|
@ -99,11 +109,13 @@ func (s h2cHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
if http2VerboseLogs {
|
if http2VerboseLogs {
|
||||||
log.Printf("h2c: error h2c upgrade: %v", err)
|
log.Printf("h2c: error h2c upgrade: %v", err)
|
||||||
}
|
}
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
s.s.ServeConn(conn, &http2.ServeConnOpts{
|
s.s.ServeConn(conn, &http2.ServeConnOpts{
|
||||||
Context: r.Context(),
|
Context: r.Context(),
|
||||||
|
BaseConfig: extractServer(r),
|
||||||
Handler: s.Handler,
|
Handler: s.Handler,
|
||||||
UpgradeRequest: r,
|
UpgradeRequest: r,
|
||||||
Settings: settings,
|
Settings: settings,
|
||||||
|
@ -156,7 +168,10 @@ func h2cUpgrade(w http.ResponseWriter, r *http.Request) (_ net.Conn, settings []
|
||||||
return nil, nil, errors.New("h2c: connection does not support Hijack")
|
return nil, nil, errors.New("h2c: connection does not support Hijack")
|
||||||
}
|
}
|
||||||
|
|
||||||
body, _ := io.ReadAll(r.Body)
|
body, err := io.ReadAll(r.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
r.Body = io.NopCloser(bytes.NewBuffer(body))
|
r.Body = io.NopCloser(bytes.NewBuffer(body))
|
||||||
|
|
||||||
conn, rw, err := hijacker.Hijack()
|
conn, rw, err := hijacker.Hijack()
|
||||||
|
|
|
@ -27,7 +27,14 @@ func buildCommonHeaderMaps() {
|
||||||
"accept-language",
|
"accept-language",
|
||||||
"accept-ranges",
|
"accept-ranges",
|
||||||
"age",
|
"age",
|
||||||
|
"access-control-allow-credentials",
|
||||||
|
"access-control-allow-headers",
|
||||||
|
"access-control-allow-methods",
|
||||||
"access-control-allow-origin",
|
"access-control-allow-origin",
|
||||||
|
"access-control-expose-headers",
|
||||||
|
"access-control-max-age",
|
||||||
|
"access-control-request-headers",
|
||||||
|
"access-control-request-method",
|
||||||
"allow",
|
"allow",
|
||||||
"authorization",
|
"authorization",
|
||||||
"cache-control",
|
"cache-control",
|
||||||
|
@ -53,6 +60,7 @@ func buildCommonHeaderMaps() {
|
||||||
"link",
|
"link",
|
||||||
"location",
|
"location",
|
||||||
"max-forwards",
|
"max-forwards",
|
||||||
|
"origin",
|
||||||
"proxy-authenticate",
|
"proxy-authenticate",
|
||||||
"proxy-authorization",
|
"proxy-authorization",
|
||||||
"range",
|
"range",
|
||||||
|
@ -68,6 +76,8 @@ func buildCommonHeaderMaps() {
|
||||||
"vary",
|
"vary",
|
||||||
"via",
|
"via",
|
||||||
"www-authenticate",
|
"www-authenticate",
|
||||||
|
"x-forwarded-for",
|
||||||
|
"x-forwarded-proto",
|
||||||
}
|
}
|
||||||
commonLowerHeader = make(map[string]string, len(common))
|
commonLowerHeader = make(map[string]string, len(common))
|
||||||
commonCanonHeader = make(map[string]string, len(common))
|
commonCanonHeader = make(map[string]string, len(common))
|
||||||
|
@ -85,3 +95,11 @@ func lowerHeader(v string) (lower string, ascii bool) {
|
||||||
}
|
}
|
||||||
return asciiToLower(v)
|
return asciiToLower(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func canonicalHeader(v string) string {
|
||||||
|
buildCommonHeaderMapsOnce()
|
||||||
|
if s, ok := commonCanonHeader[v]; ok {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
return http.CanonicalHeaderKey(v)
|
||||||
|
}
|
||||||
|
|
|
@ -116,6 +116,11 @@ func (e *Encoder) SetMaxDynamicTableSize(v uint32) {
|
||||||
e.dynTab.setMaxSize(v)
|
e.dynTab.setMaxSize(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MaxDynamicTableSize returns the current dynamic header table size.
|
||||||
|
func (e *Encoder) MaxDynamicTableSize() (v uint32) {
|
||||||
|
return e.dynTab.maxSize
|
||||||
|
}
|
||||||
|
|
||||||
// SetMaxDynamicTableSizeLimit changes the maximum value that can be
|
// SetMaxDynamicTableSizeLimit changes the maximum value that can be
|
||||||
// specified in SetMaxDynamicTableSize to v. By default, it is set to
|
// specified in SetMaxDynamicTableSize to v. By default, it is set to
|
||||||
// 4096, which is the same size of the default dynamic header table
|
// 4096, which is the same size of the default dynamic header table
|
||||||
|
@ -191,7 +196,7 @@ func appendTableSize(dst []byte, v uint32) []byte {
|
||||||
// bit prefix, to dst and returns the extended buffer.
|
// bit prefix, to dst and returns the extended buffer.
|
||||||
//
|
//
|
||||||
// See
|
// See
|
||||||
// http://http2.github.io/http2-spec/compression.html#integer.representation
|
// https://httpwg.org/specs/rfc7541.html#integer.representation
|
||||||
func appendVarInt(dst []byte, n byte, i uint64) []byte {
|
func appendVarInt(dst []byte, n byte, i uint64) []byte {
|
||||||
k := uint64((1 << n) - 1)
|
k := uint64((1 << n) - 1)
|
||||||
if i < k {
|
if i < k {
|
||||||
|
|
|
@ -59,7 +59,7 @@ func (hf HeaderField) String() string {
|
||||||
|
|
||||||
// Size returns the size of an entry per RFC 7541 section 4.1.
|
// Size returns the size of an entry per RFC 7541 section 4.1.
|
||||||
func (hf HeaderField) Size() uint32 {
|
func (hf HeaderField) Size() uint32 {
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.4.1
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.4.1
|
||||||
// "The size of the dynamic table is the sum of the size of
|
// "The size of the dynamic table is the sum of the size of
|
||||||
// its entries. The size of an entry is the sum of its name's
|
// its entries. The size of an entry is the sum of its name's
|
||||||
// length in octets (as defined in Section 5.2), its value's
|
// length in octets (as defined in Section 5.2), its value's
|
||||||
|
@ -158,7 +158,7 @@ func (d *Decoder) SetAllowedMaxDynamicTableSize(v uint32) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type dynamicTable struct {
|
type dynamicTable struct {
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.2.3.2
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.2.3.2
|
||||||
table headerFieldTable
|
table headerFieldTable
|
||||||
size uint32 // in bytes
|
size uint32 // in bytes
|
||||||
maxSize uint32 // current maxSize
|
maxSize uint32 // current maxSize
|
||||||
|
@ -211,7 +211,7 @@ func (d *Decoder) at(i uint64) (hf HeaderField, ok bool) {
|
||||||
return dt.ents[dt.len()-(int(i)-staticTable.len())], true
|
return dt.ents[dt.len()-(int(i)-staticTable.len())], true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decode decodes an entire block.
|
// DecodeFull decodes an entire block.
|
||||||
//
|
//
|
||||||
// TODO: remove this method and make it incremental later? This is
|
// TODO: remove this method and make it incremental later? This is
|
||||||
// easier for debugging now.
|
// easier for debugging now.
|
||||||
|
@ -307,27 +307,27 @@ func (d *Decoder) parseHeaderFieldRepr() error {
|
||||||
case b&128 != 0:
|
case b&128 != 0:
|
||||||
// Indexed representation.
|
// Indexed representation.
|
||||||
// High bit set?
|
// High bit set?
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.6.1
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.6.1
|
||||||
return d.parseFieldIndexed()
|
return d.parseFieldIndexed()
|
||||||
case b&192 == 64:
|
case b&192 == 64:
|
||||||
// 6.2.1 Literal Header Field with Incremental Indexing
|
// 6.2.1 Literal Header Field with Incremental Indexing
|
||||||
// 0b10xxxxxx: top two bits are 10
|
// 0b10xxxxxx: top two bits are 10
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.1
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.6.2.1
|
||||||
return d.parseFieldLiteral(6, indexedTrue)
|
return d.parseFieldLiteral(6, indexedTrue)
|
||||||
case b&240 == 0:
|
case b&240 == 0:
|
||||||
// 6.2.2 Literal Header Field without Indexing
|
// 6.2.2 Literal Header Field without Indexing
|
||||||
// 0b0000xxxx: top four bits are 0000
|
// 0b0000xxxx: top four bits are 0000
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.2
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.6.2.2
|
||||||
return d.parseFieldLiteral(4, indexedFalse)
|
return d.parseFieldLiteral(4, indexedFalse)
|
||||||
case b&240 == 16:
|
case b&240 == 16:
|
||||||
// 6.2.3 Literal Header Field never Indexed
|
// 6.2.3 Literal Header Field never Indexed
|
||||||
// 0b0001xxxx: top four bits are 0001
|
// 0b0001xxxx: top four bits are 0001
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.3
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.6.2.3
|
||||||
return d.parseFieldLiteral(4, indexedNever)
|
return d.parseFieldLiteral(4, indexedNever)
|
||||||
case b&224 == 32:
|
case b&224 == 32:
|
||||||
// 6.3 Dynamic Table Size Update
|
// 6.3 Dynamic Table Size Update
|
||||||
// Top three bits are '001'.
|
// Top three bits are '001'.
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.6.3
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.6.3
|
||||||
return d.parseDynamicTableSizeUpdate()
|
return d.parseDynamicTableSizeUpdate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,6 +359,7 @@ func (d *Decoder) parseFieldLiteral(n uint8, it indexType) error {
|
||||||
|
|
||||||
var hf HeaderField
|
var hf HeaderField
|
||||||
wantStr := d.emitEnabled || it.indexed()
|
wantStr := d.emitEnabled || it.indexed()
|
||||||
|
var undecodedName undecodedString
|
||||||
if nameIdx > 0 {
|
if nameIdx > 0 {
|
||||||
ihf, ok := d.at(nameIdx)
|
ihf, ok := d.at(nameIdx)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -366,15 +367,27 @@ func (d *Decoder) parseFieldLiteral(n uint8, it indexType) error {
|
||||||
}
|
}
|
||||||
hf.Name = ihf.Name
|
hf.Name = ihf.Name
|
||||||
} else {
|
} else {
|
||||||
hf.Name, buf, err = d.readString(buf, wantStr)
|
undecodedName, buf, err = d.readString(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hf.Value, buf, err = d.readString(buf, wantStr)
|
undecodedValue, buf, err := d.readString(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if wantStr {
|
||||||
|
if nameIdx <= 0 {
|
||||||
|
hf.Name, err = d.decodeString(undecodedName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hf.Value, err = d.decodeString(undecodedValue)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
d.buf = buf
|
d.buf = buf
|
||||||
if it.indexed() {
|
if it.indexed() {
|
||||||
d.dynTab.add(hf)
|
d.dynTab.add(hf)
|
||||||
|
@ -420,7 +433,7 @@ var errVarintOverflow = DecodingError{errors.New("varint integer overflow")}
|
||||||
|
|
||||||
// readVarInt reads an unsigned variable length integer off the
|
// readVarInt reads an unsigned variable length integer off the
|
||||||
// beginning of p. n is the parameter as described in
|
// beginning of p. n is the parameter as described in
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.5.1.
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.5.1.
|
||||||
//
|
//
|
||||||
// n must always be between 1 and 8.
|
// n must always be between 1 and 8.
|
||||||
//
|
//
|
||||||
|
@ -459,46 +472,52 @@ func readVarInt(n byte, p []byte) (i uint64, remain []byte, err error) {
|
||||||
return 0, origP, errNeedMore
|
return 0, origP, errNeedMore
|
||||||
}
|
}
|
||||||
|
|
||||||
// readString decodes an hpack string from p.
|
// readString reads an hpack string from p.
|
||||||
//
|
//
|
||||||
// wantStr is whether s will be used. If false, decompression and
|
// It returns a reference to the encoded string data to permit deferring decode costs
|
||||||
// []byte->string garbage are skipped if s will be ignored
|
// until after the caller verifies all data is present.
|
||||||
// anyway. This does mean that huffman decoding errors for non-indexed
|
func (d *Decoder) readString(p []byte) (u undecodedString, remain []byte, err error) {
|
||||||
// strings past the MAX_HEADER_LIST_SIZE are ignored, but the server
|
|
||||||
// is returning an error anyway, and because they're not indexed, the error
|
|
||||||
// won't affect the decoding state.
|
|
||||||
func (d *Decoder) readString(p []byte, wantStr bool) (s string, remain []byte, err error) {
|
|
||||||
if len(p) == 0 {
|
if len(p) == 0 {
|
||||||
return "", p, errNeedMore
|
return u, p, errNeedMore
|
||||||
}
|
}
|
||||||
isHuff := p[0]&128 != 0
|
isHuff := p[0]&128 != 0
|
||||||
strLen, p, err := readVarInt(7, p)
|
strLen, p, err := readVarInt(7, p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", p, err
|
return u, p, err
|
||||||
}
|
}
|
||||||
if d.maxStrLen != 0 && strLen > uint64(d.maxStrLen) {
|
if d.maxStrLen != 0 && strLen > uint64(d.maxStrLen) {
|
||||||
return "", nil, ErrStringLength
|
// Returning an error here means Huffman decoding errors
|
||||||
|
// for non-indexed strings past the maximum string length
|
||||||
|
// are ignored, but the server is returning an error anyway
|
||||||
|
// and because the string is not indexed the error will not
|
||||||
|
// affect the decoding state.
|
||||||
|
return u, nil, ErrStringLength
|
||||||
}
|
}
|
||||||
if uint64(len(p)) < strLen {
|
if uint64(len(p)) < strLen {
|
||||||
return "", p, errNeedMore
|
return u, p, errNeedMore
|
||||||
}
|
|
||||||
if !isHuff {
|
|
||||||
if wantStr {
|
|
||||||
s = string(p[:strLen])
|
|
||||||
}
|
|
||||||
return s, p[strLen:], nil
|
|
||||||
}
|
}
|
||||||
|
u.isHuff = isHuff
|
||||||
|
u.b = p[:strLen]
|
||||||
|
return u, p[strLen:], nil
|
||||||
|
}
|
||||||
|
|
||||||
if wantStr {
|
type undecodedString struct {
|
||||||
|
isHuff bool
|
||||||
|
b []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Decoder) decodeString(u undecodedString) (string, error) {
|
||||||
|
if !u.isHuff {
|
||||||
|
return string(u.b), nil
|
||||||
|
}
|
||||||
buf := bufPool.Get().(*bytes.Buffer)
|
buf := bufPool.Get().(*bytes.Buffer)
|
||||||
buf.Reset() // don't trust others
|
buf.Reset() // don't trust others
|
||||||
defer bufPool.Put(buf)
|
var s string
|
||||||
if err := huffmanDecode(buf, d.maxStrLen, p[:strLen]); err != nil {
|
err := huffmanDecode(buf, d.maxStrLen, u.b)
|
||||||
buf.Reset()
|
if err == nil {
|
||||||
return "", nil, err
|
|
||||||
}
|
|
||||||
s = buf.String()
|
s = buf.String()
|
||||||
buf.Reset() // be nice to GC
|
|
||||||
}
|
}
|
||||||
return s, p[strLen:], nil
|
buf.Reset() // be nice to GC
|
||||||
|
bufPool.Put(buf)
|
||||||
|
return s, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,188 @@
|
||||||
|
// go generate gen.go
|
||||||
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
|
|
||||||
|
package hpack
|
||||||
|
|
||||||
|
var staticTable = &headerFieldTable{
|
||||||
|
evictCount: 0,
|
||||||
|
byName: map[string]uint64{
|
||||||
|
":authority": 1,
|
||||||
|
":method": 3,
|
||||||
|
":path": 5,
|
||||||
|
":scheme": 7,
|
||||||
|
":status": 14,
|
||||||
|
"accept-charset": 15,
|
||||||
|
"accept-encoding": 16,
|
||||||
|
"accept-language": 17,
|
||||||
|
"accept-ranges": 18,
|
||||||
|
"accept": 19,
|
||||||
|
"access-control-allow-origin": 20,
|
||||||
|
"age": 21,
|
||||||
|
"allow": 22,
|
||||||
|
"authorization": 23,
|
||||||
|
"cache-control": 24,
|
||||||
|
"content-disposition": 25,
|
||||||
|
"content-encoding": 26,
|
||||||
|
"content-language": 27,
|
||||||
|
"content-length": 28,
|
||||||
|
"content-location": 29,
|
||||||
|
"content-range": 30,
|
||||||
|
"content-type": 31,
|
||||||
|
"cookie": 32,
|
||||||
|
"date": 33,
|
||||||
|
"etag": 34,
|
||||||
|
"expect": 35,
|
||||||
|
"expires": 36,
|
||||||
|
"from": 37,
|
||||||
|
"host": 38,
|
||||||
|
"if-match": 39,
|
||||||
|
"if-modified-since": 40,
|
||||||
|
"if-none-match": 41,
|
||||||
|
"if-range": 42,
|
||||||
|
"if-unmodified-since": 43,
|
||||||
|
"last-modified": 44,
|
||||||
|
"link": 45,
|
||||||
|
"location": 46,
|
||||||
|
"max-forwards": 47,
|
||||||
|
"proxy-authenticate": 48,
|
||||||
|
"proxy-authorization": 49,
|
||||||
|
"range": 50,
|
||||||
|
"referer": 51,
|
||||||
|
"refresh": 52,
|
||||||
|
"retry-after": 53,
|
||||||
|
"server": 54,
|
||||||
|
"set-cookie": 55,
|
||||||
|
"strict-transport-security": 56,
|
||||||
|
"transfer-encoding": 57,
|
||||||
|
"user-agent": 58,
|
||||||
|
"vary": 59,
|
||||||
|
"via": 60,
|
||||||
|
"www-authenticate": 61,
|
||||||
|
},
|
||||||
|
byNameValue: map[pairNameValue]uint64{
|
||||||
|
{name: ":authority", value: ""}: 1,
|
||||||
|
{name: ":method", value: "GET"}: 2,
|
||||||
|
{name: ":method", value: "POST"}: 3,
|
||||||
|
{name: ":path", value: "/"}: 4,
|
||||||
|
{name: ":path", value: "/index.html"}: 5,
|
||||||
|
{name: ":scheme", value: "http"}: 6,
|
||||||
|
{name: ":scheme", value: "https"}: 7,
|
||||||
|
{name: ":status", value: "200"}: 8,
|
||||||
|
{name: ":status", value: "204"}: 9,
|
||||||
|
{name: ":status", value: "206"}: 10,
|
||||||
|
{name: ":status", value: "304"}: 11,
|
||||||
|
{name: ":status", value: "400"}: 12,
|
||||||
|
{name: ":status", value: "404"}: 13,
|
||||||
|
{name: ":status", value: "500"}: 14,
|
||||||
|
{name: "accept-charset", value: ""}: 15,
|
||||||
|
{name: "accept-encoding", value: "gzip, deflate"}: 16,
|
||||||
|
{name: "accept-language", value: ""}: 17,
|
||||||
|
{name: "accept-ranges", value: ""}: 18,
|
||||||
|
{name: "accept", value: ""}: 19,
|
||||||
|
{name: "access-control-allow-origin", value: ""}: 20,
|
||||||
|
{name: "age", value: ""}: 21,
|
||||||
|
{name: "allow", value: ""}: 22,
|
||||||
|
{name: "authorization", value: ""}: 23,
|
||||||
|
{name: "cache-control", value: ""}: 24,
|
||||||
|
{name: "content-disposition", value: ""}: 25,
|
||||||
|
{name: "content-encoding", value: ""}: 26,
|
||||||
|
{name: "content-language", value: ""}: 27,
|
||||||
|
{name: "content-length", value: ""}: 28,
|
||||||
|
{name: "content-location", value: ""}: 29,
|
||||||
|
{name: "content-range", value: ""}: 30,
|
||||||
|
{name: "content-type", value: ""}: 31,
|
||||||
|
{name: "cookie", value: ""}: 32,
|
||||||
|
{name: "date", value: ""}: 33,
|
||||||
|
{name: "etag", value: ""}: 34,
|
||||||
|
{name: "expect", value: ""}: 35,
|
||||||
|
{name: "expires", value: ""}: 36,
|
||||||
|
{name: "from", value: ""}: 37,
|
||||||
|
{name: "host", value: ""}: 38,
|
||||||
|
{name: "if-match", value: ""}: 39,
|
||||||
|
{name: "if-modified-since", value: ""}: 40,
|
||||||
|
{name: "if-none-match", value: ""}: 41,
|
||||||
|
{name: "if-range", value: ""}: 42,
|
||||||
|
{name: "if-unmodified-since", value: ""}: 43,
|
||||||
|
{name: "last-modified", value: ""}: 44,
|
||||||
|
{name: "link", value: ""}: 45,
|
||||||
|
{name: "location", value: ""}: 46,
|
||||||
|
{name: "max-forwards", value: ""}: 47,
|
||||||
|
{name: "proxy-authenticate", value: ""}: 48,
|
||||||
|
{name: "proxy-authorization", value: ""}: 49,
|
||||||
|
{name: "range", value: ""}: 50,
|
||||||
|
{name: "referer", value: ""}: 51,
|
||||||
|
{name: "refresh", value: ""}: 52,
|
||||||
|
{name: "retry-after", value: ""}: 53,
|
||||||
|
{name: "server", value: ""}: 54,
|
||||||
|
{name: "set-cookie", value: ""}: 55,
|
||||||
|
{name: "strict-transport-security", value: ""}: 56,
|
||||||
|
{name: "transfer-encoding", value: ""}: 57,
|
||||||
|
{name: "user-agent", value: ""}: 58,
|
||||||
|
{name: "vary", value: ""}: 59,
|
||||||
|
{name: "via", value: ""}: 60,
|
||||||
|
{name: "www-authenticate", value: ""}: 61,
|
||||||
|
},
|
||||||
|
ents: []HeaderField{
|
||||||
|
{Name: ":authority", Value: "", Sensitive: false},
|
||||||
|
{Name: ":method", Value: "GET", Sensitive: false},
|
||||||
|
{Name: ":method", Value: "POST", Sensitive: false},
|
||||||
|
{Name: ":path", Value: "/", Sensitive: false},
|
||||||
|
{Name: ":path", Value: "/index.html", Sensitive: false},
|
||||||
|
{Name: ":scheme", Value: "http", Sensitive: false},
|
||||||
|
{Name: ":scheme", Value: "https", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "200", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "204", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "206", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "304", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "400", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "404", Sensitive: false},
|
||||||
|
{Name: ":status", Value: "500", Sensitive: false},
|
||||||
|
{Name: "accept-charset", Value: "", Sensitive: false},
|
||||||
|
{Name: "accept-encoding", Value: "gzip, deflate", Sensitive: false},
|
||||||
|
{Name: "accept-language", Value: "", Sensitive: false},
|
||||||
|
{Name: "accept-ranges", Value: "", Sensitive: false},
|
||||||
|
{Name: "accept", Value: "", Sensitive: false},
|
||||||
|
{Name: "access-control-allow-origin", Value: "", Sensitive: false},
|
||||||
|
{Name: "age", Value: "", Sensitive: false},
|
||||||
|
{Name: "allow", Value: "", Sensitive: false},
|
||||||
|
{Name: "authorization", Value: "", Sensitive: false},
|
||||||
|
{Name: "cache-control", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-disposition", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-encoding", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-language", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-length", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-location", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-range", Value: "", Sensitive: false},
|
||||||
|
{Name: "content-type", Value: "", Sensitive: false},
|
||||||
|
{Name: "cookie", Value: "", Sensitive: false},
|
||||||
|
{Name: "date", Value: "", Sensitive: false},
|
||||||
|
{Name: "etag", Value: "", Sensitive: false},
|
||||||
|
{Name: "expect", Value: "", Sensitive: false},
|
||||||
|
{Name: "expires", Value: "", Sensitive: false},
|
||||||
|
{Name: "from", Value: "", Sensitive: false},
|
||||||
|
{Name: "host", Value: "", Sensitive: false},
|
||||||
|
{Name: "if-match", Value: "", Sensitive: false},
|
||||||
|
{Name: "if-modified-since", Value: "", Sensitive: false},
|
||||||
|
{Name: "if-none-match", Value: "", Sensitive: false},
|
||||||
|
{Name: "if-range", Value: "", Sensitive: false},
|
||||||
|
{Name: "if-unmodified-since", Value: "", Sensitive: false},
|
||||||
|
{Name: "last-modified", Value: "", Sensitive: false},
|
||||||
|
{Name: "link", Value: "", Sensitive: false},
|
||||||
|
{Name: "location", Value: "", Sensitive: false},
|
||||||
|
{Name: "max-forwards", Value: "", Sensitive: false},
|
||||||
|
{Name: "proxy-authenticate", Value: "", Sensitive: false},
|
||||||
|
{Name: "proxy-authorization", Value: "", Sensitive: false},
|
||||||
|
{Name: "range", Value: "", Sensitive: false},
|
||||||
|
{Name: "referer", Value: "", Sensitive: false},
|
||||||
|
{Name: "refresh", Value: "", Sensitive: false},
|
||||||
|
{Name: "retry-after", Value: "", Sensitive: false},
|
||||||
|
{Name: "server", Value: "", Sensitive: false},
|
||||||
|
{Name: "set-cookie", Value: "", Sensitive: false},
|
||||||
|
{Name: "strict-transport-security", Value: "", Sensitive: false},
|
||||||
|
{Name: "transfer-encoding", Value: "", Sensitive: false},
|
||||||
|
{Name: "user-agent", Value: "", Sensitive: false},
|
||||||
|
{Name: "vary", Value: "", Sensitive: false},
|
||||||
|
{Name: "via", Value: "", Sensitive: false},
|
||||||
|
{Name: "www-authenticate", Value: "", Sensitive: false},
|
||||||
|
},
|
||||||
|
}
|
|
@ -96,8 +96,7 @@ func (t *headerFieldTable) evictOldest(n int) {
|
||||||
// meaning t.ents is reversed for dynamic tables. Hence, when t is a dynamic
|
// meaning t.ents is reversed for dynamic tables. Hence, when t is a dynamic
|
||||||
// table, the return value i actually refers to the entry t.ents[t.len()-i].
|
// table, the return value i actually refers to the entry t.ents[t.len()-i].
|
||||||
//
|
//
|
||||||
// All tables are assumed to be a dynamic tables except for the global
|
// All tables are assumed to be a dynamic tables except for the global staticTable.
|
||||||
// staticTable pointer.
|
|
||||||
//
|
//
|
||||||
// See Section 2.3.3.
|
// See Section 2.3.3.
|
||||||
func (t *headerFieldTable) search(f HeaderField) (i uint64, nameValueMatch bool) {
|
func (t *headerFieldTable) search(f HeaderField) (i uint64, nameValueMatch bool) {
|
||||||
|
@ -125,81 +124,6 @@ func (t *headerFieldTable) idToIndex(id uint64) uint64 {
|
||||||
return k + 1
|
return k + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
// http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07#appendix-B
|
|
||||||
var staticTable = newStaticTable()
|
|
||||||
var staticTableEntries = [...]HeaderField{
|
|
||||||
{Name: ":authority"},
|
|
||||||
{Name: ":method", Value: "GET"},
|
|
||||||
{Name: ":method", Value: "POST"},
|
|
||||||
{Name: ":path", Value: "/"},
|
|
||||||
{Name: ":path", Value: "/index.html"},
|
|
||||||
{Name: ":scheme", Value: "http"},
|
|
||||||
{Name: ":scheme", Value: "https"},
|
|
||||||
{Name: ":status", Value: "200"},
|
|
||||||
{Name: ":status", Value: "204"},
|
|
||||||
{Name: ":status", Value: "206"},
|
|
||||||
{Name: ":status", Value: "304"},
|
|
||||||
{Name: ":status", Value: "400"},
|
|
||||||
{Name: ":status", Value: "404"},
|
|
||||||
{Name: ":status", Value: "500"},
|
|
||||||
{Name: "accept-charset"},
|
|
||||||
{Name: "accept-encoding", Value: "gzip, deflate"},
|
|
||||||
{Name: "accept-language"},
|
|
||||||
{Name: "accept-ranges"},
|
|
||||||
{Name: "accept"},
|
|
||||||
{Name: "access-control-allow-origin"},
|
|
||||||
{Name: "age"},
|
|
||||||
{Name: "allow"},
|
|
||||||
{Name: "authorization"},
|
|
||||||
{Name: "cache-control"},
|
|
||||||
{Name: "content-disposition"},
|
|
||||||
{Name: "content-encoding"},
|
|
||||||
{Name: "content-language"},
|
|
||||||
{Name: "content-length"},
|
|
||||||
{Name: "content-location"},
|
|
||||||
{Name: "content-range"},
|
|
||||||
{Name: "content-type"},
|
|
||||||
{Name: "cookie"},
|
|
||||||
{Name: "date"},
|
|
||||||
{Name: "etag"},
|
|
||||||
{Name: "expect"},
|
|
||||||
{Name: "expires"},
|
|
||||||
{Name: "from"},
|
|
||||||
{Name: "host"},
|
|
||||||
{Name: "if-match"},
|
|
||||||
{Name: "if-modified-since"},
|
|
||||||
{Name: "if-none-match"},
|
|
||||||
{Name: "if-range"},
|
|
||||||
{Name: "if-unmodified-since"},
|
|
||||||
{Name: "last-modified"},
|
|
||||||
{Name: "link"},
|
|
||||||
{Name: "location"},
|
|
||||||
{Name: "max-forwards"},
|
|
||||||
{Name: "proxy-authenticate"},
|
|
||||||
{Name: "proxy-authorization"},
|
|
||||||
{Name: "range"},
|
|
||||||
{Name: "referer"},
|
|
||||||
{Name: "refresh"},
|
|
||||||
{Name: "retry-after"},
|
|
||||||
{Name: "server"},
|
|
||||||
{Name: "set-cookie"},
|
|
||||||
{Name: "strict-transport-security"},
|
|
||||||
{Name: "transfer-encoding"},
|
|
||||||
{Name: "user-agent"},
|
|
||||||
{Name: "vary"},
|
|
||||||
{Name: "via"},
|
|
||||||
{Name: "www-authenticate"},
|
|
||||||
}
|
|
||||||
|
|
||||||
func newStaticTable() *headerFieldTable {
|
|
||||||
t := &headerFieldTable{}
|
|
||||||
t.init()
|
|
||||||
for _, e := range staticTableEntries[:] {
|
|
||||||
t.addEntry(e)
|
|
||||||
}
|
|
||||||
return t
|
|
||||||
}
|
|
||||||
|
|
||||||
var huffmanCodes = [256]uint32{
|
var huffmanCodes = [256]uint32{
|
||||||
0x1ff8,
|
0x1ff8,
|
||||||
0x7fffd8,
|
0x7fffd8,
|
||||||
|
|
|
@ -55,14 +55,14 @@ const (
|
||||||
ClientPreface = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
|
ClientPreface = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
|
||||||
|
|
||||||
// SETTINGS_MAX_FRAME_SIZE default
|
// SETTINGS_MAX_FRAME_SIZE default
|
||||||
// http://http2.github.io/http2-spec/#rfc.section.6.5.2
|
// https://httpwg.org/specs/rfc7540.html#rfc.section.6.5.2
|
||||||
initialMaxFrameSize = 16384
|
initialMaxFrameSize = 16384
|
||||||
|
|
||||||
// NextProtoTLS is the NPN/ALPN protocol negotiated during
|
// NextProtoTLS is the NPN/ALPN protocol negotiated during
|
||||||
// HTTP/2's TLS setup.
|
// HTTP/2's TLS setup.
|
||||||
NextProtoTLS = "h2"
|
NextProtoTLS = "h2"
|
||||||
|
|
||||||
// http://http2.github.io/http2-spec/#SettingValues
|
// https://httpwg.org/specs/rfc7540.html#SettingValues
|
||||||
initialHeaderTableSize = 4096
|
initialHeaderTableSize = 4096
|
||||||
|
|
||||||
initialWindowSize = 65535 // 6.9.2 Initial Flow Control Window Size
|
initialWindowSize = 65535 // 6.9.2 Initial Flow Control Window Size
|
||||||
|
@ -111,7 +111,7 @@ func (st streamState) String() string {
|
||||||
// Setting is a setting parameter: which setting it is, and its value.
|
// Setting is a setting parameter: which setting it is, and its value.
|
||||||
type Setting struct {
|
type Setting struct {
|
||||||
// ID is which setting is being set.
|
// ID is which setting is being set.
|
||||||
// See http://http2.github.io/http2-spec/#SettingValues
|
// See https://httpwg.org/specs/rfc7540.html#SettingFormat
|
||||||
ID SettingID
|
ID SettingID
|
||||||
|
|
||||||
// Val is the value.
|
// Val is the value.
|
||||||
|
@ -143,7 +143,7 @@ func (s Setting) Valid() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// A SettingID is an HTTP/2 setting as defined in
|
// A SettingID is an HTTP/2 setting as defined in
|
||||||
// http://http2.github.io/http2-spec/#iana-settings
|
// https://httpwg.org/specs/rfc7540.html#iana-settings
|
||||||
type SettingID uint16
|
type SettingID uint16
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -98,6 +98,19 @@ type Server struct {
|
||||||
// the HTTP/2 spec's recommendations.
|
// the HTTP/2 spec's recommendations.
|
||||||
MaxConcurrentStreams uint32
|
MaxConcurrentStreams uint32
|
||||||
|
|
||||||
|
// MaxDecoderHeaderTableSize optionally specifies the http2
|
||||||
|
// SETTINGS_HEADER_TABLE_SIZE to send in the initial settings frame. It
|
||||||
|
// 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.
|
||||||
|
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.
|
||||||
|
MaxEncoderHeaderTableSize uint32
|
||||||
|
|
||||||
// MaxReadFrameSize optionally specifies the largest frame
|
// MaxReadFrameSize optionally specifies the largest frame
|
||||||
// this server is willing to read. A valid value is between
|
// this server is willing to read. A valid value is between
|
||||||
// 16k and 16M, inclusive. If zero or otherwise invalid, a
|
// 16k and 16M, inclusive. If zero or otherwise invalid, a
|
||||||
|
@ -143,7 +156,7 @@ type Server struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) initialConnRecvWindowSize() int32 {
|
func (s *Server) initialConnRecvWindowSize() int32 {
|
||||||
if s.MaxUploadBufferPerConnection > initialWindowSize {
|
if s.MaxUploadBufferPerConnection >= initialWindowSize {
|
||||||
return s.MaxUploadBufferPerConnection
|
return s.MaxUploadBufferPerConnection
|
||||||
}
|
}
|
||||||
return 1 << 20
|
return 1 << 20
|
||||||
|
@ -170,6 +183,20 @@ func (s *Server) maxConcurrentStreams() uint32 {
|
||||||
return defaultMaxStreams
|
return defaultMaxStreams
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) maxDecoderHeaderTableSize() uint32 {
|
||||||
|
if v := s.MaxDecoderHeaderTableSize; v > 0 {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
return initialHeaderTableSize
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) maxEncoderHeaderTableSize() uint32 {
|
||||||
|
if v := s.MaxEncoderHeaderTableSize; v > 0 {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
return initialHeaderTableSize
|
||||||
|
}
|
||||||
|
|
||||||
// maxQueuedControlFrames is the maximum number of control frames like
|
// maxQueuedControlFrames is the maximum number of control frames like
|
||||||
// SETTINGS, PING and RST_STREAM that will be queued for writing before
|
// SETTINGS, PING and RST_STREAM that will be queued for writing before
|
||||||
// the connection is closed to prevent memory exhaustion attacks.
|
// the connection is closed to prevent memory exhaustion attacks.
|
||||||
|
@ -394,7 +421,6 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
|
||||||
advMaxStreams: s.maxConcurrentStreams(),
|
advMaxStreams: s.maxConcurrentStreams(),
|
||||||
initialStreamSendWindowSize: initialWindowSize,
|
initialStreamSendWindowSize: initialWindowSize,
|
||||||
maxFrameSize: initialMaxFrameSize,
|
maxFrameSize: initialMaxFrameSize,
|
||||||
headerTableSize: initialHeaderTableSize,
|
|
||||||
serveG: newGoroutineLock(),
|
serveG: newGoroutineLock(),
|
||||||
pushEnabled: true,
|
pushEnabled: true,
|
||||||
sawClientPreface: opts.SawClientPreface,
|
sawClientPreface: opts.SawClientPreface,
|
||||||
|
@ -422,14 +448,15 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
|
||||||
// configured value for inflow, that will be updated when we send a
|
// configured value for inflow, that will be updated when we send a
|
||||||
// WINDOW_UPDATE shortly after sending SETTINGS.
|
// WINDOW_UPDATE shortly after sending SETTINGS.
|
||||||
sc.flow.add(initialWindowSize)
|
sc.flow.add(initialWindowSize)
|
||||||
sc.inflow.add(initialWindowSize)
|
sc.inflow.init(initialWindowSize)
|
||||||
sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf)
|
sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf)
|
||||||
|
sc.hpackEncoder.SetMaxDynamicTableSizeLimit(s.maxEncoderHeaderTableSize())
|
||||||
|
|
||||||
fr := NewFramer(sc.bw, c)
|
fr := NewFramer(sc.bw, c)
|
||||||
if s.CountError != nil {
|
if s.CountError != nil {
|
||||||
fr.countError = s.CountError
|
fr.countError = s.CountError
|
||||||
}
|
}
|
||||||
fr.ReadMetaHeaders = hpack.NewDecoder(initialHeaderTableSize, nil)
|
fr.ReadMetaHeaders = hpack.NewDecoder(s.maxDecoderHeaderTableSize(), nil)
|
||||||
fr.MaxHeaderListSize = sc.maxHeaderListSize()
|
fr.MaxHeaderListSize = sc.maxHeaderListSize()
|
||||||
fr.SetMaxReadFrameSize(s.maxReadFrameSize())
|
fr.SetMaxReadFrameSize(s.maxReadFrameSize())
|
||||||
sc.framer = fr
|
sc.framer = fr
|
||||||
|
@ -536,8 +563,8 @@ type serverConn struct {
|
||||||
wroteFrameCh chan frameWriteResult // from writeFrameAsync -> serve, tickles more frame writes
|
wroteFrameCh chan frameWriteResult // from writeFrameAsync -> serve, tickles more frame writes
|
||||||
bodyReadCh chan bodyReadMsg // from handlers -> serve
|
bodyReadCh chan bodyReadMsg // from handlers -> serve
|
||||||
serveMsgCh chan interface{} // misc messages & code to send to / run on the serve loop
|
serveMsgCh chan interface{} // misc messages & code to send to / run on the serve loop
|
||||||
flow flow // conn-wide (not stream-specific) outbound flow control
|
flow outflow // conn-wide (not stream-specific) outbound flow control
|
||||||
inflow flow // conn-wide inbound flow control
|
inflow inflow // conn-wide inbound flow control
|
||||||
tlsState *tls.ConnectionState // shared by all handlers, like net/http
|
tlsState *tls.ConnectionState // shared by all handlers, like net/http
|
||||||
remoteAddrStr string
|
remoteAddrStr string
|
||||||
writeSched WriteScheduler
|
writeSched WriteScheduler
|
||||||
|
@ -559,9 +586,9 @@ type serverConn struct {
|
||||||
streams map[uint32]*stream
|
streams map[uint32]*stream
|
||||||
initialStreamSendWindowSize int32
|
initialStreamSendWindowSize int32
|
||||||
maxFrameSize int32
|
maxFrameSize int32
|
||||||
headerTableSize uint32
|
|
||||||
peerMaxHeaderListSize uint32 // zero means unknown (default)
|
peerMaxHeaderListSize uint32 // zero means unknown (default)
|
||||||
canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case
|
canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case
|
||||||
|
canonHeaderKeysSize int // canonHeader keys size in bytes
|
||||||
writingFrame bool // started writing a frame (on serve goroutine or separate)
|
writingFrame bool // started writing a frame (on serve goroutine or separate)
|
||||||
writingFrameAsync bool // started a frame on its own goroutine but haven't heard back on wroteFrameCh
|
writingFrameAsync bool // started a frame on its own goroutine but haven't heard back on wroteFrameCh
|
||||||
needsFrameFlush bool // last frame write wasn't a flush
|
needsFrameFlush bool // last frame write wasn't a flush
|
||||||
|
@ -616,13 +643,15 @@ type stream struct {
|
||||||
// owned by serverConn's serve loop:
|
// owned by serverConn's serve loop:
|
||||||
bodyBytes int64 // body bytes seen so far
|
bodyBytes int64 // body bytes seen so far
|
||||||
declBodyBytes int64 // or -1 if undeclared
|
declBodyBytes int64 // or -1 if undeclared
|
||||||
flow flow // limits writing from Handler to client
|
flow outflow // limits writing from Handler to client
|
||||||
inflow flow // what the client is allowed to POST/etc to us
|
inflow inflow // what the client is allowed to POST/etc to us
|
||||||
state streamState
|
state streamState
|
||||||
resetQueued bool // RST_STREAM queued for write; set by sc.resetStream
|
resetQueued bool // RST_STREAM queued for write; set by sc.resetStream
|
||||||
gotTrailerHeader bool // HEADER frame for trailers was seen
|
gotTrailerHeader bool // HEADER frame for trailers was seen
|
||||||
wroteHeaders bool // whether we wrote headers (not status 100)
|
wroteHeaders bool // whether we wrote headers (not status 100)
|
||||||
|
readDeadline *time.Timer // nil if unused
|
||||||
writeDeadline *time.Timer // nil if unused
|
writeDeadline *time.Timer // nil if unused
|
||||||
|
closeErr error // set before cw is closed
|
||||||
|
|
||||||
trailer http.Header // accumulated trailers
|
trailer http.Header // accumulated trailers
|
||||||
reqTrailer http.Header // handler's Request.Trailer
|
reqTrailer http.Header // handler's Request.Trailer
|
||||||
|
@ -738,6 +767,13 @@ func (sc *serverConn) condlogf(err error, format string, args ...interface{}) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// maxCachedCanonicalHeadersKeysSize is an arbitrarily-chosen limit on the size
|
||||||
|
// of the entries in the canonHeader cache.
|
||||||
|
// This should be larger than the size of unique, uncommon header keys likely to
|
||||||
|
// be sent by the peer, while not so high as to permit unreasonable memory usage
|
||||||
|
// if the peer sends an unbounded number of unique header keys.
|
||||||
|
const maxCachedCanonicalHeadersKeysSize = 2048
|
||||||
|
|
||||||
func (sc *serverConn) canonicalHeader(v string) string {
|
func (sc *serverConn) canonicalHeader(v string) string {
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
buildCommonHeaderMapsOnce()
|
buildCommonHeaderMapsOnce()
|
||||||
|
@ -753,14 +789,10 @@ func (sc *serverConn) canonicalHeader(v string) string {
|
||||||
sc.canonHeader = make(map[string]string)
|
sc.canonHeader = make(map[string]string)
|
||||||
}
|
}
|
||||||
cv = http.CanonicalHeaderKey(v)
|
cv = http.CanonicalHeaderKey(v)
|
||||||
// maxCachedCanonicalHeaders is an arbitrarily-chosen limit on the number of
|
size := 100 + len(v)*2 // 100 bytes of map overhead + key + value
|
||||||
// entries in the canonHeader cache. This should be larger than the number
|
if sc.canonHeaderKeysSize+size <= maxCachedCanonicalHeadersKeysSize {
|
||||||
// of unique, uncommon header keys likely to be sent by the peer, while not
|
|
||||||
// so high as to permit unreasonable memory usage if the peer sends an unbounded
|
|
||||||
// number of unique header keys.
|
|
||||||
const maxCachedCanonicalHeaders = 32
|
|
||||||
if len(sc.canonHeader) < maxCachedCanonicalHeaders {
|
|
||||||
sc.canonHeader[v] = cv
|
sc.canonHeader[v] = cv
|
||||||
|
sc.canonHeaderKeysSize += size
|
||||||
}
|
}
|
||||||
return cv
|
return cv
|
||||||
}
|
}
|
||||||
|
@ -811,8 +843,13 @@ type frameWriteResult struct {
|
||||||
// and then reports when it's done.
|
// and then reports when it's done.
|
||||||
// At most one goroutine can be running writeFrameAsync at a time per
|
// At most one goroutine can be running writeFrameAsync at a time per
|
||||||
// serverConn.
|
// serverConn.
|
||||||
func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest) {
|
func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest, wd *writeData) {
|
||||||
err := wr.write.writeFrame(sc)
|
var err error
|
||||||
|
if wd == nil {
|
||||||
|
err = wr.write.writeFrame(sc)
|
||||||
|
} else {
|
||||||
|
err = sc.framer.endWrite()
|
||||||
|
}
|
||||||
sc.wroteFrameCh <- frameWriteResult{wr: wr, err: err}
|
sc.wroteFrameCh <- frameWriteResult{wr: wr, err: err}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -862,6 +899,7 @@ func (sc *serverConn) serve() {
|
||||||
{SettingMaxFrameSize, sc.srv.maxReadFrameSize()},
|
{SettingMaxFrameSize, sc.srv.maxReadFrameSize()},
|
||||||
{SettingMaxConcurrentStreams, sc.advMaxStreams},
|
{SettingMaxConcurrentStreams, sc.advMaxStreams},
|
||||||
{SettingMaxHeaderListSize, sc.maxHeaderListSize()},
|
{SettingMaxHeaderListSize, sc.maxHeaderListSize()},
|
||||||
|
{SettingHeaderTableSize, sc.srv.maxDecoderHeaderTableSize()},
|
||||||
{SettingInitialWindowSize, uint32(sc.srv.initialStreamRecvWindowSize())},
|
{SettingInitialWindowSize, uint32(sc.srv.initialStreamRecvWindowSize())},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -948,6 +986,8 @@ func (sc *serverConn) serve() {
|
||||||
}
|
}
|
||||||
case *startPushRequest:
|
case *startPushRequest:
|
||||||
sc.startPush(v)
|
sc.startPush(v)
|
||||||
|
case func(*serverConn):
|
||||||
|
v(sc)
|
||||||
default:
|
default:
|
||||||
panic(fmt.Sprintf("unexpected type %T", v))
|
panic(fmt.Sprintf("unexpected type %T", v))
|
||||||
}
|
}
|
||||||
|
@ -1216,9 +1256,16 @@ func (sc *serverConn) startFrameWrite(wr FrameWriteRequest) {
|
||||||
sc.writingFrameAsync = false
|
sc.writingFrameAsync = false
|
||||||
err := wr.write.writeFrame(sc)
|
err := wr.write.writeFrame(sc)
|
||||||
sc.wroteFrame(frameWriteResult{wr: wr, err: err})
|
sc.wroteFrame(frameWriteResult{wr: wr, err: err})
|
||||||
|
} else if wd, ok := wr.write.(*writeData); ok {
|
||||||
|
// Encode the frame in the serve goroutine, to ensure we don't have
|
||||||
|
// any lingering asynchronous references to data passed to Write.
|
||||||
|
// See https://go.dev/issue/58446.
|
||||||
|
sc.framer.startWriteDataPadded(wd.streamID, wd.endStream, wd.p, nil)
|
||||||
|
sc.writingFrameAsync = true
|
||||||
|
go sc.writeFrameAsync(wr, wd)
|
||||||
} else {
|
} else {
|
||||||
sc.writingFrameAsync = true
|
sc.writingFrameAsync = true
|
||||||
go sc.writeFrameAsync(wr)
|
go sc.writeFrameAsync(wr, nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1371,6 +1418,9 @@ func (sc *serverConn) startGracefulShutdownInternal() {
|
||||||
func (sc *serverConn) goAway(code ErrCode) {
|
func (sc *serverConn) goAway(code ErrCode) {
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
if sc.inGoAway {
|
if sc.inGoAway {
|
||||||
|
if sc.goAwayCode == ErrCodeNo {
|
||||||
|
sc.goAwayCode = code
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
sc.inGoAway = true
|
sc.inGoAway = true
|
||||||
|
@ -1458,6 +1508,21 @@ func (sc *serverConn) processFrame(f Frame) error {
|
||||||
sc.sawFirstSettings = true
|
sc.sawFirstSettings = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Discard frames for streams initiated after the identified last
|
||||||
|
// stream sent in a GOAWAY, or all frames after sending an error.
|
||||||
|
// We still need to return connection-level flow control for DATA frames.
|
||||||
|
// RFC 9113 Section 6.8.
|
||||||
|
if sc.inGoAway && (sc.goAwayCode != ErrCodeNo || f.Header().StreamID > sc.maxClientStreamID) {
|
||||||
|
|
||||||
|
if f, ok := f.(*DataFrame); ok {
|
||||||
|
if !sc.inflow.take(f.Length) {
|
||||||
|
return sc.countError("data_flow", streamError(f.Header().StreamID, ErrCodeFlowControl))
|
||||||
|
}
|
||||||
|
sc.sendWindowUpdate(nil, int(f.Length)) // conn-level
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
switch f := f.(type) {
|
switch f := f.(type) {
|
||||||
case *SettingsFrame:
|
case *SettingsFrame:
|
||||||
return sc.processSettings(f)
|
return sc.processSettings(f)
|
||||||
|
@ -1500,9 +1565,6 @@ func (sc *serverConn) processPing(f *PingFrame) error {
|
||||||
// PROTOCOL_ERROR."
|
// PROTOCOL_ERROR."
|
||||||
return sc.countError("ping_on_stream", ConnectionError(ErrCodeProtocol))
|
return sc.countError("ping_on_stream", ConnectionError(ErrCodeProtocol))
|
||||||
}
|
}
|
||||||
if sc.inGoAway && sc.goAwayCode != ErrCodeNo {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
sc.writeFrame(FrameWriteRequest{write: writePingAck{f}})
|
sc.writeFrame(FrameWriteRequest{write: writePingAck{f}})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -1564,6 +1626,9 @@ func (sc *serverConn) closeStream(st *stream, err error) {
|
||||||
panic(fmt.Sprintf("invariant; can't close stream in state %v", st.state))
|
panic(fmt.Sprintf("invariant; can't close stream in state %v", st.state))
|
||||||
}
|
}
|
||||||
st.state = stateClosed
|
st.state = stateClosed
|
||||||
|
if st.readDeadline != nil {
|
||||||
|
st.readDeadline.Stop()
|
||||||
|
}
|
||||||
if st.writeDeadline != nil {
|
if st.writeDeadline != nil {
|
||||||
st.writeDeadline.Stop()
|
st.writeDeadline.Stop()
|
||||||
}
|
}
|
||||||
|
@ -1589,6 +1654,14 @@ func (sc *serverConn) closeStream(st *stream, err error) {
|
||||||
|
|
||||||
p.CloseWithError(err)
|
p.CloseWithError(err)
|
||||||
}
|
}
|
||||||
|
if e, ok := err.(StreamError); ok {
|
||||||
|
if e.Cause != nil {
|
||||||
|
err = e.Cause
|
||||||
|
} else {
|
||||||
|
err = errStreamClosed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
st.closeErr = err
|
||||||
st.cw.Close() // signals Handler's CloseNotifier, unblocks writes, etc
|
st.cw.Close() // signals Handler's CloseNotifier, unblocks writes, etc
|
||||||
sc.writeSched.CloseStream(st.id)
|
sc.writeSched.CloseStream(st.id)
|
||||||
}
|
}
|
||||||
|
@ -1631,7 +1704,6 @@ func (sc *serverConn) processSetting(s Setting) error {
|
||||||
}
|
}
|
||||||
switch s.ID {
|
switch s.ID {
|
||||||
case SettingHeaderTableSize:
|
case SettingHeaderTableSize:
|
||||||
sc.headerTableSize = s.Val
|
|
||||||
sc.hpackEncoder.SetMaxDynamicTableSize(s.Val)
|
sc.hpackEncoder.SetMaxDynamicTableSize(s.Val)
|
||||||
case SettingEnablePush:
|
case SettingEnablePush:
|
||||||
sc.pushEnabled = s.Val != 0
|
sc.pushEnabled = s.Val != 0
|
||||||
|
@ -1685,16 +1757,6 @@ func (sc *serverConn) processSettingInitialWindowSize(val uint32) error {
|
||||||
func (sc *serverConn) processData(f *DataFrame) error {
|
func (sc *serverConn) processData(f *DataFrame) error {
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
id := f.Header().StreamID
|
id := f.Header().StreamID
|
||||||
if sc.inGoAway && (sc.goAwayCode != ErrCodeNo || id > sc.maxClientStreamID) {
|
|
||||||
// Discard all DATA frames if the GOAWAY is due to an
|
|
||||||
// error, or:
|
|
||||||
//
|
|
||||||
// Section 6.8: After sending a GOAWAY frame, the sender
|
|
||||||
// can discard frames for streams initiated by the
|
|
||||||
// receiver with identifiers higher than the identified
|
|
||||||
// last stream.
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
data := f.Data()
|
data := f.Data()
|
||||||
state, st := sc.state(id)
|
state, st := sc.state(id)
|
||||||
|
@ -1725,14 +1787,9 @@ func (sc *serverConn) processData(f *DataFrame) error {
|
||||||
// But still enforce their connection-level flow control,
|
// But still enforce their connection-level flow control,
|
||||||
// and return any flow control bytes since we're not going
|
// and return any flow control bytes since we're not going
|
||||||
// to consume them.
|
// to consume them.
|
||||||
if sc.inflow.available() < int32(f.Length) {
|
if !sc.inflow.take(f.Length) {
|
||||||
return sc.countError("data_flow", streamError(id, ErrCodeFlowControl))
|
return sc.countError("data_flow", streamError(id, ErrCodeFlowControl))
|
||||||
}
|
}
|
||||||
// Deduct the flow control from inflow, since we're
|
|
||||||
// going to immediately add it back in
|
|
||||||
// sendWindowUpdate, which also schedules sending the
|
|
||||||
// frames.
|
|
||||||
sc.inflow.take(int32(f.Length))
|
|
||||||
sc.sendWindowUpdate(nil, int(f.Length)) // conn-level
|
sc.sendWindowUpdate(nil, int(f.Length)) // conn-level
|
||||||
|
|
||||||
if st != nil && st.resetQueued {
|
if st != nil && st.resetQueued {
|
||||||
|
@ -1747,6 +1804,11 @@ func (sc *serverConn) processData(f *DataFrame) error {
|
||||||
|
|
||||||
// Sender sending more than they'd declared?
|
// Sender sending more than they'd declared?
|
||||||
if st.declBodyBytes != -1 && st.bodyBytes+int64(len(data)) > st.declBodyBytes {
|
if st.declBodyBytes != -1 && st.bodyBytes+int64(len(data)) > st.declBodyBytes {
|
||||||
|
if !sc.inflow.take(f.Length) {
|
||||||
|
return sc.countError("data_flow", streamError(id, ErrCodeFlowControl))
|
||||||
|
}
|
||||||
|
sc.sendWindowUpdate(nil, int(f.Length)) // conn-level
|
||||||
|
|
||||||
st.body.CloseWithError(fmt.Errorf("sender tried to send more than declared Content-Length of %d bytes", st.declBodyBytes))
|
st.body.CloseWithError(fmt.Errorf("sender tried to send more than declared Content-Length of %d bytes", st.declBodyBytes))
|
||||||
// RFC 7540, sec 8.1.2.6: A request or response is also malformed if the
|
// RFC 7540, sec 8.1.2.6: A request or response is also malformed if the
|
||||||
// value of a content-length header field does not equal the sum of the
|
// value of a content-length header field does not equal the sum of the
|
||||||
|
@ -1755,10 +1817,9 @@ func (sc *serverConn) processData(f *DataFrame) error {
|
||||||
}
|
}
|
||||||
if f.Length > 0 {
|
if f.Length > 0 {
|
||||||
// Check whether the client has flow control quota.
|
// Check whether the client has flow control quota.
|
||||||
if st.inflow.available() < int32(f.Length) {
|
if !takeInflows(&sc.inflow, &st.inflow, f.Length) {
|
||||||
return sc.countError("flow_on_data_length", streamError(id, ErrCodeFlowControl))
|
return sc.countError("flow_on_data_length", streamError(id, ErrCodeFlowControl))
|
||||||
}
|
}
|
||||||
st.inflow.take(int32(f.Length))
|
|
||||||
|
|
||||||
if len(data) > 0 {
|
if len(data) > 0 {
|
||||||
wrote, err := st.body.Write(data)
|
wrote, err := st.body.Write(data)
|
||||||
|
@ -1774,11 +1835,13 @@ func (sc *serverConn) processData(f *DataFrame) error {
|
||||||
|
|
||||||
// Return any padded flow control now, since we won't
|
// Return any padded flow control now, since we won't
|
||||||
// refund it later on body reads.
|
// refund it later on body reads.
|
||||||
if pad := int32(f.Length) - int32(len(data)); pad > 0 {
|
// Call sendWindowUpdate even if there is no padding,
|
||||||
|
// to return buffered flow control credit if the sent
|
||||||
|
// window has shrunk.
|
||||||
|
pad := int32(f.Length) - int32(len(data))
|
||||||
sc.sendWindowUpdate32(nil, pad)
|
sc.sendWindowUpdate32(nil, pad)
|
||||||
sc.sendWindowUpdate32(st, pad)
|
sc.sendWindowUpdate32(st, pad)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if f.StreamEnded() {
|
if f.StreamEnded() {
|
||||||
st.endStream()
|
st.endStream()
|
||||||
}
|
}
|
||||||
|
@ -1831,19 +1894,27 @@ func (st *stream) copyTrailersToHandlerRequest() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// onReadTimeout is run on its own goroutine (from time.AfterFunc)
|
||||||
|
// when the stream's ReadTimeout has fired.
|
||||||
|
func (st *stream) onReadTimeout() {
|
||||||
|
// Wrap the ErrDeadlineExceeded to avoid callers depending on us
|
||||||
|
// returning the bare error.
|
||||||
|
st.body.CloseWithError(fmt.Errorf("%w", os.ErrDeadlineExceeded))
|
||||||
|
}
|
||||||
|
|
||||||
// onWriteTimeout is run on its own goroutine (from time.AfterFunc)
|
// onWriteTimeout is run on its own goroutine (from time.AfterFunc)
|
||||||
// when the stream's WriteTimeout has fired.
|
// when the stream's WriteTimeout has fired.
|
||||||
func (st *stream) onWriteTimeout() {
|
func (st *stream) onWriteTimeout() {
|
||||||
st.sc.writeFrameFromHandler(FrameWriteRequest{write: streamError(st.id, ErrCodeInternal)})
|
st.sc.writeFrameFromHandler(FrameWriteRequest{write: StreamError{
|
||||||
|
StreamID: st.id,
|
||||||
|
Code: ErrCodeInternal,
|
||||||
|
Cause: os.ErrDeadlineExceeded,
|
||||||
|
}})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
|
func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
id := f.StreamID
|
id := f.StreamID
|
||||||
if sc.inGoAway {
|
|
||||||
// Ignore.
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
// http://tools.ietf.org/html/rfc7540#section-5.1.1
|
// http://tools.ietf.org/html/rfc7540#section-5.1.1
|
||||||
// Streams initiated by a client MUST use odd-numbered stream
|
// Streams initiated by a client MUST use odd-numbered stream
|
||||||
// identifiers. [...] An endpoint that receives an unexpected
|
// identifiers. [...] An endpoint that receives an unexpected
|
||||||
|
@ -1946,6 +2017,9 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
|
||||||
// (in Go 1.8), though. That's a more sane option anyway.
|
// (in Go 1.8), though. That's a more sane option anyway.
|
||||||
if sc.hs.ReadTimeout != 0 {
|
if sc.hs.ReadTimeout != 0 {
|
||||||
sc.conn.SetReadDeadline(time.Time{})
|
sc.conn.SetReadDeadline(time.Time{})
|
||||||
|
if st.body != nil {
|
||||||
|
st.readDeadline = time.AfterFunc(sc.hs.ReadTimeout, st.onReadTimeout)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
go sc.runHandler(rw, req, handler)
|
go sc.runHandler(rw, req, handler)
|
||||||
|
@ -2014,9 +2088,6 @@ func (sc *serverConn) checkPriority(streamID uint32, p PriorityParam) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sc *serverConn) processPriority(f *PriorityFrame) error {
|
func (sc *serverConn) processPriority(f *PriorityFrame) error {
|
||||||
if sc.inGoAway {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if err := sc.checkPriority(f.StreamID, f.PriorityParam); err != nil {
|
if err := sc.checkPriority(f.StreamID, f.PriorityParam); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -2041,8 +2112,7 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream
|
||||||
st.cw.Init()
|
st.cw.Init()
|
||||||
st.flow.conn = &sc.flow // link to conn-level counter
|
st.flow.conn = &sc.flow // link to conn-level counter
|
||||||
st.flow.add(sc.initialStreamSendWindowSize)
|
st.flow.add(sc.initialStreamSendWindowSize)
|
||||||
st.inflow.conn = &sc.inflow // link to conn-level counter
|
st.inflow.init(sc.srv.initialStreamRecvWindowSize())
|
||||||
st.inflow.add(sc.srv.initialStreamRecvWindowSize())
|
|
||||||
if sc.hs.WriteTimeout != 0 {
|
if sc.hs.WriteTimeout != 0 {
|
||||||
st.writeDeadline = time.AfterFunc(sc.hs.WriteTimeout, st.onWriteTimeout)
|
st.writeDeadline = time.AfterFunc(sc.hs.WriteTimeout, st.onWriteTimeout)
|
||||||
}
|
}
|
||||||
|
@ -2090,12 +2160,6 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
|
||||||
return nil, nil, sc.countError("bad_path_method", streamError(f.StreamID, ErrCodeProtocol))
|
return nil, nil, sc.countError("bad_path_method", streamError(f.StreamID, ErrCodeProtocol))
|
||||||
}
|
}
|
||||||
|
|
||||||
bodyOpen := !f.StreamEnded()
|
|
||||||
if rp.method == "HEAD" && bodyOpen {
|
|
||||||
// HEAD requests can't have bodies
|
|
||||||
return nil, nil, sc.countError("head_body", streamError(f.StreamID, ErrCodeProtocol))
|
|
||||||
}
|
|
||||||
|
|
||||||
rp.header = make(http.Header)
|
rp.header = make(http.Header)
|
||||||
for _, hf := range f.RegularFields() {
|
for _, hf := range f.RegularFields() {
|
||||||
rp.header.Add(sc.canonicalHeader(hf.Name), hf.Value)
|
rp.header.Add(sc.canonicalHeader(hf.Name), hf.Value)
|
||||||
|
@ -2108,6 +2172,7 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
bodyOpen := !f.StreamEnded()
|
||||||
if bodyOpen {
|
if bodyOpen {
|
||||||
if vv, ok := rp.header["Content-Length"]; ok {
|
if vv, ok := rp.header["Content-Length"]; ok {
|
||||||
if cl, err := strconv.ParseUint(vv[0], 10, 63); err == nil {
|
if cl, err := strconv.ParseUint(vv[0], 10, 63); err == nil {
|
||||||
|
@ -2139,7 +2204,7 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r
|
||||||
tlsState = sc.tlsState
|
tlsState = sc.tlsState
|
||||||
}
|
}
|
||||||
|
|
||||||
needsContinue := rp.header.Get("Expect") == "100-continue"
|
needsContinue := httpguts.HeaderValuesContainsToken(rp.header["Expect"], "100-continue")
|
||||||
if needsContinue {
|
if needsContinue {
|
||||||
rp.header.Del("Expect")
|
rp.header.Del("Expect")
|
||||||
}
|
}
|
||||||
|
@ -2223,6 +2288,9 @@ func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler
|
||||||
didPanic := true
|
didPanic := true
|
||||||
defer func() {
|
defer func() {
|
||||||
rw.rws.stream.cancelCtx()
|
rw.rws.stream.cancelCtx()
|
||||||
|
if req.MultipartForm != nil {
|
||||||
|
req.MultipartForm.RemoveAll()
|
||||||
|
}
|
||||||
if didPanic {
|
if didPanic {
|
||||||
e := recover()
|
e := recover()
|
||||||
sc.writeFrameFromHandler(FrameWriteRequest{
|
sc.writeFrameFromHandler(FrameWriteRequest{
|
||||||
|
@ -2326,47 +2394,28 @@ func (sc *serverConn) noteBodyRead(st *stream, n int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// st may be nil for conn-level
|
// st may be nil for conn-level
|
||||||
func (sc *serverConn) sendWindowUpdate(st *stream, n int) {
|
func (sc *serverConn) sendWindowUpdate32(st *stream, n int32) {
|
||||||
sc.serveG.check()
|
sc.sendWindowUpdate(st, int(n))
|
||||||
// "The legal range for the increment to the flow control
|
|
||||||
// window is 1 to 2^31-1 (2,147,483,647) octets."
|
|
||||||
// A Go Read call on 64-bit machines could in theory read
|
|
||||||
// a larger Read than this. Very unlikely, but we handle it here
|
|
||||||
// rather than elsewhere for now.
|
|
||||||
const maxUint31 = 1<<31 - 1
|
|
||||||
for n >= maxUint31 {
|
|
||||||
sc.sendWindowUpdate32(st, maxUint31)
|
|
||||||
n -= maxUint31
|
|
||||||
}
|
|
||||||
sc.sendWindowUpdate32(st, int32(n))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// st may be nil for conn-level
|
// st may be nil for conn-level
|
||||||
func (sc *serverConn) sendWindowUpdate32(st *stream, n int32) {
|
func (sc *serverConn) sendWindowUpdate(st *stream, n int) {
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
if n == 0 {
|
var streamID uint32
|
||||||
|
var send int32
|
||||||
|
if st == nil {
|
||||||
|
send = sc.inflow.add(n)
|
||||||
|
} else {
|
||||||
|
streamID = st.id
|
||||||
|
send = st.inflow.add(n)
|
||||||
|
}
|
||||||
|
if send == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if n < 0 {
|
|
||||||
panic("negative update")
|
|
||||||
}
|
|
||||||
var streamID uint32
|
|
||||||
if st != nil {
|
|
||||||
streamID = st.id
|
|
||||||
}
|
|
||||||
sc.writeFrame(FrameWriteRequest{
|
sc.writeFrame(FrameWriteRequest{
|
||||||
write: writeWindowUpdate{streamID: streamID, n: uint32(n)},
|
write: writeWindowUpdate{streamID: streamID, n: uint32(send)},
|
||||||
stream: st,
|
stream: st,
|
||||||
})
|
})
|
||||||
var ok bool
|
|
||||||
if st == nil {
|
|
||||||
ok = sc.inflow.add(n)
|
|
||||||
} else {
|
|
||||||
ok = st.inflow.add(n)
|
|
||||||
}
|
|
||||||
if !ok {
|
|
||||||
panic("internal error; sent too many window updates without decrements?")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// requestBody is the Handler's Request.Body type.
|
// requestBody is the Handler's Request.Body type.
|
||||||
|
@ -2454,7 +2503,15 @@ type responseWriterState struct {
|
||||||
|
|
||||||
type chunkWriter struct{ rws *responseWriterState }
|
type chunkWriter struct{ rws *responseWriterState }
|
||||||
|
|
||||||
func (cw chunkWriter) Write(p []byte) (n int, err error) { return cw.rws.writeChunk(p) }
|
func (cw chunkWriter) Write(p []byte) (n int, err error) {
|
||||||
|
n, err = cw.rws.writeChunk(p)
|
||||||
|
if err == errStreamClosed {
|
||||||
|
// If writing failed because the stream has been closed,
|
||||||
|
// return the reason it was closed.
|
||||||
|
err = cw.rws.stream.closeErr
|
||||||
|
}
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
func (rws *responseWriterState) hasTrailers() bool { return len(rws.trailers) > 0 }
|
func (rws *responseWriterState) hasTrailers() bool { return len(rws.trailers) > 0 }
|
||||||
|
|
||||||
|
@ -2493,6 +2550,10 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
|
||||||
rws.writeHeader(200)
|
rws.writeHeader(200)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if rws.handlerDone {
|
||||||
|
rws.promoteUndeclaredTrailers()
|
||||||
|
}
|
||||||
|
|
||||||
isHeadResp := rws.req.Method == "HEAD"
|
isHeadResp := rws.req.Method == "HEAD"
|
||||||
if !rws.sentHeader {
|
if !rws.sentHeader {
|
||||||
rws.sentHeader = true
|
rws.sentHeader = true
|
||||||
|
@ -2564,10 +2625,6 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if rws.handlerDone {
|
|
||||||
rws.promoteUndeclaredTrailers()
|
|
||||||
}
|
|
||||||
|
|
||||||
// only send trailers if they have actually been defined by the
|
// only send trailers if they have actually been defined by the
|
||||||
// server handler.
|
// server handler.
|
||||||
hasNonemptyTrailers := rws.hasNonemptyTrailers()
|
hasNonemptyTrailers := rws.hasNonemptyTrailers()
|
||||||
|
@ -2648,23 +2705,85 @@ func (rws *responseWriterState) promoteUndeclaredTrailers() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *responseWriter) SetReadDeadline(deadline time.Time) error {
|
||||||
|
st := w.rws.stream
|
||||||
|
if !deadline.IsZero() && deadline.Before(time.Now()) {
|
||||||
|
// If we're setting a deadline in the past, reset the stream immediately
|
||||||
|
// so writes after SetWriteDeadline returns will fail.
|
||||||
|
st.onReadTimeout()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
w.rws.conn.sendServeMsg(func(sc *serverConn) {
|
||||||
|
if st.readDeadline != nil {
|
||||||
|
if !st.readDeadline.Stop() {
|
||||||
|
// Deadline already exceeded, or stream has been closed.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if deadline.IsZero() {
|
||||||
|
st.readDeadline = nil
|
||||||
|
} else if st.readDeadline == nil {
|
||||||
|
st.readDeadline = time.AfterFunc(deadline.Sub(time.Now()), st.onReadTimeout)
|
||||||
|
} else {
|
||||||
|
st.readDeadline.Reset(deadline.Sub(time.Now()))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *responseWriter) SetWriteDeadline(deadline time.Time) error {
|
||||||
|
st := w.rws.stream
|
||||||
|
if !deadline.IsZero() && deadline.Before(time.Now()) {
|
||||||
|
// If we're setting a deadline in the past, reset the stream immediately
|
||||||
|
// so writes after SetWriteDeadline returns will fail.
|
||||||
|
st.onWriteTimeout()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
w.rws.conn.sendServeMsg(func(sc *serverConn) {
|
||||||
|
if st.writeDeadline != nil {
|
||||||
|
if !st.writeDeadline.Stop() {
|
||||||
|
// Deadline already exceeded, or stream has been closed.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if deadline.IsZero() {
|
||||||
|
st.writeDeadline = nil
|
||||||
|
} else if st.writeDeadline == nil {
|
||||||
|
st.writeDeadline = time.AfterFunc(deadline.Sub(time.Now()), st.onWriteTimeout)
|
||||||
|
} else {
|
||||||
|
st.writeDeadline.Reset(deadline.Sub(time.Now()))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (w *responseWriter) Flush() {
|
func (w *responseWriter) Flush() {
|
||||||
|
w.FlushError()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *responseWriter) FlushError() error {
|
||||||
rws := w.rws
|
rws := w.rws
|
||||||
if rws == nil {
|
if rws == nil {
|
||||||
panic("Header called after Handler finished")
|
panic("Header called after Handler finished")
|
||||||
}
|
}
|
||||||
|
var err error
|
||||||
if rws.bw.Buffered() > 0 {
|
if rws.bw.Buffered() > 0 {
|
||||||
if err := rws.bw.Flush(); err != nil {
|
err = rws.bw.Flush()
|
||||||
// Ignore the error. The frame writer already knows.
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// The bufio.Writer won't call chunkWriter.Write
|
// The bufio.Writer won't call chunkWriter.Write
|
||||||
// (writeChunk with zero bytes, so we have to do it
|
// (writeChunk with zero bytes, so we have to do it
|
||||||
// ourselves to force the HTTP response header and/or
|
// ourselves to force the HTTP response header and/or
|
||||||
// final DATA frame (with END_STREAM) to be sent.
|
// final DATA frame (with END_STREAM) to be sent.
|
||||||
rws.writeChunk(nil)
|
_, err = chunkWriter{rws}.Write(nil)
|
||||||
|
if err == nil {
|
||||||
|
select {
|
||||||
|
case <-rws.stream.cw:
|
||||||
|
err = rws.stream.closeErr
|
||||||
|
default:
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *responseWriter) CloseNotify() <-chan bool {
|
func (w *responseWriter) CloseNotify() <-chan bool {
|
||||||
|
|
|
@ -16,6 +16,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"io/fs"
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
mathrand "math/rand"
|
mathrand "math/rand"
|
||||||
|
@ -46,10 +47,6 @@ const (
|
||||||
// we buffer per stream.
|
// we buffer per stream.
|
||||||
transportDefaultStreamFlow = 4 << 20
|
transportDefaultStreamFlow = 4 << 20
|
||||||
|
|
||||||
// transportDefaultStreamMinRefresh is the minimum number of bytes we'll send
|
|
||||||
// a stream-level WINDOW_UPDATE for at a time.
|
|
||||||
transportDefaultStreamMinRefresh = 4 << 10
|
|
||||||
|
|
||||||
defaultUserAgent = "Go-http-client/2.0"
|
defaultUserAgent = "Go-http-client/2.0"
|
||||||
|
|
||||||
// initialMaxConcurrentStreams is a connections maxConcurrentStreams until
|
// initialMaxConcurrentStreams is a connections maxConcurrentStreams until
|
||||||
|
@ -67,13 +64,23 @@ const (
|
||||||
// A Transport internally caches connections to servers. It is safe
|
// A Transport internally caches connections to servers. It is safe
|
||||||
// for concurrent use by multiple goroutines.
|
// for concurrent use by multiple goroutines.
|
||||||
type Transport struct {
|
type Transport struct {
|
||||||
// DialTLS specifies an optional dial function for creating
|
// DialTLSContext specifies an optional dial function with context for
|
||||||
// TLS connections for requests.
|
// creating TLS connections for requests.
|
||||||
//
|
//
|
||||||
// If DialTLS is nil, tls.Dial is used.
|
// If DialTLSContext and DialTLS is nil, tls.Dial is used.
|
||||||
//
|
//
|
||||||
// If the returned net.Conn has a ConnectionState method like tls.Conn,
|
// If the returned net.Conn has a ConnectionState method like tls.Conn,
|
||||||
// it will be used to set http.Response.TLS.
|
// it will be used to set http.Response.TLS.
|
||||||
|
DialTLSContext func(ctx context.Context, network, addr string, cfg *tls.Config) (net.Conn, error)
|
||||||
|
|
||||||
|
// DialTLS specifies an optional dial function for creating
|
||||||
|
// TLS connections for requests.
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
DialTLS func(network, addr string, cfg *tls.Config) (net.Conn, error)
|
DialTLS func(network, addr string, cfg *tls.Config) (net.Conn, error)
|
||||||
|
|
||||||
// TLSClientConfig specifies the TLS configuration to use with
|
// TLSClientConfig specifies the TLS configuration to use with
|
||||||
|
@ -107,6 +114,28 @@ type Transport struct {
|
||||||
// to mean no limit.
|
// to mean no limit.
|
||||||
MaxHeaderListSize uint32
|
MaxHeaderListSize uint32
|
||||||
|
|
||||||
|
// MaxReadFrameSize is the http2 SETTINGS_MAX_FRAME_SIZE to send in the
|
||||||
|
// initial settings frame. It is the size in bytes of the largest frame
|
||||||
|
// payload that the sender is willing to receive. If 0, no setting is
|
||||||
|
// sent, and the value is provided by the peer, which should be 16384
|
||||||
|
// according to the spec:
|
||||||
|
// https://datatracker.ietf.org/doc/html/rfc7540#section-6.5.2.
|
||||||
|
// Values are bounded in the range 16k to 16M.
|
||||||
|
MaxReadFrameSize uint32
|
||||||
|
|
||||||
|
// MaxDecoderHeaderTableSize optionally specifies the http2
|
||||||
|
// SETTINGS_HEADER_TABLE_SIZE to send in the initial settings frame. It
|
||||||
|
// 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.
|
||||||
|
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.
|
||||||
|
MaxEncoderHeaderTableSize uint32
|
||||||
|
|
||||||
// StrictMaxConcurrentStreams controls whether the server's
|
// StrictMaxConcurrentStreams controls whether the server's
|
||||||
// SETTINGS_MAX_CONCURRENT_STREAMS should be respected
|
// SETTINGS_MAX_CONCURRENT_STREAMS should be respected
|
||||||
// globally. If false, new TCP connections are created to the
|
// globally. If false, new TCP connections are created to the
|
||||||
|
@ -160,6 +189,19 @@ func (t *Transport) maxHeaderListSize() uint32 {
|
||||||
return t.MaxHeaderListSize
|
return t.MaxHeaderListSize
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Transport) maxFrameReadSize() uint32 {
|
||||||
|
if t.MaxReadFrameSize == 0 {
|
||||||
|
return 0 // use the default provided by the peer
|
||||||
|
}
|
||||||
|
if t.MaxReadFrameSize < minMaxFrameSize {
|
||||||
|
return minMaxFrameSize
|
||||||
|
}
|
||||||
|
if t.MaxReadFrameSize > maxFrameSize {
|
||||||
|
return maxFrameSize
|
||||||
|
}
|
||||||
|
return t.MaxReadFrameSize
|
||||||
|
}
|
||||||
|
|
||||||
func (t *Transport) disableCompression() bool {
|
func (t *Transport) disableCompression() bool {
|
||||||
return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression)
|
return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression)
|
||||||
}
|
}
|
||||||
|
@ -249,6 +291,7 @@ func (t *Transport) initConnPool() {
|
||||||
type ClientConn struct {
|
type ClientConn struct {
|
||||||
t *Transport
|
t *Transport
|
||||||
tconn net.Conn // usually *tls.Conn, except specialized impls
|
tconn net.Conn // usually *tls.Conn, except specialized impls
|
||||||
|
tconnClosed bool
|
||||||
tlsState *tls.ConnectionState // nil only for specialized impls
|
tlsState *tls.ConnectionState // nil only for specialized impls
|
||||||
reused uint32 // whether conn is being reused; atomic
|
reused uint32 // whether conn is being reused; atomic
|
||||||
singleUse bool // whether being used for a single http.Request
|
singleUse bool // whether being used for a single http.Request
|
||||||
|
@ -263,8 +306,8 @@ type ClientConn struct {
|
||||||
|
|
||||||
mu sync.Mutex // guards following
|
mu sync.Mutex // guards following
|
||||||
cond *sync.Cond // hold mu; broadcast on flow/closed changes
|
cond *sync.Cond // hold mu; broadcast on flow/closed changes
|
||||||
flow flow // our conn-level flow control quota (cs.flow is per stream)
|
flow outflow // our conn-level flow control quota (cs.outflow is per stream)
|
||||||
inflow flow // peer's conn-level flow control
|
inflow inflow // peer's conn-level flow control
|
||||||
doNotReuse bool // whether conn is marked to not be reused for any future requests
|
doNotReuse bool // whether conn is marked to not be reused for any future requests
|
||||||
closing bool
|
closing bool
|
||||||
closed bool
|
closed bool
|
||||||
|
@ -284,6 +327,7 @@ type ClientConn struct {
|
||||||
maxFrameSize uint32
|
maxFrameSize uint32
|
||||||
maxConcurrentStreams uint32
|
maxConcurrentStreams uint32
|
||||||
peerMaxHeaderListSize uint64
|
peerMaxHeaderListSize uint64
|
||||||
|
peerMaxHeaderTableSize uint32
|
||||||
initialWindowSize uint32
|
initialWindowSize uint32
|
||||||
|
|
||||||
// reqHeaderMu is a 1-element semaphore channel controlling access to sending new requests.
|
// reqHeaderMu is a 1-element semaphore channel controlling access to sending new requests.
|
||||||
|
@ -328,14 +372,14 @@ type clientStream struct {
|
||||||
respHeaderRecv chan struct{} // closed when headers are received
|
respHeaderRecv chan struct{} // closed when headers are received
|
||||||
res *http.Response // set if respHeaderRecv is closed
|
res *http.Response // set if respHeaderRecv is closed
|
||||||
|
|
||||||
flow flow // guarded by cc.mu
|
flow outflow // guarded by cc.mu
|
||||||
inflow flow // guarded by cc.mu
|
inflow inflow // guarded by cc.mu
|
||||||
bytesRemain int64 // -1 means unknown; owned by transportResponseBody.Read
|
bytesRemain int64 // -1 means unknown; owned by transportResponseBody.Read
|
||||||
readErr error // sticky read error; owned by transportResponseBody.Read
|
readErr error // sticky read error; owned by transportResponseBody.Read
|
||||||
|
|
||||||
reqBody io.ReadCloser
|
reqBody io.ReadCloser
|
||||||
reqBodyContentLength int64 // -1 means unknown
|
reqBodyContentLength int64 // -1 means unknown
|
||||||
reqBodyClosed bool // body has been closed; guarded by cc.mu
|
reqBodyClosed chan struct{} // guarded by cc.mu; non-nil on Close, closed when done
|
||||||
|
|
||||||
// owned by writeRequest:
|
// owned by writeRequest:
|
||||||
sentEndStream bool // sent an END_STREAM flag to the peer
|
sentEndStream bool // sent an END_STREAM flag to the peer
|
||||||
|
@ -375,9 +419,8 @@ func (cs *clientStream) abortStreamLocked(err error) {
|
||||||
cs.abortErr = err
|
cs.abortErr = err
|
||||||
close(cs.abort)
|
close(cs.abort)
|
||||||
})
|
})
|
||||||
if cs.reqBody != nil && !cs.reqBodyClosed {
|
if cs.reqBody != nil {
|
||||||
cs.reqBody.Close()
|
cs.closeReqBodyLocked()
|
||||||
cs.reqBodyClosed = true
|
|
||||||
}
|
}
|
||||||
// TODO(dneil): Clean up tests where cs.cc.cond is nil.
|
// TODO(dneil): Clean up tests where cs.cc.cond is nil.
|
||||||
if cs.cc.cond != nil {
|
if cs.cc.cond != nil {
|
||||||
|
@ -390,13 +433,24 @@ func (cs *clientStream) abortRequestBodyWrite() {
|
||||||
cc := cs.cc
|
cc := cs.cc
|
||||||
cc.mu.Lock()
|
cc.mu.Lock()
|
||||||
defer cc.mu.Unlock()
|
defer cc.mu.Unlock()
|
||||||
if cs.reqBody != nil && !cs.reqBodyClosed {
|
if cs.reqBody != nil && cs.reqBodyClosed == nil {
|
||||||
cs.reqBody.Close()
|
cs.closeReqBodyLocked()
|
||||||
cs.reqBodyClosed = true
|
|
||||||
cc.cond.Broadcast()
|
cc.cond.Broadcast()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cs *clientStream) closeReqBodyLocked() {
|
||||||
|
if cs.reqBodyClosed != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
cs.reqBodyClosed = make(chan struct{})
|
||||||
|
reqBodyClosed := cs.reqBodyClosed
|
||||||
|
go func() {
|
||||||
|
cs.reqBody.Close()
|
||||||
|
close(reqBodyClosed)
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
type stickyErrWriter struct {
|
type stickyErrWriter struct {
|
||||||
conn net.Conn
|
conn net.Conn
|
||||||
timeout time.Duration
|
timeout time.Duration
|
||||||
|
@ -480,6 +534,15 @@ func authorityAddr(scheme string, authority string) (addr string) {
|
||||||
return net.JoinHostPort(host, port)
|
return net.JoinHostPort(host, port)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var retryBackoffHook func(time.Duration) *time.Timer
|
||||||
|
|
||||||
|
func backoffNewTimer(d time.Duration) *time.Timer {
|
||||||
|
if retryBackoffHook != nil {
|
||||||
|
return retryBackoffHook(d)
|
||||||
|
}
|
||||||
|
return time.NewTimer(d)
|
||||||
|
}
|
||||||
|
|
||||||
// RoundTripOpt is like RoundTrip, but takes options.
|
// RoundTripOpt is like RoundTrip, but takes options.
|
||||||
func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) {
|
func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) {
|
||||||
if !(req.URL.Scheme == "https" || (req.URL.Scheme == "http" && t.AllowHTTP)) {
|
if !(req.URL.Scheme == "https" || (req.URL.Scheme == "http" && t.AllowHTTP)) {
|
||||||
|
@ -505,11 +568,14 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res
|
||||||
}
|
}
|
||||||
backoff := float64(uint(1) << (uint(retry) - 1))
|
backoff := float64(uint(1) << (uint(retry) - 1))
|
||||||
backoff += backoff * (0.1 * mathrand.Float64())
|
backoff += backoff * (0.1 * mathrand.Float64())
|
||||||
|
d := time.Second * time.Duration(backoff)
|
||||||
|
timer := backoffNewTimer(d)
|
||||||
select {
|
select {
|
||||||
case <-time.After(time.Second * time.Duration(backoff)):
|
case <-timer.C:
|
||||||
t.vlogf("RoundTrip retrying after failure: %v", err)
|
t.vlogf("RoundTrip retrying after failure: %v", err)
|
||||||
continue
|
continue
|
||||||
case <-req.Context().Done():
|
case <-req.Context().Done():
|
||||||
|
timer.Stop()
|
||||||
err = req.Context().Err()
|
err = req.Context().Err()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -592,7 +658,7 @@ func (t *Transport) dialClientConn(ctx context.Context, addr string, singleUse b
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
tconn, err := t.dialTLS(ctx)("tcp", addr, t.newTLSConfig(host))
|
tconn, err := t.dialTLS(ctx, "tcp", addr, t.newTLSConfig(host))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -613,12 +679,14 @@ func (t *Transport) newTLSConfig(host string) *tls.Config {
|
||||||
return cfg
|
return cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Transport) dialTLS(ctx context.Context) func(string, string, *tls.Config) (net.Conn, error) {
|
func (t *Transport) dialTLS(ctx context.Context, network, addr string, tlsCfg *tls.Config) (net.Conn, error) {
|
||||||
if t.DialTLS != nil {
|
if t.DialTLSContext != nil {
|
||||||
return t.DialTLS
|
return t.DialTLSContext(ctx, network, addr, tlsCfg)
|
||||||
|
} else if t.DialTLS != nil {
|
||||||
|
return t.DialTLS(network, addr, tlsCfg)
|
||||||
}
|
}
|
||||||
return func(network, addr string, cfg *tls.Config) (net.Conn, error) {
|
|
||||||
tlsCn, err := t.dialTLSWithContext(ctx, network, addr, cfg)
|
tlsCn, err := t.dialTLSWithContext(ctx, network, addr, tlsCfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -630,7 +698,6 @@ func (t *Transport) dialTLS(ctx context.Context) func(string, string, *tls.Confi
|
||||||
return nil, errors.New("http2: could not negotiate protocol mutually")
|
return nil, errors.New("http2: could not negotiate protocol mutually")
|
||||||
}
|
}
|
||||||
return tlsCn, nil
|
return tlsCn, nil
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// disableKeepAlives reports whether connections should be closed as
|
// disableKeepAlives reports whether connections should be closed as
|
||||||
|
@ -646,6 +713,20 @@ func (t *Transport) expectContinueTimeout() time.Duration {
|
||||||
return t.t1.ExpectContinueTimeout
|
return t.t1.ExpectContinueTimeout
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Transport) maxDecoderHeaderTableSize() uint32 {
|
||||||
|
if v := t.MaxDecoderHeaderTableSize; v > 0 {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
return initialHeaderTableSize
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Transport) maxEncoderHeaderTableSize() uint32 {
|
||||||
|
if v := t.MaxEncoderHeaderTableSize; v > 0 {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
return initialHeaderTableSize
|
||||||
|
}
|
||||||
|
|
||||||
func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) {
|
func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) {
|
||||||
return t.newClientConn(c, t.disableKeepAlives())
|
return t.newClientConn(c, t.disableKeepAlives())
|
||||||
}
|
}
|
||||||
|
@ -686,15 +767,19 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
|
||||||
})
|
})
|
||||||
cc.br = bufio.NewReader(c)
|
cc.br = bufio.NewReader(c)
|
||||||
cc.fr = NewFramer(cc.bw, cc.br)
|
cc.fr = NewFramer(cc.bw, cc.br)
|
||||||
|
if t.maxFrameReadSize() != 0 {
|
||||||
|
cc.fr.SetMaxReadFrameSize(t.maxFrameReadSize())
|
||||||
|
}
|
||||||
if t.CountError != nil {
|
if t.CountError != nil {
|
||||||
cc.fr.countError = t.CountError
|
cc.fr.countError = t.CountError
|
||||||
}
|
}
|
||||||
cc.fr.ReadMetaHeaders = hpack.NewDecoder(initialHeaderTableSize, nil)
|
maxHeaderTableSize := t.maxDecoderHeaderTableSize()
|
||||||
|
cc.fr.ReadMetaHeaders = hpack.NewDecoder(maxHeaderTableSize, nil)
|
||||||
cc.fr.MaxHeaderListSize = t.maxHeaderListSize()
|
cc.fr.MaxHeaderListSize = t.maxHeaderListSize()
|
||||||
|
|
||||||
// TODO: SetMaxDynamicTableSize, SetMaxDynamicTableSizeLimit on
|
|
||||||
// henc in response to SETTINGS frames?
|
|
||||||
cc.henc = hpack.NewEncoder(&cc.hbuf)
|
cc.henc = hpack.NewEncoder(&cc.hbuf)
|
||||||
|
cc.henc.SetMaxDynamicTableSizeLimit(t.maxEncoderHeaderTableSize())
|
||||||
|
cc.peerMaxHeaderTableSize = initialHeaderTableSize
|
||||||
|
|
||||||
if t.AllowHTTP {
|
if t.AllowHTTP {
|
||||||
cc.nextStreamID = 3
|
cc.nextStreamID = 3
|
||||||
|
@ -709,14 +794,20 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
|
||||||
{ID: SettingEnablePush, Val: 0},
|
{ID: SettingEnablePush, Val: 0},
|
||||||
{ID: SettingInitialWindowSize, Val: transportDefaultStreamFlow},
|
{ID: SettingInitialWindowSize, Val: transportDefaultStreamFlow},
|
||||||
}
|
}
|
||||||
|
if max := t.maxFrameReadSize(); max != 0 {
|
||||||
|
initialSettings = append(initialSettings, Setting{ID: SettingMaxFrameSize, Val: max})
|
||||||
|
}
|
||||||
if max := t.maxHeaderListSize(); max != 0 {
|
if max := t.maxHeaderListSize(); max != 0 {
|
||||||
initialSettings = append(initialSettings, Setting{ID: SettingMaxHeaderListSize, Val: max})
|
initialSettings = append(initialSettings, Setting{ID: SettingMaxHeaderListSize, Val: max})
|
||||||
}
|
}
|
||||||
|
if maxHeaderTableSize != initialHeaderTableSize {
|
||||||
|
initialSettings = append(initialSettings, Setting{ID: SettingHeaderTableSize, Val: maxHeaderTableSize})
|
||||||
|
}
|
||||||
|
|
||||||
cc.bw.Write(clientPreface)
|
cc.bw.Write(clientPreface)
|
||||||
cc.fr.WriteSettings(initialSettings...)
|
cc.fr.WriteSettings(initialSettings...)
|
||||||
cc.fr.WriteWindowUpdate(0, transportDefaultConnFlow)
|
cc.fr.WriteWindowUpdate(0, transportDefaultConnFlow)
|
||||||
cc.inflow.add(transportDefaultConnFlow + initialWindowSize)
|
cc.inflow.init(transportDefaultConnFlow + initialWindowSize)
|
||||||
cc.bw.Flush()
|
cc.bw.Flush()
|
||||||
if cc.werr != nil {
|
if cc.werr != nil {
|
||||||
cc.Close()
|
cc.Close()
|
||||||
|
@ -910,10 +1001,10 @@ func (cc *ClientConn) onIdleTimeout() {
|
||||||
cc.closeIfIdle()
|
cc.closeIfIdle()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cc *ClientConn) closeConn() error {
|
func (cc *ClientConn) closeConn() {
|
||||||
t := time.AfterFunc(250*time.Millisecond, cc.forceCloseConn)
|
t := time.AfterFunc(250*time.Millisecond, cc.forceCloseConn)
|
||||||
defer t.Stop()
|
defer t.Stop()
|
||||||
return cc.tconn.Close()
|
cc.tconn.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
// A tls.Conn.Close can hang for a long time if the peer is unresponsive.
|
// A tls.Conn.Close can hang for a long time if the peer is unresponsive.
|
||||||
|
@ -979,7 +1070,8 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error {
|
||||||
shutdownEnterWaitStateHook()
|
shutdownEnterWaitStateHook()
|
||||||
select {
|
select {
|
||||||
case <-done:
|
case <-done:
|
||||||
return cc.closeConn()
|
cc.closeConn()
|
||||||
|
return nil
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
cc.mu.Lock()
|
cc.mu.Lock()
|
||||||
// Free the goroutine above
|
// Free the goroutine above
|
||||||
|
@ -1016,7 +1108,7 @@ func (cc *ClientConn) sendGoAway() error {
|
||||||
|
|
||||||
// closes the client connection immediately. In-flight requests are interrupted.
|
// closes the client connection immediately. In-flight requests are interrupted.
|
||||||
// err is sent to streams.
|
// err is sent to streams.
|
||||||
func (cc *ClientConn) closeForError(err error) error {
|
func (cc *ClientConn) closeForError(err error) {
|
||||||
cc.mu.Lock()
|
cc.mu.Lock()
|
||||||
cc.closed = true
|
cc.closed = true
|
||||||
for _, cs := range cc.streams {
|
for _, cs := range cc.streams {
|
||||||
|
@ -1024,7 +1116,7 @@ func (cc *ClientConn) closeForError(err error) error {
|
||||||
}
|
}
|
||||||
cc.cond.Broadcast()
|
cc.cond.Broadcast()
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
return cc.closeConn()
|
cc.closeConn()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close closes the client connection immediately.
|
// Close closes the client connection immediately.
|
||||||
|
@ -1032,16 +1124,17 @@ func (cc *ClientConn) closeForError(err error) error {
|
||||||
// In-flight requests are interrupted. For a graceful shutdown, use Shutdown instead.
|
// In-flight requests are interrupted. For a graceful shutdown, use Shutdown instead.
|
||||||
func (cc *ClientConn) Close() error {
|
func (cc *ClientConn) Close() error {
|
||||||
err := errors.New("http2: client connection force closed via ClientConn.Close")
|
err := errors.New("http2: client connection force closed via ClientConn.Close")
|
||||||
return cc.closeForError(err)
|
cc.closeForError(err)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// closes the client connection immediately. In-flight requests are interrupted.
|
// closes the client connection immediately. In-flight requests are interrupted.
|
||||||
func (cc *ClientConn) closeForLostPing() error {
|
func (cc *ClientConn) closeForLostPing() {
|
||||||
err := errors.New("http2: client connection lost")
|
err := errors.New("http2: client connection lost")
|
||||||
if f := cc.t.CountError; f != nil {
|
if f := cc.t.CountError; f != nil {
|
||||||
f("conn_close_lost_ping")
|
f("conn_close_lost_ping")
|
||||||
}
|
}
|
||||||
return cc.closeForError(err)
|
cc.closeForError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// errRequestCanceled is a copy of net/http's errRequestCanceled because it's not
|
// errRequestCanceled is a copy of net/http's errRequestCanceled because it's not
|
||||||
|
@ -1051,7 +1144,7 @@ var errRequestCanceled = errors.New("net/http: request canceled")
|
||||||
func commaSeparatedTrailers(req *http.Request) (string, error) {
|
func commaSeparatedTrailers(req *http.Request) (string, error) {
|
||||||
keys := make([]string, 0, len(req.Trailer))
|
keys := make([]string, 0, len(req.Trailer))
|
||||||
for k := range req.Trailer {
|
for k := range req.Trailer {
|
||||||
k = http.CanonicalHeaderKey(k)
|
k = canonicalHeader(k)
|
||||||
switch k {
|
switch k {
|
||||||
case "Transfer-Encoding", "Trailer", "Content-Length":
|
case "Transfer-Encoding", "Trailer", "Content-Length":
|
||||||
return "", fmt.Errorf("invalid Trailer key %q", k)
|
return "", fmt.Errorf("invalid Trailer key %q", k)
|
||||||
|
@ -1419,11 +1512,19 @@ func (cs *clientStream) cleanupWriteRequest(err error) {
|
||||||
// and in multiple cases: server replies <=299 and >299
|
// and in multiple cases: server replies <=299 and >299
|
||||||
// while still writing request body
|
// while still writing request body
|
||||||
cc.mu.Lock()
|
cc.mu.Lock()
|
||||||
|
mustCloseBody := false
|
||||||
|
if cs.reqBody != nil && cs.reqBodyClosed == nil {
|
||||||
|
mustCloseBody = true
|
||||||
|
cs.reqBodyClosed = make(chan struct{})
|
||||||
|
}
|
||||||
bodyClosed := cs.reqBodyClosed
|
bodyClosed := cs.reqBodyClosed
|
||||||
cs.reqBodyClosed = true
|
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
if !bodyClosed && cs.reqBody != nil {
|
if mustCloseBody {
|
||||||
cs.reqBody.Close()
|
cs.reqBody.Close()
|
||||||
|
close(bodyClosed)
|
||||||
|
}
|
||||||
|
if bodyClosed != nil {
|
||||||
|
<-bodyClosed
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil && cs.sentEndStream {
|
if err != nil && cs.sentEndStream {
|
||||||
|
@ -1468,7 +1569,7 @@ func (cs *clientStream) cleanupWriteRequest(err error) {
|
||||||
close(cs.donec)
|
close(cs.donec)
|
||||||
}
|
}
|
||||||
|
|
||||||
// awaitOpenSlotForStream waits until len(streams) < maxConcurrentStreams.
|
// awaitOpenSlotForStreamLocked waits until len(streams) < maxConcurrentStreams.
|
||||||
// Must hold cc.mu.
|
// Must hold cc.mu.
|
||||||
func (cc *ClientConn) awaitOpenSlotForStreamLocked(cs *clientStream) error {
|
func (cc *ClientConn) awaitOpenSlotForStreamLocked(cs *clientStream) error {
|
||||||
for {
|
for {
|
||||||
|
@ -1580,7 +1681,7 @@ func (cs *clientStream) writeRequestBody(req *http.Request) (err error) {
|
||||||
|
|
||||||
var sawEOF bool
|
var sawEOF bool
|
||||||
for !sawEOF {
|
for !sawEOF {
|
||||||
n, err := body.Read(buf[:len(buf)])
|
n, err := body.Read(buf)
|
||||||
if hasContentLen {
|
if hasContentLen {
|
||||||
remainLen -= int64(n)
|
remainLen -= int64(n)
|
||||||
if remainLen == 0 && err == nil {
|
if remainLen == 0 && err == nil {
|
||||||
|
@ -1603,7 +1704,7 @@ func (cs *clientStream) writeRequestBody(req *http.Request) (err error) {
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cc.mu.Lock()
|
cc.mu.Lock()
|
||||||
bodyClosed := cs.reqBodyClosed
|
bodyClosed := cs.reqBodyClosed != nil
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
switch {
|
switch {
|
||||||
case bodyClosed:
|
case bodyClosed:
|
||||||
|
@ -1698,7 +1799,7 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error)
|
||||||
if cc.closed {
|
if cc.closed {
|
||||||
return 0, errClientConnClosed
|
return 0, errClientConnClosed
|
||||||
}
|
}
|
||||||
if cs.reqBodyClosed {
|
if cs.reqBodyClosed != nil {
|
||||||
return 0, errStopReqBodyWrite
|
return 0, errStopReqBodyWrite
|
||||||
}
|
}
|
||||||
select {
|
select {
|
||||||
|
@ -1883,7 +1984,7 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail
|
||||||
|
|
||||||
// Header list size is ok. Write the headers.
|
// Header list size is ok. Write the headers.
|
||||||
enumerateHeaders(func(name, value string) {
|
enumerateHeaders(func(name, value string) {
|
||||||
name, ascii := asciiToLower(name)
|
name, ascii := lowerHeader(name)
|
||||||
if !ascii {
|
if !ascii {
|
||||||
// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
|
// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
|
||||||
// field names have to be ASCII characters (just as in HTTP/1.x).
|
// field names have to be ASCII characters (just as in HTTP/1.x).
|
||||||
|
@ -1936,7 +2037,7 @@ func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for k, vv := range trailer {
|
for k, vv := range trailer {
|
||||||
lowKey, ascii := asciiToLower(k)
|
lowKey, ascii := lowerHeader(k)
|
||||||
if !ascii {
|
if !ascii {
|
||||||
// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
|
// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
|
||||||
// field names have to be ASCII characters (just as in HTTP/1.x).
|
// field names have to be ASCII characters (just as in HTTP/1.x).
|
||||||
|
@ -1968,8 +2069,7 @@ type resAndError struct {
|
||||||
func (cc *ClientConn) addStreamLocked(cs *clientStream) {
|
func (cc *ClientConn) addStreamLocked(cs *clientStream) {
|
||||||
cs.flow.add(int32(cc.initialWindowSize))
|
cs.flow.add(int32(cc.initialWindowSize))
|
||||||
cs.flow.setConnFlow(&cc.flow)
|
cs.flow.setConnFlow(&cc.flow)
|
||||||
cs.inflow.add(transportDefaultStreamFlow)
|
cs.inflow.init(transportDefaultStreamFlow)
|
||||||
cs.inflow.setConnFlow(&cc.inflow)
|
|
||||||
cs.ID = cc.nextStreamID
|
cs.ID = cc.nextStreamID
|
||||||
cc.nextStreamID += 2
|
cc.nextStreamID += 2
|
||||||
cc.streams[cs.ID] = cs
|
cc.streams[cs.ID] = cs
|
||||||
|
@ -1994,7 +2094,7 @@ func (cc *ClientConn) forgetStreamID(id uint32) {
|
||||||
// wake up RoundTrip if there is a pending request.
|
// wake up RoundTrip if there is a pending request.
|
||||||
cc.cond.Broadcast()
|
cc.cond.Broadcast()
|
||||||
|
|
||||||
closeOnIdle := cc.singleUse || cc.doNotReuse || cc.t.disableKeepAlives()
|
closeOnIdle := cc.singleUse || cc.doNotReuse || cc.t.disableKeepAlives() || cc.goAway != nil
|
||||||
if closeOnIdle && cc.streamsReserved == 0 && len(cc.streams) == 0 {
|
if closeOnIdle && cc.streamsReserved == 0 && len(cc.streams) == 0 {
|
||||||
if VerboseLogs {
|
if VerboseLogs {
|
||||||
cc.vlogf("http2: Transport closing idle conn %p (forSingleUse=%v, maxStream=%v)", cc, cc.singleUse, cc.nextStreamID-2)
|
cc.vlogf("http2: Transport closing idle conn %p (forSingleUse=%v, maxStream=%v)", cc, cc.singleUse, cc.nextStreamID-2)
|
||||||
|
@ -2070,6 +2170,7 @@ func (rl *clientConnReadLoop) cleanup() {
|
||||||
err = io.ErrUnexpectedEOF
|
err = io.ErrUnexpectedEOF
|
||||||
}
|
}
|
||||||
cc.closed = true
|
cc.closed = true
|
||||||
|
|
||||||
for _, cs := range cc.streams {
|
for _, cs := range cc.streams {
|
||||||
select {
|
select {
|
||||||
case <-cs.peerClosed:
|
case <-cs.peerClosed:
|
||||||
|
@ -2268,7 +2369,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
|
||||||
Status: status + " " + http.StatusText(statusCode),
|
Status: status + " " + http.StatusText(statusCode),
|
||||||
}
|
}
|
||||||
for _, hf := range regularFields {
|
for _, hf := range regularFields {
|
||||||
key := http.CanonicalHeaderKey(hf.Name)
|
key := canonicalHeader(hf.Name)
|
||||||
if key == "Trailer" {
|
if key == "Trailer" {
|
||||||
t := res.Trailer
|
t := res.Trailer
|
||||||
if t == nil {
|
if t == nil {
|
||||||
|
@ -2276,7 +2377,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
|
||||||
res.Trailer = t
|
res.Trailer = t
|
||||||
}
|
}
|
||||||
foreachHeaderElement(hf.Value, func(v string) {
|
foreachHeaderElement(hf.Value, func(v string) {
|
||||||
t[http.CanonicalHeaderKey(v)] = nil
|
t[canonicalHeader(v)] = nil
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
vv := header[key]
|
vv := header[key]
|
||||||
|
@ -2381,7 +2482,7 @@ func (rl *clientConnReadLoop) processTrailers(cs *clientStream, f *MetaHeadersFr
|
||||||
|
|
||||||
trailer := make(http.Header)
|
trailer := make(http.Header)
|
||||||
for _, hf := range f.RegularFields() {
|
for _, hf := range f.RegularFields() {
|
||||||
key := http.CanonicalHeaderKey(hf.Name)
|
key := canonicalHeader(hf.Name)
|
||||||
trailer[key] = append(trailer[key], hf.Value)
|
trailer[key] = append(trailer[key], hf.Value)
|
||||||
}
|
}
|
||||||
cs.trailer = trailer
|
cs.trailer = trailer
|
||||||
|
@ -2427,21 +2528,10 @@ func (b transportResponseBody) Read(p []byte) (n int, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
cc.mu.Lock()
|
cc.mu.Lock()
|
||||||
var connAdd, streamAdd int32
|
connAdd := cc.inflow.add(n)
|
||||||
// Check the conn-level first, before the stream-level.
|
var streamAdd int32
|
||||||
if v := cc.inflow.available(); v < transportDefaultConnFlow/2 {
|
|
||||||
connAdd = transportDefaultConnFlow - v
|
|
||||||
cc.inflow.add(connAdd)
|
|
||||||
}
|
|
||||||
if err == nil { // No need to refresh if the stream is over or failed.
|
if err == nil { // No need to refresh if the stream is over or failed.
|
||||||
// Consider any buffered body data (read from the conn but not
|
streamAdd = cs.inflow.add(n)
|
||||||
// consumed by the client) when computing flow control for this
|
|
||||||
// stream.
|
|
||||||
v := int(cs.inflow.available()) + cs.bufPipe.Len()
|
|
||||||
if v < transportDefaultStreamFlow-transportDefaultStreamMinRefresh {
|
|
||||||
streamAdd = int32(transportDefaultStreamFlow - v)
|
|
||||||
cs.inflow.add(streamAdd)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
|
|
||||||
|
@ -2469,17 +2559,15 @@ func (b transportResponseBody) Close() error {
|
||||||
if unread > 0 {
|
if unread > 0 {
|
||||||
cc.mu.Lock()
|
cc.mu.Lock()
|
||||||
// Return connection-level flow control.
|
// Return connection-level flow control.
|
||||||
if unread > 0 {
|
connAdd := cc.inflow.add(unread)
|
||||||
cc.inflow.add(int32(unread))
|
|
||||||
}
|
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
|
|
||||||
// TODO(dneil): Acquiring this mutex can block indefinitely.
|
// TODO(dneil): Acquiring this mutex can block indefinitely.
|
||||||
// Move flow control return to a goroutine?
|
// Move flow control return to a goroutine?
|
||||||
cc.wmu.Lock()
|
cc.wmu.Lock()
|
||||||
// Return connection-level flow control.
|
// Return connection-level flow control.
|
||||||
if unread > 0 {
|
if connAdd > 0 {
|
||||||
cc.fr.WriteWindowUpdate(0, uint32(unread))
|
cc.fr.WriteWindowUpdate(0, uint32(connAdd))
|
||||||
}
|
}
|
||||||
cc.bw.Flush()
|
cc.bw.Flush()
|
||||||
cc.wmu.Unlock()
|
cc.wmu.Unlock()
|
||||||
|
@ -2522,14 +2610,19 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error {
|
||||||
// But at least return their flow control:
|
// But at least return their flow control:
|
||||||
if f.Length > 0 {
|
if f.Length > 0 {
|
||||||
cc.mu.Lock()
|
cc.mu.Lock()
|
||||||
cc.inflow.add(int32(f.Length))
|
ok := cc.inflow.take(f.Length)
|
||||||
|
connAdd := cc.inflow.add(int(f.Length))
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
|
if !ok {
|
||||||
|
return ConnectionError(ErrCodeFlowControl)
|
||||||
|
}
|
||||||
|
if connAdd > 0 {
|
||||||
cc.wmu.Lock()
|
cc.wmu.Lock()
|
||||||
cc.fr.WriteWindowUpdate(0, uint32(f.Length))
|
cc.fr.WriteWindowUpdate(0, uint32(connAdd))
|
||||||
cc.bw.Flush()
|
cc.bw.Flush()
|
||||||
cc.wmu.Unlock()
|
cc.wmu.Unlock()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if cs.readClosed {
|
if cs.readClosed {
|
||||||
|
@ -2559,9 +2652,7 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error {
|
||||||
}
|
}
|
||||||
// Check connection-level flow control.
|
// Check connection-level flow control.
|
||||||
cc.mu.Lock()
|
cc.mu.Lock()
|
||||||
if cs.inflow.available() >= int32(f.Length) {
|
if !takeInflows(&cc.inflow, &cs.inflow, f.Length) {
|
||||||
cs.inflow.take(int32(f.Length))
|
|
||||||
} else {
|
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
return ConnectionError(ErrCodeFlowControl)
|
return ConnectionError(ErrCodeFlowControl)
|
||||||
}
|
}
|
||||||
|
@ -2583,19 +2674,20 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if refund > 0 {
|
sendConn := cc.inflow.add(refund)
|
||||||
cc.inflow.add(int32(refund))
|
var sendStream int32
|
||||||
if !didReset {
|
if !didReset {
|
||||||
cs.inflow.add(int32(refund))
|
sendStream = cs.inflow.add(refund)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
|
|
||||||
if refund > 0 {
|
if sendConn > 0 || sendStream > 0 {
|
||||||
cc.wmu.Lock()
|
cc.wmu.Lock()
|
||||||
cc.fr.WriteWindowUpdate(0, uint32(refund))
|
if sendConn > 0 {
|
||||||
if !didReset {
|
cc.fr.WriteWindowUpdate(0, uint32(sendConn))
|
||||||
cc.fr.WriteWindowUpdate(cs.ID, uint32(refund))
|
}
|
||||||
|
if sendStream > 0 {
|
||||||
|
cc.fr.WriteWindowUpdate(cs.ID, uint32(sendStream))
|
||||||
}
|
}
|
||||||
cc.bw.Flush()
|
cc.bw.Flush()
|
||||||
cc.wmu.Unlock()
|
cc.wmu.Unlock()
|
||||||
|
@ -2663,7 +2755,6 @@ func (rl *clientConnReadLoop) processGoAway(f *GoAwayFrame) error {
|
||||||
if fn := cc.t.CountError; fn != nil {
|
if fn := cc.t.CountError; fn != nil {
|
||||||
fn("recv_goaway_" + f.ErrCode.stringToken())
|
fn("recv_goaway_" + f.ErrCode.stringToken())
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
cc.setGoAway(f)
|
cc.setGoAway(f)
|
||||||
return nil
|
return nil
|
||||||
|
@ -2728,8 +2819,10 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error {
|
||||||
cc.cond.Broadcast()
|
cc.cond.Broadcast()
|
||||||
|
|
||||||
cc.initialWindowSize = s.Val
|
cc.initialWindowSize = s.Val
|
||||||
|
case SettingHeaderTableSize:
|
||||||
|
cc.henc.SetMaxDynamicTableSize(s.Val)
|
||||||
|
cc.peerMaxHeaderTableSize = s.Val
|
||||||
default:
|
default:
|
||||||
// TODO(bradfitz): handle more settings? SETTINGS_HEADER_TABLE_SIZE probably.
|
|
||||||
cc.vlogf("Unhandled Setting: %v", s)
|
cc.vlogf("Unhandled Setting: %v", s)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -2953,7 +3046,11 @@ func (gz *gzipReader) Read(p []byte) (n int, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gz *gzipReader) Close() error {
|
func (gz *gzipReader) Close() error {
|
||||||
return gz.body.Close()
|
if err := gz.body.Close(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
gz.zerr = fs.ErrClosed
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type errorReader struct{ err error }
|
type errorReader struct{ err error }
|
||||||
|
@ -3017,7 +3114,7 @@ func traceGotConn(req *http.Request, cc *ClientConn, reused bool) {
|
||||||
cc.mu.Lock()
|
cc.mu.Lock()
|
||||||
ci.WasIdle = len(cc.streams) == 0 && reused
|
ci.WasIdle = len(cc.streams) == 0 && reused
|
||||||
if ci.WasIdle && !cc.lastActive.IsZero() {
|
if ci.WasIdle && !cc.lastActive.IsZero() {
|
||||||
ci.IdleTime = time.Now().Sub(cc.lastActive)
|
ci.IdleTime = time.Since(cc.lastActive)
|
||||||
}
|
}
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ type histogram struct {
|
||||||
valueCount int64 // number of values recorded for single value
|
valueCount int64 // number of values recorded for single value
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddMeasurement records a value measurement observation to the histogram.
|
// addMeasurement records a value measurement observation to the histogram.
|
||||||
func (h *histogram) addMeasurement(value int64) {
|
func (h *histogram) addMeasurement(value int64) {
|
||||||
// TODO: assert invariant
|
// TODO: assert invariant
|
||||||
h.sum += value
|
h.sum += value
|
||||||
|
|
|
@ -395,7 +395,7 @@ func New(family, title string) Trace {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tr *trace) Finish() {
|
func (tr *trace) Finish() {
|
||||||
elapsed := time.Now().Sub(tr.Start)
|
elapsed := time.Since(tr.Start)
|
||||||
tr.mu.Lock()
|
tr.mu.Lock()
|
||||||
tr.Elapsed = elapsed
|
tr.Elapsed = elapsed
|
||||||
tr.mu.Unlock()
|
tr.mu.Unlock()
|
||||||
|
|
|
@ -7,9 +7,11 @@
|
||||||
|
|
||||||
package execabs
|
package execabs
|
||||||
|
|
||||||
import "strings"
|
import (
|
||||||
|
"errors"
|
||||||
|
"os/exec"
|
||||||
|
)
|
||||||
|
|
||||||
func isGo119ErrDot(err error) bool {
|
func isGo119ErrDot(err error) bool {
|
||||||
// TODO: return errors.Is(err, exec.ErrDot)
|
return errors.Is(err, exec.ErrDot)
|
||||||
return strings.Contains(err.Error(), "current directory")
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,7 +126,7 @@ errors=$(
|
||||||
signals=$(
|
signals=$(
|
||||||
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |
|
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |
|
||||||
egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' |
|
grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT' |
|
||||||
sort
|
sort
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
sort >_error.grep
|
sort >_error.grep
|
||||||
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' |
|
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' |
|
||||||
egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' |
|
grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT' |
|
||||||
sort >_signal.grep
|
sort >_signal.grep
|
||||||
|
|
||||||
echo '// mkerrors.sh' "$@"
|
echo '// mkerrors.sh' "$@"
|
||||||
|
|
|
@ -29,8 +29,6 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"strings"
|
"strings"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"golang.org/x/sys/internal/unsafeheader"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ByteSliceFromString returns a NUL-terminated slice of bytes
|
// ByteSliceFromString returns a NUL-terminated slice of bytes
|
||||||
|
@ -82,13 +80,7 @@ func BytePtrToString(p *byte) string {
|
||||||
ptr = unsafe.Pointer(uintptr(ptr) + 1)
|
ptr = unsafe.Pointer(uintptr(ptr) + 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
var s []byte
|
return string(unsafe.Slice(p, n))
|
||||||
h := (*unsafeheader.Slice)(unsafe.Pointer(&s))
|
|
||||||
h.Data = unsafe.Pointer(p)
|
|
||||||
h.Len = n
|
|
||||||
h.Cap = n
|
|
||||||
|
|
||||||
return string(s)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Single-word zero for use when we need a valid pointer to 0 bytes.
|
// Single-word zero for use when we need a valid pointer to 0 bytes.
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
// Copyright 2022 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 (darwin || freebsd || netbsd || openbsd) && gc
|
||||||
|
// +build darwin freebsd netbsd openbsd
|
||||||
|
// +build gc
|
||||||
|
|
||||||
|
#include "textflag.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// System call support for ppc64, BSD
|
||||||
|
//
|
||||||
|
|
||||||
|
// Just jump to package syscall's implementation for all these functions.
|
||||||
|
// The runtime may know about them.
|
||||||
|
|
||||||
|
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
||||||
|
JMP syscall·Syscall(SB)
|
||||||
|
|
||||||
|
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
||||||
|
JMP syscall·Syscall6(SB)
|
||||||
|
|
||||||
|
TEXT ·Syscall9(SB),NOSPLIT,$0-104
|
||||||
|
JMP syscall·Syscall9(SB)
|
||||||
|
|
||||||
|
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
||||||
|
JMP syscall·RawSyscall(SB)
|
||||||
|
|
||||||
|
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
||||||
|
JMP syscall·RawSyscall6(SB)
|
|
@ -2,8 +2,8 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
|
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
|
||||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
|
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gccgo && !aix
|
//go:build gccgo && !aix && !hurd
|
||||||
// +build gccgo,!aix
|
// +build gccgo,!aix,!hurd
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// +build gccgo
|
//go:build gccgo && !aix && !hurd
|
||||||
// +build !aix
|
// +build gccgo,!aix,!hurd
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
|
//go:build aix || darwin || dragonfly || freebsd || hurd || linux || netbsd || openbsd || solaris
|
||||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
|
// +build aix darwin dragonfly freebsd hurd linux netbsd openbsd solaris
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,7 @@
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
import (
|
import "unsafe"
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
// IoctlRetInt performs an ioctl operation specified by req on a device
|
// IoctlRetInt performs an ioctl operation specified by req on a device
|
||||||
// associated with opened file descriptor fd, and returns a non-negative
|
// associated with opened file descriptor fd, and returns a non-negative
|
||||||
|
@ -217,3 +215,19 @@ func IoctlKCMAttach(fd int, info KCMAttach) error {
|
||||||
func IoctlKCMUnattach(fd int, info KCMUnattach) error {
|
func IoctlKCMUnattach(fd int, info KCMUnattach) error {
|
||||||
return ioctlPtr(fd, SIOCKCMUNATTACH, unsafe.Pointer(&info))
|
return ioctlPtr(fd, SIOCKCMUNATTACH, unsafe.Pointer(&info))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IoctlLoopGetStatus64 gets the status of the loop device associated with the
|
||||||
|
// file descriptor fd using the LOOP_GET_STATUS64 operation.
|
||||||
|
func IoctlLoopGetStatus64(fd int) (*LoopInfo64, error) {
|
||||||
|
var value LoopInfo64
|
||||||
|
if err := ioctlPtr(fd, LOOP_GET_STATUS64, unsafe.Pointer(&value)); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &value, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IoctlLoopSetStatus64 sets the status of the loop device associated with the
|
||||||
|
// file descriptor fd using the LOOP_SET_STATUS64 operation.
|
||||||
|
func IoctlLoopSetStatus64(fd int, value *LoopInfo64) error {
|
||||||
|
return ioctlPtr(fd, LOOP_SET_STATUS64, unsafe.Pointer(value))
|
||||||
|
}
|
||||||
|
|
|
@ -73,12 +73,12 @@ aix_ppc64)
|
||||||
darwin_amd64)
|
darwin_amd64)
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
mkasm="go run mkasm_darwin.go"
|
mkasm="go run mkasm.go"
|
||||||
;;
|
;;
|
||||||
darwin_arm64)
|
darwin_arm64)
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
mkasm="go run mkasm_darwin.go"
|
mkasm="go run mkasm.go"
|
||||||
;;
|
;;
|
||||||
dragonfly_amd64)
|
dragonfly_amd64)
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
|
@ -142,42 +142,60 @@ netbsd_arm64)
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
;;
|
;;
|
||||||
openbsd_386)
|
openbsd_386)
|
||||||
|
mkasm="go run mkasm.go"
|
||||||
mkerrors="$mkerrors -m32"
|
mkerrors="$mkerrors -m32"
|
||||||
mksyscall="go run mksyscall.go -l32 -openbsd"
|
mksyscall="go run mksyscall.go -l32 -openbsd -libc"
|
||||||
mksysctl="go run mksysctl_openbsd.go"
|
mksysctl="go run mksysctl_openbsd.go"
|
||||||
mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
;;
|
;;
|
||||||
openbsd_amd64)
|
openbsd_amd64)
|
||||||
|
mkasm="go run mkasm.go"
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
mksyscall="go run mksyscall.go -openbsd"
|
mksyscall="go run mksyscall.go -openbsd -libc"
|
||||||
mksysctl="go run mksysctl_openbsd.go"
|
mksysctl="go run mksysctl_openbsd.go"
|
||||||
mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
;;
|
;;
|
||||||
openbsd_arm)
|
openbsd_arm)
|
||||||
|
mkasm="go run mkasm.go"
|
||||||
mkerrors="$mkerrors"
|
mkerrors="$mkerrors"
|
||||||
mksyscall="go run mksyscall.go -l32 -openbsd -arm"
|
mksyscall="go run mksyscall.go -l32 -openbsd -arm -libc"
|
||||||
mksysctl="go run mksysctl_openbsd.go"
|
mksysctl="go run mksysctl_openbsd.go"
|
||||||
mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
|
||||||
# Let the type of C char be signed for making the bare syscall
|
# Let the type of C char be signed for making the bare syscall
|
||||||
# API consistent across platforms.
|
# API consistent across platforms.
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
;;
|
;;
|
||||||
openbsd_arm64)
|
openbsd_arm64)
|
||||||
|
mkasm="go run mkasm.go"
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
mksyscall="go run mksyscall.go -openbsd"
|
mksyscall="go run mksyscall.go -openbsd -libc"
|
||||||
mksysctl="go run mksysctl_openbsd.go"
|
mksysctl="go run mksysctl_openbsd.go"
|
||||||
mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
|
||||||
# Let the type of C char be signed for making the bare syscall
|
# Let the type of C char be signed for making the bare syscall
|
||||||
# API consistent across platforms.
|
# API consistent across platforms.
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
;;
|
;;
|
||||||
openbsd_mips64)
|
openbsd_mips64)
|
||||||
|
mkasm="go run mkasm.go"
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
mksyscall="go run mksyscall.go -openbsd"
|
mksyscall="go run mksyscall.go -openbsd -libc"
|
||||||
|
mksysctl="go run mksysctl_openbsd.go"
|
||||||
|
# Let the type of C char be signed for making the bare syscall
|
||||||
|
# API consistent across platforms.
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
|
;;
|
||||||
|
openbsd_ppc64)
|
||||||
|
mkasm="go run mkasm.go"
|
||||||
|
mkerrors="$mkerrors -m64"
|
||||||
|
mksyscall="go run mksyscall.go -openbsd -libc"
|
||||||
|
mksysctl="go run mksysctl_openbsd.go"
|
||||||
|
# Let the type of C char be signed for making the bare syscall
|
||||||
|
# API consistent across platforms.
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
|
;;
|
||||||
|
openbsd_riscv64)
|
||||||
|
mkasm="go run mkasm.go"
|
||||||
|
mkerrors="$mkerrors -m64"
|
||||||
|
mksyscall="go run mksyscall.go -openbsd -libc"
|
||||||
mksysctl="go run mksysctl_openbsd.go"
|
mksysctl="go run mksysctl_openbsd.go"
|
||||||
mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
|
||||||
# Let the type of C char be signed for making the bare syscall
|
# Let the type of C char be signed for making the bare syscall
|
||||||
# API consistent across platforms.
|
# API consistent across platforms.
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
|
@ -214,11 +232,6 @@ esac
|
||||||
if [ "$GOOSARCH" == "aix_ppc64" ]; then
|
if [ "$GOOSARCH" == "aix_ppc64" ]; then
|
||||||
# aix/ppc64 script generates files instead of writing to stdin.
|
# aix/ppc64 script generates files instead of writing to stdin.
|
||||||
echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in && gofmt -w zsyscall_$GOOSARCH.go && gofmt -w zsyscall_"$GOOSARCH"_gccgo.go && gofmt -w zsyscall_"$GOOSARCH"_gc.go " ;
|
echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in && gofmt -w zsyscall_$GOOSARCH.go && gofmt -w zsyscall_"$GOOSARCH"_gccgo.go && gofmt -w zsyscall_"$GOOSARCH"_gc.go " ;
|
||||||
elif [ "$GOOS" == "darwin" ]; then
|
|
||||||
# 1.12 and later, syscalls via libSystem
|
|
||||||
echo "$mksyscall -tags $GOOS,$GOARCH,go1.12 $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go";
|
|
||||||
# 1.13 and later, syscalls via libSystem (including syscallPtr)
|
|
||||||
echo "$mksyscall -tags $GOOS,$GOARCH,go1.13 syscall_darwin.1_13.go |gofmt >zsyscall_$GOOSARCH.1_13.go";
|
|
||||||
elif [ "$GOOS" == "illumos" ]; then
|
elif [ "$GOOS" == "illumos" ]; then
|
||||||
# illumos code generation requires a --illumos switch
|
# illumos code generation requires a --illumos switch
|
||||||
echo "$mksyscall -illumos -tags illumos,$GOARCH syscall_illumos.go |gofmt > zsyscall_illumos_$GOARCH.go";
|
echo "$mksyscall -illumos -tags illumos,$GOARCH syscall_illumos.go |gofmt > zsyscall_illumos_$GOARCH.go";
|
||||||
|
@ -232,5 +245,5 @@ esac
|
||||||
if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi
|
if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi
|
||||||
if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi
|
if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi
|
||||||
if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi
|
if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi
|
||||||
if [ -n "$mkasm" ]; then echo "$mkasm $GOARCH"; fi
|
if [ -n "$mkasm" ]; then echo "$mkasm $GOOS $GOARCH"; fi
|
||||||
) | $run
|
) | $run
|
||||||
|
|
|
@ -642,7 +642,7 @@ errors=$(
|
||||||
signals=$(
|
signals=$(
|
||||||
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |
|
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |
|
||||||
egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' |
|
grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT\|SIGMAX64' |
|
||||||
sort
|
sort
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -652,7 +652,7 @@ echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
sort >_error.grep
|
sort >_error.grep
|
||||||
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' |
|
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' |
|
||||||
egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' |
|
grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT\|SIGMAX64' |
|
||||||
sort >_signal.grep
|
sort >_signal.grep
|
||||||
|
|
||||||
echo '// mkerrors.sh' "$@"
|
echo '// mkerrors.sh' "$@"
|
||||||
|
|
|
@ -52,6 +52,20 @@ func ParseSocketControlMessage(b []byte) ([]SocketControlMessage, error) {
|
||||||
return msgs, nil
|
return msgs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ParseOneSocketControlMessage parses a single socket control message from b, returning the message header,
|
||||||
|
// message data (a slice of b), and the remainder of b after that single message.
|
||||||
|
// When there are no remaining messages, len(remainder) == 0.
|
||||||
|
func ParseOneSocketControlMessage(b []byte) (hdr Cmsghdr, data []byte, remainder []byte, err error) {
|
||||||
|
h, dbuf, err := socketControlMessageHeaderAndData(b)
|
||||||
|
if err != nil {
|
||||||
|
return Cmsghdr{}, nil, nil, err
|
||||||
|
}
|
||||||
|
if i := cmsgAlignOf(int(h.Len)); i < len(b) {
|
||||||
|
remainder = b[i:]
|
||||||
|
}
|
||||||
|
return *h, dbuf, remainder, nil
|
||||||
|
}
|
||||||
|
|
||||||
func socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) {
|
func socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) {
|
||||||
h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
|
h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
|
||||||
if h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) {
|
if h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) {
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
// Copyright 2009 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 aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
|
|
||||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
func itoa(val int) string { // do it here rather than with fmt to avoid dependency
|
|
||||||
if val < 0 {
|
|
||||||
return "-" + uitoa(uint(-val))
|
|
||||||
}
|
|
||||||
return uitoa(uint(val))
|
|
||||||
}
|
|
||||||
|
|
||||||
func uitoa(val uint) string {
|
|
||||||
var buf [32]byte // big enough for int64
|
|
||||||
i := len(buf) - 1
|
|
||||||
for val >= 10 {
|
|
||||||
buf[i] = byte(val%10 + '0')
|
|
||||||
i--
|
|
||||||
val /= 10
|
|
||||||
}
|
|
||||||
buf[i] = byte(val + '0')
|
|
||||||
return string(buf[i:])
|
|
||||||
}
|
|
|
@ -29,8 +29,6 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"strings"
|
"strings"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"golang.org/x/sys/internal/unsafeheader"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ByteSliceFromString returns a NUL-terminated slice of bytes
|
// ByteSliceFromString returns a NUL-terminated slice of bytes
|
||||||
|
@ -82,13 +80,7 @@ func BytePtrToString(p *byte) string {
|
||||||
ptr = unsafe.Pointer(uintptr(ptr) + 1)
|
ptr = unsafe.Pointer(uintptr(ptr) + 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
var s []byte
|
return string(unsafe.Slice(p, n))
|
||||||
h := (*unsafeheader.Slice)(unsafe.Pointer(&s))
|
|
||||||
h.Data = unsafe.Pointer(p)
|
|
||||||
h.Len = n
|
|
||||||
h.Cap = n
|
|
||||||
|
|
||||||
return string(s)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Single-word zero for use when we need a valid pointer to 0 bytes.
|
// Single-word zero for use when we need a valid pointer to 0 bytes.
|
||||||
|
|
|
@ -218,13 +218,62 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
|
func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
|
||||||
// Recvmsg not implemented on AIX
|
var msg Msghdr
|
||||||
return -1, -1, -1, ENOSYS
|
msg.Name = (*byte)(unsafe.Pointer(rsa))
|
||||||
|
msg.Namelen = uint32(SizeofSockaddrAny)
|
||||||
|
var dummy byte
|
||||||
|
if len(oob) > 0 {
|
||||||
|
// receive at least one normal byte
|
||||||
|
if emptyIovecs(iov) {
|
||||||
|
var iova [1]Iovec
|
||||||
|
iova[0].Base = &dummy
|
||||||
|
iova[0].SetLen(1)
|
||||||
|
iov = iova[:]
|
||||||
|
}
|
||||||
|
msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
|
||||||
|
msg.SetControllen(len(oob))
|
||||||
|
}
|
||||||
|
if len(iov) > 0 {
|
||||||
|
msg.Iov = &iov[0]
|
||||||
|
msg.SetIovlen(len(iov))
|
||||||
|
}
|
||||||
|
if n, err = recvmsg(fd, &msg, flags); n == -1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
oobn = int(msg.Controllen)
|
||||||
|
recvflags = int(msg.Flags)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
|
func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
|
||||||
// SendmsgN not implemented on AIX
|
var msg Msghdr
|
||||||
return -1, ENOSYS
|
msg.Name = (*byte)(unsafe.Pointer(ptr))
|
||||||
|
msg.Namelen = uint32(salen)
|
||||||
|
var dummy byte
|
||||||
|
var empty bool
|
||||||
|
if len(oob) > 0 {
|
||||||
|
// send at least one normal byte
|
||||||
|
empty = emptyIovecs(iov)
|
||||||
|
if empty {
|
||||||
|
var iova [1]Iovec
|
||||||
|
iova[0].Base = &dummy
|
||||||
|
iova[0].SetLen(1)
|
||||||
|
iov = iova[:]
|
||||||
|
}
|
||||||
|
msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
|
||||||
|
msg.SetControllen(len(oob))
|
||||||
|
}
|
||||||
|
if len(iov) > 0 {
|
||||||
|
msg.Iov = &iov[0]
|
||||||
|
msg.SetIovlen(len(iov))
|
||||||
|
}
|
||||||
|
if n, err = sendmsg(fd, &msg, flags); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
if len(oob) > 0 && empty {
|
||||||
|
n = 0
|
||||||
|
}
|
||||||
|
return n, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
|
func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
|
||||||
|
|
|
@ -363,7 +363,7 @@ func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Sockle
|
||||||
var empty bool
|
var empty bool
|
||||||
if len(oob) > 0 {
|
if len(oob) > 0 {
|
||||||
// send at least one normal byte
|
// send at least one normal byte
|
||||||
empty := emptyIovecs(iov)
|
empty = emptyIovecs(iov)
|
||||||
if empty {
|
if empty {
|
||||||
var iova [1]Iovec
|
var iova [1]Iovec
|
||||||
iova[0].Base = &dummy
|
iova[0].Base = &dummy
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
// Copyright 2019 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 darwin && go1.12 && !go1.13
|
|
||||||
// +build darwin,go1.12,!go1.13
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
const _SYS_GETDIRENTRIES64 = 344
|
|
||||||
|
|
||||||
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
// To implement this using libSystem we'd need syscall_syscallPtr for
|
|
||||||
// fdopendir. However, syscallPtr was only added in Go 1.13, so we fall
|
|
||||||
// back to raw syscalls for this func on Go 1.12.
|
|
||||||
var p unsafe.Pointer
|
|
||||||
if len(buf) > 0 {
|
|
||||||
p = unsafe.Pointer(&buf[0])
|
|
||||||
} else {
|
|
||||||
p = unsafe.Pointer(&_zero)
|
|
||||||
}
|
|
||||||
r0, _, e1 := Syscall6(_SYS_GETDIRENTRIES64, uintptr(fd), uintptr(p), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
|
|
||||||
n = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
return n, errnoErr(e1)
|
|
||||||
}
|
|
||||||
return n, nil
|
|
||||||
}
|
|
|
@ -1,108 +0,0 @@
|
||||||
// Copyright 2019 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 darwin && go1.13
|
|
||||||
// +build darwin,go1.13
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"golang.org/x/sys/internal/unsafeheader"
|
|
||||||
)
|
|
||||||
|
|
||||||
//sys closedir(dir uintptr) (err error)
|
|
||||||
//sys readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno)
|
|
||||||
|
|
||||||
func fdopendir(fd int) (dir uintptr, err error) {
|
|
||||||
r0, _, e1 := syscall_syscallPtr(libc_fdopendir_trampoline_addr, uintptr(fd), 0, 0)
|
|
||||||
dir = uintptr(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var libc_fdopendir_trampoline_addr uintptr
|
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib"
|
|
||||||
|
|
||||||
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|
||||||
// Simulate Getdirentries using fdopendir/readdir_r/closedir.
|
|
||||||
// We store the number of entries to skip in the seek
|
|
||||||
// offset of fd. See issue #31368.
|
|
||||||
// It's not the full required semantics, but should handle the case
|
|
||||||
// of calling Getdirentries or ReadDirent repeatedly.
|
|
||||||
// It won't handle assigning the results of lseek to *basep, or handle
|
|
||||||
// the directory being edited underfoot.
|
|
||||||
skip, err := Seek(fd, 0, 1 /* SEEK_CUR */)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// We need to duplicate the incoming file descriptor
|
|
||||||
// because the caller expects to retain control of it, but
|
|
||||||
// fdopendir expects to take control of its argument.
|
|
||||||
// Just Dup'ing the file descriptor is not enough, as the
|
|
||||||
// result shares underlying state. Use Openat to make a really
|
|
||||||
// new file descriptor referring to the same directory.
|
|
||||||
fd2, err := Openat(fd, ".", O_RDONLY, 0)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
d, err := fdopendir(fd2)
|
|
||||||
if err != nil {
|
|
||||||
Close(fd2)
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
defer closedir(d)
|
|
||||||
|
|
||||||
var cnt int64
|
|
||||||
for {
|
|
||||||
var entry Dirent
|
|
||||||
var entryp *Dirent
|
|
||||||
e := readdir_r(d, &entry, &entryp)
|
|
||||||
if e != 0 {
|
|
||||||
return n, errnoErr(e)
|
|
||||||
}
|
|
||||||
if entryp == nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if skip > 0 {
|
|
||||||
skip--
|
|
||||||
cnt++
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
reclen := int(entry.Reclen)
|
|
||||||
if reclen > len(buf) {
|
|
||||||
// Not enough room. Return for now.
|
|
||||||
// The counter will let us know where we should start up again.
|
|
||||||
// Note: this strategy for suspending in the middle and
|
|
||||||
// restarting is O(n^2) in the length of the directory. Oh well.
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy entry into return buffer.
|
|
||||||
var s []byte
|
|
||||||
hdr := (*unsafeheader.Slice)(unsafe.Pointer(&s))
|
|
||||||
hdr.Data = unsafe.Pointer(&entry)
|
|
||||||
hdr.Cap = reclen
|
|
||||||
hdr.Len = reclen
|
|
||||||
copy(buf, s)
|
|
||||||
|
|
||||||
buf = buf[reclen:]
|
|
||||||
n += reclen
|
|
||||||
cnt++
|
|
||||||
}
|
|
||||||
// Set the seek offset of the input fd to record
|
|
||||||
// how many files we've already returned.
|
|
||||||
_, err = Seek(fd, cnt, 0 /* SEEK_SET */)
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return n, nil
|
|
||||||
}
|
|
|
@ -19,6 +19,96 @@ import (
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//sys closedir(dir uintptr) (err error)
|
||||||
|
//sys readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno)
|
||||||
|
|
||||||
|
func fdopendir(fd int) (dir uintptr, err error) {
|
||||||
|
r0, _, e1 := syscall_syscallPtr(libc_fdopendir_trampoline_addr, uintptr(fd), 0, 0)
|
||||||
|
dir = uintptr(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_fdopendir_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
||||||
|
// Simulate Getdirentries using fdopendir/readdir_r/closedir.
|
||||||
|
// We store the number of entries to skip in the seek
|
||||||
|
// offset of fd. See issue #31368.
|
||||||
|
// It's not the full required semantics, but should handle the case
|
||||||
|
// of calling Getdirentries or ReadDirent repeatedly.
|
||||||
|
// It won't handle assigning the results of lseek to *basep, or handle
|
||||||
|
// the directory being edited underfoot.
|
||||||
|
skip, err := Seek(fd, 0, 1 /* SEEK_CUR */)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// We need to duplicate the incoming file descriptor
|
||||||
|
// because the caller expects to retain control of it, but
|
||||||
|
// fdopendir expects to take control of its argument.
|
||||||
|
// Just Dup'ing the file descriptor is not enough, as the
|
||||||
|
// result shares underlying state. Use Openat to make a really
|
||||||
|
// new file descriptor referring to the same directory.
|
||||||
|
fd2, err := Openat(fd, ".", O_RDONLY, 0)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
d, err := fdopendir(fd2)
|
||||||
|
if err != nil {
|
||||||
|
Close(fd2)
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
defer closedir(d)
|
||||||
|
|
||||||
|
var cnt int64
|
||||||
|
for {
|
||||||
|
var entry Dirent
|
||||||
|
var entryp *Dirent
|
||||||
|
e := readdir_r(d, &entry, &entryp)
|
||||||
|
if e != 0 {
|
||||||
|
return n, errnoErr(e)
|
||||||
|
}
|
||||||
|
if entryp == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if skip > 0 {
|
||||||
|
skip--
|
||||||
|
cnt++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
reclen := int(entry.Reclen)
|
||||||
|
if reclen > len(buf) {
|
||||||
|
// Not enough room. Return for now.
|
||||||
|
// The counter will let us know where we should start up again.
|
||||||
|
// Note: this strategy for suspending in the middle and
|
||||||
|
// restarting is O(n^2) in the length of the directory. Oh well.
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy entry into return buffer.
|
||||||
|
s := unsafe.Slice((*byte)(unsafe.Pointer(&entry)), reclen)
|
||||||
|
copy(buf, s)
|
||||||
|
|
||||||
|
buf = buf[reclen:]
|
||||||
|
n += reclen
|
||||||
|
cnt++
|
||||||
|
}
|
||||||
|
// Set the seek offset of the input fd to record
|
||||||
|
// how many files we've already returned.
|
||||||
|
_, err = Seek(fd, cnt, 0 /* SEEK_SET */)
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
|
||||||
// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
|
// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
|
||||||
type SockaddrDatalink struct {
|
type SockaddrDatalink struct {
|
||||||
Len uint8
|
Len uint8
|
||||||
|
@ -140,6 +230,7 @@ func direntNamlen(buf []byte) (uint64, bool) {
|
||||||
|
|
||||||
func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }
|
func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }
|
||||||
func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }
|
func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }
|
||||||
|
func PtraceDenyAttach() (err error) { return ptrace(PT_DENY_ATTACH, 0, 0, 0) }
|
||||||
|
|
||||||
//sysnb pipe(p *[2]int32) (err error)
|
//sysnb pipe(p *[2]int32) (err error)
|
||||||
|
|
||||||
|
|
|
@ -255,6 +255,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
||||||
//sys Chmod(path string, mode uint32) (err error)
|
//sys Chmod(path string, mode uint32) (err error)
|
||||||
//sys Chown(path string, uid int, gid int) (err error)
|
//sys Chown(path string, uid int, gid int) (err error)
|
||||||
//sys Chroot(path string) (err error)
|
//sys Chroot(path string) (err error)
|
||||||
|
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
||||||
//sys Close(fd int) (err error)
|
//sys Close(fd int) (err error)
|
||||||
//sys Dup(fd int) (nfd int, err error)
|
//sys Dup(fd int) (nfd int, err error)
|
||||||
//sys Dup2(from int, to int) (err error)
|
//sys Dup2(from int, to int) (err error)
|
||||||
|
|
|
@ -319,6 +319,7 @@ func PtraceSingleStep(pid int) (err error) {
|
||||||
//sys Chmod(path string, mode uint32) (err error)
|
//sys Chmod(path string, mode uint32) (err error)
|
||||||
//sys Chown(path string, uid int, gid int) (err error)
|
//sys Chown(path string, uid int, gid int) (err error)
|
||||||
//sys Chroot(path string) (err error)
|
//sys Chroot(path string) (err error)
|
||||||
|
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
||||||
//sys Close(fd int) (err error)
|
//sys Close(fd int) (err error)
|
||||||
//sys Dup(fd int) (nfd int, err error)
|
//sys Dup(fd int) (nfd int, err error)
|
||||||
//sys Dup2(from int, to int) (err error)
|
//sys Dup2(from int, to int) (err error)
|
||||||
|
|
|
@ -60,8 +60,13 @@ func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
|
||||||
return ptrace(PT_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0)
|
return ptrace(PT_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
func PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) {
|
||||||
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
|
ioDesc := PtraceIoDesc{
|
||||||
|
Op: int32(req),
|
||||||
|
Offs: offs,
|
||||||
|
Addr: uintptr(unsafe.Pointer(&out[0])), // TODO(#58351): this is not safe.
|
||||||
|
Len: uint32(countin),
|
||||||
|
}
|
||||||
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
return int(ioDesc.Len), err
|
return int(ioDesc.Len), err
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,8 +60,13 @@ func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
|
||||||
return ptrace(PT_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0)
|
return ptrace(PT_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
func PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) {
|
||||||
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
|
ioDesc := PtraceIoDesc{
|
||||||
|
Op: int32(req),
|
||||||
|
Offs: offs,
|
||||||
|
Addr: uintptr(unsafe.Pointer(&out[0])), // TODO(#58351): this is not safe.
|
||||||
|
Len: uint64(countin),
|
||||||
|
}
|
||||||
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
return int(ioDesc.Len), err
|
return int(ioDesc.Len), err
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,8 +56,13 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
||||||
|
|
||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
||||||
|
|
||||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
func PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) {
|
||||||
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
|
ioDesc := PtraceIoDesc{
|
||||||
|
Op: int32(req),
|
||||||
|
Offs: offs,
|
||||||
|
Addr: uintptr(unsafe.Pointer(&out[0])), // TODO(#58351): this is not safe.
|
||||||
|
Len: uint32(countin),
|
||||||
|
}
|
||||||
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
return int(ioDesc.Len), err
|
return int(ioDesc.Len), err
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,8 +56,13 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
||||||
|
|
||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
||||||
|
|
||||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
func PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) {
|
||||||
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
|
ioDesc := PtraceIoDesc{
|
||||||
|
Op: int32(req),
|
||||||
|
Offs: offs,
|
||||||
|
Addr: uintptr(unsafe.Pointer(&out[0])), // TODO(#58351): this is not safe.
|
||||||
|
Len: uint64(countin),
|
||||||
|
}
|
||||||
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
return int(ioDesc.Len), err
|
return int(ioDesc.Len), err
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,8 +56,13 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
||||||
|
|
||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
||||||
|
|
||||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
func PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) {
|
||||||
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
|
ioDesc := PtraceIoDesc{
|
||||||
|
Op: int32(req),
|
||||||
|
Offs: offs,
|
||||||
|
Addr: uintptr(unsafe.Pointer(&out[0])), // TODO(#58351): this is not safe.
|
||||||
|
Len: uint64(countin),
|
||||||
|
}
|
||||||
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
return int(ioDesc.Len), err
|
return int(ioDesc.Len), err
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
// Copyright 2022 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 hurd
|
||||||
|
// +build hurd
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
/*
|
||||||
|
#include <stdint.h>
|
||||||
|
int ioctl(int, unsigned long int, uintptr_t);
|
||||||
|
*/
|
||||||
|
import "C"
|
||||||
|
|
||||||
|
func ioctl(fd int, req uint, arg uintptr) (err error) {
|
||||||
|
r0, er := C.ioctl(C.int(fd), C.ulong(req), C.uintptr_t(arg))
|
||||||
|
if r0 == -1 && er != nil {
|
||||||
|
err = er
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
// Copyright 2022 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 386 && hurd
|
||||||
|
// +build 386,hurd
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
const (
|
||||||
|
TIOCGETA = 0x62251713
|
||||||
|
)
|
||||||
|
|
||||||
|
type Winsize struct {
|
||||||
|
Row uint16
|
||||||
|
Col uint16
|
||||||
|
Xpixel uint16
|
||||||
|
Ypixel uint16
|
||||||
|
}
|
||||||
|
|
||||||
|
type Termios struct {
|
||||||
|
Iflag uint32
|
||||||
|
Oflag uint32
|
||||||
|
Cflag uint32
|
||||||
|
Lflag uint32
|
||||||
|
Cc [20]uint8
|
||||||
|
Ispeed int32
|
||||||
|
Ospeed int32
|
||||||
|
}
|
|
@ -10,8 +10,6 @@
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"runtime"
|
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -79,107 +77,3 @@ func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error)
|
|
||||||
|
|
||||||
func Putmsg(fd int, cl []byte, data []byte, flags int) (err error) {
|
|
||||||
var clp, datap *strbuf
|
|
||||||
if len(cl) > 0 {
|
|
||||||
clp = &strbuf{
|
|
||||||
Len: int32(len(cl)),
|
|
||||||
Buf: (*int8)(unsafe.Pointer(&cl[0])),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(data) > 0 {
|
|
||||||
datap = &strbuf{
|
|
||||||
Len: int32(len(data)),
|
|
||||||
Buf: (*int8)(unsafe.Pointer(&data[0])),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return putmsg(fd, clp, datap, flags)
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys getmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error)
|
|
||||||
|
|
||||||
func Getmsg(fd int, cl []byte, data []byte) (retCl []byte, retData []byte, flags int, err error) {
|
|
||||||
var clp, datap *strbuf
|
|
||||||
if len(cl) > 0 {
|
|
||||||
clp = &strbuf{
|
|
||||||
Maxlen: int32(len(cl)),
|
|
||||||
Buf: (*int8)(unsafe.Pointer(&cl[0])),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(data) > 0 {
|
|
||||||
datap = &strbuf{
|
|
||||||
Maxlen: int32(len(data)),
|
|
||||||
Buf: (*int8)(unsafe.Pointer(&data[0])),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err = getmsg(fd, clp, datap, &flags); err != nil {
|
|
||||||
return nil, nil, 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(cl) > 0 {
|
|
||||||
retCl = cl[:clp.Len]
|
|
||||||
}
|
|
||||||
if len(data) > 0 {
|
|
||||||
retData = data[:datap.Len]
|
|
||||||
}
|
|
||||||
return retCl, retData, flags, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func IoctlSetIntRetInt(fd int, req uint, arg int) (int, error) {
|
|
||||||
return ioctlRet(fd, req, uintptr(arg))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IoctlSetString(fd int, req uint, val string) error {
|
|
||||||
bs := make([]byte, len(val)+1)
|
|
||||||
copy(bs[:len(bs)-1], val)
|
|
||||||
err := ioctl(fd, req, uintptr(unsafe.Pointer(&bs[0])))
|
|
||||||
runtime.KeepAlive(&bs[0])
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lifreq Helpers
|
|
||||||
|
|
||||||
func (l *Lifreq) SetName(name string) error {
|
|
||||||
if len(name) >= len(l.Name) {
|
|
||||||
return fmt.Errorf("name cannot be more than %d characters", len(l.Name)-1)
|
|
||||||
}
|
|
||||||
for i := range name {
|
|
||||||
l.Name[i] = int8(name[i])
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *Lifreq) SetLifruInt(d int) {
|
|
||||||
*(*int)(unsafe.Pointer(&l.Lifru[0])) = d
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *Lifreq) GetLifruInt() int {
|
|
||||||
return *(*int)(unsafe.Pointer(&l.Lifru[0]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *Lifreq) SetLifruUint(d uint) {
|
|
||||||
*(*uint)(unsafe.Pointer(&l.Lifru[0])) = d
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *Lifreq) GetLifruUint() uint {
|
|
||||||
return *(*uint)(unsafe.Pointer(&l.Lifru[0]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IoctlLifreq(fd int, req uint, l *Lifreq) error {
|
|
||||||
return ioctl(fd, req, uintptr(unsafe.Pointer(l)))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Strioctl Helpers
|
|
||||||
|
|
||||||
func (s *Strioctl) SetInt(i int) {
|
|
||||||
s.Len = int32(unsafe.Sizeof(i))
|
|
||||||
s.Dp = (*int8)(unsafe.Pointer(&i))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IoctlSetStrioctlRetInt(fd int, req uint, s *Strioctl) (int, error) {
|
|
||||||
return ioctlRet(fd, req, uintptr(unsafe.Pointer(s)))
|
|
||||||
}
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ package unix
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"strconv"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
@ -233,7 +234,7 @@ func Futimesat(dirfd int, path string, tv []Timeval) error {
|
||||||
func Futimes(fd int, tv []Timeval) (err error) {
|
func Futimes(fd int, tv []Timeval) (err error) {
|
||||||
// Believe it or not, this is the best we can do on Linux
|
// Believe it or not, this is the best we can do on Linux
|
||||||
// (and is what glibc does).
|
// (and is what glibc does).
|
||||||
return Utimes("/proc/self/fd/"+itoa(fd), tv)
|
return Utimes("/proc/self/fd/"+strconv.Itoa(fd), tv)
|
||||||
}
|
}
|
||||||
|
|
||||||
const ImplementsGetwd = true
|
const ImplementsGetwd = true
|
||||||
|
@ -1541,7 +1542,7 @@ func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Sockle
|
||||||
var dummy byte
|
var dummy byte
|
||||||
var empty bool
|
var empty bool
|
||||||
if len(oob) > 0 {
|
if len(oob) > 0 {
|
||||||
empty := emptyIovecs(iov)
|
empty = emptyIovecs(iov)
|
||||||
if empty {
|
if empty {
|
||||||
var sockType int
|
var sockType int
|
||||||
sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)
|
sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)
|
||||||
|
@ -1553,6 +1554,7 @@ func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Sockle
|
||||||
var iova [1]Iovec
|
var iova [1]Iovec
|
||||||
iova[0].Base = &dummy
|
iova[0].Base = &dummy
|
||||||
iova[0].SetLen(1)
|
iova[0].SetLen(1)
|
||||||
|
iov = iova[:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
msg.Control = &oob[0]
|
msg.Control = &oob[0]
|
||||||
|
@ -1798,6 +1800,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
||||||
//sysnb Capset(hdr *CapUserHeader, data *CapUserData) (err error)
|
//sysnb Capset(hdr *CapUserHeader, data *CapUserData) (err error)
|
||||||
//sys Chdir(path string) (err error)
|
//sys Chdir(path string) (err error)
|
||||||
//sys Chroot(path string) (err error)
|
//sys Chroot(path string) (err error)
|
||||||
|
//sys ClockAdjtime(clockid int32, buf *Timex) (state int, err error)
|
||||||
//sys ClockGetres(clockid int32, res *Timespec) (err error)
|
//sys ClockGetres(clockid int32, res *Timespec) (err error)
|
||||||
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
||||||
//sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error)
|
//sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error)
|
||||||
|
@ -1891,17 +1894,28 @@ func PrctlRetInt(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uint
|
||||||
return int(ret), nil
|
return int(ret), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// issue 1435.
|
|
||||||
// On linux Setuid and Setgid only affects the current thread, not the process.
|
|
||||||
// This does not match what most callers expect so we must return an error
|
|
||||||
// here rather than letting the caller think that the call succeeded.
|
|
||||||
|
|
||||||
func Setuid(uid int) (err error) {
|
func Setuid(uid int) (err error) {
|
||||||
return EOPNOTSUPP
|
return syscall.Setuid(uid)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Setgid(uid int) (err error) {
|
func Setgid(gid int) (err error) {
|
||||||
return EOPNOTSUPP
|
return syscall.Setgid(gid)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Setreuid(ruid, euid int) (err error) {
|
||||||
|
return syscall.Setreuid(ruid, euid)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Setregid(rgid, egid int) (err error) {
|
||||||
|
return syscall.Setregid(rgid, egid)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Setresuid(ruid, euid, suid int) (err error) {
|
||||||
|
return syscall.Setresuid(ruid, euid, suid)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Setresgid(rgid, egid, sgid int) (err error) {
|
||||||
|
return syscall.Setresgid(rgid, egid, sgid)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set.
|
// SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set.
|
||||||
|
@ -1960,36 +1974,46 @@ func Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) {
|
||||||
//sys preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PREADV2
|
//sys preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PREADV2
|
||||||
//sys pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2
|
//sys pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2
|
||||||
|
|
||||||
func bytes2iovec(bs [][]byte) []Iovec {
|
// minIovec is the size of the small initial allocation used by
|
||||||
iovecs := make([]Iovec, len(bs))
|
// Readv, Writev, etc.
|
||||||
for i, b := range bs {
|
//
|
||||||
iovecs[i].SetLen(len(b))
|
// This small allocation gets stack allocated, which lets the
|
||||||
|
// common use case of len(iovs) <= minIovs avoid more expensive
|
||||||
|
// heap allocations.
|
||||||
|
const minIovec = 8
|
||||||
|
|
||||||
|
// appendBytes converts bs to Iovecs and appends them to vecs.
|
||||||
|
func appendBytes(vecs []Iovec, bs [][]byte) []Iovec {
|
||||||
|
for _, b := range bs {
|
||||||
|
var v Iovec
|
||||||
|
v.SetLen(len(b))
|
||||||
if len(b) > 0 {
|
if len(b) > 0 {
|
||||||
iovecs[i].Base = &b[0]
|
v.Base = &b[0]
|
||||||
} else {
|
} else {
|
||||||
iovecs[i].Base = (*byte)(unsafe.Pointer(&_zero))
|
v.Base = (*byte)(unsafe.Pointer(&_zero))
|
||||||
}
|
}
|
||||||
|
vecs = append(vecs, v)
|
||||||
}
|
}
|
||||||
return iovecs
|
return vecs
|
||||||
}
|
}
|
||||||
|
|
||||||
// offs2lohi splits offs into its lower and upper unsigned long. On 64-bit
|
// offs2lohi splits offs into its low and high order bits.
|
||||||
// systems, hi will always be 0. On 32-bit systems, offs will be split in half.
|
|
||||||
// preadv/pwritev chose this calling convention so they don't need to add a
|
|
||||||
// padding-register for alignment on ARM.
|
|
||||||
func offs2lohi(offs int64) (lo, hi uintptr) {
|
func offs2lohi(offs int64) (lo, hi uintptr) {
|
||||||
return uintptr(offs), uintptr(uint64(offs) >> SizeofLong)
|
const longBits = SizeofLong * 8
|
||||||
|
return uintptr(offs), uintptr(uint64(offs) >> (longBits - 1) >> 1) // two shifts to avoid false positive in vet
|
||||||
}
|
}
|
||||||
|
|
||||||
func Readv(fd int, iovs [][]byte) (n int, err error) {
|
func Readv(fd int, iovs [][]byte) (n int, err error) {
|
||||||
iovecs := bytes2iovec(iovs)
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
n, err = readv(fd, iovecs)
|
n, err = readv(fd, iovecs)
|
||||||
readvRacedetect(iovecs, n, err)
|
readvRacedetect(iovecs, n, err)
|
||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) {
|
func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) {
|
||||||
iovecs := bytes2iovec(iovs)
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
lo, hi := offs2lohi(offset)
|
lo, hi := offs2lohi(offset)
|
||||||
n, err = preadv(fd, iovecs, lo, hi)
|
n, err = preadv(fd, iovecs, lo, hi)
|
||||||
readvRacedetect(iovecs, n, err)
|
readvRacedetect(iovecs, n, err)
|
||||||
|
@ -1997,7 +2021,8 @@ func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Preadv2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {
|
func Preadv2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {
|
||||||
iovecs := bytes2iovec(iovs)
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
lo, hi := offs2lohi(offset)
|
lo, hi := offs2lohi(offset)
|
||||||
n, err = preadv2(fd, iovecs, lo, hi, flags)
|
n, err = preadv2(fd, iovecs, lo, hi, flags)
|
||||||
readvRacedetect(iovecs, n, err)
|
readvRacedetect(iovecs, n, err)
|
||||||
|
@ -2024,7 +2049,8 @@ func readvRacedetect(iovecs []Iovec, n int, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Writev(fd int, iovs [][]byte) (n int, err error) {
|
func Writev(fd int, iovs [][]byte) (n int, err error) {
|
||||||
iovecs := bytes2iovec(iovs)
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
if raceenabled {
|
if raceenabled {
|
||||||
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
||||||
}
|
}
|
||||||
|
@ -2034,7 +2060,8 @@ func Writev(fd int, iovs [][]byte) (n int, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) {
|
func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) {
|
||||||
iovecs := bytes2iovec(iovs)
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
if raceenabled {
|
if raceenabled {
|
||||||
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
||||||
}
|
}
|
||||||
|
@ -2045,7 +2072,8 @@ func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Pwritev2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {
|
func Pwritev2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {
|
||||||
iovecs := bytes2iovec(iovs)
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
if raceenabled {
|
if raceenabled {
|
||||||
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
||||||
}
|
}
|
||||||
|
@ -2240,7 +2268,7 @@ func (fh *FileHandle) Bytes() []byte {
|
||||||
if n == 0 {
|
if n == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return (*[1 << 30]byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type)) + 4))[:n:n]
|
return unsafe.Slice((*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type))+4)), n)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NameToHandleAt wraps the name_to_handle_at system call; it obtains
|
// NameToHandleAt wraps the name_to_handle_at system call; it obtains
|
||||||
|
@ -2356,6 +2384,16 @@ func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) {
|
||||||
return prev, nil
|
return prev, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//sysnb rtSigprocmask(how int, set *Sigset_t, oldset *Sigset_t, sigsetsize uintptr) (err error) = SYS_RT_SIGPROCMASK
|
||||||
|
|
||||||
|
func PthreadSigmask(how int, set, oldset *Sigset_t) error {
|
||||||
|
if oldset != nil {
|
||||||
|
// Explicitly clear in case Sigset_t is larger than _C__NSIG.
|
||||||
|
*oldset = Sigset_t{}
|
||||||
|
}
|
||||||
|
return rtSigprocmask(how, set, oldset, _C__NSIG/8)
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Unimplemented
|
* Unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -2414,7 +2452,6 @@ func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) {
|
||||||
// RestartSyscall
|
// RestartSyscall
|
||||||
// RtSigaction
|
// RtSigaction
|
||||||
// RtSigpending
|
// RtSigpending
|
||||||
// RtSigprocmask
|
|
||||||
// RtSigqueueinfo
|
// RtSigqueueinfo
|
||||||
// RtSigreturn
|
// RtSigreturn
|
||||||
// RtSigsuspend
|
// RtSigsuspend
|
||||||
|
|
|
@ -41,10 +41,6 @@ func setTimeval(sec, usec int64) Timeval {
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
||||||
//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
|
//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
|
||||||
//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
|
//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
|
||||||
//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
|
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
|
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
|
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32
|
|
||||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
|
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
|
||||||
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
||||||
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
||||||
|
|
|
@ -46,11 +46,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys setfsgid(gid int) (prev int, err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys setfsuid(uid int) (prev int, err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
|
||||||
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
|
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error)
|
|
||||||
//sys Shutdown(fd int, how int) (err error)
|
//sys Shutdown(fd int, how int) (err error)
|
||||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
||||||
|
|
||||||
|
|
|
@ -62,10 +62,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
|
||||||
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
||||||
//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
|
//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
|
||||||
//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
|
//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
|
||||||
//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
|
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
|
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
|
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32
|
|
||||||
//sys Shutdown(fd int, how int) (err error)
|
//sys Shutdown(fd int, how int) (err error)
|
||||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
|
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
|
||||||
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
||||||
|
|
|
@ -39,11 +39,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys setfsgid(gid int) (prev int, err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys setfsuid(uid int) (prev int, err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
|
||||||
//sysnb setrlimit(resource int, rlim *Rlimit) (err error)
|
//sysnb setrlimit(resource int, rlim *Rlimit) (err error)
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error)
|
|
||||||
//sys Shutdown(fd int, how int) (err error)
|
//sys Shutdown(fd int, how int) (err error)
|
||||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
||||||
|
|
||||||
|
|
|
@ -34,10 +34,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys setfsgid(gid int) (prev int, err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys setfsuid(uid int) (prev int, err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error)
|
|
||||||
//sys Shutdown(fd int, how int) (err error)
|
//sys Shutdown(fd int, how int) (err error)
|
||||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
||||||
|
|
||||||
|
|
|
@ -37,11 +37,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys setfsgid(gid int) (prev int, err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys setfsuid(uid int) (prev int, err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
|
||||||
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
|
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error)
|
|
||||||
//sys Shutdown(fd int, how int) (err error)
|
//sys Shutdown(fd int, how int) (err error)
|
||||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
||||||
//sys Statfs(path string, buf *Statfs_t) (err error)
|
//sys Statfs(path string, buf *Statfs_t) (err error)
|
||||||
|
|
|
@ -32,10 +32,6 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
||||||
//sys setfsgid(gid int) (prev int, err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys setfsuid(uid int) (prev int, err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error)
|
|
||||||
//sys Shutdown(fd int, how int) (err error)
|
//sys Shutdown(fd int, how int) (err error)
|
||||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
|
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
|
||||||
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
||||||
|
|
|
@ -34,10 +34,6 @@ import (
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
||||||
//sys setfsgid(gid int) (prev int, err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys setfsuid(uid int) (prev int, err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error)
|
|
||||||
//sys Shutdown(fd int, how int) (err error)
|
//sys Shutdown(fd int, how int) (err error)
|
||||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
|
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
|
||||||
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
||||||
|
|
|
@ -34,11 +34,7 @@ package unix
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys setfsgid(gid int) (prev int, err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys setfsuid(uid int) (prev int, err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
|
||||||
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
|
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error)
|
|
||||||
//sys Shutdown(fd int, how int) (err error)
|
//sys Shutdown(fd int, how int) (err error)
|
||||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
||||||
//sys Stat(path string, stat *Stat_t) (err error)
|
//sys Stat(path string, stat *Stat_t) (err error)
|
||||||
|
|
|
@ -38,11 +38,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys setfsgid(gid int) (prev int, err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys setfsuid(uid int) (prev int, err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
|
||||||
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
|
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error)
|
|
||||||
//sys Shutdown(fd int, how int) (err error)
|
//sys Shutdown(fd int, how int) (err error)
|
||||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
||||||
|
|
||||||
|
|
|
@ -34,11 +34,7 @@ import (
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys setfsgid(gid int) (prev int, err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys setfsuid(uid int) (prev int, err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
|
||||||
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
|
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error)
|
|
||||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
||||||
//sys Stat(path string, stat *Stat_t) (err error)
|
//sys Stat(path string, stat *Stat_t) (err error)
|
||||||
//sys Statfs(path string, buf *Statfs_t) (err error)
|
//sys Statfs(path string, buf *Statfs_t) (err error)
|
||||||
|
|
|
@ -31,11 +31,7 @@ package unix
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys setfsgid(gid int) (prev int, err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys setfsuid(uid int) (prev int, err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
|
||||||
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
|
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error)
|
|
||||||
//sys Shutdown(fd int, how int) (err error)
|
//sys Shutdown(fd int, how int) (err error)
|
||||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
||||||
//sys Stat(path string, stat *Stat_t) (err error)
|
//sys Stat(path string, stat *Stat_t) (err error)
|
||||||
|
|
|
@ -110,6 +110,20 @@ func direntNamlen(buf []byte) (uint64, bool) {
|
||||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
|
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SysctlUvmexp(name string) (*Uvmexp, error) {
|
||||||
|
mib, err := sysctlmib(name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
n := uintptr(SizeofUvmexp)
|
||||||
|
var u Uvmexp
|
||||||
|
if err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &u, nil
|
||||||
|
}
|
||||||
|
|
||||||
func Pipe(p []int) (err error) {
|
func Pipe(p []int) (err error) {
|
||||||
return Pipe2(p, 0)
|
return Pipe2(p, 0)
|
||||||
}
|
}
|
||||||
|
@ -245,6 +259,7 @@ func Statvfs(path string, buf *Statvfs_t) (err error) {
|
||||||
//sys Chmod(path string, mode uint32) (err error)
|
//sys Chmod(path string, mode uint32) (err error)
|
||||||
//sys Chown(path string, uid int, gid int) (err error)
|
//sys Chown(path string, uid int, gid int) (err error)
|
||||||
//sys Chroot(path string) (err error)
|
//sys Chroot(path string) (err error)
|
||||||
|
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
||||||
//sys Close(fd int) (err error)
|
//sys Close(fd int) (err error)
|
||||||
//sys Dup(fd int) (nfd int, err error)
|
//sys Dup(fd int) (nfd int, err error)
|
||||||
//sys Dup2(from int, to int) (err error)
|
//sys Dup2(from int, to int) (err error)
|
||||||
|
|
|
@ -220,6 +220,7 @@ func Uname(uname *Utsname) error {
|
||||||
//sys Chmod(path string, mode uint32) (err error)
|
//sys Chmod(path string, mode uint32) (err error)
|
||||||
//sys Chown(path string, uid int, gid int) (err error)
|
//sys Chown(path string, uid int, gid int) (err error)
|
||||||
//sys Chroot(path string) (err error)
|
//sys Chroot(path string) (err error)
|
||||||
|
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
||||||
//sys Close(fd int) (err error)
|
//sys Close(fd int) (err error)
|
||||||
//sys Dup(fd int) (nfd int, err error)
|
//sys Dup(fd int) (nfd int, err error)
|
||||||
//sys Dup2(from int, to int) (err error)
|
//sys Dup2(from int, to int) (err error)
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
// Copyright 2022 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 openbsd
|
||||||
|
// +build openbsd
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
import _ "unsafe"
|
||||||
|
|
||||||
|
// Implemented in the runtime package (runtime/sys_openbsd3.go)
|
||||||
|
func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
func syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
func syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
func syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
|
||||||
|
//go:linkname syscall_syscall syscall.syscall
|
||||||
|
//go:linkname syscall_syscall6 syscall.syscall6
|
||||||
|
//go:linkname syscall_syscall10 syscall.syscall10
|
||||||
|
//go:linkname syscall_rawSyscall syscall.rawSyscall
|
||||||
|
//go:linkname syscall_rawSyscall6 syscall.rawSyscall6
|
||||||
|
|
||||||
|
func syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) {
|
||||||
|
return syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, 0)
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
// Copyright 2019 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 ppc64 && openbsd
|
||||||
|
// +build ppc64,openbsd
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
func setTimespec(sec, nsec int64) Timespec {
|
||||||
|
return Timespec{Sec: sec, Nsec: nsec}
|
||||||
|
}
|
||||||
|
|
||||||
|
func setTimeval(sec, usec int64) Timeval {
|
||||||
|
return Timeval{Sec: sec, Usec: usec}
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetKevent(k *Kevent_t, fd, mode, flags int) {
|
||||||
|
k.Ident = uint64(fd)
|
||||||
|
k.Filter = int16(mode)
|
||||||
|
k.Flags = uint16(flags)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (iov *Iovec) SetLen(length int) {
|
||||||
|
iov.Len = uint64(length)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msghdr *Msghdr) SetControllen(length int) {
|
||||||
|
msghdr.Controllen = uint32(length)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msghdr *Msghdr) SetIovlen(length int) {
|
||||||
|
msghdr.Iovlen = uint32(length)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cmsg *Cmsghdr) SetLen(length int) {
|
||||||
|
cmsg.Len = uint32(length)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
|
||||||
|
// of openbsd/ppc64 the syscall is called sysctl instead of __sysctl.
|
||||||
|
const SYS___SYSCTL = SYS_SYSCTL
|
|
@ -0,0 +1,42 @@
|
||||||
|
// Copyright 2019 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 riscv64 && openbsd
|
||||||
|
// +build riscv64,openbsd
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
func setTimespec(sec, nsec int64) Timespec {
|
||||||
|
return Timespec{Sec: sec, Nsec: nsec}
|
||||||
|
}
|
||||||
|
|
||||||
|
func setTimeval(sec, usec int64) Timeval {
|
||||||
|
return Timeval{Sec: sec, Usec: usec}
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetKevent(k *Kevent_t, fd, mode, flags int) {
|
||||||
|
k.Ident = uint64(fd)
|
||||||
|
k.Filter = int16(mode)
|
||||||
|
k.Flags = uint16(flags)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (iov *Iovec) SetLen(length int) {
|
||||||
|
iov.Len = uint64(length)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msghdr *Msghdr) SetControllen(length int) {
|
||||||
|
msghdr.Controllen = uint32(length)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msghdr *Msghdr) SetIovlen(length int) {
|
||||||
|
msghdr.Iovlen = uint32(length)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cmsg *Cmsghdr) SetLen(length int) {
|
||||||
|
cmsg.Len = uint32(length)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
|
||||||
|
// of openbsd/riscv64 the syscall is called sysctl instead of __sysctl.
|
||||||
|
const SYS___SYSCTL = SYS_SYSCTL
|
|
@ -590,6 +590,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
||||||
//sys Chmod(path string, mode uint32) (err error)
|
//sys Chmod(path string, mode uint32) (err error)
|
||||||
//sys Chown(path string, uid int, gid int) (err error)
|
//sys Chown(path string, uid int, gid int) (err error)
|
||||||
//sys Chroot(path string) (err error)
|
//sys Chroot(path string) (err error)
|
||||||
|
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
||||||
//sys Close(fd int) (err error)
|
//sys Close(fd int) (err error)
|
||||||
//sys Creat(path string, mode uint32) (fd int, err error)
|
//sys Creat(path string, mode uint32) (fd int, err error)
|
||||||
//sys Dup(fd int) (nfd int, err error)
|
//sys Dup(fd int) (nfd int, err error)
|
||||||
|
@ -750,8 +751,8 @@ type EventPort struct {
|
||||||
// we should handle things gracefully. To do so, we need to keep an extra
|
// we should handle things gracefully. To do so, we need to keep an extra
|
||||||
// reference to the cookie around until the event is processed
|
// reference to the cookie around until the event is processed
|
||||||
// thus the otherwise seemingly extraneous "cookies" map
|
// thus the otherwise seemingly extraneous "cookies" map
|
||||||
// The key of this map is a pointer to the corresponding &fCookie.cookie
|
// The key of this map is a pointer to the corresponding fCookie
|
||||||
cookies map[*interface{}]*fileObjCookie
|
cookies map[*fileObjCookie]struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// PortEvent is an abstraction of the port_event C struct.
|
// PortEvent is an abstraction of the port_event C struct.
|
||||||
|
@ -778,7 +779,7 @@ func NewEventPort() (*EventPort, error) {
|
||||||
port: port,
|
port: port,
|
||||||
fds: make(map[uintptr]*fileObjCookie),
|
fds: make(map[uintptr]*fileObjCookie),
|
||||||
paths: make(map[string]*fileObjCookie),
|
paths: make(map[string]*fileObjCookie),
|
||||||
cookies: make(map[*interface{}]*fileObjCookie),
|
cookies: make(map[*fileObjCookie]struct{}),
|
||||||
}
|
}
|
||||||
return e, nil
|
return e, nil
|
||||||
}
|
}
|
||||||
|
@ -799,6 +800,7 @@ func (e *EventPort) Close() error {
|
||||||
}
|
}
|
||||||
e.fds = nil
|
e.fds = nil
|
||||||
e.paths = nil
|
e.paths = nil
|
||||||
|
e.cookies = nil
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -826,17 +828,16 @@ func (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, coo
|
||||||
if _, found := e.paths[path]; found {
|
if _, found := e.paths[path]; found {
|
||||||
return fmt.Errorf("%v is already associated with this Event Port", path)
|
return fmt.Errorf("%v is already associated with this Event Port", path)
|
||||||
}
|
}
|
||||||
fobj, err := createFileObj(path, stat)
|
fCookie, err := createFileObjCookie(path, stat, cookie)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fCookie := &fileObjCookie{fobj, cookie}
|
_, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fCookie.fobj)), events, (*byte)(unsafe.Pointer(fCookie)))
|
||||||
_, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fobj)), events, (*byte)(unsafe.Pointer(&fCookie.cookie)))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
e.paths[path] = fCookie
|
e.paths[path] = fCookie
|
||||||
e.cookies[&fCookie.cookie] = fCookie
|
e.cookies[fCookie] = struct{}{}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -858,7 +859,7 @@ func (e *EventPort) DissociatePath(path string) error {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
// dissociate was successful, safe to delete the cookie
|
// dissociate was successful, safe to delete the cookie
|
||||||
fCookie := e.paths[path]
|
fCookie := e.paths[path]
|
||||||
delete(e.cookies, &fCookie.cookie)
|
delete(e.cookies, fCookie)
|
||||||
}
|
}
|
||||||
delete(e.paths, path)
|
delete(e.paths, path)
|
||||||
return err
|
return err
|
||||||
|
@ -871,13 +872,16 @@ func (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) erro
|
||||||
if _, found := e.fds[fd]; found {
|
if _, found := e.fds[fd]; found {
|
||||||
return fmt.Errorf("%v is already associated with this Event Port", fd)
|
return fmt.Errorf("%v is already associated with this Event Port", fd)
|
||||||
}
|
}
|
||||||
fCookie := &fileObjCookie{nil, cookie}
|
fCookie, err := createFileObjCookie("", nil, cookie)
|
||||||
_, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(&fCookie.cookie)))
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(fCookie)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
e.fds[fd] = fCookie
|
e.fds[fd] = fCookie
|
||||||
e.cookies[&fCookie.cookie] = fCookie
|
e.cookies[fCookie] = struct{}{}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -896,27 +900,31 @@ func (e *EventPort) DissociateFd(fd uintptr) error {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
// dissociate was successful, safe to delete the cookie
|
// dissociate was successful, safe to delete the cookie
|
||||||
fCookie := e.fds[fd]
|
fCookie := e.fds[fd]
|
||||||
delete(e.cookies, &fCookie.cookie)
|
delete(e.cookies, fCookie)
|
||||||
}
|
}
|
||||||
delete(e.fds, fd)
|
delete(e.fds, fd)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func createFileObj(name string, stat os.FileInfo) (*fileObj, error) {
|
func createFileObjCookie(name string, stat os.FileInfo, cookie interface{}) (*fileObjCookie, error) {
|
||||||
fobj := new(fileObj)
|
fCookie := new(fileObjCookie)
|
||||||
|
fCookie.cookie = cookie
|
||||||
|
if name != "" && stat != nil {
|
||||||
|
fCookie.fobj = new(fileObj)
|
||||||
bs, err := ByteSliceFromString(name)
|
bs, err := ByteSliceFromString(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
fobj.Name = (*int8)(unsafe.Pointer(&bs[0]))
|
fCookie.fobj.Name = (*int8)(unsafe.Pointer(&bs[0]))
|
||||||
s := stat.Sys().(*syscall.Stat_t)
|
s := stat.Sys().(*syscall.Stat_t)
|
||||||
fobj.Atim.Sec = s.Atim.Sec
|
fCookie.fobj.Atim.Sec = s.Atim.Sec
|
||||||
fobj.Atim.Nsec = s.Atim.Nsec
|
fCookie.fobj.Atim.Nsec = s.Atim.Nsec
|
||||||
fobj.Mtim.Sec = s.Mtim.Sec
|
fCookie.fobj.Mtim.Sec = s.Mtim.Sec
|
||||||
fobj.Mtim.Nsec = s.Mtim.Nsec
|
fCookie.fobj.Mtim.Nsec = s.Mtim.Nsec
|
||||||
fobj.Ctim.Sec = s.Ctim.Sec
|
fCookie.fobj.Ctim.Sec = s.Ctim.Sec
|
||||||
fobj.Ctim.Nsec = s.Ctim.Nsec
|
fCookie.fobj.Ctim.Nsec = s.Ctim.Nsec
|
||||||
return fobj, nil
|
}
|
||||||
|
return fCookie, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetOne wraps port_get(3c) and returns a single PortEvent.
|
// GetOne wraps port_get(3c) and returns a single PortEvent.
|
||||||
|
@ -929,44 +937,50 @@ func (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) {
|
||||||
p := new(PortEvent)
|
p := new(PortEvent)
|
||||||
e.mu.Lock()
|
e.mu.Lock()
|
||||||
defer e.mu.Unlock()
|
defer e.mu.Unlock()
|
||||||
e.peIntToExt(pe, p)
|
err = e.peIntToExt(pe, p)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// peIntToExt converts a cgo portEvent struct into the friendlier PortEvent
|
// peIntToExt converts a cgo portEvent struct into the friendlier PortEvent
|
||||||
// NOTE: Always call this function while holding the e.mu mutex
|
// NOTE: Always call this function while holding the e.mu mutex
|
||||||
func (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) {
|
func (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) error {
|
||||||
|
if e.cookies == nil {
|
||||||
|
return fmt.Errorf("this EventPort is already closed")
|
||||||
|
}
|
||||||
peExt.Events = peInt.Events
|
peExt.Events = peInt.Events
|
||||||
peExt.Source = peInt.Source
|
peExt.Source = peInt.Source
|
||||||
cookie := (*interface{})(unsafe.Pointer(peInt.User))
|
fCookie := (*fileObjCookie)(unsafe.Pointer(peInt.User))
|
||||||
peExt.Cookie = *cookie
|
_, found := e.cookies[fCookie]
|
||||||
|
|
||||||
|
if !found {
|
||||||
|
panic("unexpected event port address; may be due to kernel bug; see https://go.dev/issue/54254")
|
||||||
|
}
|
||||||
|
peExt.Cookie = fCookie.cookie
|
||||||
|
delete(e.cookies, fCookie)
|
||||||
|
|
||||||
switch peInt.Source {
|
switch peInt.Source {
|
||||||
case PORT_SOURCE_FD:
|
case PORT_SOURCE_FD:
|
||||||
delete(e.cookies, cookie)
|
|
||||||
peExt.Fd = uintptr(peInt.Object)
|
peExt.Fd = uintptr(peInt.Object)
|
||||||
// Only remove the fds entry if it exists and this cookie matches
|
// Only remove the fds entry if it exists and this cookie matches
|
||||||
if fobj, ok := e.fds[peExt.Fd]; ok {
|
if fobj, ok := e.fds[peExt.Fd]; ok {
|
||||||
if &fobj.cookie == cookie {
|
if fobj == fCookie {
|
||||||
delete(e.fds, peExt.Fd)
|
delete(e.fds, peExt.Fd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case PORT_SOURCE_FILE:
|
case PORT_SOURCE_FILE:
|
||||||
if fCookie, ok := e.cookies[cookie]; ok && uintptr(unsafe.Pointer(fCookie.fobj)) == uintptr(peInt.Object) {
|
|
||||||
// Use our stashed reference rather than using unsafe on what we got back
|
|
||||||
// the unsafe version would be (*fileObj)(unsafe.Pointer(uintptr(peInt.Object)))
|
|
||||||
peExt.fobj = fCookie.fobj
|
peExt.fobj = fCookie.fobj
|
||||||
} else {
|
|
||||||
panic("mismanaged memory")
|
|
||||||
}
|
|
||||||
delete(e.cookies, cookie)
|
|
||||||
peExt.Path = BytePtrToString((*byte)(unsafe.Pointer(peExt.fobj.Name)))
|
peExt.Path = BytePtrToString((*byte)(unsafe.Pointer(peExt.fobj.Name)))
|
||||||
// Only remove the paths entry if it exists and this cookie matches
|
// Only remove the paths entry if it exists and this cookie matches
|
||||||
if fobj, ok := e.paths[peExt.Path]; ok {
|
if fobj, ok := e.paths[peExt.Path]; ok {
|
||||||
if &fobj.cookie == cookie {
|
if fobj == fCookie {
|
||||||
delete(e.paths, peExt.Path)
|
delete(e.paths, peExt.Path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pending wraps port_getn(3c) and returns how many events are pending.
|
// Pending wraps port_getn(3c) and returns how many events are pending.
|
||||||
|
@ -990,7 +1004,7 @@ func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error)
|
||||||
got := uint32(min)
|
got := uint32(min)
|
||||||
max := uint32(len(s))
|
max := uint32(len(s))
|
||||||
var err error
|
var err error
|
||||||
ps := make([]portEvent, max, max)
|
ps := make([]portEvent, max)
|
||||||
_, err = port_getn(e.port, &ps[0], max, &got, timeout)
|
_, err = port_getn(e.port, &ps[0], max, &got, timeout)
|
||||||
// got will be trustworthy with ETIME, but not any other error.
|
// got will be trustworthy with ETIME, but not any other error.
|
||||||
if err != nil && err != ETIME {
|
if err != nil && err != ETIME {
|
||||||
|
@ -998,8 +1012,122 @@ func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error)
|
||||||
}
|
}
|
||||||
e.mu.Lock()
|
e.mu.Lock()
|
||||||
defer e.mu.Unlock()
|
defer e.mu.Unlock()
|
||||||
|
valid := 0
|
||||||
for i := 0; i < int(got); i++ {
|
for i := 0; i < int(got); i++ {
|
||||||
e.peIntToExt(&ps[i], &s[i])
|
err2 := e.peIntToExt(&ps[i], &s[i])
|
||||||
|
if err2 != nil {
|
||||||
|
if valid == 0 && err == nil {
|
||||||
|
// If err2 is the only error and there are no valid events
|
||||||
|
// to return, return it to the caller.
|
||||||
|
err = err2
|
||||||
}
|
}
|
||||||
return int(got), err
|
break
|
||||||
|
}
|
||||||
|
valid = i + 1
|
||||||
|
}
|
||||||
|
return valid, err
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error)
|
||||||
|
|
||||||
|
func Putmsg(fd int, cl []byte, data []byte, flags int) (err error) {
|
||||||
|
var clp, datap *strbuf
|
||||||
|
if len(cl) > 0 {
|
||||||
|
clp = &strbuf{
|
||||||
|
Len: int32(len(cl)),
|
||||||
|
Buf: (*int8)(unsafe.Pointer(&cl[0])),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(data) > 0 {
|
||||||
|
datap = &strbuf{
|
||||||
|
Len: int32(len(data)),
|
||||||
|
Buf: (*int8)(unsafe.Pointer(&data[0])),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return putmsg(fd, clp, datap, flags)
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys getmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error)
|
||||||
|
|
||||||
|
func Getmsg(fd int, cl []byte, data []byte) (retCl []byte, retData []byte, flags int, err error) {
|
||||||
|
var clp, datap *strbuf
|
||||||
|
if len(cl) > 0 {
|
||||||
|
clp = &strbuf{
|
||||||
|
Maxlen: int32(len(cl)),
|
||||||
|
Buf: (*int8)(unsafe.Pointer(&cl[0])),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(data) > 0 {
|
||||||
|
datap = &strbuf{
|
||||||
|
Maxlen: int32(len(data)),
|
||||||
|
Buf: (*int8)(unsafe.Pointer(&data[0])),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = getmsg(fd, clp, datap, &flags); err != nil {
|
||||||
|
return nil, nil, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(cl) > 0 {
|
||||||
|
retCl = cl[:clp.Len]
|
||||||
|
}
|
||||||
|
if len(data) > 0 {
|
||||||
|
retData = data[:datap.Len]
|
||||||
|
}
|
||||||
|
return retCl, retData, flags, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func IoctlSetIntRetInt(fd int, req uint, arg int) (int, error) {
|
||||||
|
return ioctlRet(fd, req, uintptr(arg))
|
||||||
|
}
|
||||||
|
|
||||||
|
func IoctlSetString(fd int, req uint, val string) error {
|
||||||
|
bs := make([]byte, len(val)+1)
|
||||||
|
copy(bs[:len(bs)-1], val)
|
||||||
|
err := ioctl(fd, req, uintptr(unsafe.Pointer(&bs[0])))
|
||||||
|
runtime.KeepAlive(&bs[0])
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lifreq Helpers
|
||||||
|
|
||||||
|
func (l *Lifreq) SetName(name string) error {
|
||||||
|
if len(name) >= len(l.Name) {
|
||||||
|
return fmt.Errorf("name cannot be more than %d characters", len(l.Name)-1)
|
||||||
|
}
|
||||||
|
for i := range name {
|
||||||
|
l.Name[i] = int8(name[i])
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Lifreq) SetLifruInt(d int) {
|
||||||
|
*(*int)(unsafe.Pointer(&l.Lifru[0])) = d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Lifreq) GetLifruInt() int {
|
||||||
|
return *(*int)(unsafe.Pointer(&l.Lifru[0]))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Lifreq) SetLifruUint(d uint) {
|
||||||
|
*(*uint)(unsafe.Pointer(&l.Lifru[0])) = d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Lifreq) GetLifruUint() uint {
|
||||||
|
return *(*uint)(unsafe.Pointer(&l.Lifru[0]))
|
||||||
|
}
|
||||||
|
|
||||||
|
func IoctlLifreq(fd int, req uint, l *Lifreq) error {
|
||||||
|
return ioctl(fd, req, uintptr(unsafe.Pointer(l)))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Strioctl Helpers
|
||||||
|
|
||||||
|
func (s *Strioctl) SetInt(i int) {
|
||||||
|
s.Len = int32(unsafe.Sizeof(i))
|
||||||
|
s.Dp = (*int8)(unsafe.Pointer(&i))
|
||||||
|
}
|
||||||
|
|
||||||
|
func IoctlSetStrioctlRetInt(fd int, req uint, s *Strioctl) (int, error) {
|
||||||
|
return ioctlRet(fd, req, uintptr(unsafe.Pointer(s)))
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,8 +13,6 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"golang.org/x/sys/internal/unsafeheader"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -117,11 +115,7 @@ func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (d
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use unsafe to convert addr into a []byte.
|
// Use unsafe to convert addr into a []byte.
|
||||||
var b []byte
|
b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), length)
|
||||||
hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b))
|
|
||||||
hdr.Data = unsafe.Pointer(addr)
|
|
||||||
hdr.Cap = length
|
|
||||||
hdr.Len = length
|
|
||||||
|
|
||||||
// Register mapping in m and return it.
|
// Register mapping in m and return it.
|
||||||
p := &b[cap(b)-1]
|
p := &b[cap(b)-1]
|
||||||
|
@ -337,6 +331,19 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Recvmsg receives a message from a socket using the recvmsg system call. The
|
||||||
|
// received non-control data will be written to p, and any "out of band"
|
||||||
|
// control data will be written to oob. The flags are passed to recvmsg.
|
||||||
|
//
|
||||||
|
// The results are:
|
||||||
|
// - n is the number of non-control data bytes read into p
|
||||||
|
// - oobn is the number of control data bytes read into oob; this may be interpreted using [ParseSocketControlMessage]
|
||||||
|
// - recvflags is flags returned by recvmsg
|
||||||
|
// - from is the address of the sender
|
||||||
|
//
|
||||||
|
// If the underlying socket type is not SOCK_DGRAM, a received message
|
||||||
|
// containing oob data and a single '\0' of non-control data is treated as if
|
||||||
|
// the message contained only control data, i.e. n will be zero on return.
|
||||||
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
|
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
|
||||||
var iov [1]Iovec
|
var iov [1]Iovec
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
|
@ -352,13 +359,9 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// RecvmsgBuffers receives a message from a socket using the recvmsg
|
// RecvmsgBuffers receives a message from a socket using the recvmsg system
|
||||||
// system call. The flags are passed to recvmsg. Any non-control data
|
// call. This function is equivalent to Recvmsg, but non-control data read is
|
||||||
// read is scattered into the buffers slices. The results are:
|
// scattered into the buffers slices.
|
||||||
// - n is the number of non-control data read into bufs
|
|
||||||
// - oobn is the number of control data read into oob; this may be interpreted using [ParseSocketControlMessage]
|
|
||||||
// - recvflags is flags returned by recvmsg
|
|
||||||
// - from is the address of the sender
|
|
||||||
func RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
|
func RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
|
||||||
iov := make([]Iovec, len(buffers))
|
iov := make([]Iovec, len(buffers))
|
||||||
for i := range buffers {
|
for i := range buffers {
|
||||||
|
@ -377,11 +380,38 @@ func RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn in
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sendmsg sends a message on a socket to an address using the sendmsg system
|
||||||
|
// call. This function is equivalent to SendmsgN, but does not return the
|
||||||
|
// number of bytes actually sent.
|
||||||
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
|
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
|
||||||
_, err = SendmsgN(fd, p, oob, to, flags)
|
_, err = SendmsgN(fd, p, oob, to, flags)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SendmsgN sends a message on a socket to an address using the sendmsg system
|
||||||
|
// call. p contains the non-control data to send, and oob contains the "out of
|
||||||
|
// band" control data. The flags are passed to sendmsg. The number of
|
||||||
|
// non-control bytes actually written to the socket is returned.
|
||||||
|
//
|
||||||
|
// Some socket types do not support sending control data without accompanying
|
||||||
|
// non-control data. If p is empty, and oob contains control data, and the
|
||||||
|
// underlying socket type is not SOCK_DGRAM, p will be treated as containing a
|
||||||
|
// single '\0' and the return value will indicate zero bytes sent.
|
||||||
|
//
|
||||||
|
// The Go function Recvmsg, if called with an empty p and a non-empty oob,
|
||||||
|
// will read and ignore this additional '\0'. If the message is received by
|
||||||
|
// code that does not use Recvmsg, or that does not use Go at all, that code
|
||||||
|
// will need to be written to expect and ignore the additional '\0'.
|
||||||
|
//
|
||||||
|
// If you need to send non-empty oob with p actually empty, and if the
|
||||||
|
// underlying socket type supports it, you can do so via a raw system call as
|
||||||
|
// follows:
|
||||||
|
//
|
||||||
|
// msg := &unix.Msghdr{
|
||||||
|
// Control: &oob[0],
|
||||||
|
// }
|
||||||
|
// msg.SetControllen(len(oob))
|
||||||
|
// n, _, errno := unix.Syscall(unix.SYS_SENDMSG, uintptr(fd), uintptr(unsafe.Pointer(msg)), flags)
|
||||||
func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
|
func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
|
||||||
var iov [1]Iovec
|
var iov [1]Iovec
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
|
@ -400,9 +430,8 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendmsgBuffers sends a message on a socket to an address using the sendmsg
|
// SendmsgBuffers sends a message on a socket to an address using the sendmsg
|
||||||
// system call. The flags are passed to sendmsg. Any non-control data written
|
// system call. This function is equivalent to SendmsgN, but the non-control
|
||||||
// is gathered from buffers. The function returns the number of bytes written
|
// data is gathered from buffers.
|
||||||
// to the socket.
|
|
||||||
func SendmsgBuffers(fd int, buffers [][]byte, oob []byte, to Sockaddr, flags int) (n int, err error) {
|
func SendmsgBuffers(fd int, buffers [][]byte, oob []byte, to Sockaddr, flags int) (n int, err error) {
|
||||||
iov := make([]Iovec, len(buffers))
|
iov := make([]Iovec, len(buffers))
|
||||||
for i := range buffers {
|
for i := range buffers {
|
||||||
|
@ -429,11 +458,15 @@ func Send(s int, buf []byte, flags int) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) {
|
func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) {
|
||||||
ptr, n, err := to.sockaddr()
|
var ptr unsafe.Pointer
|
||||||
|
var salen _Socklen
|
||||||
|
if to != nil {
|
||||||
|
ptr, salen, err = to.sockaddr()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return sendto(fd, p, flags, ptr, n)
|
}
|
||||||
|
return sendto(fd, p, flags, ptr, salen)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SetsockoptByte(fd, level, opt int, value byte) (err error) {
|
func SetsockoptByte(fd, level, opt int, value byte) (err error) {
|
||||||
|
@ -545,7 +578,7 @@ func Lutimes(path string, tv []Timeval) error {
|
||||||
return UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW)
|
return UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW)
|
||||||
}
|
}
|
||||||
|
|
||||||
// emptyIovec reports whether there are no bytes in the slice of Iovec.
|
// emptyIovecs reports whether there are no bytes in the slice of Iovec.
|
||||||
func emptyIovecs(iov []Iovec) bool {
|
func emptyIovecs(iov []Iovec) bool {
|
||||||
for i := range iov {
|
for i := range iov {
|
||||||
if iov[i].Len > 0 {
|
if iov[i].Len > 0 {
|
||||||
|
|
|
@ -2,11 +2,9 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build (darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris) && gc && !ppc64le && !ppc64
|
//go:build (darwin || dragonfly || freebsd || (linux && !ppc64 && !ppc64le) || netbsd || openbsd || solaris) && gc
|
||||||
// +build darwin dragonfly freebsd linux netbsd openbsd solaris
|
// +build darwin dragonfly freebsd linux,!ppc64,!ppc64le netbsd openbsd solaris
|
||||||
// +build gc
|
// +build gc
|
||||||
// +build !ppc64le
|
|
||||||
// +build !ppc64
|
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,10 @@ package unix
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"runtime"
|
"runtime"
|
||||||
"sort"
|
"sort"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
@ -55,7 +57,13 @@ func (d *Dirent) NameString() string {
|
||||||
if d == nil {
|
if d == nil {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
return string(d.Name[:d.Namlen])
|
s := string(d.Name[:])
|
||||||
|
idx := strings.IndexByte(s, 0)
|
||||||
|
if idx == -1 {
|
||||||
|
return s
|
||||||
|
} else {
|
||||||
|
return s[:idx]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
||||||
|
@ -1230,6 +1238,14 @@ func Readdir(dir uintptr) (*Dirent, error) {
|
||||||
return &ent, err
|
return &ent, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func readdir_r(dirp uintptr, entry *direntLE, result **direntLE) (err error) {
|
||||||
|
r0, _, e1 := syscall_syscall(SYS___READDIR_R_A, dirp, uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
|
||||||
|
if int64(r0) == -1 {
|
||||||
|
err = errnoErr(Errno(e1))
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func Closedir(dir uintptr) error {
|
func Closedir(dir uintptr) error {
|
||||||
_, _, e := syscall_syscall(SYS_CLOSEDIR, dir, 0, 0)
|
_, _, e := syscall_syscall(SYS_CLOSEDIR, dir, 0, 0)
|
||||||
if e != 0 {
|
if e != 0 {
|
||||||
|
@ -1821,3 +1837,158 @@ func Unmount(name string, mtm int) (err error) {
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func fdToPath(dirfd int) (path string, err error) {
|
||||||
|
var buffer [1024]byte
|
||||||
|
// w_ctrl()
|
||||||
|
ret := runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS_W_IOCTL<<4,
|
||||||
|
[]uintptr{uintptr(dirfd), 17, 1024, uintptr(unsafe.Pointer(&buffer[0]))})
|
||||||
|
if ret == 0 {
|
||||||
|
zb := bytes.IndexByte(buffer[:], 0)
|
||||||
|
if zb == -1 {
|
||||||
|
zb = len(buffer)
|
||||||
|
}
|
||||||
|
// __e2a_l()
|
||||||
|
runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___E2A_L<<4,
|
||||||
|
[]uintptr{uintptr(unsafe.Pointer(&buffer[0])), uintptr(zb)})
|
||||||
|
return string(buffer[:zb]), nil
|
||||||
|
}
|
||||||
|
// __errno()
|
||||||
|
errno := int(*(*int32)(unsafe.Pointer(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO<<4,
|
||||||
|
[]uintptr{}))))
|
||||||
|
// __errno2()
|
||||||
|
errno2 := int(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO2<<4,
|
||||||
|
[]uintptr{}))
|
||||||
|
// strerror_r()
|
||||||
|
ret = runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS_STRERROR_R<<4,
|
||||||
|
[]uintptr{uintptr(errno), uintptr(unsafe.Pointer(&buffer[0])), 1024})
|
||||||
|
if ret == 0 {
|
||||||
|
zb := bytes.IndexByte(buffer[:], 0)
|
||||||
|
if zb == -1 {
|
||||||
|
zb = len(buffer)
|
||||||
|
}
|
||||||
|
return "", fmt.Errorf("%s (errno2=0x%x)", buffer[:zb], errno2)
|
||||||
|
} else {
|
||||||
|
return "", fmt.Errorf("fdToPath errno %d (errno2=0x%x)", errno, errno2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func direntLeToDirentUnix(dirent *direntLE, dir uintptr, path string) (Dirent, error) {
|
||||||
|
var d Dirent
|
||||||
|
|
||||||
|
d.Ino = uint64(dirent.Ino)
|
||||||
|
offset, err := Telldir(dir)
|
||||||
|
if err != nil {
|
||||||
|
return d, err
|
||||||
|
}
|
||||||
|
|
||||||
|
d.Off = int64(offset)
|
||||||
|
s := string(bytes.Split(dirent.Name[:], []byte{0})[0])
|
||||||
|
copy(d.Name[:], s)
|
||||||
|
|
||||||
|
d.Reclen = uint16(24 + len(d.NameString()))
|
||||||
|
var st Stat_t
|
||||||
|
path = path + "/" + s
|
||||||
|
err = Lstat(path, &st)
|
||||||
|
if err != nil {
|
||||||
|
return d, err
|
||||||
|
}
|
||||||
|
|
||||||
|
d.Type = uint8(st.Mode >> 24)
|
||||||
|
return d, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
||||||
|
// Simulation of Getdirentries port from the Darwin implementation.
|
||||||
|
// COMMENTS FROM DARWIN:
|
||||||
|
// It's not the full required semantics, but should handle the case
|
||||||
|
// of calling Getdirentries or ReadDirent repeatedly.
|
||||||
|
// It won't handle assigning the results of lseek to *basep, or handle
|
||||||
|
// the directory being edited underfoot.
|
||||||
|
|
||||||
|
skip, err := Seek(fd, 0, 1 /* SEEK_CUR */)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get path from fd to avoid unavailable call (fdopendir)
|
||||||
|
path, err := fdToPath(fd)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
d, err := Opendir(path)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
defer Closedir(d)
|
||||||
|
|
||||||
|
var cnt int64
|
||||||
|
for {
|
||||||
|
var entryLE direntLE
|
||||||
|
var entrypLE *direntLE
|
||||||
|
e := readdir_r(d, &entryLE, &entrypLE)
|
||||||
|
if e != nil {
|
||||||
|
return n, e
|
||||||
|
}
|
||||||
|
if entrypLE == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if skip > 0 {
|
||||||
|
skip--
|
||||||
|
cnt++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dirent on zos has a different structure
|
||||||
|
entry, e := direntLeToDirentUnix(&entryLE, d, path)
|
||||||
|
if e != nil {
|
||||||
|
return n, e
|
||||||
|
}
|
||||||
|
|
||||||
|
reclen := int(entry.Reclen)
|
||||||
|
if reclen > len(buf) {
|
||||||
|
// Not enough room. Return for now.
|
||||||
|
// The counter will let us know where we should start up again.
|
||||||
|
// Note: this strategy for suspending in the middle and
|
||||||
|
// restarting is O(n^2) in the length of the directory. Oh well.
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy entry into return buffer.
|
||||||
|
s := unsafe.Slice((*byte)(unsafe.Pointer(&entry)), reclen)
|
||||||
|
copy(buf, s)
|
||||||
|
|
||||||
|
buf = buf[reclen:]
|
||||||
|
n += reclen
|
||||||
|
cnt++
|
||||||
|
}
|
||||||
|
// Set the seek offset of the input fd to record
|
||||||
|
// how many files we've already returned.
|
||||||
|
_, err = Seek(fd, cnt, 0 /* SEEK_SET */)
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReadDirent(fd int, buf []byte) (n int, err error) {
|
||||||
|
var base = (*uintptr)(unsafe.Pointer(new(uint64)))
|
||||||
|
return Getdirentries(fd, buf, base)
|
||||||
|
}
|
||||||
|
|
||||||
|
func direntIno(buf []byte) (uint64, bool) {
|
||||||
|
return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
|
||||||
|
}
|
||||||
|
|
||||||
|
func direntReclen(buf []byte) (uint64, bool) {
|
||||||
|
return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
|
||||||
|
}
|
||||||
|
|
||||||
|
func direntNamlen(buf []byte) (uint64, bool) {
|
||||||
|
reclen, ok := direntReclen(buf)
|
||||||
|
if !ok {
|
||||||
|
return 0, false
|
||||||
|
}
|
||||||
|
return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
|
||||||
|
}
|
||||||
|
|
|
@ -7,11 +7,7 @@
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
import (
|
import "unsafe"
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"golang.org/x/sys/internal/unsafeheader"
|
|
||||||
)
|
|
||||||
|
|
||||||
// SysvShmAttach attaches the Sysv shared memory segment associated with the
|
// SysvShmAttach attaches the Sysv shared memory segment associated with the
|
||||||
// shared memory identifier id.
|
// shared memory identifier id.
|
||||||
|
@ -34,12 +30,7 @@ func SysvShmAttach(id int, addr uintptr, flag int) ([]byte, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use unsafe to convert addr into a []byte.
|
// Use unsafe to convert addr into a []byte.
|
||||||
// TODO: convert to unsafe.Slice once we can assume Go 1.17
|
b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), int(info.Segsz))
|
||||||
var b []byte
|
|
||||||
hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b))
|
|
||||||
hdr.Data = unsafe.Pointer(addr)
|
|
||||||
hdr.Cap = int(info.Segsz)
|
|
||||||
hdr.Len = int(info.Segsz)
|
|
||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ package unix
|
||||||
|
|
||||||
import "time"
|
import "time"
|
||||||
|
|
||||||
// TimespecToNSec returns the time stored in ts as nanoseconds.
|
// TimespecToNsec returns the time stored in ts as nanoseconds.
|
||||||
func TimespecToNsec(ts Timespec) int64 { return ts.Nano() }
|
func TimespecToNsec(ts Timespec) int64 { return ts.Nano() }
|
||||||
|
|
||||||
// NsecToTimespec converts a number of nanoseconds into a Timespec.
|
// NsecToTimespec converts a number of nanoseconds into a Timespec.
|
||||||
|
|
|
@ -36,9 +36,14 @@ func xattrnamespace(fullattr string) (ns int, attr string, err error) {
|
||||||
func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {
|
func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {
|
||||||
if len(dest) > idx {
|
if len(dest) > idx {
|
||||||
return unsafe.Pointer(&dest[idx])
|
return unsafe.Pointer(&dest[idx])
|
||||||
} else {
|
|
||||||
return unsafe.Pointer(_zero)
|
|
||||||
}
|
}
|
||||||
|
if dest != nil {
|
||||||
|
// extattr_get_file and extattr_list_file treat NULL differently from
|
||||||
|
// a non-NULL pointer of length zero. Preserve the property of nilness,
|
||||||
|
// even if we can't use dest directly.
|
||||||
|
return unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// FreeBSD and NetBSD implement their own syscalls to handle extended attributes
|
// FreeBSD and NetBSD implement their own syscalls to handle extended attributes
|
||||||
|
@ -160,13 +165,12 @@ func Lremovexattr(link string, attr string) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Listxattr(file string, dest []byte) (sz int, err error) {
|
func Listxattr(file string, dest []byte) (sz int, err error) {
|
||||||
d := initxattrdest(dest, 0)
|
|
||||||
destsiz := len(dest)
|
destsiz := len(dest)
|
||||||
|
|
||||||
// FreeBSD won't allow you to list xattrs from multiple namespaces
|
// FreeBSD won't allow you to list xattrs from multiple namespaces
|
||||||
s := 0
|
s, pos := 0, 0
|
||||||
for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
|
for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
|
||||||
stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
|
stmp, e := ListxattrNS(file, nsid, dest[pos:])
|
||||||
|
|
||||||
/* Errors accessing system attrs are ignored so that
|
/* Errors accessing system attrs are ignored so that
|
||||||
* we can implement the Linux-like behavior of omitting errors that
|
* we can implement the Linux-like behavior of omitting errors that
|
||||||
|
@ -175,66 +179,102 @@ func Listxattr(file string, dest []byte) (sz int, err error) {
|
||||||
* Linux will still error if we ask for user attributes on a file that
|
* Linux will still error if we ask for user attributes on a file that
|
||||||
* we don't have read permissions on, so don't ignore those errors
|
* we don't have read permissions on, so don't ignore those errors
|
||||||
*/
|
*/
|
||||||
if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
|
if e != nil {
|
||||||
|
if e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
|
||||||
continue
|
continue
|
||||||
} else if e != nil {
|
}
|
||||||
return s, e
|
return s, e
|
||||||
}
|
}
|
||||||
|
|
||||||
s += stmp
|
s += stmp
|
||||||
destsiz -= s
|
pos = s
|
||||||
if destsiz < 0 {
|
if pos > destsiz {
|
||||||
destsiz = 0
|
pos = destsiz
|
||||||
}
|
}
|
||||||
d = initxattrdest(dest, s)
|
}
|
||||||
|
|
||||||
|
return s, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ListxattrNS(file string, nsid int, dest []byte) (sz int, err error) {
|
||||||
|
d := initxattrdest(dest, 0)
|
||||||
|
destsiz := len(dest)
|
||||||
|
|
||||||
|
s, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
|
||||||
|
if e != nil {
|
||||||
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return s, nil
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Flistxattr(fd int, dest []byte) (sz int, err error) {
|
func Flistxattr(fd int, dest []byte) (sz int, err error) {
|
||||||
d := initxattrdest(dest, 0)
|
|
||||||
destsiz := len(dest)
|
destsiz := len(dest)
|
||||||
|
|
||||||
s := 0
|
s, pos := 0, 0
|
||||||
for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
|
for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
|
||||||
stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
|
stmp, e := FlistxattrNS(fd, nsid, dest[pos:])
|
||||||
if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
|
|
||||||
|
if e != nil {
|
||||||
|
if e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
|
||||||
continue
|
continue
|
||||||
} else if e != nil {
|
}
|
||||||
return s, e
|
return s, e
|
||||||
}
|
}
|
||||||
|
|
||||||
s += stmp
|
s += stmp
|
||||||
destsiz -= s
|
pos = s
|
||||||
if destsiz < 0 {
|
if pos > destsiz {
|
||||||
destsiz = 0
|
pos = destsiz
|
||||||
}
|
}
|
||||||
d = initxattrdest(dest, s)
|
}
|
||||||
|
|
||||||
|
return s, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func FlistxattrNS(fd int, nsid int, dest []byte) (sz int, err error) {
|
||||||
|
d := initxattrdest(dest, 0)
|
||||||
|
destsiz := len(dest)
|
||||||
|
|
||||||
|
s, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
|
||||||
|
if e != nil {
|
||||||
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return s, nil
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Llistxattr(link string, dest []byte) (sz int, err error) {
|
func Llistxattr(link string, dest []byte) (sz int, err error) {
|
||||||
d := initxattrdest(dest, 0)
|
|
||||||
destsiz := len(dest)
|
destsiz := len(dest)
|
||||||
|
|
||||||
s := 0
|
s, pos := 0, 0
|
||||||
for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
|
for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
|
||||||
stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
|
stmp, e := LlistxattrNS(link, nsid, dest[pos:])
|
||||||
if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
|
|
||||||
|
if e != nil {
|
||||||
|
if e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
|
||||||
continue
|
continue
|
||||||
} else if e != nil {
|
}
|
||||||
return s, e
|
return s, e
|
||||||
}
|
}
|
||||||
|
|
||||||
s += stmp
|
s += stmp
|
||||||
destsiz -= s
|
pos = s
|
||||||
if destsiz < 0 {
|
if pos > destsiz {
|
||||||
destsiz = 0
|
pos = destsiz
|
||||||
}
|
}
|
||||||
d = initxattrdest(dest, s)
|
}
|
||||||
|
|
||||||
|
return s, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func LlistxattrNS(link string, nsid int, dest []byte) (sz int, err error) {
|
||||||
|
d := initxattrdest(dest, 0)
|
||||||
|
destsiz := len(dest)
|
||||||
|
|
||||||
|
s, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
|
||||||
|
if e != nil {
|
||||||
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return s, nil
|
return s, nil
|
||||||
|
|
|
@ -457,7 +457,6 @@ const (
|
||||||
B600 = 0x8
|
B600 = 0x8
|
||||||
B75 = 0x2
|
B75 = 0x2
|
||||||
B9600 = 0xd
|
B9600 = 0xd
|
||||||
BALLOON_KVM_MAGIC = 0x13661366
|
|
||||||
BDEVFS_MAGIC = 0x62646576
|
BDEVFS_MAGIC = 0x62646576
|
||||||
BINDERFS_SUPER_MAGIC = 0x6c6f6f70
|
BINDERFS_SUPER_MAGIC = 0x6c6f6f70
|
||||||
BINFMTFS_MAGIC = 0x42494e4d
|
BINFMTFS_MAGIC = 0x42494e4d
|
||||||
|
@ -563,6 +562,7 @@ const (
|
||||||
BUS_USB = 0x3
|
BUS_USB = 0x3
|
||||||
BUS_VIRTUAL = 0x6
|
BUS_VIRTUAL = 0x6
|
||||||
CAN_BCM = 0x2
|
CAN_BCM = 0x2
|
||||||
|
CAN_BUS_OFF_THRESHOLD = 0x100
|
||||||
CAN_CTRLMODE_3_SAMPLES = 0x4
|
CAN_CTRLMODE_3_SAMPLES = 0x4
|
||||||
CAN_CTRLMODE_BERR_REPORTING = 0x10
|
CAN_CTRLMODE_BERR_REPORTING = 0x10
|
||||||
CAN_CTRLMODE_CC_LEN8_DLC = 0x100
|
CAN_CTRLMODE_CC_LEN8_DLC = 0x100
|
||||||
|
@ -577,9 +577,12 @@ const (
|
||||||
CAN_EFF_FLAG = 0x80000000
|
CAN_EFF_FLAG = 0x80000000
|
||||||
CAN_EFF_ID_BITS = 0x1d
|
CAN_EFF_ID_BITS = 0x1d
|
||||||
CAN_EFF_MASK = 0x1fffffff
|
CAN_EFF_MASK = 0x1fffffff
|
||||||
|
CAN_ERROR_PASSIVE_THRESHOLD = 0x80
|
||||||
|
CAN_ERROR_WARNING_THRESHOLD = 0x60
|
||||||
CAN_ERR_ACK = 0x20
|
CAN_ERR_ACK = 0x20
|
||||||
CAN_ERR_BUSERROR = 0x80
|
CAN_ERR_BUSERROR = 0x80
|
||||||
CAN_ERR_BUSOFF = 0x40
|
CAN_ERR_BUSOFF = 0x40
|
||||||
|
CAN_ERR_CNT = 0x200
|
||||||
CAN_ERR_CRTL = 0x4
|
CAN_ERR_CRTL = 0x4
|
||||||
CAN_ERR_CRTL_ACTIVE = 0x40
|
CAN_ERR_CRTL_ACTIVE = 0x40
|
||||||
CAN_ERR_CRTL_RX_OVERFLOW = 0x1
|
CAN_ERR_CRTL_RX_OVERFLOW = 0x1
|
||||||
|
@ -820,9 +823,9 @@ const (
|
||||||
DM_UUID_FLAG = 0x4000
|
DM_UUID_FLAG = 0x4000
|
||||||
DM_UUID_LEN = 0x81
|
DM_UUID_LEN = 0x81
|
||||||
DM_VERSION = 0xc138fd00
|
DM_VERSION = 0xc138fd00
|
||||||
DM_VERSION_EXTRA = "-ioctl (2022-02-22)"
|
DM_VERSION_EXTRA = "-ioctl (2022-07-28)"
|
||||||
DM_VERSION_MAJOR = 0x4
|
DM_VERSION_MAJOR = 0x4
|
||||||
DM_VERSION_MINOR = 0x2e
|
DM_VERSION_MINOR = 0x2f
|
||||||
DM_VERSION_PATCHLEVEL = 0x0
|
DM_VERSION_PATCHLEVEL = 0x0
|
||||||
DT_BLK = 0x6
|
DT_BLK = 0x6
|
||||||
DT_CHR = 0x2
|
DT_CHR = 0x2
|
||||||
|
@ -1049,6 +1052,7 @@ const (
|
||||||
ETH_P_CAIF = 0xf7
|
ETH_P_CAIF = 0xf7
|
||||||
ETH_P_CAN = 0xc
|
ETH_P_CAN = 0xc
|
||||||
ETH_P_CANFD = 0xd
|
ETH_P_CANFD = 0xd
|
||||||
|
ETH_P_CANXL = 0xe
|
||||||
ETH_P_CFM = 0x8902
|
ETH_P_CFM = 0x8902
|
||||||
ETH_P_CONTROL = 0x16
|
ETH_P_CONTROL = 0x16
|
||||||
ETH_P_CUST = 0x6006
|
ETH_P_CUST = 0x6006
|
||||||
|
@ -1060,6 +1064,7 @@ const (
|
||||||
ETH_P_DNA_RT = 0x6003
|
ETH_P_DNA_RT = 0x6003
|
||||||
ETH_P_DSA = 0x1b
|
ETH_P_DSA = 0x1b
|
||||||
ETH_P_DSA_8021Q = 0xdadb
|
ETH_P_DSA_8021Q = 0xdadb
|
||||||
|
ETH_P_DSA_A5PSW = 0xe001
|
||||||
ETH_P_ECONET = 0x18
|
ETH_P_ECONET = 0x18
|
||||||
ETH_P_EDSA = 0xdada
|
ETH_P_EDSA = 0xdada
|
||||||
ETH_P_ERSPAN = 0x88be
|
ETH_P_ERSPAN = 0x88be
|
||||||
|
@ -1194,8 +1199,10 @@ const (
|
||||||
FAN_MARK_EVICTABLE = 0x200
|
FAN_MARK_EVICTABLE = 0x200
|
||||||
FAN_MARK_FILESYSTEM = 0x100
|
FAN_MARK_FILESYSTEM = 0x100
|
||||||
FAN_MARK_FLUSH = 0x80
|
FAN_MARK_FLUSH = 0x80
|
||||||
|
FAN_MARK_IGNORE = 0x400
|
||||||
FAN_MARK_IGNORED_MASK = 0x20
|
FAN_MARK_IGNORED_MASK = 0x20
|
||||||
FAN_MARK_IGNORED_SURV_MODIFY = 0x40
|
FAN_MARK_IGNORED_SURV_MODIFY = 0x40
|
||||||
|
FAN_MARK_IGNORE_SURV = 0x440
|
||||||
FAN_MARK_INODE = 0x0
|
FAN_MARK_INODE = 0x0
|
||||||
FAN_MARK_MOUNT = 0x10
|
FAN_MARK_MOUNT = 0x10
|
||||||
FAN_MARK_ONLYDIR = 0x8
|
FAN_MARK_ONLYDIR = 0x8
|
||||||
|
@ -1253,6 +1260,7 @@ const (
|
||||||
FSCRYPT_MODE_AES_128_CBC = 0x5
|
FSCRYPT_MODE_AES_128_CBC = 0x5
|
||||||
FSCRYPT_MODE_AES_128_CTS = 0x6
|
FSCRYPT_MODE_AES_128_CTS = 0x6
|
||||||
FSCRYPT_MODE_AES_256_CTS = 0x4
|
FSCRYPT_MODE_AES_256_CTS = 0x4
|
||||||
|
FSCRYPT_MODE_AES_256_HCTR2 = 0xa
|
||||||
FSCRYPT_MODE_AES_256_XTS = 0x1
|
FSCRYPT_MODE_AES_256_XTS = 0x1
|
||||||
FSCRYPT_POLICY_FLAGS_PAD_16 = 0x2
|
FSCRYPT_POLICY_FLAGS_PAD_16 = 0x2
|
||||||
FSCRYPT_POLICY_FLAGS_PAD_32 = 0x3
|
FSCRYPT_POLICY_FLAGS_PAD_32 = 0x3
|
||||||
|
@ -1430,6 +1438,7 @@ const (
|
||||||
IFF_NOARP = 0x80
|
IFF_NOARP = 0x80
|
||||||
IFF_NOFILTER = 0x1000
|
IFF_NOFILTER = 0x1000
|
||||||
IFF_NOTRAILERS = 0x20
|
IFF_NOTRAILERS = 0x20
|
||||||
|
IFF_NO_CARRIER = 0x40
|
||||||
IFF_NO_PI = 0x1000
|
IFF_NO_PI = 0x1000
|
||||||
IFF_ONE_QUEUE = 0x2000
|
IFF_ONE_QUEUE = 0x2000
|
||||||
IFF_PERSIST = 0x800
|
IFF_PERSIST = 0x800
|
||||||
|
@ -1805,6 +1814,7 @@ const (
|
||||||
MADV_DONTDUMP = 0x10
|
MADV_DONTDUMP = 0x10
|
||||||
MADV_DONTFORK = 0xa
|
MADV_DONTFORK = 0xa
|
||||||
MADV_DONTNEED = 0x4
|
MADV_DONTNEED = 0x4
|
||||||
|
MADV_DONTNEED_LOCKED = 0x18
|
||||||
MADV_FREE = 0x8
|
MADV_FREE = 0x8
|
||||||
MADV_HUGEPAGE = 0xe
|
MADV_HUGEPAGE = 0xe
|
||||||
MADV_HWPOISON = 0x64
|
MADV_HWPOISON = 0x64
|
||||||
|
@ -1846,7 +1856,7 @@ const (
|
||||||
MFD_ALLOW_SEALING = 0x2
|
MFD_ALLOW_SEALING = 0x2
|
||||||
MFD_CLOEXEC = 0x1
|
MFD_CLOEXEC = 0x1
|
||||||
MFD_HUGETLB = 0x4
|
MFD_HUGETLB = 0x4
|
||||||
MFD_HUGE_16GB = -0x78000000
|
MFD_HUGE_16GB = 0x88000000
|
||||||
MFD_HUGE_16MB = 0x60000000
|
MFD_HUGE_16MB = 0x60000000
|
||||||
MFD_HUGE_1GB = 0x78000000
|
MFD_HUGE_1GB = 0x78000000
|
||||||
MFD_HUGE_1MB = 0x50000000
|
MFD_HUGE_1MB = 0x50000000
|
||||||
|
@ -2212,6 +2222,11 @@ const (
|
||||||
PERF_AUX_FLAG_PARTIAL = 0x4
|
PERF_AUX_FLAG_PARTIAL = 0x4
|
||||||
PERF_AUX_FLAG_PMU_FORMAT_TYPE_MASK = 0xff00
|
PERF_AUX_FLAG_PMU_FORMAT_TYPE_MASK = 0xff00
|
||||||
PERF_AUX_FLAG_TRUNCATED = 0x1
|
PERF_AUX_FLAG_TRUNCATED = 0x1
|
||||||
|
PERF_BR_ARM64_DEBUG_DATA = 0x7
|
||||||
|
PERF_BR_ARM64_DEBUG_EXIT = 0x5
|
||||||
|
PERF_BR_ARM64_DEBUG_HALT = 0x4
|
||||||
|
PERF_BR_ARM64_DEBUG_INST = 0x6
|
||||||
|
PERF_BR_ARM64_FIQ = 0x3
|
||||||
PERF_FLAG_FD_CLOEXEC = 0x8
|
PERF_FLAG_FD_CLOEXEC = 0x8
|
||||||
PERF_FLAG_FD_NO_GROUP = 0x1
|
PERF_FLAG_FD_NO_GROUP = 0x1
|
||||||
PERF_FLAG_FD_OUTPUT = 0x2
|
PERF_FLAG_FD_OUTPUT = 0x2
|
||||||
|
@ -2232,6 +2247,8 @@ const (
|
||||||
PERF_MEM_LOCK_NA = 0x1
|
PERF_MEM_LOCK_NA = 0x1
|
||||||
PERF_MEM_LOCK_SHIFT = 0x18
|
PERF_MEM_LOCK_SHIFT = 0x18
|
||||||
PERF_MEM_LVLNUM_ANY_CACHE = 0xb
|
PERF_MEM_LVLNUM_ANY_CACHE = 0xb
|
||||||
|
PERF_MEM_LVLNUM_CXL = 0x9
|
||||||
|
PERF_MEM_LVLNUM_IO = 0xa
|
||||||
PERF_MEM_LVLNUM_L1 = 0x1
|
PERF_MEM_LVLNUM_L1 = 0x1
|
||||||
PERF_MEM_LVLNUM_L2 = 0x2
|
PERF_MEM_LVLNUM_L2 = 0x2
|
||||||
PERF_MEM_LVLNUM_L3 = 0x3
|
PERF_MEM_LVLNUM_L3 = 0x3
|
||||||
|
@ -2265,6 +2282,7 @@ const (
|
||||||
PERF_MEM_REMOTE_REMOTE = 0x1
|
PERF_MEM_REMOTE_REMOTE = 0x1
|
||||||
PERF_MEM_REMOTE_SHIFT = 0x25
|
PERF_MEM_REMOTE_SHIFT = 0x25
|
||||||
PERF_MEM_SNOOPX_FWD = 0x1
|
PERF_MEM_SNOOPX_FWD = 0x1
|
||||||
|
PERF_MEM_SNOOPX_PEER = 0x2
|
||||||
PERF_MEM_SNOOPX_SHIFT = 0x26
|
PERF_MEM_SNOOPX_SHIFT = 0x26
|
||||||
PERF_MEM_SNOOP_HIT = 0x4
|
PERF_MEM_SNOOP_HIT = 0x4
|
||||||
PERF_MEM_SNOOP_HITM = 0x10
|
PERF_MEM_SNOOP_HITM = 0x10
|
||||||
|
@ -2301,7 +2319,6 @@ const (
|
||||||
PERF_SAMPLE_BRANCH_PLM_ALL = 0x7
|
PERF_SAMPLE_BRANCH_PLM_ALL = 0x7
|
||||||
PERF_SAMPLE_WEIGHT_TYPE = 0x1004000
|
PERF_SAMPLE_WEIGHT_TYPE = 0x1004000
|
||||||
PIPEFS_MAGIC = 0x50495045
|
PIPEFS_MAGIC = 0x50495045
|
||||||
PPC_CMM_MAGIC = 0xc7571590
|
|
||||||
PPPIOCGNPMODE = 0xc008744c
|
PPPIOCGNPMODE = 0xc008744c
|
||||||
PPPIOCNEWUNIT = 0xc004743e
|
PPPIOCNEWUNIT = 0xc004743e
|
||||||
PRIO_PGRP = 0x1
|
PRIO_PGRP = 0x1
|
||||||
|
@ -2999,6 +3016,7 @@ const (
|
||||||
STATX_BLOCKS = 0x400
|
STATX_BLOCKS = 0x400
|
||||||
STATX_BTIME = 0x800
|
STATX_BTIME = 0x800
|
||||||
STATX_CTIME = 0x80
|
STATX_CTIME = 0x80
|
||||||
|
STATX_DIOALIGN = 0x2000
|
||||||
STATX_GID = 0x10
|
STATX_GID = 0x10
|
||||||
STATX_INO = 0x100
|
STATX_INO = 0x100
|
||||||
STATX_MNT_ID = 0x1000
|
STATX_MNT_ID = 0x1000
|
||||||
|
@ -3392,9 +3410,7 @@ const (
|
||||||
XDP_ZEROCOPY = 0x4
|
XDP_ZEROCOPY = 0x4
|
||||||
XENFS_SUPER_MAGIC = 0xabba1974
|
XENFS_SUPER_MAGIC = 0xabba1974
|
||||||
XFS_SUPER_MAGIC = 0x58465342
|
XFS_SUPER_MAGIC = 0x58465342
|
||||||
Z3FOLD_MAGIC = 0x33
|
|
||||||
ZONEFS_MAGIC = 0x5a4f4653
|
ZONEFS_MAGIC = 0x5a4f4653
|
||||||
ZSMALLOC_MAGIC = 0x58295829
|
|
||||||
_HIDIOCGRAWNAME_LEN = 0x80
|
_HIDIOCGRAWNAME_LEN = 0x80
|
||||||
_HIDIOCGRAWPHYS_LEN = 0x40
|
_HIDIOCGRAWPHYS_LEN = 0x40
|
||||||
_HIDIOCGRAWUNIQ_LEN = 0x40
|
_HIDIOCGRAWUNIQ_LEN = 0x40
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include -m32
|
// mkerrors.sh -Wall -Werror -static -I/tmp/386/include -m32
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build 386 && linux
|
//go:build 386 && linux
|
||||||
// +build 386,linux
|
// +build 386,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/386/include -m32 _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -133,6 +133,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x80044d07
|
MEMGETREGIONCOUNT = 0x80044d07
|
||||||
MEMISLOCKED = 0x80084d17
|
MEMISLOCKED = 0x80084d17
|
||||||
MEMLOCK = 0x40084d05
|
MEMLOCK = 0x40084d05
|
||||||
|
MEMREAD = 0xc03c4d1a
|
||||||
MEMREADOOB = 0xc00c4d04
|
MEMREADOOB = 0xc00c4d04
|
||||||
MEMSETBADBLOCK = 0x40084d0c
|
MEMSETBADBLOCK = 0x40084d0c
|
||||||
MEMUNLOCK = 0x40084d06
|
MEMUNLOCK = 0x40084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include -m64
|
// mkerrors.sh -Wall -Werror -static -I/tmp/amd64/include -m64
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build amd64 && linux
|
//go:build amd64 && linux
|
||||||
// +build amd64,linux
|
// +build amd64,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/amd64/include -m64 _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -133,6 +133,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x80044d07
|
MEMGETREGIONCOUNT = 0x80044d07
|
||||||
MEMISLOCKED = 0x80084d17
|
MEMISLOCKED = 0x80084d17
|
||||||
MEMLOCK = 0x40084d05
|
MEMLOCK = 0x40084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc0104d04
|
MEMREADOOB = 0xc0104d04
|
||||||
MEMSETBADBLOCK = 0x40084d0c
|
MEMSETBADBLOCK = 0x40084d0c
|
||||||
MEMUNLOCK = 0x40084d06
|
MEMUNLOCK = 0x40084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include
|
// mkerrors.sh -Wall -Werror -static -I/tmp/arm/include
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build arm && linux
|
//go:build arm && linux
|
||||||
// +build arm,linux
|
// +build arm,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/arm/include _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x80044d07
|
MEMGETREGIONCOUNT = 0x80044d07
|
||||||
MEMISLOCKED = 0x80084d17
|
MEMISLOCKED = 0x80084d17
|
||||||
MEMLOCK = 0x40084d05
|
MEMLOCK = 0x40084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc00c4d04
|
MEMREADOOB = 0xc00c4d04
|
||||||
MEMSETBADBLOCK = 0x40084d0c
|
MEMSETBADBLOCK = 0x40084d0c
|
||||||
MEMUNLOCK = 0x40084d06
|
MEMUNLOCK = 0x40084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char
|
// mkerrors.sh -Wall -Werror -static -I/tmp/arm64/include -fsigned-char
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build arm64 && linux
|
//go:build arm64 && linux
|
||||||
// +build arm64,linux
|
// +build arm64,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/arm64/include -fsigned-char _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -134,6 +134,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x80044d07
|
MEMGETREGIONCOUNT = 0x80044d07
|
||||||
MEMISLOCKED = 0x80084d17
|
MEMISLOCKED = 0x80084d17
|
||||||
MEMLOCK = 0x40084d05
|
MEMLOCK = 0x40084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc0104d04
|
MEMREADOOB = 0xc0104d04
|
||||||
MEMSETBADBLOCK = 0x40084d0c
|
MEMSETBADBLOCK = 0x40084d0c
|
||||||
MEMUNLOCK = 0x40084d06
|
MEMUNLOCK = 0x40084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include
|
// mkerrors.sh -Wall -Werror -static -I/tmp/loong64/include
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build loong64 && linux
|
//go:build loong64 && linux
|
||||||
// +build loong64,linux
|
// +build loong64,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/loong64/include _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -132,6 +132,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x80044d07
|
MEMGETREGIONCOUNT = 0x80044d07
|
||||||
MEMISLOCKED = 0x80084d17
|
MEMISLOCKED = 0x80084d17
|
||||||
MEMLOCK = 0x40084d05
|
MEMLOCK = 0x40084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc0104d04
|
MEMREADOOB = 0xc0104d04
|
||||||
MEMSETBADBLOCK = 0x40084d0c
|
MEMSETBADBLOCK = 0x40084d0c
|
||||||
MEMUNLOCK = 0x40084d06
|
MEMUNLOCK = 0x40084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include
|
// mkerrors.sh -Wall -Werror -static -I/tmp/mips/include
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build mips && linux
|
//go:build mips && linux
|
||||||
// +build mips,linux
|
// +build mips,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/mips/include _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x40044d07
|
MEMGETREGIONCOUNT = 0x40044d07
|
||||||
MEMISLOCKED = 0x40084d17
|
MEMISLOCKED = 0x40084d17
|
||||||
MEMLOCK = 0x80084d05
|
MEMLOCK = 0x80084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc00c4d04
|
MEMREADOOB = 0xc00c4d04
|
||||||
MEMSETBADBLOCK = 0x80084d0c
|
MEMSETBADBLOCK = 0x80084d0c
|
||||||
MEMUNLOCK = 0x80084d06
|
MEMUNLOCK = 0x80084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include
|
// mkerrors.sh -Wall -Werror -static -I/tmp/mips64/include
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build mips64 && linux
|
//go:build mips64 && linux
|
||||||
// +build mips64,linux
|
// +build mips64,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/mips64/include _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x40044d07
|
MEMGETREGIONCOUNT = 0x40044d07
|
||||||
MEMISLOCKED = 0x40084d17
|
MEMISLOCKED = 0x40084d17
|
||||||
MEMLOCK = 0x80084d05
|
MEMLOCK = 0x80084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc0104d04
|
MEMREADOOB = 0xc0104d04
|
||||||
MEMSETBADBLOCK = 0x80084d0c
|
MEMSETBADBLOCK = 0x80084d0c
|
||||||
MEMUNLOCK = 0x80084d06
|
MEMUNLOCK = 0x80084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include
|
// mkerrors.sh -Wall -Werror -static -I/tmp/mips64le/include
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build mips64le && linux
|
//go:build mips64le && linux
|
||||||
// +build mips64le,linux
|
// +build mips64le,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/mips64le/include _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x40044d07
|
MEMGETREGIONCOUNT = 0x40044d07
|
||||||
MEMISLOCKED = 0x40084d17
|
MEMISLOCKED = 0x40084d17
|
||||||
MEMLOCK = 0x80084d05
|
MEMLOCK = 0x80084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc0104d04
|
MEMREADOOB = 0xc0104d04
|
||||||
MEMSETBADBLOCK = 0x80084d0c
|
MEMSETBADBLOCK = 0x80084d0c
|
||||||
MEMUNLOCK = 0x80084d06
|
MEMUNLOCK = 0x80084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include
|
// mkerrors.sh -Wall -Werror -static -I/tmp/mipsle/include
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build mipsle && linux
|
//go:build mipsle && linux
|
||||||
// +build mipsle,linux
|
// +build mipsle,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/mipsle/include _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x40044d07
|
MEMGETREGIONCOUNT = 0x40044d07
|
||||||
MEMISLOCKED = 0x40084d17
|
MEMISLOCKED = 0x40084d17
|
||||||
MEMLOCK = 0x80084d05
|
MEMLOCK = 0x80084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc00c4d04
|
MEMREADOOB = 0xc00c4d04
|
||||||
MEMSETBADBLOCK = 0x80084d0c
|
MEMSETBADBLOCK = 0x80084d0c
|
||||||
MEMUNLOCK = 0x80084d06
|
MEMUNLOCK = 0x80084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include
|
// mkerrors.sh -Wall -Werror -static -I/tmp/ppc/include
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build ppc && linux
|
//go:build ppc && linux
|
||||||
// +build ppc,linux
|
// +build ppc,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc/include _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x40044d07
|
MEMGETREGIONCOUNT = 0x40044d07
|
||||||
MEMISLOCKED = 0x40084d17
|
MEMISLOCKED = 0x40084d17
|
||||||
MEMLOCK = 0x80084d05
|
MEMLOCK = 0x80084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc00c4d04
|
MEMREADOOB = 0xc00c4d04
|
||||||
MEMSETBADBLOCK = 0x80084d0c
|
MEMSETBADBLOCK = 0x80084d0c
|
||||||
MEMUNLOCK = 0x80084d06
|
MEMUNLOCK = 0x80084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include
|
// mkerrors.sh -Wall -Werror -static -I/tmp/ppc64/include
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build ppc64 && linux
|
//go:build ppc64 && linux
|
||||||
// +build ppc64,linux
|
// +build ppc64,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc64/include _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x40044d07
|
MEMGETREGIONCOUNT = 0x40044d07
|
||||||
MEMISLOCKED = 0x40084d17
|
MEMISLOCKED = 0x40084d17
|
||||||
MEMLOCK = 0x80084d05
|
MEMLOCK = 0x80084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc0104d04
|
MEMREADOOB = 0xc0104d04
|
||||||
MEMSETBADBLOCK = 0x80084d0c
|
MEMSETBADBLOCK = 0x80084d0c
|
||||||
MEMUNLOCK = 0x80084d06
|
MEMUNLOCK = 0x80084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include
|
// mkerrors.sh -Wall -Werror -static -I/tmp/ppc64le/include
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build ppc64le && linux
|
//go:build ppc64le && linux
|
||||||
// +build ppc64le,linux
|
// +build ppc64le,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc64le/include _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x40044d07
|
MEMGETREGIONCOUNT = 0x40044d07
|
||||||
MEMISLOCKED = 0x40084d17
|
MEMISLOCKED = 0x40084d17
|
||||||
MEMLOCK = 0x80084d05
|
MEMLOCK = 0x80084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc0104d04
|
MEMREADOOB = 0xc0104d04
|
||||||
MEMSETBADBLOCK = 0x80084d0c
|
MEMSETBADBLOCK = 0x80084d0c
|
||||||
MEMUNLOCK = 0x80084d06
|
MEMUNLOCK = 0x80084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include
|
// mkerrors.sh -Wall -Werror -static -I/tmp/riscv64/include
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build riscv64 && linux
|
//go:build riscv64 && linux
|
||||||
// +build riscv64,linux
|
// +build riscv64,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/riscv64/include _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x80044d07
|
MEMGETREGIONCOUNT = 0x80044d07
|
||||||
MEMISLOCKED = 0x80084d17
|
MEMISLOCKED = 0x80084d17
|
||||||
MEMLOCK = 0x40084d05
|
MEMLOCK = 0x40084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc0104d04
|
MEMREADOOB = 0xc0104d04
|
||||||
MEMSETBADBLOCK = 0x40084d0c
|
MEMSETBADBLOCK = 0x40084d0c
|
||||||
MEMUNLOCK = 0x40084d06
|
MEMUNLOCK = 0x40084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char
|
// mkerrors.sh -Wall -Werror -static -I/tmp/s390x/include -fsigned-char
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build s390x && linux
|
//go:build s390x && linux
|
||||||
// +build s390x,linux
|
// +build s390x,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/s390x/include -fsigned-char _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x80044d07
|
MEMGETREGIONCOUNT = 0x80044d07
|
||||||
MEMISLOCKED = 0x80084d17
|
MEMISLOCKED = 0x80084d17
|
||||||
MEMLOCK = 0x40084d05
|
MEMLOCK = 0x40084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc0104d04
|
MEMREADOOB = 0xc0104d04
|
||||||
MEMSETBADBLOCK = 0x40084d0c
|
MEMSETBADBLOCK = 0x40084d0c
|
||||||
MEMUNLOCK = 0x40084d06
|
MEMUNLOCK = 0x40084d06
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// mkerrors.sh -Wall -Werror -static -I/tmp/include
|
// mkerrors.sh -Wall -Werror -static -I/tmp/sparc64/include
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build sparc64 && linux
|
//go:build sparc64 && linux
|
||||||
// +build sparc64,linux
|
// +build sparc64,linux
|
||||||
|
|
||||||
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/sparc64/include _const.go
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -136,6 +136,7 @@ const (
|
||||||
MEMGETREGIONCOUNT = 0x40044d07
|
MEMGETREGIONCOUNT = 0x40044d07
|
||||||
MEMISLOCKED = 0x40084d17
|
MEMISLOCKED = 0x40084d17
|
||||||
MEMLOCK = 0x80084d05
|
MEMLOCK = 0x80084d05
|
||||||
|
MEMREAD = 0xc0404d1a
|
||||||
MEMREADOOB = 0xc0104d04
|
MEMREADOOB = 0xc0104d04
|
||||||
MEMSETBADBLOCK = 0x80084d0c
|
MEMSETBADBLOCK = 0x80084d0c
|
||||||
MEMUNLOCK = 0x80084d06
|
MEMUNLOCK = 0x80084d06
|
||||||
|
|
|
@ -46,6 +46,7 @@ const (
|
||||||
AF_SNA = 0xb
|
AF_SNA = 0xb
|
||||||
AF_UNIX = 0x1
|
AF_UNIX = 0x1
|
||||||
AF_UNSPEC = 0x0
|
AF_UNSPEC = 0x0
|
||||||
|
ALTWERASE = 0x200
|
||||||
ARPHRD_ETHER = 0x1
|
ARPHRD_ETHER = 0x1
|
||||||
ARPHRD_FRELAY = 0xf
|
ARPHRD_FRELAY = 0xf
|
||||||
ARPHRD_IEEE1394 = 0x18
|
ARPHRD_IEEE1394 = 0x18
|
||||||
|
@ -108,6 +109,15 @@ const (
|
||||||
BPF_DIRECTION_IN = 0x1
|
BPF_DIRECTION_IN = 0x1
|
||||||
BPF_DIRECTION_OUT = 0x2
|
BPF_DIRECTION_OUT = 0x2
|
||||||
BPF_DIV = 0x30
|
BPF_DIV = 0x30
|
||||||
|
BPF_FILDROP_CAPTURE = 0x1
|
||||||
|
BPF_FILDROP_DROP = 0x2
|
||||||
|
BPF_FILDROP_PASS = 0x0
|
||||||
|
BPF_F_DIR_IN = 0x10
|
||||||
|
BPF_F_DIR_MASK = 0x30
|
||||||
|
BPF_F_DIR_OUT = 0x20
|
||||||
|
BPF_F_DIR_SHIFT = 0x4
|
||||||
|
BPF_F_FLOWID = 0x8
|
||||||
|
BPF_F_PRI_MASK = 0x7
|
||||||
BPF_H = 0x8
|
BPF_H = 0x8
|
||||||
BPF_IMM = 0x0
|
BPF_IMM = 0x0
|
||||||
BPF_IND = 0x40
|
BPF_IND = 0x40
|
||||||
|
@ -136,6 +146,7 @@ const (
|
||||||
BPF_OR = 0x40
|
BPF_OR = 0x40
|
||||||
BPF_RELEASE = 0x30bb6
|
BPF_RELEASE = 0x30bb6
|
||||||
BPF_RET = 0x6
|
BPF_RET = 0x6
|
||||||
|
BPF_RND = 0xc0
|
||||||
BPF_RSH = 0x70
|
BPF_RSH = 0x70
|
||||||
BPF_ST = 0x2
|
BPF_ST = 0x2
|
||||||
BPF_STX = 0x3
|
BPF_STX = 0x3
|
||||||
|
@ -147,6 +158,12 @@ const (
|
||||||
BRKINT = 0x2
|
BRKINT = 0x2
|
||||||
CFLUSH = 0xf
|
CFLUSH = 0xf
|
||||||
CLOCAL = 0x8000
|
CLOCAL = 0x8000
|
||||||
|
CLOCK_BOOTTIME = 0x6
|
||||||
|
CLOCK_MONOTONIC = 0x3
|
||||||
|
CLOCK_PROCESS_CPUTIME_ID = 0x2
|
||||||
|
CLOCK_REALTIME = 0x0
|
||||||
|
CLOCK_THREAD_CPUTIME_ID = 0x4
|
||||||
|
CLOCK_UPTIME = 0x5
|
||||||
CPUSTATES = 0x6
|
CPUSTATES = 0x6
|
||||||
CP_IDLE = 0x5
|
CP_IDLE = 0x5
|
||||||
CP_INTR = 0x4
|
CP_INTR = 0x4
|
||||||
|
@ -170,7 +187,65 @@ const (
|
||||||
CTL_KERN = 0x1
|
CTL_KERN = 0x1
|
||||||
CTL_MAXNAME = 0xc
|
CTL_MAXNAME = 0xc
|
||||||
CTL_NET = 0x4
|
CTL_NET = 0x4
|
||||||
|
DIOCADDQUEUE = 0xc100445d
|
||||||
|
DIOCADDRULE = 0xccc84404
|
||||||
|
DIOCADDSTATE = 0xc1084425
|
||||||
|
DIOCCHANGERULE = 0xccc8441a
|
||||||
|
DIOCCLRIFFLAG = 0xc024445a
|
||||||
|
DIOCCLRSRCNODES = 0x20004455
|
||||||
|
DIOCCLRSTATES = 0xc0d04412
|
||||||
|
DIOCCLRSTATUS = 0xc0244416
|
||||||
|
DIOCGETLIMIT = 0xc0084427
|
||||||
|
DIOCGETQSTATS = 0xc1084460
|
||||||
|
DIOCGETQUEUE = 0xc100445f
|
||||||
|
DIOCGETQUEUES = 0xc100445e
|
||||||
|
DIOCGETRULE = 0xccc84407
|
||||||
|
DIOCGETRULES = 0xccc84406
|
||||||
|
DIOCGETRULESET = 0xc444443b
|
||||||
|
DIOCGETRULESETS = 0xc444443a
|
||||||
|
DIOCGETSRCNODES = 0xc0084454
|
||||||
|
DIOCGETSTATE = 0xc1084413
|
||||||
|
DIOCGETSTATES = 0xc0084419
|
||||||
|
DIOCGETSTATUS = 0xc1e84415
|
||||||
|
DIOCGETSYNFLWATS = 0xc0084463
|
||||||
|
DIOCGETTIMEOUT = 0xc008441e
|
||||||
|
DIOCIGETIFACES = 0xc0244457
|
||||||
|
DIOCKILLSRCNODES = 0xc068445b
|
||||||
|
DIOCKILLSTATES = 0xc0d04429
|
||||||
|
DIOCNATLOOK = 0xc0504417
|
||||||
|
DIOCOSFPADD = 0xc084444f
|
||||||
DIOCOSFPFLUSH = 0x2000444e
|
DIOCOSFPFLUSH = 0x2000444e
|
||||||
|
DIOCOSFPGET = 0xc0844450
|
||||||
|
DIOCRADDADDRS = 0xc44c4443
|
||||||
|
DIOCRADDTABLES = 0xc44c443d
|
||||||
|
DIOCRCLRADDRS = 0xc44c4442
|
||||||
|
DIOCRCLRASTATS = 0xc44c4448
|
||||||
|
DIOCRCLRTABLES = 0xc44c443c
|
||||||
|
DIOCRCLRTSTATS = 0xc44c4441
|
||||||
|
DIOCRDELADDRS = 0xc44c4444
|
||||||
|
DIOCRDELTABLES = 0xc44c443e
|
||||||
|
DIOCRGETADDRS = 0xc44c4446
|
||||||
|
DIOCRGETASTATS = 0xc44c4447
|
||||||
|
DIOCRGETTABLES = 0xc44c443f
|
||||||
|
DIOCRGETTSTATS = 0xc44c4440
|
||||||
|
DIOCRINADEFINE = 0xc44c444d
|
||||||
|
DIOCRSETADDRS = 0xc44c4445
|
||||||
|
DIOCRSETTFLAGS = 0xc44c444a
|
||||||
|
DIOCRTSTADDRS = 0xc44c4449
|
||||||
|
DIOCSETDEBUG = 0xc0044418
|
||||||
|
DIOCSETHOSTID = 0xc0044456
|
||||||
|
DIOCSETIFFLAG = 0xc0244459
|
||||||
|
DIOCSETLIMIT = 0xc0084428
|
||||||
|
DIOCSETREASS = 0xc004445c
|
||||||
|
DIOCSETSTATUSIF = 0xc0244414
|
||||||
|
DIOCSETSYNCOOKIES = 0xc0014462
|
||||||
|
DIOCSETSYNFLWATS = 0xc0084461
|
||||||
|
DIOCSETTIMEOUT = 0xc008441d
|
||||||
|
DIOCSTART = 0x20004401
|
||||||
|
DIOCSTOP = 0x20004402
|
||||||
|
DIOCXBEGIN = 0xc00c4451
|
||||||
|
DIOCXCOMMIT = 0xc00c4452
|
||||||
|
DIOCXROLLBACK = 0xc00c4453
|
||||||
DLT_ARCNET = 0x7
|
DLT_ARCNET = 0x7
|
||||||
DLT_ATM_RFC1483 = 0xb
|
DLT_ATM_RFC1483 = 0xb
|
||||||
DLT_AX25 = 0x3
|
DLT_AX25 = 0x3
|
||||||
|
@ -186,6 +261,7 @@ const (
|
||||||
DLT_LOOP = 0xc
|
DLT_LOOP = 0xc
|
||||||
DLT_MPLS = 0xdb
|
DLT_MPLS = 0xdb
|
||||||
DLT_NULL = 0x0
|
DLT_NULL = 0x0
|
||||||
|
DLT_OPENFLOW = 0x10b
|
||||||
DLT_PFLOG = 0x75
|
DLT_PFLOG = 0x75
|
||||||
DLT_PFSYNC = 0x12
|
DLT_PFSYNC = 0x12
|
||||||
DLT_PPP = 0x9
|
DLT_PPP = 0x9
|
||||||
|
@ -196,6 +272,23 @@ const (
|
||||||
DLT_RAW = 0xe
|
DLT_RAW = 0xe
|
||||||
DLT_SLIP = 0x8
|
DLT_SLIP = 0x8
|
||||||
DLT_SLIP_BSDOS = 0xf
|
DLT_SLIP_BSDOS = 0xf
|
||||||
|
DLT_USBPCAP = 0xf9
|
||||||
|
DLT_USER0 = 0x93
|
||||||
|
DLT_USER1 = 0x94
|
||||||
|
DLT_USER10 = 0x9d
|
||||||
|
DLT_USER11 = 0x9e
|
||||||
|
DLT_USER12 = 0x9f
|
||||||
|
DLT_USER13 = 0xa0
|
||||||
|
DLT_USER14 = 0xa1
|
||||||
|
DLT_USER15 = 0xa2
|
||||||
|
DLT_USER2 = 0x95
|
||||||
|
DLT_USER3 = 0x96
|
||||||
|
DLT_USER4 = 0x97
|
||||||
|
DLT_USER5 = 0x98
|
||||||
|
DLT_USER6 = 0x99
|
||||||
|
DLT_USER7 = 0x9a
|
||||||
|
DLT_USER8 = 0x9b
|
||||||
|
DLT_USER9 = 0x9c
|
||||||
DT_BLK = 0x6
|
DT_BLK = 0x6
|
||||||
DT_CHR = 0x2
|
DT_CHR = 0x2
|
||||||
DT_DIR = 0x4
|
DT_DIR = 0x4
|
||||||
|
@ -215,6 +308,8 @@ const (
|
||||||
EMUL_ENABLED = 0x1
|
EMUL_ENABLED = 0x1
|
||||||
EMUL_NATIVE = 0x2
|
EMUL_NATIVE = 0x2
|
||||||
ENDRUNDISC = 0x9
|
ENDRUNDISC = 0x9
|
||||||
|
ETH64_8021_RSVD_MASK = 0xfffffffffff0
|
||||||
|
ETH64_8021_RSVD_PREFIX = 0x180c2000000
|
||||||
ETHERMIN = 0x2e
|
ETHERMIN = 0x2e
|
||||||
ETHERMTU = 0x5dc
|
ETHERMTU = 0x5dc
|
||||||
ETHERTYPE_8023 = 0x4
|
ETHERTYPE_8023 = 0x4
|
||||||
|
@ -267,6 +362,7 @@ const (
|
||||||
ETHERTYPE_DN = 0x6003
|
ETHERTYPE_DN = 0x6003
|
||||||
ETHERTYPE_DOGFIGHT = 0x1989
|
ETHERTYPE_DOGFIGHT = 0x1989
|
||||||
ETHERTYPE_DSMD = 0x8039
|
ETHERTYPE_DSMD = 0x8039
|
||||||
|
ETHERTYPE_EAPOL = 0x888e
|
||||||
ETHERTYPE_ECMA = 0x803
|
ETHERTYPE_ECMA = 0x803
|
||||||
ETHERTYPE_ENCRYPT = 0x803d
|
ETHERTYPE_ENCRYPT = 0x803d
|
||||||
ETHERTYPE_ES = 0x805d
|
ETHERTYPE_ES = 0x805d
|
||||||
|
@ -298,6 +394,7 @@ const (
|
||||||
ETHERTYPE_LLDP = 0x88cc
|
ETHERTYPE_LLDP = 0x88cc
|
||||||
ETHERTYPE_LOGICRAFT = 0x8148
|
ETHERTYPE_LOGICRAFT = 0x8148
|
||||||
ETHERTYPE_LOOPBACK = 0x9000
|
ETHERTYPE_LOOPBACK = 0x9000
|
||||||
|
ETHERTYPE_MACSEC = 0x88e5
|
||||||
ETHERTYPE_MATRA = 0x807a
|
ETHERTYPE_MATRA = 0x807a
|
||||||
ETHERTYPE_MAX = 0xffff
|
ETHERTYPE_MAX = 0xffff
|
||||||
ETHERTYPE_MERIT = 0x807c
|
ETHERTYPE_MERIT = 0x807c
|
||||||
|
@ -326,15 +423,17 @@ const (
|
||||||
ETHERTYPE_NCD = 0x8149
|
ETHERTYPE_NCD = 0x8149
|
||||||
ETHERTYPE_NESTAR = 0x8006
|
ETHERTYPE_NESTAR = 0x8006
|
||||||
ETHERTYPE_NETBEUI = 0x8191
|
ETHERTYPE_NETBEUI = 0x8191
|
||||||
|
ETHERTYPE_NHRP = 0x2001
|
||||||
ETHERTYPE_NOVELL = 0x8138
|
ETHERTYPE_NOVELL = 0x8138
|
||||||
ETHERTYPE_NS = 0x600
|
ETHERTYPE_NS = 0x600
|
||||||
ETHERTYPE_NSAT = 0x601
|
ETHERTYPE_NSAT = 0x601
|
||||||
ETHERTYPE_NSCOMPAT = 0x807
|
ETHERTYPE_NSCOMPAT = 0x807
|
||||||
|
ETHERTYPE_NSH = 0x984f
|
||||||
ETHERTYPE_NTRAILER = 0x10
|
ETHERTYPE_NTRAILER = 0x10
|
||||||
ETHERTYPE_OS9 = 0x7007
|
ETHERTYPE_OS9 = 0x7007
|
||||||
ETHERTYPE_OS9NET = 0x7009
|
ETHERTYPE_OS9NET = 0x7009
|
||||||
ETHERTYPE_PACER = 0x80c6
|
ETHERTYPE_PACER = 0x80c6
|
||||||
ETHERTYPE_PAE = 0x888e
|
ETHERTYPE_PBB = 0x88e7
|
||||||
ETHERTYPE_PCS = 0x4242
|
ETHERTYPE_PCS = 0x4242
|
||||||
ETHERTYPE_PLANNING = 0x8044
|
ETHERTYPE_PLANNING = 0x8044
|
||||||
ETHERTYPE_PPP = 0x880b
|
ETHERTYPE_PPP = 0x880b
|
||||||
|
@ -409,28 +508,40 @@ const (
|
||||||
ETHER_CRC_POLY_LE = 0xedb88320
|
ETHER_CRC_POLY_LE = 0xedb88320
|
||||||
ETHER_HDR_LEN = 0xe
|
ETHER_HDR_LEN = 0xe
|
||||||
ETHER_MAX_DIX_LEN = 0x600
|
ETHER_MAX_DIX_LEN = 0x600
|
||||||
|
ETHER_MAX_HARDMTU_LEN = 0xff9b
|
||||||
ETHER_MAX_LEN = 0x5ee
|
ETHER_MAX_LEN = 0x5ee
|
||||||
ETHER_MIN_LEN = 0x40
|
ETHER_MIN_LEN = 0x40
|
||||||
ETHER_TYPE_LEN = 0x2
|
ETHER_TYPE_LEN = 0x2
|
||||||
ETHER_VLAN_ENCAP_LEN = 0x4
|
ETHER_VLAN_ENCAP_LEN = 0x4
|
||||||
EVFILT_AIO = -0x3
|
EVFILT_AIO = -0x3
|
||||||
|
EVFILT_DEVICE = -0x8
|
||||||
|
EVFILT_EXCEPT = -0x9
|
||||||
EVFILT_PROC = -0x5
|
EVFILT_PROC = -0x5
|
||||||
EVFILT_READ = -0x1
|
EVFILT_READ = -0x1
|
||||||
EVFILT_SIGNAL = -0x6
|
EVFILT_SIGNAL = -0x6
|
||||||
EVFILT_SYSCOUNT = 0x7
|
EVFILT_SYSCOUNT = 0x9
|
||||||
EVFILT_TIMER = -0x7
|
EVFILT_TIMER = -0x7
|
||||||
EVFILT_VNODE = -0x4
|
EVFILT_VNODE = -0x4
|
||||||
EVFILT_WRITE = -0x2
|
EVFILT_WRITE = -0x2
|
||||||
|
EVL_ENCAPLEN = 0x4
|
||||||
|
EVL_PRIO_BITS = 0xd
|
||||||
|
EVL_PRIO_MAX = 0x7
|
||||||
|
EVL_VLID_MASK = 0xfff
|
||||||
|
EVL_VLID_MAX = 0xffe
|
||||||
|
EVL_VLID_MIN = 0x1
|
||||||
|
EVL_VLID_NULL = 0x0
|
||||||
EV_ADD = 0x1
|
EV_ADD = 0x1
|
||||||
EV_CLEAR = 0x20
|
EV_CLEAR = 0x20
|
||||||
EV_DELETE = 0x2
|
EV_DELETE = 0x2
|
||||||
EV_DISABLE = 0x8
|
EV_DISABLE = 0x8
|
||||||
|
EV_DISPATCH = 0x80
|
||||||
EV_ENABLE = 0x4
|
EV_ENABLE = 0x4
|
||||||
EV_EOF = 0x8000
|
EV_EOF = 0x8000
|
||||||
EV_ERROR = 0x4000
|
EV_ERROR = 0x4000
|
||||||
EV_FLAG1 = 0x2000
|
EV_FLAG1 = 0x2000
|
||||||
EV_ONESHOT = 0x10
|
EV_ONESHOT = 0x10
|
||||||
EV_SYSFLAGS = 0xf000
|
EV_RECEIPT = 0x40
|
||||||
|
EV_SYSFLAGS = 0xf800
|
||||||
EXTA = 0x4b00
|
EXTA = 0x4b00
|
||||||
EXTB = 0x9600
|
EXTB = 0x9600
|
||||||
EXTPROC = 0x800
|
EXTPROC = 0x800
|
||||||
|
@ -443,6 +554,7 @@ const (
|
||||||
F_GETFL = 0x3
|
F_GETFL = 0x3
|
||||||
F_GETLK = 0x7
|
F_GETLK = 0x7
|
||||||
F_GETOWN = 0x5
|
F_GETOWN = 0x5
|
||||||
|
F_ISATTY = 0xb
|
||||||
F_OK = 0x0
|
F_OK = 0x0
|
||||||
F_RDLCK = 0x1
|
F_RDLCK = 0x1
|
||||||
F_SETFD = 0x2
|
F_SETFD = 0x2
|
||||||
|
@ -460,7 +572,6 @@ const (
|
||||||
IEXTEN = 0x400
|
IEXTEN = 0x400
|
||||||
IFAN_ARRIVAL = 0x0
|
IFAN_ARRIVAL = 0x0
|
||||||
IFAN_DEPARTURE = 0x1
|
IFAN_DEPARTURE = 0x1
|
||||||
IFA_ROUTE = 0x1
|
|
||||||
IFF_ALLMULTI = 0x200
|
IFF_ALLMULTI = 0x200
|
||||||
IFF_BROADCAST = 0x2
|
IFF_BROADCAST = 0x2
|
||||||
IFF_CANTCHANGE = 0x8e52
|
IFF_CANTCHANGE = 0x8e52
|
||||||
|
@ -471,12 +582,12 @@ const (
|
||||||
IFF_LOOPBACK = 0x8
|
IFF_LOOPBACK = 0x8
|
||||||
IFF_MULTICAST = 0x8000
|
IFF_MULTICAST = 0x8000
|
||||||
IFF_NOARP = 0x80
|
IFF_NOARP = 0x80
|
||||||
IFF_NOTRAILERS = 0x20
|
|
||||||
IFF_OACTIVE = 0x400
|
IFF_OACTIVE = 0x400
|
||||||
IFF_POINTOPOINT = 0x10
|
IFF_POINTOPOINT = 0x10
|
||||||
IFF_PROMISC = 0x100
|
IFF_PROMISC = 0x100
|
||||||
IFF_RUNNING = 0x40
|
IFF_RUNNING = 0x40
|
||||||
IFF_SIMPLEX = 0x800
|
IFF_SIMPLEX = 0x800
|
||||||
|
IFF_STATICARP = 0x20
|
||||||
IFF_UP = 0x1
|
IFF_UP = 0x1
|
||||||
IFNAMSIZ = 0x10
|
IFNAMSIZ = 0x10
|
||||||
IFT_1822 = 0x2
|
IFT_1822 = 0x2
|
||||||
|
@ -605,6 +716,7 @@ const (
|
||||||
IFT_LINEGROUP = 0xd2
|
IFT_LINEGROUP = 0xd2
|
||||||
IFT_LOCALTALK = 0x2a
|
IFT_LOCALTALK = 0x2a
|
||||||
IFT_LOOP = 0x18
|
IFT_LOOP = 0x18
|
||||||
|
IFT_MBIM = 0xfa
|
||||||
IFT_MEDIAMAILOVERIP = 0x8b
|
IFT_MEDIAMAILOVERIP = 0x8b
|
||||||
IFT_MFSIGLINK = 0xa7
|
IFT_MFSIGLINK = 0xa7
|
||||||
IFT_MIOX25 = 0x26
|
IFT_MIOX25 = 0x26
|
||||||
|
@ -695,6 +807,7 @@ const (
|
||||||
IFT_VOICEOVERCABLE = 0xc6
|
IFT_VOICEOVERCABLE = 0xc6
|
||||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
IFT_VOICEOVERFRAMERELAY = 0x99
|
||||||
IFT_VOICEOVERIP = 0x68
|
IFT_VOICEOVERIP = 0x68
|
||||||
|
IFT_WIREGUARD = 0xfb
|
||||||
IFT_X213 = 0x5d
|
IFT_X213 = 0x5d
|
||||||
IFT_X25 = 0x5
|
IFT_X25 = 0x5
|
||||||
IFT_X25DDN = 0x4
|
IFT_X25DDN = 0x4
|
||||||
|
@ -729,8 +842,6 @@ const (
|
||||||
IPPROTO_AH = 0x33
|
IPPROTO_AH = 0x33
|
||||||
IPPROTO_CARP = 0x70
|
IPPROTO_CARP = 0x70
|
||||||
IPPROTO_DIVERT = 0x102
|
IPPROTO_DIVERT = 0x102
|
||||||
IPPROTO_DIVERT_INIT = 0x2
|
|
||||||
IPPROTO_DIVERT_RESP = 0x1
|
|
||||||
IPPROTO_DONE = 0x101
|
IPPROTO_DONE = 0x101
|
||||||
IPPROTO_DSTOPTS = 0x3c
|
IPPROTO_DSTOPTS = 0x3c
|
||||||
IPPROTO_EGP = 0x8
|
IPPROTO_EGP = 0x8
|
||||||
|
@ -762,9 +873,11 @@ const (
|
||||||
IPPROTO_RAW = 0xff
|
IPPROTO_RAW = 0xff
|
||||||
IPPROTO_ROUTING = 0x2b
|
IPPROTO_ROUTING = 0x2b
|
||||||
IPPROTO_RSVP = 0x2e
|
IPPROTO_RSVP = 0x2e
|
||||||
|
IPPROTO_SCTP = 0x84
|
||||||
IPPROTO_TCP = 0x6
|
IPPROTO_TCP = 0x6
|
||||||
IPPROTO_TP = 0x1d
|
IPPROTO_TP = 0x1d
|
||||||
IPPROTO_UDP = 0x11
|
IPPROTO_UDP = 0x11
|
||||||
|
IPPROTO_UDPLITE = 0x88
|
||||||
IPV6_AUTH_LEVEL = 0x35
|
IPV6_AUTH_LEVEL = 0x35
|
||||||
IPV6_AUTOFLOWLABEL = 0x3b
|
IPV6_AUTOFLOWLABEL = 0x3b
|
||||||
IPV6_CHECKSUM = 0x1a
|
IPV6_CHECKSUM = 0x1a
|
||||||
|
@ -787,6 +900,7 @@ const (
|
||||||
IPV6_LEAVE_GROUP = 0xd
|
IPV6_LEAVE_GROUP = 0xd
|
||||||
IPV6_MAXHLIM = 0xff
|
IPV6_MAXHLIM = 0xff
|
||||||
IPV6_MAXPACKET = 0xffff
|
IPV6_MAXPACKET = 0xffff
|
||||||
|
IPV6_MINHOPCOUNT = 0x41
|
||||||
IPV6_MMTU = 0x500
|
IPV6_MMTU = 0x500
|
||||||
IPV6_MULTICAST_HOPS = 0xa
|
IPV6_MULTICAST_HOPS = 0xa
|
||||||
IPV6_MULTICAST_IF = 0x9
|
IPV6_MULTICAST_IF = 0x9
|
||||||
|
@ -826,12 +940,12 @@ const (
|
||||||
IP_DEFAULT_MULTICAST_LOOP = 0x1
|
IP_DEFAULT_MULTICAST_LOOP = 0x1
|
||||||
IP_DEFAULT_MULTICAST_TTL = 0x1
|
IP_DEFAULT_MULTICAST_TTL = 0x1
|
||||||
IP_DF = 0x4000
|
IP_DF = 0x4000
|
||||||
IP_DIVERTFL = 0x1022
|
|
||||||
IP_DROP_MEMBERSHIP = 0xd
|
IP_DROP_MEMBERSHIP = 0xd
|
||||||
IP_ESP_NETWORK_LEVEL = 0x16
|
IP_ESP_NETWORK_LEVEL = 0x16
|
||||||
IP_ESP_TRANS_LEVEL = 0x15
|
IP_ESP_TRANS_LEVEL = 0x15
|
||||||
IP_HDRINCL = 0x2
|
IP_HDRINCL = 0x2
|
||||||
IP_IPCOMP_LEVEL = 0x1d
|
IP_IPCOMP_LEVEL = 0x1d
|
||||||
|
IP_IPDEFTTL = 0x25
|
||||||
IP_IPSECFLOWINFO = 0x24
|
IP_IPSECFLOWINFO = 0x24
|
||||||
IP_IPSEC_LOCAL_AUTH = 0x1b
|
IP_IPSEC_LOCAL_AUTH = 0x1b
|
||||||
IP_IPSEC_LOCAL_CRED = 0x19
|
IP_IPSEC_LOCAL_CRED = 0x19
|
||||||
|
@ -865,10 +979,15 @@ const (
|
||||||
IP_RETOPTS = 0x8
|
IP_RETOPTS = 0x8
|
||||||
IP_RF = 0x8000
|
IP_RF = 0x8000
|
||||||
IP_RTABLE = 0x1021
|
IP_RTABLE = 0x1021
|
||||||
|
IP_SENDSRCADDR = 0x7
|
||||||
IP_TOS = 0x3
|
IP_TOS = 0x3
|
||||||
IP_TTL = 0x4
|
IP_TTL = 0x4
|
||||||
ISIG = 0x80
|
ISIG = 0x80
|
||||||
ISTRIP = 0x20
|
ISTRIP = 0x20
|
||||||
|
ITIMER_PROF = 0x2
|
||||||
|
ITIMER_REAL = 0x0
|
||||||
|
ITIMER_VIRTUAL = 0x1
|
||||||
|
IUCLC = 0x1000
|
||||||
IXANY = 0x800
|
IXANY = 0x800
|
||||||
IXOFF = 0x400
|
IXOFF = 0x400
|
||||||
IXON = 0x200
|
IXON = 0x200
|
||||||
|
@ -900,10 +1019,11 @@ const (
|
||||||
MAP_INHERIT_COPY = 0x1
|
MAP_INHERIT_COPY = 0x1
|
||||||
MAP_INHERIT_NONE = 0x2
|
MAP_INHERIT_NONE = 0x2
|
||||||
MAP_INHERIT_SHARE = 0x0
|
MAP_INHERIT_SHARE = 0x0
|
||||||
MAP_NOEXTEND = 0x100
|
MAP_INHERIT_ZERO = 0x3
|
||||||
MAP_NORESERVE = 0x40
|
MAP_NOEXTEND = 0x0
|
||||||
|
MAP_NORESERVE = 0x0
|
||||||
MAP_PRIVATE = 0x2
|
MAP_PRIVATE = 0x2
|
||||||
MAP_RENAME = 0x20
|
MAP_RENAME = 0x0
|
||||||
MAP_SHARED = 0x1
|
MAP_SHARED = 0x1
|
||||||
MAP_STACK = 0x4000
|
MAP_STACK = 0x4000
|
||||||
MAP_TRYFIXED = 0x0
|
MAP_TRYFIXED = 0x0
|
||||||
|
@ -922,6 +1042,7 @@ const (
|
||||||
MNT_NOATIME = 0x8000
|
MNT_NOATIME = 0x8000
|
||||||
MNT_NODEV = 0x10
|
MNT_NODEV = 0x10
|
||||||
MNT_NOEXEC = 0x4
|
MNT_NOEXEC = 0x4
|
||||||
|
MNT_NOPERM = 0x20
|
||||||
MNT_NOSUID = 0x8
|
MNT_NOSUID = 0x8
|
||||||
MNT_NOWAIT = 0x2
|
MNT_NOWAIT = 0x2
|
||||||
MNT_QUOTA = 0x2000
|
MNT_QUOTA = 0x2000
|
||||||
|
@ -929,13 +1050,29 @@ const (
|
||||||
MNT_RELOAD = 0x40000
|
MNT_RELOAD = 0x40000
|
||||||
MNT_ROOTFS = 0x4000
|
MNT_ROOTFS = 0x4000
|
||||||
MNT_SOFTDEP = 0x4000000
|
MNT_SOFTDEP = 0x4000000
|
||||||
|
MNT_STALLED = 0x100000
|
||||||
|
MNT_SWAPPABLE = 0x200000
|
||||||
MNT_SYNCHRONOUS = 0x2
|
MNT_SYNCHRONOUS = 0x2
|
||||||
MNT_UPDATE = 0x10000
|
MNT_UPDATE = 0x10000
|
||||||
MNT_VISFLAGMASK = 0x400ffff
|
MNT_VISFLAGMASK = 0x400ffff
|
||||||
MNT_WAIT = 0x1
|
MNT_WAIT = 0x1
|
||||||
MNT_WANTRDWR = 0x2000000
|
MNT_WANTRDWR = 0x2000000
|
||||||
MNT_WXALLOWED = 0x800
|
MNT_WXALLOWED = 0x800
|
||||||
|
MOUNT_AFS = "afs"
|
||||||
|
MOUNT_CD9660 = "cd9660"
|
||||||
|
MOUNT_EXT2FS = "ext2fs"
|
||||||
|
MOUNT_FFS = "ffs"
|
||||||
|
MOUNT_FUSEFS = "fuse"
|
||||||
|
MOUNT_MFS = "mfs"
|
||||||
|
MOUNT_MSDOS = "msdos"
|
||||||
|
MOUNT_NCPFS = "ncpfs"
|
||||||
|
MOUNT_NFS = "nfs"
|
||||||
|
MOUNT_NTFS = "ntfs"
|
||||||
|
MOUNT_TMPFS = "tmpfs"
|
||||||
|
MOUNT_UDF = "udf"
|
||||||
|
MOUNT_UFS = "ffs"
|
||||||
MSG_BCAST = 0x100
|
MSG_BCAST = 0x100
|
||||||
|
MSG_CMSG_CLOEXEC = 0x800
|
||||||
MSG_CTRUNC = 0x20
|
MSG_CTRUNC = 0x20
|
||||||
MSG_DONTROUTE = 0x4
|
MSG_DONTROUTE = 0x4
|
||||||
MSG_DONTWAIT = 0x80
|
MSG_DONTWAIT = 0x80
|
||||||
|
@ -946,6 +1083,7 @@ const (
|
||||||
MSG_PEEK = 0x2
|
MSG_PEEK = 0x2
|
||||||
MSG_TRUNC = 0x10
|
MSG_TRUNC = 0x10
|
||||||
MSG_WAITALL = 0x40
|
MSG_WAITALL = 0x40
|
||||||
|
MSG_WAITFORONE = 0x1000
|
||||||
MS_ASYNC = 0x1
|
MS_ASYNC = 0x1
|
||||||
MS_INVALIDATE = 0x4
|
MS_INVALIDATE = 0x4
|
||||||
MS_SYNC = 0x2
|
MS_SYNC = 0x2
|
||||||
|
@ -953,12 +1091,16 @@ const (
|
||||||
NET_RT_DUMP = 0x1
|
NET_RT_DUMP = 0x1
|
||||||
NET_RT_FLAGS = 0x2
|
NET_RT_FLAGS = 0x2
|
||||||
NET_RT_IFLIST = 0x3
|
NET_RT_IFLIST = 0x3
|
||||||
NET_RT_MAXID = 0x6
|
NET_RT_IFNAMES = 0x6
|
||||||
|
NET_RT_MAXID = 0x8
|
||||||
|
NET_RT_SOURCE = 0x7
|
||||||
NET_RT_STATS = 0x4
|
NET_RT_STATS = 0x4
|
||||||
NET_RT_TABLE = 0x5
|
NET_RT_TABLE = 0x5
|
||||||
NFDBITS = 0x20
|
NFDBITS = 0x20
|
||||||
NOFLSH = 0x80000000
|
NOFLSH = 0x80000000
|
||||||
|
NOKERNINFO = 0x2000000
|
||||||
NOTE_ATTRIB = 0x8
|
NOTE_ATTRIB = 0x8
|
||||||
|
NOTE_CHANGE = 0x1
|
||||||
NOTE_CHILD = 0x4
|
NOTE_CHILD = 0x4
|
||||||
NOTE_DELETE = 0x1
|
NOTE_DELETE = 0x1
|
||||||
NOTE_EOF = 0x2
|
NOTE_EOF = 0x2
|
||||||
|
@ -968,6 +1110,7 @@ const (
|
||||||
NOTE_FORK = 0x40000000
|
NOTE_FORK = 0x40000000
|
||||||
NOTE_LINK = 0x10
|
NOTE_LINK = 0x10
|
||||||
NOTE_LOWAT = 0x1
|
NOTE_LOWAT = 0x1
|
||||||
|
NOTE_OOB = 0x4
|
||||||
NOTE_PCTRLMASK = 0xf0000000
|
NOTE_PCTRLMASK = 0xf0000000
|
||||||
NOTE_PDATAMASK = 0xfffff
|
NOTE_PDATAMASK = 0xfffff
|
||||||
NOTE_RENAME = 0x20
|
NOTE_RENAME = 0x20
|
||||||
|
@ -977,11 +1120,13 @@ const (
|
||||||
NOTE_TRUNCATE = 0x80
|
NOTE_TRUNCATE = 0x80
|
||||||
NOTE_WRITE = 0x2
|
NOTE_WRITE = 0x2
|
||||||
OCRNL = 0x10
|
OCRNL = 0x10
|
||||||
|
OLCUC = 0x20
|
||||||
ONLCR = 0x2
|
ONLCR = 0x2
|
||||||
ONLRET = 0x80
|
ONLRET = 0x80
|
||||||
ONOCR = 0x40
|
ONOCR = 0x40
|
||||||
ONOEOT = 0x8
|
ONOEOT = 0x8
|
||||||
OPOST = 0x1
|
OPOST = 0x1
|
||||||
|
OXTABS = 0x4
|
||||||
O_ACCMODE = 0x3
|
O_ACCMODE = 0x3
|
||||||
O_APPEND = 0x8
|
O_APPEND = 0x8
|
||||||
O_ASYNC = 0x40
|
O_ASYNC = 0x40
|
||||||
|
@ -1015,7 +1160,6 @@ const (
|
||||||
PROT_NONE = 0x0
|
PROT_NONE = 0x0
|
||||||
PROT_READ = 0x1
|
PROT_READ = 0x1
|
||||||
PROT_WRITE = 0x2
|
PROT_WRITE = 0x2
|
||||||
PT_MASK = 0x3ff000
|
|
||||||
RLIMIT_CORE = 0x4
|
RLIMIT_CORE = 0x4
|
||||||
RLIMIT_CPU = 0x0
|
RLIMIT_CPU = 0x0
|
||||||
RLIMIT_DATA = 0x2
|
RLIMIT_DATA = 0x2
|
||||||
|
@ -1027,19 +1171,25 @@ const (
|
||||||
RLIMIT_STACK = 0x3
|
RLIMIT_STACK = 0x3
|
||||||
RLIM_INFINITY = 0x7fffffffffffffff
|
RLIM_INFINITY = 0x7fffffffffffffff
|
||||||
RTAX_AUTHOR = 0x6
|
RTAX_AUTHOR = 0x6
|
||||||
|
RTAX_BFD = 0xb
|
||||||
RTAX_BRD = 0x7
|
RTAX_BRD = 0x7
|
||||||
|
RTAX_DNS = 0xc
|
||||||
RTAX_DST = 0x0
|
RTAX_DST = 0x0
|
||||||
RTAX_GATEWAY = 0x1
|
RTAX_GATEWAY = 0x1
|
||||||
RTAX_GENMASK = 0x3
|
RTAX_GENMASK = 0x3
|
||||||
RTAX_IFA = 0x5
|
RTAX_IFA = 0x5
|
||||||
RTAX_IFP = 0x4
|
RTAX_IFP = 0x4
|
||||||
RTAX_LABEL = 0xa
|
RTAX_LABEL = 0xa
|
||||||
RTAX_MAX = 0xb
|
RTAX_MAX = 0xf
|
||||||
RTAX_NETMASK = 0x2
|
RTAX_NETMASK = 0x2
|
||||||
|
RTAX_SEARCH = 0xe
|
||||||
RTAX_SRC = 0x8
|
RTAX_SRC = 0x8
|
||||||
RTAX_SRCMASK = 0x9
|
RTAX_SRCMASK = 0x9
|
||||||
|
RTAX_STATIC = 0xd
|
||||||
RTA_AUTHOR = 0x40
|
RTA_AUTHOR = 0x40
|
||||||
|
RTA_BFD = 0x800
|
||||||
RTA_BRD = 0x80
|
RTA_BRD = 0x80
|
||||||
|
RTA_DNS = 0x1000
|
||||||
RTA_DST = 0x1
|
RTA_DST = 0x1
|
||||||
RTA_GATEWAY = 0x2
|
RTA_GATEWAY = 0x2
|
||||||
RTA_GENMASK = 0x8
|
RTA_GENMASK = 0x8
|
||||||
|
@ -1047,49 +1197,57 @@ const (
|
||||||
RTA_IFP = 0x10
|
RTA_IFP = 0x10
|
||||||
RTA_LABEL = 0x400
|
RTA_LABEL = 0x400
|
||||||
RTA_NETMASK = 0x4
|
RTA_NETMASK = 0x4
|
||||||
|
RTA_SEARCH = 0x4000
|
||||||
RTA_SRC = 0x100
|
RTA_SRC = 0x100
|
||||||
RTA_SRCMASK = 0x200
|
RTA_SRCMASK = 0x200
|
||||||
|
RTA_STATIC = 0x2000
|
||||||
RTF_ANNOUNCE = 0x4000
|
RTF_ANNOUNCE = 0x4000
|
||||||
|
RTF_BFD = 0x1000000
|
||||||
RTF_BLACKHOLE = 0x1000
|
RTF_BLACKHOLE = 0x1000
|
||||||
|
RTF_BROADCAST = 0x400000
|
||||||
|
RTF_CACHED = 0x20000
|
||||||
RTF_CLONED = 0x10000
|
RTF_CLONED = 0x10000
|
||||||
RTF_CLONING = 0x100
|
RTF_CLONING = 0x100
|
||||||
|
RTF_CONNECTED = 0x800000
|
||||||
RTF_DONE = 0x40
|
RTF_DONE = 0x40
|
||||||
RTF_DYNAMIC = 0x10
|
RTF_DYNAMIC = 0x10
|
||||||
RTF_FMASK = 0x10f808
|
RTF_FMASK = 0x110fc08
|
||||||
RTF_GATEWAY = 0x2
|
RTF_GATEWAY = 0x2
|
||||||
RTF_HOST = 0x4
|
RTF_HOST = 0x4
|
||||||
RTF_LLINFO = 0x400
|
RTF_LLINFO = 0x400
|
||||||
RTF_MASK = 0x80
|
RTF_LOCAL = 0x200000
|
||||||
RTF_MODIFIED = 0x20
|
RTF_MODIFIED = 0x20
|
||||||
RTF_MPATH = 0x40000
|
RTF_MPATH = 0x40000
|
||||||
RTF_MPLS = 0x100000
|
RTF_MPLS = 0x100000
|
||||||
|
RTF_MULTICAST = 0x200
|
||||||
RTF_PERMANENT_ARP = 0x2000
|
RTF_PERMANENT_ARP = 0x2000
|
||||||
RTF_PROTO1 = 0x8000
|
RTF_PROTO1 = 0x8000
|
||||||
RTF_PROTO2 = 0x4000
|
RTF_PROTO2 = 0x4000
|
||||||
RTF_PROTO3 = 0x2000
|
RTF_PROTO3 = 0x2000
|
||||||
RTF_REJECT = 0x8
|
RTF_REJECT = 0x8
|
||||||
RTF_SOURCE = 0x20000
|
|
||||||
RTF_STATIC = 0x800
|
RTF_STATIC = 0x800
|
||||||
RTF_TUNNEL = 0x100000
|
|
||||||
RTF_UP = 0x1
|
RTF_UP = 0x1
|
||||||
RTF_USETRAILERS = 0x8000
|
RTF_USETRAILERS = 0x8000
|
||||||
RTF_XRESOLVE = 0x200
|
RTM_80211INFO = 0x15
|
||||||
RTM_ADD = 0x1
|
RTM_ADD = 0x1
|
||||||
|
RTM_BFD = 0x12
|
||||||
RTM_CHANGE = 0x3
|
RTM_CHANGE = 0x3
|
||||||
|
RTM_CHGADDRATTR = 0x14
|
||||||
RTM_DELADDR = 0xd
|
RTM_DELADDR = 0xd
|
||||||
RTM_DELETE = 0x2
|
RTM_DELETE = 0x2
|
||||||
RTM_DESYNC = 0x10
|
RTM_DESYNC = 0x10
|
||||||
RTM_GET = 0x4
|
RTM_GET = 0x4
|
||||||
RTM_IFANNOUNCE = 0xf
|
RTM_IFANNOUNCE = 0xf
|
||||||
RTM_IFINFO = 0xe
|
RTM_IFINFO = 0xe
|
||||||
RTM_LOCK = 0x8
|
RTM_INVALIDATE = 0x11
|
||||||
RTM_LOSING = 0x5
|
RTM_LOSING = 0x5
|
||||||
RTM_MAXSIZE = 0x800
|
RTM_MAXSIZE = 0x800
|
||||||
RTM_MISS = 0x7
|
RTM_MISS = 0x7
|
||||||
RTM_NEWADDR = 0xc
|
RTM_NEWADDR = 0xc
|
||||||
|
RTM_PROPOSAL = 0x13
|
||||||
RTM_REDIRECT = 0x6
|
RTM_REDIRECT = 0x6
|
||||||
RTM_RESOLVE = 0xb
|
RTM_RESOLVE = 0xb
|
||||||
RTM_RTTUNIT = 0xf4240
|
RTM_SOURCE = 0x16
|
||||||
RTM_VERSION = 0x5
|
RTM_VERSION = 0x5
|
||||||
RTV_EXPIRE = 0x4
|
RTV_EXPIRE = 0x4
|
||||||
RTV_HOPCOUNT = 0x2
|
RTV_HOPCOUNT = 0x2
|
||||||
|
@ -1099,67 +1257,74 @@ const (
|
||||||
RTV_RTTVAR = 0x80
|
RTV_RTTVAR = 0x80
|
||||||
RTV_SPIPE = 0x10
|
RTV_SPIPE = 0x10
|
||||||
RTV_SSTHRESH = 0x20
|
RTV_SSTHRESH = 0x20
|
||||||
|
RT_TABLEID_BITS = 0x8
|
||||||
|
RT_TABLEID_MASK = 0xff
|
||||||
RT_TABLEID_MAX = 0xff
|
RT_TABLEID_MAX = 0xff
|
||||||
RUSAGE_CHILDREN = -0x1
|
RUSAGE_CHILDREN = -0x1
|
||||||
RUSAGE_SELF = 0x0
|
RUSAGE_SELF = 0x0
|
||||||
RUSAGE_THREAD = 0x1
|
RUSAGE_THREAD = 0x1
|
||||||
SCM_RIGHTS = 0x1
|
SCM_RIGHTS = 0x1
|
||||||
SCM_TIMESTAMP = 0x4
|
SCM_TIMESTAMP = 0x4
|
||||||
|
SEEK_CUR = 0x1
|
||||||
|
SEEK_END = 0x2
|
||||||
|
SEEK_SET = 0x0
|
||||||
SHUT_RD = 0x0
|
SHUT_RD = 0x0
|
||||||
SHUT_RDWR = 0x2
|
SHUT_RDWR = 0x2
|
||||||
SHUT_WR = 0x1
|
SHUT_WR = 0x1
|
||||||
SIOCADDMULTI = 0x80206931
|
SIOCADDMULTI = 0x80206931
|
||||||
SIOCAIFADDR = 0x8040691a
|
SIOCAIFADDR = 0x8040691a
|
||||||
SIOCAIFGROUP = 0x80246987
|
SIOCAIFGROUP = 0x80246987
|
||||||
SIOCALIFADDR = 0x8218691c
|
|
||||||
SIOCATMARK = 0x40047307
|
SIOCATMARK = 0x40047307
|
||||||
SIOCBRDGADD = 0x8054693c
|
SIOCBRDGADD = 0x805c693c
|
||||||
SIOCBRDGADDS = 0x80546941
|
SIOCBRDGADDL = 0x805c6949
|
||||||
SIOCBRDGARL = 0x806e694d
|
SIOCBRDGADDS = 0x805c6941
|
||||||
|
SIOCBRDGARL = 0x808c694d
|
||||||
SIOCBRDGDADDR = 0x81286947
|
SIOCBRDGDADDR = 0x81286947
|
||||||
SIOCBRDGDEL = 0x8054693d
|
SIOCBRDGDEL = 0x805c693d
|
||||||
SIOCBRDGDELS = 0x80546942
|
SIOCBRDGDELS = 0x805c6942
|
||||||
SIOCBRDGFLUSH = 0x80546948
|
SIOCBRDGFLUSH = 0x805c6948
|
||||||
SIOCBRDGFRL = 0x806e694e
|
SIOCBRDGFRL = 0x808c694e
|
||||||
SIOCBRDGGCACHE = 0xc0146941
|
SIOCBRDGGCACHE = 0xc0146941
|
||||||
SIOCBRDGGFD = 0xc0146952
|
SIOCBRDGGFD = 0xc0146952
|
||||||
SIOCBRDGGHT = 0xc0146951
|
SIOCBRDGGHT = 0xc0146951
|
||||||
SIOCBRDGGIFFLGS = 0xc054693e
|
SIOCBRDGGIFFLGS = 0xc05c693e
|
||||||
SIOCBRDGGMA = 0xc0146953
|
SIOCBRDGGMA = 0xc0146953
|
||||||
SIOCBRDGGPARAM = 0xc03c6958
|
SIOCBRDGGPARAM = 0xc03c6958
|
||||||
SIOCBRDGGPRI = 0xc0146950
|
SIOCBRDGGPRI = 0xc0146950
|
||||||
SIOCBRDGGRL = 0xc028694f
|
SIOCBRDGGRL = 0xc028694f
|
||||||
SIOCBRDGGSIFS = 0xc054693c
|
|
||||||
SIOCBRDGGTO = 0xc0146946
|
SIOCBRDGGTO = 0xc0146946
|
||||||
SIOCBRDGIFS = 0xc0546942
|
SIOCBRDGIFS = 0xc05c6942
|
||||||
SIOCBRDGRTS = 0xc0186943
|
SIOCBRDGRTS = 0xc0186943
|
||||||
SIOCBRDGSADDR = 0xc1286944
|
SIOCBRDGSADDR = 0xc1286944
|
||||||
SIOCBRDGSCACHE = 0x80146940
|
SIOCBRDGSCACHE = 0x80146940
|
||||||
SIOCBRDGSFD = 0x80146952
|
SIOCBRDGSFD = 0x80146952
|
||||||
SIOCBRDGSHT = 0x80146951
|
SIOCBRDGSHT = 0x80146951
|
||||||
SIOCBRDGSIFCOST = 0x80546955
|
SIOCBRDGSIFCOST = 0x805c6955
|
||||||
SIOCBRDGSIFFLGS = 0x8054693f
|
SIOCBRDGSIFFLGS = 0x805c693f
|
||||||
SIOCBRDGSIFPRIO = 0x80546954
|
SIOCBRDGSIFPRIO = 0x805c6954
|
||||||
|
SIOCBRDGSIFPROT = 0x805c694a
|
||||||
SIOCBRDGSMA = 0x80146953
|
SIOCBRDGSMA = 0x80146953
|
||||||
SIOCBRDGSPRI = 0x80146950
|
SIOCBRDGSPRI = 0x80146950
|
||||||
SIOCBRDGSPROTO = 0x8014695a
|
SIOCBRDGSPROTO = 0x8014695a
|
||||||
SIOCBRDGSTO = 0x80146945
|
SIOCBRDGSTO = 0x80146945
|
||||||
SIOCBRDGSTXHC = 0x80146959
|
SIOCBRDGSTXHC = 0x80146959
|
||||||
|
SIOCDELLABEL = 0x80206997
|
||||||
SIOCDELMULTI = 0x80206932
|
SIOCDELMULTI = 0x80206932
|
||||||
SIOCDIFADDR = 0x80206919
|
SIOCDIFADDR = 0x80206919
|
||||||
SIOCDIFGROUP = 0x80246989
|
SIOCDIFGROUP = 0x80246989
|
||||||
|
SIOCDIFPARENT = 0x802069b4
|
||||||
SIOCDIFPHYADDR = 0x80206949
|
SIOCDIFPHYADDR = 0x80206949
|
||||||
SIOCDLIFADDR = 0x8218691e
|
SIOCDPWE3NEIGHBOR = 0x802069de
|
||||||
|
SIOCDVNETID = 0x802069af
|
||||||
SIOCGETKALIVE = 0xc01869a4
|
SIOCGETKALIVE = 0xc01869a4
|
||||||
SIOCGETLABEL = 0x8020699a
|
SIOCGETLABEL = 0x8020699a
|
||||||
|
SIOCGETMPWCFG = 0xc02069ae
|
||||||
SIOCGETPFLOW = 0xc02069fe
|
SIOCGETPFLOW = 0xc02069fe
|
||||||
SIOCGETPFSYNC = 0xc02069f8
|
SIOCGETPFSYNC = 0xc02069f8
|
||||||
SIOCGETSGCNT = 0xc0147534
|
SIOCGETSGCNT = 0xc0147534
|
||||||
SIOCGETVIFCNT = 0xc0147533
|
SIOCGETVIFCNT = 0xc0147533
|
||||||
SIOCGETVLAN = 0xc0206990
|
SIOCGETVLAN = 0xc0206990
|
||||||
SIOCGHIWAT = 0x40047301
|
|
||||||
SIOCGIFADDR = 0xc0206921
|
SIOCGIFADDR = 0xc0206921
|
||||||
SIOCGIFASYNCMAP = 0xc020697c
|
|
||||||
SIOCGIFBRDADDR = 0xc0206923
|
SIOCGIFBRDADDR = 0xc0206923
|
||||||
SIOCGIFCONF = 0xc0086924
|
SIOCGIFCONF = 0xc0086924
|
||||||
SIOCGIFDATA = 0xc020691b
|
SIOCGIFDATA = 0xc020691b
|
||||||
|
@ -1168,40 +1333,53 @@ const (
|
||||||
SIOCGIFFLAGS = 0xc0206911
|
SIOCGIFFLAGS = 0xc0206911
|
||||||
SIOCGIFGATTR = 0xc024698b
|
SIOCGIFGATTR = 0xc024698b
|
||||||
SIOCGIFGENERIC = 0xc020693a
|
SIOCGIFGENERIC = 0xc020693a
|
||||||
|
SIOCGIFGLIST = 0xc024698d
|
||||||
SIOCGIFGMEMB = 0xc024698a
|
SIOCGIFGMEMB = 0xc024698a
|
||||||
SIOCGIFGROUP = 0xc0246988
|
SIOCGIFGROUP = 0xc0246988
|
||||||
SIOCGIFHARDMTU = 0xc02069a5
|
SIOCGIFHARDMTU = 0xc02069a5
|
||||||
SIOCGIFMEDIA = 0xc0286936
|
SIOCGIFLLPRIO = 0xc02069b6
|
||||||
|
SIOCGIFMEDIA = 0xc0386938
|
||||||
SIOCGIFMETRIC = 0xc0206917
|
SIOCGIFMETRIC = 0xc0206917
|
||||||
SIOCGIFMTU = 0xc020697e
|
SIOCGIFMTU = 0xc020697e
|
||||||
SIOCGIFNETMASK = 0xc0206925
|
SIOCGIFNETMASK = 0xc0206925
|
||||||
SIOCGIFPDSTADDR = 0xc0206948
|
SIOCGIFPAIR = 0xc02069b1
|
||||||
|
SIOCGIFPARENT = 0xc02069b3
|
||||||
SIOCGIFPRIORITY = 0xc020699c
|
SIOCGIFPRIORITY = 0xc020699c
|
||||||
SIOCGIFPSRCADDR = 0xc0206947
|
|
||||||
SIOCGIFRDOMAIN = 0xc02069a0
|
SIOCGIFRDOMAIN = 0xc02069a0
|
||||||
SIOCGIFRTLABEL = 0xc0206983
|
SIOCGIFRTLABEL = 0xc0206983
|
||||||
SIOCGIFTIMESLOT = 0xc0206986
|
SIOCGIFRXR = 0x802069aa
|
||||||
|
SIOCGIFSFFPAGE = 0xc1126939
|
||||||
SIOCGIFXFLAGS = 0xc020699e
|
SIOCGIFXFLAGS = 0xc020699e
|
||||||
SIOCGLIFADDR = 0xc218691d
|
|
||||||
SIOCGLIFPHYADDR = 0xc218694b
|
SIOCGLIFPHYADDR = 0xc218694b
|
||||||
|
SIOCGLIFPHYDF = 0xc02069c2
|
||||||
|
SIOCGLIFPHYECN = 0xc02069c8
|
||||||
SIOCGLIFPHYRTABLE = 0xc02069a2
|
SIOCGLIFPHYRTABLE = 0xc02069a2
|
||||||
SIOCGLIFPHYTTL = 0xc02069a9
|
SIOCGLIFPHYTTL = 0xc02069a9
|
||||||
SIOCGLOWAT = 0x40047303
|
|
||||||
SIOCGPGRP = 0x40047309
|
SIOCGPGRP = 0x40047309
|
||||||
|
SIOCGPWE3 = 0xc0206998
|
||||||
|
SIOCGPWE3CTRLWORD = 0xc02069dc
|
||||||
|
SIOCGPWE3FAT = 0xc02069dd
|
||||||
|
SIOCGPWE3NEIGHBOR = 0xc21869de
|
||||||
|
SIOCGRXHPRIO = 0xc02069db
|
||||||
SIOCGSPPPPARAMS = 0xc0206994
|
SIOCGSPPPPARAMS = 0xc0206994
|
||||||
|
SIOCGTXHPRIO = 0xc02069c6
|
||||||
|
SIOCGUMBINFO = 0xc02069be
|
||||||
|
SIOCGUMBPARAM = 0xc02069c0
|
||||||
SIOCGVH = 0xc02069f6
|
SIOCGVH = 0xc02069f6
|
||||||
|
SIOCGVNETFLOWID = 0xc02069c4
|
||||||
SIOCGVNETID = 0xc02069a7
|
SIOCGVNETID = 0xc02069a7
|
||||||
|
SIOCIFAFATTACH = 0x801169ab
|
||||||
|
SIOCIFAFDETACH = 0x801169ac
|
||||||
SIOCIFCREATE = 0x8020697a
|
SIOCIFCREATE = 0x8020697a
|
||||||
SIOCIFDESTROY = 0x80206979
|
SIOCIFDESTROY = 0x80206979
|
||||||
SIOCIFGCLONERS = 0xc00c6978
|
SIOCIFGCLONERS = 0xc00c6978
|
||||||
SIOCSETKALIVE = 0x801869a3
|
SIOCSETKALIVE = 0x801869a3
|
||||||
SIOCSETLABEL = 0x80206999
|
SIOCSETLABEL = 0x80206999
|
||||||
|
SIOCSETMPWCFG = 0x802069ad
|
||||||
SIOCSETPFLOW = 0x802069fd
|
SIOCSETPFLOW = 0x802069fd
|
||||||
SIOCSETPFSYNC = 0x802069f7
|
SIOCSETPFSYNC = 0x802069f7
|
||||||
SIOCSETVLAN = 0x8020698f
|
SIOCSETVLAN = 0x8020698f
|
||||||
SIOCSHIWAT = 0x80047300
|
|
||||||
SIOCSIFADDR = 0x8020690c
|
SIOCSIFADDR = 0x8020690c
|
||||||
SIOCSIFASYNCMAP = 0x8020697d
|
|
||||||
SIOCSIFBRDADDR = 0x80206913
|
SIOCSIFBRDADDR = 0x80206913
|
||||||
SIOCSIFDESCR = 0x80206980
|
SIOCSIFDESCR = 0x80206980
|
||||||
SIOCSIFDSTADDR = 0x8020690e
|
SIOCSIFDSTADDR = 0x8020690e
|
||||||
|
@ -1209,25 +1387,37 @@ const (
|
||||||
SIOCSIFGATTR = 0x8024698c
|
SIOCSIFGATTR = 0x8024698c
|
||||||
SIOCSIFGENERIC = 0x80206939
|
SIOCSIFGENERIC = 0x80206939
|
||||||
SIOCSIFLLADDR = 0x8020691f
|
SIOCSIFLLADDR = 0x8020691f
|
||||||
SIOCSIFMEDIA = 0xc0206935
|
SIOCSIFLLPRIO = 0x802069b5
|
||||||
|
SIOCSIFMEDIA = 0xc0206937
|
||||||
SIOCSIFMETRIC = 0x80206918
|
SIOCSIFMETRIC = 0x80206918
|
||||||
SIOCSIFMTU = 0x8020697f
|
SIOCSIFMTU = 0x8020697f
|
||||||
SIOCSIFNETMASK = 0x80206916
|
SIOCSIFNETMASK = 0x80206916
|
||||||
SIOCSIFPHYADDR = 0x80406946
|
SIOCSIFPAIR = 0x802069b0
|
||||||
|
SIOCSIFPARENT = 0x802069b2
|
||||||
SIOCSIFPRIORITY = 0x8020699b
|
SIOCSIFPRIORITY = 0x8020699b
|
||||||
SIOCSIFRDOMAIN = 0x8020699f
|
SIOCSIFRDOMAIN = 0x8020699f
|
||||||
SIOCSIFRTLABEL = 0x80206982
|
SIOCSIFRTLABEL = 0x80206982
|
||||||
SIOCSIFTIMESLOT = 0x80206985
|
|
||||||
SIOCSIFXFLAGS = 0x8020699d
|
SIOCSIFXFLAGS = 0x8020699d
|
||||||
SIOCSLIFPHYADDR = 0x8218694a
|
SIOCSLIFPHYADDR = 0x8218694a
|
||||||
|
SIOCSLIFPHYDF = 0x802069c1
|
||||||
|
SIOCSLIFPHYECN = 0x802069c7
|
||||||
SIOCSLIFPHYRTABLE = 0x802069a1
|
SIOCSLIFPHYRTABLE = 0x802069a1
|
||||||
SIOCSLIFPHYTTL = 0x802069a8
|
SIOCSLIFPHYTTL = 0x802069a8
|
||||||
SIOCSLOWAT = 0x80047302
|
|
||||||
SIOCSPGRP = 0x80047308
|
SIOCSPGRP = 0x80047308
|
||||||
|
SIOCSPWE3CTRLWORD = 0x802069dc
|
||||||
|
SIOCSPWE3FAT = 0x802069dd
|
||||||
|
SIOCSPWE3NEIGHBOR = 0x821869de
|
||||||
|
SIOCSRXHPRIO = 0x802069db
|
||||||
SIOCSSPPPPARAMS = 0x80206993
|
SIOCSSPPPPARAMS = 0x80206993
|
||||||
|
SIOCSTXHPRIO = 0x802069c5
|
||||||
|
SIOCSUMBPARAM = 0x802069bf
|
||||||
SIOCSVH = 0xc02069f5
|
SIOCSVH = 0xc02069f5
|
||||||
|
SIOCSVNETFLOWID = 0x802069c3
|
||||||
SIOCSVNETID = 0x802069a6
|
SIOCSVNETID = 0x802069a6
|
||||||
|
SOCK_CLOEXEC = 0x8000
|
||||||
SOCK_DGRAM = 0x2
|
SOCK_DGRAM = 0x2
|
||||||
|
SOCK_DNS = 0x1000
|
||||||
|
SOCK_NONBLOCK = 0x4000
|
||||||
SOCK_RAW = 0x3
|
SOCK_RAW = 0x3
|
||||||
SOCK_RDM = 0x4
|
SOCK_RDM = 0x4
|
||||||
SOCK_SEQPACKET = 0x5
|
SOCK_SEQPACKET = 0x5
|
||||||
|
@ -1238,6 +1428,7 @@ const (
|
||||||
SO_BINDANY = 0x1000
|
SO_BINDANY = 0x1000
|
||||||
SO_BROADCAST = 0x20
|
SO_BROADCAST = 0x20
|
||||||
SO_DEBUG = 0x1
|
SO_DEBUG = 0x1
|
||||||
|
SO_DOMAIN = 0x1024
|
||||||
SO_DONTROUTE = 0x10
|
SO_DONTROUTE = 0x10
|
||||||
SO_ERROR = 0x1007
|
SO_ERROR = 0x1007
|
||||||
SO_KEEPALIVE = 0x8
|
SO_KEEPALIVE = 0x8
|
||||||
|
@ -1245,6 +1436,7 @@ const (
|
||||||
SO_NETPROC = 0x1020
|
SO_NETPROC = 0x1020
|
||||||
SO_OOBINLINE = 0x100
|
SO_OOBINLINE = 0x100
|
||||||
SO_PEERCRED = 0x1022
|
SO_PEERCRED = 0x1022
|
||||||
|
SO_PROTOCOL = 0x1025
|
||||||
SO_RCVBUF = 0x1002
|
SO_RCVBUF = 0x1002
|
||||||
SO_RCVLOWAT = 0x1004
|
SO_RCVLOWAT = 0x1004
|
||||||
SO_RCVTIMEO = 0x1006
|
SO_RCVTIMEO = 0x1006
|
||||||
|
@ -1258,6 +1450,7 @@ const (
|
||||||
SO_TIMESTAMP = 0x800
|
SO_TIMESTAMP = 0x800
|
||||||
SO_TYPE = 0x1008
|
SO_TYPE = 0x1008
|
||||||
SO_USELOOPBACK = 0x40
|
SO_USELOOPBACK = 0x40
|
||||||
|
SO_ZEROIZE = 0x2000
|
||||||
S_BLKSIZE = 0x200
|
S_BLKSIZE = 0x200
|
||||||
S_IEXEC = 0x40
|
S_IEXEC = 0x40
|
||||||
S_IFBLK = 0x6000
|
S_IFBLK = 0x6000
|
||||||
|
@ -1287,9 +1480,24 @@ const (
|
||||||
S_IXOTH = 0x1
|
S_IXOTH = 0x1
|
||||||
S_IXUSR = 0x40
|
S_IXUSR = 0x40
|
||||||
TCIFLUSH = 0x1
|
TCIFLUSH = 0x1
|
||||||
|
TCIOFF = 0x3
|
||||||
TCIOFLUSH = 0x3
|
TCIOFLUSH = 0x3
|
||||||
|
TCION = 0x4
|
||||||
TCOFLUSH = 0x2
|
TCOFLUSH = 0x2
|
||||||
TCP_MAXBURST = 0x4
|
TCOOFF = 0x1
|
||||||
|
TCOON = 0x2
|
||||||
|
TCPOPT_EOL = 0x0
|
||||||
|
TCPOPT_MAXSEG = 0x2
|
||||||
|
TCPOPT_NOP = 0x1
|
||||||
|
TCPOPT_SACK = 0x5
|
||||||
|
TCPOPT_SACK_HDR = 0x1010500
|
||||||
|
TCPOPT_SACK_PERMITTED = 0x4
|
||||||
|
TCPOPT_SACK_PERMIT_HDR = 0x1010402
|
||||||
|
TCPOPT_SIGNATURE = 0x13
|
||||||
|
TCPOPT_TIMESTAMP = 0x8
|
||||||
|
TCPOPT_TSTAMP_HDR = 0x101080a
|
||||||
|
TCPOPT_WINDOW = 0x3
|
||||||
|
TCP_INFO = 0x9
|
||||||
TCP_MAXSEG = 0x2
|
TCP_MAXSEG = 0x2
|
||||||
TCP_MAXWIN = 0xffff
|
TCP_MAXWIN = 0xffff
|
||||||
TCP_MAX_SACK = 0x3
|
TCP_MAX_SACK = 0x3
|
||||||
|
@ -1298,11 +1506,15 @@ const (
|
||||||
TCP_MSS = 0x200
|
TCP_MSS = 0x200
|
||||||
TCP_NODELAY = 0x1
|
TCP_NODELAY = 0x1
|
||||||
TCP_NOPUSH = 0x10
|
TCP_NOPUSH = 0x10
|
||||||
TCP_NSTATES = 0xb
|
TCP_SACKHOLE_LIMIT = 0x80
|
||||||
TCP_SACK_ENABLE = 0x8
|
TCP_SACK_ENABLE = 0x8
|
||||||
TCSAFLUSH = 0x2
|
TCSAFLUSH = 0x2
|
||||||
|
TIMER_ABSTIME = 0x1
|
||||||
|
TIMER_RELTIME = 0x0
|
||||||
TIOCCBRK = 0x2000747a
|
TIOCCBRK = 0x2000747a
|
||||||
TIOCCDTR = 0x20007478
|
TIOCCDTR = 0x20007478
|
||||||
|
TIOCCHKVERAUTH = 0x2000741e
|
||||||
|
TIOCCLRVERAUTH = 0x2000741d
|
||||||
TIOCCONS = 0x80047462
|
TIOCCONS = 0x80047462
|
||||||
TIOCDRAIN = 0x2000745e
|
TIOCDRAIN = 0x2000745e
|
||||||
TIOCEXCL = 0x2000740d
|
TIOCEXCL = 0x2000740d
|
||||||
|
@ -1357,17 +1569,21 @@ const (
|
||||||
TIOCSETAF = 0x802c7416
|
TIOCSETAF = 0x802c7416
|
||||||
TIOCSETAW = 0x802c7415
|
TIOCSETAW = 0x802c7415
|
||||||
TIOCSETD = 0x8004741b
|
TIOCSETD = 0x8004741b
|
||||||
|
TIOCSETVERAUTH = 0x8004741c
|
||||||
TIOCSFLAGS = 0x8004745c
|
TIOCSFLAGS = 0x8004745c
|
||||||
TIOCSIG = 0x8004745f
|
TIOCSIG = 0x8004745f
|
||||||
TIOCSPGRP = 0x80047476
|
TIOCSPGRP = 0x80047476
|
||||||
TIOCSTART = 0x2000746e
|
TIOCSTART = 0x2000746e
|
||||||
TIOCSTAT = 0x80047465
|
TIOCSTAT = 0x20007465
|
||||||
TIOCSTI = 0x80017472
|
|
||||||
TIOCSTOP = 0x2000746f
|
TIOCSTOP = 0x2000746f
|
||||||
TIOCSTSTAMP = 0x8008745a
|
TIOCSTSTAMP = 0x8008745a
|
||||||
TIOCSWINSZ = 0x80087467
|
TIOCSWINSZ = 0x80087467
|
||||||
TIOCUCNTL = 0x80047466
|
TIOCUCNTL = 0x80047466
|
||||||
|
TIOCUCNTL_CBRK = 0x7a
|
||||||
|
TIOCUCNTL_SBRK = 0x7b
|
||||||
TOSTOP = 0x400000
|
TOSTOP = 0x400000
|
||||||
|
UTIME_NOW = -0x2
|
||||||
|
UTIME_OMIT = -0x1
|
||||||
VDISCARD = 0xf
|
VDISCARD = 0xf
|
||||||
VDSUSP = 0xb
|
VDSUSP = 0xb
|
||||||
VEOF = 0x0
|
VEOF = 0x0
|
||||||
|
@ -1378,6 +1594,19 @@ const (
|
||||||
VKILL = 0x5
|
VKILL = 0x5
|
||||||
VLNEXT = 0xe
|
VLNEXT = 0xe
|
||||||
VMIN = 0x10
|
VMIN = 0x10
|
||||||
|
VM_ANONMIN = 0x7
|
||||||
|
VM_LOADAVG = 0x2
|
||||||
|
VM_MALLOC_CONF = 0xc
|
||||||
|
VM_MAXID = 0xd
|
||||||
|
VM_MAXSLP = 0xa
|
||||||
|
VM_METER = 0x1
|
||||||
|
VM_NKMEMPAGES = 0x6
|
||||||
|
VM_PSSTRINGS = 0x3
|
||||||
|
VM_SWAPENCRYPT = 0x5
|
||||||
|
VM_USPACE = 0xb
|
||||||
|
VM_UVMEXP = 0x4
|
||||||
|
VM_VNODEMIN = 0x9
|
||||||
|
VM_VTEXTMIN = 0x8
|
||||||
VQUIT = 0x9
|
VQUIT = 0x9
|
||||||
VREPRINT = 0x6
|
VREPRINT = 0x6
|
||||||
VSTART = 0xc
|
VSTART = 0xc
|
||||||
|
@ -1390,8 +1619,8 @@ const (
|
||||||
WCONTINUED = 0x8
|
WCONTINUED = 0x8
|
||||||
WCOREFLAG = 0x80
|
WCOREFLAG = 0x80
|
||||||
WNOHANG = 0x1
|
WNOHANG = 0x1
|
||||||
WSTOPPED = 0x7f
|
|
||||||
WUNTRACED = 0x2
|
WUNTRACED = 0x2
|
||||||
|
XCASE = 0x1000000
|
||||||
)
|
)
|
||||||
|
|
||||||
// Errors
|
// Errors
|
||||||
|
@ -1405,6 +1634,7 @@ const (
|
||||||
EALREADY = syscall.Errno(0x25)
|
EALREADY = syscall.Errno(0x25)
|
||||||
EAUTH = syscall.Errno(0x50)
|
EAUTH = syscall.Errno(0x50)
|
||||||
EBADF = syscall.Errno(0x9)
|
EBADF = syscall.Errno(0x9)
|
||||||
|
EBADMSG = syscall.Errno(0x5c)
|
||||||
EBADRPC = syscall.Errno(0x48)
|
EBADRPC = syscall.Errno(0x48)
|
||||||
EBUSY = syscall.Errno(0x10)
|
EBUSY = syscall.Errno(0x10)
|
||||||
ECANCELED = syscall.Errno(0x58)
|
ECANCELED = syscall.Errno(0x58)
|
||||||
|
@ -1431,7 +1661,7 @@ const (
|
||||||
EIPSEC = syscall.Errno(0x52)
|
EIPSEC = syscall.Errno(0x52)
|
||||||
EISCONN = syscall.Errno(0x38)
|
EISCONN = syscall.Errno(0x38)
|
||||||
EISDIR = syscall.Errno(0x15)
|
EISDIR = syscall.Errno(0x15)
|
||||||
ELAST = syscall.Errno(0x5b)
|
ELAST = syscall.Errno(0x5f)
|
||||||
ELOOP = syscall.Errno(0x3e)
|
ELOOP = syscall.Errno(0x3e)
|
||||||
EMEDIUMTYPE = syscall.Errno(0x56)
|
EMEDIUMTYPE = syscall.Errno(0x56)
|
||||||
EMFILE = syscall.Errno(0x18)
|
EMFILE = syscall.Errno(0x18)
|
||||||
|
@ -1459,12 +1689,14 @@ const (
|
||||||
ENOTCONN = syscall.Errno(0x39)
|
ENOTCONN = syscall.Errno(0x39)
|
||||||
ENOTDIR = syscall.Errno(0x14)
|
ENOTDIR = syscall.Errno(0x14)
|
||||||
ENOTEMPTY = syscall.Errno(0x42)
|
ENOTEMPTY = syscall.Errno(0x42)
|
||||||
|
ENOTRECOVERABLE = syscall.Errno(0x5d)
|
||||||
ENOTSOCK = syscall.Errno(0x26)
|
ENOTSOCK = syscall.Errno(0x26)
|
||||||
ENOTSUP = syscall.Errno(0x5b)
|
ENOTSUP = syscall.Errno(0x5b)
|
||||||
ENOTTY = syscall.Errno(0x19)
|
ENOTTY = syscall.Errno(0x19)
|
||||||
ENXIO = syscall.Errno(0x6)
|
ENXIO = syscall.Errno(0x6)
|
||||||
EOPNOTSUPP = syscall.Errno(0x2d)
|
EOPNOTSUPP = syscall.Errno(0x2d)
|
||||||
EOVERFLOW = syscall.Errno(0x57)
|
EOVERFLOW = syscall.Errno(0x57)
|
||||||
|
EOWNERDEAD = syscall.Errno(0x5e)
|
||||||
EPERM = syscall.Errno(0x1)
|
EPERM = syscall.Errno(0x1)
|
||||||
EPFNOSUPPORT = syscall.Errno(0x2e)
|
EPFNOSUPPORT = syscall.Errno(0x2e)
|
||||||
EPIPE = syscall.Errno(0x20)
|
EPIPE = syscall.Errno(0x20)
|
||||||
|
@ -1472,6 +1704,7 @@ const (
|
||||||
EPROCUNAVAIL = syscall.Errno(0x4c)
|
EPROCUNAVAIL = syscall.Errno(0x4c)
|
||||||
EPROGMISMATCH = syscall.Errno(0x4b)
|
EPROGMISMATCH = syscall.Errno(0x4b)
|
||||||
EPROGUNAVAIL = syscall.Errno(0x4a)
|
EPROGUNAVAIL = syscall.Errno(0x4a)
|
||||||
|
EPROTO = syscall.Errno(0x5f)
|
||||||
EPROTONOSUPPORT = syscall.Errno(0x2b)
|
EPROTONOSUPPORT = syscall.Errno(0x2b)
|
||||||
EPROTOTYPE = syscall.Errno(0x29)
|
EPROTOTYPE = syscall.Errno(0x29)
|
||||||
ERANGE = syscall.Errno(0x22)
|
ERANGE = syscall.Errno(0x22)
|
||||||
|
@ -1568,7 +1801,7 @@ var errorList = [...]struct {
|
||||||
{32, "EPIPE", "broken pipe"},
|
{32, "EPIPE", "broken pipe"},
|
||||||
{33, "EDOM", "numerical argument out of domain"},
|
{33, "EDOM", "numerical argument out of domain"},
|
||||||
{34, "ERANGE", "result too large"},
|
{34, "ERANGE", "result too large"},
|
||||||
{35, "EWOULDBLOCK", "resource temporarily unavailable"},
|
{35, "EAGAIN", "resource temporarily unavailable"},
|
||||||
{36, "EINPROGRESS", "operation now in progress"},
|
{36, "EINPROGRESS", "operation now in progress"},
|
||||||
{37, "EALREADY", "operation already in progress"},
|
{37, "EALREADY", "operation already in progress"},
|
||||||
{38, "ENOTSOCK", "socket operation on non-socket"},
|
{38, "ENOTSOCK", "socket operation on non-socket"},
|
||||||
|
@ -1624,7 +1857,11 @@ var errorList = [...]struct {
|
||||||
{88, "ECANCELED", "operation canceled"},
|
{88, "ECANCELED", "operation canceled"},
|
||||||
{89, "EIDRM", "identifier removed"},
|
{89, "EIDRM", "identifier removed"},
|
||||||
{90, "ENOMSG", "no message of desired type"},
|
{90, "ENOMSG", "no message of desired type"},
|
||||||
{91, "ELAST", "not supported"},
|
{91, "ENOTSUP", "not supported"},
|
||||||
|
{92, "EBADMSG", "bad message"},
|
||||||
|
{93, "ENOTRECOVERABLE", "state not recoverable"},
|
||||||
|
{94, "EOWNERDEAD", "previous owner died"},
|
||||||
|
{95, "ELAST", "protocol error"},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Signal table
|
// Signal table
|
||||||
|
@ -1638,7 +1875,7 @@ var signalList = [...]struct {
|
||||||
{3, "SIGQUIT", "quit"},
|
{3, "SIGQUIT", "quit"},
|
||||||
{4, "SIGILL", "illegal instruction"},
|
{4, "SIGILL", "illegal instruction"},
|
||||||
{5, "SIGTRAP", "trace/BPT trap"},
|
{5, "SIGTRAP", "trace/BPT trap"},
|
||||||
{6, "SIGABRT", "abort trap"},
|
{6, "SIGIOT", "abort trap"},
|
||||||
{7, "SIGEMT", "EMT trap"},
|
{7, "SIGEMT", "EMT trap"},
|
||||||
{8, "SIGFPE", "floating point exception"},
|
{8, "SIGFPE", "floating point exception"},
|
||||||
{9, "SIGKILL", "killed"},
|
{9, "SIGKILL", "killed"},
|
||||||
|
@ -1665,4 +1902,5 @@ var signalList = [...]struct {
|
||||||
{30, "SIGUSR1", "user defined signal 1"},
|
{30, "SIGUSR1", "user defined signal 1"},
|
||||||
{31, "SIGUSR2", "user defined signal 2"},
|
{31, "SIGUSR2", "user defined signal 2"},
|
||||||
{32, "SIGTHR", "thread AST"},
|
{32, "SIGTHR", "thread AST"},
|
||||||
|
{28672, "SIGSTKSZ", "unknown signal"},
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,6 +109,15 @@ const (
|
||||||
BPF_DIRECTION_IN = 0x1
|
BPF_DIRECTION_IN = 0x1
|
||||||
BPF_DIRECTION_OUT = 0x2
|
BPF_DIRECTION_OUT = 0x2
|
||||||
BPF_DIV = 0x30
|
BPF_DIV = 0x30
|
||||||
|
BPF_FILDROP_CAPTURE = 0x1
|
||||||
|
BPF_FILDROP_DROP = 0x2
|
||||||
|
BPF_FILDROP_PASS = 0x0
|
||||||
|
BPF_F_DIR_IN = 0x10
|
||||||
|
BPF_F_DIR_MASK = 0x30
|
||||||
|
BPF_F_DIR_OUT = 0x20
|
||||||
|
BPF_F_DIR_SHIFT = 0x4
|
||||||
|
BPF_F_FLOWID = 0x8
|
||||||
|
BPF_F_PRI_MASK = 0x7
|
||||||
BPF_H = 0x8
|
BPF_H = 0x8
|
||||||
BPF_IMM = 0x0
|
BPF_IMM = 0x0
|
||||||
BPF_IND = 0x40
|
BPF_IND = 0x40
|
||||||
|
@ -137,6 +146,7 @@ const (
|
||||||
BPF_OR = 0x40
|
BPF_OR = 0x40
|
||||||
BPF_RELEASE = 0x30bb6
|
BPF_RELEASE = 0x30bb6
|
||||||
BPF_RET = 0x6
|
BPF_RET = 0x6
|
||||||
|
BPF_RND = 0xc0
|
||||||
BPF_RSH = 0x70
|
BPF_RSH = 0x70
|
||||||
BPF_ST = 0x2
|
BPF_ST = 0x2
|
||||||
BPF_STX = 0x3
|
BPF_STX = 0x3
|
||||||
|
@ -177,7 +187,65 @@ const (
|
||||||
CTL_KERN = 0x1
|
CTL_KERN = 0x1
|
||||||
CTL_MAXNAME = 0xc
|
CTL_MAXNAME = 0xc
|
||||||
CTL_NET = 0x4
|
CTL_NET = 0x4
|
||||||
|
DIOCADDQUEUE = 0xc110445d
|
||||||
|
DIOCADDRULE = 0xcd604404
|
||||||
|
DIOCADDSTATE = 0xc1084425
|
||||||
|
DIOCCHANGERULE = 0xcd60441a
|
||||||
|
DIOCCLRIFFLAG = 0xc028445a
|
||||||
|
DIOCCLRSRCNODES = 0x20004455
|
||||||
|
DIOCCLRSTATES = 0xc0e04412
|
||||||
|
DIOCCLRSTATUS = 0xc0284416
|
||||||
|
DIOCGETLIMIT = 0xc0084427
|
||||||
|
DIOCGETQSTATS = 0xc1204460
|
||||||
|
DIOCGETQUEUE = 0xc110445f
|
||||||
|
DIOCGETQUEUES = 0xc110445e
|
||||||
|
DIOCGETRULE = 0xcd604407
|
||||||
|
DIOCGETRULES = 0xcd604406
|
||||||
|
DIOCGETRULESET = 0xc444443b
|
||||||
|
DIOCGETRULESETS = 0xc444443a
|
||||||
|
DIOCGETSRCNODES = 0xc0104454
|
||||||
|
DIOCGETSTATE = 0xc1084413
|
||||||
|
DIOCGETSTATES = 0xc0104419
|
||||||
|
DIOCGETSTATUS = 0xc1e84415
|
||||||
|
DIOCGETSYNFLWATS = 0xc0084463
|
||||||
|
DIOCGETTIMEOUT = 0xc008441e
|
||||||
|
DIOCIGETIFACES = 0xc0284457
|
||||||
|
DIOCKILLSRCNODES = 0xc080445b
|
||||||
|
DIOCKILLSTATES = 0xc0e04429
|
||||||
|
DIOCNATLOOK = 0xc0504417
|
||||||
|
DIOCOSFPADD = 0xc088444f
|
||||||
DIOCOSFPFLUSH = 0x2000444e
|
DIOCOSFPFLUSH = 0x2000444e
|
||||||
|
DIOCOSFPGET = 0xc0884450
|
||||||
|
DIOCRADDADDRS = 0xc4504443
|
||||||
|
DIOCRADDTABLES = 0xc450443d
|
||||||
|
DIOCRCLRADDRS = 0xc4504442
|
||||||
|
DIOCRCLRASTATS = 0xc4504448
|
||||||
|
DIOCRCLRTABLES = 0xc450443c
|
||||||
|
DIOCRCLRTSTATS = 0xc4504441
|
||||||
|
DIOCRDELADDRS = 0xc4504444
|
||||||
|
DIOCRDELTABLES = 0xc450443e
|
||||||
|
DIOCRGETADDRS = 0xc4504446
|
||||||
|
DIOCRGETASTATS = 0xc4504447
|
||||||
|
DIOCRGETTABLES = 0xc450443f
|
||||||
|
DIOCRGETTSTATS = 0xc4504440
|
||||||
|
DIOCRINADEFINE = 0xc450444d
|
||||||
|
DIOCRSETADDRS = 0xc4504445
|
||||||
|
DIOCRSETTFLAGS = 0xc450444a
|
||||||
|
DIOCRTSTADDRS = 0xc4504449
|
||||||
|
DIOCSETDEBUG = 0xc0044418
|
||||||
|
DIOCSETHOSTID = 0xc0044456
|
||||||
|
DIOCSETIFFLAG = 0xc0284459
|
||||||
|
DIOCSETLIMIT = 0xc0084428
|
||||||
|
DIOCSETREASS = 0xc004445c
|
||||||
|
DIOCSETSTATUSIF = 0xc0284414
|
||||||
|
DIOCSETSYNCOOKIES = 0xc0014462
|
||||||
|
DIOCSETSYNFLWATS = 0xc0084461
|
||||||
|
DIOCSETTIMEOUT = 0xc008441d
|
||||||
|
DIOCSTART = 0x20004401
|
||||||
|
DIOCSTOP = 0x20004402
|
||||||
|
DIOCXBEGIN = 0xc0104451
|
||||||
|
DIOCXCOMMIT = 0xc0104452
|
||||||
|
DIOCXROLLBACK = 0xc0104453
|
||||||
DLT_ARCNET = 0x7
|
DLT_ARCNET = 0x7
|
||||||
DLT_ATM_RFC1483 = 0xb
|
DLT_ATM_RFC1483 = 0xb
|
||||||
DLT_AX25 = 0x3
|
DLT_AX25 = 0x3
|
||||||
|
@ -240,6 +308,8 @@ const (
|
||||||
EMUL_ENABLED = 0x1
|
EMUL_ENABLED = 0x1
|
||||||
EMUL_NATIVE = 0x2
|
EMUL_NATIVE = 0x2
|
||||||
ENDRUNDISC = 0x9
|
ENDRUNDISC = 0x9
|
||||||
|
ETH64_8021_RSVD_MASK = 0xfffffffffff0
|
||||||
|
ETH64_8021_RSVD_PREFIX = 0x180c2000000
|
||||||
ETHERMIN = 0x2e
|
ETHERMIN = 0x2e
|
||||||
ETHERMTU = 0x5dc
|
ETHERMTU = 0x5dc
|
||||||
ETHERTYPE_8023 = 0x4
|
ETHERTYPE_8023 = 0x4
|
||||||
|
@ -292,6 +362,7 @@ const (
|
||||||
ETHERTYPE_DN = 0x6003
|
ETHERTYPE_DN = 0x6003
|
||||||
ETHERTYPE_DOGFIGHT = 0x1989
|
ETHERTYPE_DOGFIGHT = 0x1989
|
||||||
ETHERTYPE_DSMD = 0x8039
|
ETHERTYPE_DSMD = 0x8039
|
||||||
|
ETHERTYPE_EAPOL = 0x888e
|
||||||
ETHERTYPE_ECMA = 0x803
|
ETHERTYPE_ECMA = 0x803
|
||||||
ETHERTYPE_ENCRYPT = 0x803d
|
ETHERTYPE_ENCRYPT = 0x803d
|
||||||
ETHERTYPE_ES = 0x805d
|
ETHERTYPE_ES = 0x805d
|
||||||
|
@ -323,6 +394,7 @@ const (
|
||||||
ETHERTYPE_LLDP = 0x88cc
|
ETHERTYPE_LLDP = 0x88cc
|
||||||
ETHERTYPE_LOGICRAFT = 0x8148
|
ETHERTYPE_LOGICRAFT = 0x8148
|
||||||
ETHERTYPE_LOOPBACK = 0x9000
|
ETHERTYPE_LOOPBACK = 0x9000
|
||||||
|
ETHERTYPE_MACSEC = 0x88e5
|
||||||
ETHERTYPE_MATRA = 0x807a
|
ETHERTYPE_MATRA = 0x807a
|
||||||
ETHERTYPE_MAX = 0xffff
|
ETHERTYPE_MAX = 0xffff
|
||||||
ETHERTYPE_MERIT = 0x807c
|
ETHERTYPE_MERIT = 0x807c
|
||||||
|
@ -351,15 +423,17 @@ const (
|
||||||
ETHERTYPE_NCD = 0x8149
|
ETHERTYPE_NCD = 0x8149
|
||||||
ETHERTYPE_NESTAR = 0x8006
|
ETHERTYPE_NESTAR = 0x8006
|
||||||
ETHERTYPE_NETBEUI = 0x8191
|
ETHERTYPE_NETBEUI = 0x8191
|
||||||
|
ETHERTYPE_NHRP = 0x2001
|
||||||
ETHERTYPE_NOVELL = 0x8138
|
ETHERTYPE_NOVELL = 0x8138
|
||||||
ETHERTYPE_NS = 0x600
|
ETHERTYPE_NS = 0x600
|
||||||
ETHERTYPE_NSAT = 0x601
|
ETHERTYPE_NSAT = 0x601
|
||||||
ETHERTYPE_NSCOMPAT = 0x807
|
ETHERTYPE_NSCOMPAT = 0x807
|
||||||
|
ETHERTYPE_NSH = 0x984f
|
||||||
ETHERTYPE_NTRAILER = 0x10
|
ETHERTYPE_NTRAILER = 0x10
|
||||||
ETHERTYPE_OS9 = 0x7007
|
ETHERTYPE_OS9 = 0x7007
|
||||||
ETHERTYPE_OS9NET = 0x7009
|
ETHERTYPE_OS9NET = 0x7009
|
||||||
ETHERTYPE_PACER = 0x80c6
|
ETHERTYPE_PACER = 0x80c6
|
||||||
ETHERTYPE_PAE = 0x888e
|
ETHERTYPE_PBB = 0x88e7
|
||||||
ETHERTYPE_PCS = 0x4242
|
ETHERTYPE_PCS = 0x4242
|
||||||
ETHERTYPE_PLANNING = 0x8044
|
ETHERTYPE_PLANNING = 0x8044
|
||||||
ETHERTYPE_PPP = 0x880b
|
ETHERTYPE_PPP = 0x880b
|
||||||
|
@ -441,10 +515,11 @@ const (
|
||||||
ETHER_VLAN_ENCAP_LEN = 0x4
|
ETHER_VLAN_ENCAP_LEN = 0x4
|
||||||
EVFILT_AIO = -0x3
|
EVFILT_AIO = -0x3
|
||||||
EVFILT_DEVICE = -0x8
|
EVFILT_DEVICE = -0x8
|
||||||
|
EVFILT_EXCEPT = -0x9
|
||||||
EVFILT_PROC = -0x5
|
EVFILT_PROC = -0x5
|
||||||
EVFILT_READ = -0x1
|
EVFILT_READ = -0x1
|
||||||
EVFILT_SIGNAL = -0x6
|
EVFILT_SIGNAL = -0x6
|
||||||
EVFILT_SYSCOUNT = 0x8
|
EVFILT_SYSCOUNT = 0x9
|
||||||
EVFILT_TIMER = -0x7
|
EVFILT_TIMER = -0x7
|
||||||
EVFILT_VNODE = -0x4
|
EVFILT_VNODE = -0x4
|
||||||
EVFILT_WRITE = -0x2
|
EVFILT_WRITE = -0x2
|
||||||
|
@ -466,7 +541,7 @@ const (
|
||||||
EV_FLAG1 = 0x2000
|
EV_FLAG1 = 0x2000
|
||||||
EV_ONESHOT = 0x10
|
EV_ONESHOT = 0x10
|
||||||
EV_RECEIPT = 0x40
|
EV_RECEIPT = 0x40
|
||||||
EV_SYSFLAGS = 0xf000
|
EV_SYSFLAGS = 0xf800
|
||||||
EXTA = 0x4b00
|
EXTA = 0x4b00
|
||||||
EXTB = 0x9600
|
EXTB = 0x9600
|
||||||
EXTPROC = 0x800
|
EXTPROC = 0x800
|
||||||
|
@ -732,6 +807,7 @@ const (
|
||||||
IFT_VOICEOVERCABLE = 0xc6
|
IFT_VOICEOVERCABLE = 0xc6
|
||||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
IFT_VOICEOVERFRAMERELAY = 0x99
|
||||||
IFT_VOICEOVERIP = 0x68
|
IFT_VOICEOVERIP = 0x68
|
||||||
|
IFT_WIREGUARD = 0xfb
|
||||||
IFT_X213 = 0x5d
|
IFT_X213 = 0x5d
|
||||||
IFT_X25 = 0x5
|
IFT_X25 = 0x5
|
||||||
IFT_X25DDN = 0x4
|
IFT_X25DDN = 0x4
|
||||||
|
@ -797,9 +873,11 @@ const (
|
||||||
IPPROTO_RAW = 0xff
|
IPPROTO_RAW = 0xff
|
||||||
IPPROTO_ROUTING = 0x2b
|
IPPROTO_ROUTING = 0x2b
|
||||||
IPPROTO_RSVP = 0x2e
|
IPPROTO_RSVP = 0x2e
|
||||||
|
IPPROTO_SCTP = 0x84
|
||||||
IPPROTO_TCP = 0x6
|
IPPROTO_TCP = 0x6
|
||||||
IPPROTO_TP = 0x1d
|
IPPROTO_TP = 0x1d
|
||||||
IPPROTO_UDP = 0x11
|
IPPROTO_UDP = 0x11
|
||||||
|
IPPROTO_UDPLITE = 0x88
|
||||||
IPV6_AUTH_LEVEL = 0x35
|
IPV6_AUTH_LEVEL = 0x35
|
||||||
IPV6_AUTOFLOWLABEL = 0x3b
|
IPV6_AUTOFLOWLABEL = 0x3b
|
||||||
IPV6_CHECKSUM = 0x1a
|
IPV6_CHECKSUM = 0x1a
|
||||||
|
@ -906,6 +984,9 @@ const (
|
||||||
IP_TTL = 0x4
|
IP_TTL = 0x4
|
||||||
ISIG = 0x80
|
ISIG = 0x80
|
||||||
ISTRIP = 0x20
|
ISTRIP = 0x20
|
||||||
|
ITIMER_PROF = 0x2
|
||||||
|
ITIMER_REAL = 0x0
|
||||||
|
ITIMER_VIRTUAL = 0x1
|
||||||
IUCLC = 0x1000
|
IUCLC = 0x1000
|
||||||
IXANY = 0x800
|
IXANY = 0x800
|
||||||
IXOFF = 0x400
|
IXOFF = 0x400
|
||||||
|
@ -970,12 +1051,26 @@ const (
|
||||||
MNT_ROOTFS = 0x4000
|
MNT_ROOTFS = 0x4000
|
||||||
MNT_SOFTDEP = 0x4000000
|
MNT_SOFTDEP = 0x4000000
|
||||||
MNT_STALLED = 0x100000
|
MNT_STALLED = 0x100000
|
||||||
|
MNT_SWAPPABLE = 0x200000
|
||||||
MNT_SYNCHRONOUS = 0x2
|
MNT_SYNCHRONOUS = 0x2
|
||||||
MNT_UPDATE = 0x10000
|
MNT_UPDATE = 0x10000
|
||||||
MNT_VISFLAGMASK = 0x400ffff
|
MNT_VISFLAGMASK = 0x400ffff
|
||||||
MNT_WAIT = 0x1
|
MNT_WAIT = 0x1
|
||||||
MNT_WANTRDWR = 0x2000000
|
MNT_WANTRDWR = 0x2000000
|
||||||
MNT_WXALLOWED = 0x800
|
MNT_WXALLOWED = 0x800
|
||||||
|
MOUNT_AFS = "afs"
|
||||||
|
MOUNT_CD9660 = "cd9660"
|
||||||
|
MOUNT_EXT2FS = "ext2fs"
|
||||||
|
MOUNT_FFS = "ffs"
|
||||||
|
MOUNT_FUSEFS = "fuse"
|
||||||
|
MOUNT_MFS = "mfs"
|
||||||
|
MOUNT_MSDOS = "msdos"
|
||||||
|
MOUNT_NCPFS = "ncpfs"
|
||||||
|
MOUNT_NFS = "nfs"
|
||||||
|
MOUNT_NTFS = "ntfs"
|
||||||
|
MOUNT_TMPFS = "tmpfs"
|
||||||
|
MOUNT_UDF = "udf"
|
||||||
|
MOUNT_UFS = "ffs"
|
||||||
MSG_BCAST = 0x100
|
MSG_BCAST = 0x100
|
||||||
MSG_CMSG_CLOEXEC = 0x800
|
MSG_CMSG_CLOEXEC = 0x800
|
||||||
MSG_CTRUNC = 0x20
|
MSG_CTRUNC = 0x20
|
||||||
|
@ -988,6 +1083,7 @@ const (
|
||||||
MSG_PEEK = 0x2
|
MSG_PEEK = 0x2
|
||||||
MSG_TRUNC = 0x10
|
MSG_TRUNC = 0x10
|
||||||
MSG_WAITALL = 0x40
|
MSG_WAITALL = 0x40
|
||||||
|
MSG_WAITFORONE = 0x1000
|
||||||
MS_ASYNC = 0x1
|
MS_ASYNC = 0x1
|
||||||
MS_INVALIDATE = 0x4
|
MS_INVALIDATE = 0x4
|
||||||
MS_SYNC = 0x2
|
MS_SYNC = 0x2
|
||||||
|
@ -996,7 +1092,8 @@ const (
|
||||||
NET_RT_FLAGS = 0x2
|
NET_RT_FLAGS = 0x2
|
||||||
NET_RT_IFLIST = 0x3
|
NET_RT_IFLIST = 0x3
|
||||||
NET_RT_IFNAMES = 0x6
|
NET_RT_IFNAMES = 0x6
|
||||||
NET_RT_MAXID = 0x7
|
NET_RT_MAXID = 0x8
|
||||||
|
NET_RT_SOURCE = 0x7
|
||||||
NET_RT_STATS = 0x4
|
NET_RT_STATS = 0x4
|
||||||
NET_RT_TABLE = 0x5
|
NET_RT_TABLE = 0x5
|
||||||
NFDBITS = 0x20
|
NFDBITS = 0x20
|
||||||
|
@ -1013,6 +1110,7 @@ const (
|
||||||
NOTE_FORK = 0x40000000
|
NOTE_FORK = 0x40000000
|
||||||
NOTE_LINK = 0x10
|
NOTE_LINK = 0x10
|
||||||
NOTE_LOWAT = 0x1
|
NOTE_LOWAT = 0x1
|
||||||
|
NOTE_OOB = 0x4
|
||||||
NOTE_PCTRLMASK = 0xf0000000
|
NOTE_PCTRLMASK = 0xf0000000
|
||||||
NOTE_PDATAMASK = 0xfffff
|
NOTE_PDATAMASK = 0xfffff
|
||||||
NOTE_RENAME = 0x20
|
NOTE_RENAME = 0x20
|
||||||
|
@ -1130,9 +1228,11 @@ const (
|
||||||
RTF_STATIC = 0x800
|
RTF_STATIC = 0x800
|
||||||
RTF_UP = 0x1
|
RTF_UP = 0x1
|
||||||
RTF_USETRAILERS = 0x8000
|
RTF_USETRAILERS = 0x8000
|
||||||
|
RTM_80211INFO = 0x15
|
||||||
RTM_ADD = 0x1
|
RTM_ADD = 0x1
|
||||||
RTM_BFD = 0x12
|
RTM_BFD = 0x12
|
||||||
RTM_CHANGE = 0x3
|
RTM_CHANGE = 0x3
|
||||||
|
RTM_CHGADDRATTR = 0x14
|
||||||
RTM_DELADDR = 0xd
|
RTM_DELADDR = 0xd
|
||||||
RTM_DELETE = 0x2
|
RTM_DELETE = 0x2
|
||||||
RTM_DESYNC = 0x10
|
RTM_DESYNC = 0x10
|
||||||
|
@ -1140,7 +1240,6 @@ const (
|
||||||
RTM_IFANNOUNCE = 0xf
|
RTM_IFANNOUNCE = 0xf
|
||||||
RTM_IFINFO = 0xe
|
RTM_IFINFO = 0xe
|
||||||
RTM_INVALIDATE = 0x11
|
RTM_INVALIDATE = 0x11
|
||||||
RTM_LOCK = 0x8
|
|
||||||
RTM_LOSING = 0x5
|
RTM_LOSING = 0x5
|
||||||
RTM_MAXSIZE = 0x800
|
RTM_MAXSIZE = 0x800
|
||||||
RTM_MISS = 0x7
|
RTM_MISS = 0x7
|
||||||
|
@ -1148,7 +1247,7 @@ const (
|
||||||
RTM_PROPOSAL = 0x13
|
RTM_PROPOSAL = 0x13
|
||||||
RTM_REDIRECT = 0x6
|
RTM_REDIRECT = 0x6
|
||||||
RTM_RESOLVE = 0xb
|
RTM_RESOLVE = 0xb
|
||||||
RTM_RTTUNIT = 0xf4240
|
RTM_SOURCE = 0x16
|
||||||
RTM_VERSION = 0x5
|
RTM_VERSION = 0x5
|
||||||
RTV_EXPIRE = 0x4
|
RTV_EXPIRE = 0x4
|
||||||
RTV_HOPCOUNT = 0x2
|
RTV_HOPCOUNT = 0x2
|
||||||
|
@ -1166,6 +1265,9 @@ const (
|
||||||
RUSAGE_THREAD = 0x1
|
RUSAGE_THREAD = 0x1
|
||||||
SCM_RIGHTS = 0x1
|
SCM_RIGHTS = 0x1
|
||||||
SCM_TIMESTAMP = 0x4
|
SCM_TIMESTAMP = 0x4
|
||||||
|
SEEK_CUR = 0x1
|
||||||
|
SEEK_END = 0x2
|
||||||
|
SEEK_SET = 0x0
|
||||||
SHUT_RD = 0x0
|
SHUT_RD = 0x0
|
||||||
SHUT_RDWR = 0x2
|
SHUT_RDWR = 0x2
|
||||||
SHUT_WR = 0x1
|
SHUT_WR = 0x1
|
||||||
|
@ -1182,35 +1284,37 @@ const (
|
||||||
SIOCBRDGDELS = 0x80606942
|
SIOCBRDGDELS = 0x80606942
|
||||||
SIOCBRDGFLUSH = 0x80606948
|
SIOCBRDGFLUSH = 0x80606948
|
||||||
SIOCBRDGFRL = 0x808c694e
|
SIOCBRDGFRL = 0x808c694e
|
||||||
SIOCBRDGGCACHE = 0xc0186941
|
SIOCBRDGGCACHE = 0xc0146941
|
||||||
SIOCBRDGGFD = 0xc0186952
|
SIOCBRDGGFD = 0xc0146952
|
||||||
SIOCBRDGGHT = 0xc0186951
|
SIOCBRDGGHT = 0xc0146951
|
||||||
SIOCBRDGGIFFLGS = 0xc060693e
|
SIOCBRDGGIFFLGS = 0xc060693e
|
||||||
SIOCBRDGGMA = 0xc0186953
|
SIOCBRDGGMA = 0xc0146953
|
||||||
SIOCBRDGGPARAM = 0xc0406958
|
SIOCBRDGGPARAM = 0xc0406958
|
||||||
SIOCBRDGGPRI = 0xc0186950
|
SIOCBRDGGPRI = 0xc0146950
|
||||||
SIOCBRDGGRL = 0xc030694f
|
SIOCBRDGGRL = 0xc030694f
|
||||||
SIOCBRDGGTO = 0xc0186946
|
SIOCBRDGGTO = 0xc0146946
|
||||||
SIOCBRDGIFS = 0xc0606942
|
SIOCBRDGIFS = 0xc0606942
|
||||||
SIOCBRDGRTS = 0xc0206943
|
SIOCBRDGRTS = 0xc0206943
|
||||||
SIOCBRDGSADDR = 0xc1286944
|
SIOCBRDGSADDR = 0xc1286944
|
||||||
SIOCBRDGSCACHE = 0x80186940
|
SIOCBRDGSCACHE = 0x80146940
|
||||||
SIOCBRDGSFD = 0x80186952
|
SIOCBRDGSFD = 0x80146952
|
||||||
SIOCBRDGSHT = 0x80186951
|
SIOCBRDGSHT = 0x80146951
|
||||||
SIOCBRDGSIFCOST = 0x80606955
|
SIOCBRDGSIFCOST = 0x80606955
|
||||||
SIOCBRDGSIFFLGS = 0x8060693f
|
SIOCBRDGSIFFLGS = 0x8060693f
|
||||||
SIOCBRDGSIFPRIO = 0x80606954
|
SIOCBRDGSIFPRIO = 0x80606954
|
||||||
SIOCBRDGSIFPROT = 0x8060694a
|
SIOCBRDGSIFPROT = 0x8060694a
|
||||||
SIOCBRDGSMA = 0x80186953
|
SIOCBRDGSMA = 0x80146953
|
||||||
SIOCBRDGSPRI = 0x80186950
|
SIOCBRDGSPRI = 0x80146950
|
||||||
SIOCBRDGSPROTO = 0x8018695a
|
SIOCBRDGSPROTO = 0x8014695a
|
||||||
SIOCBRDGSTO = 0x80186945
|
SIOCBRDGSTO = 0x80146945
|
||||||
SIOCBRDGSTXHC = 0x80186959
|
SIOCBRDGSTXHC = 0x80146959
|
||||||
|
SIOCDELLABEL = 0x80206997
|
||||||
SIOCDELMULTI = 0x80206932
|
SIOCDELMULTI = 0x80206932
|
||||||
SIOCDIFADDR = 0x80206919
|
SIOCDIFADDR = 0x80206919
|
||||||
SIOCDIFGROUP = 0x80286989
|
SIOCDIFGROUP = 0x80286989
|
||||||
SIOCDIFPARENT = 0x802069b4
|
SIOCDIFPARENT = 0x802069b4
|
||||||
SIOCDIFPHYADDR = 0x80206949
|
SIOCDIFPHYADDR = 0x80206949
|
||||||
|
SIOCDPWE3NEIGHBOR = 0x802069de
|
||||||
SIOCDVNETID = 0x802069af
|
SIOCDVNETID = 0x802069af
|
||||||
SIOCGETKALIVE = 0xc01869a4
|
SIOCGETKALIVE = 0xc01869a4
|
||||||
SIOCGETLABEL = 0x8020699a
|
SIOCGETLABEL = 0x8020699a
|
||||||
|
@ -1229,6 +1333,7 @@ const (
|
||||||
SIOCGIFFLAGS = 0xc0206911
|
SIOCGIFFLAGS = 0xc0206911
|
||||||
SIOCGIFGATTR = 0xc028698b
|
SIOCGIFGATTR = 0xc028698b
|
||||||
SIOCGIFGENERIC = 0xc020693a
|
SIOCGIFGENERIC = 0xc020693a
|
||||||
|
SIOCGIFGLIST = 0xc028698d
|
||||||
SIOCGIFGMEMB = 0xc028698a
|
SIOCGIFGMEMB = 0xc028698a
|
||||||
SIOCGIFGROUP = 0xc0286988
|
SIOCGIFGROUP = 0xc0286988
|
||||||
SIOCGIFHARDMTU = 0xc02069a5
|
SIOCGIFHARDMTU = 0xc02069a5
|
||||||
|
@ -1243,13 +1348,21 @@ const (
|
||||||
SIOCGIFRDOMAIN = 0xc02069a0
|
SIOCGIFRDOMAIN = 0xc02069a0
|
||||||
SIOCGIFRTLABEL = 0xc0206983
|
SIOCGIFRTLABEL = 0xc0206983
|
||||||
SIOCGIFRXR = 0x802069aa
|
SIOCGIFRXR = 0x802069aa
|
||||||
|
SIOCGIFSFFPAGE = 0xc1126939
|
||||||
SIOCGIFXFLAGS = 0xc020699e
|
SIOCGIFXFLAGS = 0xc020699e
|
||||||
SIOCGLIFPHYADDR = 0xc218694b
|
SIOCGLIFPHYADDR = 0xc218694b
|
||||||
SIOCGLIFPHYDF = 0xc02069c2
|
SIOCGLIFPHYDF = 0xc02069c2
|
||||||
|
SIOCGLIFPHYECN = 0xc02069c8
|
||||||
SIOCGLIFPHYRTABLE = 0xc02069a2
|
SIOCGLIFPHYRTABLE = 0xc02069a2
|
||||||
SIOCGLIFPHYTTL = 0xc02069a9
|
SIOCGLIFPHYTTL = 0xc02069a9
|
||||||
SIOCGPGRP = 0x40047309
|
SIOCGPGRP = 0x40047309
|
||||||
|
SIOCGPWE3 = 0xc0206998
|
||||||
|
SIOCGPWE3CTRLWORD = 0xc02069dc
|
||||||
|
SIOCGPWE3FAT = 0xc02069dd
|
||||||
|
SIOCGPWE3NEIGHBOR = 0xc21869de
|
||||||
|
SIOCGRXHPRIO = 0xc02069db
|
||||||
SIOCGSPPPPARAMS = 0xc0206994
|
SIOCGSPPPPARAMS = 0xc0206994
|
||||||
|
SIOCGTXHPRIO = 0xc02069c6
|
||||||
SIOCGUMBINFO = 0xc02069be
|
SIOCGUMBINFO = 0xc02069be
|
||||||
SIOCGUMBPARAM = 0xc02069c0
|
SIOCGUMBPARAM = 0xc02069c0
|
||||||
SIOCGVH = 0xc02069f6
|
SIOCGVH = 0xc02069f6
|
||||||
|
@ -1287,19 +1400,20 @@ const (
|
||||||
SIOCSIFXFLAGS = 0x8020699d
|
SIOCSIFXFLAGS = 0x8020699d
|
||||||
SIOCSLIFPHYADDR = 0x8218694a
|
SIOCSLIFPHYADDR = 0x8218694a
|
||||||
SIOCSLIFPHYDF = 0x802069c1
|
SIOCSLIFPHYDF = 0x802069c1
|
||||||
|
SIOCSLIFPHYECN = 0x802069c7
|
||||||
SIOCSLIFPHYRTABLE = 0x802069a1
|
SIOCSLIFPHYRTABLE = 0x802069a1
|
||||||
SIOCSLIFPHYTTL = 0x802069a8
|
SIOCSLIFPHYTTL = 0x802069a8
|
||||||
SIOCSPGRP = 0x80047308
|
SIOCSPGRP = 0x80047308
|
||||||
|
SIOCSPWE3CTRLWORD = 0x802069dc
|
||||||
|
SIOCSPWE3FAT = 0x802069dd
|
||||||
|
SIOCSPWE3NEIGHBOR = 0x821869de
|
||||||
|
SIOCSRXHPRIO = 0x802069db
|
||||||
SIOCSSPPPPARAMS = 0x80206993
|
SIOCSSPPPPARAMS = 0x80206993
|
||||||
|
SIOCSTXHPRIO = 0x802069c5
|
||||||
SIOCSUMBPARAM = 0x802069bf
|
SIOCSUMBPARAM = 0x802069bf
|
||||||
SIOCSVH = 0xc02069f5
|
SIOCSVH = 0xc02069f5
|
||||||
SIOCSVNETFLOWID = 0x802069c3
|
SIOCSVNETFLOWID = 0x802069c3
|
||||||
SIOCSVNETID = 0x802069a6
|
SIOCSVNETID = 0x802069a6
|
||||||
SIOCSWGDPID = 0xc018695b
|
|
||||||
SIOCSWGMAXFLOW = 0xc0186960
|
|
||||||
SIOCSWGMAXGROUP = 0xc018695d
|
|
||||||
SIOCSWSDPID = 0x8018695c
|
|
||||||
SIOCSWSPORTNO = 0xc060695f
|
|
||||||
SOCK_CLOEXEC = 0x8000
|
SOCK_CLOEXEC = 0x8000
|
||||||
SOCK_DGRAM = 0x2
|
SOCK_DGRAM = 0x2
|
||||||
SOCK_DNS = 0x1000
|
SOCK_DNS = 0x1000
|
||||||
|
@ -1314,6 +1428,7 @@ const (
|
||||||
SO_BINDANY = 0x1000
|
SO_BINDANY = 0x1000
|
||||||
SO_BROADCAST = 0x20
|
SO_BROADCAST = 0x20
|
||||||
SO_DEBUG = 0x1
|
SO_DEBUG = 0x1
|
||||||
|
SO_DOMAIN = 0x1024
|
||||||
SO_DONTROUTE = 0x10
|
SO_DONTROUTE = 0x10
|
||||||
SO_ERROR = 0x1007
|
SO_ERROR = 0x1007
|
||||||
SO_KEEPALIVE = 0x8
|
SO_KEEPALIVE = 0x8
|
||||||
|
@ -1321,6 +1436,7 @@ const (
|
||||||
SO_NETPROC = 0x1020
|
SO_NETPROC = 0x1020
|
||||||
SO_OOBINLINE = 0x100
|
SO_OOBINLINE = 0x100
|
||||||
SO_PEERCRED = 0x1022
|
SO_PEERCRED = 0x1022
|
||||||
|
SO_PROTOCOL = 0x1025
|
||||||
SO_RCVBUF = 0x1002
|
SO_RCVBUF = 0x1002
|
||||||
SO_RCVLOWAT = 0x1004
|
SO_RCVLOWAT = 0x1004
|
||||||
SO_RCVTIMEO = 0x1006
|
SO_RCVTIMEO = 0x1006
|
||||||
|
@ -1370,7 +1486,18 @@ const (
|
||||||
TCOFLUSH = 0x2
|
TCOFLUSH = 0x2
|
||||||
TCOOFF = 0x1
|
TCOOFF = 0x1
|
||||||
TCOON = 0x2
|
TCOON = 0x2
|
||||||
TCP_MAXBURST = 0x4
|
TCPOPT_EOL = 0x0
|
||||||
|
TCPOPT_MAXSEG = 0x2
|
||||||
|
TCPOPT_NOP = 0x1
|
||||||
|
TCPOPT_SACK = 0x5
|
||||||
|
TCPOPT_SACK_HDR = 0x1010500
|
||||||
|
TCPOPT_SACK_PERMITTED = 0x4
|
||||||
|
TCPOPT_SACK_PERMIT_HDR = 0x1010402
|
||||||
|
TCPOPT_SIGNATURE = 0x13
|
||||||
|
TCPOPT_TIMESTAMP = 0x8
|
||||||
|
TCPOPT_TSTAMP_HDR = 0x101080a
|
||||||
|
TCPOPT_WINDOW = 0x3
|
||||||
|
TCP_INFO = 0x9
|
||||||
TCP_MAXSEG = 0x2
|
TCP_MAXSEG = 0x2
|
||||||
TCP_MAXWIN = 0xffff
|
TCP_MAXWIN = 0xffff
|
||||||
TCP_MAX_SACK = 0x3
|
TCP_MAX_SACK = 0x3
|
||||||
|
@ -1379,8 +1506,11 @@ const (
|
||||||
TCP_MSS = 0x200
|
TCP_MSS = 0x200
|
||||||
TCP_NODELAY = 0x1
|
TCP_NODELAY = 0x1
|
||||||
TCP_NOPUSH = 0x10
|
TCP_NOPUSH = 0x10
|
||||||
|
TCP_SACKHOLE_LIMIT = 0x80
|
||||||
TCP_SACK_ENABLE = 0x8
|
TCP_SACK_ENABLE = 0x8
|
||||||
TCSAFLUSH = 0x2
|
TCSAFLUSH = 0x2
|
||||||
|
TIMER_ABSTIME = 0x1
|
||||||
|
TIMER_RELTIME = 0x0
|
||||||
TIOCCBRK = 0x2000747a
|
TIOCCBRK = 0x2000747a
|
||||||
TIOCCDTR = 0x20007478
|
TIOCCDTR = 0x20007478
|
||||||
TIOCCHKVERAUTH = 0x2000741e
|
TIOCCHKVERAUTH = 0x2000741e
|
||||||
|
@ -1445,7 +1575,6 @@ const (
|
||||||
TIOCSPGRP = 0x80047476
|
TIOCSPGRP = 0x80047476
|
||||||
TIOCSTART = 0x2000746e
|
TIOCSTART = 0x2000746e
|
||||||
TIOCSTAT = 0x20007465
|
TIOCSTAT = 0x20007465
|
||||||
TIOCSTI = 0x80017472
|
|
||||||
TIOCSTOP = 0x2000746f
|
TIOCSTOP = 0x2000746f
|
||||||
TIOCSTSTAMP = 0x8008745a
|
TIOCSTSTAMP = 0x8008745a
|
||||||
TIOCSWINSZ = 0x80087467
|
TIOCSWINSZ = 0x80087467
|
||||||
|
@ -1467,7 +1596,8 @@ const (
|
||||||
VMIN = 0x10
|
VMIN = 0x10
|
||||||
VM_ANONMIN = 0x7
|
VM_ANONMIN = 0x7
|
||||||
VM_LOADAVG = 0x2
|
VM_LOADAVG = 0x2
|
||||||
VM_MAXID = 0xc
|
VM_MALLOC_CONF = 0xc
|
||||||
|
VM_MAXID = 0xd
|
||||||
VM_MAXSLP = 0xa
|
VM_MAXSLP = 0xa
|
||||||
VM_METER = 0x1
|
VM_METER = 0x1
|
||||||
VM_NKMEMPAGES = 0x6
|
VM_NKMEMPAGES = 0x6
|
||||||
|
@ -1745,7 +1875,7 @@ var signalList = [...]struct {
|
||||||
{3, "SIGQUIT", "quit"},
|
{3, "SIGQUIT", "quit"},
|
||||||
{4, "SIGILL", "illegal instruction"},
|
{4, "SIGILL", "illegal instruction"},
|
||||||
{5, "SIGTRAP", "trace/BPT trap"},
|
{5, "SIGTRAP", "trace/BPT trap"},
|
||||||
{6, "SIGABRT", "abort trap"},
|
{6, "SIGIOT", "abort trap"},
|
||||||
{7, "SIGEMT", "EMT trap"},
|
{7, "SIGEMT", "EMT trap"},
|
||||||
{8, "SIGFPE", "floating point exception"},
|
{8, "SIGFPE", "floating point exception"},
|
||||||
{9, "SIGKILL", "killed"},
|
{9, "SIGKILL", "killed"},
|
||||||
|
@ -1772,4 +1902,5 @@ var signalList = [...]struct {
|
||||||
{30, "SIGUSR1", "user defined signal 1"},
|
{30, "SIGUSR1", "user defined signal 1"},
|
||||||
{31, "SIGUSR2", "user defined signal 2"},
|
{31, "SIGUSR2", "user defined signal 2"},
|
||||||
{32, "SIGTHR", "thread AST"},
|
{32, "SIGTHR", "thread AST"},
|
||||||
|
{28672, "SIGSTKSZ", "unknown signal"},
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,7 @@ const (
|
||||||
AF_SNA = 0xb
|
AF_SNA = 0xb
|
||||||
AF_UNIX = 0x1
|
AF_UNIX = 0x1
|
||||||
AF_UNSPEC = 0x0
|
AF_UNSPEC = 0x0
|
||||||
|
ALTWERASE = 0x200
|
||||||
ARPHRD_ETHER = 0x1
|
ARPHRD_ETHER = 0x1
|
||||||
ARPHRD_FRELAY = 0xf
|
ARPHRD_FRELAY = 0xf
|
||||||
ARPHRD_IEEE1394 = 0x18
|
ARPHRD_IEEE1394 = 0x18
|
||||||
|
@ -82,7 +83,7 @@ const (
|
||||||
BIOCGFILDROP = 0x40044278
|
BIOCGFILDROP = 0x40044278
|
||||||
BIOCGHDRCMPLT = 0x40044274
|
BIOCGHDRCMPLT = 0x40044274
|
||||||
BIOCGRSIG = 0x40044273
|
BIOCGRSIG = 0x40044273
|
||||||
BIOCGRTIMEOUT = 0x400c426e
|
BIOCGRTIMEOUT = 0x4010426e
|
||||||
BIOCGSTATS = 0x4008426f
|
BIOCGSTATS = 0x4008426f
|
||||||
BIOCIMMEDIATE = 0x80044270
|
BIOCIMMEDIATE = 0x80044270
|
||||||
BIOCLOCK = 0x20004276
|
BIOCLOCK = 0x20004276
|
||||||
|
@ -96,7 +97,7 @@ const (
|
||||||
BIOCSFILDROP = 0x80044279
|
BIOCSFILDROP = 0x80044279
|
||||||
BIOCSHDRCMPLT = 0x80044275
|
BIOCSHDRCMPLT = 0x80044275
|
||||||
BIOCSRSIG = 0x80044272
|
BIOCSRSIG = 0x80044272
|
||||||
BIOCSRTIMEOUT = 0x800c426d
|
BIOCSRTIMEOUT = 0x8010426d
|
||||||
BIOCVERSION = 0x40044271
|
BIOCVERSION = 0x40044271
|
||||||
BPF_A = 0x10
|
BPF_A = 0x10
|
||||||
BPF_ABS = 0x20
|
BPF_ABS = 0x20
|
||||||
|
@ -108,6 +109,15 @@ const (
|
||||||
BPF_DIRECTION_IN = 0x1
|
BPF_DIRECTION_IN = 0x1
|
||||||
BPF_DIRECTION_OUT = 0x2
|
BPF_DIRECTION_OUT = 0x2
|
||||||
BPF_DIV = 0x30
|
BPF_DIV = 0x30
|
||||||
|
BPF_FILDROP_CAPTURE = 0x1
|
||||||
|
BPF_FILDROP_DROP = 0x2
|
||||||
|
BPF_FILDROP_PASS = 0x0
|
||||||
|
BPF_F_DIR_IN = 0x10
|
||||||
|
BPF_F_DIR_MASK = 0x30
|
||||||
|
BPF_F_DIR_OUT = 0x20
|
||||||
|
BPF_F_DIR_SHIFT = 0x4
|
||||||
|
BPF_F_FLOWID = 0x8
|
||||||
|
BPF_F_PRI_MASK = 0x7
|
||||||
BPF_H = 0x8
|
BPF_H = 0x8
|
||||||
BPF_IMM = 0x0
|
BPF_IMM = 0x0
|
||||||
BPF_IND = 0x40
|
BPF_IND = 0x40
|
||||||
|
@ -136,6 +146,7 @@ const (
|
||||||
BPF_OR = 0x40
|
BPF_OR = 0x40
|
||||||
BPF_RELEASE = 0x30bb6
|
BPF_RELEASE = 0x30bb6
|
||||||
BPF_RET = 0x6
|
BPF_RET = 0x6
|
||||||
|
BPF_RND = 0xc0
|
||||||
BPF_RSH = 0x70
|
BPF_RSH = 0x70
|
||||||
BPF_ST = 0x2
|
BPF_ST = 0x2
|
||||||
BPF_STX = 0x3
|
BPF_STX = 0x3
|
||||||
|
@ -147,6 +158,12 @@ const (
|
||||||
BRKINT = 0x2
|
BRKINT = 0x2
|
||||||
CFLUSH = 0xf
|
CFLUSH = 0xf
|
||||||
CLOCAL = 0x8000
|
CLOCAL = 0x8000
|
||||||
|
CLOCK_BOOTTIME = 0x6
|
||||||
|
CLOCK_MONOTONIC = 0x3
|
||||||
|
CLOCK_PROCESS_CPUTIME_ID = 0x2
|
||||||
|
CLOCK_REALTIME = 0x0
|
||||||
|
CLOCK_THREAD_CPUTIME_ID = 0x4
|
||||||
|
CLOCK_UPTIME = 0x5
|
||||||
CPUSTATES = 0x6
|
CPUSTATES = 0x6
|
||||||
CP_IDLE = 0x5
|
CP_IDLE = 0x5
|
||||||
CP_INTR = 0x4
|
CP_INTR = 0x4
|
||||||
|
@ -170,7 +187,65 @@ const (
|
||||||
CTL_KERN = 0x1
|
CTL_KERN = 0x1
|
||||||
CTL_MAXNAME = 0xc
|
CTL_MAXNAME = 0xc
|
||||||
CTL_NET = 0x4
|
CTL_NET = 0x4
|
||||||
|
DIOCADDQUEUE = 0xc100445d
|
||||||
|
DIOCADDRULE = 0xcce04404
|
||||||
|
DIOCADDSTATE = 0xc1084425
|
||||||
|
DIOCCHANGERULE = 0xcce0441a
|
||||||
|
DIOCCLRIFFLAG = 0xc024445a
|
||||||
|
DIOCCLRSRCNODES = 0x20004455
|
||||||
|
DIOCCLRSTATES = 0xc0d04412
|
||||||
|
DIOCCLRSTATUS = 0xc0244416
|
||||||
|
DIOCGETLIMIT = 0xc0084427
|
||||||
|
DIOCGETQSTATS = 0xc1084460
|
||||||
|
DIOCGETQUEUE = 0xc100445f
|
||||||
|
DIOCGETQUEUES = 0xc100445e
|
||||||
|
DIOCGETRULE = 0xcce04407
|
||||||
|
DIOCGETRULES = 0xcce04406
|
||||||
|
DIOCGETRULESET = 0xc444443b
|
||||||
|
DIOCGETRULESETS = 0xc444443a
|
||||||
|
DIOCGETSRCNODES = 0xc0084454
|
||||||
|
DIOCGETSTATE = 0xc1084413
|
||||||
|
DIOCGETSTATES = 0xc0084419
|
||||||
|
DIOCGETSTATUS = 0xc1e84415
|
||||||
|
DIOCGETSYNFLWATS = 0xc0084463
|
||||||
|
DIOCGETTIMEOUT = 0xc008441e
|
||||||
|
DIOCIGETIFACES = 0xc0244457
|
||||||
|
DIOCKILLSRCNODES = 0xc068445b
|
||||||
|
DIOCKILLSTATES = 0xc0d04429
|
||||||
|
DIOCNATLOOK = 0xc0504417
|
||||||
|
DIOCOSFPADD = 0xc088444f
|
||||||
DIOCOSFPFLUSH = 0x2000444e
|
DIOCOSFPFLUSH = 0x2000444e
|
||||||
|
DIOCOSFPGET = 0xc0884450
|
||||||
|
DIOCRADDADDRS = 0xc44c4443
|
||||||
|
DIOCRADDTABLES = 0xc44c443d
|
||||||
|
DIOCRCLRADDRS = 0xc44c4442
|
||||||
|
DIOCRCLRASTATS = 0xc44c4448
|
||||||
|
DIOCRCLRTABLES = 0xc44c443c
|
||||||
|
DIOCRCLRTSTATS = 0xc44c4441
|
||||||
|
DIOCRDELADDRS = 0xc44c4444
|
||||||
|
DIOCRDELTABLES = 0xc44c443e
|
||||||
|
DIOCRGETADDRS = 0xc44c4446
|
||||||
|
DIOCRGETASTATS = 0xc44c4447
|
||||||
|
DIOCRGETTABLES = 0xc44c443f
|
||||||
|
DIOCRGETTSTATS = 0xc44c4440
|
||||||
|
DIOCRINADEFINE = 0xc44c444d
|
||||||
|
DIOCRSETADDRS = 0xc44c4445
|
||||||
|
DIOCRSETTFLAGS = 0xc44c444a
|
||||||
|
DIOCRTSTADDRS = 0xc44c4449
|
||||||
|
DIOCSETDEBUG = 0xc0044418
|
||||||
|
DIOCSETHOSTID = 0xc0044456
|
||||||
|
DIOCSETIFFLAG = 0xc0244459
|
||||||
|
DIOCSETLIMIT = 0xc0084428
|
||||||
|
DIOCSETREASS = 0xc004445c
|
||||||
|
DIOCSETSTATUSIF = 0xc0244414
|
||||||
|
DIOCSETSYNCOOKIES = 0xc0014462
|
||||||
|
DIOCSETSYNFLWATS = 0xc0084461
|
||||||
|
DIOCSETTIMEOUT = 0xc008441d
|
||||||
|
DIOCSTART = 0x20004401
|
||||||
|
DIOCSTOP = 0x20004402
|
||||||
|
DIOCXBEGIN = 0xc00c4451
|
||||||
|
DIOCXCOMMIT = 0xc00c4452
|
||||||
|
DIOCXROLLBACK = 0xc00c4453
|
||||||
DLT_ARCNET = 0x7
|
DLT_ARCNET = 0x7
|
||||||
DLT_ATM_RFC1483 = 0xb
|
DLT_ATM_RFC1483 = 0xb
|
||||||
DLT_AX25 = 0x3
|
DLT_AX25 = 0x3
|
||||||
|
@ -186,6 +261,7 @@ const (
|
||||||
DLT_LOOP = 0xc
|
DLT_LOOP = 0xc
|
||||||
DLT_MPLS = 0xdb
|
DLT_MPLS = 0xdb
|
||||||
DLT_NULL = 0x0
|
DLT_NULL = 0x0
|
||||||
|
DLT_OPENFLOW = 0x10b
|
||||||
DLT_PFLOG = 0x75
|
DLT_PFLOG = 0x75
|
||||||
DLT_PFSYNC = 0x12
|
DLT_PFSYNC = 0x12
|
||||||
DLT_PPP = 0x9
|
DLT_PPP = 0x9
|
||||||
|
@ -196,6 +272,23 @@ const (
|
||||||
DLT_RAW = 0xe
|
DLT_RAW = 0xe
|
||||||
DLT_SLIP = 0x8
|
DLT_SLIP = 0x8
|
||||||
DLT_SLIP_BSDOS = 0xf
|
DLT_SLIP_BSDOS = 0xf
|
||||||
|
DLT_USBPCAP = 0xf9
|
||||||
|
DLT_USER0 = 0x93
|
||||||
|
DLT_USER1 = 0x94
|
||||||
|
DLT_USER10 = 0x9d
|
||||||
|
DLT_USER11 = 0x9e
|
||||||
|
DLT_USER12 = 0x9f
|
||||||
|
DLT_USER13 = 0xa0
|
||||||
|
DLT_USER14 = 0xa1
|
||||||
|
DLT_USER15 = 0xa2
|
||||||
|
DLT_USER2 = 0x95
|
||||||
|
DLT_USER3 = 0x96
|
||||||
|
DLT_USER4 = 0x97
|
||||||
|
DLT_USER5 = 0x98
|
||||||
|
DLT_USER6 = 0x99
|
||||||
|
DLT_USER7 = 0x9a
|
||||||
|
DLT_USER8 = 0x9b
|
||||||
|
DLT_USER9 = 0x9c
|
||||||
DT_BLK = 0x6
|
DT_BLK = 0x6
|
||||||
DT_CHR = 0x2
|
DT_CHR = 0x2
|
||||||
DT_DIR = 0x4
|
DT_DIR = 0x4
|
||||||
|
@ -215,6 +308,8 @@ const (
|
||||||
EMUL_ENABLED = 0x1
|
EMUL_ENABLED = 0x1
|
||||||
EMUL_NATIVE = 0x2
|
EMUL_NATIVE = 0x2
|
||||||
ENDRUNDISC = 0x9
|
ENDRUNDISC = 0x9
|
||||||
|
ETH64_8021_RSVD_MASK = 0xfffffffffff0
|
||||||
|
ETH64_8021_RSVD_PREFIX = 0x180c2000000
|
||||||
ETHERMIN = 0x2e
|
ETHERMIN = 0x2e
|
||||||
ETHERMTU = 0x5dc
|
ETHERMTU = 0x5dc
|
||||||
ETHERTYPE_8023 = 0x4
|
ETHERTYPE_8023 = 0x4
|
||||||
|
@ -267,6 +362,7 @@ const (
|
||||||
ETHERTYPE_DN = 0x6003
|
ETHERTYPE_DN = 0x6003
|
||||||
ETHERTYPE_DOGFIGHT = 0x1989
|
ETHERTYPE_DOGFIGHT = 0x1989
|
||||||
ETHERTYPE_DSMD = 0x8039
|
ETHERTYPE_DSMD = 0x8039
|
||||||
|
ETHERTYPE_EAPOL = 0x888e
|
||||||
ETHERTYPE_ECMA = 0x803
|
ETHERTYPE_ECMA = 0x803
|
||||||
ETHERTYPE_ENCRYPT = 0x803d
|
ETHERTYPE_ENCRYPT = 0x803d
|
||||||
ETHERTYPE_ES = 0x805d
|
ETHERTYPE_ES = 0x805d
|
||||||
|
@ -298,6 +394,7 @@ const (
|
||||||
ETHERTYPE_LLDP = 0x88cc
|
ETHERTYPE_LLDP = 0x88cc
|
||||||
ETHERTYPE_LOGICRAFT = 0x8148
|
ETHERTYPE_LOGICRAFT = 0x8148
|
||||||
ETHERTYPE_LOOPBACK = 0x9000
|
ETHERTYPE_LOOPBACK = 0x9000
|
||||||
|
ETHERTYPE_MACSEC = 0x88e5
|
||||||
ETHERTYPE_MATRA = 0x807a
|
ETHERTYPE_MATRA = 0x807a
|
||||||
ETHERTYPE_MAX = 0xffff
|
ETHERTYPE_MAX = 0xffff
|
||||||
ETHERTYPE_MERIT = 0x807c
|
ETHERTYPE_MERIT = 0x807c
|
||||||
|
@ -326,15 +423,17 @@ const (
|
||||||
ETHERTYPE_NCD = 0x8149
|
ETHERTYPE_NCD = 0x8149
|
||||||
ETHERTYPE_NESTAR = 0x8006
|
ETHERTYPE_NESTAR = 0x8006
|
||||||
ETHERTYPE_NETBEUI = 0x8191
|
ETHERTYPE_NETBEUI = 0x8191
|
||||||
|
ETHERTYPE_NHRP = 0x2001
|
||||||
ETHERTYPE_NOVELL = 0x8138
|
ETHERTYPE_NOVELL = 0x8138
|
||||||
ETHERTYPE_NS = 0x600
|
ETHERTYPE_NS = 0x600
|
||||||
ETHERTYPE_NSAT = 0x601
|
ETHERTYPE_NSAT = 0x601
|
||||||
ETHERTYPE_NSCOMPAT = 0x807
|
ETHERTYPE_NSCOMPAT = 0x807
|
||||||
|
ETHERTYPE_NSH = 0x984f
|
||||||
ETHERTYPE_NTRAILER = 0x10
|
ETHERTYPE_NTRAILER = 0x10
|
||||||
ETHERTYPE_OS9 = 0x7007
|
ETHERTYPE_OS9 = 0x7007
|
||||||
ETHERTYPE_OS9NET = 0x7009
|
ETHERTYPE_OS9NET = 0x7009
|
||||||
ETHERTYPE_PACER = 0x80c6
|
ETHERTYPE_PACER = 0x80c6
|
||||||
ETHERTYPE_PAE = 0x888e
|
ETHERTYPE_PBB = 0x88e7
|
||||||
ETHERTYPE_PCS = 0x4242
|
ETHERTYPE_PCS = 0x4242
|
||||||
ETHERTYPE_PLANNING = 0x8044
|
ETHERTYPE_PLANNING = 0x8044
|
||||||
ETHERTYPE_PPP = 0x880b
|
ETHERTYPE_PPP = 0x880b
|
||||||
|
@ -409,28 +508,40 @@ const (
|
||||||
ETHER_CRC_POLY_LE = 0xedb88320
|
ETHER_CRC_POLY_LE = 0xedb88320
|
||||||
ETHER_HDR_LEN = 0xe
|
ETHER_HDR_LEN = 0xe
|
||||||
ETHER_MAX_DIX_LEN = 0x600
|
ETHER_MAX_DIX_LEN = 0x600
|
||||||
|
ETHER_MAX_HARDMTU_LEN = 0xff9b
|
||||||
ETHER_MAX_LEN = 0x5ee
|
ETHER_MAX_LEN = 0x5ee
|
||||||
ETHER_MIN_LEN = 0x40
|
ETHER_MIN_LEN = 0x40
|
||||||
ETHER_TYPE_LEN = 0x2
|
ETHER_TYPE_LEN = 0x2
|
||||||
ETHER_VLAN_ENCAP_LEN = 0x4
|
ETHER_VLAN_ENCAP_LEN = 0x4
|
||||||
EVFILT_AIO = -0x3
|
EVFILT_AIO = -0x3
|
||||||
|
EVFILT_DEVICE = -0x8
|
||||||
|
EVFILT_EXCEPT = -0x9
|
||||||
EVFILT_PROC = -0x5
|
EVFILT_PROC = -0x5
|
||||||
EVFILT_READ = -0x1
|
EVFILT_READ = -0x1
|
||||||
EVFILT_SIGNAL = -0x6
|
EVFILT_SIGNAL = -0x6
|
||||||
EVFILT_SYSCOUNT = 0x7
|
EVFILT_SYSCOUNT = 0x9
|
||||||
EVFILT_TIMER = -0x7
|
EVFILT_TIMER = -0x7
|
||||||
EVFILT_VNODE = -0x4
|
EVFILT_VNODE = -0x4
|
||||||
EVFILT_WRITE = -0x2
|
EVFILT_WRITE = -0x2
|
||||||
|
EVL_ENCAPLEN = 0x4
|
||||||
|
EVL_PRIO_BITS = 0xd
|
||||||
|
EVL_PRIO_MAX = 0x7
|
||||||
|
EVL_VLID_MASK = 0xfff
|
||||||
|
EVL_VLID_MAX = 0xffe
|
||||||
|
EVL_VLID_MIN = 0x1
|
||||||
|
EVL_VLID_NULL = 0x0
|
||||||
EV_ADD = 0x1
|
EV_ADD = 0x1
|
||||||
EV_CLEAR = 0x20
|
EV_CLEAR = 0x20
|
||||||
EV_DELETE = 0x2
|
EV_DELETE = 0x2
|
||||||
EV_DISABLE = 0x8
|
EV_DISABLE = 0x8
|
||||||
|
EV_DISPATCH = 0x80
|
||||||
EV_ENABLE = 0x4
|
EV_ENABLE = 0x4
|
||||||
EV_EOF = 0x8000
|
EV_EOF = 0x8000
|
||||||
EV_ERROR = 0x4000
|
EV_ERROR = 0x4000
|
||||||
EV_FLAG1 = 0x2000
|
EV_FLAG1 = 0x2000
|
||||||
EV_ONESHOT = 0x10
|
EV_ONESHOT = 0x10
|
||||||
EV_SYSFLAGS = 0xf000
|
EV_RECEIPT = 0x40
|
||||||
|
EV_SYSFLAGS = 0xf800
|
||||||
EXTA = 0x4b00
|
EXTA = 0x4b00
|
||||||
EXTB = 0x9600
|
EXTB = 0x9600
|
||||||
EXTPROC = 0x800
|
EXTPROC = 0x800
|
||||||
|
@ -443,6 +554,8 @@ const (
|
||||||
F_GETFL = 0x3
|
F_GETFL = 0x3
|
||||||
F_GETLK = 0x7
|
F_GETLK = 0x7
|
||||||
F_GETOWN = 0x5
|
F_GETOWN = 0x5
|
||||||
|
F_ISATTY = 0xb
|
||||||
|
F_OK = 0x0
|
||||||
F_RDLCK = 0x1
|
F_RDLCK = 0x1
|
||||||
F_SETFD = 0x2
|
F_SETFD = 0x2
|
||||||
F_SETFL = 0x4
|
F_SETFL = 0x4
|
||||||
|
@ -459,7 +572,6 @@ const (
|
||||||
IEXTEN = 0x400
|
IEXTEN = 0x400
|
||||||
IFAN_ARRIVAL = 0x0
|
IFAN_ARRIVAL = 0x0
|
||||||
IFAN_DEPARTURE = 0x1
|
IFAN_DEPARTURE = 0x1
|
||||||
IFA_ROUTE = 0x1
|
|
||||||
IFF_ALLMULTI = 0x200
|
IFF_ALLMULTI = 0x200
|
||||||
IFF_BROADCAST = 0x2
|
IFF_BROADCAST = 0x2
|
||||||
IFF_CANTCHANGE = 0x8e52
|
IFF_CANTCHANGE = 0x8e52
|
||||||
|
@ -470,12 +582,12 @@ const (
|
||||||
IFF_LOOPBACK = 0x8
|
IFF_LOOPBACK = 0x8
|
||||||
IFF_MULTICAST = 0x8000
|
IFF_MULTICAST = 0x8000
|
||||||
IFF_NOARP = 0x80
|
IFF_NOARP = 0x80
|
||||||
IFF_NOTRAILERS = 0x20
|
|
||||||
IFF_OACTIVE = 0x400
|
IFF_OACTIVE = 0x400
|
||||||
IFF_POINTOPOINT = 0x10
|
IFF_POINTOPOINT = 0x10
|
||||||
IFF_PROMISC = 0x100
|
IFF_PROMISC = 0x100
|
||||||
IFF_RUNNING = 0x40
|
IFF_RUNNING = 0x40
|
||||||
IFF_SIMPLEX = 0x800
|
IFF_SIMPLEX = 0x800
|
||||||
|
IFF_STATICARP = 0x20
|
||||||
IFF_UP = 0x1
|
IFF_UP = 0x1
|
||||||
IFNAMSIZ = 0x10
|
IFNAMSIZ = 0x10
|
||||||
IFT_1822 = 0x2
|
IFT_1822 = 0x2
|
||||||
|
@ -604,6 +716,7 @@ const (
|
||||||
IFT_LINEGROUP = 0xd2
|
IFT_LINEGROUP = 0xd2
|
||||||
IFT_LOCALTALK = 0x2a
|
IFT_LOCALTALK = 0x2a
|
||||||
IFT_LOOP = 0x18
|
IFT_LOOP = 0x18
|
||||||
|
IFT_MBIM = 0xfa
|
||||||
IFT_MEDIAMAILOVERIP = 0x8b
|
IFT_MEDIAMAILOVERIP = 0x8b
|
||||||
IFT_MFSIGLINK = 0xa7
|
IFT_MFSIGLINK = 0xa7
|
||||||
IFT_MIOX25 = 0x26
|
IFT_MIOX25 = 0x26
|
||||||
|
@ -694,6 +807,7 @@ const (
|
||||||
IFT_VOICEOVERCABLE = 0xc6
|
IFT_VOICEOVERCABLE = 0xc6
|
||||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
IFT_VOICEOVERFRAMERELAY = 0x99
|
||||||
IFT_VOICEOVERIP = 0x68
|
IFT_VOICEOVERIP = 0x68
|
||||||
|
IFT_WIREGUARD = 0xfb
|
||||||
IFT_X213 = 0x5d
|
IFT_X213 = 0x5d
|
||||||
IFT_X25 = 0x5
|
IFT_X25 = 0x5
|
||||||
IFT_X25DDN = 0x4
|
IFT_X25DDN = 0x4
|
||||||
|
@ -728,8 +842,6 @@ const (
|
||||||
IPPROTO_AH = 0x33
|
IPPROTO_AH = 0x33
|
||||||
IPPROTO_CARP = 0x70
|
IPPROTO_CARP = 0x70
|
||||||
IPPROTO_DIVERT = 0x102
|
IPPROTO_DIVERT = 0x102
|
||||||
IPPROTO_DIVERT_INIT = 0x2
|
|
||||||
IPPROTO_DIVERT_RESP = 0x1
|
|
||||||
IPPROTO_DONE = 0x101
|
IPPROTO_DONE = 0x101
|
||||||
IPPROTO_DSTOPTS = 0x3c
|
IPPROTO_DSTOPTS = 0x3c
|
||||||
IPPROTO_EGP = 0x8
|
IPPROTO_EGP = 0x8
|
||||||
|
@ -761,9 +873,11 @@ const (
|
||||||
IPPROTO_RAW = 0xff
|
IPPROTO_RAW = 0xff
|
||||||
IPPROTO_ROUTING = 0x2b
|
IPPROTO_ROUTING = 0x2b
|
||||||
IPPROTO_RSVP = 0x2e
|
IPPROTO_RSVP = 0x2e
|
||||||
|
IPPROTO_SCTP = 0x84
|
||||||
IPPROTO_TCP = 0x6
|
IPPROTO_TCP = 0x6
|
||||||
IPPROTO_TP = 0x1d
|
IPPROTO_TP = 0x1d
|
||||||
IPPROTO_UDP = 0x11
|
IPPROTO_UDP = 0x11
|
||||||
|
IPPROTO_UDPLITE = 0x88
|
||||||
IPV6_AUTH_LEVEL = 0x35
|
IPV6_AUTH_LEVEL = 0x35
|
||||||
IPV6_AUTOFLOWLABEL = 0x3b
|
IPV6_AUTOFLOWLABEL = 0x3b
|
||||||
IPV6_CHECKSUM = 0x1a
|
IPV6_CHECKSUM = 0x1a
|
||||||
|
@ -786,6 +900,7 @@ const (
|
||||||
IPV6_LEAVE_GROUP = 0xd
|
IPV6_LEAVE_GROUP = 0xd
|
||||||
IPV6_MAXHLIM = 0xff
|
IPV6_MAXHLIM = 0xff
|
||||||
IPV6_MAXPACKET = 0xffff
|
IPV6_MAXPACKET = 0xffff
|
||||||
|
IPV6_MINHOPCOUNT = 0x41
|
||||||
IPV6_MMTU = 0x500
|
IPV6_MMTU = 0x500
|
||||||
IPV6_MULTICAST_HOPS = 0xa
|
IPV6_MULTICAST_HOPS = 0xa
|
||||||
IPV6_MULTICAST_IF = 0x9
|
IPV6_MULTICAST_IF = 0x9
|
||||||
|
@ -825,12 +940,12 @@ const (
|
||||||
IP_DEFAULT_MULTICAST_LOOP = 0x1
|
IP_DEFAULT_MULTICAST_LOOP = 0x1
|
||||||
IP_DEFAULT_MULTICAST_TTL = 0x1
|
IP_DEFAULT_MULTICAST_TTL = 0x1
|
||||||
IP_DF = 0x4000
|
IP_DF = 0x4000
|
||||||
IP_DIVERTFL = 0x1022
|
|
||||||
IP_DROP_MEMBERSHIP = 0xd
|
IP_DROP_MEMBERSHIP = 0xd
|
||||||
IP_ESP_NETWORK_LEVEL = 0x16
|
IP_ESP_NETWORK_LEVEL = 0x16
|
||||||
IP_ESP_TRANS_LEVEL = 0x15
|
IP_ESP_TRANS_LEVEL = 0x15
|
||||||
IP_HDRINCL = 0x2
|
IP_HDRINCL = 0x2
|
||||||
IP_IPCOMP_LEVEL = 0x1d
|
IP_IPCOMP_LEVEL = 0x1d
|
||||||
|
IP_IPDEFTTL = 0x25
|
||||||
IP_IPSECFLOWINFO = 0x24
|
IP_IPSECFLOWINFO = 0x24
|
||||||
IP_IPSEC_LOCAL_AUTH = 0x1b
|
IP_IPSEC_LOCAL_AUTH = 0x1b
|
||||||
IP_IPSEC_LOCAL_CRED = 0x19
|
IP_IPSEC_LOCAL_CRED = 0x19
|
||||||
|
@ -864,10 +979,15 @@ const (
|
||||||
IP_RETOPTS = 0x8
|
IP_RETOPTS = 0x8
|
||||||
IP_RF = 0x8000
|
IP_RF = 0x8000
|
||||||
IP_RTABLE = 0x1021
|
IP_RTABLE = 0x1021
|
||||||
|
IP_SENDSRCADDR = 0x7
|
||||||
IP_TOS = 0x3
|
IP_TOS = 0x3
|
||||||
IP_TTL = 0x4
|
IP_TTL = 0x4
|
||||||
ISIG = 0x80
|
ISIG = 0x80
|
||||||
ISTRIP = 0x20
|
ISTRIP = 0x20
|
||||||
|
ITIMER_PROF = 0x2
|
||||||
|
ITIMER_REAL = 0x0
|
||||||
|
ITIMER_VIRTUAL = 0x1
|
||||||
|
IUCLC = 0x1000
|
||||||
IXANY = 0x800
|
IXANY = 0x800
|
||||||
IXOFF = 0x400
|
IXOFF = 0x400
|
||||||
IXON = 0x200
|
IXON = 0x200
|
||||||
|
@ -922,6 +1042,7 @@ const (
|
||||||
MNT_NOATIME = 0x8000
|
MNT_NOATIME = 0x8000
|
||||||
MNT_NODEV = 0x10
|
MNT_NODEV = 0x10
|
||||||
MNT_NOEXEC = 0x4
|
MNT_NOEXEC = 0x4
|
||||||
|
MNT_NOPERM = 0x20
|
||||||
MNT_NOSUID = 0x8
|
MNT_NOSUID = 0x8
|
||||||
MNT_NOWAIT = 0x2
|
MNT_NOWAIT = 0x2
|
||||||
MNT_QUOTA = 0x2000
|
MNT_QUOTA = 0x2000
|
||||||
|
@ -929,12 +1050,27 @@ const (
|
||||||
MNT_RELOAD = 0x40000
|
MNT_RELOAD = 0x40000
|
||||||
MNT_ROOTFS = 0x4000
|
MNT_ROOTFS = 0x4000
|
||||||
MNT_SOFTDEP = 0x4000000
|
MNT_SOFTDEP = 0x4000000
|
||||||
|
MNT_STALLED = 0x100000
|
||||||
|
MNT_SWAPPABLE = 0x200000
|
||||||
MNT_SYNCHRONOUS = 0x2
|
MNT_SYNCHRONOUS = 0x2
|
||||||
MNT_UPDATE = 0x10000
|
MNT_UPDATE = 0x10000
|
||||||
MNT_VISFLAGMASK = 0x400ffff
|
MNT_VISFLAGMASK = 0x400ffff
|
||||||
MNT_WAIT = 0x1
|
MNT_WAIT = 0x1
|
||||||
MNT_WANTRDWR = 0x2000000
|
MNT_WANTRDWR = 0x2000000
|
||||||
MNT_WXALLOWED = 0x800
|
MNT_WXALLOWED = 0x800
|
||||||
|
MOUNT_AFS = "afs"
|
||||||
|
MOUNT_CD9660 = "cd9660"
|
||||||
|
MOUNT_EXT2FS = "ext2fs"
|
||||||
|
MOUNT_FFS = "ffs"
|
||||||
|
MOUNT_FUSEFS = "fuse"
|
||||||
|
MOUNT_MFS = "mfs"
|
||||||
|
MOUNT_MSDOS = "msdos"
|
||||||
|
MOUNT_NCPFS = "ncpfs"
|
||||||
|
MOUNT_NFS = "nfs"
|
||||||
|
MOUNT_NTFS = "ntfs"
|
||||||
|
MOUNT_TMPFS = "tmpfs"
|
||||||
|
MOUNT_UDF = "udf"
|
||||||
|
MOUNT_UFS = "ffs"
|
||||||
MSG_BCAST = 0x100
|
MSG_BCAST = 0x100
|
||||||
MSG_CMSG_CLOEXEC = 0x800
|
MSG_CMSG_CLOEXEC = 0x800
|
||||||
MSG_CTRUNC = 0x20
|
MSG_CTRUNC = 0x20
|
||||||
|
@ -947,6 +1083,7 @@ const (
|
||||||
MSG_PEEK = 0x2
|
MSG_PEEK = 0x2
|
||||||
MSG_TRUNC = 0x10
|
MSG_TRUNC = 0x10
|
||||||
MSG_WAITALL = 0x40
|
MSG_WAITALL = 0x40
|
||||||
|
MSG_WAITFORONE = 0x1000
|
||||||
MS_ASYNC = 0x1
|
MS_ASYNC = 0x1
|
||||||
MS_INVALIDATE = 0x4
|
MS_INVALIDATE = 0x4
|
||||||
MS_SYNC = 0x2
|
MS_SYNC = 0x2
|
||||||
|
@ -954,12 +1091,16 @@ const (
|
||||||
NET_RT_DUMP = 0x1
|
NET_RT_DUMP = 0x1
|
||||||
NET_RT_FLAGS = 0x2
|
NET_RT_FLAGS = 0x2
|
||||||
NET_RT_IFLIST = 0x3
|
NET_RT_IFLIST = 0x3
|
||||||
NET_RT_MAXID = 0x6
|
NET_RT_IFNAMES = 0x6
|
||||||
|
NET_RT_MAXID = 0x8
|
||||||
|
NET_RT_SOURCE = 0x7
|
||||||
NET_RT_STATS = 0x4
|
NET_RT_STATS = 0x4
|
||||||
NET_RT_TABLE = 0x5
|
NET_RT_TABLE = 0x5
|
||||||
NFDBITS = 0x20
|
NFDBITS = 0x20
|
||||||
NOFLSH = 0x80000000
|
NOFLSH = 0x80000000
|
||||||
|
NOKERNINFO = 0x2000000
|
||||||
NOTE_ATTRIB = 0x8
|
NOTE_ATTRIB = 0x8
|
||||||
|
NOTE_CHANGE = 0x1
|
||||||
NOTE_CHILD = 0x4
|
NOTE_CHILD = 0x4
|
||||||
NOTE_DELETE = 0x1
|
NOTE_DELETE = 0x1
|
||||||
NOTE_EOF = 0x2
|
NOTE_EOF = 0x2
|
||||||
|
@ -969,6 +1110,7 @@ const (
|
||||||
NOTE_FORK = 0x40000000
|
NOTE_FORK = 0x40000000
|
||||||
NOTE_LINK = 0x10
|
NOTE_LINK = 0x10
|
||||||
NOTE_LOWAT = 0x1
|
NOTE_LOWAT = 0x1
|
||||||
|
NOTE_OOB = 0x4
|
||||||
NOTE_PCTRLMASK = 0xf0000000
|
NOTE_PCTRLMASK = 0xf0000000
|
||||||
NOTE_PDATAMASK = 0xfffff
|
NOTE_PDATAMASK = 0xfffff
|
||||||
NOTE_RENAME = 0x20
|
NOTE_RENAME = 0x20
|
||||||
|
@ -978,11 +1120,13 @@ const (
|
||||||
NOTE_TRUNCATE = 0x80
|
NOTE_TRUNCATE = 0x80
|
||||||
NOTE_WRITE = 0x2
|
NOTE_WRITE = 0x2
|
||||||
OCRNL = 0x10
|
OCRNL = 0x10
|
||||||
|
OLCUC = 0x20
|
||||||
ONLCR = 0x2
|
ONLCR = 0x2
|
||||||
ONLRET = 0x80
|
ONLRET = 0x80
|
||||||
ONOCR = 0x40
|
ONOCR = 0x40
|
||||||
ONOEOT = 0x8
|
ONOEOT = 0x8
|
||||||
OPOST = 0x1
|
OPOST = 0x1
|
||||||
|
OXTABS = 0x4
|
||||||
O_ACCMODE = 0x3
|
O_ACCMODE = 0x3
|
||||||
O_APPEND = 0x8
|
O_APPEND = 0x8
|
||||||
O_ASYNC = 0x40
|
O_ASYNC = 0x40
|
||||||
|
@ -1027,19 +1171,25 @@ const (
|
||||||
RLIMIT_STACK = 0x3
|
RLIMIT_STACK = 0x3
|
||||||
RLIM_INFINITY = 0x7fffffffffffffff
|
RLIM_INFINITY = 0x7fffffffffffffff
|
||||||
RTAX_AUTHOR = 0x6
|
RTAX_AUTHOR = 0x6
|
||||||
|
RTAX_BFD = 0xb
|
||||||
RTAX_BRD = 0x7
|
RTAX_BRD = 0x7
|
||||||
|
RTAX_DNS = 0xc
|
||||||
RTAX_DST = 0x0
|
RTAX_DST = 0x0
|
||||||
RTAX_GATEWAY = 0x1
|
RTAX_GATEWAY = 0x1
|
||||||
RTAX_GENMASK = 0x3
|
RTAX_GENMASK = 0x3
|
||||||
RTAX_IFA = 0x5
|
RTAX_IFA = 0x5
|
||||||
RTAX_IFP = 0x4
|
RTAX_IFP = 0x4
|
||||||
RTAX_LABEL = 0xa
|
RTAX_LABEL = 0xa
|
||||||
RTAX_MAX = 0xb
|
RTAX_MAX = 0xf
|
||||||
RTAX_NETMASK = 0x2
|
RTAX_NETMASK = 0x2
|
||||||
|
RTAX_SEARCH = 0xe
|
||||||
RTAX_SRC = 0x8
|
RTAX_SRC = 0x8
|
||||||
RTAX_SRCMASK = 0x9
|
RTAX_SRCMASK = 0x9
|
||||||
|
RTAX_STATIC = 0xd
|
||||||
RTA_AUTHOR = 0x40
|
RTA_AUTHOR = 0x40
|
||||||
|
RTA_BFD = 0x800
|
||||||
RTA_BRD = 0x80
|
RTA_BRD = 0x80
|
||||||
|
RTA_DNS = 0x1000
|
||||||
RTA_DST = 0x1
|
RTA_DST = 0x1
|
||||||
RTA_GATEWAY = 0x2
|
RTA_GATEWAY = 0x2
|
||||||
RTA_GENMASK = 0x8
|
RTA_GENMASK = 0x8
|
||||||
|
@ -1047,24 +1197,29 @@ const (
|
||||||
RTA_IFP = 0x10
|
RTA_IFP = 0x10
|
||||||
RTA_LABEL = 0x400
|
RTA_LABEL = 0x400
|
||||||
RTA_NETMASK = 0x4
|
RTA_NETMASK = 0x4
|
||||||
|
RTA_SEARCH = 0x4000
|
||||||
RTA_SRC = 0x100
|
RTA_SRC = 0x100
|
||||||
RTA_SRCMASK = 0x200
|
RTA_SRCMASK = 0x200
|
||||||
|
RTA_STATIC = 0x2000
|
||||||
RTF_ANNOUNCE = 0x4000
|
RTF_ANNOUNCE = 0x4000
|
||||||
|
RTF_BFD = 0x1000000
|
||||||
RTF_BLACKHOLE = 0x1000
|
RTF_BLACKHOLE = 0x1000
|
||||||
RTF_BROADCAST = 0x400000
|
RTF_BROADCAST = 0x400000
|
||||||
|
RTF_CACHED = 0x20000
|
||||||
RTF_CLONED = 0x10000
|
RTF_CLONED = 0x10000
|
||||||
RTF_CLONING = 0x100
|
RTF_CLONING = 0x100
|
||||||
|
RTF_CONNECTED = 0x800000
|
||||||
RTF_DONE = 0x40
|
RTF_DONE = 0x40
|
||||||
RTF_DYNAMIC = 0x10
|
RTF_DYNAMIC = 0x10
|
||||||
RTF_FMASK = 0x70f808
|
RTF_FMASK = 0x110fc08
|
||||||
RTF_GATEWAY = 0x2
|
RTF_GATEWAY = 0x2
|
||||||
RTF_HOST = 0x4
|
RTF_HOST = 0x4
|
||||||
RTF_LLINFO = 0x400
|
RTF_LLINFO = 0x400
|
||||||
RTF_LOCAL = 0x200000
|
RTF_LOCAL = 0x200000
|
||||||
RTF_MASK = 0x80
|
|
||||||
RTF_MODIFIED = 0x20
|
RTF_MODIFIED = 0x20
|
||||||
RTF_MPATH = 0x40000
|
RTF_MPATH = 0x40000
|
||||||
RTF_MPLS = 0x100000
|
RTF_MPLS = 0x100000
|
||||||
|
RTF_MULTICAST = 0x200
|
||||||
RTF_PERMANENT_ARP = 0x2000
|
RTF_PERMANENT_ARP = 0x2000
|
||||||
RTF_PROTO1 = 0x8000
|
RTF_PROTO1 = 0x8000
|
||||||
RTF_PROTO2 = 0x4000
|
RTF_PROTO2 = 0x4000
|
||||||
|
@ -1073,23 +1228,26 @@ const (
|
||||||
RTF_STATIC = 0x800
|
RTF_STATIC = 0x800
|
||||||
RTF_UP = 0x1
|
RTF_UP = 0x1
|
||||||
RTF_USETRAILERS = 0x8000
|
RTF_USETRAILERS = 0x8000
|
||||||
RTF_XRESOLVE = 0x200
|
RTM_80211INFO = 0x15
|
||||||
RTM_ADD = 0x1
|
RTM_ADD = 0x1
|
||||||
|
RTM_BFD = 0x12
|
||||||
RTM_CHANGE = 0x3
|
RTM_CHANGE = 0x3
|
||||||
|
RTM_CHGADDRATTR = 0x14
|
||||||
RTM_DELADDR = 0xd
|
RTM_DELADDR = 0xd
|
||||||
RTM_DELETE = 0x2
|
RTM_DELETE = 0x2
|
||||||
RTM_DESYNC = 0x10
|
RTM_DESYNC = 0x10
|
||||||
RTM_GET = 0x4
|
RTM_GET = 0x4
|
||||||
RTM_IFANNOUNCE = 0xf
|
RTM_IFANNOUNCE = 0xf
|
||||||
RTM_IFINFO = 0xe
|
RTM_IFINFO = 0xe
|
||||||
RTM_LOCK = 0x8
|
RTM_INVALIDATE = 0x11
|
||||||
RTM_LOSING = 0x5
|
RTM_LOSING = 0x5
|
||||||
RTM_MAXSIZE = 0x800
|
RTM_MAXSIZE = 0x800
|
||||||
RTM_MISS = 0x7
|
RTM_MISS = 0x7
|
||||||
RTM_NEWADDR = 0xc
|
RTM_NEWADDR = 0xc
|
||||||
|
RTM_PROPOSAL = 0x13
|
||||||
RTM_REDIRECT = 0x6
|
RTM_REDIRECT = 0x6
|
||||||
RTM_RESOLVE = 0xb
|
RTM_RESOLVE = 0xb
|
||||||
RTM_RTTUNIT = 0xf4240
|
RTM_SOURCE = 0x16
|
||||||
RTM_VERSION = 0x5
|
RTM_VERSION = 0x5
|
||||||
RTV_EXPIRE = 0x4
|
RTV_EXPIRE = 0x4
|
||||||
RTV_HOPCOUNT = 0x2
|
RTV_HOPCOUNT = 0x2
|
||||||
|
@ -1099,67 +1257,74 @@ const (
|
||||||
RTV_RTTVAR = 0x80
|
RTV_RTTVAR = 0x80
|
||||||
RTV_SPIPE = 0x10
|
RTV_SPIPE = 0x10
|
||||||
RTV_SSTHRESH = 0x20
|
RTV_SSTHRESH = 0x20
|
||||||
|
RT_TABLEID_BITS = 0x8
|
||||||
|
RT_TABLEID_MASK = 0xff
|
||||||
RT_TABLEID_MAX = 0xff
|
RT_TABLEID_MAX = 0xff
|
||||||
RUSAGE_CHILDREN = -0x1
|
RUSAGE_CHILDREN = -0x1
|
||||||
RUSAGE_SELF = 0x0
|
RUSAGE_SELF = 0x0
|
||||||
RUSAGE_THREAD = 0x1
|
RUSAGE_THREAD = 0x1
|
||||||
SCM_RIGHTS = 0x1
|
SCM_RIGHTS = 0x1
|
||||||
SCM_TIMESTAMP = 0x4
|
SCM_TIMESTAMP = 0x4
|
||||||
|
SEEK_CUR = 0x1
|
||||||
|
SEEK_END = 0x2
|
||||||
|
SEEK_SET = 0x0
|
||||||
SHUT_RD = 0x0
|
SHUT_RD = 0x0
|
||||||
SHUT_RDWR = 0x2
|
SHUT_RDWR = 0x2
|
||||||
SHUT_WR = 0x1
|
SHUT_WR = 0x1
|
||||||
SIOCADDMULTI = 0x80206931
|
SIOCADDMULTI = 0x80206931
|
||||||
SIOCAIFADDR = 0x8040691a
|
SIOCAIFADDR = 0x8040691a
|
||||||
SIOCAIFGROUP = 0x80246987
|
SIOCAIFGROUP = 0x80246987
|
||||||
SIOCALIFADDR = 0x8218691c
|
|
||||||
SIOCATMARK = 0x40047307
|
SIOCATMARK = 0x40047307
|
||||||
SIOCBRDGADD = 0x8054693c
|
SIOCBRDGADD = 0x8060693c
|
||||||
SIOCBRDGADDS = 0x80546941
|
SIOCBRDGADDL = 0x80606949
|
||||||
SIOCBRDGARL = 0x806e694d
|
SIOCBRDGADDS = 0x80606941
|
||||||
|
SIOCBRDGARL = 0x808c694d
|
||||||
SIOCBRDGDADDR = 0x81286947
|
SIOCBRDGDADDR = 0x81286947
|
||||||
SIOCBRDGDEL = 0x8054693d
|
SIOCBRDGDEL = 0x8060693d
|
||||||
SIOCBRDGDELS = 0x80546942
|
SIOCBRDGDELS = 0x80606942
|
||||||
SIOCBRDGFLUSH = 0x80546948
|
SIOCBRDGFLUSH = 0x80606948
|
||||||
SIOCBRDGFRL = 0x806e694e
|
SIOCBRDGFRL = 0x808c694e
|
||||||
SIOCBRDGGCACHE = 0xc0146941
|
SIOCBRDGGCACHE = 0xc0146941
|
||||||
SIOCBRDGGFD = 0xc0146952
|
SIOCBRDGGFD = 0xc0146952
|
||||||
SIOCBRDGGHT = 0xc0146951
|
SIOCBRDGGHT = 0xc0146951
|
||||||
SIOCBRDGGIFFLGS = 0xc054693e
|
SIOCBRDGGIFFLGS = 0xc060693e
|
||||||
SIOCBRDGGMA = 0xc0146953
|
SIOCBRDGGMA = 0xc0146953
|
||||||
SIOCBRDGGPARAM = 0xc03c6958
|
SIOCBRDGGPARAM = 0xc0406958
|
||||||
SIOCBRDGGPRI = 0xc0146950
|
SIOCBRDGGPRI = 0xc0146950
|
||||||
SIOCBRDGGRL = 0xc028694f
|
SIOCBRDGGRL = 0xc028694f
|
||||||
SIOCBRDGGSIFS = 0xc054693c
|
|
||||||
SIOCBRDGGTO = 0xc0146946
|
SIOCBRDGGTO = 0xc0146946
|
||||||
SIOCBRDGIFS = 0xc0546942
|
SIOCBRDGIFS = 0xc0606942
|
||||||
SIOCBRDGRTS = 0xc0186943
|
SIOCBRDGRTS = 0xc0186943
|
||||||
SIOCBRDGSADDR = 0xc1286944
|
SIOCBRDGSADDR = 0xc1286944
|
||||||
SIOCBRDGSCACHE = 0x80146940
|
SIOCBRDGSCACHE = 0x80146940
|
||||||
SIOCBRDGSFD = 0x80146952
|
SIOCBRDGSFD = 0x80146952
|
||||||
SIOCBRDGSHT = 0x80146951
|
SIOCBRDGSHT = 0x80146951
|
||||||
SIOCBRDGSIFCOST = 0x80546955
|
SIOCBRDGSIFCOST = 0x80606955
|
||||||
SIOCBRDGSIFFLGS = 0x8054693f
|
SIOCBRDGSIFFLGS = 0x8060693f
|
||||||
SIOCBRDGSIFPRIO = 0x80546954
|
SIOCBRDGSIFPRIO = 0x80606954
|
||||||
|
SIOCBRDGSIFPROT = 0x8060694a
|
||||||
SIOCBRDGSMA = 0x80146953
|
SIOCBRDGSMA = 0x80146953
|
||||||
SIOCBRDGSPRI = 0x80146950
|
SIOCBRDGSPRI = 0x80146950
|
||||||
SIOCBRDGSPROTO = 0x8014695a
|
SIOCBRDGSPROTO = 0x8014695a
|
||||||
SIOCBRDGSTO = 0x80146945
|
SIOCBRDGSTO = 0x80146945
|
||||||
SIOCBRDGSTXHC = 0x80146959
|
SIOCBRDGSTXHC = 0x80146959
|
||||||
|
SIOCDELLABEL = 0x80206997
|
||||||
SIOCDELMULTI = 0x80206932
|
SIOCDELMULTI = 0x80206932
|
||||||
SIOCDIFADDR = 0x80206919
|
SIOCDIFADDR = 0x80206919
|
||||||
SIOCDIFGROUP = 0x80246989
|
SIOCDIFGROUP = 0x80246989
|
||||||
|
SIOCDIFPARENT = 0x802069b4
|
||||||
SIOCDIFPHYADDR = 0x80206949
|
SIOCDIFPHYADDR = 0x80206949
|
||||||
SIOCDLIFADDR = 0x8218691e
|
SIOCDPWE3NEIGHBOR = 0x802069de
|
||||||
|
SIOCDVNETID = 0x802069af
|
||||||
SIOCGETKALIVE = 0xc01869a4
|
SIOCGETKALIVE = 0xc01869a4
|
||||||
SIOCGETLABEL = 0x8020699a
|
SIOCGETLABEL = 0x8020699a
|
||||||
|
SIOCGETMPWCFG = 0xc02069ae
|
||||||
SIOCGETPFLOW = 0xc02069fe
|
SIOCGETPFLOW = 0xc02069fe
|
||||||
SIOCGETPFSYNC = 0xc02069f8
|
SIOCGETPFSYNC = 0xc02069f8
|
||||||
SIOCGETSGCNT = 0xc0147534
|
SIOCGETSGCNT = 0xc0147534
|
||||||
SIOCGETVIFCNT = 0xc0147533
|
SIOCGETVIFCNT = 0xc0147533
|
||||||
SIOCGETVLAN = 0xc0206990
|
SIOCGETVLAN = 0xc0206990
|
||||||
SIOCGHIWAT = 0x40047301
|
|
||||||
SIOCGIFADDR = 0xc0206921
|
SIOCGIFADDR = 0xc0206921
|
||||||
SIOCGIFASYNCMAP = 0xc020697c
|
|
||||||
SIOCGIFBRDADDR = 0xc0206923
|
SIOCGIFBRDADDR = 0xc0206923
|
||||||
SIOCGIFCONF = 0xc0086924
|
SIOCGIFCONF = 0xc0086924
|
||||||
SIOCGIFDATA = 0xc020691b
|
SIOCGIFDATA = 0xc020691b
|
||||||
|
@ -1168,41 +1333,53 @@ const (
|
||||||
SIOCGIFFLAGS = 0xc0206911
|
SIOCGIFFLAGS = 0xc0206911
|
||||||
SIOCGIFGATTR = 0xc024698b
|
SIOCGIFGATTR = 0xc024698b
|
||||||
SIOCGIFGENERIC = 0xc020693a
|
SIOCGIFGENERIC = 0xc020693a
|
||||||
|
SIOCGIFGLIST = 0xc024698d
|
||||||
SIOCGIFGMEMB = 0xc024698a
|
SIOCGIFGMEMB = 0xc024698a
|
||||||
SIOCGIFGROUP = 0xc0246988
|
SIOCGIFGROUP = 0xc0246988
|
||||||
SIOCGIFHARDMTU = 0xc02069a5
|
SIOCGIFHARDMTU = 0xc02069a5
|
||||||
SIOCGIFMEDIA = 0xc0286936
|
SIOCGIFLLPRIO = 0xc02069b6
|
||||||
|
SIOCGIFMEDIA = 0xc0386938
|
||||||
SIOCGIFMETRIC = 0xc0206917
|
SIOCGIFMETRIC = 0xc0206917
|
||||||
SIOCGIFMTU = 0xc020697e
|
SIOCGIFMTU = 0xc020697e
|
||||||
SIOCGIFNETMASK = 0xc0206925
|
SIOCGIFNETMASK = 0xc0206925
|
||||||
SIOCGIFPDSTADDR = 0xc0206948
|
SIOCGIFPAIR = 0xc02069b1
|
||||||
|
SIOCGIFPARENT = 0xc02069b3
|
||||||
SIOCGIFPRIORITY = 0xc020699c
|
SIOCGIFPRIORITY = 0xc020699c
|
||||||
SIOCGIFPSRCADDR = 0xc0206947
|
|
||||||
SIOCGIFRDOMAIN = 0xc02069a0
|
SIOCGIFRDOMAIN = 0xc02069a0
|
||||||
SIOCGIFRTLABEL = 0xc0206983
|
SIOCGIFRTLABEL = 0xc0206983
|
||||||
SIOCGIFRXR = 0x802069aa
|
SIOCGIFRXR = 0x802069aa
|
||||||
SIOCGIFTIMESLOT = 0xc0206986
|
SIOCGIFSFFPAGE = 0xc1126939
|
||||||
SIOCGIFXFLAGS = 0xc020699e
|
SIOCGIFXFLAGS = 0xc020699e
|
||||||
SIOCGLIFADDR = 0xc218691d
|
|
||||||
SIOCGLIFPHYADDR = 0xc218694b
|
SIOCGLIFPHYADDR = 0xc218694b
|
||||||
|
SIOCGLIFPHYDF = 0xc02069c2
|
||||||
|
SIOCGLIFPHYECN = 0xc02069c8
|
||||||
SIOCGLIFPHYRTABLE = 0xc02069a2
|
SIOCGLIFPHYRTABLE = 0xc02069a2
|
||||||
SIOCGLIFPHYTTL = 0xc02069a9
|
SIOCGLIFPHYTTL = 0xc02069a9
|
||||||
SIOCGLOWAT = 0x40047303
|
|
||||||
SIOCGPGRP = 0x40047309
|
SIOCGPGRP = 0x40047309
|
||||||
|
SIOCGPWE3 = 0xc0206998
|
||||||
|
SIOCGPWE3CTRLWORD = 0xc02069dc
|
||||||
|
SIOCGPWE3FAT = 0xc02069dd
|
||||||
|
SIOCGPWE3NEIGHBOR = 0xc21869de
|
||||||
|
SIOCGRXHPRIO = 0xc02069db
|
||||||
SIOCGSPPPPARAMS = 0xc0206994
|
SIOCGSPPPPARAMS = 0xc0206994
|
||||||
|
SIOCGTXHPRIO = 0xc02069c6
|
||||||
|
SIOCGUMBINFO = 0xc02069be
|
||||||
|
SIOCGUMBPARAM = 0xc02069c0
|
||||||
SIOCGVH = 0xc02069f6
|
SIOCGVH = 0xc02069f6
|
||||||
|
SIOCGVNETFLOWID = 0xc02069c4
|
||||||
SIOCGVNETID = 0xc02069a7
|
SIOCGVNETID = 0xc02069a7
|
||||||
|
SIOCIFAFATTACH = 0x801169ab
|
||||||
|
SIOCIFAFDETACH = 0x801169ac
|
||||||
SIOCIFCREATE = 0x8020697a
|
SIOCIFCREATE = 0x8020697a
|
||||||
SIOCIFDESTROY = 0x80206979
|
SIOCIFDESTROY = 0x80206979
|
||||||
SIOCIFGCLONERS = 0xc00c6978
|
SIOCIFGCLONERS = 0xc00c6978
|
||||||
SIOCSETKALIVE = 0x801869a3
|
SIOCSETKALIVE = 0x801869a3
|
||||||
SIOCSETLABEL = 0x80206999
|
SIOCSETLABEL = 0x80206999
|
||||||
|
SIOCSETMPWCFG = 0x802069ad
|
||||||
SIOCSETPFLOW = 0x802069fd
|
SIOCSETPFLOW = 0x802069fd
|
||||||
SIOCSETPFSYNC = 0x802069f7
|
SIOCSETPFSYNC = 0x802069f7
|
||||||
SIOCSETVLAN = 0x8020698f
|
SIOCSETVLAN = 0x8020698f
|
||||||
SIOCSHIWAT = 0x80047300
|
|
||||||
SIOCSIFADDR = 0x8020690c
|
SIOCSIFADDR = 0x8020690c
|
||||||
SIOCSIFASYNCMAP = 0x8020697d
|
|
||||||
SIOCSIFBRDADDR = 0x80206913
|
SIOCSIFBRDADDR = 0x80206913
|
||||||
SIOCSIFDESCR = 0x80206980
|
SIOCSIFDESCR = 0x80206980
|
||||||
SIOCSIFDSTADDR = 0x8020690e
|
SIOCSIFDSTADDR = 0x8020690e
|
||||||
|
@ -1210,26 +1387,36 @@ const (
|
||||||
SIOCSIFGATTR = 0x8024698c
|
SIOCSIFGATTR = 0x8024698c
|
||||||
SIOCSIFGENERIC = 0x80206939
|
SIOCSIFGENERIC = 0x80206939
|
||||||
SIOCSIFLLADDR = 0x8020691f
|
SIOCSIFLLADDR = 0x8020691f
|
||||||
SIOCSIFMEDIA = 0xc0206935
|
SIOCSIFLLPRIO = 0x802069b5
|
||||||
|
SIOCSIFMEDIA = 0xc0206937
|
||||||
SIOCSIFMETRIC = 0x80206918
|
SIOCSIFMETRIC = 0x80206918
|
||||||
SIOCSIFMTU = 0x8020697f
|
SIOCSIFMTU = 0x8020697f
|
||||||
SIOCSIFNETMASK = 0x80206916
|
SIOCSIFNETMASK = 0x80206916
|
||||||
SIOCSIFPHYADDR = 0x80406946
|
SIOCSIFPAIR = 0x802069b0
|
||||||
|
SIOCSIFPARENT = 0x802069b2
|
||||||
SIOCSIFPRIORITY = 0x8020699b
|
SIOCSIFPRIORITY = 0x8020699b
|
||||||
SIOCSIFRDOMAIN = 0x8020699f
|
SIOCSIFRDOMAIN = 0x8020699f
|
||||||
SIOCSIFRTLABEL = 0x80206982
|
SIOCSIFRTLABEL = 0x80206982
|
||||||
SIOCSIFTIMESLOT = 0x80206985
|
|
||||||
SIOCSIFXFLAGS = 0x8020699d
|
SIOCSIFXFLAGS = 0x8020699d
|
||||||
SIOCSLIFPHYADDR = 0x8218694a
|
SIOCSLIFPHYADDR = 0x8218694a
|
||||||
|
SIOCSLIFPHYDF = 0x802069c1
|
||||||
|
SIOCSLIFPHYECN = 0x802069c7
|
||||||
SIOCSLIFPHYRTABLE = 0x802069a1
|
SIOCSLIFPHYRTABLE = 0x802069a1
|
||||||
SIOCSLIFPHYTTL = 0x802069a8
|
SIOCSLIFPHYTTL = 0x802069a8
|
||||||
SIOCSLOWAT = 0x80047302
|
|
||||||
SIOCSPGRP = 0x80047308
|
SIOCSPGRP = 0x80047308
|
||||||
|
SIOCSPWE3CTRLWORD = 0x802069dc
|
||||||
|
SIOCSPWE3FAT = 0x802069dd
|
||||||
|
SIOCSPWE3NEIGHBOR = 0x821869de
|
||||||
|
SIOCSRXHPRIO = 0x802069db
|
||||||
SIOCSSPPPPARAMS = 0x80206993
|
SIOCSSPPPPARAMS = 0x80206993
|
||||||
|
SIOCSTXHPRIO = 0x802069c5
|
||||||
|
SIOCSUMBPARAM = 0x802069bf
|
||||||
SIOCSVH = 0xc02069f5
|
SIOCSVH = 0xc02069f5
|
||||||
|
SIOCSVNETFLOWID = 0x802069c3
|
||||||
SIOCSVNETID = 0x802069a6
|
SIOCSVNETID = 0x802069a6
|
||||||
SOCK_CLOEXEC = 0x8000
|
SOCK_CLOEXEC = 0x8000
|
||||||
SOCK_DGRAM = 0x2
|
SOCK_DGRAM = 0x2
|
||||||
|
SOCK_DNS = 0x1000
|
||||||
SOCK_NONBLOCK = 0x4000
|
SOCK_NONBLOCK = 0x4000
|
||||||
SOCK_RAW = 0x3
|
SOCK_RAW = 0x3
|
||||||
SOCK_RDM = 0x4
|
SOCK_RDM = 0x4
|
||||||
|
@ -1241,6 +1428,7 @@ const (
|
||||||
SO_BINDANY = 0x1000
|
SO_BINDANY = 0x1000
|
||||||
SO_BROADCAST = 0x20
|
SO_BROADCAST = 0x20
|
||||||
SO_DEBUG = 0x1
|
SO_DEBUG = 0x1
|
||||||
|
SO_DOMAIN = 0x1024
|
||||||
SO_DONTROUTE = 0x10
|
SO_DONTROUTE = 0x10
|
||||||
SO_ERROR = 0x1007
|
SO_ERROR = 0x1007
|
||||||
SO_KEEPALIVE = 0x8
|
SO_KEEPALIVE = 0x8
|
||||||
|
@ -1248,6 +1436,7 @@ const (
|
||||||
SO_NETPROC = 0x1020
|
SO_NETPROC = 0x1020
|
||||||
SO_OOBINLINE = 0x100
|
SO_OOBINLINE = 0x100
|
||||||
SO_PEERCRED = 0x1022
|
SO_PEERCRED = 0x1022
|
||||||
|
SO_PROTOCOL = 0x1025
|
||||||
SO_RCVBUF = 0x1002
|
SO_RCVBUF = 0x1002
|
||||||
SO_RCVLOWAT = 0x1004
|
SO_RCVLOWAT = 0x1004
|
||||||
SO_RCVTIMEO = 0x1006
|
SO_RCVTIMEO = 0x1006
|
||||||
|
@ -1261,6 +1450,7 @@ const (
|
||||||
SO_TIMESTAMP = 0x800
|
SO_TIMESTAMP = 0x800
|
||||||
SO_TYPE = 0x1008
|
SO_TYPE = 0x1008
|
||||||
SO_USELOOPBACK = 0x40
|
SO_USELOOPBACK = 0x40
|
||||||
|
SO_ZEROIZE = 0x2000
|
||||||
S_BLKSIZE = 0x200
|
S_BLKSIZE = 0x200
|
||||||
S_IEXEC = 0x40
|
S_IEXEC = 0x40
|
||||||
S_IFBLK = 0x6000
|
S_IFBLK = 0x6000
|
||||||
|
@ -1290,9 +1480,24 @@ const (
|
||||||
S_IXOTH = 0x1
|
S_IXOTH = 0x1
|
||||||
S_IXUSR = 0x40
|
S_IXUSR = 0x40
|
||||||
TCIFLUSH = 0x1
|
TCIFLUSH = 0x1
|
||||||
|
TCIOFF = 0x3
|
||||||
TCIOFLUSH = 0x3
|
TCIOFLUSH = 0x3
|
||||||
|
TCION = 0x4
|
||||||
TCOFLUSH = 0x2
|
TCOFLUSH = 0x2
|
||||||
TCP_MAXBURST = 0x4
|
TCOOFF = 0x1
|
||||||
|
TCOON = 0x2
|
||||||
|
TCPOPT_EOL = 0x0
|
||||||
|
TCPOPT_MAXSEG = 0x2
|
||||||
|
TCPOPT_NOP = 0x1
|
||||||
|
TCPOPT_SACK = 0x5
|
||||||
|
TCPOPT_SACK_HDR = 0x1010500
|
||||||
|
TCPOPT_SACK_PERMITTED = 0x4
|
||||||
|
TCPOPT_SACK_PERMIT_HDR = 0x1010402
|
||||||
|
TCPOPT_SIGNATURE = 0x13
|
||||||
|
TCPOPT_TIMESTAMP = 0x8
|
||||||
|
TCPOPT_TSTAMP_HDR = 0x101080a
|
||||||
|
TCPOPT_WINDOW = 0x3
|
||||||
|
TCP_INFO = 0x9
|
||||||
TCP_MAXSEG = 0x2
|
TCP_MAXSEG = 0x2
|
||||||
TCP_MAXWIN = 0xffff
|
TCP_MAXWIN = 0xffff
|
||||||
TCP_MAX_SACK = 0x3
|
TCP_MAX_SACK = 0x3
|
||||||
|
@ -1301,11 +1506,15 @@ const (
|
||||||
TCP_MSS = 0x200
|
TCP_MSS = 0x200
|
||||||
TCP_NODELAY = 0x1
|
TCP_NODELAY = 0x1
|
||||||
TCP_NOPUSH = 0x10
|
TCP_NOPUSH = 0x10
|
||||||
TCP_NSTATES = 0xb
|
TCP_SACKHOLE_LIMIT = 0x80
|
||||||
TCP_SACK_ENABLE = 0x8
|
TCP_SACK_ENABLE = 0x8
|
||||||
TCSAFLUSH = 0x2
|
TCSAFLUSH = 0x2
|
||||||
|
TIMER_ABSTIME = 0x1
|
||||||
|
TIMER_RELTIME = 0x0
|
||||||
TIOCCBRK = 0x2000747a
|
TIOCCBRK = 0x2000747a
|
||||||
TIOCCDTR = 0x20007478
|
TIOCCDTR = 0x20007478
|
||||||
|
TIOCCHKVERAUTH = 0x2000741e
|
||||||
|
TIOCCLRVERAUTH = 0x2000741d
|
||||||
TIOCCONS = 0x80047462
|
TIOCCONS = 0x80047462
|
||||||
TIOCDRAIN = 0x2000745e
|
TIOCDRAIN = 0x2000745e
|
||||||
TIOCEXCL = 0x2000740d
|
TIOCEXCL = 0x2000740d
|
||||||
|
@ -1321,7 +1530,7 @@ const (
|
||||||
TIOCGFLAGS = 0x4004745d
|
TIOCGFLAGS = 0x4004745d
|
||||||
TIOCGPGRP = 0x40047477
|
TIOCGPGRP = 0x40047477
|
||||||
TIOCGSID = 0x40047463
|
TIOCGSID = 0x40047463
|
||||||
TIOCGTSTAMP = 0x400c745b
|
TIOCGTSTAMP = 0x4010745b
|
||||||
TIOCGWINSZ = 0x40087468
|
TIOCGWINSZ = 0x40087468
|
||||||
TIOCMBIC = 0x8004746b
|
TIOCMBIC = 0x8004746b
|
||||||
TIOCMBIS = 0x8004746c
|
TIOCMBIS = 0x8004746c
|
||||||
|
@ -1360,17 +1569,21 @@ const (
|
||||||
TIOCSETAF = 0x802c7416
|
TIOCSETAF = 0x802c7416
|
||||||
TIOCSETAW = 0x802c7415
|
TIOCSETAW = 0x802c7415
|
||||||
TIOCSETD = 0x8004741b
|
TIOCSETD = 0x8004741b
|
||||||
|
TIOCSETVERAUTH = 0x8004741c
|
||||||
TIOCSFLAGS = 0x8004745c
|
TIOCSFLAGS = 0x8004745c
|
||||||
TIOCSIG = 0x8004745f
|
TIOCSIG = 0x8004745f
|
||||||
TIOCSPGRP = 0x80047476
|
TIOCSPGRP = 0x80047476
|
||||||
TIOCSTART = 0x2000746e
|
TIOCSTART = 0x2000746e
|
||||||
TIOCSTAT = 0x80047465
|
TIOCSTAT = 0x20007465
|
||||||
TIOCSTI = 0x80017472
|
|
||||||
TIOCSTOP = 0x2000746f
|
TIOCSTOP = 0x2000746f
|
||||||
TIOCSTSTAMP = 0x8008745a
|
TIOCSTSTAMP = 0x8008745a
|
||||||
TIOCSWINSZ = 0x80087467
|
TIOCSWINSZ = 0x80087467
|
||||||
TIOCUCNTL = 0x80047466
|
TIOCUCNTL = 0x80047466
|
||||||
|
TIOCUCNTL_CBRK = 0x7a
|
||||||
|
TIOCUCNTL_SBRK = 0x7b
|
||||||
TOSTOP = 0x400000
|
TOSTOP = 0x400000
|
||||||
|
UTIME_NOW = -0x2
|
||||||
|
UTIME_OMIT = -0x1
|
||||||
VDISCARD = 0xf
|
VDISCARD = 0xf
|
||||||
VDSUSP = 0xb
|
VDSUSP = 0xb
|
||||||
VEOF = 0x0
|
VEOF = 0x0
|
||||||
|
@ -1381,6 +1594,19 @@ const (
|
||||||
VKILL = 0x5
|
VKILL = 0x5
|
||||||
VLNEXT = 0xe
|
VLNEXT = 0xe
|
||||||
VMIN = 0x10
|
VMIN = 0x10
|
||||||
|
VM_ANONMIN = 0x7
|
||||||
|
VM_LOADAVG = 0x2
|
||||||
|
VM_MALLOC_CONF = 0xc
|
||||||
|
VM_MAXID = 0xd
|
||||||
|
VM_MAXSLP = 0xa
|
||||||
|
VM_METER = 0x1
|
||||||
|
VM_NKMEMPAGES = 0x6
|
||||||
|
VM_PSSTRINGS = 0x3
|
||||||
|
VM_SWAPENCRYPT = 0x5
|
||||||
|
VM_USPACE = 0xb
|
||||||
|
VM_UVMEXP = 0x4
|
||||||
|
VM_VNODEMIN = 0x9
|
||||||
|
VM_VTEXTMIN = 0x8
|
||||||
VQUIT = 0x9
|
VQUIT = 0x9
|
||||||
VREPRINT = 0x6
|
VREPRINT = 0x6
|
||||||
VSTART = 0xc
|
VSTART = 0xc
|
||||||
|
@ -1394,6 +1620,7 @@ const (
|
||||||
WCOREFLAG = 0x80
|
WCOREFLAG = 0x80
|
||||||
WNOHANG = 0x1
|
WNOHANG = 0x1
|
||||||
WUNTRACED = 0x2
|
WUNTRACED = 0x2
|
||||||
|
XCASE = 0x1000000
|
||||||
)
|
)
|
||||||
|
|
||||||
// Errors
|
// Errors
|
||||||
|
@ -1407,6 +1634,7 @@ const (
|
||||||
EALREADY = syscall.Errno(0x25)
|
EALREADY = syscall.Errno(0x25)
|
||||||
EAUTH = syscall.Errno(0x50)
|
EAUTH = syscall.Errno(0x50)
|
||||||
EBADF = syscall.Errno(0x9)
|
EBADF = syscall.Errno(0x9)
|
||||||
|
EBADMSG = syscall.Errno(0x5c)
|
||||||
EBADRPC = syscall.Errno(0x48)
|
EBADRPC = syscall.Errno(0x48)
|
||||||
EBUSY = syscall.Errno(0x10)
|
EBUSY = syscall.Errno(0x10)
|
||||||
ECANCELED = syscall.Errno(0x58)
|
ECANCELED = syscall.Errno(0x58)
|
||||||
|
@ -1433,7 +1661,7 @@ const (
|
||||||
EIPSEC = syscall.Errno(0x52)
|
EIPSEC = syscall.Errno(0x52)
|
||||||
EISCONN = syscall.Errno(0x38)
|
EISCONN = syscall.Errno(0x38)
|
||||||
EISDIR = syscall.Errno(0x15)
|
EISDIR = syscall.Errno(0x15)
|
||||||
ELAST = syscall.Errno(0x5b)
|
ELAST = syscall.Errno(0x5f)
|
||||||
ELOOP = syscall.Errno(0x3e)
|
ELOOP = syscall.Errno(0x3e)
|
||||||
EMEDIUMTYPE = syscall.Errno(0x56)
|
EMEDIUMTYPE = syscall.Errno(0x56)
|
||||||
EMFILE = syscall.Errno(0x18)
|
EMFILE = syscall.Errno(0x18)
|
||||||
|
@ -1461,12 +1689,14 @@ const (
|
||||||
ENOTCONN = syscall.Errno(0x39)
|
ENOTCONN = syscall.Errno(0x39)
|
||||||
ENOTDIR = syscall.Errno(0x14)
|
ENOTDIR = syscall.Errno(0x14)
|
||||||
ENOTEMPTY = syscall.Errno(0x42)
|
ENOTEMPTY = syscall.Errno(0x42)
|
||||||
|
ENOTRECOVERABLE = syscall.Errno(0x5d)
|
||||||
ENOTSOCK = syscall.Errno(0x26)
|
ENOTSOCK = syscall.Errno(0x26)
|
||||||
ENOTSUP = syscall.Errno(0x5b)
|
ENOTSUP = syscall.Errno(0x5b)
|
||||||
ENOTTY = syscall.Errno(0x19)
|
ENOTTY = syscall.Errno(0x19)
|
||||||
ENXIO = syscall.Errno(0x6)
|
ENXIO = syscall.Errno(0x6)
|
||||||
EOPNOTSUPP = syscall.Errno(0x2d)
|
EOPNOTSUPP = syscall.Errno(0x2d)
|
||||||
EOVERFLOW = syscall.Errno(0x57)
|
EOVERFLOW = syscall.Errno(0x57)
|
||||||
|
EOWNERDEAD = syscall.Errno(0x5e)
|
||||||
EPERM = syscall.Errno(0x1)
|
EPERM = syscall.Errno(0x1)
|
||||||
EPFNOSUPPORT = syscall.Errno(0x2e)
|
EPFNOSUPPORT = syscall.Errno(0x2e)
|
||||||
EPIPE = syscall.Errno(0x20)
|
EPIPE = syscall.Errno(0x20)
|
||||||
|
@ -1474,6 +1704,7 @@ const (
|
||||||
EPROCUNAVAIL = syscall.Errno(0x4c)
|
EPROCUNAVAIL = syscall.Errno(0x4c)
|
||||||
EPROGMISMATCH = syscall.Errno(0x4b)
|
EPROGMISMATCH = syscall.Errno(0x4b)
|
||||||
EPROGUNAVAIL = syscall.Errno(0x4a)
|
EPROGUNAVAIL = syscall.Errno(0x4a)
|
||||||
|
EPROTO = syscall.Errno(0x5f)
|
||||||
EPROTONOSUPPORT = syscall.Errno(0x2b)
|
EPROTONOSUPPORT = syscall.Errno(0x2b)
|
||||||
EPROTOTYPE = syscall.Errno(0x29)
|
EPROTOTYPE = syscall.Errno(0x29)
|
||||||
ERANGE = syscall.Errno(0x22)
|
ERANGE = syscall.Errno(0x22)
|
||||||
|
@ -1570,7 +1801,7 @@ var errorList = [...]struct {
|
||||||
{32, "EPIPE", "broken pipe"},
|
{32, "EPIPE", "broken pipe"},
|
||||||
{33, "EDOM", "numerical argument out of domain"},
|
{33, "EDOM", "numerical argument out of domain"},
|
||||||
{34, "ERANGE", "result too large"},
|
{34, "ERANGE", "result too large"},
|
||||||
{35, "EWOULDBLOCK", "resource temporarily unavailable"},
|
{35, "EAGAIN", "resource temporarily unavailable"},
|
||||||
{36, "EINPROGRESS", "operation now in progress"},
|
{36, "EINPROGRESS", "operation now in progress"},
|
||||||
{37, "EALREADY", "operation already in progress"},
|
{37, "EALREADY", "operation already in progress"},
|
||||||
{38, "ENOTSOCK", "socket operation on non-socket"},
|
{38, "ENOTSOCK", "socket operation on non-socket"},
|
||||||
|
@ -1626,7 +1857,11 @@ var errorList = [...]struct {
|
||||||
{88, "ECANCELED", "operation canceled"},
|
{88, "ECANCELED", "operation canceled"},
|
||||||
{89, "EIDRM", "identifier removed"},
|
{89, "EIDRM", "identifier removed"},
|
||||||
{90, "ENOMSG", "no message of desired type"},
|
{90, "ENOMSG", "no message of desired type"},
|
||||||
{91, "ELAST", "not supported"},
|
{91, "ENOTSUP", "not supported"},
|
||||||
|
{92, "EBADMSG", "bad message"},
|
||||||
|
{93, "ENOTRECOVERABLE", "state not recoverable"},
|
||||||
|
{94, "EOWNERDEAD", "previous owner died"},
|
||||||
|
{95, "ELAST", "protocol error"},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Signal table
|
// Signal table
|
||||||
|
@ -1640,7 +1875,7 @@ var signalList = [...]struct {
|
||||||
{3, "SIGQUIT", "quit"},
|
{3, "SIGQUIT", "quit"},
|
||||||
{4, "SIGILL", "illegal instruction"},
|
{4, "SIGILL", "illegal instruction"},
|
||||||
{5, "SIGTRAP", "trace/BPT trap"},
|
{5, "SIGTRAP", "trace/BPT trap"},
|
||||||
{6, "SIGABRT", "abort trap"},
|
{6, "SIGIOT", "abort trap"},
|
||||||
{7, "SIGEMT", "EMT trap"},
|
{7, "SIGEMT", "EMT trap"},
|
||||||
{8, "SIGFPE", "floating point exception"},
|
{8, "SIGFPE", "floating point exception"},
|
||||||
{9, "SIGKILL", "killed"},
|
{9, "SIGKILL", "killed"},
|
||||||
|
@ -1667,4 +1902,5 @@ var signalList = [...]struct {
|
||||||
{30, "SIGUSR1", "user defined signal 1"},
|
{30, "SIGUSR1", "user defined signal 1"},
|
||||||
{31, "SIGUSR2", "user defined signal 2"},
|
{31, "SIGUSR2", "user defined signal 2"},
|
||||||
{32, "SIGTHR", "thread AST"},
|
{32, "SIGTHR", "thread AST"},
|
||||||
|
{28672, "SIGSTKSZ", "unknown signal"},
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,6 +112,12 @@ const (
|
||||||
BPF_FILDROP_CAPTURE = 0x1
|
BPF_FILDROP_CAPTURE = 0x1
|
||||||
BPF_FILDROP_DROP = 0x2
|
BPF_FILDROP_DROP = 0x2
|
||||||
BPF_FILDROP_PASS = 0x0
|
BPF_FILDROP_PASS = 0x0
|
||||||
|
BPF_F_DIR_IN = 0x10
|
||||||
|
BPF_F_DIR_MASK = 0x30
|
||||||
|
BPF_F_DIR_OUT = 0x20
|
||||||
|
BPF_F_DIR_SHIFT = 0x4
|
||||||
|
BPF_F_FLOWID = 0x8
|
||||||
|
BPF_F_PRI_MASK = 0x7
|
||||||
BPF_H = 0x8
|
BPF_H = 0x8
|
||||||
BPF_IMM = 0x0
|
BPF_IMM = 0x0
|
||||||
BPF_IND = 0x40
|
BPF_IND = 0x40
|
||||||
|
@ -140,6 +146,7 @@ const (
|
||||||
BPF_OR = 0x40
|
BPF_OR = 0x40
|
||||||
BPF_RELEASE = 0x30bb6
|
BPF_RELEASE = 0x30bb6
|
||||||
BPF_RET = 0x6
|
BPF_RET = 0x6
|
||||||
|
BPF_RND = 0xc0
|
||||||
BPF_RSH = 0x70
|
BPF_RSH = 0x70
|
||||||
BPF_ST = 0x2
|
BPF_ST = 0x2
|
||||||
BPF_STX = 0x3
|
BPF_STX = 0x3
|
||||||
|
@ -180,7 +187,65 @@ const (
|
||||||
CTL_KERN = 0x1
|
CTL_KERN = 0x1
|
||||||
CTL_MAXNAME = 0xc
|
CTL_MAXNAME = 0xc
|
||||||
CTL_NET = 0x4
|
CTL_NET = 0x4
|
||||||
|
DIOCADDQUEUE = 0xc110445d
|
||||||
|
DIOCADDRULE = 0xcd604404
|
||||||
|
DIOCADDSTATE = 0xc1084425
|
||||||
|
DIOCCHANGERULE = 0xcd60441a
|
||||||
|
DIOCCLRIFFLAG = 0xc028445a
|
||||||
|
DIOCCLRSRCNODES = 0x20004455
|
||||||
|
DIOCCLRSTATES = 0xc0e04412
|
||||||
|
DIOCCLRSTATUS = 0xc0284416
|
||||||
|
DIOCGETLIMIT = 0xc0084427
|
||||||
|
DIOCGETQSTATS = 0xc1204460
|
||||||
|
DIOCGETQUEUE = 0xc110445f
|
||||||
|
DIOCGETQUEUES = 0xc110445e
|
||||||
|
DIOCGETRULE = 0xcd604407
|
||||||
|
DIOCGETRULES = 0xcd604406
|
||||||
|
DIOCGETRULESET = 0xc444443b
|
||||||
|
DIOCGETRULESETS = 0xc444443a
|
||||||
|
DIOCGETSRCNODES = 0xc0104454
|
||||||
|
DIOCGETSTATE = 0xc1084413
|
||||||
|
DIOCGETSTATES = 0xc0104419
|
||||||
|
DIOCGETSTATUS = 0xc1e84415
|
||||||
|
DIOCGETSYNFLWATS = 0xc0084463
|
||||||
|
DIOCGETTIMEOUT = 0xc008441e
|
||||||
|
DIOCIGETIFACES = 0xc0284457
|
||||||
|
DIOCKILLSRCNODES = 0xc080445b
|
||||||
|
DIOCKILLSTATES = 0xc0e04429
|
||||||
|
DIOCNATLOOK = 0xc0504417
|
||||||
|
DIOCOSFPADD = 0xc088444f
|
||||||
DIOCOSFPFLUSH = 0x2000444e
|
DIOCOSFPFLUSH = 0x2000444e
|
||||||
|
DIOCOSFPGET = 0xc0884450
|
||||||
|
DIOCRADDADDRS = 0xc4504443
|
||||||
|
DIOCRADDTABLES = 0xc450443d
|
||||||
|
DIOCRCLRADDRS = 0xc4504442
|
||||||
|
DIOCRCLRASTATS = 0xc4504448
|
||||||
|
DIOCRCLRTABLES = 0xc450443c
|
||||||
|
DIOCRCLRTSTATS = 0xc4504441
|
||||||
|
DIOCRDELADDRS = 0xc4504444
|
||||||
|
DIOCRDELTABLES = 0xc450443e
|
||||||
|
DIOCRGETADDRS = 0xc4504446
|
||||||
|
DIOCRGETASTATS = 0xc4504447
|
||||||
|
DIOCRGETTABLES = 0xc450443f
|
||||||
|
DIOCRGETTSTATS = 0xc4504440
|
||||||
|
DIOCRINADEFINE = 0xc450444d
|
||||||
|
DIOCRSETADDRS = 0xc4504445
|
||||||
|
DIOCRSETTFLAGS = 0xc450444a
|
||||||
|
DIOCRTSTADDRS = 0xc4504449
|
||||||
|
DIOCSETDEBUG = 0xc0044418
|
||||||
|
DIOCSETHOSTID = 0xc0044456
|
||||||
|
DIOCSETIFFLAG = 0xc0284459
|
||||||
|
DIOCSETLIMIT = 0xc0084428
|
||||||
|
DIOCSETREASS = 0xc004445c
|
||||||
|
DIOCSETSTATUSIF = 0xc0284414
|
||||||
|
DIOCSETSYNCOOKIES = 0xc0014462
|
||||||
|
DIOCSETSYNFLWATS = 0xc0084461
|
||||||
|
DIOCSETTIMEOUT = 0xc008441d
|
||||||
|
DIOCSTART = 0x20004401
|
||||||
|
DIOCSTOP = 0x20004402
|
||||||
|
DIOCXBEGIN = 0xc0104451
|
||||||
|
DIOCXCOMMIT = 0xc0104452
|
||||||
|
DIOCXROLLBACK = 0xc0104453
|
||||||
DLT_ARCNET = 0x7
|
DLT_ARCNET = 0x7
|
||||||
DLT_ATM_RFC1483 = 0xb
|
DLT_ATM_RFC1483 = 0xb
|
||||||
DLT_AX25 = 0x3
|
DLT_AX25 = 0x3
|
||||||
|
@ -243,6 +308,8 @@ const (
|
||||||
EMUL_ENABLED = 0x1
|
EMUL_ENABLED = 0x1
|
||||||
EMUL_NATIVE = 0x2
|
EMUL_NATIVE = 0x2
|
||||||
ENDRUNDISC = 0x9
|
ENDRUNDISC = 0x9
|
||||||
|
ETH64_8021_RSVD_MASK = 0xfffffffffff0
|
||||||
|
ETH64_8021_RSVD_PREFIX = 0x180c2000000
|
||||||
ETHERMIN = 0x2e
|
ETHERMIN = 0x2e
|
||||||
ETHERMTU = 0x5dc
|
ETHERMTU = 0x5dc
|
||||||
ETHERTYPE_8023 = 0x4
|
ETHERTYPE_8023 = 0x4
|
||||||
|
@ -295,6 +362,7 @@ const (
|
||||||
ETHERTYPE_DN = 0x6003
|
ETHERTYPE_DN = 0x6003
|
||||||
ETHERTYPE_DOGFIGHT = 0x1989
|
ETHERTYPE_DOGFIGHT = 0x1989
|
||||||
ETHERTYPE_DSMD = 0x8039
|
ETHERTYPE_DSMD = 0x8039
|
||||||
|
ETHERTYPE_EAPOL = 0x888e
|
||||||
ETHERTYPE_ECMA = 0x803
|
ETHERTYPE_ECMA = 0x803
|
||||||
ETHERTYPE_ENCRYPT = 0x803d
|
ETHERTYPE_ENCRYPT = 0x803d
|
||||||
ETHERTYPE_ES = 0x805d
|
ETHERTYPE_ES = 0x805d
|
||||||
|
@ -326,6 +394,7 @@ const (
|
||||||
ETHERTYPE_LLDP = 0x88cc
|
ETHERTYPE_LLDP = 0x88cc
|
||||||
ETHERTYPE_LOGICRAFT = 0x8148
|
ETHERTYPE_LOGICRAFT = 0x8148
|
||||||
ETHERTYPE_LOOPBACK = 0x9000
|
ETHERTYPE_LOOPBACK = 0x9000
|
||||||
|
ETHERTYPE_MACSEC = 0x88e5
|
||||||
ETHERTYPE_MATRA = 0x807a
|
ETHERTYPE_MATRA = 0x807a
|
||||||
ETHERTYPE_MAX = 0xffff
|
ETHERTYPE_MAX = 0xffff
|
||||||
ETHERTYPE_MERIT = 0x807c
|
ETHERTYPE_MERIT = 0x807c
|
||||||
|
@ -354,15 +423,16 @@ const (
|
||||||
ETHERTYPE_NCD = 0x8149
|
ETHERTYPE_NCD = 0x8149
|
||||||
ETHERTYPE_NESTAR = 0x8006
|
ETHERTYPE_NESTAR = 0x8006
|
||||||
ETHERTYPE_NETBEUI = 0x8191
|
ETHERTYPE_NETBEUI = 0x8191
|
||||||
|
ETHERTYPE_NHRP = 0x2001
|
||||||
ETHERTYPE_NOVELL = 0x8138
|
ETHERTYPE_NOVELL = 0x8138
|
||||||
ETHERTYPE_NS = 0x600
|
ETHERTYPE_NS = 0x600
|
||||||
ETHERTYPE_NSAT = 0x601
|
ETHERTYPE_NSAT = 0x601
|
||||||
ETHERTYPE_NSCOMPAT = 0x807
|
ETHERTYPE_NSCOMPAT = 0x807
|
||||||
|
ETHERTYPE_NSH = 0x984f
|
||||||
ETHERTYPE_NTRAILER = 0x10
|
ETHERTYPE_NTRAILER = 0x10
|
||||||
ETHERTYPE_OS9 = 0x7007
|
ETHERTYPE_OS9 = 0x7007
|
||||||
ETHERTYPE_OS9NET = 0x7009
|
ETHERTYPE_OS9NET = 0x7009
|
||||||
ETHERTYPE_PACER = 0x80c6
|
ETHERTYPE_PACER = 0x80c6
|
||||||
ETHERTYPE_PAE = 0x888e
|
|
||||||
ETHERTYPE_PBB = 0x88e7
|
ETHERTYPE_PBB = 0x88e7
|
||||||
ETHERTYPE_PCS = 0x4242
|
ETHERTYPE_PCS = 0x4242
|
||||||
ETHERTYPE_PLANNING = 0x8044
|
ETHERTYPE_PLANNING = 0x8044
|
||||||
|
@ -445,10 +515,11 @@ const (
|
||||||
ETHER_VLAN_ENCAP_LEN = 0x4
|
ETHER_VLAN_ENCAP_LEN = 0x4
|
||||||
EVFILT_AIO = -0x3
|
EVFILT_AIO = -0x3
|
||||||
EVFILT_DEVICE = -0x8
|
EVFILT_DEVICE = -0x8
|
||||||
|
EVFILT_EXCEPT = -0x9
|
||||||
EVFILT_PROC = -0x5
|
EVFILT_PROC = -0x5
|
||||||
EVFILT_READ = -0x1
|
EVFILT_READ = -0x1
|
||||||
EVFILT_SIGNAL = -0x6
|
EVFILT_SIGNAL = -0x6
|
||||||
EVFILT_SYSCOUNT = 0x8
|
EVFILT_SYSCOUNT = 0x9
|
||||||
EVFILT_TIMER = -0x7
|
EVFILT_TIMER = -0x7
|
||||||
EVFILT_VNODE = -0x4
|
EVFILT_VNODE = -0x4
|
||||||
EVFILT_WRITE = -0x2
|
EVFILT_WRITE = -0x2
|
||||||
|
@ -470,7 +541,7 @@ const (
|
||||||
EV_FLAG1 = 0x2000
|
EV_FLAG1 = 0x2000
|
||||||
EV_ONESHOT = 0x10
|
EV_ONESHOT = 0x10
|
||||||
EV_RECEIPT = 0x40
|
EV_RECEIPT = 0x40
|
||||||
EV_SYSFLAGS = 0xf000
|
EV_SYSFLAGS = 0xf800
|
||||||
EXTA = 0x4b00
|
EXTA = 0x4b00
|
||||||
EXTB = 0x9600
|
EXTB = 0x9600
|
||||||
EXTPROC = 0x800
|
EXTPROC = 0x800
|
||||||
|
@ -736,6 +807,7 @@ const (
|
||||||
IFT_VOICEOVERCABLE = 0xc6
|
IFT_VOICEOVERCABLE = 0xc6
|
||||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
IFT_VOICEOVERFRAMERELAY = 0x99
|
||||||
IFT_VOICEOVERIP = 0x68
|
IFT_VOICEOVERIP = 0x68
|
||||||
|
IFT_WIREGUARD = 0xfb
|
||||||
IFT_X213 = 0x5d
|
IFT_X213 = 0x5d
|
||||||
IFT_X25 = 0x5
|
IFT_X25 = 0x5
|
||||||
IFT_X25DDN = 0x4
|
IFT_X25DDN = 0x4
|
||||||
|
@ -801,9 +873,11 @@ const (
|
||||||
IPPROTO_RAW = 0xff
|
IPPROTO_RAW = 0xff
|
||||||
IPPROTO_ROUTING = 0x2b
|
IPPROTO_ROUTING = 0x2b
|
||||||
IPPROTO_RSVP = 0x2e
|
IPPROTO_RSVP = 0x2e
|
||||||
|
IPPROTO_SCTP = 0x84
|
||||||
IPPROTO_TCP = 0x6
|
IPPROTO_TCP = 0x6
|
||||||
IPPROTO_TP = 0x1d
|
IPPROTO_TP = 0x1d
|
||||||
IPPROTO_UDP = 0x11
|
IPPROTO_UDP = 0x11
|
||||||
|
IPPROTO_UDPLITE = 0x88
|
||||||
IPV6_AUTH_LEVEL = 0x35
|
IPV6_AUTH_LEVEL = 0x35
|
||||||
IPV6_AUTOFLOWLABEL = 0x3b
|
IPV6_AUTOFLOWLABEL = 0x3b
|
||||||
IPV6_CHECKSUM = 0x1a
|
IPV6_CHECKSUM = 0x1a
|
||||||
|
@ -910,6 +984,9 @@ const (
|
||||||
IP_TTL = 0x4
|
IP_TTL = 0x4
|
||||||
ISIG = 0x80
|
ISIG = 0x80
|
||||||
ISTRIP = 0x20
|
ISTRIP = 0x20
|
||||||
|
ITIMER_PROF = 0x2
|
||||||
|
ITIMER_REAL = 0x0
|
||||||
|
ITIMER_VIRTUAL = 0x1
|
||||||
IUCLC = 0x1000
|
IUCLC = 0x1000
|
||||||
IXANY = 0x800
|
IXANY = 0x800
|
||||||
IXOFF = 0x400
|
IXOFF = 0x400
|
||||||
|
@ -981,6 +1058,19 @@ const (
|
||||||
MNT_WAIT = 0x1
|
MNT_WAIT = 0x1
|
||||||
MNT_WANTRDWR = 0x2000000
|
MNT_WANTRDWR = 0x2000000
|
||||||
MNT_WXALLOWED = 0x800
|
MNT_WXALLOWED = 0x800
|
||||||
|
MOUNT_AFS = "afs"
|
||||||
|
MOUNT_CD9660 = "cd9660"
|
||||||
|
MOUNT_EXT2FS = "ext2fs"
|
||||||
|
MOUNT_FFS = "ffs"
|
||||||
|
MOUNT_FUSEFS = "fuse"
|
||||||
|
MOUNT_MFS = "mfs"
|
||||||
|
MOUNT_MSDOS = "msdos"
|
||||||
|
MOUNT_NCPFS = "ncpfs"
|
||||||
|
MOUNT_NFS = "nfs"
|
||||||
|
MOUNT_NTFS = "ntfs"
|
||||||
|
MOUNT_TMPFS = "tmpfs"
|
||||||
|
MOUNT_UDF = "udf"
|
||||||
|
MOUNT_UFS = "ffs"
|
||||||
MSG_BCAST = 0x100
|
MSG_BCAST = 0x100
|
||||||
MSG_CMSG_CLOEXEC = 0x800
|
MSG_CMSG_CLOEXEC = 0x800
|
||||||
MSG_CTRUNC = 0x20
|
MSG_CTRUNC = 0x20
|
||||||
|
@ -993,6 +1083,7 @@ const (
|
||||||
MSG_PEEK = 0x2
|
MSG_PEEK = 0x2
|
||||||
MSG_TRUNC = 0x10
|
MSG_TRUNC = 0x10
|
||||||
MSG_WAITALL = 0x40
|
MSG_WAITALL = 0x40
|
||||||
|
MSG_WAITFORONE = 0x1000
|
||||||
MS_ASYNC = 0x1
|
MS_ASYNC = 0x1
|
||||||
MS_INVALIDATE = 0x4
|
MS_INVALIDATE = 0x4
|
||||||
MS_SYNC = 0x2
|
MS_SYNC = 0x2
|
||||||
|
@ -1001,7 +1092,8 @@ const (
|
||||||
NET_RT_FLAGS = 0x2
|
NET_RT_FLAGS = 0x2
|
||||||
NET_RT_IFLIST = 0x3
|
NET_RT_IFLIST = 0x3
|
||||||
NET_RT_IFNAMES = 0x6
|
NET_RT_IFNAMES = 0x6
|
||||||
NET_RT_MAXID = 0x7
|
NET_RT_MAXID = 0x8
|
||||||
|
NET_RT_SOURCE = 0x7
|
||||||
NET_RT_STATS = 0x4
|
NET_RT_STATS = 0x4
|
||||||
NET_RT_TABLE = 0x5
|
NET_RT_TABLE = 0x5
|
||||||
NFDBITS = 0x20
|
NFDBITS = 0x20
|
||||||
|
@ -1018,6 +1110,7 @@ const (
|
||||||
NOTE_FORK = 0x40000000
|
NOTE_FORK = 0x40000000
|
||||||
NOTE_LINK = 0x10
|
NOTE_LINK = 0x10
|
||||||
NOTE_LOWAT = 0x1
|
NOTE_LOWAT = 0x1
|
||||||
|
NOTE_OOB = 0x4
|
||||||
NOTE_PCTRLMASK = 0xf0000000
|
NOTE_PCTRLMASK = 0xf0000000
|
||||||
NOTE_PDATAMASK = 0xfffff
|
NOTE_PDATAMASK = 0xfffff
|
||||||
NOTE_RENAME = 0x20
|
NOTE_RENAME = 0x20
|
||||||
|
@ -1154,7 +1247,7 @@ const (
|
||||||
RTM_PROPOSAL = 0x13
|
RTM_PROPOSAL = 0x13
|
||||||
RTM_REDIRECT = 0x6
|
RTM_REDIRECT = 0x6
|
||||||
RTM_RESOLVE = 0xb
|
RTM_RESOLVE = 0xb
|
||||||
RTM_RTTUNIT = 0xf4240
|
RTM_SOURCE = 0x16
|
||||||
RTM_VERSION = 0x5
|
RTM_VERSION = 0x5
|
||||||
RTV_EXPIRE = 0x4
|
RTV_EXPIRE = 0x4
|
||||||
RTV_HOPCOUNT = 0x2
|
RTV_HOPCOUNT = 0x2
|
||||||
|
@ -1172,6 +1265,9 @@ const (
|
||||||
RUSAGE_THREAD = 0x1
|
RUSAGE_THREAD = 0x1
|
||||||
SCM_RIGHTS = 0x1
|
SCM_RIGHTS = 0x1
|
||||||
SCM_TIMESTAMP = 0x4
|
SCM_TIMESTAMP = 0x4
|
||||||
|
SEEK_CUR = 0x1
|
||||||
|
SEEK_END = 0x2
|
||||||
|
SEEK_SET = 0x0
|
||||||
SHUT_RD = 0x0
|
SHUT_RD = 0x0
|
||||||
SHUT_RDWR = 0x2
|
SHUT_RDWR = 0x2
|
||||||
SHUT_WR = 0x1
|
SHUT_WR = 0x1
|
||||||
|
@ -1188,30 +1284,30 @@ const (
|
||||||
SIOCBRDGDELS = 0x80606942
|
SIOCBRDGDELS = 0x80606942
|
||||||
SIOCBRDGFLUSH = 0x80606948
|
SIOCBRDGFLUSH = 0x80606948
|
||||||
SIOCBRDGFRL = 0x808c694e
|
SIOCBRDGFRL = 0x808c694e
|
||||||
SIOCBRDGGCACHE = 0xc0186941
|
SIOCBRDGGCACHE = 0xc0146941
|
||||||
SIOCBRDGGFD = 0xc0186952
|
SIOCBRDGGFD = 0xc0146952
|
||||||
SIOCBRDGGHT = 0xc0186951
|
SIOCBRDGGHT = 0xc0146951
|
||||||
SIOCBRDGGIFFLGS = 0xc060693e
|
SIOCBRDGGIFFLGS = 0xc060693e
|
||||||
SIOCBRDGGMA = 0xc0186953
|
SIOCBRDGGMA = 0xc0146953
|
||||||
SIOCBRDGGPARAM = 0xc0406958
|
SIOCBRDGGPARAM = 0xc0406958
|
||||||
SIOCBRDGGPRI = 0xc0186950
|
SIOCBRDGGPRI = 0xc0146950
|
||||||
SIOCBRDGGRL = 0xc030694f
|
SIOCBRDGGRL = 0xc030694f
|
||||||
SIOCBRDGGTO = 0xc0186946
|
SIOCBRDGGTO = 0xc0146946
|
||||||
SIOCBRDGIFS = 0xc0606942
|
SIOCBRDGIFS = 0xc0606942
|
||||||
SIOCBRDGRTS = 0xc0206943
|
SIOCBRDGRTS = 0xc0206943
|
||||||
SIOCBRDGSADDR = 0xc1286944
|
SIOCBRDGSADDR = 0xc1286944
|
||||||
SIOCBRDGSCACHE = 0x80186940
|
SIOCBRDGSCACHE = 0x80146940
|
||||||
SIOCBRDGSFD = 0x80186952
|
SIOCBRDGSFD = 0x80146952
|
||||||
SIOCBRDGSHT = 0x80186951
|
SIOCBRDGSHT = 0x80146951
|
||||||
SIOCBRDGSIFCOST = 0x80606955
|
SIOCBRDGSIFCOST = 0x80606955
|
||||||
SIOCBRDGSIFFLGS = 0x8060693f
|
SIOCBRDGSIFFLGS = 0x8060693f
|
||||||
SIOCBRDGSIFPRIO = 0x80606954
|
SIOCBRDGSIFPRIO = 0x80606954
|
||||||
SIOCBRDGSIFPROT = 0x8060694a
|
SIOCBRDGSIFPROT = 0x8060694a
|
||||||
SIOCBRDGSMA = 0x80186953
|
SIOCBRDGSMA = 0x80146953
|
||||||
SIOCBRDGSPRI = 0x80186950
|
SIOCBRDGSPRI = 0x80146950
|
||||||
SIOCBRDGSPROTO = 0x8018695a
|
SIOCBRDGSPROTO = 0x8014695a
|
||||||
SIOCBRDGSTO = 0x80186945
|
SIOCBRDGSTO = 0x80146945
|
||||||
SIOCBRDGSTXHC = 0x80186959
|
SIOCBRDGSTXHC = 0x80146959
|
||||||
SIOCDELLABEL = 0x80206997
|
SIOCDELLABEL = 0x80206997
|
||||||
SIOCDELMULTI = 0x80206932
|
SIOCDELMULTI = 0x80206932
|
||||||
SIOCDIFADDR = 0x80206919
|
SIOCDIFADDR = 0x80206919
|
||||||
|
@ -1264,6 +1360,7 @@ const (
|
||||||
SIOCGPWE3CTRLWORD = 0xc02069dc
|
SIOCGPWE3CTRLWORD = 0xc02069dc
|
||||||
SIOCGPWE3FAT = 0xc02069dd
|
SIOCGPWE3FAT = 0xc02069dd
|
||||||
SIOCGPWE3NEIGHBOR = 0xc21869de
|
SIOCGPWE3NEIGHBOR = 0xc21869de
|
||||||
|
SIOCGRXHPRIO = 0xc02069db
|
||||||
SIOCGSPPPPARAMS = 0xc0206994
|
SIOCGSPPPPARAMS = 0xc0206994
|
||||||
SIOCGTXHPRIO = 0xc02069c6
|
SIOCGTXHPRIO = 0xc02069c6
|
||||||
SIOCGUMBINFO = 0xc02069be
|
SIOCGUMBINFO = 0xc02069be
|
||||||
|
@ -1310,17 +1407,13 @@ const (
|
||||||
SIOCSPWE3CTRLWORD = 0x802069dc
|
SIOCSPWE3CTRLWORD = 0x802069dc
|
||||||
SIOCSPWE3FAT = 0x802069dd
|
SIOCSPWE3FAT = 0x802069dd
|
||||||
SIOCSPWE3NEIGHBOR = 0x821869de
|
SIOCSPWE3NEIGHBOR = 0x821869de
|
||||||
|
SIOCSRXHPRIO = 0x802069db
|
||||||
SIOCSSPPPPARAMS = 0x80206993
|
SIOCSSPPPPARAMS = 0x80206993
|
||||||
SIOCSTXHPRIO = 0x802069c5
|
SIOCSTXHPRIO = 0x802069c5
|
||||||
SIOCSUMBPARAM = 0x802069bf
|
SIOCSUMBPARAM = 0x802069bf
|
||||||
SIOCSVH = 0xc02069f5
|
SIOCSVH = 0xc02069f5
|
||||||
SIOCSVNETFLOWID = 0x802069c3
|
SIOCSVNETFLOWID = 0x802069c3
|
||||||
SIOCSVNETID = 0x802069a6
|
SIOCSVNETID = 0x802069a6
|
||||||
SIOCSWGDPID = 0xc018695b
|
|
||||||
SIOCSWGMAXFLOW = 0xc0186960
|
|
||||||
SIOCSWGMAXGROUP = 0xc018695d
|
|
||||||
SIOCSWSDPID = 0x8018695c
|
|
||||||
SIOCSWSPORTNO = 0xc060695f
|
|
||||||
SOCK_CLOEXEC = 0x8000
|
SOCK_CLOEXEC = 0x8000
|
||||||
SOCK_DGRAM = 0x2
|
SOCK_DGRAM = 0x2
|
||||||
SOCK_DNS = 0x1000
|
SOCK_DNS = 0x1000
|
||||||
|
@ -1335,6 +1428,7 @@ const (
|
||||||
SO_BINDANY = 0x1000
|
SO_BINDANY = 0x1000
|
||||||
SO_BROADCAST = 0x20
|
SO_BROADCAST = 0x20
|
||||||
SO_DEBUG = 0x1
|
SO_DEBUG = 0x1
|
||||||
|
SO_DOMAIN = 0x1024
|
||||||
SO_DONTROUTE = 0x10
|
SO_DONTROUTE = 0x10
|
||||||
SO_ERROR = 0x1007
|
SO_ERROR = 0x1007
|
||||||
SO_KEEPALIVE = 0x8
|
SO_KEEPALIVE = 0x8
|
||||||
|
@ -1342,6 +1436,7 @@ const (
|
||||||
SO_NETPROC = 0x1020
|
SO_NETPROC = 0x1020
|
||||||
SO_OOBINLINE = 0x100
|
SO_OOBINLINE = 0x100
|
||||||
SO_PEERCRED = 0x1022
|
SO_PEERCRED = 0x1022
|
||||||
|
SO_PROTOCOL = 0x1025
|
||||||
SO_RCVBUF = 0x1002
|
SO_RCVBUF = 0x1002
|
||||||
SO_RCVLOWAT = 0x1004
|
SO_RCVLOWAT = 0x1004
|
||||||
SO_RCVTIMEO = 0x1006
|
SO_RCVTIMEO = 0x1006
|
||||||
|
@ -1391,7 +1486,18 @@ const (
|
||||||
TCOFLUSH = 0x2
|
TCOFLUSH = 0x2
|
||||||
TCOOFF = 0x1
|
TCOOFF = 0x1
|
||||||
TCOON = 0x2
|
TCOON = 0x2
|
||||||
TCP_MAXBURST = 0x4
|
TCPOPT_EOL = 0x0
|
||||||
|
TCPOPT_MAXSEG = 0x2
|
||||||
|
TCPOPT_NOP = 0x1
|
||||||
|
TCPOPT_SACK = 0x5
|
||||||
|
TCPOPT_SACK_HDR = 0x1010500
|
||||||
|
TCPOPT_SACK_PERMITTED = 0x4
|
||||||
|
TCPOPT_SACK_PERMIT_HDR = 0x1010402
|
||||||
|
TCPOPT_SIGNATURE = 0x13
|
||||||
|
TCPOPT_TIMESTAMP = 0x8
|
||||||
|
TCPOPT_TSTAMP_HDR = 0x101080a
|
||||||
|
TCPOPT_WINDOW = 0x3
|
||||||
|
TCP_INFO = 0x9
|
||||||
TCP_MAXSEG = 0x2
|
TCP_MAXSEG = 0x2
|
||||||
TCP_MAXWIN = 0xffff
|
TCP_MAXWIN = 0xffff
|
||||||
TCP_MAX_SACK = 0x3
|
TCP_MAX_SACK = 0x3
|
||||||
|
@ -1400,6 +1506,7 @@ const (
|
||||||
TCP_MSS = 0x200
|
TCP_MSS = 0x200
|
||||||
TCP_NODELAY = 0x1
|
TCP_NODELAY = 0x1
|
||||||
TCP_NOPUSH = 0x10
|
TCP_NOPUSH = 0x10
|
||||||
|
TCP_SACKHOLE_LIMIT = 0x80
|
||||||
TCP_SACK_ENABLE = 0x8
|
TCP_SACK_ENABLE = 0x8
|
||||||
TCSAFLUSH = 0x2
|
TCSAFLUSH = 0x2
|
||||||
TIMER_ABSTIME = 0x1
|
TIMER_ABSTIME = 0x1
|
||||||
|
@ -1768,7 +1875,7 @@ var signalList = [...]struct {
|
||||||
{3, "SIGQUIT", "quit"},
|
{3, "SIGQUIT", "quit"},
|
||||||
{4, "SIGILL", "illegal instruction"},
|
{4, "SIGILL", "illegal instruction"},
|
||||||
{5, "SIGTRAP", "trace/BPT trap"},
|
{5, "SIGTRAP", "trace/BPT trap"},
|
||||||
{6, "SIGABRT", "abort trap"},
|
{6, "SIGIOT", "abort trap"},
|
||||||
{7, "SIGEMT", "EMT trap"},
|
{7, "SIGEMT", "EMT trap"},
|
||||||
{8, "SIGFPE", "floating point exception"},
|
{8, "SIGFPE", "floating point exception"},
|
||||||
{9, "SIGKILL", "killed"},
|
{9, "SIGKILL", "killed"},
|
||||||
|
@ -1795,4 +1902,5 @@ var signalList = [...]struct {
|
||||||
{30, "SIGUSR1", "user defined signal 1"},
|
{30, "SIGUSR1", "user defined signal 1"},
|
||||||
{31, "SIGUSR2", "user defined signal 2"},
|
{31, "SIGUSR2", "user defined signal 2"},
|
||||||
{32, "SIGTHR", "thread AST"},
|
{32, "SIGTHR", "thread AST"},
|
||||||
|
{28672, "SIGSTKSZ", "unknown signal"},
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,6 +112,12 @@ const (
|
||||||
BPF_FILDROP_CAPTURE = 0x1
|
BPF_FILDROP_CAPTURE = 0x1
|
||||||
BPF_FILDROP_DROP = 0x2
|
BPF_FILDROP_DROP = 0x2
|
||||||
BPF_FILDROP_PASS = 0x0
|
BPF_FILDROP_PASS = 0x0
|
||||||
|
BPF_F_DIR_IN = 0x10
|
||||||
|
BPF_F_DIR_MASK = 0x30
|
||||||
|
BPF_F_DIR_OUT = 0x20
|
||||||
|
BPF_F_DIR_SHIFT = 0x4
|
||||||
|
BPF_F_FLOWID = 0x8
|
||||||
|
BPF_F_PRI_MASK = 0x7
|
||||||
BPF_H = 0x8
|
BPF_H = 0x8
|
||||||
BPF_IMM = 0x0
|
BPF_IMM = 0x0
|
||||||
BPF_IND = 0x40
|
BPF_IND = 0x40
|
||||||
|
@ -140,6 +146,7 @@ const (
|
||||||
BPF_OR = 0x40
|
BPF_OR = 0x40
|
||||||
BPF_RELEASE = 0x30bb6
|
BPF_RELEASE = 0x30bb6
|
||||||
BPF_RET = 0x6
|
BPF_RET = 0x6
|
||||||
|
BPF_RND = 0xc0
|
||||||
BPF_RSH = 0x70
|
BPF_RSH = 0x70
|
||||||
BPF_ST = 0x2
|
BPF_ST = 0x2
|
||||||
BPF_STX = 0x3
|
BPF_STX = 0x3
|
||||||
|
@ -301,6 +308,8 @@ const (
|
||||||
EMUL_ENABLED = 0x1
|
EMUL_ENABLED = 0x1
|
||||||
EMUL_NATIVE = 0x2
|
EMUL_NATIVE = 0x2
|
||||||
ENDRUNDISC = 0x9
|
ENDRUNDISC = 0x9
|
||||||
|
ETH64_8021_RSVD_MASK = 0xfffffffffff0
|
||||||
|
ETH64_8021_RSVD_PREFIX = 0x180c2000000
|
||||||
ETHERMIN = 0x2e
|
ETHERMIN = 0x2e
|
||||||
ETHERMTU = 0x5dc
|
ETHERMTU = 0x5dc
|
||||||
ETHERTYPE_8023 = 0x4
|
ETHERTYPE_8023 = 0x4
|
||||||
|
@ -353,6 +362,7 @@ const (
|
||||||
ETHERTYPE_DN = 0x6003
|
ETHERTYPE_DN = 0x6003
|
||||||
ETHERTYPE_DOGFIGHT = 0x1989
|
ETHERTYPE_DOGFIGHT = 0x1989
|
||||||
ETHERTYPE_DSMD = 0x8039
|
ETHERTYPE_DSMD = 0x8039
|
||||||
|
ETHERTYPE_EAPOL = 0x888e
|
||||||
ETHERTYPE_ECMA = 0x803
|
ETHERTYPE_ECMA = 0x803
|
||||||
ETHERTYPE_ENCRYPT = 0x803d
|
ETHERTYPE_ENCRYPT = 0x803d
|
||||||
ETHERTYPE_ES = 0x805d
|
ETHERTYPE_ES = 0x805d
|
||||||
|
@ -413,15 +423,16 @@ const (
|
||||||
ETHERTYPE_NCD = 0x8149
|
ETHERTYPE_NCD = 0x8149
|
||||||
ETHERTYPE_NESTAR = 0x8006
|
ETHERTYPE_NESTAR = 0x8006
|
||||||
ETHERTYPE_NETBEUI = 0x8191
|
ETHERTYPE_NETBEUI = 0x8191
|
||||||
|
ETHERTYPE_NHRP = 0x2001
|
||||||
ETHERTYPE_NOVELL = 0x8138
|
ETHERTYPE_NOVELL = 0x8138
|
||||||
ETHERTYPE_NS = 0x600
|
ETHERTYPE_NS = 0x600
|
||||||
ETHERTYPE_NSAT = 0x601
|
ETHERTYPE_NSAT = 0x601
|
||||||
ETHERTYPE_NSCOMPAT = 0x807
|
ETHERTYPE_NSCOMPAT = 0x807
|
||||||
|
ETHERTYPE_NSH = 0x984f
|
||||||
ETHERTYPE_NTRAILER = 0x10
|
ETHERTYPE_NTRAILER = 0x10
|
||||||
ETHERTYPE_OS9 = 0x7007
|
ETHERTYPE_OS9 = 0x7007
|
||||||
ETHERTYPE_OS9NET = 0x7009
|
ETHERTYPE_OS9NET = 0x7009
|
||||||
ETHERTYPE_PACER = 0x80c6
|
ETHERTYPE_PACER = 0x80c6
|
||||||
ETHERTYPE_PAE = 0x888e
|
|
||||||
ETHERTYPE_PBB = 0x88e7
|
ETHERTYPE_PBB = 0x88e7
|
||||||
ETHERTYPE_PCS = 0x4242
|
ETHERTYPE_PCS = 0x4242
|
||||||
ETHERTYPE_PLANNING = 0x8044
|
ETHERTYPE_PLANNING = 0x8044
|
||||||
|
@ -504,10 +515,11 @@ const (
|
||||||
ETHER_VLAN_ENCAP_LEN = 0x4
|
ETHER_VLAN_ENCAP_LEN = 0x4
|
||||||
EVFILT_AIO = -0x3
|
EVFILT_AIO = -0x3
|
||||||
EVFILT_DEVICE = -0x8
|
EVFILT_DEVICE = -0x8
|
||||||
|
EVFILT_EXCEPT = -0x9
|
||||||
EVFILT_PROC = -0x5
|
EVFILT_PROC = -0x5
|
||||||
EVFILT_READ = -0x1
|
EVFILT_READ = -0x1
|
||||||
EVFILT_SIGNAL = -0x6
|
EVFILT_SIGNAL = -0x6
|
||||||
EVFILT_SYSCOUNT = 0x8
|
EVFILT_SYSCOUNT = 0x9
|
||||||
EVFILT_TIMER = -0x7
|
EVFILT_TIMER = -0x7
|
||||||
EVFILT_VNODE = -0x4
|
EVFILT_VNODE = -0x4
|
||||||
EVFILT_WRITE = -0x2
|
EVFILT_WRITE = -0x2
|
||||||
|
@ -529,7 +541,7 @@ const (
|
||||||
EV_FLAG1 = 0x2000
|
EV_FLAG1 = 0x2000
|
||||||
EV_ONESHOT = 0x10
|
EV_ONESHOT = 0x10
|
||||||
EV_RECEIPT = 0x40
|
EV_RECEIPT = 0x40
|
||||||
EV_SYSFLAGS = 0xf000
|
EV_SYSFLAGS = 0xf800
|
||||||
EXTA = 0x4b00
|
EXTA = 0x4b00
|
||||||
EXTB = 0x9600
|
EXTB = 0x9600
|
||||||
EXTPROC = 0x800
|
EXTPROC = 0x800
|
||||||
|
@ -795,6 +807,7 @@ const (
|
||||||
IFT_VOICEOVERCABLE = 0xc6
|
IFT_VOICEOVERCABLE = 0xc6
|
||||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
IFT_VOICEOVERFRAMERELAY = 0x99
|
||||||
IFT_VOICEOVERIP = 0x68
|
IFT_VOICEOVERIP = 0x68
|
||||||
|
IFT_WIREGUARD = 0xfb
|
||||||
IFT_X213 = 0x5d
|
IFT_X213 = 0x5d
|
||||||
IFT_X25 = 0x5
|
IFT_X25 = 0x5
|
||||||
IFT_X25DDN = 0x4
|
IFT_X25DDN = 0x4
|
||||||
|
@ -860,6 +873,7 @@ const (
|
||||||
IPPROTO_RAW = 0xff
|
IPPROTO_RAW = 0xff
|
||||||
IPPROTO_ROUTING = 0x2b
|
IPPROTO_ROUTING = 0x2b
|
||||||
IPPROTO_RSVP = 0x2e
|
IPPROTO_RSVP = 0x2e
|
||||||
|
IPPROTO_SCTP = 0x84
|
||||||
IPPROTO_TCP = 0x6
|
IPPROTO_TCP = 0x6
|
||||||
IPPROTO_TP = 0x1d
|
IPPROTO_TP = 0x1d
|
||||||
IPPROTO_UDP = 0x11
|
IPPROTO_UDP = 0x11
|
||||||
|
@ -970,6 +984,9 @@ const (
|
||||||
IP_TTL = 0x4
|
IP_TTL = 0x4
|
||||||
ISIG = 0x80
|
ISIG = 0x80
|
||||||
ISTRIP = 0x20
|
ISTRIP = 0x20
|
||||||
|
ITIMER_PROF = 0x2
|
||||||
|
ITIMER_REAL = 0x0
|
||||||
|
ITIMER_VIRTUAL = 0x1
|
||||||
IUCLC = 0x1000
|
IUCLC = 0x1000
|
||||||
IXANY = 0x800
|
IXANY = 0x800
|
||||||
IXOFF = 0x400
|
IXOFF = 0x400
|
||||||
|
@ -1041,6 +1058,19 @@ const (
|
||||||
MNT_WAIT = 0x1
|
MNT_WAIT = 0x1
|
||||||
MNT_WANTRDWR = 0x2000000
|
MNT_WANTRDWR = 0x2000000
|
||||||
MNT_WXALLOWED = 0x800
|
MNT_WXALLOWED = 0x800
|
||||||
|
MOUNT_AFS = "afs"
|
||||||
|
MOUNT_CD9660 = "cd9660"
|
||||||
|
MOUNT_EXT2FS = "ext2fs"
|
||||||
|
MOUNT_FFS = "ffs"
|
||||||
|
MOUNT_FUSEFS = "fuse"
|
||||||
|
MOUNT_MFS = "mfs"
|
||||||
|
MOUNT_MSDOS = "msdos"
|
||||||
|
MOUNT_NCPFS = "ncpfs"
|
||||||
|
MOUNT_NFS = "nfs"
|
||||||
|
MOUNT_NTFS = "ntfs"
|
||||||
|
MOUNT_TMPFS = "tmpfs"
|
||||||
|
MOUNT_UDF = "udf"
|
||||||
|
MOUNT_UFS = "ffs"
|
||||||
MSG_BCAST = 0x100
|
MSG_BCAST = 0x100
|
||||||
MSG_CMSG_CLOEXEC = 0x800
|
MSG_CMSG_CLOEXEC = 0x800
|
||||||
MSG_CTRUNC = 0x20
|
MSG_CTRUNC = 0x20
|
||||||
|
@ -1053,6 +1083,7 @@ const (
|
||||||
MSG_PEEK = 0x2
|
MSG_PEEK = 0x2
|
||||||
MSG_TRUNC = 0x10
|
MSG_TRUNC = 0x10
|
||||||
MSG_WAITALL = 0x40
|
MSG_WAITALL = 0x40
|
||||||
|
MSG_WAITFORONE = 0x1000
|
||||||
MS_ASYNC = 0x1
|
MS_ASYNC = 0x1
|
||||||
MS_INVALIDATE = 0x4
|
MS_INVALIDATE = 0x4
|
||||||
MS_SYNC = 0x2
|
MS_SYNC = 0x2
|
||||||
|
@ -1061,7 +1092,8 @@ const (
|
||||||
NET_RT_FLAGS = 0x2
|
NET_RT_FLAGS = 0x2
|
||||||
NET_RT_IFLIST = 0x3
|
NET_RT_IFLIST = 0x3
|
||||||
NET_RT_IFNAMES = 0x6
|
NET_RT_IFNAMES = 0x6
|
||||||
NET_RT_MAXID = 0x7
|
NET_RT_MAXID = 0x8
|
||||||
|
NET_RT_SOURCE = 0x7
|
||||||
NET_RT_STATS = 0x4
|
NET_RT_STATS = 0x4
|
||||||
NET_RT_TABLE = 0x5
|
NET_RT_TABLE = 0x5
|
||||||
NFDBITS = 0x20
|
NFDBITS = 0x20
|
||||||
|
@ -1078,6 +1110,7 @@ const (
|
||||||
NOTE_FORK = 0x40000000
|
NOTE_FORK = 0x40000000
|
||||||
NOTE_LINK = 0x10
|
NOTE_LINK = 0x10
|
||||||
NOTE_LOWAT = 0x1
|
NOTE_LOWAT = 0x1
|
||||||
|
NOTE_OOB = 0x4
|
||||||
NOTE_PCTRLMASK = 0xf0000000
|
NOTE_PCTRLMASK = 0xf0000000
|
||||||
NOTE_PDATAMASK = 0xfffff
|
NOTE_PDATAMASK = 0xfffff
|
||||||
NOTE_RENAME = 0x20
|
NOTE_RENAME = 0x20
|
||||||
|
@ -1214,7 +1247,7 @@ const (
|
||||||
RTM_PROPOSAL = 0x13
|
RTM_PROPOSAL = 0x13
|
||||||
RTM_REDIRECT = 0x6
|
RTM_REDIRECT = 0x6
|
||||||
RTM_RESOLVE = 0xb
|
RTM_RESOLVE = 0xb
|
||||||
RTM_RTTUNIT = 0xf4240
|
RTM_SOURCE = 0x16
|
||||||
RTM_VERSION = 0x5
|
RTM_VERSION = 0x5
|
||||||
RTV_EXPIRE = 0x4
|
RTV_EXPIRE = 0x4
|
||||||
RTV_HOPCOUNT = 0x2
|
RTV_HOPCOUNT = 0x2
|
||||||
|
@ -1232,6 +1265,9 @@ const (
|
||||||
RUSAGE_THREAD = 0x1
|
RUSAGE_THREAD = 0x1
|
||||||
SCM_RIGHTS = 0x1
|
SCM_RIGHTS = 0x1
|
||||||
SCM_TIMESTAMP = 0x4
|
SCM_TIMESTAMP = 0x4
|
||||||
|
SEEK_CUR = 0x1
|
||||||
|
SEEK_END = 0x2
|
||||||
|
SEEK_SET = 0x0
|
||||||
SHUT_RD = 0x0
|
SHUT_RD = 0x0
|
||||||
SHUT_RDWR = 0x2
|
SHUT_RDWR = 0x2
|
||||||
SHUT_WR = 0x1
|
SHUT_WR = 0x1
|
||||||
|
@ -1248,30 +1284,30 @@ const (
|
||||||
SIOCBRDGDELS = 0x80606942
|
SIOCBRDGDELS = 0x80606942
|
||||||
SIOCBRDGFLUSH = 0x80606948
|
SIOCBRDGFLUSH = 0x80606948
|
||||||
SIOCBRDGFRL = 0x808c694e
|
SIOCBRDGFRL = 0x808c694e
|
||||||
SIOCBRDGGCACHE = 0xc0186941
|
SIOCBRDGGCACHE = 0xc0146941
|
||||||
SIOCBRDGGFD = 0xc0186952
|
SIOCBRDGGFD = 0xc0146952
|
||||||
SIOCBRDGGHT = 0xc0186951
|
SIOCBRDGGHT = 0xc0146951
|
||||||
SIOCBRDGGIFFLGS = 0xc060693e
|
SIOCBRDGGIFFLGS = 0xc060693e
|
||||||
SIOCBRDGGMA = 0xc0186953
|
SIOCBRDGGMA = 0xc0146953
|
||||||
SIOCBRDGGPARAM = 0xc0406958
|
SIOCBRDGGPARAM = 0xc0406958
|
||||||
SIOCBRDGGPRI = 0xc0186950
|
SIOCBRDGGPRI = 0xc0146950
|
||||||
SIOCBRDGGRL = 0xc030694f
|
SIOCBRDGGRL = 0xc030694f
|
||||||
SIOCBRDGGTO = 0xc0186946
|
SIOCBRDGGTO = 0xc0146946
|
||||||
SIOCBRDGIFS = 0xc0606942
|
SIOCBRDGIFS = 0xc0606942
|
||||||
SIOCBRDGRTS = 0xc0206943
|
SIOCBRDGRTS = 0xc0206943
|
||||||
SIOCBRDGSADDR = 0xc1286944
|
SIOCBRDGSADDR = 0xc1286944
|
||||||
SIOCBRDGSCACHE = 0x80186940
|
SIOCBRDGSCACHE = 0x80146940
|
||||||
SIOCBRDGSFD = 0x80186952
|
SIOCBRDGSFD = 0x80146952
|
||||||
SIOCBRDGSHT = 0x80186951
|
SIOCBRDGSHT = 0x80146951
|
||||||
SIOCBRDGSIFCOST = 0x80606955
|
SIOCBRDGSIFCOST = 0x80606955
|
||||||
SIOCBRDGSIFFLGS = 0x8060693f
|
SIOCBRDGSIFFLGS = 0x8060693f
|
||||||
SIOCBRDGSIFPRIO = 0x80606954
|
SIOCBRDGSIFPRIO = 0x80606954
|
||||||
SIOCBRDGSIFPROT = 0x8060694a
|
SIOCBRDGSIFPROT = 0x8060694a
|
||||||
SIOCBRDGSMA = 0x80186953
|
SIOCBRDGSMA = 0x80146953
|
||||||
SIOCBRDGSPRI = 0x80186950
|
SIOCBRDGSPRI = 0x80146950
|
||||||
SIOCBRDGSPROTO = 0x8018695a
|
SIOCBRDGSPROTO = 0x8014695a
|
||||||
SIOCBRDGSTO = 0x80186945
|
SIOCBRDGSTO = 0x80146945
|
||||||
SIOCBRDGSTXHC = 0x80186959
|
SIOCBRDGSTXHC = 0x80146959
|
||||||
SIOCDELLABEL = 0x80206997
|
SIOCDELLABEL = 0x80206997
|
||||||
SIOCDELMULTI = 0x80206932
|
SIOCDELMULTI = 0x80206932
|
||||||
SIOCDIFADDR = 0x80206919
|
SIOCDIFADDR = 0x80206919
|
||||||
|
@ -1378,11 +1414,6 @@ const (
|
||||||
SIOCSVH = 0xc02069f5
|
SIOCSVH = 0xc02069f5
|
||||||
SIOCSVNETFLOWID = 0x802069c3
|
SIOCSVNETFLOWID = 0x802069c3
|
||||||
SIOCSVNETID = 0x802069a6
|
SIOCSVNETID = 0x802069a6
|
||||||
SIOCSWGDPID = 0xc018695b
|
|
||||||
SIOCSWGMAXFLOW = 0xc0186960
|
|
||||||
SIOCSWGMAXGROUP = 0xc018695d
|
|
||||||
SIOCSWSDPID = 0x8018695c
|
|
||||||
SIOCSWSPORTNO = 0xc060695f
|
|
||||||
SOCK_CLOEXEC = 0x8000
|
SOCK_CLOEXEC = 0x8000
|
||||||
SOCK_DGRAM = 0x2
|
SOCK_DGRAM = 0x2
|
||||||
SOCK_DNS = 0x1000
|
SOCK_DNS = 0x1000
|
||||||
|
@ -1455,7 +1486,18 @@ const (
|
||||||
TCOFLUSH = 0x2
|
TCOFLUSH = 0x2
|
||||||
TCOOFF = 0x1
|
TCOOFF = 0x1
|
||||||
TCOON = 0x2
|
TCOON = 0x2
|
||||||
TCP_MAXBURST = 0x4
|
TCPOPT_EOL = 0x0
|
||||||
|
TCPOPT_MAXSEG = 0x2
|
||||||
|
TCPOPT_NOP = 0x1
|
||||||
|
TCPOPT_SACK = 0x5
|
||||||
|
TCPOPT_SACK_HDR = 0x1010500
|
||||||
|
TCPOPT_SACK_PERMITTED = 0x4
|
||||||
|
TCPOPT_SACK_PERMIT_HDR = 0x1010402
|
||||||
|
TCPOPT_SIGNATURE = 0x13
|
||||||
|
TCPOPT_TIMESTAMP = 0x8
|
||||||
|
TCPOPT_TSTAMP_HDR = 0x101080a
|
||||||
|
TCPOPT_WINDOW = 0x3
|
||||||
|
TCP_INFO = 0x9
|
||||||
TCP_MAXSEG = 0x2
|
TCP_MAXSEG = 0x2
|
||||||
TCP_MAXWIN = 0xffff
|
TCP_MAXWIN = 0xffff
|
||||||
TCP_MAX_SACK = 0x3
|
TCP_MAX_SACK = 0x3
|
||||||
|
@ -1833,7 +1875,7 @@ var signalList = [...]struct {
|
||||||
{3, "SIGQUIT", "quit"},
|
{3, "SIGQUIT", "quit"},
|
||||||
{4, "SIGILL", "illegal instruction"},
|
{4, "SIGILL", "illegal instruction"},
|
||||||
{5, "SIGTRAP", "trace/BPT trap"},
|
{5, "SIGTRAP", "trace/BPT trap"},
|
||||||
{6, "SIGABRT", "abort trap"},
|
{6, "SIGIOT", "abort trap"},
|
||||||
{7, "SIGEMT", "EMT trap"},
|
{7, "SIGEMT", "EMT trap"},
|
||||||
{8, "SIGFPE", "floating point exception"},
|
{8, "SIGFPE", "floating point exception"},
|
||||||
{9, "SIGKILL", "killed"},
|
{9, "SIGKILL", "killed"},
|
||||||
|
@ -1860,4 +1902,5 @@ var signalList = [...]struct {
|
||||||
{30, "SIGUSR1", "user defined signal 1"},
|
{30, "SIGUSR1", "user defined signal 1"},
|
||||||
{31, "SIGUSR2", "user defined signal 2"},
|
{31, "SIGUSR2", "user defined signal 2"},
|
||||||
{32, "SIGTHR", "thread AST"},
|
{32, "SIGTHR", "thread AST"},
|
||||||
|
{81920, "SIGSTKSZ", "unknown signal"},
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,40 +0,0 @@
|
||||||
// go run mksyscall.go -tags darwin,amd64,go1.13 syscall_darwin.1_13.go
|
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
|
||||||
|
|
||||||
//go:build darwin && amd64 && go1.13
|
|
||||||
// +build darwin,amd64,go1.13
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
var _ syscall.Errno
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func closedir(dir uintptr) (err error) {
|
|
||||||
_, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var libc_closedir_trampoline_addr uintptr
|
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
|
|
||||||
r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
|
|
||||||
res = Errno(r0)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var libc_readdir_r_trampoline_addr uintptr
|
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
|
|
|
@ -1,25 +0,0 @@
|
||||||
// go run mkasm_darwin.go amd64
|
|
||||||
// Code generated by the command above; DO NOT EDIT.
|
|
||||||
|
|
||||||
//go:build go1.13
|
|
||||||
// +build go1.13
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fdopendir(SB)
|
|
||||||
|
|
||||||
GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8
|
|
||||||
DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB)
|
|
||||||
|
|
||||||
TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_closedir(SB)
|
|
||||||
|
|
||||||
GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8
|
|
||||||
DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB)
|
|
||||||
|
|
||||||
TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_readdir_r(SB)
|
|
||||||
|
|
||||||
GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8
|
|
||||||
DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB)
|
|
|
@ -1,8 +1,8 @@
|
||||||
// go run mksyscall.go -tags darwin,amd64,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go
|
// go run mksyscall.go -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
//go:build darwin && amd64 && go1.12
|
//go:build darwin && amd64
|
||||||
// +build darwin,amd64,go1.12
|
// +build darwin,amd64
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -463,6 +463,32 @@ var libc_munlockall_trampoline_addr uintptr
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func closedir(dir uintptr) (err error) {
|
||||||
|
_, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_closedir_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
|
||||||
|
r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
|
||||||
|
res = Errno(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_readdir_r_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func pipe(p *[2]int32) (err error) {
|
func pipe(p *[2]int32) (err error) {
|
||||||
_, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0)
|
_, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
// go run mkasm_darwin.go amd64
|
// go run mkasm.go darwin amd64
|
||||||
// Code generated by the command above; DO NOT EDIT.
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
|
|
||||||
//go:build go1.12
|
|
||||||
// +build go1.12
|
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_fdopendir(SB)
|
||||||
|
|
||||||
|
GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_getgroups(SB)
|
JMP libc_getgroups(SB)
|
||||||
|
|
||||||
|
@ -174,6 +177,18 @@ TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)
|
DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_closedir(SB)
|
||||||
|
|
||||||
|
GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_readdir_r(SB)
|
||||||
|
|
||||||
|
GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_pipe(SB)
|
JMP libc_pipe(SB)
|
||||||
|
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
// go run mksyscall.go -tags darwin,arm64,go1.13 syscall_darwin.1_13.go
|
|
||||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
|
||||||
|
|
||||||
//go:build darwin && arm64 && go1.13
|
|
||||||
// +build darwin,arm64,go1.13
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
var _ syscall.Errno
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func closedir(dir uintptr) (err error) {
|
|
||||||
_, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var libc_closedir_trampoline_addr uintptr
|
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
|
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
|
||||||
|
|
||||||
func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
|
|
||||||
r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
|
|
||||||
res = Errno(r0)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var libc_readdir_r_trampoline_addr uintptr
|
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
|
|
|
@ -1,25 +0,0 @@
|
||||||
// go run mkasm_darwin.go arm64
|
|
||||||
// Code generated by the command above; DO NOT EDIT.
|
|
||||||
|
|
||||||
//go:build go1.13
|
|
||||||
// +build go1.13
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_fdopendir(SB)
|
|
||||||
|
|
||||||
GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8
|
|
||||||
DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB)
|
|
||||||
|
|
||||||
TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_closedir(SB)
|
|
||||||
|
|
||||||
GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8
|
|
||||||
DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB)
|
|
||||||
|
|
||||||
TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0
|
|
||||||
JMP libc_readdir_r(SB)
|
|
||||||
|
|
||||||
GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8
|
|
||||||
DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB)
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue