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/kube-openapi v0.0.0-20220803162953-67bda5d908f1
|
||||
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 (
|
||||
|
@ -61,12 +61,12 @@ require (
|
|||
go.uber.org/atomic v1.9.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/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/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
||||
golang.org/x/text v0.3.7 // indirect
|
||||
golang.org/x/sys v0.5.0 // indirect
|
||||
golang.org/x/term v0.5.0 // indirect
|
||||
golang.org/x/text v0.7.0 // indirect
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
|
||||
golang.org/x/tools v0.1.12 // 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-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-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
|
||||
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-20190226205417-e64efc72b421/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-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-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
|
||||
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-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
|
||||
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.3.0/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.5/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.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
||||
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-20190308202827-9d24e82272b4/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=
|
||||
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/pkg v0.0.0-20230222150228-2fdd6bf8be31 h1:/A/yJ4IzvMLYCCiQ8Ew3DweTtF2s7t3LQosmmo5T46o=
|
||||
knative.dev/pkg v0.0.0-20230222150228-2fdd6bf8be31/go.mod h1:FLoALs9HfjVPT7sjrpvNLqO+mx+RzJZwUJ2b0UsLLus=
|
||||
knative.dev/pkg v0.0.0-20230224190030-645afb2d5dad h1:RIjysOocoRfalLJgaSBkKHf6NrgdvAagF1x2CNihjqc=
|
||||
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/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
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.
|
||||
func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
|
||||
ctx, f := context.WithCancel(parent)
|
||||
return ctx, CancelFunc(f)
|
||||
return ctx, f
|
||||
}
|
||||
|
||||
// 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.
|
||||
func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {
|
||||
ctx, f := context.WithDeadline(parent, deadline)
|
||||
return ctx, CancelFunc(f)
|
||||
return ctx, f
|
||||
}
|
||||
|
||||
// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).
|
||||
|
|
|
@ -6,23 +6,91 @@
|
|||
|
||||
package http2
|
||||
|
||||
// flow is the flow control window's size.
|
||||
type flow struct {
|
||||
// inflowMinRefresh is the minimum number of bytes we'll send for a
|
||||
// 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
|
||||
|
||||
// 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
|
||||
|
||||
// conn points to the shared connection-level flow that is
|
||||
// shared by all streams on that conn. It is nil for the flow
|
||||
// conn points to the shared connection-level outflow that is
|
||||
// shared by all streams on that conn. It is nil for the outflow
|
||||
// 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
|
||||
if f.conn != nil && f.conn.n < n {
|
||||
n = f.conn.n
|
||||
|
@ -30,7 +98,7 @@ func (f *flow) available() int32 {
|
|||
return n
|
||||
}
|
||||
|
||||
func (f *flow) take(n int32) {
|
||||
func (f *outflow) take(n int32) {
|
||||
if n > f.available() {
|
||||
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.
|
||||
// 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
|
||||
if (sum > n) == (f.n > 0) {
|
||||
f.n = sum
|
||||
|
|
|
@ -23,7 +23,7 @@ const frameHeaderLen = 9
|
|||
var padZeros = make([]byte, 255) // zeros for padding
|
||||
|
||||
// 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
|
||||
|
||||
const (
|
||||
|
@ -146,7 +146,7 @@ func typeFrameParser(t FrameType) frameParser {
|
|||
|
||||
// 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 {
|
||||
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
|
||||
// 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 {
|
||||
FrameHeader
|
||||
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
|
||||
// and to not call other Write methods concurrently.
|
||||
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 {
|
||||
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, pad...)
|
||||
return f.endWrite()
|
||||
return nil
|
||||
}
|
||||
|
||||
// A SettingsFrame conveys configuration parameters that affect how
|
||||
// endpoints communicate, such as preferences and constraints on peer
|
||||
// behavior.
|
||||
//
|
||||
// See http://http2.github.io/http2-spec/#SETTINGS
|
||||
// See https://httpwg.org/specs/rfc7540.html#SETTINGS
|
||||
type SettingsFrame struct {
|
||||
FrameHeader
|
||||
p []byte
|
||||
|
@ -837,7 +846,7 @@ func (f *Framer) WriteSettingsAck() error {
|
|||
// A PingFrame is a mechanism for measuring a minimal round trip time
|
||||
// from the sender, as well as determining whether an idle connection
|
||||
// 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 {
|
||||
FrameHeader
|
||||
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.
|
||||
// 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 {
|
||||
FrameHeader
|
||||
LastStreamID uint32
|
||||
|
@ -934,7 +943,7 @@ func parseUnknownFrame(_ *frameCache, fh FrameHeader, countError func(string), p
|
|||
}
|
||||
|
||||
// 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 {
|
||||
FrameHeader
|
||||
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.
|
||||
// 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 {
|
||||
FrameHeader
|
||||
PriorityParam
|
||||
|
@ -1193,7 +1202,7 @@ func (f *Framer) WritePriority(streamID uint32, p PriorityParam) error {
|
|||
}
|
||||
|
||||
// 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 {
|
||||
FrameHeader
|
||||
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.
|
||||
// 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 {
|
||||
FrameHeader
|
||||
headerFragBuf []byte
|
||||
|
@ -1266,7 +1275,7 @@ func (f *Framer) WriteContinuation(streamID uint32, endHeaders bool, headerBlock
|
|||
}
|
||||
|
||||
// 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 {
|
||||
FrameHeader
|
||||
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.
|
||||
func (s h2cHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
// 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()
|
||||
s.s.ServeConn(conn, &http2.ServeConnOpts{
|
||||
Context: r.Context(),
|
||||
BaseConfig: extractServer(r),
|
||||
Handler: s.Handler,
|
||||
SawClientPreface: true,
|
||||
})
|
||||
|
@ -99,11 +109,13 @@ func (s h2cHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||
if http2VerboseLogs {
|
||||
log.Printf("h2c: error h2c upgrade: %v", err)
|
||||
}
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
defer conn.Close()
|
||||
s.s.ServeConn(conn, &http2.ServeConnOpts{
|
||||
Context: r.Context(),
|
||||
BaseConfig: extractServer(r),
|
||||
Handler: s.Handler,
|
||||
UpgradeRequest: r,
|
||||
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")
|
||||
}
|
||||
|
||||
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))
|
||||
|
||||
conn, rw, err := hijacker.Hijack()
|
||||
|
|
|
@ -27,7 +27,14 @@ func buildCommonHeaderMaps() {
|
|||
"accept-language",
|
||||
"accept-ranges",
|
||||
"age",
|
||||
"access-control-allow-credentials",
|
||||
"access-control-allow-headers",
|
||||
"access-control-allow-methods",
|
||||
"access-control-allow-origin",
|
||||
"access-control-expose-headers",
|
||||
"access-control-max-age",
|
||||
"access-control-request-headers",
|
||||
"access-control-request-method",
|
||||
"allow",
|
||||
"authorization",
|
||||
"cache-control",
|
||||
|
@ -53,6 +60,7 @@ func buildCommonHeaderMaps() {
|
|||
"link",
|
||||
"location",
|
||||
"max-forwards",
|
||||
"origin",
|
||||
"proxy-authenticate",
|
||||
"proxy-authorization",
|
||||
"range",
|
||||
|
@ -68,6 +76,8 @@ func buildCommonHeaderMaps() {
|
|||
"vary",
|
||||
"via",
|
||||
"www-authenticate",
|
||||
"x-forwarded-for",
|
||||
"x-forwarded-proto",
|
||||
}
|
||||
commonLowerHeader = 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)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
// 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
|
||||
// specified in SetMaxDynamicTableSize to v. By default, it is set to
|
||||
// 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.
|
||||
//
|
||||
// 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 {
|
||||
k := uint64((1 << n) - 1)
|
||||
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.
|
||||
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
|
||||
// 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
|
||||
|
@ -158,7 +158,7 @@ func (d *Decoder) SetAllowedMaxDynamicTableSize(v uint32) {
|
|||
}
|
||||
|
||||
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
|
||||
size uint32 // in bytes
|
||||
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
|
||||
}
|
||||
|
||||
// Decode decodes an entire block.
|
||||
// DecodeFull decodes an entire block.
|
||||
//
|
||||
// TODO: remove this method and make it incremental later? This is
|
||||
// easier for debugging now.
|
||||
|
@ -307,27 +307,27 @@ func (d *Decoder) parseHeaderFieldRepr() error {
|
|||
case b&128 != 0:
|
||||
// Indexed representation.
|
||||
// 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()
|
||||
case b&192 == 64:
|
||||
// 6.2.1 Literal Header Field with Incremental Indexing
|
||||
// 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)
|
||||
case b&240 == 0:
|
||||
// 6.2.2 Literal Header Field without Indexing
|
||||
// 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)
|
||||
case b&240 == 16:
|
||||
// 6.2.3 Literal Header Field never Indexed
|
||||
// 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)
|
||||
case b&224 == 32:
|
||||
// 6.3 Dynamic Table Size Update
|
||||
// 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()
|
||||
}
|
||||
|
||||
|
@ -359,6 +359,7 @@ func (d *Decoder) parseFieldLiteral(n uint8, it indexType) error {
|
|||
|
||||
var hf HeaderField
|
||||
wantStr := d.emitEnabled || it.indexed()
|
||||
var undecodedName undecodedString
|
||||
if nameIdx > 0 {
|
||||
ihf, ok := d.at(nameIdx)
|
||||
if !ok {
|
||||
|
@ -366,15 +367,27 @@ func (d *Decoder) parseFieldLiteral(n uint8, it indexType) error {
|
|||
}
|
||||
hf.Name = ihf.Name
|
||||
} else {
|
||||
hf.Name, buf, err = d.readString(buf, wantStr)
|
||||
undecodedName, buf, err = d.readString(buf)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
hf.Value, buf, err = d.readString(buf, wantStr)
|
||||
undecodedValue, buf, err := d.readString(buf)
|
||||
if err != nil {
|
||||
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
|
||||
if it.indexed() {
|
||||
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
|
||||
// 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.
|
||||
//
|
||||
|
@ -459,46 +472,52 @@ func readVarInt(n byte, p []byte) (i uint64, remain []byte, err error) {
|
|||
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
|
||||
// []byte->string garbage are skipped if s will be ignored
|
||||
// anyway. This does mean that huffman decoding errors for non-indexed
|
||||
// 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) {
|
||||
// It returns a reference to the encoded string data to permit deferring decode costs
|
||||
// until after the caller verifies all data is present.
|
||||
func (d *Decoder) readString(p []byte) (u undecodedString, remain []byte, err error) {
|
||||
if len(p) == 0 {
|
||||
return "", p, errNeedMore
|
||||
return u, p, errNeedMore
|
||||
}
|
||||
isHuff := p[0]&128 != 0
|
||||
strLen, p, err := readVarInt(7, p)
|
||||
if err != nil {
|
||||
return "", p, err
|
||||
return u, p, err
|
||||
}
|
||||
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 {
|
||||
return "", p, errNeedMore
|
||||
}
|
||||
if !isHuff {
|
||||
if wantStr {
|
||||
s = string(p[:strLen])
|
||||
}
|
||||
return s, p[strLen:], nil
|
||||
return u, p, errNeedMore
|
||||
}
|
||||
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.Reset() // don't trust others
|
||||
defer bufPool.Put(buf)
|
||||
if err := huffmanDecode(buf, d.maxStrLen, p[:strLen]); err != nil {
|
||||
buf.Reset()
|
||||
return "", nil, err
|
||||
}
|
||||
var s string
|
||||
err := huffmanDecode(buf, d.maxStrLen, u.b)
|
||||
if err == nil {
|
||||
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
|
||||
// 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
|
||||
// staticTable pointer.
|
||||
// All tables are assumed to be a dynamic tables except for the global staticTable.
|
||||
//
|
||||
// See Section 2.3.3.
|
||||
func (t *headerFieldTable) search(f HeaderField) (i uint64, nameValueMatch bool) {
|
||||
|
@ -125,81 +124,6 @@ func (t *headerFieldTable) idToIndex(id uint64) uint64 {
|
|||
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{
|
||||
0x1ff8,
|
||||
0x7fffd8,
|
||||
|
|
|
@ -55,14 +55,14 @@ const (
|
|||
ClientPreface = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
|
||||
|
||||
// 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
|
||||
|
||||
// NextProtoTLS is the NPN/ALPN protocol negotiated during
|
||||
// HTTP/2's TLS setup.
|
||||
NextProtoTLS = "h2"
|
||||
|
||||
// http://http2.github.io/http2-spec/#SettingValues
|
||||
// https://httpwg.org/specs/rfc7540.html#SettingValues
|
||||
initialHeaderTableSize = 4096
|
||||
|
||||
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.
|
||||
type Setting struct {
|
||||
// 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
|
||||
|
||||
// Val is the value.
|
||||
|
@ -143,7 +143,7 @@ func (s Setting) Valid() error {
|
|||
}
|
||||
|
||||
// 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
|
||||
|
||||
const (
|
||||
|
|
|
@ -98,6 +98,19 @@ type Server struct {
|
|||
// the HTTP/2 spec's recommendations.
|
||||
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
|
||||
// this server is willing to read. A valid value is between
|
||||
// 16k and 16M, inclusive. If zero or otherwise invalid, a
|
||||
|
@ -143,7 +156,7 @@ type Server struct {
|
|||
}
|
||||
|
||||
func (s *Server) initialConnRecvWindowSize() int32 {
|
||||
if s.MaxUploadBufferPerConnection > initialWindowSize {
|
||||
if s.MaxUploadBufferPerConnection >= initialWindowSize {
|
||||
return s.MaxUploadBufferPerConnection
|
||||
}
|
||||
return 1 << 20
|
||||
|
@ -170,6 +183,20 @@ func (s *Server) maxConcurrentStreams() uint32 {
|
|||
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
|
||||
// SETTINGS, PING and RST_STREAM that will be queued for writing before
|
||||
// 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(),
|
||||
initialStreamSendWindowSize: initialWindowSize,
|
||||
maxFrameSize: initialMaxFrameSize,
|
||||
headerTableSize: initialHeaderTableSize,
|
||||
serveG: newGoroutineLock(),
|
||||
pushEnabled: true,
|
||||
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
|
||||
// WINDOW_UPDATE shortly after sending SETTINGS.
|
||||
sc.flow.add(initialWindowSize)
|
||||
sc.inflow.add(initialWindowSize)
|
||||
sc.inflow.init(initialWindowSize)
|
||||
sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf)
|
||||
sc.hpackEncoder.SetMaxDynamicTableSizeLimit(s.maxEncoderHeaderTableSize())
|
||||
|
||||
fr := NewFramer(sc.bw, c)
|
||||
if s.CountError != nil {
|
||||
fr.countError = s.CountError
|
||||
}
|
||||
fr.ReadMetaHeaders = hpack.NewDecoder(initialHeaderTableSize, nil)
|
||||
fr.ReadMetaHeaders = hpack.NewDecoder(s.maxDecoderHeaderTableSize(), nil)
|
||||
fr.MaxHeaderListSize = sc.maxHeaderListSize()
|
||||
fr.SetMaxReadFrameSize(s.maxReadFrameSize())
|
||||
sc.framer = fr
|
||||
|
@ -536,8 +563,8 @@ type serverConn struct {
|
|||
wroteFrameCh chan frameWriteResult // from writeFrameAsync -> serve, tickles more frame writes
|
||||
bodyReadCh chan bodyReadMsg // from handlers -> serve
|
||||
serveMsgCh chan interface{} // misc messages & code to send to / run on the serve loop
|
||||
flow flow // conn-wide (not stream-specific) outbound flow control
|
||||
inflow flow // conn-wide inbound flow control
|
||||
flow outflow // conn-wide (not stream-specific) outbound flow control
|
||||
inflow inflow // conn-wide inbound flow control
|
||||
tlsState *tls.ConnectionState // shared by all handlers, like net/http
|
||||
remoteAddrStr string
|
||||
writeSched WriteScheduler
|
||||
|
@ -559,9 +586,9 @@ type serverConn struct {
|
|||
streams map[uint32]*stream
|
||||
initialStreamSendWindowSize int32
|
||||
maxFrameSize int32
|
||||
headerTableSize uint32
|
||||
peerMaxHeaderListSize uint32 // zero means unknown (default)
|
||||
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)
|
||||
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
|
||||
|
@ -616,13 +643,15 @@ type stream struct {
|
|||
// owned by serverConn's serve loop:
|
||||
bodyBytes int64 // body bytes seen so far
|
||||
declBodyBytes int64 // or -1 if undeclared
|
||||
flow flow // limits writing from Handler to client
|
||||
inflow flow // what the client is allowed to POST/etc to us
|
||||
flow outflow // limits writing from Handler to client
|
||||
inflow inflow // what the client is allowed to POST/etc to us
|
||||
state streamState
|
||||
resetQueued bool // RST_STREAM queued for write; set by sc.resetStream
|
||||
gotTrailerHeader bool // HEADER frame for trailers was seen
|
||||
wroteHeaders bool // whether we wrote headers (not status 100)
|
||||
readDeadline *time.Timer // nil if unused
|
||||
writeDeadline *time.Timer // nil if unused
|
||||
closeErr error // set before cw is closed
|
||||
|
||||
trailer http.Header // accumulated trailers
|
||||
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 {
|
||||
sc.serveG.check()
|
||||
buildCommonHeaderMapsOnce()
|
||||
|
@ -753,14 +789,10 @@ func (sc *serverConn) canonicalHeader(v string) string {
|
|||
sc.canonHeader = make(map[string]string)
|
||||
}
|
||||
cv = http.CanonicalHeaderKey(v)
|
||||
// maxCachedCanonicalHeaders is an arbitrarily-chosen limit on the number of
|
||||
// entries in the canonHeader cache. This should be larger than the number
|
||||
// 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 {
|
||||
size := 100 + len(v)*2 // 100 bytes of map overhead + key + value
|
||||
if sc.canonHeaderKeysSize+size <= maxCachedCanonicalHeadersKeysSize {
|
||||
sc.canonHeader[v] = cv
|
||||
sc.canonHeaderKeysSize += size
|
||||
}
|
||||
return cv
|
||||
}
|
||||
|
@ -811,8 +843,13 @@ type frameWriteResult struct {
|
|||
// and then reports when it's done.
|
||||
// At most one goroutine can be running writeFrameAsync at a time per
|
||||
// serverConn.
|
||||
func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest) {
|
||||
err := wr.write.writeFrame(sc)
|
||||
func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest, wd *writeData) {
|
||||
var err error
|
||||
if wd == nil {
|
||||
err = wr.write.writeFrame(sc)
|
||||
} else {
|
||||
err = sc.framer.endWrite()
|
||||
}
|
||||
sc.wroteFrameCh <- frameWriteResult{wr: wr, err: err}
|
||||
}
|
||||
|
||||
|
@ -862,6 +899,7 @@ func (sc *serverConn) serve() {
|
|||
{SettingMaxFrameSize, sc.srv.maxReadFrameSize()},
|
||||
{SettingMaxConcurrentStreams, sc.advMaxStreams},
|
||||
{SettingMaxHeaderListSize, sc.maxHeaderListSize()},
|
||||
{SettingHeaderTableSize, sc.srv.maxDecoderHeaderTableSize()},
|
||||
{SettingInitialWindowSize, uint32(sc.srv.initialStreamRecvWindowSize())},
|
||||
},
|
||||
})
|
||||
|
@ -948,6 +986,8 @@ func (sc *serverConn) serve() {
|
|||
}
|
||||
case *startPushRequest:
|
||||
sc.startPush(v)
|
||||
case func(*serverConn):
|
||||
v(sc)
|
||||
default:
|
||||
panic(fmt.Sprintf("unexpected type %T", v))
|
||||
}
|
||||
|
@ -1216,9 +1256,16 @@ func (sc *serverConn) startFrameWrite(wr FrameWriteRequest) {
|
|||
sc.writingFrameAsync = false
|
||||
err := wr.write.writeFrame(sc)
|
||||
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 {
|
||||
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) {
|
||||
sc.serveG.check()
|
||||
if sc.inGoAway {
|
||||
if sc.goAwayCode == ErrCodeNo {
|
||||
sc.goAwayCode = code
|
||||
}
|
||||
return
|
||||
}
|
||||
sc.inGoAway = true
|
||||
|
@ -1458,6 +1508,21 @@ func (sc *serverConn) processFrame(f Frame) error {
|
|||
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) {
|
||||
case *SettingsFrame:
|
||||
return sc.processSettings(f)
|
||||
|
@ -1500,9 +1565,6 @@ func (sc *serverConn) processPing(f *PingFrame) error {
|
|||
// PROTOCOL_ERROR."
|
||||
return sc.countError("ping_on_stream", ConnectionError(ErrCodeProtocol))
|
||||
}
|
||||
if sc.inGoAway && sc.goAwayCode != ErrCodeNo {
|
||||
return nil
|
||||
}
|
||||
sc.writeFrame(FrameWriteRequest{write: writePingAck{f}})
|
||||
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))
|
||||
}
|
||||
st.state = stateClosed
|
||||
if st.readDeadline != nil {
|
||||
st.readDeadline.Stop()
|
||||
}
|
||||
if st.writeDeadline != nil {
|
||||
st.writeDeadline.Stop()
|
||||
}
|
||||
|
@ -1589,6 +1654,14 @@ func (sc *serverConn) closeStream(st *stream, err error) {
|
|||
|
||||
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
|
||||
sc.writeSched.CloseStream(st.id)
|
||||
}
|
||||
|
@ -1631,7 +1704,6 @@ func (sc *serverConn) processSetting(s Setting) error {
|
|||
}
|
||||
switch s.ID {
|
||||
case SettingHeaderTableSize:
|
||||
sc.headerTableSize = s.Val
|
||||
sc.hpackEncoder.SetMaxDynamicTableSize(s.Val)
|
||||
case SettingEnablePush:
|
||||
sc.pushEnabled = s.Val != 0
|
||||
|
@ -1685,16 +1757,6 @@ func (sc *serverConn) processSettingInitialWindowSize(val uint32) error {
|
|||
func (sc *serverConn) processData(f *DataFrame) error {
|
||||
sc.serveG.check()
|
||||
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()
|
||||
state, st := sc.state(id)
|
||||
|
@ -1725,14 +1787,9 @@ func (sc *serverConn) processData(f *DataFrame) error {
|
|||
// But still enforce their connection-level flow control,
|
||||
// and return any flow control bytes since we're not going
|
||||
// to consume them.
|
||||
if sc.inflow.available() < int32(f.Length) {
|
||||
if !sc.inflow.take(f.Length) {
|
||||
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
|
||||
|
||||
if st != nil && st.resetQueued {
|
||||
|
@ -1747,6 +1804,11 @@ func (sc *serverConn) processData(f *DataFrame) error {
|
|||
|
||||
// Sender sending more than they'd declared?
|
||||
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))
|
||||
// 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
|
||||
|
@ -1755,10 +1817,9 @@ func (sc *serverConn) processData(f *DataFrame) error {
|
|||
}
|
||||
if f.Length > 0 {
|
||||
// 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))
|
||||
}
|
||||
st.inflow.take(int32(f.Length))
|
||||
|
||||
if len(data) > 0 {
|
||||
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
|
||||
// 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(st, pad)
|
||||
}
|
||||
}
|
||||
if f.StreamEnded() {
|
||||
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)
|
||||
// when the stream's WriteTimeout has fired.
|
||||
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 {
|
||||
sc.serveG.check()
|
||||
id := f.StreamID
|
||||
if sc.inGoAway {
|
||||
// Ignore.
|
||||
return nil
|
||||
}
|
||||
// http://tools.ietf.org/html/rfc7540#section-5.1.1
|
||||
// Streams initiated by a client MUST use odd-numbered stream
|
||||
// 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.
|
||||
if sc.hs.ReadTimeout != 0 {
|
||||
sc.conn.SetReadDeadline(time.Time{})
|
||||
if st.body != nil {
|
||||
st.readDeadline = time.AfterFunc(sc.hs.ReadTimeout, st.onReadTimeout)
|
||||
}
|
||||
}
|
||||
|
||||
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 {
|
||||
if sc.inGoAway {
|
||||
return nil
|
||||
}
|
||||
if err := sc.checkPriority(f.StreamID, f.PriorityParam); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -2041,8 +2112,7 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream
|
|||
st.cw.Init()
|
||||
st.flow.conn = &sc.flow // link to conn-level counter
|
||||
st.flow.add(sc.initialStreamSendWindowSize)
|
||||
st.inflow.conn = &sc.inflow // link to conn-level counter
|
||||
st.inflow.add(sc.srv.initialStreamRecvWindowSize())
|
||||
st.inflow.init(sc.srv.initialStreamRecvWindowSize())
|
||||
if sc.hs.WriteTimeout != 0 {
|
||||
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))
|
||||
}
|
||||
|
||||
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)
|
||||
for _, hf := range f.RegularFields() {
|
||||
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 {
|
||||
return nil, nil, err
|
||||
}
|
||||
bodyOpen := !f.StreamEnded()
|
||||
if bodyOpen {
|
||||
if vv, ok := rp.header["Content-Length"]; ok {
|
||||
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
|
||||
}
|
||||
|
||||
needsContinue := rp.header.Get("Expect") == "100-continue"
|
||||
needsContinue := httpguts.HeaderValuesContainsToken(rp.header["Expect"], "100-continue")
|
||||
if needsContinue {
|
||||
rp.header.Del("Expect")
|
||||
}
|
||||
|
@ -2223,6 +2288,9 @@ func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler
|
|||
didPanic := true
|
||||
defer func() {
|
||||
rw.rws.stream.cancelCtx()
|
||||
if req.MultipartForm != nil {
|
||||
req.MultipartForm.RemoveAll()
|
||||
}
|
||||
if didPanic {
|
||||
e := recover()
|
||||
sc.writeFrameFromHandler(FrameWriteRequest{
|
||||
|
@ -2326,47 +2394,28 @@ func (sc *serverConn) noteBodyRead(st *stream, n int) {
|
|||
}
|
||||
|
||||
// st may be nil for conn-level
|
||||
func (sc *serverConn) sendWindowUpdate(st *stream, n int) {
|
||||
sc.serveG.check()
|
||||
// "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))
|
||||
func (sc *serverConn) sendWindowUpdate32(st *stream, n int32) {
|
||||
sc.sendWindowUpdate(st, int(n))
|
||||
}
|
||||
|
||||
// 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()
|
||||
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
|
||||
}
|
||||
if n < 0 {
|
||||
panic("negative update")
|
||||
}
|
||||
var streamID uint32
|
||||
if st != nil {
|
||||
streamID = st.id
|
||||
}
|
||||
sc.writeFrame(FrameWriteRequest{
|
||||
write: writeWindowUpdate{streamID: streamID, n: uint32(n)},
|
||||
write: writeWindowUpdate{streamID: streamID, n: uint32(send)},
|
||||
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.
|
||||
|
@ -2454,7 +2503,15 @@ type responseWriterState struct {
|
|||
|
||||
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 }
|
||||
|
||||
|
@ -2493,6 +2550,10 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
|
|||
rws.writeHeader(200)
|
||||
}
|
||||
|
||||
if rws.handlerDone {
|
||||
rws.promoteUndeclaredTrailers()
|
||||
}
|
||||
|
||||
isHeadResp := rws.req.Method == "HEAD"
|
||||
if !rws.sentHeader {
|
||||
rws.sentHeader = true
|
||||
|
@ -2564,10 +2625,6 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
|
|||
return 0, nil
|
||||
}
|
||||
|
||||
if rws.handlerDone {
|
||||
rws.promoteUndeclaredTrailers()
|
||||
}
|
||||
|
||||
// only send trailers if they have actually been defined by the
|
||||
// server handler.
|
||||
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() {
|
||||
w.FlushError()
|
||||
}
|
||||
|
||||
func (w *responseWriter) FlushError() error {
|
||||
rws := w.rws
|
||||
if rws == nil {
|
||||
panic("Header called after Handler finished")
|
||||
}
|
||||
var err error
|
||||
if rws.bw.Buffered() > 0 {
|
||||
if err := rws.bw.Flush(); err != nil {
|
||||
// Ignore the error. The frame writer already knows.
|
||||
return
|
||||
}
|
||||
err = rws.bw.Flush()
|
||||
} else {
|
||||
// The bufio.Writer won't call chunkWriter.Write
|
||||
// (writeChunk with zero bytes, so we have to do it
|
||||
// ourselves to force the HTTP response header and/or
|
||||
// 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 {
|
||||
|
|
|
@ -16,6 +16,7 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/fs"
|
||||
"log"
|
||||
"math"
|
||||
mathrand "math/rand"
|
||||
|
@ -46,10 +47,6 @@ const (
|
|||
// we buffer per stream.
|
||||
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"
|
||||
|
||||
// initialMaxConcurrentStreams is a connections maxConcurrentStreams until
|
||||
|
@ -67,13 +64,23 @@ const (
|
|||
// A Transport internally caches connections to servers. It is safe
|
||||
// for concurrent use by multiple goroutines.
|
||||
type Transport struct {
|
||||
// DialTLS specifies an optional dial function for creating
|
||||
// TLS connections for requests.
|
||||
// DialTLSContext specifies an optional dial function with context for
|
||||
// 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,
|
||||
// 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)
|
||||
|
||||
// TLSClientConfig specifies the TLS configuration to use with
|
||||
|
@ -107,6 +114,28 @@ type Transport struct {
|
|||
// to mean no limit.
|
||||
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
|
||||
// SETTINGS_MAX_CONCURRENT_STREAMS should be respected
|
||||
// globally. If false, new TCP connections are created to the
|
||||
|
@ -160,6 +189,19 @@ func (t *Transport) maxHeaderListSize() uint32 {
|
|||
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 {
|
||||
return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression)
|
||||
}
|
||||
|
@ -249,6 +291,7 @@ func (t *Transport) initConnPool() {
|
|||
type ClientConn struct {
|
||||
t *Transport
|
||||
tconn net.Conn // usually *tls.Conn, except specialized impls
|
||||
tconnClosed bool
|
||||
tlsState *tls.ConnectionState // nil only for specialized impls
|
||||
reused uint32 // whether conn is being reused; atomic
|
||||
singleUse bool // whether being used for a single http.Request
|
||||
|
@ -263,8 +306,8 @@ type ClientConn struct {
|
|||
|
||||
mu sync.Mutex // guards following
|
||||
cond *sync.Cond // hold mu; broadcast on flow/closed changes
|
||||
flow flow // our conn-level flow control quota (cs.flow is per stream)
|
||||
inflow flow // peer's conn-level flow control
|
||||
flow outflow // our conn-level flow control quota (cs.outflow is per stream)
|
||||
inflow inflow // peer's conn-level flow control
|
||||
doNotReuse bool // whether conn is marked to not be reused for any future requests
|
||||
closing bool
|
||||
closed bool
|
||||
|
@ -284,6 +327,7 @@ type ClientConn struct {
|
|||
maxFrameSize uint32
|
||||
maxConcurrentStreams uint32
|
||||
peerMaxHeaderListSize uint64
|
||||
peerMaxHeaderTableSize uint32
|
||||
initialWindowSize uint32
|
||||
|
||||
// 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
|
||||
res *http.Response // set if respHeaderRecv is closed
|
||||
|
||||
flow flow // guarded by cc.mu
|
||||
inflow flow // guarded by cc.mu
|
||||
flow outflow // guarded by cc.mu
|
||||
inflow inflow // guarded by cc.mu
|
||||
bytesRemain int64 // -1 means unknown; owned by transportResponseBody.Read
|
||||
readErr error // sticky read error; owned by transportResponseBody.Read
|
||||
|
||||
reqBody io.ReadCloser
|
||||
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:
|
||||
sentEndStream bool // sent an END_STREAM flag to the peer
|
||||
|
@ -375,9 +419,8 @@ func (cs *clientStream) abortStreamLocked(err error) {
|
|||
cs.abortErr = err
|
||||
close(cs.abort)
|
||||
})
|
||||
if cs.reqBody != nil && !cs.reqBodyClosed {
|
||||
cs.reqBody.Close()
|
||||
cs.reqBodyClosed = true
|
||||
if cs.reqBody != nil {
|
||||
cs.closeReqBodyLocked()
|
||||
}
|
||||
// TODO(dneil): Clean up tests where cs.cc.cond is nil.
|
||||
if cs.cc.cond != nil {
|
||||
|
@ -390,13 +433,24 @@ func (cs *clientStream) abortRequestBodyWrite() {
|
|||
cc := cs.cc
|
||||
cc.mu.Lock()
|
||||
defer cc.mu.Unlock()
|
||||
if cs.reqBody != nil && !cs.reqBodyClosed {
|
||||
cs.reqBody.Close()
|
||||
cs.reqBodyClosed = true
|
||||
if cs.reqBody != nil && cs.reqBodyClosed == nil {
|
||||
cs.closeReqBodyLocked()
|
||||
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 {
|
||||
conn net.Conn
|
||||
timeout time.Duration
|
||||
|
@ -480,6 +534,15 @@ func authorityAddr(scheme string, authority string) (addr string) {
|
|||
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.
|
||||
func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) {
|
||||
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 += backoff * (0.1 * mathrand.Float64())
|
||||
d := time.Second * time.Duration(backoff)
|
||||
timer := backoffNewTimer(d)
|
||||
select {
|
||||
case <-time.After(time.Second * time.Duration(backoff)):
|
||||
case <-timer.C:
|
||||
t.vlogf("RoundTrip retrying after failure: %v", err)
|
||||
continue
|
||||
case <-req.Context().Done():
|
||||
timer.Stop()
|
||||
err = req.Context().Err()
|
||||
}
|
||||
}
|
||||
|
@ -592,7 +658,7 @@ func (t *Transport) dialClientConn(ctx context.Context, addr string, singleUse b
|
|||
if err != nil {
|
||||
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 {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -613,12 +679,14 @@ func (t *Transport) newTLSConfig(host string) *tls.Config {
|
|||
return cfg
|
||||
}
|
||||
|
||||
func (t *Transport) dialTLS(ctx context.Context) func(string, string, *tls.Config) (net.Conn, error) {
|
||||
if t.DialTLS != nil {
|
||||
return t.DialTLS
|
||||
func (t *Transport) dialTLS(ctx context.Context, network, addr string, tlsCfg *tls.Config) (net.Conn, error) {
|
||||
if t.DialTLSContext != nil {
|
||||
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 {
|
||||
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 tlsCn, nil
|
||||
}
|
||||
}
|
||||
|
||||
// disableKeepAlives reports whether connections should be closed as
|
||||
|
@ -646,6 +713,20 @@ func (t *Transport) expectContinueTimeout() time.Duration {
|
|||
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) {
|
||||
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.fr = NewFramer(cc.bw, cc.br)
|
||||
if t.maxFrameReadSize() != 0 {
|
||||
cc.fr.SetMaxReadFrameSize(t.maxFrameReadSize())
|
||||
}
|
||||
if t.CountError != nil {
|
||||
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()
|
||||
|
||||
// TODO: SetMaxDynamicTableSize, SetMaxDynamicTableSizeLimit on
|
||||
// henc in response to SETTINGS frames?
|
||||
cc.henc = hpack.NewEncoder(&cc.hbuf)
|
||||
cc.henc.SetMaxDynamicTableSizeLimit(t.maxEncoderHeaderTableSize())
|
||||
cc.peerMaxHeaderTableSize = initialHeaderTableSize
|
||||
|
||||
if t.AllowHTTP {
|
||||
cc.nextStreamID = 3
|
||||
|
@ -709,14 +794,20 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
|
|||
{ID: SettingEnablePush, Val: 0},
|
||||
{ID: SettingInitialWindowSize, Val: transportDefaultStreamFlow},
|
||||
}
|
||||
if max := t.maxFrameReadSize(); max != 0 {
|
||||
initialSettings = append(initialSettings, Setting{ID: SettingMaxFrameSize, Val: max})
|
||||
}
|
||||
if max := t.maxHeaderListSize(); max != 0 {
|
||||
initialSettings = append(initialSettings, Setting{ID: SettingMaxHeaderListSize, Val: max})
|
||||
}
|
||||
if maxHeaderTableSize != initialHeaderTableSize {
|
||||
initialSettings = append(initialSettings, Setting{ID: SettingHeaderTableSize, Val: maxHeaderTableSize})
|
||||
}
|
||||
|
||||
cc.bw.Write(clientPreface)
|
||||
cc.fr.WriteSettings(initialSettings...)
|
||||
cc.fr.WriteWindowUpdate(0, transportDefaultConnFlow)
|
||||
cc.inflow.add(transportDefaultConnFlow + initialWindowSize)
|
||||
cc.inflow.init(transportDefaultConnFlow + initialWindowSize)
|
||||
cc.bw.Flush()
|
||||
if cc.werr != nil {
|
||||
cc.Close()
|
||||
|
@ -910,10 +1001,10 @@ func (cc *ClientConn) onIdleTimeout() {
|
|||
cc.closeIfIdle()
|
||||
}
|
||||
|
||||
func (cc *ClientConn) closeConn() error {
|
||||
func (cc *ClientConn) closeConn() {
|
||||
t := time.AfterFunc(250*time.Millisecond, cc.forceCloseConn)
|
||||
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.
|
||||
|
@ -979,7 +1070,8 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error {
|
|||
shutdownEnterWaitStateHook()
|
||||
select {
|
||||
case <-done:
|
||||
return cc.closeConn()
|
||||
cc.closeConn()
|
||||
return nil
|
||||
case <-ctx.Done():
|
||||
cc.mu.Lock()
|
||||
// Free the goroutine above
|
||||
|
@ -1016,7 +1108,7 @@ func (cc *ClientConn) sendGoAway() error {
|
|||
|
||||
// closes the client connection immediately. In-flight requests are interrupted.
|
||||
// err is sent to streams.
|
||||
func (cc *ClientConn) closeForError(err error) error {
|
||||
func (cc *ClientConn) closeForError(err error) {
|
||||
cc.mu.Lock()
|
||||
cc.closed = true
|
||||
for _, cs := range cc.streams {
|
||||
|
@ -1024,7 +1116,7 @@ func (cc *ClientConn) closeForError(err error) error {
|
|||
}
|
||||
cc.cond.Broadcast()
|
||||
cc.mu.Unlock()
|
||||
return cc.closeConn()
|
||||
cc.closeConn()
|
||||
}
|
||||
|
||||
// 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.
|
||||
func (cc *ClientConn) Close() error {
|
||||
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.
|
||||
func (cc *ClientConn) closeForLostPing() error {
|
||||
func (cc *ClientConn) closeForLostPing() {
|
||||
err := errors.New("http2: client connection lost")
|
||||
if f := cc.t.CountError; f != nil {
|
||||
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
|
||||
|
@ -1051,7 +1144,7 @@ var errRequestCanceled = errors.New("net/http: request canceled")
|
|||
func commaSeparatedTrailers(req *http.Request) (string, error) {
|
||||
keys := make([]string, 0, len(req.Trailer))
|
||||
for k := range req.Trailer {
|
||||
k = http.CanonicalHeaderKey(k)
|
||||
k = canonicalHeader(k)
|
||||
switch k {
|
||||
case "Transfer-Encoding", "Trailer", "Content-Length":
|
||||
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
|
||||
// while still writing request body
|
||||
cc.mu.Lock()
|
||||
mustCloseBody := false
|
||||
if cs.reqBody != nil && cs.reqBodyClosed == nil {
|
||||
mustCloseBody = true
|
||||
cs.reqBodyClosed = make(chan struct{})
|
||||
}
|
||||
bodyClosed := cs.reqBodyClosed
|
||||
cs.reqBodyClosed = true
|
||||
cc.mu.Unlock()
|
||||
if !bodyClosed && cs.reqBody != nil {
|
||||
if mustCloseBody {
|
||||
cs.reqBody.Close()
|
||||
close(bodyClosed)
|
||||
}
|
||||
if bodyClosed != nil {
|
||||
<-bodyClosed
|
||||
}
|
||||
|
||||
if err != nil && cs.sentEndStream {
|
||||
|
@ -1468,7 +1569,7 @@ func (cs *clientStream) cleanupWriteRequest(err error) {
|
|||
close(cs.donec)
|
||||
}
|
||||
|
||||
// awaitOpenSlotForStream waits until len(streams) < maxConcurrentStreams.
|
||||
// awaitOpenSlotForStreamLocked waits until len(streams) < maxConcurrentStreams.
|
||||
// Must hold cc.mu.
|
||||
func (cc *ClientConn) awaitOpenSlotForStreamLocked(cs *clientStream) error {
|
||||
for {
|
||||
|
@ -1580,7 +1681,7 @@ func (cs *clientStream) writeRequestBody(req *http.Request) (err error) {
|
|||
|
||||
var sawEOF bool
|
||||
for !sawEOF {
|
||||
n, err := body.Read(buf[:len(buf)])
|
||||
n, err := body.Read(buf)
|
||||
if hasContentLen {
|
||||
remainLen -= int64(n)
|
||||
if remainLen == 0 && err == nil {
|
||||
|
@ -1603,7 +1704,7 @@ func (cs *clientStream) writeRequestBody(req *http.Request) (err error) {
|
|||
}
|
||||
if err != nil {
|
||||
cc.mu.Lock()
|
||||
bodyClosed := cs.reqBodyClosed
|
||||
bodyClosed := cs.reqBodyClosed != nil
|
||||
cc.mu.Unlock()
|
||||
switch {
|
||||
case bodyClosed:
|
||||
|
@ -1698,7 +1799,7 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error)
|
|||
if cc.closed {
|
||||
return 0, errClientConnClosed
|
||||
}
|
||||
if cs.reqBodyClosed {
|
||||
if cs.reqBodyClosed != nil {
|
||||
return 0, errStopReqBodyWrite
|
||||
}
|
||||
select {
|
||||
|
@ -1883,7 +1984,7 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail
|
|||
|
||||
// Header list size is ok. Write the headers.
|
||||
enumerateHeaders(func(name, value string) {
|
||||
name, ascii := asciiToLower(name)
|
||||
name, ascii := lowerHeader(name)
|
||||
if !ascii {
|
||||
// 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).
|
||||
|
@ -1936,7 +2037,7 @@ func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) {
|
|||
}
|
||||
|
||||
for k, vv := range trailer {
|
||||
lowKey, ascii := asciiToLower(k)
|
||||
lowKey, ascii := lowerHeader(k)
|
||||
if !ascii {
|
||||
// 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).
|
||||
|
@ -1968,8 +2069,7 @@ type resAndError struct {
|
|||
func (cc *ClientConn) addStreamLocked(cs *clientStream) {
|
||||
cs.flow.add(int32(cc.initialWindowSize))
|
||||
cs.flow.setConnFlow(&cc.flow)
|
||||
cs.inflow.add(transportDefaultStreamFlow)
|
||||
cs.inflow.setConnFlow(&cc.inflow)
|
||||
cs.inflow.init(transportDefaultStreamFlow)
|
||||
cs.ID = cc.nextStreamID
|
||||
cc.nextStreamID += 2
|
||||
cc.streams[cs.ID] = cs
|
||||
|
@ -1994,7 +2094,7 @@ func (cc *ClientConn) forgetStreamID(id uint32) {
|
|||
// wake up RoundTrip if there is a pending request.
|
||||
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 VerboseLogs {
|
||||
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
|
||||
}
|
||||
cc.closed = true
|
||||
|
||||
for _, cs := range cc.streams {
|
||||
select {
|
||||
case <-cs.peerClosed:
|
||||
|
@ -2268,7 +2369,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
|
|||
Status: status + " " + http.StatusText(statusCode),
|
||||
}
|
||||
for _, hf := range regularFields {
|
||||
key := http.CanonicalHeaderKey(hf.Name)
|
||||
key := canonicalHeader(hf.Name)
|
||||
if key == "Trailer" {
|
||||
t := res.Trailer
|
||||
if t == nil {
|
||||
|
@ -2276,7 +2377,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
|
|||
res.Trailer = t
|
||||
}
|
||||
foreachHeaderElement(hf.Value, func(v string) {
|
||||
t[http.CanonicalHeaderKey(v)] = nil
|
||||
t[canonicalHeader(v)] = nil
|
||||
})
|
||||
} else {
|
||||
vv := header[key]
|
||||
|
@ -2381,7 +2482,7 @@ func (rl *clientConnReadLoop) processTrailers(cs *clientStream, f *MetaHeadersFr
|
|||
|
||||
trailer := make(http.Header)
|
||||
for _, hf := range f.RegularFields() {
|
||||
key := http.CanonicalHeaderKey(hf.Name)
|
||||
key := canonicalHeader(hf.Name)
|
||||
trailer[key] = append(trailer[key], hf.Value)
|
||||
}
|
||||
cs.trailer = trailer
|
||||
|
@ -2427,21 +2528,10 @@ func (b transportResponseBody) Read(p []byte) (n int, err error) {
|
|||
}
|
||||
|
||||
cc.mu.Lock()
|
||||
var connAdd, streamAdd int32
|
||||
// Check the conn-level first, before the stream-level.
|
||||
if v := cc.inflow.available(); v < transportDefaultConnFlow/2 {
|
||||
connAdd = transportDefaultConnFlow - v
|
||||
cc.inflow.add(connAdd)
|
||||
}
|
||||
connAdd := cc.inflow.add(n)
|
||||
var streamAdd int32
|
||||
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
|
||||
// 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)
|
||||
}
|
||||
streamAdd = cs.inflow.add(n)
|
||||
}
|
||||
cc.mu.Unlock()
|
||||
|
||||
|
@ -2469,17 +2559,15 @@ func (b transportResponseBody) Close() error {
|
|||
if unread > 0 {
|
||||
cc.mu.Lock()
|
||||
// Return connection-level flow control.
|
||||
if unread > 0 {
|
||||
cc.inflow.add(int32(unread))
|
||||
}
|
||||
connAdd := cc.inflow.add(unread)
|
||||
cc.mu.Unlock()
|
||||
|
||||
// TODO(dneil): Acquiring this mutex can block indefinitely.
|
||||
// Move flow control return to a goroutine?
|
||||
cc.wmu.Lock()
|
||||
// Return connection-level flow control.
|
||||
if unread > 0 {
|
||||
cc.fr.WriteWindowUpdate(0, uint32(unread))
|
||||
if connAdd > 0 {
|
||||
cc.fr.WriteWindowUpdate(0, uint32(connAdd))
|
||||
}
|
||||
cc.bw.Flush()
|
||||
cc.wmu.Unlock()
|
||||
|
@ -2522,14 +2610,19 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error {
|
|||
// But at least return their flow control:
|
||||
if f.Length > 0 {
|
||||
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()
|
||||
|
||||
if !ok {
|
||||
return ConnectionError(ErrCodeFlowControl)
|
||||
}
|
||||
if connAdd > 0 {
|
||||
cc.wmu.Lock()
|
||||
cc.fr.WriteWindowUpdate(0, uint32(f.Length))
|
||||
cc.fr.WriteWindowUpdate(0, uint32(connAdd))
|
||||
cc.bw.Flush()
|
||||
cc.wmu.Unlock()
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
if cs.readClosed {
|
||||
|
@ -2559,9 +2652,7 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error {
|
|||
}
|
||||
// Check connection-level flow control.
|
||||
cc.mu.Lock()
|
||||
if cs.inflow.available() >= int32(f.Length) {
|
||||
cs.inflow.take(int32(f.Length))
|
||||
} else {
|
||||
if !takeInflows(&cc.inflow, &cs.inflow, f.Length) {
|
||||
cc.mu.Unlock()
|
||||
return ConnectionError(ErrCodeFlowControl)
|
||||
}
|
||||
|
@ -2583,19 +2674,20 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error {
|
|||
}
|
||||
}
|
||||
|
||||
if refund > 0 {
|
||||
cc.inflow.add(int32(refund))
|
||||
sendConn := cc.inflow.add(refund)
|
||||
var sendStream int32
|
||||
if !didReset {
|
||||
cs.inflow.add(int32(refund))
|
||||
}
|
||||
sendStream = cs.inflow.add(refund)
|
||||
}
|
||||
cc.mu.Unlock()
|
||||
|
||||
if refund > 0 {
|
||||
if sendConn > 0 || sendStream > 0 {
|
||||
cc.wmu.Lock()
|
||||
cc.fr.WriteWindowUpdate(0, uint32(refund))
|
||||
if !didReset {
|
||||
cc.fr.WriteWindowUpdate(cs.ID, uint32(refund))
|
||||
if sendConn > 0 {
|
||||
cc.fr.WriteWindowUpdate(0, uint32(sendConn))
|
||||
}
|
||||
if sendStream > 0 {
|
||||
cc.fr.WriteWindowUpdate(cs.ID, uint32(sendStream))
|
||||
}
|
||||
cc.bw.Flush()
|
||||
cc.wmu.Unlock()
|
||||
|
@ -2663,7 +2755,6 @@ func (rl *clientConnReadLoop) processGoAway(f *GoAwayFrame) error {
|
|||
if fn := cc.t.CountError; fn != nil {
|
||||
fn("recv_goaway_" + f.ErrCode.stringToken())
|
||||
}
|
||||
|
||||
}
|
||||
cc.setGoAway(f)
|
||||
return nil
|
||||
|
@ -2728,8 +2819,10 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error {
|
|||
cc.cond.Broadcast()
|
||||
|
||||
cc.initialWindowSize = s.Val
|
||||
case SettingHeaderTableSize:
|
||||
cc.henc.SetMaxDynamicTableSize(s.Val)
|
||||
cc.peerMaxHeaderTableSize = s.Val
|
||||
default:
|
||||
// TODO(bradfitz): handle more settings? SETTINGS_HEADER_TABLE_SIZE probably.
|
||||
cc.vlogf("Unhandled Setting: %v", s)
|
||||
}
|
||||
return nil
|
||||
|
@ -2953,7 +3046,11 @@ func (gz *gzipReader) Read(p []byte) (n int, err 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 }
|
||||
|
@ -3017,7 +3114,7 @@ func traceGotConn(req *http.Request, cc *ClientConn, reused bool) {
|
|||
cc.mu.Lock()
|
||||
ci.WasIdle = len(cc.streams) == 0 && reused
|
||||
if ci.WasIdle && !cc.lastActive.IsZero() {
|
||||
ci.IdleTime = time.Now().Sub(cc.lastActive)
|
||||
ci.IdleTime = time.Since(cc.lastActive)
|
||||
}
|
||||
cc.mu.Unlock()
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ type histogram struct {
|
|||
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) {
|
||||
// TODO: assert invariant
|
||||
h.sum += value
|
||||
|
|
|
@ -395,7 +395,7 @@ func New(family, title string) Trace {
|
|||
}
|
||||
|
||||
func (tr *trace) Finish() {
|
||||
elapsed := time.Now().Sub(tr.Start)
|
||||
elapsed := time.Since(tr.Start)
|
||||
tr.mu.Lock()
|
||||
tr.Elapsed = elapsed
|
||||
tr.mu.Unlock()
|
||||
|
|
|
@ -7,9 +7,11 @@
|
|||
|
||||
package execabs
|
||||
|
||||
import "strings"
|
||||
import (
|
||||
"errors"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
func isGo119ErrDot(err error) bool {
|
||||
// TODO: return errors.Is(err, exec.ErrDot)
|
||||
return strings.Contains(err.Error(), "current directory")
|
||||
return errors.Is(err, exec.ErrDot)
|
||||
}
|
||||
|
|
|
@ -126,7 +126,7 @@ errors=$(
|
|||
signals=$(
|
||||
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
||||
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |
|
||||
egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' |
|
||||
grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT' |
|
||||
sort
|
||||
)
|
||||
|
||||
|
@ -136,7 +136,7 @@ echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
|
|||
sort >_error.grep
|
||||
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
||||
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
|
||||
|
||||
echo '// mkerrors.sh' "$@"
|
||||
|
|
|
@ -29,8 +29,6 @@ import (
|
|||
"bytes"
|
||||
"strings"
|
||||
"unsafe"
|
||||
|
||||
"golang.org/x/sys/internal/unsafeheader"
|
||||
)
|
||||
|
||||
// ByteSliceFromString returns a NUL-terminated slice of bytes
|
||||
|
@ -82,13 +80,7 @@ func BytePtrToString(p *byte) string {
|
|||
ptr = unsafe.Pointer(uintptr(ptr) + 1)
|
||||
}
|
||||
|
||||
var s []byte
|
||||
h := (*unsafeheader.Slice)(unsafe.Pointer(&s))
|
||||
h.Data = unsafe.Pointer(p)
|
||||
h.Len = n
|
||||
h.Cap = n
|
||||
|
||||
return string(s)
|
||||
return string(unsafe.Slice(p, n))
|
||||
}
|
||||
|
||||
// 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
|
||||
// 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
|
||||
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
|
||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos
|
||||
|
||||
package unix
|
||||
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build gccgo && !aix
|
||||
// +build gccgo,!aix
|
||||
//go:build gccgo && !aix && !hurd
|
||||
// +build gccgo,!aix,!hurd
|
||||
|
||||
package unix
|
||||
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build gccgo
|
||||
// +build !aix
|
||||
//go:build gccgo && !aix && !hurd
|
||||
// +build gccgo,!aix,!hurd
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
// 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
|
||||
//go:build aix || darwin || dragonfly || freebsd || hurd || linux || netbsd || openbsd || solaris
|
||||
// +build aix darwin dragonfly freebsd hurd linux netbsd openbsd solaris
|
||||
|
||||
package unix
|
||||
|
||||
|
|
|
@ -4,9 +4,7 @@
|
|||
|
||||
package unix
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
import "unsafe"
|
||||
|
||||
// IoctlRetInt performs an ioctl operation specified by req on a device
|
||||
// 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 {
|
||||
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)
|
||||
mkerrors="$mkerrors -m64"
|
||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||
mkasm="go run mkasm_darwin.go"
|
||||
mkasm="go run mkasm.go"
|
||||
;;
|
||||
darwin_arm64)
|
||||
mkerrors="$mkerrors -m64"
|
||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||
mkasm="go run mkasm_darwin.go"
|
||||
mkasm="go run mkasm.go"
|
||||
;;
|
||||
dragonfly_amd64)
|
||||
mkerrors="$mkerrors -m64"
|
||||
|
@ -142,42 +142,60 @@ netbsd_arm64)
|
|||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||
;;
|
||||
openbsd_386)
|
||||
mkasm="go run mkasm.go"
|
||||
mkerrors="$mkerrors -m32"
|
||||
mksyscall="go run mksyscall.go -l32 -openbsd"
|
||||
mksyscall="go run mksyscall.go -l32 -openbsd -libc"
|
||||
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"
|
||||
;;
|
||||
openbsd_amd64)
|
||||
mkasm="go run mkasm.go"
|
||||
mkerrors="$mkerrors -m64"
|
||||
mksyscall="go run mksyscall.go -openbsd"
|
||||
mksyscall="go run mksyscall.go -openbsd -libc"
|
||||
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"
|
||||
;;
|
||||
openbsd_arm)
|
||||
mkasm="go run mkasm.go"
|
||||
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"
|
||||
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
|
||||
# API consistent across platforms.
|
||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||
;;
|
||||
openbsd_arm64)
|
||||
mkasm="go run mkasm.go"
|
||||
mkerrors="$mkerrors -m64"
|
||||
mksyscall="go run mksyscall.go -openbsd"
|
||||
mksyscall="go run mksyscall.go -openbsd -libc"
|
||||
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
|
||||
# API consistent across platforms.
|
||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||
;;
|
||||
openbsd_mips64)
|
||||
mkasm="go run mkasm.go"
|
||||
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"
|
||||
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
|
||||
# API consistent across platforms.
|
||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||
|
@ -214,11 +232,6 @@ esac
|
|||
if [ "$GOOSARCH" == "aix_ppc64" ]; then
|
||||
# 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 " ;
|
||||
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
|
||||
# illumos code generation requires a --illumos switch
|
||||
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 "$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 "$mkasm" ]; then echo "$mkasm $GOARCH"; fi
|
||||
if [ -n "$mkasm" ]; then echo "$mkasm $GOOS $GOARCH"; fi
|
||||
) | $run
|
||||
|
|
|
@ -642,7 +642,7 @@ errors=$(
|
|||
signals=$(
|
||||
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
||||
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |
|
||||
egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' |
|
||||
grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT\|SIGMAX64' |
|
||||
sort
|
||||
)
|
||||
|
||||
|
@ -652,7 +652,7 @@ echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
|
|||
sort >_error.grep
|
||||
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
||||
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
|
||||
|
||||
echo '// mkerrors.sh' "$@"
|
||||
|
|
|
@ -52,6 +52,20 @@ func ParseSocketControlMessage(b []byte) ([]SocketControlMessage, error) {
|
|||
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) {
|
||||
h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
|
||||
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"
|
||||
"strings"
|
||||
"unsafe"
|
||||
|
||||
"golang.org/x/sys/internal/unsafeheader"
|
||||
)
|
||||
|
||||
// ByteSliceFromString returns a NUL-terminated slice of bytes
|
||||
|
@ -82,13 +80,7 @@ func BytePtrToString(p *byte) string {
|
|||
ptr = unsafe.Pointer(uintptr(ptr) + 1)
|
||||
}
|
||||
|
||||
var s []byte
|
||||
h := (*unsafeheader.Slice)(unsafe.Pointer(&s))
|
||||
h.Data = unsafe.Pointer(p)
|
||||
h.Len = n
|
||||
h.Cap = n
|
||||
|
||||
return string(s)
|
||||
return string(unsafe.Slice(p, n))
|
||||
}
|
||||
|
||||
// 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) {
|
||||
// Recvmsg not implemented on AIX
|
||||
return -1, -1, -1, ENOSYS
|
||||
var msg Msghdr
|
||||
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) {
|
||||
// SendmsgN not implemented on AIX
|
||||
return -1, ENOSYS
|
||||
var msg Msghdr
|
||||
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) {
|
||||
|
|
|
@ -363,7 +363,7 @@ func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Sockle
|
|||
var empty bool
|
||||
if len(oob) > 0 {
|
||||
// send at least one normal byte
|
||||
empty := emptyIovecs(iov)
|
||||
empty = emptyIovecs(iov)
|
||||
if empty {
|
||||
var iova [1]Iovec
|
||||
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"
|
||||
)
|
||||
|
||||
//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.
|
||||
type SockaddrDatalink struct {
|
||||
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 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)
|
||||
|
||||
|
|
|
@ -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 Chown(path string, uid int, gid int) (err error)
|
||||
//sys Chroot(path string) (err error)
|
||||
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
||||
//sys Close(fd int) (err error)
|
||||
//sys Dup(fd int) (nfd 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 Chown(path string, uid int, gid int) (err error)
|
||||
//sys Chroot(path string) (err error)
|
||||
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
||||
//sys Close(fd int) (err error)
|
||||
//sys Dup(fd int) (nfd 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)
|
||||
}
|
||||
|
||||
func PtraceIO(req int, pid int, addr 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)}
|
||||
func PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) {
|
||||
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)
|
||||
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)
|
||||
}
|
||||
|
||||
func PtraceIO(req int, pid int, addr 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)}
|
||||
func PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) {
|
||||
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)
|
||||
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 PtraceIO(req int, pid int, addr 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)}
|
||||
func PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) {
|
||||
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)
|
||||
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 PtraceIO(req int, pid int, addr 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)}
|
||||
func PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) {
|
||||
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)
|
||||
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 PtraceIO(req int, pid int, addr 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)}
|
||||
func PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) {
|
||||
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)
|
||||
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
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"runtime"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
|
@ -79,107 +77,3 @@ func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
|
|||
}
|
||||
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 (
|
||||
"encoding/binary"
|
||||
"strconv"
|
||||
"syscall"
|
||||
"time"
|
||||
"unsafe"
|
||||
|
@ -233,7 +234,7 @@ func Futimesat(dirfd int, path string, tv []Timeval) error {
|
|||
func Futimes(fd int, tv []Timeval) (err error) {
|
||||
// Believe it or not, this is the best we can do on Linux
|
||||
// (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
|
||||
|
@ -1541,7 +1542,7 @@ func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Sockle
|
|||
var dummy byte
|
||||
var empty bool
|
||||
if len(oob) > 0 {
|
||||
empty := emptyIovecs(iov)
|
||||
empty = emptyIovecs(iov)
|
||||
if empty {
|
||||
var sockType int
|
||||
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
|
||||
iova[0].Base = &dummy
|
||||
iova[0].SetLen(1)
|
||||
iov = iova[:]
|
||||
}
|
||||
}
|
||||
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)
|
||||
//sys Chdir(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 ClockGettime(clockid int32, time *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
|
||||
}
|
||||
|
||||
// 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) {
|
||||
return EOPNOTSUPP
|
||||
return syscall.Setuid(uid)
|
||||
}
|
||||
|
||||
func Setgid(uid int) (err error) {
|
||||
return EOPNOTSUPP
|
||||
func Setgid(gid int) (err error) {
|
||||
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.
|
||||
|
@ -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 pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2
|
||||
|
||||
func bytes2iovec(bs [][]byte) []Iovec {
|
||||
iovecs := make([]Iovec, len(bs))
|
||||
for i, b := range bs {
|
||||
iovecs[i].SetLen(len(b))
|
||||
// minIovec is the size of the small initial allocation used by
|
||||
// Readv, Writev, etc.
|
||||
//
|
||||
// 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 {
|
||||
iovecs[i].Base = &b[0]
|
||||
v.Base = &b[0]
|
||||
} 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
|
||||
// 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.
|
||||
// offs2lohi splits offs into its low and high order bits.
|
||||
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) {
|
||||
iovecs := bytes2iovec(iovs)
|
||||
iovecs := make([]Iovec, 0, minIovec)
|
||||
iovecs = appendBytes(iovecs, iovs)
|
||||
n, err = readv(fd, iovecs)
|
||||
readvRacedetect(iovecs, n, err)
|
||||
return n, err
|
||||
}
|
||||
|
||||
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)
|
||||
n, err = preadv(fd, iovecs, lo, hi)
|
||||
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) {
|
||||
iovecs := bytes2iovec(iovs)
|
||||
iovecs := make([]Iovec, 0, minIovec)
|
||||
iovecs = appendBytes(iovecs, iovs)
|
||||
lo, hi := offs2lohi(offset)
|
||||
n, err = preadv2(fd, iovecs, lo, hi, flags)
|
||||
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) {
|
||||
iovecs := bytes2iovec(iovs)
|
||||
iovecs := make([]Iovec, 0, minIovec)
|
||||
iovecs = appendBytes(iovecs, iovs)
|
||||
if raceenabled {
|
||||
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) {
|
||||
iovecs := bytes2iovec(iovs)
|
||||
iovecs := make([]Iovec, 0, minIovec)
|
||||
iovecs = appendBytes(iovecs, iovs)
|
||||
if raceenabled {
|
||||
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) {
|
||||
iovecs := bytes2iovec(iovs)
|
||||
iovecs := make([]Iovec, 0, minIovec)
|
||||
iovecs = appendBytes(iovecs, iovs)
|
||||
if raceenabled {
|
||||
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
||||
}
|
||||
|
@ -2240,7 +2268,7 @@ func (fh *FileHandle) Bytes() []byte {
|
|||
if n == 0 {
|
||||
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
|
||||
|
@ -2356,6 +2384,16 @@ func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) {
|
|||
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
|
||||
*/
|
||||
|
@ -2414,7 +2452,6 @@ func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) {
|
|||
// RestartSyscall
|
||||
// RtSigaction
|
||||
// RtSigpending
|
||||
// RtSigprocmask
|
||||
// RtSigqueueinfo
|
||||
// RtSigreturn
|
||||
// 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 setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
|
||||
//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 Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
||||
//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 setfsgid(gid 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 Setreuid(ruid int, euid 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)
|
||||
|
||||
|
|
|
@ -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 setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
|
||||
//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 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
|
||||
|
|
|
@ -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 setfsgid(gid 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 Setreuid(ruid int, euid 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)
|
||||
|
||||
|
|
|
@ -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 setfsgid(gid 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 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 setfsgid(gid 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 Setreuid(ruid int, euid 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 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 setfsgid(gid 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 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)
|
||||
|
|
|
@ -34,10 +34,6 @@ import (
|
|||
//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 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 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
|
||||
|
|
|
@ -34,11 +34,7 @@ package unix
|
|||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||
//sys setfsgid(gid 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 Setreuid(ruid int, euid 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 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 setfsgid(gid 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 Setreuid(ruid int, euid 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)
|
||||
|
||||
|
|
|
@ -34,11 +34,7 @@ import (
|
|||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||
//sys setfsgid(gid 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 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 Stat(path string, stat *Stat_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 setfsgid(gid 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 Setreuid(ruid int, euid 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 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))
|
||||
}
|
||||
|
||||
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) {
|
||||
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 Chown(path string, uid int, gid int) (err error)
|
||||
//sys Chroot(path string) (err error)
|
||||
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
||||
//sys Close(fd int) (err error)
|
||||
//sys Dup(fd int) (nfd 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 Chown(path string, uid int, gid int) (err error)
|
||||
//sys Chroot(path string) (err error)
|
||||
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
||||
//sys Close(fd int) (err error)
|
||||
//sys Dup(fd int) (nfd 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 Chown(path string, uid int, gid int) (err error)
|
||||
//sys Chroot(path string) (err error)
|
||||
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
||||
//sys Close(fd int) (err error)
|
||||
//sys Creat(path string, mode uint32) (fd 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
|
||||
// reference to the cookie around until the event is processed
|
||||
// thus the otherwise seemingly extraneous "cookies" map
|
||||
// The key of this map is a pointer to the corresponding &fCookie.cookie
|
||||
cookies map[*interface{}]*fileObjCookie
|
||||
// The key of this map is a pointer to the corresponding fCookie
|
||||
cookies map[*fileObjCookie]struct{}
|
||||
}
|
||||
|
||||
// PortEvent is an abstraction of the port_event C struct.
|
||||
|
@ -778,7 +779,7 @@ func NewEventPort() (*EventPort, error) {
|
|||
port: port,
|
||||
fds: make(map[uintptr]*fileObjCookie),
|
||||
paths: make(map[string]*fileObjCookie),
|
||||
cookies: make(map[*interface{}]*fileObjCookie),
|
||||
cookies: make(map[*fileObjCookie]struct{}),
|
||||
}
|
||||
return e, nil
|
||||
}
|
||||
|
@ -799,6 +800,7 @@ func (e *EventPort) Close() error {
|
|||
}
|
||||
e.fds = nil
|
||||
e.paths = nil
|
||||
e.cookies = 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 {
|
||||
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 {
|
||||
return err
|
||||
}
|
||||
fCookie := &fileObjCookie{fobj, cookie}
|
||||
_, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fobj)), events, (*byte)(unsafe.Pointer(&fCookie.cookie)))
|
||||
_, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fCookie.fobj)), events, (*byte)(unsafe.Pointer(fCookie)))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
e.paths[path] = fCookie
|
||||
e.cookies[&fCookie.cookie] = fCookie
|
||||
e.cookies[fCookie] = struct{}{}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -858,7 +859,7 @@ func (e *EventPort) DissociatePath(path string) error {
|
|||
if err == nil {
|
||||
// dissociate was successful, safe to delete the cookie
|
||||
fCookie := e.paths[path]
|
||||
delete(e.cookies, &fCookie.cookie)
|
||||
delete(e.cookies, fCookie)
|
||||
}
|
||||
delete(e.paths, path)
|
||||
return err
|
||||
|
@ -871,13 +872,16 @@ func (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) erro
|
|||
if _, found := e.fds[fd]; found {
|
||||
return fmt.Errorf("%v is already associated with this Event Port", fd)
|
||||
}
|
||||
fCookie := &fileObjCookie{nil, cookie}
|
||||
_, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(&fCookie.cookie)))
|
||||
fCookie, err := createFileObjCookie("", nil, cookie)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(fCookie)))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
e.fds[fd] = fCookie
|
||||
e.cookies[&fCookie.cookie] = fCookie
|
||||
e.cookies[fCookie] = struct{}{}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -896,27 +900,31 @@ func (e *EventPort) DissociateFd(fd uintptr) error {
|
|||
if err == nil {
|
||||
// dissociate was successful, safe to delete the cookie
|
||||
fCookie := e.fds[fd]
|
||||
delete(e.cookies, &fCookie.cookie)
|
||||
delete(e.cookies, fCookie)
|
||||
}
|
||||
delete(e.fds, fd)
|
||||
return err
|
||||
}
|
||||
|
||||
func createFileObj(name string, stat os.FileInfo) (*fileObj, error) {
|
||||
fobj := new(fileObj)
|
||||
func createFileObjCookie(name string, stat os.FileInfo, cookie interface{}) (*fileObjCookie, error) {
|
||||
fCookie := new(fileObjCookie)
|
||||
fCookie.cookie = cookie
|
||||
if name != "" && stat != nil {
|
||||
fCookie.fobj = new(fileObj)
|
||||
bs, err := ByteSliceFromString(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
fobj.Name = (*int8)(unsafe.Pointer(&bs[0]))
|
||||
fCookie.fobj.Name = (*int8)(unsafe.Pointer(&bs[0]))
|
||||
s := stat.Sys().(*syscall.Stat_t)
|
||||
fobj.Atim.Sec = s.Atim.Sec
|
||||
fobj.Atim.Nsec = s.Atim.Nsec
|
||||
fobj.Mtim.Sec = s.Mtim.Sec
|
||||
fobj.Mtim.Nsec = s.Mtim.Nsec
|
||||
fobj.Ctim.Sec = s.Ctim.Sec
|
||||
fobj.Ctim.Nsec = s.Ctim.Nsec
|
||||
return fobj, nil
|
||||
fCookie.fobj.Atim.Sec = s.Atim.Sec
|
||||
fCookie.fobj.Atim.Nsec = s.Atim.Nsec
|
||||
fCookie.fobj.Mtim.Sec = s.Mtim.Sec
|
||||
fCookie.fobj.Mtim.Nsec = s.Mtim.Nsec
|
||||
fCookie.fobj.Ctim.Sec = s.Ctim.Sec
|
||||
fCookie.fobj.Ctim.Nsec = s.Ctim.Nsec
|
||||
}
|
||||
return fCookie, nil
|
||||
}
|
||||
|
||||
// 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)
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
e.peIntToExt(pe, p)
|
||||
err = e.peIntToExt(pe, p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return p, nil
|
||||
}
|
||||
|
||||
// peIntToExt converts a cgo portEvent struct into the friendlier PortEvent
|
||||
// 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.Source = peInt.Source
|
||||
cookie := (*interface{})(unsafe.Pointer(peInt.User))
|
||||
peExt.Cookie = *cookie
|
||||
fCookie := (*fileObjCookie)(unsafe.Pointer(peInt.User))
|
||||
_, 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 {
|
||||
case PORT_SOURCE_FD:
|
||||
delete(e.cookies, cookie)
|
||||
peExt.Fd = uintptr(peInt.Object)
|
||||
// Only remove the fds entry if it exists and this cookie matches
|
||||
if fobj, ok := e.fds[peExt.Fd]; ok {
|
||||
if &fobj.cookie == cookie {
|
||||
if fobj == fCookie {
|
||||
delete(e.fds, peExt.Fd)
|
||||
}
|
||||
}
|
||||
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
|
||||
} else {
|
||||
panic("mismanaged memory")
|
||||
}
|
||||
delete(e.cookies, cookie)
|
||||
peExt.Path = BytePtrToString((*byte)(unsafe.Pointer(peExt.fobj.Name)))
|
||||
// Only remove the paths entry if it exists and this cookie matches
|
||||
if fobj, ok := e.paths[peExt.Path]; ok {
|
||||
if &fobj.cookie == cookie {
|
||||
if fobj == fCookie {
|
||||
delete(e.paths, peExt.Path)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 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)
|
||||
max := uint32(len(s))
|
||||
var err error
|
||||
ps := make([]portEvent, max, max)
|
||||
ps := make([]portEvent, max)
|
||||
_, err = port_getn(e.port, &ps[0], max, &got, timeout)
|
||||
// got will be trustworthy with ETIME, but not any other error.
|
||||
if err != nil && err != ETIME {
|
||||
|
@ -998,8 +1012,122 @@ func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error)
|
|||
}
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
valid := 0
|
||||
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"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"golang.org/x/sys/internal/unsafeheader"
|
||||
)
|
||||
|
||||
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.
|
||||
var b []byte
|
||||
hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b))
|
||||
hdr.Data = unsafe.Pointer(addr)
|
||||
hdr.Cap = length
|
||||
hdr.Len = length
|
||||
b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), length)
|
||||
|
||||
// Register mapping in m and return it.
|
||||
p := &b[cap(b)-1]
|
||||
|
@ -337,6 +331,19 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {
|
|||
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) {
|
||||
var iov [1]Iovec
|
||||
if len(p) > 0 {
|
||||
|
@ -352,13 +359,9 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
|
|||
return
|
||||
}
|
||||
|
||||
// RecvmsgBuffers receives a message from a socket using the recvmsg
|
||||
// system call. The flags are passed to recvmsg. Any non-control data
|
||||
// read is scattered into the buffers slices. The results are:
|
||||
// - 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
|
||||
// RecvmsgBuffers receives a message from a socket using the recvmsg system
|
||||
// call. This function is equivalent to Recvmsg, but non-control data read is
|
||||
// scattered into the buffers slices.
|
||||
func RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
|
||||
iov := make([]Iovec, len(buffers))
|
||||
for i := range buffers {
|
||||
|
@ -377,11 +380,38 @@ func RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn in
|
|||
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) {
|
||||
_, err = SendmsgN(fd, p, oob, to, flags)
|
||||
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) {
|
||||
var iov [1]Iovec
|
||||
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
|
||||
// system call. The flags are passed to sendmsg. Any non-control data written
|
||||
// is gathered from buffers. The function returns the number of bytes written
|
||||
// to the socket.
|
||||
// system call. This function is equivalent to SendmsgN, but the non-control
|
||||
// data is gathered from buffers.
|
||||
func SendmsgBuffers(fd int, buffers [][]byte, oob []byte, to Sockaddr, flags int) (n int, err error) {
|
||||
iov := make([]Iovec, len(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) {
|
||||
ptr, n, err := to.sockaddr()
|
||||
var ptr unsafe.Pointer
|
||||
var salen _Socklen
|
||||
if to != nil {
|
||||
ptr, salen, err = to.sockaddr()
|
||||
if err != nil {
|
||||
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) {
|
||||
|
@ -545,7 +578,7 @@ func Lutimes(path string, tv []Timeval) error {
|
|||
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 {
|
||||
for i := range iov {
|
||||
if iov[i].Len > 0 {
|
||||
|
|
|
@ -2,11 +2,9 @@
|
|||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build (darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris) && gc && !ppc64le && !ppc64
|
||||
// +build darwin dragonfly freebsd linux netbsd openbsd solaris
|
||||
//go:build (darwin || dragonfly || freebsd || (linux && !ppc64 && !ppc64le) || netbsd || openbsd || solaris) && gc
|
||||
// +build darwin dragonfly freebsd linux,!ppc64,!ppc64le netbsd openbsd solaris
|
||||
// +build gc
|
||||
// +build !ppc64le
|
||||
// +build !ppc64
|
||||
|
||||
package unix
|
||||
|
||||
|
|
|
@ -9,8 +9,10 @@ package unix
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"runtime"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
@ -55,7 +57,13 @@ func (d *Dirent) NameString() string {
|
|||
if d == nil {
|
||||
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) {
|
||||
|
@ -1230,6 +1238,14 @@ func Readdir(dir uintptr) (*Dirent, error) {
|
|||
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 {
|
||||
_, _, e := syscall_syscall(SYS_CLOSEDIR, dir, 0, 0)
|
||||
if e != 0 {
|
||||
|
@ -1821,3 +1837,158 @@ func Unmount(name string, mtm int) (err error) {
|
|||
}
|
||||
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
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
|
||||
"golang.org/x/sys/internal/unsafeheader"
|
||||
)
|
||||
import "unsafe"
|
||||
|
||||
// SysvShmAttach attaches the Sysv shared memory segment associated with the
|
||||
// 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.
|
||||
// TODO: convert to unsafe.Slice once we can assume Go 1.17
|
||||
var b []byte
|
||||
hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b))
|
||||
hdr.Data = unsafe.Pointer(addr)
|
||||
hdr.Cap = int(info.Segsz)
|
||||
hdr.Len = int(info.Segsz)
|
||||
b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), int(info.Segsz))
|
||||
return b, nil
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ package unix
|
|||
|
||||
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() }
|
||||
|
||||
// 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) {
|
||||
if len(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
|
||||
|
@ -160,13 +165,12 @@ func Lremovexattr(link string, attr string) (err error) {
|
|||
}
|
||||
|
||||
func Listxattr(file string, dest []byte) (sz int, err error) {
|
||||
d := initxattrdest(dest, 0)
|
||||
destsiz := len(dest)
|
||||
|
||||
// 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} {
|
||||
stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
|
||||
stmp, e := ListxattrNS(file, nsid, dest[pos:])
|
||||
|
||||
/* Errors accessing system attrs are ignored so 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
|
||||
* 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
|
||||
} else if e != nil {
|
||||
}
|
||||
return s, e
|
||||
}
|
||||
|
||||
s += stmp
|
||||
destsiz -= s
|
||||
if destsiz < 0 {
|
||||
destsiz = 0
|
||||
pos = s
|
||||
if pos > destsiz {
|
||||
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
|
||||
}
|
||||
|
||||
func Flistxattr(fd int, dest []byte) (sz int, err error) {
|
||||
d := initxattrdest(dest, 0)
|
||||
destsiz := len(dest)
|
||||
|
||||
s := 0
|
||||
s, pos := 0, 0
|
||||
for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
|
||||
stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
|
||||
if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
|
||||
stmp, e := FlistxattrNS(fd, nsid, dest[pos:])
|
||||
|
||||
if e != nil {
|
||||
if e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
|
||||
continue
|
||||
} else if e != nil {
|
||||
}
|
||||
return s, e
|
||||
}
|
||||
|
||||
s += stmp
|
||||
destsiz -= s
|
||||
if destsiz < 0 {
|
||||
destsiz = 0
|
||||
pos = s
|
||||
if pos > destsiz {
|
||||
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
|
||||
}
|
||||
|
||||
func Llistxattr(link string, dest []byte) (sz int, err error) {
|
||||
d := initxattrdest(dest, 0)
|
||||
destsiz := len(dest)
|
||||
|
||||
s := 0
|
||||
s, pos := 0, 0
|
||||
for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
|
||||
stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
|
||||
if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
|
||||
stmp, e := LlistxattrNS(link, nsid, dest[pos:])
|
||||
|
||||
if e != nil {
|
||||
if e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
|
||||
continue
|
||||
} else if e != nil {
|
||||
}
|
||||
return s, e
|
||||
}
|
||||
|
||||
s += stmp
|
||||
destsiz -= s
|
||||
if destsiz < 0 {
|
||||
destsiz = 0
|
||||
pos = s
|
||||
if pos > destsiz {
|
||||
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
|
||||
|
|
|
@ -457,7 +457,6 @@ const (
|
|||
B600 = 0x8
|
||||
B75 = 0x2
|
||||
B9600 = 0xd
|
||||
BALLOON_KVM_MAGIC = 0x13661366
|
||||
BDEVFS_MAGIC = 0x62646576
|
||||
BINDERFS_SUPER_MAGIC = 0x6c6f6f70
|
||||
BINFMTFS_MAGIC = 0x42494e4d
|
||||
|
@ -563,6 +562,7 @@ const (
|
|||
BUS_USB = 0x3
|
||||
BUS_VIRTUAL = 0x6
|
||||
CAN_BCM = 0x2
|
||||
CAN_BUS_OFF_THRESHOLD = 0x100
|
||||
CAN_CTRLMODE_3_SAMPLES = 0x4
|
||||
CAN_CTRLMODE_BERR_REPORTING = 0x10
|
||||
CAN_CTRLMODE_CC_LEN8_DLC = 0x100
|
||||
|
@ -577,9 +577,12 @@ const (
|
|||
CAN_EFF_FLAG = 0x80000000
|
||||
CAN_EFF_ID_BITS = 0x1d
|
||||
CAN_EFF_MASK = 0x1fffffff
|
||||
CAN_ERROR_PASSIVE_THRESHOLD = 0x80
|
||||
CAN_ERROR_WARNING_THRESHOLD = 0x60
|
||||
CAN_ERR_ACK = 0x20
|
||||
CAN_ERR_BUSERROR = 0x80
|
||||
CAN_ERR_BUSOFF = 0x40
|
||||
CAN_ERR_CNT = 0x200
|
||||
CAN_ERR_CRTL = 0x4
|
||||
CAN_ERR_CRTL_ACTIVE = 0x40
|
||||
CAN_ERR_CRTL_RX_OVERFLOW = 0x1
|
||||
|
@ -820,9 +823,9 @@ const (
|
|||
DM_UUID_FLAG = 0x4000
|
||||
DM_UUID_LEN = 0x81
|
||||
DM_VERSION = 0xc138fd00
|
||||
DM_VERSION_EXTRA = "-ioctl (2022-02-22)"
|
||||
DM_VERSION_EXTRA = "-ioctl (2022-07-28)"
|
||||
DM_VERSION_MAJOR = 0x4
|
||||
DM_VERSION_MINOR = 0x2e
|
||||
DM_VERSION_MINOR = 0x2f
|
||||
DM_VERSION_PATCHLEVEL = 0x0
|
||||
DT_BLK = 0x6
|
||||
DT_CHR = 0x2
|
||||
|
@ -1049,6 +1052,7 @@ const (
|
|||
ETH_P_CAIF = 0xf7
|
||||
ETH_P_CAN = 0xc
|
||||
ETH_P_CANFD = 0xd
|
||||
ETH_P_CANXL = 0xe
|
||||
ETH_P_CFM = 0x8902
|
||||
ETH_P_CONTROL = 0x16
|
||||
ETH_P_CUST = 0x6006
|
||||
|
@ -1060,6 +1064,7 @@ const (
|
|||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_DSA_A5PSW = 0xe001
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -1194,8 +1199,10 @@ const (
|
|||
FAN_MARK_EVICTABLE = 0x200
|
||||
FAN_MARK_FILESYSTEM = 0x100
|
||||
FAN_MARK_FLUSH = 0x80
|
||||
FAN_MARK_IGNORE = 0x400
|
||||
FAN_MARK_IGNORED_MASK = 0x20
|
||||
FAN_MARK_IGNORED_SURV_MODIFY = 0x40
|
||||
FAN_MARK_IGNORE_SURV = 0x440
|
||||
FAN_MARK_INODE = 0x0
|
||||
FAN_MARK_MOUNT = 0x10
|
||||
FAN_MARK_ONLYDIR = 0x8
|
||||
|
@ -1253,6 +1260,7 @@ const (
|
|||
FSCRYPT_MODE_AES_128_CBC = 0x5
|
||||
FSCRYPT_MODE_AES_128_CTS = 0x6
|
||||
FSCRYPT_MODE_AES_256_CTS = 0x4
|
||||
FSCRYPT_MODE_AES_256_HCTR2 = 0xa
|
||||
FSCRYPT_MODE_AES_256_XTS = 0x1
|
||||
FSCRYPT_POLICY_FLAGS_PAD_16 = 0x2
|
||||
FSCRYPT_POLICY_FLAGS_PAD_32 = 0x3
|
||||
|
@ -1430,6 +1438,7 @@ const (
|
|||
IFF_NOARP = 0x80
|
||||
IFF_NOFILTER = 0x1000
|
||||
IFF_NOTRAILERS = 0x20
|
||||
IFF_NO_CARRIER = 0x40
|
||||
IFF_NO_PI = 0x1000
|
||||
IFF_ONE_QUEUE = 0x2000
|
||||
IFF_PERSIST = 0x800
|
||||
|
@ -1805,6 +1814,7 @@ const (
|
|||
MADV_DONTDUMP = 0x10
|
||||
MADV_DONTFORK = 0xa
|
||||
MADV_DONTNEED = 0x4
|
||||
MADV_DONTNEED_LOCKED = 0x18
|
||||
MADV_FREE = 0x8
|
||||
MADV_HUGEPAGE = 0xe
|
||||
MADV_HWPOISON = 0x64
|
||||
|
@ -1846,7 +1856,7 @@ const (
|
|||
MFD_ALLOW_SEALING = 0x2
|
||||
MFD_CLOEXEC = 0x1
|
||||
MFD_HUGETLB = 0x4
|
||||
MFD_HUGE_16GB = -0x78000000
|
||||
MFD_HUGE_16GB = 0x88000000
|
||||
MFD_HUGE_16MB = 0x60000000
|
||||
MFD_HUGE_1GB = 0x78000000
|
||||
MFD_HUGE_1MB = 0x50000000
|
||||
|
@ -2212,6 +2222,11 @@ const (
|
|||
PERF_AUX_FLAG_PARTIAL = 0x4
|
||||
PERF_AUX_FLAG_PMU_FORMAT_TYPE_MASK = 0xff00
|
||||
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_NO_GROUP = 0x1
|
||||
PERF_FLAG_FD_OUTPUT = 0x2
|
||||
|
@ -2232,6 +2247,8 @@ const (
|
|||
PERF_MEM_LOCK_NA = 0x1
|
||||
PERF_MEM_LOCK_SHIFT = 0x18
|
||||
PERF_MEM_LVLNUM_ANY_CACHE = 0xb
|
||||
PERF_MEM_LVLNUM_CXL = 0x9
|
||||
PERF_MEM_LVLNUM_IO = 0xa
|
||||
PERF_MEM_LVLNUM_L1 = 0x1
|
||||
PERF_MEM_LVLNUM_L2 = 0x2
|
||||
PERF_MEM_LVLNUM_L3 = 0x3
|
||||
|
@ -2265,6 +2282,7 @@ const (
|
|||
PERF_MEM_REMOTE_REMOTE = 0x1
|
||||
PERF_MEM_REMOTE_SHIFT = 0x25
|
||||
PERF_MEM_SNOOPX_FWD = 0x1
|
||||
PERF_MEM_SNOOPX_PEER = 0x2
|
||||
PERF_MEM_SNOOPX_SHIFT = 0x26
|
||||
PERF_MEM_SNOOP_HIT = 0x4
|
||||
PERF_MEM_SNOOP_HITM = 0x10
|
||||
|
@ -2301,7 +2319,6 @@ const (
|
|||
PERF_SAMPLE_BRANCH_PLM_ALL = 0x7
|
||||
PERF_SAMPLE_WEIGHT_TYPE = 0x1004000
|
||||
PIPEFS_MAGIC = 0x50495045
|
||||
PPC_CMM_MAGIC = 0xc7571590
|
||||
PPPIOCGNPMODE = 0xc008744c
|
||||
PPPIOCNEWUNIT = 0xc004743e
|
||||
PRIO_PGRP = 0x1
|
||||
|
@ -2999,6 +3016,7 @@ const (
|
|||
STATX_BLOCKS = 0x400
|
||||
STATX_BTIME = 0x800
|
||||
STATX_CTIME = 0x80
|
||||
STATX_DIOALIGN = 0x2000
|
||||
STATX_GID = 0x10
|
||||
STATX_INO = 0x100
|
||||
STATX_MNT_ID = 0x1000
|
||||
|
@ -3392,9 +3410,7 @@ const (
|
|||
XDP_ZEROCOPY = 0x4
|
||||
XENFS_SUPER_MAGIC = 0xabba1974
|
||||
XFS_SUPER_MAGIC = 0x58465342
|
||||
Z3FOLD_MAGIC = 0x33
|
||||
ZONEFS_MAGIC = 0x5a4f4653
|
||||
ZSMALLOC_MAGIC = 0x58295829
|
||||
_HIDIOCGRAWNAME_LEN = 0x80
|
||||
_HIDIOCGRAWPHYS_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.
|
||||
|
||||
//go:build 386 && linux
|
||||
// +build 386,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -133,6 +133,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x80044d07
|
||||
MEMISLOCKED = 0x80084d17
|
||||
MEMLOCK = 0x40084d05
|
||||
MEMREAD = 0xc03c4d1a
|
||||
MEMREADOOB = 0xc00c4d04
|
||||
MEMSETBADBLOCK = 0x40084d0c
|
||||
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.
|
||||
|
||||
//go:build amd64 && linux
|
||||
// +build amd64,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -133,6 +133,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x80044d07
|
||||
MEMISLOCKED = 0x80084d17
|
||||
MEMLOCK = 0x40084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc0104d04
|
||||
MEMSETBADBLOCK = 0x40084d0c
|
||||
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.
|
||||
|
||||
//go:build arm && linux
|
||||
// +build arm,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -131,6 +131,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x80044d07
|
||||
MEMISLOCKED = 0x80084d17
|
||||
MEMLOCK = 0x40084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc00c4d04
|
||||
MEMSETBADBLOCK = 0x40084d0c
|
||||
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.
|
||||
|
||||
//go:build arm64 && linux
|
||||
// +build arm64,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -134,6 +134,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x80044d07
|
||||
MEMISLOCKED = 0x80084d17
|
||||
MEMLOCK = 0x40084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc0104d04
|
||||
MEMSETBADBLOCK = 0x40084d0c
|
||||
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.
|
||||
|
||||
//go:build loong64 && linux
|
||||
// +build loong64,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -132,6 +132,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x80044d07
|
||||
MEMISLOCKED = 0x80084d17
|
||||
MEMLOCK = 0x40084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc0104d04
|
||||
MEMSETBADBLOCK = 0x40084d0c
|
||||
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.
|
||||
|
||||
//go:build mips && linux
|
||||
// +build mips,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -131,6 +131,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x40044d07
|
||||
MEMISLOCKED = 0x40084d17
|
||||
MEMLOCK = 0x80084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc00c4d04
|
||||
MEMSETBADBLOCK = 0x80084d0c
|
||||
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.
|
||||
|
||||
//go:build mips64 && linux
|
||||
// +build mips64,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -131,6 +131,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x40044d07
|
||||
MEMISLOCKED = 0x40084d17
|
||||
MEMLOCK = 0x80084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc0104d04
|
||||
MEMSETBADBLOCK = 0x80084d0c
|
||||
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.
|
||||
|
||||
//go:build mips64le && linux
|
||||
// +build mips64le,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -131,6 +131,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x40044d07
|
||||
MEMISLOCKED = 0x40084d17
|
||||
MEMLOCK = 0x80084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc0104d04
|
||||
MEMSETBADBLOCK = 0x80084d0c
|
||||
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.
|
||||
|
||||
//go:build mipsle && linux
|
||||
// +build mipsle,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -131,6 +131,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x40044d07
|
||||
MEMISLOCKED = 0x40084d17
|
||||
MEMLOCK = 0x80084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc00c4d04
|
||||
MEMSETBADBLOCK = 0x80084d0c
|
||||
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.
|
||||
|
||||
//go:build ppc && linux
|
||||
// +build ppc,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -131,6 +131,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x40044d07
|
||||
MEMISLOCKED = 0x40084d17
|
||||
MEMLOCK = 0x80084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc00c4d04
|
||||
MEMSETBADBLOCK = 0x80084d0c
|
||||
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.
|
||||
|
||||
//go:build ppc64 && linux
|
||||
// +build ppc64,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -131,6 +131,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x40044d07
|
||||
MEMISLOCKED = 0x40084d17
|
||||
MEMLOCK = 0x80084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc0104d04
|
||||
MEMSETBADBLOCK = 0x80084d0c
|
||||
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.
|
||||
|
||||
//go:build ppc64le && linux
|
||||
// +build ppc64le,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -131,6 +131,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x40044d07
|
||||
MEMISLOCKED = 0x40084d17
|
||||
MEMLOCK = 0x80084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc0104d04
|
||||
MEMSETBADBLOCK = 0x80084d0c
|
||||
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.
|
||||
|
||||
//go:build riscv64 && linux
|
||||
// +build riscv64,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -131,6 +131,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x80044d07
|
||||
MEMISLOCKED = 0x80084d17
|
||||
MEMLOCK = 0x40084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc0104d04
|
||||
MEMSETBADBLOCK = 0x40084d0c
|
||||
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.
|
||||
|
||||
//go:build s390x && linux
|
||||
// +build s390x,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -131,6 +131,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x80044d07
|
||||
MEMISLOCKED = 0x80084d17
|
||||
MEMLOCK = 0x40084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc0104d04
|
||||
MEMSETBADBLOCK = 0x40084d0c
|
||||
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.
|
||||
|
||||
//go:build sparc64 && linux
|
||||
// +build sparc64,linux
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -136,6 +136,7 @@ const (
|
|||
MEMGETREGIONCOUNT = 0x40044d07
|
||||
MEMISLOCKED = 0x40084d17
|
||||
MEMLOCK = 0x80084d05
|
||||
MEMREAD = 0xc0404d1a
|
||||
MEMREADOOB = 0xc0104d04
|
||||
MEMSETBADBLOCK = 0x80084d0c
|
||||
MEMUNLOCK = 0x80084d06
|
||||
|
|
|
@ -46,6 +46,7 @@ const (
|
|||
AF_SNA = 0xb
|
||||
AF_UNIX = 0x1
|
||||
AF_UNSPEC = 0x0
|
||||
ALTWERASE = 0x200
|
||||
ARPHRD_ETHER = 0x1
|
||||
ARPHRD_FRELAY = 0xf
|
||||
ARPHRD_IEEE1394 = 0x18
|
||||
|
@ -108,6 +109,15 @@ const (
|
|||
BPF_DIRECTION_IN = 0x1
|
||||
BPF_DIRECTION_OUT = 0x2
|
||||
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_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -136,6 +146,7 @@ const (
|
|||
BPF_OR = 0x40
|
||||
BPF_RELEASE = 0x30bb6
|
||||
BPF_RET = 0x6
|
||||
BPF_RND = 0xc0
|
||||
BPF_RSH = 0x70
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
|
@ -147,6 +158,12 @@ const (
|
|||
BRKINT = 0x2
|
||||
CFLUSH = 0xf
|
||||
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
|
||||
CP_IDLE = 0x5
|
||||
CP_INTR = 0x4
|
||||
|
@ -170,7 +187,65 @@ const (
|
|||
CTL_KERN = 0x1
|
||||
CTL_MAXNAME = 0xc
|
||||
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
|
||||
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_ATM_RFC1483 = 0xb
|
||||
DLT_AX25 = 0x3
|
||||
|
@ -186,6 +261,7 @@ const (
|
|||
DLT_LOOP = 0xc
|
||||
DLT_MPLS = 0xdb
|
||||
DLT_NULL = 0x0
|
||||
DLT_OPENFLOW = 0x10b
|
||||
DLT_PFLOG = 0x75
|
||||
DLT_PFSYNC = 0x12
|
||||
DLT_PPP = 0x9
|
||||
|
@ -196,6 +272,23 @@ const (
|
|||
DLT_RAW = 0xe
|
||||
DLT_SLIP = 0x8
|
||||
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_CHR = 0x2
|
||||
DT_DIR = 0x4
|
||||
|
@ -215,6 +308,8 @@ const (
|
|||
EMUL_ENABLED = 0x1
|
||||
EMUL_NATIVE = 0x2
|
||||
ENDRUNDISC = 0x9
|
||||
ETH64_8021_RSVD_MASK = 0xfffffffffff0
|
||||
ETH64_8021_RSVD_PREFIX = 0x180c2000000
|
||||
ETHERMIN = 0x2e
|
||||
ETHERMTU = 0x5dc
|
||||
ETHERTYPE_8023 = 0x4
|
||||
|
@ -267,6 +362,7 @@ const (
|
|||
ETHERTYPE_DN = 0x6003
|
||||
ETHERTYPE_DOGFIGHT = 0x1989
|
||||
ETHERTYPE_DSMD = 0x8039
|
||||
ETHERTYPE_EAPOL = 0x888e
|
||||
ETHERTYPE_ECMA = 0x803
|
||||
ETHERTYPE_ENCRYPT = 0x803d
|
||||
ETHERTYPE_ES = 0x805d
|
||||
|
@ -298,6 +394,7 @@ const (
|
|||
ETHERTYPE_LLDP = 0x88cc
|
||||
ETHERTYPE_LOGICRAFT = 0x8148
|
||||
ETHERTYPE_LOOPBACK = 0x9000
|
||||
ETHERTYPE_MACSEC = 0x88e5
|
||||
ETHERTYPE_MATRA = 0x807a
|
||||
ETHERTYPE_MAX = 0xffff
|
||||
ETHERTYPE_MERIT = 0x807c
|
||||
|
@ -326,15 +423,17 @@ const (
|
|||
ETHERTYPE_NCD = 0x8149
|
||||
ETHERTYPE_NESTAR = 0x8006
|
||||
ETHERTYPE_NETBEUI = 0x8191
|
||||
ETHERTYPE_NHRP = 0x2001
|
||||
ETHERTYPE_NOVELL = 0x8138
|
||||
ETHERTYPE_NS = 0x600
|
||||
ETHERTYPE_NSAT = 0x601
|
||||
ETHERTYPE_NSCOMPAT = 0x807
|
||||
ETHERTYPE_NSH = 0x984f
|
||||
ETHERTYPE_NTRAILER = 0x10
|
||||
ETHERTYPE_OS9 = 0x7007
|
||||
ETHERTYPE_OS9NET = 0x7009
|
||||
ETHERTYPE_PACER = 0x80c6
|
||||
ETHERTYPE_PAE = 0x888e
|
||||
ETHERTYPE_PBB = 0x88e7
|
||||
ETHERTYPE_PCS = 0x4242
|
||||
ETHERTYPE_PLANNING = 0x8044
|
||||
ETHERTYPE_PPP = 0x880b
|
||||
|
@ -409,28 +508,40 @@ const (
|
|||
ETHER_CRC_POLY_LE = 0xedb88320
|
||||
ETHER_HDR_LEN = 0xe
|
||||
ETHER_MAX_DIX_LEN = 0x600
|
||||
ETHER_MAX_HARDMTU_LEN = 0xff9b
|
||||
ETHER_MAX_LEN = 0x5ee
|
||||
ETHER_MIN_LEN = 0x40
|
||||
ETHER_TYPE_LEN = 0x2
|
||||
ETHER_VLAN_ENCAP_LEN = 0x4
|
||||
EVFILT_AIO = -0x3
|
||||
EVFILT_DEVICE = -0x8
|
||||
EVFILT_EXCEPT = -0x9
|
||||
EVFILT_PROC = -0x5
|
||||
EVFILT_READ = -0x1
|
||||
EVFILT_SIGNAL = -0x6
|
||||
EVFILT_SYSCOUNT = 0x7
|
||||
EVFILT_SYSCOUNT = 0x9
|
||||
EVFILT_TIMER = -0x7
|
||||
EVFILT_VNODE = -0x4
|
||||
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_CLEAR = 0x20
|
||||
EV_DELETE = 0x2
|
||||
EV_DISABLE = 0x8
|
||||
EV_DISPATCH = 0x80
|
||||
EV_ENABLE = 0x4
|
||||
EV_EOF = 0x8000
|
||||
EV_ERROR = 0x4000
|
||||
EV_FLAG1 = 0x2000
|
||||
EV_ONESHOT = 0x10
|
||||
EV_SYSFLAGS = 0xf000
|
||||
EV_RECEIPT = 0x40
|
||||
EV_SYSFLAGS = 0xf800
|
||||
EXTA = 0x4b00
|
||||
EXTB = 0x9600
|
||||
EXTPROC = 0x800
|
||||
|
@ -443,6 +554,7 @@ const (
|
|||
F_GETFL = 0x3
|
||||
F_GETLK = 0x7
|
||||
F_GETOWN = 0x5
|
||||
F_ISATTY = 0xb
|
||||
F_OK = 0x0
|
||||
F_RDLCK = 0x1
|
||||
F_SETFD = 0x2
|
||||
|
@ -460,7 +572,6 @@ const (
|
|||
IEXTEN = 0x400
|
||||
IFAN_ARRIVAL = 0x0
|
||||
IFAN_DEPARTURE = 0x1
|
||||
IFA_ROUTE = 0x1
|
||||
IFF_ALLMULTI = 0x200
|
||||
IFF_BROADCAST = 0x2
|
||||
IFF_CANTCHANGE = 0x8e52
|
||||
|
@ -471,12 +582,12 @@ const (
|
|||
IFF_LOOPBACK = 0x8
|
||||
IFF_MULTICAST = 0x8000
|
||||
IFF_NOARP = 0x80
|
||||
IFF_NOTRAILERS = 0x20
|
||||
IFF_OACTIVE = 0x400
|
||||
IFF_POINTOPOINT = 0x10
|
||||
IFF_PROMISC = 0x100
|
||||
IFF_RUNNING = 0x40
|
||||
IFF_SIMPLEX = 0x800
|
||||
IFF_STATICARP = 0x20
|
||||
IFF_UP = 0x1
|
||||
IFNAMSIZ = 0x10
|
||||
IFT_1822 = 0x2
|
||||
|
@ -605,6 +716,7 @@ const (
|
|||
IFT_LINEGROUP = 0xd2
|
||||
IFT_LOCALTALK = 0x2a
|
||||
IFT_LOOP = 0x18
|
||||
IFT_MBIM = 0xfa
|
||||
IFT_MEDIAMAILOVERIP = 0x8b
|
||||
IFT_MFSIGLINK = 0xa7
|
||||
IFT_MIOX25 = 0x26
|
||||
|
@ -695,6 +807,7 @@ const (
|
|||
IFT_VOICEOVERCABLE = 0xc6
|
||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
||||
IFT_VOICEOVERIP = 0x68
|
||||
IFT_WIREGUARD = 0xfb
|
||||
IFT_X213 = 0x5d
|
||||
IFT_X25 = 0x5
|
||||
IFT_X25DDN = 0x4
|
||||
|
@ -729,8 +842,6 @@ const (
|
|||
IPPROTO_AH = 0x33
|
||||
IPPROTO_CARP = 0x70
|
||||
IPPROTO_DIVERT = 0x102
|
||||
IPPROTO_DIVERT_INIT = 0x2
|
||||
IPPROTO_DIVERT_RESP = 0x1
|
||||
IPPROTO_DONE = 0x101
|
||||
IPPROTO_DSTOPTS = 0x3c
|
||||
IPPROTO_EGP = 0x8
|
||||
|
@ -762,9 +873,11 @@ const (
|
|||
IPPROTO_RAW = 0xff
|
||||
IPPROTO_ROUTING = 0x2b
|
||||
IPPROTO_RSVP = 0x2e
|
||||
IPPROTO_SCTP = 0x84
|
||||
IPPROTO_TCP = 0x6
|
||||
IPPROTO_TP = 0x1d
|
||||
IPPROTO_UDP = 0x11
|
||||
IPPROTO_UDPLITE = 0x88
|
||||
IPV6_AUTH_LEVEL = 0x35
|
||||
IPV6_AUTOFLOWLABEL = 0x3b
|
||||
IPV6_CHECKSUM = 0x1a
|
||||
|
@ -787,6 +900,7 @@ const (
|
|||
IPV6_LEAVE_GROUP = 0xd
|
||||
IPV6_MAXHLIM = 0xff
|
||||
IPV6_MAXPACKET = 0xffff
|
||||
IPV6_MINHOPCOUNT = 0x41
|
||||
IPV6_MMTU = 0x500
|
||||
IPV6_MULTICAST_HOPS = 0xa
|
||||
IPV6_MULTICAST_IF = 0x9
|
||||
|
@ -826,12 +940,12 @@ const (
|
|||
IP_DEFAULT_MULTICAST_LOOP = 0x1
|
||||
IP_DEFAULT_MULTICAST_TTL = 0x1
|
||||
IP_DF = 0x4000
|
||||
IP_DIVERTFL = 0x1022
|
||||
IP_DROP_MEMBERSHIP = 0xd
|
||||
IP_ESP_NETWORK_LEVEL = 0x16
|
||||
IP_ESP_TRANS_LEVEL = 0x15
|
||||
IP_HDRINCL = 0x2
|
||||
IP_IPCOMP_LEVEL = 0x1d
|
||||
IP_IPDEFTTL = 0x25
|
||||
IP_IPSECFLOWINFO = 0x24
|
||||
IP_IPSEC_LOCAL_AUTH = 0x1b
|
||||
IP_IPSEC_LOCAL_CRED = 0x19
|
||||
|
@ -865,10 +979,15 @@ const (
|
|||
IP_RETOPTS = 0x8
|
||||
IP_RF = 0x8000
|
||||
IP_RTABLE = 0x1021
|
||||
IP_SENDSRCADDR = 0x7
|
||||
IP_TOS = 0x3
|
||||
IP_TTL = 0x4
|
||||
ISIG = 0x80
|
||||
ISTRIP = 0x20
|
||||
ITIMER_PROF = 0x2
|
||||
ITIMER_REAL = 0x0
|
||||
ITIMER_VIRTUAL = 0x1
|
||||
IUCLC = 0x1000
|
||||
IXANY = 0x800
|
||||
IXOFF = 0x400
|
||||
IXON = 0x200
|
||||
|
@ -900,10 +1019,11 @@ const (
|
|||
MAP_INHERIT_COPY = 0x1
|
||||
MAP_INHERIT_NONE = 0x2
|
||||
MAP_INHERIT_SHARE = 0x0
|
||||
MAP_NOEXTEND = 0x100
|
||||
MAP_NORESERVE = 0x40
|
||||
MAP_INHERIT_ZERO = 0x3
|
||||
MAP_NOEXTEND = 0x0
|
||||
MAP_NORESERVE = 0x0
|
||||
MAP_PRIVATE = 0x2
|
||||
MAP_RENAME = 0x20
|
||||
MAP_RENAME = 0x0
|
||||
MAP_SHARED = 0x1
|
||||
MAP_STACK = 0x4000
|
||||
MAP_TRYFIXED = 0x0
|
||||
|
@ -922,6 +1042,7 @@ const (
|
|||
MNT_NOATIME = 0x8000
|
||||
MNT_NODEV = 0x10
|
||||
MNT_NOEXEC = 0x4
|
||||
MNT_NOPERM = 0x20
|
||||
MNT_NOSUID = 0x8
|
||||
MNT_NOWAIT = 0x2
|
||||
MNT_QUOTA = 0x2000
|
||||
|
@ -929,13 +1050,29 @@ const (
|
|||
MNT_RELOAD = 0x40000
|
||||
MNT_ROOTFS = 0x4000
|
||||
MNT_SOFTDEP = 0x4000000
|
||||
MNT_STALLED = 0x100000
|
||||
MNT_SWAPPABLE = 0x200000
|
||||
MNT_SYNCHRONOUS = 0x2
|
||||
MNT_UPDATE = 0x10000
|
||||
MNT_VISFLAGMASK = 0x400ffff
|
||||
MNT_WAIT = 0x1
|
||||
MNT_WANTRDWR = 0x2000000
|
||||
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_CMSG_CLOEXEC = 0x800
|
||||
MSG_CTRUNC = 0x20
|
||||
MSG_DONTROUTE = 0x4
|
||||
MSG_DONTWAIT = 0x80
|
||||
|
@ -946,6 +1083,7 @@ const (
|
|||
MSG_PEEK = 0x2
|
||||
MSG_TRUNC = 0x10
|
||||
MSG_WAITALL = 0x40
|
||||
MSG_WAITFORONE = 0x1000
|
||||
MS_ASYNC = 0x1
|
||||
MS_INVALIDATE = 0x4
|
||||
MS_SYNC = 0x2
|
||||
|
@ -953,12 +1091,16 @@ const (
|
|||
NET_RT_DUMP = 0x1
|
||||
NET_RT_FLAGS = 0x2
|
||||
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_TABLE = 0x5
|
||||
NFDBITS = 0x20
|
||||
NOFLSH = 0x80000000
|
||||
NOKERNINFO = 0x2000000
|
||||
NOTE_ATTRIB = 0x8
|
||||
NOTE_CHANGE = 0x1
|
||||
NOTE_CHILD = 0x4
|
||||
NOTE_DELETE = 0x1
|
||||
NOTE_EOF = 0x2
|
||||
|
@ -968,6 +1110,7 @@ const (
|
|||
NOTE_FORK = 0x40000000
|
||||
NOTE_LINK = 0x10
|
||||
NOTE_LOWAT = 0x1
|
||||
NOTE_OOB = 0x4
|
||||
NOTE_PCTRLMASK = 0xf0000000
|
||||
NOTE_PDATAMASK = 0xfffff
|
||||
NOTE_RENAME = 0x20
|
||||
|
@ -977,11 +1120,13 @@ const (
|
|||
NOTE_TRUNCATE = 0x80
|
||||
NOTE_WRITE = 0x2
|
||||
OCRNL = 0x10
|
||||
OLCUC = 0x20
|
||||
ONLCR = 0x2
|
||||
ONLRET = 0x80
|
||||
ONOCR = 0x40
|
||||
ONOEOT = 0x8
|
||||
OPOST = 0x1
|
||||
OXTABS = 0x4
|
||||
O_ACCMODE = 0x3
|
||||
O_APPEND = 0x8
|
||||
O_ASYNC = 0x40
|
||||
|
@ -1015,7 +1160,6 @@ const (
|
|||
PROT_NONE = 0x0
|
||||
PROT_READ = 0x1
|
||||
PROT_WRITE = 0x2
|
||||
PT_MASK = 0x3ff000
|
||||
RLIMIT_CORE = 0x4
|
||||
RLIMIT_CPU = 0x0
|
||||
RLIMIT_DATA = 0x2
|
||||
|
@ -1027,19 +1171,25 @@ const (
|
|||
RLIMIT_STACK = 0x3
|
||||
RLIM_INFINITY = 0x7fffffffffffffff
|
||||
RTAX_AUTHOR = 0x6
|
||||
RTAX_BFD = 0xb
|
||||
RTAX_BRD = 0x7
|
||||
RTAX_DNS = 0xc
|
||||
RTAX_DST = 0x0
|
||||
RTAX_GATEWAY = 0x1
|
||||
RTAX_GENMASK = 0x3
|
||||
RTAX_IFA = 0x5
|
||||
RTAX_IFP = 0x4
|
||||
RTAX_LABEL = 0xa
|
||||
RTAX_MAX = 0xb
|
||||
RTAX_MAX = 0xf
|
||||
RTAX_NETMASK = 0x2
|
||||
RTAX_SEARCH = 0xe
|
||||
RTAX_SRC = 0x8
|
||||
RTAX_SRCMASK = 0x9
|
||||
RTAX_STATIC = 0xd
|
||||
RTA_AUTHOR = 0x40
|
||||
RTA_BFD = 0x800
|
||||
RTA_BRD = 0x80
|
||||
RTA_DNS = 0x1000
|
||||
RTA_DST = 0x1
|
||||
RTA_GATEWAY = 0x2
|
||||
RTA_GENMASK = 0x8
|
||||
|
@ -1047,49 +1197,57 @@ const (
|
|||
RTA_IFP = 0x10
|
||||
RTA_LABEL = 0x400
|
||||
RTA_NETMASK = 0x4
|
||||
RTA_SEARCH = 0x4000
|
||||
RTA_SRC = 0x100
|
||||
RTA_SRCMASK = 0x200
|
||||
RTA_STATIC = 0x2000
|
||||
RTF_ANNOUNCE = 0x4000
|
||||
RTF_BFD = 0x1000000
|
||||
RTF_BLACKHOLE = 0x1000
|
||||
RTF_BROADCAST = 0x400000
|
||||
RTF_CACHED = 0x20000
|
||||
RTF_CLONED = 0x10000
|
||||
RTF_CLONING = 0x100
|
||||
RTF_CONNECTED = 0x800000
|
||||
RTF_DONE = 0x40
|
||||
RTF_DYNAMIC = 0x10
|
||||
RTF_FMASK = 0x10f808
|
||||
RTF_FMASK = 0x110fc08
|
||||
RTF_GATEWAY = 0x2
|
||||
RTF_HOST = 0x4
|
||||
RTF_LLINFO = 0x400
|
||||
RTF_MASK = 0x80
|
||||
RTF_LOCAL = 0x200000
|
||||
RTF_MODIFIED = 0x20
|
||||
RTF_MPATH = 0x40000
|
||||
RTF_MPLS = 0x100000
|
||||
RTF_MULTICAST = 0x200
|
||||
RTF_PERMANENT_ARP = 0x2000
|
||||
RTF_PROTO1 = 0x8000
|
||||
RTF_PROTO2 = 0x4000
|
||||
RTF_PROTO3 = 0x2000
|
||||
RTF_REJECT = 0x8
|
||||
RTF_SOURCE = 0x20000
|
||||
RTF_STATIC = 0x800
|
||||
RTF_TUNNEL = 0x100000
|
||||
RTF_UP = 0x1
|
||||
RTF_USETRAILERS = 0x8000
|
||||
RTF_XRESOLVE = 0x200
|
||||
RTM_80211INFO = 0x15
|
||||
RTM_ADD = 0x1
|
||||
RTM_BFD = 0x12
|
||||
RTM_CHANGE = 0x3
|
||||
RTM_CHGADDRATTR = 0x14
|
||||
RTM_DELADDR = 0xd
|
||||
RTM_DELETE = 0x2
|
||||
RTM_DESYNC = 0x10
|
||||
RTM_GET = 0x4
|
||||
RTM_IFANNOUNCE = 0xf
|
||||
RTM_IFINFO = 0xe
|
||||
RTM_LOCK = 0x8
|
||||
RTM_INVALIDATE = 0x11
|
||||
RTM_LOSING = 0x5
|
||||
RTM_MAXSIZE = 0x800
|
||||
RTM_MISS = 0x7
|
||||
RTM_NEWADDR = 0xc
|
||||
RTM_PROPOSAL = 0x13
|
||||
RTM_REDIRECT = 0x6
|
||||
RTM_RESOLVE = 0xb
|
||||
RTM_RTTUNIT = 0xf4240
|
||||
RTM_SOURCE = 0x16
|
||||
RTM_VERSION = 0x5
|
||||
RTV_EXPIRE = 0x4
|
||||
RTV_HOPCOUNT = 0x2
|
||||
|
@ -1099,67 +1257,74 @@ const (
|
|||
RTV_RTTVAR = 0x80
|
||||
RTV_SPIPE = 0x10
|
||||
RTV_SSTHRESH = 0x20
|
||||
RT_TABLEID_BITS = 0x8
|
||||
RT_TABLEID_MASK = 0xff
|
||||
RT_TABLEID_MAX = 0xff
|
||||
RUSAGE_CHILDREN = -0x1
|
||||
RUSAGE_SELF = 0x0
|
||||
RUSAGE_THREAD = 0x1
|
||||
SCM_RIGHTS = 0x1
|
||||
SCM_TIMESTAMP = 0x4
|
||||
SEEK_CUR = 0x1
|
||||
SEEK_END = 0x2
|
||||
SEEK_SET = 0x0
|
||||
SHUT_RD = 0x0
|
||||
SHUT_RDWR = 0x2
|
||||
SHUT_WR = 0x1
|
||||
SIOCADDMULTI = 0x80206931
|
||||
SIOCAIFADDR = 0x8040691a
|
||||
SIOCAIFGROUP = 0x80246987
|
||||
SIOCALIFADDR = 0x8218691c
|
||||
SIOCATMARK = 0x40047307
|
||||
SIOCBRDGADD = 0x8054693c
|
||||
SIOCBRDGADDS = 0x80546941
|
||||
SIOCBRDGARL = 0x806e694d
|
||||
SIOCBRDGADD = 0x805c693c
|
||||
SIOCBRDGADDL = 0x805c6949
|
||||
SIOCBRDGADDS = 0x805c6941
|
||||
SIOCBRDGARL = 0x808c694d
|
||||
SIOCBRDGDADDR = 0x81286947
|
||||
SIOCBRDGDEL = 0x8054693d
|
||||
SIOCBRDGDELS = 0x80546942
|
||||
SIOCBRDGFLUSH = 0x80546948
|
||||
SIOCBRDGFRL = 0x806e694e
|
||||
SIOCBRDGDEL = 0x805c693d
|
||||
SIOCBRDGDELS = 0x805c6942
|
||||
SIOCBRDGFLUSH = 0x805c6948
|
||||
SIOCBRDGFRL = 0x808c694e
|
||||
SIOCBRDGGCACHE = 0xc0146941
|
||||
SIOCBRDGGFD = 0xc0146952
|
||||
SIOCBRDGGHT = 0xc0146951
|
||||
SIOCBRDGGIFFLGS = 0xc054693e
|
||||
SIOCBRDGGIFFLGS = 0xc05c693e
|
||||
SIOCBRDGGMA = 0xc0146953
|
||||
SIOCBRDGGPARAM = 0xc03c6958
|
||||
SIOCBRDGGPRI = 0xc0146950
|
||||
SIOCBRDGGRL = 0xc028694f
|
||||
SIOCBRDGGSIFS = 0xc054693c
|
||||
SIOCBRDGGTO = 0xc0146946
|
||||
SIOCBRDGIFS = 0xc0546942
|
||||
SIOCBRDGIFS = 0xc05c6942
|
||||
SIOCBRDGRTS = 0xc0186943
|
||||
SIOCBRDGSADDR = 0xc1286944
|
||||
SIOCBRDGSCACHE = 0x80146940
|
||||
SIOCBRDGSFD = 0x80146952
|
||||
SIOCBRDGSHT = 0x80146951
|
||||
SIOCBRDGSIFCOST = 0x80546955
|
||||
SIOCBRDGSIFFLGS = 0x8054693f
|
||||
SIOCBRDGSIFPRIO = 0x80546954
|
||||
SIOCBRDGSIFCOST = 0x805c6955
|
||||
SIOCBRDGSIFFLGS = 0x805c693f
|
||||
SIOCBRDGSIFPRIO = 0x805c6954
|
||||
SIOCBRDGSIFPROT = 0x805c694a
|
||||
SIOCBRDGSMA = 0x80146953
|
||||
SIOCBRDGSPRI = 0x80146950
|
||||
SIOCBRDGSPROTO = 0x8014695a
|
||||
SIOCBRDGSTO = 0x80146945
|
||||
SIOCBRDGSTXHC = 0x80146959
|
||||
SIOCDELLABEL = 0x80206997
|
||||
SIOCDELMULTI = 0x80206932
|
||||
SIOCDIFADDR = 0x80206919
|
||||
SIOCDIFGROUP = 0x80246989
|
||||
SIOCDIFPARENT = 0x802069b4
|
||||
SIOCDIFPHYADDR = 0x80206949
|
||||
SIOCDLIFADDR = 0x8218691e
|
||||
SIOCDPWE3NEIGHBOR = 0x802069de
|
||||
SIOCDVNETID = 0x802069af
|
||||
SIOCGETKALIVE = 0xc01869a4
|
||||
SIOCGETLABEL = 0x8020699a
|
||||
SIOCGETMPWCFG = 0xc02069ae
|
||||
SIOCGETPFLOW = 0xc02069fe
|
||||
SIOCGETPFSYNC = 0xc02069f8
|
||||
SIOCGETSGCNT = 0xc0147534
|
||||
SIOCGETVIFCNT = 0xc0147533
|
||||
SIOCGETVLAN = 0xc0206990
|
||||
SIOCGHIWAT = 0x40047301
|
||||
SIOCGIFADDR = 0xc0206921
|
||||
SIOCGIFASYNCMAP = 0xc020697c
|
||||
SIOCGIFBRDADDR = 0xc0206923
|
||||
SIOCGIFCONF = 0xc0086924
|
||||
SIOCGIFDATA = 0xc020691b
|
||||
|
@ -1168,40 +1333,53 @@ const (
|
|||
SIOCGIFFLAGS = 0xc0206911
|
||||
SIOCGIFGATTR = 0xc024698b
|
||||
SIOCGIFGENERIC = 0xc020693a
|
||||
SIOCGIFGLIST = 0xc024698d
|
||||
SIOCGIFGMEMB = 0xc024698a
|
||||
SIOCGIFGROUP = 0xc0246988
|
||||
SIOCGIFHARDMTU = 0xc02069a5
|
||||
SIOCGIFMEDIA = 0xc0286936
|
||||
SIOCGIFLLPRIO = 0xc02069b6
|
||||
SIOCGIFMEDIA = 0xc0386938
|
||||
SIOCGIFMETRIC = 0xc0206917
|
||||
SIOCGIFMTU = 0xc020697e
|
||||
SIOCGIFNETMASK = 0xc0206925
|
||||
SIOCGIFPDSTADDR = 0xc0206948
|
||||
SIOCGIFPAIR = 0xc02069b1
|
||||
SIOCGIFPARENT = 0xc02069b3
|
||||
SIOCGIFPRIORITY = 0xc020699c
|
||||
SIOCGIFPSRCADDR = 0xc0206947
|
||||
SIOCGIFRDOMAIN = 0xc02069a0
|
||||
SIOCGIFRTLABEL = 0xc0206983
|
||||
SIOCGIFTIMESLOT = 0xc0206986
|
||||
SIOCGIFRXR = 0x802069aa
|
||||
SIOCGIFSFFPAGE = 0xc1126939
|
||||
SIOCGIFXFLAGS = 0xc020699e
|
||||
SIOCGLIFADDR = 0xc218691d
|
||||
SIOCGLIFPHYADDR = 0xc218694b
|
||||
SIOCGLIFPHYDF = 0xc02069c2
|
||||
SIOCGLIFPHYECN = 0xc02069c8
|
||||
SIOCGLIFPHYRTABLE = 0xc02069a2
|
||||
SIOCGLIFPHYTTL = 0xc02069a9
|
||||
SIOCGLOWAT = 0x40047303
|
||||
SIOCGPGRP = 0x40047309
|
||||
SIOCGPWE3 = 0xc0206998
|
||||
SIOCGPWE3CTRLWORD = 0xc02069dc
|
||||
SIOCGPWE3FAT = 0xc02069dd
|
||||
SIOCGPWE3NEIGHBOR = 0xc21869de
|
||||
SIOCGRXHPRIO = 0xc02069db
|
||||
SIOCGSPPPPARAMS = 0xc0206994
|
||||
SIOCGTXHPRIO = 0xc02069c6
|
||||
SIOCGUMBINFO = 0xc02069be
|
||||
SIOCGUMBPARAM = 0xc02069c0
|
||||
SIOCGVH = 0xc02069f6
|
||||
SIOCGVNETFLOWID = 0xc02069c4
|
||||
SIOCGVNETID = 0xc02069a7
|
||||
SIOCIFAFATTACH = 0x801169ab
|
||||
SIOCIFAFDETACH = 0x801169ac
|
||||
SIOCIFCREATE = 0x8020697a
|
||||
SIOCIFDESTROY = 0x80206979
|
||||
SIOCIFGCLONERS = 0xc00c6978
|
||||
SIOCSETKALIVE = 0x801869a3
|
||||
SIOCSETLABEL = 0x80206999
|
||||
SIOCSETMPWCFG = 0x802069ad
|
||||
SIOCSETPFLOW = 0x802069fd
|
||||
SIOCSETPFSYNC = 0x802069f7
|
||||
SIOCSETVLAN = 0x8020698f
|
||||
SIOCSHIWAT = 0x80047300
|
||||
SIOCSIFADDR = 0x8020690c
|
||||
SIOCSIFASYNCMAP = 0x8020697d
|
||||
SIOCSIFBRDADDR = 0x80206913
|
||||
SIOCSIFDESCR = 0x80206980
|
||||
SIOCSIFDSTADDR = 0x8020690e
|
||||
|
@ -1209,25 +1387,37 @@ const (
|
|||
SIOCSIFGATTR = 0x8024698c
|
||||
SIOCSIFGENERIC = 0x80206939
|
||||
SIOCSIFLLADDR = 0x8020691f
|
||||
SIOCSIFMEDIA = 0xc0206935
|
||||
SIOCSIFLLPRIO = 0x802069b5
|
||||
SIOCSIFMEDIA = 0xc0206937
|
||||
SIOCSIFMETRIC = 0x80206918
|
||||
SIOCSIFMTU = 0x8020697f
|
||||
SIOCSIFNETMASK = 0x80206916
|
||||
SIOCSIFPHYADDR = 0x80406946
|
||||
SIOCSIFPAIR = 0x802069b0
|
||||
SIOCSIFPARENT = 0x802069b2
|
||||
SIOCSIFPRIORITY = 0x8020699b
|
||||
SIOCSIFRDOMAIN = 0x8020699f
|
||||
SIOCSIFRTLABEL = 0x80206982
|
||||
SIOCSIFTIMESLOT = 0x80206985
|
||||
SIOCSIFXFLAGS = 0x8020699d
|
||||
SIOCSLIFPHYADDR = 0x8218694a
|
||||
SIOCSLIFPHYDF = 0x802069c1
|
||||
SIOCSLIFPHYECN = 0x802069c7
|
||||
SIOCSLIFPHYRTABLE = 0x802069a1
|
||||
SIOCSLIFPHYTTL = 0x802069a8
|
||||
SIOCSLOWAT = 0x80047302
|
||||
SIOCSPGRP = 0x80047308
|
||||
SIOCSPWE3CTRLWORD = 0x802069dc
|
||||
SIOCSPWE3FAT = 0x802069dd
|
||||
SIOCSPWE3NEIGHBOR = 0x821869de
|
||||
SIOCSRXHPRIO = 0x802069db
|
||||
SIOCSSPPPPARAMS = 0x80206993
|
||||
SIOCSTXHPRIO = 0x802069c5
|
||||
SIOCSUMBPARAM = 0x802069bf
|
||||
SIOCSVH = 0xc02069f5
|
||||
SIOCSVNETFLOWID = 0x802069c3
|
||||
SIOCSVNETID = 0x802069a6
|
||||
SOCK_CLOEXEC = 0x8000
|
||||
SOCK_DGRAM = 0x2
|
||||
SOCK_DNS = 0x1000
|
||||
SOCK_NONBLOCK = 0x4000
|
||||
SOCK_RAW = 0x3
|
||||
SOCK_RDM = 0x4
|
||||
SOCK_SEQPACKET = 0x5
|
||||
|
@ -1238,6 +1428,7 @@ const (
|
|||
SO_BINDANY = 0x1000
|
||||
SO_BROADCAST = 0x20
|
||||
SO_DEBUG = 0x1
|
||||
SO_DOMAIN = 0x1024
|
||||
SO_DONTROUTE = 0x10
|
||||
SO_ERROR = 0x1007
|
||||
SO_KEEPALIVE = 0x8
|
||||
|
@ -1245,6 +1436,7 @@ const (
|
|||
SO_NETPROC = 0x1020
|
||||
SO_OOBINLINE = 0x100
|
||||
SO_PEERCRED = 0x1022
|
||||
SO_PROTOCOL = 0x1025
|
||||
SO_RCVBUF = 0x1002
|
||||
SO_RCVLOWAT = 0x1004
|
||||
SO_RCVTIMEO = 0x1006
|
||||
|
@ -1258,6 +1450,7 @@ const (
|
|||
SO_TIMESTAMP = 0x800
|
||||
SO_TYPE = 0x1008
|
||||
SO_USELOOPBACK = 0x40
|
||||
SO_ZEROIZE = 0x2000
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
S_IFBLK = 0x6000
|
||||
|
@ -1287,9 +1480,24 @@ const (
|
|||
S_IXOTH = 0x1
|
||||
S_IXUSR = 0x40
|
||||
TCIFLUSH = 0x1
|
||||
TCIOFF = 0x3
|
||||
TCIOFLUSH = 0x3
|
||||
TCION = 0x4
|
||||
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_MAXWIN = 0xffff
|
||||
TCP_MAX_SACK = 0x3
|
||||
|
@ -1298,11 +1506,15 @@ const (
|
|||
TCP_MSS = 0x200
|
||||
TCP_NODELAY = 0x1
|
||||
TCP_NOPUSH = 0x10
|
||||
TCP_NSTATES = 0xb
|
||||
TCP_SACKHOLE_LIMIT = 0x80
|
||||
TCP_SACK_ENABLE = 0x8
|
||||
TCSAFLUSH = 0x2
|
||||
TIMER_ABSTIME = 0x1
|
||||
TIMER_RELTIME = 0x0
|
||||
TIOCCBRK = 0x2000747a
|
||||
TIOCCDTR = 0x20007478
|
||||
TIOCCHKVERAUTH = 0x2000741e
|
||||
TIOCCLRVERAUTH = 0x2000741d
|
||||
TIOCCONS = 0x80047462
|
||||
TIOCDRAIN = 0x2000745e
|
||||
TIOCEXCL = 0x2000740d
|
||||
|
@ -1357,17 +1569,21 @@ const (
|
|||
TIOCSETAF = 0x802c7416
|
||||
TIOCSETAW = 0x802c7415
|
||||
TIOCSETD = 0x8004741b
|
||||
TIOCSETVERAUTH = 0x8004741c
|
||||
TIOCSFLAGS = 0x8004745c
|
||||
TIOCSIG = 0x8004745f
|
||||
TIOCSPGRP = 0x80047476
|
||||
TIOCSTART = 0x2000746e
|
||||
TIOCSTAT = 0x80047465
|
||||
TIOCSTI = 0x80017472
|
||||
TIOCSTAT = 0x20007465
|
||||
TIOCSTOP = 0x2000746f
|
||||
TIOCSTSTAMP = 0x8008745a
|
||||
TIOCSWINSZ = 0x80087467
|
||||
TIOCUCNTL = 0x80047466
|
||||
TIOCUCNTL_CBRK = 0x7a
|
||||
TIOCUCNTL_SBRK = 0x7b
|
||||
TOSTOP = 0x400000
|
||||
UTIME_NOW = -0x2
|
||||
UTIME_OMIT = -0x1
|
||||
VDISCARD = 0xf
|
||||
VDSUSP = 0xb
|
||||
VEOF = 0x0
|
||||
|
@ -1378,6 +1594,19 @@ const (
|
|||
VKILL = 0x5
|
||||
VLNEXT = 0xe
|
||||
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
|
||||
VREPRINT = 0x6
|
||||
VSTART = 0xc
|
||||
|
@ -1390,8 +1619,8 @@ const (
|
|||
WCONTINUED = 0x8
|
||||
WCOREFLAG = 0x80
|
||||
WNOHANG = 0x1
|
||||
WSTOPPED = 0x7f
|
||||
WUNTRACED = 0x2
|
||||
XCASE = 0x1000000
|
||||
)
|
||||
|
||||
// Errors
|
||||
|
@ -1405,6 +1634,7 @@ const (
|
|||
EALREADY = syscall.Errno(0x25)
|
||||
EAUTH = syscall.Errno(0x50)
|
||||
EBADF = syscall.Errno(0x9)
|
||||
EBADMSG = syscall.Errno(0x5c)
|
||||
EBADRPC = syscall.Errno(0x48)
|
||||
EBUSY = syscall.Errno(0x10)
|
||||
ECANCELED = syscall.Errno(0x58)
|
||||
|
@ -1431,7 +1661,7 @@ const (
|
|||
EIPSEC = syscall.Errno(0x52)
|
||||
EISCONN = syscall.Errno(0x38)
|
||||
EISDIR = syscall.Errno(0x15)
|
||||
ELAST = syscall.Errno(0x5b)
|
||||
ELAST = syscall.Errno(0x5f)
|
||||
ELOOP = syscall.Errno(0x3e)
|
||||
EMEDIUMTYPE = syscall.Errno(0x56)
|
||||
EMFILE = syscall.Errno(0x18)
|
||||
|
@ -1459,12 +1689,14 @@ const (
|
|||
ENOTCONN = syscall.Errno(0x39)
|
||||
ENOTDIR = syscall.Errno(0x14)
|
||||
ENOTEMPTY = syscall.Errno(0x42)
|
||||
ENOTRECOVERABLE = syscall.Errno(0x5d)
|
||||
ENOTSOCK = syscall.Errno(0x26)
|
||||
ENOTSUP = syscall.Errno(0x5b)
|
||||
ENOTTY = syscall.Errno(0x19)
|
||||
ENXIO = syscall.Errno(0x6)
|
||||
EOPNOTSUPP = syscall.Errno(0x2d)
|
||||
EOVERFLOW = syscall.Errno(0x57)
|
||||
EOWNERDEAD = syscall.Errno(0x5e)
|
||||
EPERM = syscall.Errno(0x1)
|
||||
EPFNOSUPPORT = syscall.Errno(0x2e)
|
||||
EPIPE = syscall.Errno(0x20)
|
||||
|
@ -1472,6 +1704,7 @@ const (
|
|||
EPROCUNAVAIL = syscall.Errno(0x4c)
|
||||
EPROGMISMATCH = syscall.Errno(0x4b)
|
||||
EPROGUNAVAIL = syscall.Errno(0x4a)
|
||||
EPROTO = syscall.Errno(0x5f)
|
||||
EPROTONOSUPPORT = syscall.Errno(0x2b)
|
||||
EPROTOTYPE = syscall.Errno(0x29)
|
||||
ERANGE = syscall.Errno(0x22)
|
||||
|
@ -1568,7 +1801,7 @@ var errorList = [...]struct {
|
|||
{32, "EPIPE", "broken pipe"},
|
||||
{33, "EDOM", "numerical argument out of domain"},
|
||||
{34, "ERANGE", "result too large"},
|
||||
{35, "EWOULDBLOCK", "resource temporarily unavailable"},
|
||||
{35, "EAGAIN", "resource temporarily unavailable"},
|
||||
{36, "EINPROGRESS", "operation now in progress"},
|
||||
{37, "EALREADY", "operation already in progress"},
|
||||
{38, "ENOTSOCK", "socket operation on non-socket"},
|
||||
|
@ -1624,7 +1857,11 @@ var errorList = [...]struct {
|
|||
{88, "ECANCELED", "operation canceled"},
|
||||
{89, "EIDRM", "identifier removed"},
|
||||
{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
|
||||
|
@ -1638,7 +1875,7 @@ var signalList = [...]struct {
|
|||
{3, "SIGQUIT", "quit"},
|
||||
{4, "SIGILL", "illegal instruction"},
|
||||
{5, "SIGTRAP", "trace/BPT trap"},
|
||||
{6, "SIGABRT", "abort trap"},
|
||||
{6, "SIGIOT", "abort trap"},
|
||||
{7, "SIGEMT", "EMT trap"},
|
||||
{8, "SIGFPE", "floating point exception"},
|
||||
{9, "SIGKILL", "killed"},
|
||||
|
@ -1665,4 +1902,5 @@ var signalList = [...]struct {
|
|||
{30, "SIGUSR1", "user defined signal 1"},
|
||||
{31, "SIGUSR2", "user defined signal 2"},
|
||||
{32, "SIGTHR", "thread AST"},
|
||||
{28672, "SIGSTKSZ", "unknown signal"},
|
||||
}
|
||||
|
|
|
@ -109,6 +109,15 @@ const (
|
|||
BPF_DIRECTION_IN = 0x1
|
||||
BPF_DIRECTION_OUT = 0x2
|
||||
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_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -137,6 +146,7 @@ const (
|
|||
BPF_OR = 0x40
|
||||
BPF_RELEASE = 0x30bb6
|
||||
BPF_RET = 0x6
|
||||
BPF_RND = 0xc0
|
||||
BPF_RSH = 0x70
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
|
@ -177,7 +187,65 @@ const (
|
|||
CTL_KERN = 0x1
|
||||
CTL_MAXNAME = 0xc
|
||||
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
|
||||
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_ATM_RFC1483 = 0xb
|
||||
DLT_AX25 = 0x3
|
||||
|
@ -240,6 +308,8 @@ const (
|
|||
EMUL_ENABLED = 0x1
|
||||
EMUL_NATIVE = 0x2
|
||||
ENDRUNDISC = 0x9
|
||||
ETH64_8021_RSVD_MASK = 0xfffffffffff0
|
||||
ETH64_8021_RSVD_PREFIX = 0x180c2000000
|
||||
ETHERMIN = 0x2e
|
||||
ETHERMTU = 0x5dc
|
||||
ETHERTYPE_8023 = 0x4
|
||||
|
@ -292,6 +362,7 @@ const (
|
|||
ETHERTYPE_DN = 0x6003
|
||||
ETHERTYPE_DOGFIGHT = 0x1989
|
||||
ETHERTYPE_DSMD = 0x8039
|
||||
ETHERTYPE_EAPOL = 0x888e
|
||||
ETHERTYPE_ECMA = 0x803
|
||||
ETHERTYPE_ENCRYPT = 0x803d
|
||||
ETHERTYPE_ES = 0x805d
|
||||
|
@ -323,6 +394,7 @@ const (
|
|||
ETHERTYPE_LLDP = 0x88cc
|
||||
ETHERTYPE_LOGICRAFT = 0x8148
|
||||
ETHERTYPE_LOOPBACK = 0x9000
|
||||
ETHERTYPE_MACSEC = 0x88e5
|
||||
ETHERTYPE_MATRA = 0x807a
|
||||
ETHERTYPE_MAX = 0xffff
|
||||
ETHERTYPE_MERIT = 0x807c
|
||||
|
@ -351,15 +423,17 @@ const (
|
|||
ETHERTYPE_NCD = 0x8149
|
||||
ETHERTYPE_NESTAR = 0x8006
|
||||
ETHERTYPE_NETBEUI = 0x8191
|
||||
ETHERTYPE_NHRP = 0x2001
|
||||
ETHERTYPE_NOVELL = 0x8138
|
||||
ETHERTYPE_NS = 0x600
|
||||
ETHERTYPE_NSAT = 0x601
|
||||
ETHERTYPE_NSCOMPAT = 0x807
|
||||
ETHERTYPE_NSH = 0x984f
|
||||
ETHERTYPE_NTRAILER = 0x10
|
||||
ETHERTYPE_OS9 = 0x7007
|
||||
ETHERTYPE_OS9NET = 0x7009
|
||||
ETHERTYPE_PACER = 0x80c6
|
||||
ETHERTYPE_PAE = 0x888e
|
||||
ETHERTYPE_PBB = 0x88e7
|
||||
ETHERTYPE_PCS = 0x4242
|
||||
ETHERTYPE_PLANNING = 0x8044
|
||||
ETHERTYPE_PPP = 0x880b
|
||||
|
@ -441,10 +515,11 @@ const (
|
|||
ETHER_VLAN_ENCAP_LEN = 0x4
|
||||
EVFILT_AIO = -0x3
|
||||
EVFILT_DEVICE = -0x8
|
||||
EVFILT_EXCEPT = -0x9
|
||||
EVFILT_PROC = -0x5
|
||||
EVFILT_READ = -0x1
|
||||
EVFILT_SIGNAL = -0x6
|
||||
EVFILT_SYSCOUNT = 0x8
|
||||
EVFILT_SYSCOUNT = 0x9
|
||||
EVFILT_TIMER = -0x7
|
||||
EVFILT_VNODE = -0x4
|
||||
EVFILT_WRITE = -0x2
|
||||
|
@ -466,7 +541,7 @@ const (
|
|||
EV_FLAG1 = 0x2000
|
||||
EV_ONESHOT = 0x10
|
||||
EV_RECEIPT = 0x40
|
||||
EV_SYSFLAGS = 0xf000
|
||||
EV_SYSFLAGS = 0xf800
|
||||
EXTA = 0x4b00
|
||||
EXTB = 0x9600
|
||||
EXTPROC = 0x800
|
||||
|
@ -732,6 +807,7 @@ const (
|
|||
IFT_VOICEOVERCABLE = 0xc6
|
||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
||||
IFT_VOICEOVERIP = 0x68
|
||||
IFT_WIREGUARD = 0xfb
|
||||
IFT_X213 = 0x5d
|
||||
IFT_X25 = 0x5
|
||||
IFT_X25DDN = 0x4
|
||||
|
@ -797,9 +873,11 @@ const (
|
|||
IPPROTO_RAW = 0xff
|
||||
IPPROTO_ROUTING = 0x2b
|
||||
IPPROTO_RSVP = 0x2e
|
||||
IPPROTO_SCTP = 0x84
|
||||
IPPROTO_TCP = 0x6
|
||||
IPPROTO_TP = 0x1d
|
||||
IPPROTO_UDP = 0x11
|
||||
IPPROTO_UDPLITE = 0x88
|
||||
IPV6_AUTH_LEVEL = 0x35
|
||||
IPV6_AUTOFLOWLABEL = 0x3b
|
||||
IPV6_CHECKSUM = 0x1a
|
||||
|
@ -906,6 +984,9 @@ const (
|
|||
IP_TTL = 0x4
|
||||
ISIG = 0x80
|
||||
ISTRIP = 0x20
|
||||
ITIMER_PROF = 0x2
|
||||
ITIMER_REAL = 0x0
|
||||
ITIMER_VIRTUAL = 0x1
|
||||
IUCLC = 0x1000
|
||||
IXANY = 0x800
|
||||
IXOFF = 0x400
|
||||
|
@ -970,12 +1051,26 @@ const (
|
|||
MNT_ROOTFS = 0x4000
|
||||
MNT_SOFTDEP = 0x4000000
|
||||
MNT_STALLED = 0x100000
|
||||
MNT_SWAPPABLE = 0x200000
|
||||
MNT_SYNCHRONOUS = 0x2
|
||||
MNT_UPDATE = 0x10000
|
||||
MNT_VISFLAGMASK = 0x400ffff
|
||||
MNT_WAIT = 0x1
|
||||
MNT_WANTRDWR = 0x2000000
|
||||
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_CMSG_CLOEXEC = 0x800
|
||||
MSG_CTRUNC = 0x20
|
||||
|
@ -988,6 +1083,7 @@ const (
|
|||
MSG_PEEK = 0x2
|
||||
MSG_TRUNC = 0x10
|
||||
MSG_WAITALL = 0x40
|
||||
MSG_WAITFORONE = 0x1000
|
||||
MS_ASYNC = 0x1
|
||||
MS_INVALIDATE = 0x4
|
||||
MS_SYNC = 0x2
|
||||
|
@ -996,7 +1092,8 @@ const (
|
|||
NET_RT_FLAGS = 0x2
|
||||
NET_RT_IFLIST = 0x3
|
||||
NET_RT_IFNAMES = 0x6
|
||||
NET_RT_MAXID = 0x7
|
||||
NET_RT_MAXID = 0x8
|
||||
NET_RT_SOURCE = 0x7
|
||||
NET_RT_STATS = 0x4
|
||||
NET_RT_TABLE = 0x5
|
||||
NFDBITS = 0x20
|
||||
|
@ -1013,6 +1110,7 @@ const (
|
|||
NOTE_FORK = 0x40000000
|
||||
NOTE_LINK = 0x10
|
||||
NOTE_LOWAT = 0x1
|
||||
NOTE_OOB = 0x4
|
||||
NOTE_PCTRLMASK = 0xf0000000
|
||||
NOTE_PDATAMASK = 0xfffff
|
||||
NOTE_RENAME = 0x20
|
||||
|
@ -1130,9 +1228,11 @@ const (
|
|||
RTF_STATIC = 0x800
|
||||
RTF_UP = 0x1
|
||||
RTF_USETRAILERS = 0x8000
|
||||
RTM_80211INFO = 0x15
|
||||
RTM_ADD = 0x1
|
||||
RTM_BFD = 0x12
|
||||
RTM_CHANGE = 0x3
|
||||
RTM_CHGADDRATTR = 0x14
|
||||
RTM_DELADDR = 0xd
|
||||
RTM_DELETE = 0x2
|
||||
RTM_DESYNC = 0x10
|
||||
|
@ -1140,7 +1240,6 @@ const (
|
|||
RTM_IFANNOUNCE = 0xf
|
||||
RTM_IFINFO = 0xe
|
||||
RTM_INVALIDATE = 0x11
|
||||
RTM_LOCK = 0x8
|
||||
RTM_LOSING = 0x5
|
||||
RTM_MAXSIZE = 0x800
|
||||
RTM_MISS = 0x7
|
||||
|
@ -1148,7 +1247,7 @@ const (
|
|||
RTM_PROPOSAL = 0x13
|
||||
RTM_REDIRECT = 0x6
|
||||
RTM_RESOLVE = 0xb
|
||||
RTM_RTTUNIT = 0xf4240
|
||||
RTM_SOURCE = 0x16
|
||||
RTM_VERSION = 0x5
|
||||
RTV_EXPIRE = 0x4
|
||||
RTV_HOPCOUNT = 0x2
|
||||
|
@ -1166,6 +1265,9 @@ const (
|
|||
RUSAGE_THREAD = 0x1
|
||||
SCM_RIGHTS = 0x1
|
||||
SCM_TIMESTAMP = 0x4
|
||||
SEEK_CUR = 0x1
|
||||
SEEK_END = 0x2
|
||||
SEEK_SET = 0x0
|
||||
SHUT_RD = 0x0
|
||||
SHUT_RDWR = 0x2
|
||||
SHUT_WR = 0x1
|
||||
|
@ -1182,35 +1284,37 @@ const (
|
|||
SIOCBRDGDELS = 0x80606942
|
||||
SIOCBRDGFLUSH = 0x80606948
|
||||
SIOCBRDGFRL = 0x808c694e
|
||||
SIOCBRDGGCACHE = 0xc0186941
|
||||
SIOCBRDGGFD = 0xc0186952
|
||||
SIOCBRDGGHT = 0xc0186951
|
||||
SIOCBRDGGCACHE = 0xc0146941
|
||||
SIOCBRDGGFD = 0xc0146952
|
||||
SIOCBRDGGHT = 0xc0146951
|
||||
SIOCBRDGGIFFLGS = 0xc060693e
|
||||
SIOCBRDGGMA = 0xc0186953
|
||||
SIOCBRDGGMA = 0xc0146953
|
||||
SIOCBRDGGPARAM = 0xc0406958
|
||||
SIOCBRDGGPRI = 0xc0186950
|
||||
SIOCBRDGGPRI = 0xc0146950
|
||||
SIOCBRDGGRL = 0xc030694f
|
||||
SIOCBRDGGTO = 0xc0186946
|
||||
SIOCBRDGGTO = 0xc0146946
|
||||
SIOCBRDGIFS = 0xc0606942
|
||||
SIOCBRDGRTS = 0xc0206943
|
||||
SIOCBRDGSADDR = 0xc1286944
|
||||
SIOCBRDGSCACHE = 0x80186940
|
||||
SIOCBRDGSFD = 0x80186952
|
||||
SIOCBRDGSHT = 0x80186951
|
||||
SIOCBRDGSCACHE = 0x80146940
|
||||
SIOCBRDGSFD = 0x80146952
|
||||
SIOCBRDGSHT = 0x80146951
|
||||
SIOCBRDGSIFCOST = 0x80606955
|
||||
SIOCBRDGSIFFLGS = 0x8060693f
|
||||
SIOCBRDGSIFPRIO = 0x80606954
|
||||
SIOCBRDGSIFPROT = 0x8060694a
|
||||
SIOCBRDGSMA = 0x80186953
|
||||
SIOCBRDGSPRI = 0x80186950
|
||||
SIOCBRDGSPROTO = 0x8018695a
|
||||
SIOCBRDGSTO = 0x80186945
|
||||
SIOCBRDGSTXHC = 0x80186959
|
||||
SIOCBRDGSMA = 0x80146953
|
||||
SIOCBRDGSPRI = 0x80146950
|
||||
SIOCBRDGSPROTO = 0x8014695a
|
||||
SIOCBRDGSTO = 0x80146945
|
||||
SIOCBRDGSTXHC = 0x80146959
|
||||
SIOCDELLABEL = 0x80206997
|
||||
SIOCDELMULTI = 0x80206932
|
||||
SIOCDIFADDR = 0x80206919
|
||||
SIOCDIFGROUP = 0x80286989
|
||||
SIOCDIFPARENT = 0x802069b4
|
||||
SIOCDIFPHYADDR = 0x80206949
|
||||
SIOCDPWE3NEIGHBOR = 0x802069de
|
||||
SIOCDVNETID = 0x802069af
|
||||
SIOCGETKALIVE = 0xc01869a4
|
||||
SIOCGETLABEL = 0x8020699a
|
||||
|
@ -1229,6 +1333,7 @@ const (
|
|||
SIOCGIFFLAGS = 0xc0206911
|
||||
SIOCGIFGATTR = 0xc028698b
|
||||
SIOCGIFGENERIC = 0xc020693a
|
||||
SIOCGIFGLIST = 0xc028698d
|
||||
SIOCGIFGMEMB = 0xc028698a
|
||||
SIOCGIFGROUP = 0xc0286988
|
||||
SIOCGIFHARDMTU = 0xc02069a5
|
||||
|
@ -1243,13 +1348,21 @@ const (
|
|||
SIOCGIFRDOMAIN = 0xc02069a0
|
||||
SIOCGIFRTLABEL = 0xc0206983
|
||||
SIOCGIFRXR = 0x802069aa
|
||||
SIOCGIFSFFPAGE = 0xc1126939
|
||||
SIOCGIFXFLAGS = 0xc020699e
|
||||
SIOCGLIFPHYADDR = 0xc218694b
|
||||
SIOCGLIFPHYDF = 0xc02069c2
|
||||
SIOCGLIFPHYECN = 0xc02069c8
|
||||
SIOCGLIFPHYRTABLE = 0xc02069a2
|
||||
SIOCGLIFPHYTTL = 0xc02069a9
|
||||
SIOCGPGRP = 0x40047309
|
||||
SIOCGPWE3 = 0xc0206998
|
||||
SIOCGPWE3CTRLWORD = 0xc02069dc
|
||||
SIOCGPWE3FAT = 0xc02069dd
|
||||
SIOCGPWE3NEIGHBOR = 0xc21869de
|
||||
SIOCGRXHPRIO = 0xc02069db
|
||||
SIOCGSPPPPARAMS = 0xc0206994
|
||||
SIOCGTXHPRIO = 0xc02069c6
|
||||
SIOCGUMBINFO = 0xc02069be
|
||||
SIOCGUMBPARAM = 0xc02069c0
|
||||
SIOCGVH = 0xc02069f6
|
||||
|
@ -1287,19 +1400,20 @@ const (
|
|||
SIOCSIFXFLAGS = 0x8020699d
|
||||
SIOCSLIFPHYADDR = 0x8218694a
|
||||
SIOCSLIFPHYDF = 0x802069c1
|
||||
SIOCSLIFPHYECN = 0x802069c7
|
||||
SIOCSLIFPHYRTABLE = 0x802069a1
|
||||
SIOCSLIFPHYTTL = 0x802069a8
|
||||
SIOCSPGRP = 0x80047308
|
||||
SIOCSPWE3CTRLWORD = 0x802069dc
|
||||
SIOCSPWE3FAT = 0x802069dd
|
||||
SIOCSPWE3NEIGHBOR = 0x821869de
|
||||
SIOCSRXHPRIO = 0x802069db
|
||||
SIOCSSPPPPARAMS = 0x80206993
|
||||
SIOCSTXHPRIO = 0x802069c5
|
||||
SIOCSUMBPARAM = 0x802069bf
|
||||
SIOCSVH = 0xc02069f5
|
||||
SIOCSVNETFLOWID = 0x802069c3
|
||||
SIOCSVNETID = 0x802069a6
|
||||
SIOCSWGDPID = 0xc018695b
|
||||
SIOCSWGMAXFLOW = 0xc0186960
|
||||
SIOCSWGMAXGROUP = 0xc018695d
|
||||
SIOCSWSDPID = 0x8018695c
|
||||
SIOCSWSPORTNO = 0xc060695f
|
||||
SOCK_CLOEXEC = 0x8000
|
||||
SOCK_DGRAM = 0x2
|
||||
SOCK_DNS = 0x1000
|
||||
|
@ -1314,6 +1428,7 @@ const (
|
|||
SO_BINDANY = 0x1000
|
||||
SO_BROADCAST = 0x20
|
||||
SO_DEBUG = 0x1
|
||||
SO_DOMAIN = 0x1024
|
||||
SO_DONTROUTE = 0x10
|
||||
SO_ERROR = 0x1007
|
||||
SO_KEEPALIVE = 0x8
|
||||
|
@ -1321,6 +1436,7 @@ const (
|
|||
SO_NETPROC = 0x1020
|
||||
SO_OOBINLINE = 0x100
|
||||
SO_PEERCRED = 0x1022
|
||||
SO_PROTOCOL = 0x1025
|
||||
SO_RCVBUF = 0x1002
|
||||
SO_RCVLOWAT = 0x1004
|
||||
SO_RCVTIMEO = 0x1006
|
||||
|
@ -1370,7 +1486,18 @@ const (
|
|||
TCOFLUSH = 0x2
|
||||
TCOOFF = 0x1
|
||||
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_MAXWIN = 0xffff
|
||||
TCP_MAX_SACK = 0x3
|
||||
|
@ -1379,8 +1506,11 @@ const (
|
|||
TCP_MSS = 0x200
|
||||
TCP_NODELAY = 0x1
|
||||
TCP_NOPUSH = 0x10
|
||||
TCP_SACKHOLE_LIMIT = 0x80
|
||||
TCP_SACK_ENABLE = 0x8
|
||||
TCSAFLUSH = 0x2
|
||||
TIMER_ABSTIME = 0x1
|
||||
TIMER_RELTIME = 0x0
|
||||
TIOCCBRK = 0x2000747a
|
||||
TIOCCDTR = 0x20007478
|
||||
TIOCCHKVERAUTH = 0x2000741e
|
||||
|
@ -1445,7 +1575,6 @@ const (
|
|||
TIOCSPGRP = 0x80047476
|
||||
TIOCSTART = 0x2000746e
|
||||
TIOCSTAT = 0x20007465
|
||||
TIOCSTI = 0x80017472
|
||||
TIOCSTOP = 0x2000746f
|
||||
TIOCSTSTAMP = 0x8008745a
|
||||
TIOCSWINSZ = 0x80087467
|
||||
|
@ -1467,7 +1596,8 @@ const (
|
|||
VMIN = 0x10
|
||||
VM_ANONMIN = 0x7
|
||||
VM_LOADAVG = 0x2
|
||||
VM_MAXID = 0xc
|
||||
VM_MALLOC_CONF = 0xc
|
||||
VM_MAXID = 0xd
|
||||
VM_MAXSLP = 0xa
|
||||
VM_METER = 0x1
|
||||
VM_NKMEMPAGES = 0x6
|
||||
|
@ -1745,7 +1875,7 @@ var signalList = [...]struct {
|
|||
{3, "SIGQUIT", "quit"},
|
||||
{4, "SIGILL", "illegal instruction"},
|
||||
{5, "SIGTRAP", "trace/BPT trap"},
|
||||
{6, "SIGABRT", "abort trap"},
|
||||
{6, "SIGIOT", "abort trap"},
|
||||
{7, "SIGEMT", "EMT trap"},
|
||||
{8, "SIGFPE", "floating point exception"},
|
||||
{9, "SIGKILL", "killed"},
|
||||
|
@ -1772,4 +1902,5 @@ var signalList = [...]struct {
|
|||
{30, "SIGUSR1", "user defined signal 1"},
|
||||
{31, "SIGUSR2", "user defined signal 2"},
|
||||
{32, "SIGTHR", "thread AST"},
|
||||
{28672, "SIGSTKSZ", "unknown signal"},
|
||||
}
|
||||
|
|
|
@ -46,6 +46,7 @@ const (
|
|||
AF_SNA = 0xb
|
||||
AF_UNIX = 0x1
|
||||
AF_UNSPEC = 0x0
|
||||
ALTWERASE = 0x200
|
||||
ARPHRD_ETHER = 0x1
|
||||
ARPHRD_FRELAY = 0xf
|
||||
ARPHRD_IEEE1394 = 0x18
|
||||
|
@ -82,7 +83,7 @@ const (
|
|||
BIOCGFILDROP = 0x40044278
|
||||
BIOCGHDRCMPLT = 0x40044274
|
||||
BIOCGRSIG = 0x40044273
|
||||
BIOCGRTIMEOUT = 0x400c426e
|
||||
BIOCGRTIMEOUT = 0x4010426e
|
||||
BIOCGSTATS = 0x4008426f
|
||||
BIOCIMMEDIATE = 0x80044270
|
||||
BIOCLOCK = 0x20004276
|
||||
|
@ -96,7 +97,7 @@ const (
|
|||
BIOCSFILDROP = 0x80044279
|
||||
BIOCSHDRCMPLT = 0x80044275
|
||||
BIOCSRSIG = 0x80044272
|
||||
BIOCSRTIMEOUT = 0x800c426d
|
||||
BIOCSRTIMEOUT = 0x8010426d
|
||||
BIOCVERSION = 0x40044271
|
||||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
|
@ -108,6 +109,15 @@ const (
|
|||
BPF_DIRECTION_IN = 0x1
|
||||
BPF_DIRECTION_OUT = 0x2
|
||||
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_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -136,6 +146,7 @@ const (
|
|||
BPF_OR = 0x40
|
||||
BPF_RELEASE = 0x30bb6
|
||||
BPF_RET = 0x6
|
||||
BPF_RND = 0xc0
|
||||
BPF_RSH = 0x70
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
|
@ -147,6 +158,12 @@ const (
|
|||
BRKINT = 0x2
|
||||
CFLUSH = 0xf
|
||||
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
|
||||
CP_IDLE = 0x5
|
||||
CP_INTR = 0x4
|
||||
|
@ -170,7 +187,65 @@ const (
|
|||
CTL_KERN = 0x1
|
||||
CTL_MAXNAME = 0xc
|
||||
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
|
||||
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_ATM_RFC1483 = 0xb
|
||||
DLT_AX25 = 0x3
|
||||
|
@ -186,6 +261,7 @@ const (
|
|||
DLT_LOOP = 0xc
|
||||
DLT_MPLS = 0xdb
|
||||
DLT_NULL = 0x0
|
||||
DLT_OPENFLOW = 0x10b
|
||||
DLT_PFLOG = 0x75
|
||||
DLT_PFSYNC = 0x12
|
||||
DLT_PPP = 0x9
|
||||
|
@ -196,6 +272,23 @@ const (
|
|||
DLT_RAW = 0xe
|
||||
DLT_SLIP = 0x8
|
||||
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_CHR = 0x2
|
||||
DT_DIR = 0x4
|
||||
|
@ -215,6 +308,8 @@ const (
|
|||
EMUL_ENABLED = 0x1
|
||||
EMUL_NATIVE = 0x2
|
||||
ENDRUNDISC = 0x9
|
||||
ETH64_8021_RSVD_MASK = 0xfffffffffff0
|
||||
ETH64_8021_RSVD_PREFIX = 0x180c2000000
|
||||
ETHERMIN = 0x2e
|
||||
ETHERMTU = 0x5dc
|
||||
ETHERTYPE_8023 = 0x4
|
||||
|
@ -267,6 +362,7 @@ const (
|
|||
ETHERTYPE_DN = 0x6003
|
||||
ETHERTYPE_DOGFIGHT = 0x1989
|
||||
ETHERTYPE_DSMD = 0x8039
|
||||
ETHERTYPE_EAPOL = 0x888e
|
||||
ETHERTYPE_ECMA = 0x803
|
||||
ETHERTYPE_ENCRYPT = 0x803d
|
||||
ETHERTYPE_ES = 0x805d
|
||||
|
@ -298,6 +394,7 @@ const (
|
|||
ETHERTYPE_LLDP = 0x88cc
|
||||
ETHERTYPE_LOGICRAFT = 0x8148
|
||||
ETHERTYPE_LOOPBACK = 0x9000
|
||||
ETHERTYPE_MACSEC = 0x88e5
|
||||
ETHERTYPE_MATRA = 0x807a
|
||||
ETHERTYPE_MAX = 0xffff
|
||||
ETHERTYPE_MERIT = 0x807c
|
||||
|
@ -326,15 +423,17 @@ const (
|
|||
ETHERTYPE_NCD = 0x8149
|
||||
ETHERTYPE_NESTAR = 0x8006
|
||||
ETHERTYPE_NETBEUI = 0x8191
|
||||
ETHERTYPE_NHRP = 0x2001
|
||||
ETHERTYPE_NOVELL = 0x8138
|
||||
ETHERTYPE_NS = 0x600
|
||||
ETHERTYPE_NSAT = 0x601
|
||||
ETHERTYPE_NSCOMPAT = 0x807
|
||||
ETHERTYPE_NSH = 0x984f
|
||||
ETHERTYPE_NTRAILER = 0x10
|
||||
ETHERTYPE_OS9 = 0x7007
|
||||
ETHERTYPE_OS9NET = 0x7009
|
||||
ETHERTYPE_PACER = 0x80c6
|
||||
ETHERTYPE_PAE = 0x888e
|
||||
ETHERTYPE_PBB = 0x88e7
|
||||
ETHERTYPE_PCS = 0x4242
|
||||
ETHERTYPE_PLANNING = 0x8044
|
||||
ETHERTYPE_PPP = 0x880b
|
||||
|
@ -409,28 +508,40 @@ const (
|
|||
ETHER_CRC_POLY_LE = 0xedb88320
|
||||
ETHER_HDR_LEN = 0xe
|
||||
ETHER_MAX_DIX_LEN = 0x600
|
||||
ETHER_MAX_HARDMTU_LEN = 0xff9b
|
||||
ETHER_MAX_LEN = 0x5ee
|
||||
ETHER_MIN_LEN = 0x40
|
||||
ETHER_TYPE_LEN = 0x2
|
||||
ETHER_VLAN_ENCAP_LEN = 0x4
|
||||
EVFILT_AIO = -0x3
|
||||
EVFILT_DEVICE = -0x8
|
||||
EVFILT_EXCEPT = -0x9
|
||||
EVFILT_PROC = -0x5
|
||||
EVFILT_READ = -0x1
|
||||
EVFILT_SIGNAL = -0x6
|
||||
EVFILT_SYSCOUNT = 0x7
|
||||
EVFILT_SYSCOUNT = 0x9
|
||||
EVFILT_TIMER = -0x7
|
||||
EVFILT_VNODE = -0x4
|
||||
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_CLEAR = 0x20
|
||||
EV_DELETE = 0x2
|
||||
EV_DISABLE = 0x8
|
||||
EV_DISPATCH = 0x80
|
||||
EV_ENABLE = 0x4
|
||||
EV_EOF = 0x8000
|
||||
EV_ERROR = 0x4000
|
||||
EV_FLAG1 = 0x2000
|
||||
EV_ONESHOT = 0x10
|
||||
EV_SYSFLAGS = 0xf000
|
||||
EV_RECEIPT = 0x40
|
||||
EV_SYSFLAGS = 0xf800
|
||||
EXTA = 0x4b00
|
||||
EXTB = 0x9600
|
||||
EXTPROC = 0x800
|
||||
|
@ -443,6 +554,8 @@ const (
|
|||
F_GETFL = 0x3
|
||||
F_GETLK = 0x7
|
||||
F_GETOWN = 0x5
|
||||
F_ISATTY = 0xb
|
||||
F_OK = 0x0
|
||||
F_RDLCK = 0x1
|
||||
F_SETFD = 0x2
|
||||
F_SETFL = 0x4
|
||||
|
@ -459,7 +572,6 @@ const (
|
|||
IEXTEN = 0x400
|
||||
IFAN_ARRIVAL = 0x0
|
||||
IFAN_DEPARTURE = 0x1
|
||||
IFA_ROUTE = 0x1
|
||||
IFF_ALLMULTI = 0x200
|
||||
IFF_BROADCAST = 0x2
|
||||
IFF_CANTCHANGE = 0x8e52
|
||||
|
@ -470,12 +582,12 @@ const (
|
|||
IFF_LOOPBACK = 0x8
|
||||
IFF_MULTICAST = 0x8000
|
||||
IFF_NOARP = 0x80
|
||||
IFF_NOTRAILERS = 0x20
|
||||
IFF_OACTIVE = 0x400
|
||||
IFF_POINTOPOINT = 0x10
|
||||
IFF_PROMISC = 0x100
|
||||
IFF_RUNNING = 0x40
|
||||
IFF_SIMPLEX = 0x800
|
||||
IFF_STATICARP = 0x20
|
||||
IFF_UP = 0x1
|
||||
IFNAMSIZ = 0x10
|
||||
IFT_1822 = 0x2
|
||||
|
@ -604,6 +716,7 @@ const (
|
|||
IFT_LINEGROUP = 0xd2
|
||||
IFT_LOCALTALK = 0x2a
|
||||
IFT_LOOP = 0x18
|
||||
IFT_MBIM = 0xfa
|
||||
IFT_MEDIAMAILOVERIP = 0x8b
|
||||
IFT_MFSIGLINK = 0xa7
|
||||
IFT_MIOX25 = 0x26
|
||||
|
@ -694,6 +807,7 @@ const (
|
|||
IFT_VOICEOVERCABLE = 0xc6
|
||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
||||
IFT_VOICEOVERIP = 0x68
|
||||
IFT_WIREGUARD = 0xfb
|
||||
IFT_X213 = 0x5d
|
||||
IFT_X25 = 0x5
|
||||
IFT_X25DDN = 0x4
|
||||
|
@ -728,8 +842,6 @@ const (
|
|||
IPPROTO_AH = 0x33
|
||||
IPPROTO_CARP = 0x70
|
||||
IPPROTO_DIVERT = 0x102
|
||||
IPPROTO_DIVERT_INIT = 0x2
|
||||
IPPROTO_DIVERT_RESP = 0x1
|
||||
IPPROTO_DONE = 0x101
|
||||
IPPROTO_DSTOPTS = 0x3c
|
||||
IPPROTO_EGP = 0x8
|
||||
|
@ -761,9 +873,11 @@ const (
|
|||
IPPROTO_RAW = 0xff
|
||||
IPPROTO_ROUTING = 0x2b
|
||||
IPPROTO_RSVP = 0x2e
|
||||
IPPROTO_SCTP = 0x84
|
||||
IPPROTO_TCP = 0x6
|
||||
IPPROTO_TP = 0x1d
|
||||
IPPROTO_UDP = 0x11
|
||||
IPPROTO_UDPLITE = 0x88
|
||||
IPV6_AUTH_LEVEL = 0x35
|
||||
IPV6_AUTOFLOWLABEL = 0x3b
|
||||
IPV6_CHECKSUM = 0x1a
|
||||
|
@ -786,6 +900,7 @@ const (
|
|||
IPV6_LEAVE_GROUP = 0xd
|
||||
IPV6_MAXHLIM = 0xff
|
||||
IPV6_MAXPACKET = 0xffff
|
||||
IPV6_MINHOPCOUNT = 0x41
|
||||
IPV6_MMTU = 0x500
|
||||
IPV6_MULTICAST_HOPS = 0xa
|
||||
IPV6_MULTICAST_IF = 0x9
|
||||
|
@ -825,12 +940,12 @@ const (
|
|||
IP_DEFAULT_MULTICAST_LOOP = 0x1
|
||||
IP_DEFAULT_MULTICAST_TTL = 0x1
|
||||
IP_DF = 0x4000
|
||||
IP_DIVERTFL = 0x1022
|
||||
IP_DROP_MEMBERSHIP = 0xd
|
||||
IP_ESP_NETWORK_LEVEL = 0x16
|
||||
IP_ESP_TRANS_LEVEL = 0x15
|
||||
IP_HDRINCL = 0x2
|
||||
IP_IPCOMP_LEVEL = 0x1d
|
||||
IP_IPDEFTTL = 0x25
|
||||
IP_IPSECFLOWINFO = 0x24
|
||||
IP_IPSEC_LOCAL_AUTH = 0x1b
|
||||
IP_IPSEC_LOCAL_CRED = 0x19
|
||||
|
@ -864,10 +979,15 @@ const (
|
|||
IP_RETOPTS = 0x8
|
||||
IP_RF = 0x8000
|
||||
IP_RTABLE = 0x1021
|
||||
IP_SENDSRCADDR = 0x7
|
||||
IP_TOS = 0x3
|
||||
IP_TTL = 0x4
|
||||
ISIG = 0x80
|
||||
ISTRIP = 0x20
|
||||
ITIMER_PROF = 0x2
|
||||
ITIMER_REAL = 0x0
|
||||
ITIMER_VIRTUAL = 0x1
|
||||
IUCLC = 0x1000
|
||||
IXANY = 0x800
|
||||
IXOFF = 0x400
|
||||
IXON = 0x200
|
||||
|
@ -922,6 +1042,7 @@ const (
|
|||
MNT_NOATIME = 0x8000
|
||||
MNT_NODEV = 0x10
|
||||
MNT_NOEXEC = 0x4
|
||||
MNT_NOPERM = 0x20
|
||||
MNT_NOSUID = 0x8
|
||||
MNT_NOWAIT = 0x2
|
||||
MNT_QUOTA = 0x2000
|
||||
|
@ -929,12 +1050,27 @@ const (
|
|||
MNT_RELOAD = 0x40000
|
||||
MNT_ROOTFS = 0x4000
|
||||
MNT_SOFTDEP = 0x4000000
|
||||
MNT_STALLED = 0x100000
|
||||
MNT_SWAPPABLE = 0x200000
|
||||
MNT_SYNCHRONOUS = 0x2
|
||||
MNT_UPDATE = 0x10000
|
||||
MNT_VISFLAGMASK = 0x400ffff
|
||||
MNT_WAIT = 0x1
|
||||
MNT_WANTRDWR = 0x2000000
|
||||
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_CMSG_CLOEXEC = 0x800
|
||||
MSG_CTRUNC = 0x20
|
||||
|
@ -947,6 +1083,7 @@ const (
|
|||
MSG_PEEK = 0x2
|
||||
MSG_TRUNC = 0x10
|
||||
MSG_WAITALL = 0x40
|
||||
MSG_WAITFORONE = 0x1000
|
||||
MS_ASYNC = 0x1
|
||||
MS_INVALIDATE = 0x4
|
||||
MS_SYNC = 0x2
|
||||
|
@ -954,12 +1091,16 @@ const (
|
|||
NET_RT_DUMP = 0x1
|
||||
NET_RT_FLAGS = 0x2
|
||||
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_TABLE = 0x5
|
||||
NFDBITS = 0x20
|
||||
NOFLSH = 0x80000000
|
||||
NOKERNINFO = 0x2000000
|
||||
NOTE_ATTRIB = 0x8
|
||||
NOTE_CHANGE = 0x1
|
||||
NOTE_CHILD = 0x4
|
||||
NOTE_DELETE = 0x1
|
||||
NOTE_EOF = 0x2
|
||||
|
@ -969,6 +1110,7 @@ const (
|
|||
NOTE_FORK = 0x40000000
|
||||
NOTE_LINK = 0x10
|
||||
NOTE_LOWAT = 0x1
|
||||
NOTE_OOB = 0x4
|
||||
NOTE_PCTRLMASK = 0xf0000000
|
||||
NOTE_PDATAMASK = 0xfffff
|
||||
NOTE_RENAME = 0x20
|
||||
|
@ -978,11 +1120,13 @@ const (
|
|||
NOTE_TRUNCATE = 0x80
|
||||
NOTE_WRITE = 0x2
|
||||
OCRNL = 0x10
|
||||
OLCUC = 0x20
|
||||
ONLCR = 0x2
|
||||
ONLRET = 0x80
|
||||
ONOCR = 0x40
|
||||
ONOEOT = 0x8
|
||||
OPOST = 0x1
|
||||
OXTABS = 0x4
|
||||
O_ACCMODE = 0x3
|
||||
O_APPEND = 0x8
|
||||
O_ASYNC = 0x40
|
||||
|
@ -1027,19 +1171,25 @@ const (
|
|||
RLIMIT_STACK = 0x3
|
||||
RLIM_INFINITY = 0x7fffffffffffffff
|
||||
RTAX_AUTHOR = 0x6
|
||||
RTAX_BFD = 0xb
|
||||
RTAX_BRD = 0x7
|
||||
RTAX_DNS = 0xc
|
||||
RTAX_DST = 0x0
|
||||
RTAX_GATEWAY = 0x1
|
||||
RTAX_GENMASK = 0x3
|
||||
RTAX_IFA = 0x5
|
||||
RTAX_IFP = 0x4
|
||||
RTAX_LABEL = 0xa
|
||||
RTAX_MAX = 0xb
|
||||
RTAX_MAX = 0xf
|
||||
RTAX_NETMASK = 0x2
|
||||
RTAX_SEARCH = 0xe
|
||||
RTAX_SRC = 0x8
|
||||
RTAX_SRCMASK = 0x9
|
||||
RTAX_STATIC = 0xd
|
||||
RTA_AUTHOR = 0x40
|
||||
RTA_BFD = 0x800
|
||||
RTA_BRD = 0x80
|
||||
RTA_DNS = 0x1000
|
||||
RTA_DST = 0x1
|
||||
RTA_GATEWAY = 0x2
|
||||
RTA_GENMASK = 0x8
|
||||
|
@ -1047,24 +1197,29 @@ const (
|
|||
RTA_IFP = 0x10
|
||||
RTA_LABEL = 0x400
|
||||
RTA_NETMASK = 0x4
|
||||
RTA_SEARCH = 0x4000
|
||||
RTA_SRC = 0x100
|
||||
RTA_SRCMASK = 0x200
|
||||
RTA_STATIC = 0x2000
|
||||
RTF_ANNOUNCE = 0x4000
|
||||
RTF_BFD = 0x1000000
|
||||
RTF_BLACKHOLE = 0x1000
|
||||
RTF_BROADCAST = 0x400000
|
||||
RTF_CACHED = 0x20000
|
||||
RTF_CLONED = 0x10000
|
||||
RTF_CLONING = 0x100
|
||||
RTF_CONNECTED = 0x800000
|
||||
RTF_DONE = 0x40
|
||||
RTF_DYNAMIC = 0x10
|
||||
RTF_FMASK = 0x70f808
|
||||
RTF_FMASK = 0x110fc08
|
||||
RTF_GATEWAY = 0x2
|
||||
RTF_HOST = 0x4
|
||||
RTF_LLINFO = 0x400
|
||||
RTF_LOCAL = 0x200000
|
||||
RTF_MASK = 0x80
|
||||
RTF_MODIFIED = 0x20
|
||||
RTF_MPATH = 0x40000
|
||||
RTF_MPLS = 0x100000
|
||||
RTF_MULTICAST = 0x200
|
||||
RTF_PERMANENT_ARP = 0x2000
|
||||
RTF_PROTO1 = 0x8000
|
||||
RTF_PROTO2 = 0x4000
|
||||
|
@ -1073,23 +1228,26 @@ const (
|
|||
RTF_STATIC = 0x800
|
||||
RTF_UP = 0x1
|
||||
RTF_USETRAILERS = 0x8000
|
||||
RTF_XRESOLVE = 0x200
|
||||
RTM_80211INFO = 0x15
|
||||
RTM_ADD = 0x1
|
||||
RTM_BFD = 0x12
|
||||
RTM_CHANGE = 0x3
|
||||
RTM_CHGADDRATTR = 0x14
|
||||
RTM_DELADDR = 0xd
|
||||
RTM_DELETE = 0x2
|
||||
RTM_DESYNC = 0x10
|
||||
RTM_GET = 0x4
|
||||
RTM_IFANNOUNCE = 0xf
|
||||
RTM_IFINFO = 0xe
|
||||
RTM_LOCK = 0x8
|
||||
RTM_INVALIDATE = 0x11
|
||||
RTM_LOSING = 0x5
|
||||
RTM_MAXSIZE = 0x800
|
||||
RTM_MISS = 0x7
|
||||
RTM_NEWADDR = 0xc
|
||||
RTM_PROPOSAL = 0x13
|
||||
RTM_REDIRECT = 0x6
|
||||
RTM_RESOLVE = 0xb
|
||||
RTM_RTTUNIT = 0xf4240
|
||||
RTM_SOURCE = 0x16
|
||||
RTM_VERSION = 0x5
|
||||
RTV_EXPIRE = 0x4
|
||||
RTV_HOPCOUNT = 0x2
|
||||
|
@ -1099,67 +1257,74 @@ const (
|
|||
RTV_RTTVAR = 0x80
|
||||
RTV_SPIPE = 0x10
|
||||
RTV_SSTHRESH = 0x20
|
||||
RT_TABLEID_BITS = 0x8
|
||||
RT_TABLEID_MASK = 0xff
|
||||
RT_TABLEID_MAX = 0xff
|
||||
RUSAGE_CHILDREN = -0x1
|
||||
RUSAGE_SELF = 0x0
|
||||
RUSAGE_THREAD = 0x1
|
||||
SCM_RIGHTS = 0x1
|
||||
SCM_TIMESTAMP = 0x4
|
||||
SEEK_CUR = 0x1
|
||||
SEEK_END = 0x2
|
||||
SEEK_SET = 0x0
|
||||
SHUT_RD = 0x0
|
||||
SHUT_RDWR = 0x2
|
||||
SHUT_WR = 0x1
|
||||
SIOCADDMULTI = 0x80206931
|
||||
SIOCAIFADDR = 0x8040691a
|
||||
SIOCAIFGROUP = 0x80246987
|
||||
SIOCALIFADDR = 0x8218691c
|
||||
SIOCATMARK = 0x40047307
|
||||
SIOCBRDGADD = 0x8054693c
|
||||
SIOCBRDGADDS = 0x80546941
|
||||
SIOCBRDGARL = 0x806e694d
|
||||
SIOCBRDGADD = 0x8060693c
|
||||
SIOCBRDGADDL = 0x80606949
|
||||
SIOCBRDGADDS = 0x80606941
|
||||
SIOCBRDGARL = 0x808c694d
|
||||
SIOCBRDGDADDR = 0x81286947
|
||||
SIOCBRDGDEL = 0x8054693d
|
||||
SIOCBRDGDELS = 0x80546942
|
||||
SIOCBRDGFLUSH = 0x80546948
|
||||
SIOCBRDGFRL = 0x806e694e
|
||||
SIOCBRDGDEL = 0x8060693d
|
||||
SIOCBRDGDELS = 0x80606942
|
||||
SIOCBRDGFLUSH = 0x80606948
|
||||
SIOCBRDGFRL = 0x808c694e
|
||||
SIOCBRDGGCACHE = 0xc0146941
|
||||
SIOCBRDGGFD = 0xc0146952
|
||||
SIOCBRDGGHT = 0xc0146951
|
||||
SIOCBRDGGIFFLGS = 0xc054693e
|
||||
SIOCBRDGGIFFLGS = 0xc060693e
|
||||
SIOCBRDGGMA = 0xc0146953
|
||||
SIOCBRDGGPARAM = 0xc03c6958
|
||||
SIOCBRDGGPARAM = 0xc0406958
|
||||
SIOCBRDGGPRI = 0xc0146950
|
||||
SIOCBRDGGRL = 0xc028694f
|
||||
SIOCBRDGGSIFS = 0xc054693c
|
||||
SIOCBRDGGTO = 0xc0146946
|
||||
SIOCBRDGIFS = 0xc0546942
|
||||
SIOCBRDGIFS = 0xc0606942
|
||||
SIOCBRDGRTS = 0xc0186943
|
||||
SIOCBRDGSADDR = 0xc1286944
|
||||
SIOCBRDGSCACHE = 0x80146940
|
||||
SIOCBRDGSFD = 0x80146952
|
||||
SIOCBRDGSHT = 0x80146951
|
||||
SIOCBRDGSIFCOST = 0x80546955
|
||||
SIOCBRDGSIFFLGS = 0x8054693f
|
||||
SIOCBRDGSIFPRIO = 0x80546954
|
||||
SIOCBRDGSIFCOST = 0x80606955
|
||||
SIOCBRDGSIFFLGS = 0x8060693f
|
||||
SIOCBRDGSIFPRIO = 0x80606954
|
||||
SIOCBRDGSIFPROT = 0x8060694a
|
||||
SIOCBRDGSMA = 0x80146953
|
||||
SIOCBRDGSPRI = 0x80146950
|
||||
SIOCBRDGSPROTO = 0x8014695a
|
||||
SIOCBRDGSTO = 0x80146945
|
||||
SIOCBRDGSTXHC = 0x80146959
|
||||
SIOCDELLABEL = 0x80206997
|
||||
SIOCDELMULTI = 0x80206932
|
||||
SIOCDIFADDR = 0x80206919
|
||||
SIOCDIFGROUP = 0x80246989
|
||||
SIOCDIFPARENT = 0x802069b4
|
||||
SIOCDIFPHYADDR = 0x80206949
|
||||
SIOCDLIFADDR = 0x8218691e
|
||||
SIOCDPWE3NEIGHBOR = 0x802069de
|
||||
SIOCDVNETID = 0x802069af
|
||||
SIOCGETKALIVE = 0xc01869a4
|
||||
SIOCGETLABEL = 0x8020699a
|
||||
SIOCGETMPWCFG = 0xc02069ae
|
||||
SIOCGETPFLOW = 0xc02069fe
|
||||
SIOCGETPFSYNC = 0xc02069f8
|
||||
SIOCGETSGCNT = 0xc0147534
|
||||
SIOCGETVIFCNT = 0xc0147533
|
||||
SIOCGETVLAN = 0xc0206990
|
||||
SIOCGHIWAT = 0x40047301
|
||||
SIOCGIFADDR = 0xc0206921
|
||||
SIOCGIFASYNCMAP = 0xc020697c
|
||||
SIOCGIFBRDADDR = 0xc0206923
|
||||
SIOCGIFCONF = 0xc0086924
|
||||
SIOCGIFDATA = 0xc020691b
|
||||
|
@ -1168,41 +1333,53 @@ const (
|
|||
SIOCGIFFLAGS = 0xc0206911
|
||||
SIOCGIFGATTR = 0xc024698b
|
||||
SIOCGIFGENERIC = 0xc020693a
|
||||
SIOCGIFGLIST = 0xc024698d
|
||||
SIOCGIFGMEMB = 0xc024698a
|
||||
SIOCGIFGROUP = 0xc0246988
|
||||
SIOCGIFHARDMTU = 0xc02069a5
|
||||
SIOCGIFMEDIA = 0xc0286936
|
||||
SIOCGIFLLPRIO = 0xc02069b6
|
||||
SIOCGIFMEDIA = 0xc0386938
|
||||
SIOCGIFMETRIC = 0xc0206917
|
||||
SIOCGIFMTU = 0xc020697e
|
||||
SIOCGIFNETMASK = 0xc0206925
|
||||
SIOCGIFPDSTADDR = 0xc0206948
|
||||
SIOCGIFPAIR = 0xc02069b1
|
||||
SIOCGIFPARENT = 0xc02069b3
|
||||
SIOCGIFPRIORITY = 0xc020699c
|
||||
SIOCGIFPSRCADDR = 0xc0206947
|
||||
SIOCGIFRDOMAIN = 0xc02069a0
|
||||
SIOCGIFRTLABEL = 0xc0206983
|
||||
SIOCGIFRXR = 0x802069aa
|
||||
SIOCGIFTIMESLOT = 0xc0206986
|
||||
SIOCGIFSFFPAGE = 0xc1126939
|
||||
SIOCGIFXFLAGS = 0xc020699e
|
||||
SIOCGLIFADDR = 0xc218691d
|
||||
SIOCGLIFPHYADDR = 0xc218694b
|
||||
SIOCGLIFPHYDF = 0xc02069c2
|
||||
SIOCGLIFPHYECN = 0xc02069c8
|
||||
SIOCGLIFPHYRTABLE = 0xc02069a2
|
||||
SIOCGLIFPHYTTL = 0xc02069a9
|
||||
SIOCGLOWAT = 0x40047303
|
||||
SIOCGPGRP = 0x40047309
|
||||
SIOCGPWE3 = 0xc0206998
|
||||
SIOCGPWE3CTRLWORD = 0xc02069dc
|
||||
SIOCGPWE3FAT = 0xc02069dd
|
||||
SIOCGPWE3NEIGHBOR = 0xc21869de
|
||||
SIOCGRXHPRIO = 0xc02069db
|
||||
SIOCGSPPPPARAMS = 0xc0206994
|
||||
SIOCGTXHPRIO = 0xc02069c6
|
||||
SIOCGUMBINFO = 0xc02069be
|
||||
SIOCGUMBPARAM = 0xc02069c0
|
||||
SIOCGVH = 0xc02069f6
|
||||
SIOCGVNETFLOWID = 0xc02069c4
|
||||
SIOCGVNETID = 0xc02069a7
|
||||
SIOCIFAFATTACH = 0x801169ab
|
||||
SIOCIFAFDETACH = 0x801169ac
|
||||
SIOCIFCREATE = 0x8020697a
|
||||
SIOCIFDESTROY = 0x80206979
|
||||
SIOCIFGCLONERS = 0xc00c6978
|
||||
SIOCSETKALIVE = 0x801869a3
|
||||
SIOCSETLABEL = 0x80206999
|
||||
SIOCSETMPWCFG = 0x802069ad
|
||||
SIOCSETPFLOW = 0x802069fd
|
||||
SIOCSETPFSYNC = 0x802069f7
|
||||
SIOCSETVLAN = 0x8020698f
|
||||
SIOCSHIWAT = 0x80047300
|
||||
SIOCSIFADDR = 0x8020690c
|
||||
SIOCSIFASYNCMAP = 0x8020697d
|
||||
SIOCSIFBRDADDR = 0x80206913
|
||||
SIOCSIFDESCR = 0x80206980
|
||||
SIOCSIFDSTADDR = 0x8020690e
|
||||
|
@ -1210,26 +1387,36 @@ const (
|
|||
SIOCSIFGATTR = 0x8024698c
|
||||
SIOCSIFGENERIC = 0x80206939
|
||||
SIOCSIFLLADDR = 0x8020691f
|
||||
SIOCSIFMEDIA = 0xc0206935
|
||||
SIOCSIFLLPRIO = 0x802069b5
|
||||
SIOCSIFMEDIA = 0xc0206937
|
||||
SIOCSIFMETRIC = 0x80206918
|
||||
SIOCSIFMTU = 0x8020697f
|
||||
SIOCSIFNETMASK = 0x80206916
|
||||
SIOCSIFPHYADDR = 0x80406946
|
||||
SIOCSIFPAIR = 0x802069b0
|
||||
SIOCSIFPARENT = 0x802069b2
|
||||
SIOCSIFPRIORITY = 0x8020699b
|
||||
SIOCSIFRDOMAIN = 0x8020699f
|
||||
SIOCSIFRTLABEL = 0x80206982
|
||||
SIOCSIFTIMESLOT = 0x80206985
|
||||
SIOCSIFXFLAGS = 0x8020699d
|
||||
SIOCSLIFPHYADDR = 0x8218694a
|
||||
SIOCSLIFPHYDF = 0x802069c1
|
||||
SIOCSLIFPHYECN = 0x802069c7
|
||||
SIOCSLIFPHYRTABLE = 0x802069a1
|
||||
SIOCSLIFPHYTTL = 0x802069a8
|
||||
SIOCSLOWAT = 0x80047302
|
||||
SIOCSPGRP = 0x80047308
|
||||
SIOCSPWE3CTRLWORD = 0x802069dc
|
||||
SIOCSPWE3FAT = 0x802069dd
|
||||
SIOCSPWE3NEIGHBOR = 0x821869de
|
||||
SIOCSRXHPRIO = 0x802069db
|
||||
SIOCSSPPPPARAMS = 0x80206993
|
||||
SIOCSTXHPRIO = 0x802069c5
|
||||
SIOCSUMBPARAM = 0x802069bf
|
||||
SIOCSVH = 0xc02069f5
|
||||
SIOCSVNETFLOWID = 0x802069c3
|
||||
SIOCSVNETID = 0x802069a6
|
||||
SOCK_CLOEXEC = 0x8000
|
||||
SOCK_DGRAM = 0x2
|
||||
SOCK_DNS = 0x1000
|
||||
SOCK_NONBLOCK = 0x4000
|
||||
SOCK_RAW = 0x3
|
||||
SOCK_RDM = 0x4
|
||||
|
@ -1241,6 +1428,7 @@ const (
|
|||
SO_BINDANY = 0x1000
|
||||
SO_BROADCAST = 0x20
|
||||
SO_DEBUG = 0x1
|
||||
SO_DOMAIN = 0x1024
|
||||
SO_DONTROUTE = 0x10
|
||||
SO_ERROR = 0x1007
|
||||
SO_KEEPALIVE = 0x8
|
||||
|
@ -1248,6 +1436,7 @@ const (
|
|||
SO_NETPROC = 0x1020
|
||||
SO_OOBINLINE = 0x100
|
||||
SO_PEERCRED = 0x1022
|
||||
SO_PROTOCOL = 0x1025
|
||||
SO_RCVBUF = 0x1002
|
||||
SO_RCVLOWAT = 0x1004
|
||||
SO_RCVTIMEO = 0x1006
|
||||
|
@ -1261,6 +1450,7 @@ const (
|
|||
SO_TIMESTAMP = 0x800
|
||||
SO_TYPE = 0x1008
|
||||
SO_USELOOPBACK = 0x40
|
||||
SO_ZEROIZE = 0x2000
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
S_IFBLK = 0x6000
|
||||
|
@ -1290,9 +1480,24 @@ const (
|
|||
S_IXOTH = 0x1
|
||||
S_IXUSR = 0x40
|
||||
TCIFLUSH = 0x1
|
||||
TCIOFF = 0x3
|
||||
TCIOFLUSH = 0x3
|
||||
TCION = 0x4
|
||||
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_MAXWIN = 0xffff
|
||||
TCP_MAX_SACK = 0x3
|
||||
|
@ -1301,11 +1506,15 @@ const (
|
|||
TCP_MSS = 0x200
|
||||
TCP_NODELAY = 0x1
|
||||
TCP_NOPUSH = 0x10
|
||||
TCP_NSTATES = 0xb
|
||||
TCP_SACKHOLE_LIMIT = 0x80
|
||||
TCP_SACK_ENABLE = 0x8
|
||||
TCSAFLUSH = 0x2
|
||||
TIMER_ABSTIME = 0x1
|
||||
TIMER_RELTIME = 0x0
|
||||
TIOCCBRK = 0x2000747a
|
||||
TIOCCDTR = 0x20007478
|
||||
TIOCCHKVERAUTH = 0x2000741e
|
||||
TIOCCLRVERAUTH = 0x2000741d
|
||||
TIOCCONS = 0x80047462
|
||||
TIOCDRAIN = 0x2000745e
|
||||
TIOCEXCL = 0x2000740d
|
||||
|
@ -1321,7 +1530,7 @@ const (
|
|||
TIOCGFLAGS = 0x4004745d
|
||||
TIOCGPGRP = 0x40047477
|
||||
TIOCGSID = 0x40047463
|
||||
TIOCGTSTAMP = 0x400c745b
|
||||
TIOCGTSTAMP = 0x4010745b
|
||||
TIOCGWINSZ = 0x40087468
|
||||
TIOCMBIC = 0x8004746b
|
||||
TIOCMBIS = 0x8004746c
|
||||
|
@ -1360,17 +1569,21 @@ const (
|
|||
TIOCSETAF = 0x802c7416
|
||||
TIOCSETAW = 0x802c7415
|
||||
TIOCSETD = 0x8004741b
|
||||
TIOCSETVERAUTH = 0x8004741c
|
||||
TIOCSFLAGS = 0x8004745c
|
||||
TIOCSIG = 0x8004745f
|
||||
TIOCSPGRP = 0x80047476
|
||||
TIOCSTART = 0x2000746e
|
||||
TIOCSTAT = 0x80047465
|
||||
TIOCSTI = 0x80017472
|
||||
TIOCSTAT = 0x20007465
|
||||
TIOCSTOP = 0x2000746f
|
||||
TIOCSTSTAMP = 0x8008745a
|
||||
TIOCSWINSZ = 0x80087467
|
||||
TIOCUCNTL = 0x80047466
|
||||
TIOCUCNTL_CBRK = 0x7a
|
||||
TIOCUCNTL_SBRK = 0x7b
|
||||
TOSTOP = 0x400000
|
||||
UTIME_NOW = -0x2
|
||||
UTIME_OMIT = -0x1
|
||||
VDISCARD = 0xf
|
||||
VDSUSP = 0xb
|
||||
VEOF = 0x0
|
||||
|
@ -1381,6 +1594,19 @@ const (
|
|||
VKILL = 0x5
|
||||
VLNEXT = 0xe
|
||||
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
|
||||
VREPRINT = 0x6
|
||||
VSTART = 0xc
|
||||
|
@ -1394,6 +1620,7 @@ const (
|
|||
WCOREFLAG = 0x80
|
||||
WNOHANG = 0x1
|
||||
WUNTRACED = 0x2
|
||||
XCASE = 0x1000000
|
||||
)
|
||||
|
||||
// Errors
|
||||
|
@ -1407,6 +1634,7 @@ const (
|
|||
EALREADY = syscall.Errno(0x25)
|
||||
EAUTH = syscall.Errno(0x50)
|
||||
EBADF = syscall.Errno(0x9)
|
||||
EBADMSG = syscall.Errno(0x5c)
|
||||
EBADRPC = syscall.Errno(0x48)
|
||||
EBUSY = syscall.Errno(0x10)
|
||||
ECANCELED = syscall.Errno(0x58)
|
||||
|
@ -1433,7 +1661,7 @@ const (
|
|||
EIPSEC = syscall.Errno(0x52)
|
||||
EISCONN = syscall.Errno(0x38)
|
||||
EISDIR = syscall.Errno(0x15)
|
||||
ELAST = syscall.Errno(0x5b)
|
||||
ELAST = syscall.Errno(0x5f)
|
||||
ELOOP = syscall.Errno(0x3e)
|
||||
EMEDIUMTYPE = syscall.Errno(0x56)
|
||||
EMFILE = syscall.Errno(0x18)
|
||||
|
@ -1461,12 +1689,14 @@ const (
|
|||
ENOTCONN = syscall.Errno(0x39)
|
||||
ENOTDIR = syscall.Errno(0x14)
|
||||
ENOTEMPTY = syscall.Errno(0x42)
|
||||
ENOTRECOVERABLE = syscall.Errno(0x5d)
|
||||
ENOTSOCK = syscall.Errno(0x26)
|
||||
ENOTSUP = syscall.Errno(0x5b)
|
||||
ENOTTY = syscall.Errno(0x19)
|
||||
ENXIO = syscall.Errno(0x6)
|
||||
EOPNOTSUPP = syscall.Errno(0x2d)
|
||||
EOVERFLOW = syscall.Errno(0x57)
|
||||
EOWNERDEAD = syscall.Errno(0x5e)
|
||||
EPERM = syscall.Errno(0x1)
|
||||
EPFNOSUPPORT = syscall.Errno(0x2e)
|
||||
EPIPE = syscall.Errno(0x20)
|
||||
|
@ -1474,6 +1704,7 @@ const (
|
|||
EPROCUNAVAIL = syscall.Errno(0x4c)
|
||||
EPROGMISMATCH = syscall.Errno(0x4b)
|
||||
EPROGUNAVAIL = syscall.Errno(0x4a)
|
||||
EPROTO = syscall.Errno(0x5f)
|
||||
EPROTONOSUPPORT = syscall.Errno(0x2b)
|
||||
EPROTOTYPE = syscall.Errno(0x29)
|
||||
ERANGE = syscall.Errno(0x22)
|
||||
|
@ -1570,7 +1801,7 @@ var errorList = [...]struct {
|
|||
{32, "EPIPE", "broken pipe"},
|
||||
{33, "EDOM", "numerical argument out of domain"},
|
||||
{34, "ERANGE", "result too large"},
|
||||
{35, "EWOULDBLOCK", "resource temporarily unavailable"},
|
||||
{35, "EAGAIN", "resource temporarily unavailable"},
|
||||
{36, "EINPROGRESS", "operation now in progress"},
|
||||
{37, "EALREADY", "operation already in progress"},
|
||||
{38, "ENOTSOCK", "socket operation on non-socket"},
|
||||
|
@ -1626,7 +1857,11 @@ var errorList = [...]struct {
|
|||
{88, "ECANCELED", "operation canceled"},
|
||||
{89, "EIDRM", "identifier removed"},
|
||||
{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
|
||||
|
@ -1640,7 +1875,7 @@ var signalList = [...]struct {
|
|||
{3, "SIGQUIT", "quit"},
|
||||
{4, "SIGILL", "illegal instruction"},
|
||||
{5, "SIGTRAP", "trace/BPT trap"},
|
||||
{6, "SIGABRT", "abort trap"},
|
||||
{6, "SIGIOT", "abort trap"},
|
||||
{7, "SIGEMT", "EMT trap"},
|
||||
{8, "SIGFPE", "floating point exception"},
|
||||
{9, "SIGKILL", "killed"},
|
||||
|
@ -1667,4 +1902,5 @@ var signalList = [...]struct {
|
|||
{30, "SIGUSR1", "user defined signal 1"},
|
||||
{31, "SIGUSR2", "user defined signal 2"},
|
||||
{32, "SIGTHR", "thread AST"},
|
||||
{28672, "SIGSTKSZ", "unknown signal"},
|
||||
}
|
||||
|
|
|
@ -112,6 +112,12 @@ const (
|
|||
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_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -140,6 +146,7 @@ const (
|
|||
BPF_OR = 0x40
|
||||
BPF_RELEASE = 0x30bb6
|
||||
BPF_RET = 0x6
|
||||
BPF_RND = 0xc0
|
||||
BPF_RSH = 0x70
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
|
@ -180,7 +187,65 @@ const (
|
|||
CTL_KERN = 0x1
|
||||
CTL_MAXNAME = 0xc
|
||||
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
|
||||
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_ATM_RFC1483 = 0xb
|
||||
DLT_AX25 = 0x3
|
||||
|
@ -243,6 +308,8 @@ const (
|
|||
EMUL_ENABLED = 0x1
|
||||
EMUL_NATIVE = 0x2
|
||||
ENDRUNDISC = 0x9
|
||||
ETH64_8021_RSVD_MASK = 0xfffffffffff0
|
||||
ETH64_8021_RSVD_PREFIX = 0x180c2000000
|
||||
ETHERMIN = 0x2e
|
||||
ETHERMTU = 0x5dc
|
||||
ETHERTYPE_8023 = 0x4
|
||||
|
@ -295,6 +362,7 @@ const (
|
|||
ETHERTYPE_DN = 0x6003
|
||||
ETHERTYPE_DOGFIGHT = 0x1989
|
||||
ETHERTYPE_DSMD = 0x8039
|
||||
ETHERTYPE_EAPOL = 0x888e
|
||||
ETHERTYPE_ECMA = 0x803
|
||||
ETHERTYPE_ENCRYPT = 0x803d
|
||||
ETHERTYPE_ES = 0x805d
|
||||
|
@ -326,6 +394,7 @@ const (
|
|||
ETHERTYPE_LLDP = 0x88cc
|
||||
ETHERTYPE_LOGICRAFT = 0x8148
|
||||
ETHERTYPE_LOOPBACK = 0x9000
|
||||
ETHERTYPE_MACSEC = 0x88e5
|
||||
ETHERTYPE_MATRA = 0x807a
|
||||
ETHERTYPE_MAX = 0xffff
|
||||
ETHERTYPE_MERIT = 0x807c
|
||||
|
@ -354,15 +423,16 @@ const (
|
|||
ETHERTYPE_NCD = 0x8149
|
||||
ETHERTYPE_NESTAR = 0x8006
|
||||
ETHERTYPE_NETBEUI = 0x8191
|
||||
ETHERTYPE_NHRP = 0x2001
|
||||
ETHERTYPE_NOVELL = 0x8138
|
||||
ETHERTYPE_NS = 0x600
|
||||
ETHERTYPE_NSAT = 0x601
|
||||
ETHERTYPE_NSCOMPAT = 0x807
|
||||
ETHERTYPE_NSH = 0x984f
|
||||
ETHERTYPE_NTRAILER = 0x10
|
||||
ETHERTYPE_OS9 = 0x7007
|
||||
ETHERTYPE_OS9NET = 0x7009
|
||||
ETHERTYPE_PACER = 0x80c6
|
||||
ETHERTYPE_PAE = 0x888e
|
||||
ETHERTYPE_PBB = 0x88e7
|
||||
ETHERTYPE_PCS = 0x4242
|
||||
ETHERTYPE_PLANNING = 0x8044
|
||||
|
@ -445,10 +515,11 @@ const (
|
|||
ETHER_VLAN_ENCAP_LEN = 0x4
|
||||
EVFILT_AIO = -0x3
|
||||
EVFILT_DEVICE = -0x8
|
||||
EVFILT_EXCEPT = -0x9
|
||||
EVFILT_PROC = -0x5
|
||||
EVFILT_READ = -0x1
|
||||
EVFILT_SIGNAL = -0x6
|
||||
EVFILT_SYSCOUNT = 0x8
|
||||
EVFILT_SYSCOUNT = 0x9
|
||||
EVFILT_TIMER = -0x7
|
||||
EVFILT_VNODE = -0x4
|
||||
EVFILT_WRITE = -0x2
|
||||
|
@ -470,7 +541,7 @@ const (
|
|||
EV_FLAG1 = 0x2000
|
||||
EV_ONESHOT = 0x10
|
||||
EV_RECEIPT = 0x40
|
||||
EV_SYSFLAGS = 0xf000
|
||||
EV_SYSFLAGS = 0xf800
|
||||
EXTA = 0x4b00
|
||||
EXTB = 0x9600
|
||||
EXTPROC = 0x800
|
||||
|
@ -736,6 +807,7 @@ const (
|
|||
IFT_VOICEOVERCABLE = 0xc6
|
||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
||||
IFT_VOICEOVERIP = 0x68
|
||||
IFT_WIREGUARD = 0xfb
|
||||
IFT_X213 = 0x5d
|
||||
IFT_X25 = 0x5
|
||||
IFT_X25DDN = 0x4
|
||||
|
@ -801,9 +873,11 @@ const (
|
|||
IPPROTO_RAW = 0xff
|
||||
IPPROTO_ROUTING = 0x2b
|
||||
IPPROTO_RSVP = 0x2e
|
||||
IPPROTO_SCTP = 0x84
|
||||
IPPROTO_TCP = 0x6
|
||||
IPPROTO_TP = 0x1d
|
||||
IPPROTO_UDP = 0x11
|
||||
IPPROTO_UDPLITE = 0x88
|
||||
IPV6_AUTH_LEVEL = 0x35
|
||||
IPV6_AUTOFLOWLABEL = 0x3b
|
||||
IPV6_CHECKSUM = 0x1a
|
||||
|
@ -910,6 +984,9 @@ const (
|
|||
IP_TTL = 0x4
|
||||
ISIG = 0x80
|
||||
ISTRIP = 0x20
|
||||
ITIMER_PROF = 0x2
|
||||
ITIMER_REAL = 0x0
|
||||
ITIMER_VIRTUAL = 0x1
|
||||
IUCLC = 0x1000
|
||||
IXANY = 0x800
|
||||
IXOFF = 0x400
|
||||
|
@ -981,6 +1058,19 @@ const (
|
|||
MNT_WAIT = 0x1
|
||||
MNT_WANTRDWR = 0x2000000
|
||||
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_CMSG_CLOEXEC = 0x800
|
||||
MSG_CTRUNC = 0x20
|
||||
|
@ -993,6 +1083,7 @@ const (
|
|||
MSG_PEEK = 0x2
|
||||
MSG_TRUNC = 0x10
|
||||
MSG_WAITALL = 0x40
|
||||
MSG_WAITFORONE = 0x1000
|
||||
MS_ASYNC = 0x1
|
||||
MS_INVALIDATE = 0x4
|
||||
MS_SYNC = 0x2
|
||||
|
@ -1001,7 +1092,8 @@ const (
|
|||
NET_RT_FLAGS = 0x2
|
||||
NET_RT_IFLIST = 0x3
|
||||
NET_RT_IFNAMES = 0x6
|
||||
NET_RT_MAXID = 0x7
|
||||
NET_RT_MAXID = 0x8
|
||||
NET_RT_SOURCE = 0x7
|
||||
NET_RT_STATS = 0x4
|
||||
NET_RT_TABLE = 0x5
|
||||
NFDBITS = 0x20
|
||||
|
@ -1018,6 +1110,7 @@ const (
|
|||
NOTE_FORK = 0x40000000
|
||||
NOTE_LINK = 0x10
|
||||
NOTE_LOWAT = 0x1
|
||||
NOTE_OOB = 0x4
|
||||
NOTE_PCTRLMASK = 0xf0000000
|
||||
NOTE_PDATAMASK = 0xfffff
|
||||
NOTE_RENAME = 0x20
|
||||
|
@ -1154,7 +1247,7 @@ const (
|
|||
RTM_PROPOSAL = 0x13
|
||||
RTM_REDIRECT = 0x6
|
||||
RTM_RESOLVE = 0xb
|
||||
RTM_RTTUNIT = 0xf4240
|
||||
RTM_SOURCE = 0x16
|
||||
RTM_VERSION = 0x5
|
||||
RTV_EXPIRE = 0x4
|
||||
RTV_HOPCOUNT = 0x2
|
||||
|
@ -1172,6 +1265,9 @@ const (
|
|||
RUSAGE_THREAD = 0x1
|
||||
SCM_RIGHTS = 0x1
|
||||
SCM_TIMESTAMP = 0x4
|
||||
SEEK_CUR = 0x1
|
||||
SEEK_END = 0x2
|
||||
SEEK_SET = 0x0
|
||||
SHUT_RD = 0x0
|
||||
SHUT_RDWR = 0x2
|
||||
SHUT_WR = 0x1
|
||||
|
@ -1188,30 +1284,30 @@ const (
|
|||
SIOCBRDGDELS = 0x80606942
|
||||
SIOCBRDGFLUSH = 0x80606948
|
||||
SIOCBRDGFRL = 0x808c694e
|
||||
SIOCBRDGGCACHE = 0xc0186941
|
||||
SIOCBRDGGFD = 0xc0186952
|
||||
SIOCBRDGGHT = 0xc0186951
|
||||
SIOCBRDGGCACHE = 0xc0146941
|
||||
SIOCBRDGGFD = 0xc0146952
|
||||
SIOCBRDGGHT = 0xc0146951
|
||||
SIOCBRDGGIFFLGS = 0xc060693e
|
||||
SIOCBRDGGMA = 0xc0186953
|
||||
SIOCBRDGGMA = 0xc0146953
|
||||
SIOCBRDGGPARAM = 0xc0406958
|
||||
SIOCBRDGGPRI = 0xc0186950
|
||||
SIOCBRDGGPRI = 0xc0146950
|
||||
SIOCBRDGGRL = 0xc030694f
|
||||
SIOCBRDGGTO = 0xc0186946
|
||||
SIOCBRDGGTO = 0xc0146946
|
||||
SIOCBRDGIFS = 0xc0606942
|
||||
SIOCBRDGRTS = 0xc0206943
|
||||
SIOCBRDGSADDR = 0xc1286944
|
||||
SIOCBRDGSCACHE = 0x80186940
|
||||
SIOCBRDGSFD = 0x80186952
|
||||
SIOCBRDGSHT = 0x80186951
|
||||
SIOCBRDGSCACHE = 0x80146940
|
||||
SIOCBRDGSFD = 0x80146952
|
||||
SIOCBRDGSHT = 0x80146951
|
||||
SIOCBRDGSIFCOST = 0x80606955
|
||||
SIOCBRDGSIFFLGS = 0x8060693f
|
||||
SIOCBRDGSIFPRIO = 0x80606954
|
||||
SIOCBRDGSIFPROT = 0x8060694a
|
||||
SIOCBRDGSMA = 0x80186953
|
||||
SIOCBRDGSPRI = 0x80186950
|
||||
SIOCBRDGSPROTO = 0x8018695a
|
||||
SIOCBRDGSTO = 0x80186945
|
||||
SIOCBRDGSTXHC = 0x80186959
|
||||
SIOCBRDGSMA = 0x80146953
|
||||
SIOCBRDGSPRI = 0x80146950
|
||||
SIOCBRDGSPROTO = 0x8014695a
|
||||
SIOCBRDGSTO = 0x80146945
|
||||
SIOCBRDGSTXHC = 0x80146959
|
||||
SIOCDELLABEL = 0x80206997
|
||||
SIOCDELMULTI = 0x80206932
|
||||
SIOCDIFADDR = 0x80206919
|
||||
|
@ -1264,6 +1360,7 @@ const (
|
|||
SIOCGPWE3CTRLWORD = 0xc02069dc
|
||||
SIOCGPWE3FAT = 0xc02069dd
|
||||
SIOCGPWE3NEIGHBOR = 0xc21869de
|
||||
SIOCGRXHPRIO = 0xc02069db
|
||||
SIOCGSPPPPARAMS = 0xc0206994
|
||||
SIOCGTXHPRIO = 0xc02069c6
|
||||
SIOCGUMBINFO = 0xc02069be
|
||||
|
@ -1310,17 +1407,13 @@ const (
|
|||
SIOCSPWE3CTRLWORD = 0x802069dc
|
||||
SIOCSPWE3FAT = 0x802069dd
|
||||
SIOCSPWE3NEIGHBOR = 0x821869de
|
||||
SIOCSRXHPRIO = 0x802069db
|
||||
SIOCSSPPPPARAMS = 0x80206993
|
||||
SIOCSTXHPRIO = 0x802069c5
|
||||
SIOCSUMBPARAM = 0x802069bf
|
||||
SIOCSVH = 0xc02069f5
|
||||
SIOCSVNETFLOWID = 0x802069c3
|
||||
SIOCSVNETID = 0x802069a6
|
||||
SIOCSWGDPID = 0xc018695b
|
||||
SIOCSWGMAXFLOW = 0xc0186960
|
||||
SIOCSWGMAXGROUP = 0xc018695d
|
||||
SIOCSWSDPID = 0x8018695c
|
||||
SIOCSWSPORTNO = 0xc060695f
|
||||
SOCK_CLOEXEC = 0x8000
|
||||
SOCK_DGRAM = 0x2
|
||||
SOCK_DNS = 0x1000
|
||||
|
@ -1335,6 +1428,7 @@ const (
|
|||
SO_BINDANY = 0x1000
|
||||
SO_BROADCAST = 0x20
|
||||
SO_DEBUG = 0x1
|
||||
SO_DOMAIN = 0x1024
|
||||
SO_DONTROUTE = 0x10
|
||||
SO_ERROR = 0x1007
|
||||
SO_KEEPALIVE = 0x8
|
||||
|
@ -1342,6 +1436,7 @@ const (
|
|||
SO_NETPROC = 0x1020
|
||||
SO_OOBINLINE = 0x100
|
||||
SO_PEERCRED = 0x1022
|
||||
SO_PROTOCOL = 0x1025
|
||||
SO_RCVBUF = 0x1002
|
||||
SO_RCVLOWAT = 0x1004
|
||||
SO_RCVTIMEO = 0x1006
|
||||
|
@ -1391,7 +1486,18 @@ const (
|
|||
TCOFLUSH = 0x2
|
||||
TCOOFF = 0x1
|
||||
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_MAXWIN = 0xffff
|
||||
TCP_MAX_SACK = 0x3
|
||||
|
@ -1400,6 +1506,7 @@ const (
|
|||
TCP_MSS = 0x200
|
||||
TCP_NODELAY = 0x1
|
||||
TCP_NOPUSH = 0x10
|
||||
TCP_SACKHOLE_LIMIT = 0x80
|
||||
TCP_SACK_ENABLE = 0x8
|
||||
TCSAFLUSH = 0x2
|
||||
TIMER_ABSTIME = 0x1
|
||||
|
@ -1768,7 +1875,7 @@ var signalList = [...]struct {
|
|||
{3, "SIGQUIT", "quit"},
|
||||
{4, "SIGILL", "illegal instruction"},
|
||||
{5, "SIGTRAP", "trace/BPT trap"},
|
||||
{6, "SIGABRT", "abort trap"},
|
||||
{6, "SIGIOT", "abort trap"},
|
||||
{7, "SIGEMT", "EMT trap"},
|
||||
{8, "SIGFPE", "floating point exception"},
|
||||
{9, "SIGKILL", "killed"},
|
||||
|
@ -1795,4 +1902,5 @@ var signalList = [...]struct {
|
|||
{30, "SIGUSR1", "user defined signal 1"},
|
||||
{31, "SIGUSR2", "user defined signal 2"},
|
||||
{32, "SIGTHR", "thread AST"},
|
||||
{28672, "SIGSTKSZ", "unknown signal"},
|
||||
}
|
||||
|
|
|
@ -112,6 +112,12 @@ const (
|
|||
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_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -140,6 +146,7 @@ const (
|
|||
BPF_OR = 0x40
|
||||
BPF_RELEASE = 0x30bb6
|
||||
BPF_RET = 0x6
|
||||
BPF_RND = 0xc0
|
||||
BPF_RSH = 0x70
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
|
@ -301,6 +308,8 @@ const (
|
|||
EMUL_ENABLED = 0x1
|
||||
EMUL_NATIVE = 0x2
|
||||
ENDRUNDISC = 0x9
|
||||
ETH64_8021_RSVD_MASK = 0xfffffffffff0
|
||||
ETH64_8021_RSVD_PREFIX = 0x180c2000000
|
||||
ETHERMIN = 0x2e
|
||||
ETHERMTU = 0x5dc
|
||||
ETHERTYPE_8023 = 0x4
|
||||
|
@ -353,6 +362,7 @@ const (
|
|||
ETHERTYPE_DN = 0x6003
|
||||
ETHERTYPE_DOGFIGHT = 0x1989
|
||||
ETHERTYPE_DSMD = 0x8039
|
||||
ETHERTYPE_EAPOL = 0x888e
|
||||
ETHERTYPE_ECMA = 0x803
|
||||
ETHERTYPE_ENCRYPT = 0x803d
|
||||
ETHERTYPE_ES = 0x805d
|
||||
|
@ -413,15 +423,16 @@ const (
|
|||
ETHERTYPE_NCD = 0x8149
|
||||
ETHERTYPE_NESTAR = 0x8006
|
||||
ETHERTYPE_NETBEUI = 0x8191
|
||||
ETHERTYPE_NHRP = 0x2001
|
||||
ETHERTYPE_NOVELL = 0x8138
|
||||
ETHERTYPE_NS = 0x600
|
||||
ETHERTYPE_NSAT = 0x601
|
||||
ETHERTYPE_NSCOMPAT = 0x807
|
||||
ETHERTYPE_NSH = 0x984f
|
||||
ETHERTYPE_NTRAILER = 0x10
|
||||
ETHERTYPE_OS9 = 0x7007
|
||||
ETHERTYPE_OS9NET = 0x7009
|
||||
ETHERTYPE_PACER = 0x80c6
|
||||
ETHERTYPE_PAE = 0x888e
|
||||
ETHERTYPE_PBB = 0x88e7
|
||||
ETHERTYPE_PCS = 0x4242
|
||||
ETHERTYPE_PLANNING = 0x8044
|
||||
|
@ -504,10 +515,11 @@ const (
|
|||
ETHER_VLAN_ENCAP_LEN = 0x4
|
||||
EVFILT_AIO = -0x3
|
||||
EVFILT_DEVICE = -0x8
|
||||
EVFILT_EXCEPT = -0x9
|
||||
EVFILT_PROC = -0x5
|
||||
EVFILT_READ = -0x1
|
||||
EVFILT_SIGNAL = -0x6
|
||||
EVFILT_SYSCOUNT = 0x8
|
||||
EVFILT_SYSCOUNT = 0x9
|
||||
EVFILT_TIMER = -0x7
|
||||
EVFILT_VNODE = -0x4
|
||||
EVFILT_WRITE = -0x2
|
||||
|
@ -529,7 +541,7 @@ const (
|
|||
EV_FLAG1 = 0x2000
|
||||
EV_ONESHOT = 0x10
|
||||
EV_RECEIPT = 0x40
|
||||
EV_SYSFLAGS = 0xf000
|
||||
EV_SYSFLAGS = 0xf800
|
||||
EXTA = 0x4b00
|
||||
EXTB = 0x9600
|
||||
EXTPROC = 0x800
|
||||
|
@ -795,6 +807,7 @@ const (
|
|||
IFT_VOICEOVERCABLE = 0xc6
|
||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
||||
IFT_VOICEOVERIP = 0x68
|
||||
IFT_WIREGUARD = 0xfb
|
||||
IFT_X213 = 0x5d
|
||||
IFT_X25 = 0x5
|
||||
IFT_X25DDN = 0x4
|
||||
|
@ -860,6 +873,7 @@ const (
|
|||
IPPROTO_RAW = 0xff
|
||||
IPPROTO_ROUTING = 0x2b
|
||||
IPPROTO_RSVP = 0x2e
|
||||
IPPROTO_SCTP = 0x84
|
||||
IPPROTO_TCP = 0x6
|
||||
IPPROTO_TP = 0x1d
|
||||
IPPROTO_UDP = 0x11
|
||||
|
@ -970,6 +984,9 @@ const (
|
|||
IP_TTL = 0x4
|
||||
ISIG = 0x80
|
||||
ISTRIP = 0x20
|
||||
ITIMER_PROF = 0x2
|
||||
ITIMER_REAL = 0x0
|
||||
ITIMER_VIRTUAL = 0x1
|
||||
IUCLC = 0x1000
|
||||
IXANY = 0x800
|
||||
IXOFF = 0x400
|
||||
|
@ -1041,6 +1058,19 @@ const (
|
|||
MNT_WAIT = 0x1
|
||||
MNT_WANTRDWR = 0x2000000
|
||||
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_CMSG_CLOEXEC = 0x800
|
||||
MSG_CTRUNC = 0x20
|
||||
|
@ -1053,6 +1083,7 @@ const (
|
|||
MSG_PEEK = 0x2
|
||||
MSG_TRUNC = 0x10
|
||||
MSG_WAITALL = 0x40
|
||||
MSG_WAITFORONE = 0x1000
|
||||
MS_ASYNC = 0x1
|
||||
MS_INVALIDATE = 0x4
|
||||
MS_SYNC = 0x2
|
||||
|
@ -1061,7 +1092,8 @@ const (
|
|||
NET_RT_FLAGS = 0x2
|
||||
NET_RT_IFLIST = 0x3
|
||||
NET_RT_IFNAMES = 0x6
|
||||
NET_RT_MAXID = 0x7
|
||||
NET_RT_MAXID = 0x8
|
||||
NET_RT_SOURCE = 0x7
|
||||
NET_RT_STATS = 0x4
|
||||
NET_RT_TABLE = 0x5
|
||||
NFDBITS = 0x20
|
||||
|
@ -1078,6 +1110,7 @@ const (
|
|||
NOTE_FORK = 0x40000000
|
||||
NOTE_LINK = 0x10
|
||||
NOTE_LOWAT = 0x1
|
||||
NOTE_OOB = 0x4
|
||||
NOTE_PCTRLMASK = 0xf0000000
|
||||
NOTE_PDATAMASK = 0xfffff
|
||||
NOTE_RENAME = 0x20
|
||||
|
@ -1214,7 +1247,7 @@ const (
|
|||
RTM_PROPOSAL = 0x13
|
||||
RTM_REDIRECT = 0x6
|
||||
RTM_RESOLVE = 0xb
|
||||
RTM_RTTUNIT = 0xf4240
|
||||
RTM_SOURCE = 0x16
|
||||
RTM_VERSION = 0x5
|
||||
RTV_EXPIRE = 0x4
|
||||
RTV_HOPCOUNT = 0x2
|
||||
|
@ -1232,6 +1265,9 @@ const (
|
|||
RUSAGE_THREAD = 0x1
|
||||
SCM_RIGHTS = 0x1
|
||||
SCM_TIMESTAMP = 0x4
|
||||
SEEK_CUR = 0x1
|
||||
SEEK_END = 0x2
|
||||
SEEK_SET = 0x0
|
||||
SHUT_RD = 0x0
|
||||
SHUT_RDWR = 0x2
|
||||
SHUT_WR = 0x1
|
||||
|
@ -1248,30 +1284,30 @@ const (
|
|||
SIOCBRDGDELS = 0x80606942
|
||||
SIOCBRDGFLUSH = 0x80606948
|
||||
SIOCBRDGFRL = 0x808c694e
|
||||
SIOCBRDGGCACHE = 0xc0186941
|
||||
SIOCBRDGGFD = 0xc0186952
|
||||
SIOCBRDGGHT = 0xc0186951
|
||||
SIOCBRDGGCACHE = 0xc0146941
|
||||
SIOCBRDGGFD = 0xc0146952
|
||||
SIOCBRDGGHT = 0xc0146951
|
||||
SIOCBRDGGIFFLGS = 0xc060693e
|
||||
SIOCBRDGGMA = 0xc0186953
|
||||
SIOCBRDGGMA = 0xc0146953
|
||||
SIOCBRDGGPARAM = 0xc0406958
|
||||
SIOCBRDGGPRI = 0xc0186950
|
||||
SIOCBRDGGPRI = 0xc0146950
|
||||
SIOCBRDGGRL = 0xc030694f
|
||||
SIOCBRDGGTO = 0xc0186946
|
||||
SIOCBRDGGTO = 0xc0146946
|
||||
SIOCBRDGIFS = 0xc0606942
|
||||
SIOCBRDGRTS = 0xc0206943
|
||||
SIOCBRDGSADDR = 0xc1286944
|
||||
SIOCBRDGSCACHE = 0x80186940
|
||||
SIOCBRDGSFD = 0x80186952
|
||||
SIOCBRDGSHT = 0x80186951
|
||||
SIOCBRDGSCACHE = 0x80146940
|
||||
SIOCBRDGSFD = 0x80146952
|
||||
SIOCBRDGSHT = 0x80146951
|
||||
SIOCBRDGSIFCOST = 0x80606955
|
||||
SIOCBRDGSIFFLGS = 0x8060693f
|
||||
SIOCBRDGSIFPRIO = 0x80606954
|
||||
SIOCBRDGSIFPROT = 0x8060694a
|
||||
SIOCBRDGSMA = 0x80186953
|
||||
SIOCBRDGSPRI = 0x80186950
|
||||
SIOCBRDGSPROTO = 0x8018695a
|
||||
SIOCBRDGSTO = 0x80186945
|
||||
SIOCBRDGSTXHC = 0x80186959
|
||||
SIOCBRDGSMA = 0x80146953
|
||||
SIOCBRDGSPRI = 0x80146950
|
||||
SIOCBRDGSPROTO = 0x8014695a
|
||||
SIOCBRDGSTO = 0x80146945
|
||||
SIOCBRDGSTXHC = 0x80146959
|
||||
SIOCDELLABEL = 0x80206997
|
||||
SIOCDELMULTI = 0x80206932
|
||||
SIOCDIFADDR = 0x80206919
|
||||
|
@ -1378,11 +1414,6 @@ const (
|
|||
SIOCSVH = 0xc02069f5
|
||||
SIOCSVNETFLOWID = 0x802069c3
|
||||
SIOCSVNETID = 0x802069a6
|
||||
SIOCSWGDPID = 0xc018695b
|
||||
SIOCSWGMAXFLOW = 0xc0186960
|
||||
SIOCSWGMAXGROUP = 0xc018695d
|
||||
SIOCSWSDPID = 0x8018695c
|
||||
SIOCSWSPORTNO = 0xc060695f
|
||||
SOCK_CLOEXEC = 0x8000
|
||||
SOCK_DGRAM = 0x2
|
||||
SOCK_DNS = 0x1000
|
||||
|
@ -1455,7 +1486,18 @@ const (
|
|||
TCOFLUSH = 0x2
|
||||
TCOOFF = 0x1
|
||||
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_MAXWIN = 0xffff
|
||||
TCP_MAX_SACK = 0x3
|
||||
|
@ -1833,7 +1875,7 @@ var signalList = [...]struct {
|
|||
{3, "SIGQUIT", "quit"},
|
||||
{4, "SIGILL", "illegal instruction"},
|
||||
{5, "SIGTRAP", "trace/BPT trap"},
|
||||
{6, "SIGABRT", "abort trap"},
|
||||
{6, "SIGIOT", "abort trap"},
|
||||
{7, "SIGEMT", "EMT trap"},
|
||||
{8, "SIGFPE", "floating point exception"},
|
||||
{9, "SIGKILL", "killed"},
|
||||
|
@ -1860,4 +1902,5 @@ var signalList = [...]struct {
|
|||
{30, "SIGUSR1", "user defined signal 1"},
|
||||
{31, "SIGUSR2", "user defined signal 2"},
|
||||
{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.
|
||||
|
||||
//go:build darwin && amd64 && go1.12
|
||||
// +build darwin,amd64,go1.12
|
||||
//go:build darwin && amd64
|
||||
// +build darwin,amd64
|
||||
|
||||
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
|
||||
|
||||
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) {
|
||||
_, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 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.
|
||||
|
||||
//go:build go1.12
|
||||
// +build go1.12
|
||||
|
||||
#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
|
||||
JMP libc_getgroups(SB)
|
||||
|
||||
|
@ -174,6 +177,18 @@ TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
|
|||
GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8
|
||||
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
|
||||
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