mirror of
https://github.com/containers/skopeo.git
synced 2025-04-28 19:24:24 +00:00
Merge pull request #2458 from TomSweeneyRedHat/dev/tsweeney/v1.17.0
Bump Skopeo to v1.17.0, c/common v0.61.0, c/image v5.33.0, c/storage v1.56.0
This commit is contained in:
commit
181429435e
17
go.mod
17
go.mod
@ -7,7 +7,7 @@ go 1.22.6
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Masterminds/semver/v3 v3.3.0
|
github.com/Masterminds/semver/v3 v3.3.0
|
||||||
github.com/containers/common v0.60.4
|
github.com/containers/common v0.61.0
|
||||||
github.com/containers/image/v5 v5.33.0
|
github.com/containers/image/v5 v5.33.0
|
||||||
github.com/containers/ocicrypt v1.2.0
|
github.com/containers/ocicrypt v1.2.0
|
||||||
github.com/containers/storage v1.56.0
|
github.com/containers/storage v1.56.0
|
||||||
@ -21,7 +21,7 @@ require (
|
|||||||
github.com/spf13/pflag v1.0.5
|
github.com/spf13/pflag v1.0.5
|
||||||
github.com/stretchr/testify v1.9.0
|
github.com/stretchr/testify v1.9.0
|
||||||
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c
|
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c
|
||||||
golang.org/x/term v0.25.0
|
golang.org/x/term v0.26.0
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -111,7 +111,6 @@ require (
|
|||||||
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect
|
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect
|
||||||
github.com/stefanberger/go-pkcs11uri v0.0.0-20230803200340-78284954bff6 // indirect
|
github.com/stefanberger/go-pkcs11uri v0.0.0-20230803200340-78284954bff6 // indirect
|
||||||
github.com/sylabs/sif/v2 v2.19.1 // indirect
|
github.com/sylabs/sif/v2 v2.19.1 // indirect
|
||||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect
|
|
||||||
github.com/tchap/go-patricia/v2 v2.3.1 // indirect
|
github.com/tchap/go-patricia/v2 v2.3.1 // indirect
|
||||||
github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect
|
github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect
|
||||||
github.com/ulikunitz/xz v0.5.12 // indirect
|
github.com/ulikunitz/xz v0.5.12 // indirect
|
||||||
@ -127,14 +126,14 @@ require (
|
|||||||
go.opentelemetry.io/otel v1.28.0 // indirect
|
go.opentelemetry.io/otel v1.28.0 // indirect
|
||||||
go.opentelemetry.io/otel/metric v1.28.0 // indirect
|
go.opentelemetry.io/otel/metric v1.28.0 // indirect
|
||||||
go.opentelemetry.io/otel/trace v1.28.0 // indirect
|
go.opentelemetry.io/otel/trace v1.28.0 // indirect
|
||||||
golang.org/x/crypto v0.28.0 // indirect
|
golang.org/x/crypto v0.29.0 // indirect
|
||||||
golang.org/x/mod v0.21.0 // indirect
|
golang.org/x/mod v0.21.0 // indirect
|
||||||
golang.org/x/net v0.28.0 // indirect
|
golang.org/x/net v0.30.0 // indirect
|
||||||
golang.org/x/oauth2 v0.23.0 // indirect
|
golang.org/x/oauth2 v0.23.0 // indirect
|
||||||
golang.org/x/sync v0.8.0 // indirect
|
golang.org/x/sync v0.9.0 // indirect
|
||||||
golang.org/x/sys v0.26.0 // indirect
|
golang.org/x/sys v0.27.0 // indirect
|
||||||
golang.org/x/text v0.19.0 // indirect
|
golang.org/x/text v0.20.0 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
|
||||||
google.golang.org/grpc v1.67.0 // indirect
|
google.golang.org/grpc v1.67.0 // indirect
|
||||||
google.golang.org/protobuf v1.34.2 // indirect
|
google.golang.org/protobuf v1.35.1 // indirect
|
||||||
)
|
)
|
||||||
|
46
go.sum
46
go.sum
@ -41,8 +41,8 @@ github.com/containerd/stargz-snapshotter/estargz v0.15.1 h1:eXJjw9RbkLFgioVaTG+G
|
|||||||
github.com/containerd/stargz-snapshotter/estargz v0.15.1/go.mod h1:gr2RNwukQ/S9Nv33Lt6UC7xEx58C+LHRdoqbEKjz1Kk=
|
github.com/containerd/stargz-snapshotter/estargz v0.15.1/go.mod h1:gr2RNwukQ/S9Nv33Lt6UC7xEx58C+LHRdoqbEKjz1Kk=
|
||||||
github.com/containerd/typeurl/v2 v2.2.0 h1:6NBDbQzr7I5LHgp34xAXYF5DOTQDn05X58lsPEmzLso=
|
github.com/containerd/typeurl/v2 v2.2.0 h1:6NBDbQzr7I5LHgp34xAXYF5DOTQDn05X58lsPEmzLso=
|
||||||
github.com/containerd/typeurl/v2 v2.2.0/go.mod h1:8XOOxnyatxSWuG8OfsZXVnAF4iZfedjS/8UHSPJnX4g=
|
github.com/containerd/typeurl/v2 v2.2.0/go.mod h1:8XOOxnyatxSWuG8OfsZXVnAF4iZfedjS/8UHSPJnX4g=
|
||||||
github.com/containers/common v0.60.4 h1:H5+LAMHPZEqX6vVNOQ+IguVsaFl8kbO/SZ/VPXjxhy0=
|
github.com/containers/common v0.61.0 h1:j/84PTqZIKKYy42OEJsZmjZ4g4Kq2ERuC3tqp2yWdh4=
|
||||||
github.com/containers/common v0.60.4/go.mod h1:I0upBi1qJX3QmzGbUOBN1LVP6RvkKhd3qQpZbQT+Q54=
|
github.com/containers/common v0.61.0/go.mod h1:NGRISq2vTFPSbhNqj6MLwyes4tWSlCnqbJg7R77B8xc=
|
||||||
github.com/containers/image/v5 v5.33.0 h1:6oPEFwTurf7pDTGw7TghqGs8K0+OvPtY/UyzU0B2DfE=
|
github.com/containers/image/v5 v5.33.0 h1:6oPEFwTurf7pDTGw7TghqGs8K0+OvPtY/UyzU0B2DfE=
|
||||||
github.com/containers/image/v5 v5.33.0/go.mod h1:T7HpASmvnp2H1u4cyckMvCzLuYgpD18dSmabSw0AcHk=
|
github.com/containers/image/v5 v5.33.0/go.mod h1:T7HpASmvnp2H1u4cyckMvCzLuYgpD18dSmabSw0AcHk=
|
||||||
github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 h1:Qzk5C6cYglewc+UyGf6lc8Mj2UaPTHy/iF2De0/77CA=
|
github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 h1:Qzk5C6cYglewc+UyGf6lc8Mj2UaPTHy/iF2De0/77CA=
|
||||||
@ -157,8 +157,8 @@ github.com/google/go-containerregistry v0.20.2/go.mod h1:z38EKdKh4h7IP2gSfUUqEva
|
|||||||
github.com/google/go-intervals v0.0.2 h1:FGrVEiUnTRKR8yE04qzXYaJMtnIYqobR5QbblK3ixcM=
|
github.com/google/go-intervals v0.0.2 h1:FGrVEiUnTRKR8yE04qzXYaJMtnIYqobR5QbblK3ixcM=
|
||||||
github.com/google/go-intervals v0.0.2/go.mod h1:MkaR3LNRfeKLPmqgJYs4E66z5InYjmCjbbr4TQlcT6Y=
|
github.com/google/go-intervals v0.0.2/go.mod h1:MkaR3LNRfeKLPmqgJYs4E66z5InYjmCjbbr4TQlcT6Y=
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k=
|
github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo=
|
||||||
github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
|
github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
|
||||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
@ -237,10 +237,10 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq
|
|||||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||||
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
|
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
|
||||||
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
||||||
github.com/onsi/ginkgo/v2 v2.20.0 h1:PE84V2mHqoT1sglvHc8ZdQtPcwmvvt29WLEEO3xmdZw=
|
github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM=
|
||||||
github.com/onsi/ginkgo/v2 v2.20.0/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI=
|
github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
|
||||||
github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
|
github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
|
||||||
github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
|
github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
|
||||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||||
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
|
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
|
||||||
@ -317,8 +317,6 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT
|
|||||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
github.com/sylabs/sif/v2 v2.19.1 h1:1eeMmFc8elqJe60ZiWwXgL3gMheb0IP4GmNZ4q0IEA0=
|
github.com/sylabs/sif/v2 v2.19.1 h1:1eeMmFc8elqJe60ZiWwXgL3gMheb0IP4GmNZ4q0IEA0=
|
||||||
github.com/sylabs/sif/v2 v2.19.1/go.mod h1:U1SUhvl8X1JIxAylC0DYz1fa/Xba6EMZD1dGPGBH83E=
|
github.com/sylabs/sif/v2 v2.19.1/go.mod h1:U1SUhvl8X1JIxAylC0DYz1fa/Xba6EMZD1dGPGBH83E=
|
||||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI=
|
|
||||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
|
||||||
github.com/tchap/go-patricia/v2 v2.3.1 h1:6rQp39lgIYZ+MHmdEq4xzuk1t7OdC35z/xm0BGhTkes=
|
github.com/tchap/go-patricia/v2 v2.3.1 h1:6rQp39lgIYZ+MHmdEq4xzuk1t7OdC35z/xm0BGhTkes=
|
||||||
github.com/tchap/go-patricia/v2 v2.3.1/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k=
|
github.com/tchap/go-patricia/v2 v2.3.1/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k=
|
||||||
github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0=
|
github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0=
|
||||||
@ -379,8 +377,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
|
|||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
|
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
|
||||||
golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
|
golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ=
|
||||||
golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
|
golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY=
|
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY=
|
||||||
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8=
|
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8=
|
||||||
@ -406,8 +404,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
|
|||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||||
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
|
golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
|
||||||
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
|
golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
|
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
|
||||||
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||||
@ -418,8 +416,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
|
golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
|
||||||
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -432,23 +430,23 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
|
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
|
||||||
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||||
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
|
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
|
||||||
golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24=
|
golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU=
|
||||||
golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M=
|
golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
|
golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
|
||||||
golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
|
||||||
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
|
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
|
||||||
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
@ -493,8 +491,8 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
|
|||||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||||
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
|
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
|
||||||
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
|
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||||
|
117
vendor/github.com/containers/common/pkg/capabilities/capabilities.go
generated
vendored
117
vendor/github.com/containers/common/pkg/capabilities/capabilities.go
generated
vendored
@ -9,20 +9,13 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"slices"
|
"slices"
|
||||||
"sort"
|
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/syndtr/gocapability/capability"
|
"github.com/moby/sys/capability"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// Used internally and populated during init().
|
|
||||||
capabilityList []string
|
|
||||||
|
|
||||||
// Used internally and populated during init().
|
|
||||||
capsList []capability.Cap
|
|
||||||
|
|
||||||
// ErrUnknownCapability is thrown when an unknown capability is processed.
|
// ErrUnknownCapability is thrown when an unknown capability is processed.
|
||||||
ErrUnknownCapability = errors.New("unknown capability")
|
ErrUnknownCapability = errors.New("unknown capability")
|
||||||
|
|
||||||
@ -35,67 +28,67 @@ var (
|
|||||||
// Useful on the CLI for `--cap-add=all` etc.
|
// Useful on the CLI for `--cap-add=all` etc.
|
||||||
const All = "ALL"
|
const All = "ALL"
|
||||||
|
|
||||||
func getCapName(c capability.Cap) string {
|
func capName(c capability.Cap) string {
|
||||||
return "CAP_" + strings.ToUpper(c.String())
|
return "CAP_" + strings.ToUpper(c.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
// capStrList returns all capabilities supported by the currently running kernel,
|
||||||
last := capability.CAP_LAST_CAP
|
// or an error if the list can not be obtained.
|
||||||
// hack for RHEL6 which has no /proc/sys/kernel/cap_last_cap
|
var capStrList = sync.OnceValues(func() ([]string, error) {
|
||||||
if last == capability.Cap(63) {
|
list, err := capability.ListSupported()
|
||||||
last = capability.CAP_BLOCK_SUSPEND
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
for _, cap := range capability.List() {
|
caps := make([]string, len(list))
|
||||||
if cap > last {
|
for i, c := range list {
|
||||||
|
caps[i] = capName(c)
|
||||||
|
}
|
||||||
|
slices.Sort(caps)
|
||||||
|
return caps, nil
|
||||||
|
})
|
||||||
|
|
||||||
|
// BoundingSet returns the capabilities in the current bounding set.
|
||||||
|
func BoundingSet() ([]string, error) {
|
||||||
|
return boundingSet()
|
||||||
|
}
|
||||||
|
|
||||||
|
var boundingSet = sync.OnceValues(func() ([]string, error) {
|
||||||
|
currentCaps, err := capability.NewPid2(0)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
err = currentCaps.Load()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
list, err := capability.ListSupported()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var r []string
|
||||||
|
for _, c := range list {
|
||||||
|
if !currentCaps.Get(capability.BOUNDING, c) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
capsList = append(capsList, cap)
|
r = append(r, capName(c))
|
||||||
capabilityList = append(capabilityList, getCapName(cap))
|
|
||||||
sort.Strings(capabilityList)
|
|
||||||
}
|
}
|
||||||
}
|
slices.Sort(r)
|
||||||
|
return r, nil
|
||||||
|
})
|
||||||
|
|
||||||
var (
|
// AllCapabilities returns all capabilities supported by the running kernel.
|
||||||
boundingSetOnce sync.Once
|
|
||||||
boundingSetRet []string
|
|
||||||
boundingSetErr error
|
|
||||||
)
|
|
||||||
|
|
||||||
// BoundingSet returns the capabilities in the current bounding set
|
|
||||||
func BoundingSet() ([]string, error) {
|
|
||||||
boundingSetOnce.Do(func() {
|
|
||||||
currentCaps, err := capability.NewPid2(0)
|
|
||||||
if err != nil {
|
|
||||||
boundingSetErr = err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
err = currentCaps.Load()
|
|
||||||
if err != nil {
|
|
||||||
boundingSetErr = err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var r []string
|
|
||||||
for _, c := range capsList {
|
|
||||||
if !currentCaps.Get(capability.BOUNDING, c) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
r = append(r, getCapName(c))
|
|
||||||
}
|
|
||||||
boundingSetRet = r
|
|
||||||
sort.Strings(boundingSetRet)
|
|
||||||
boundingSetErr = err
|
|
||||||
})
|
|
||||||
return boundingSetRet, boundingSetErr
|
|
||||||
}
|
|
||||||
|
|
||||||
// AllCapabilities returns all known capabilities.
|
|
||||||
func AllCapabilities() []string {
|
func AllCapabilities() []string {
|
||||||
return capabilityList
|
list, _ := capStrList()
|
||||||
|
return list
|
||||||
}
|
}
|
||||||
|
|
||||||
// NormalizeCapabilities normalizes caps by adding a "CAP_" prefix (if not yet
|
// NormalizeCapabilities normalizes caps by adding a "CAP_" prefix (if not yet
|
||||||
// present).
|
// present).
|
||||||
func NormalizeCapabilities(caps []string) ([]string, error) {
|
func NormalizeCapabilities(caps []string) ([]string, error) {
|
||||||
|
all, err := capStrList()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
normalized := make([]string, 0, len(caps))
|
normalized := make([]string, 0, len(caps))
|
||||||
for _, c := range caps {
|
for _, c := range caps {
|
||||||
c = strings.ToUpper(c)
|
c = strings.ToUpper(c)
|
||||||
@ -106,19 +99,23 @@ func NormalizeCapabilities(caps []string) ([]string, error) {
|
|||||||
if !strings.HasPrefix(c, "CAP_") {
|
if !strings.HasPrefix(c, "CAP_") {
|
||||||
c = "CAP_" + c
|
c = "CAP_" + c
|
||||||
}
|
}
|
||||||
if !slices.Contains(capabilityList, c) {
|
if !slices.Contains(all, c) {
|
||||||
return nil, fmt.Errorf("%q: %w", c, ErrUnknownCapability)
|
return nil, fmt.Errorf("%q: %w", c, ErrUnknownCapability)
|
||||||
}
|
}
|
||||||
normalized = append(normalized, c)
|
normalized = append(normalized, c)
|
||||||
}
|
}
|
||||||
sort.Strings(normalized)
|
slices.Sort(normalized)
|
||||||
return normalized, nil
|
return normalized, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValidateCapabilities validates if caps only contains valid capabilities.
|
// ValidateCapabilities validates if caps only contains valid capabilities.
|
||||||
func ValidateCapabilities(caps []string) error {
|
func ValidateCapabilities(caps []string) error {
|
||||||
|
all, err := capStrList()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
for _, c := range caps {
|
for _, c := range caps {
|
||||||
if !slices.Contains(capabilityList, c) {
|
if !slices.Contains(all, c) {
|
||||||
return fmt.Errorf("%q: %w", c, ErrUnknownCapability)
|
return fmt.Errorf("%q: %w", c, ErrUnknownCapability)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -155,7 +152,7 @@ func MergeCapabilities(base, adds, drops []string) ([]string, error) {
|
|||||||
return nil, errors.New("adding all caps and removing all caps not allowed")
|
return nil, errors.New("adding all caps and removing all caps not allowed")
|
||||||
}
|
}
|
||||||
// "Drop" all capabilities; return what's in capAdd instead
|
// "Drop" all capabilities; return what's in capAdd instead
|
||||||
sort.Strings(capAdd)
|
slices.Sort(capAdd)
|
||||||
return capAdd, nil
|
return capAdd, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,6 +192,6 @@ func MergeCapabilities(base, adds, drops []string) ([]string, error) {
|
|||||||
}
|
}
|
||||||
caps = append(caps, cap)
|
caps = append(caps, cap)
|
||||||
}
|
}
|
||||||
sort.Strings(caps)
|
slices.Sort(caps)
|
||||||
return caps, nil
|
return caps, nil
|
||||||
}
|
}
|
||||||
|
2
vendor/github.com/containers/common/pkg/report/camelcase/camelcase.go
generated
vendored
2
vendor/github.com/containers/common/pkg/report/camelcase/camelcase.go
generated
vendored
@ -73,7 +73,7 @@ func Split(src string) (entries []string) {
|
|||||||
}
|
}
|
||||||
// handle upper case -> lower case sequences, e.g.
|
// handle upper case -> lower case sequences, e.g.
|
||||||
// "PDFL", "oader" -> "PDF", "Loader"
|
// "PDFL", "oader" -> "PDF", "Loader"
|
||||||
for i := 0; i < len(runes)-1; i++ {
|
for i := range len(runes) - 1 {
|
||||||
if unicode.IsUpper(runes[i][0]) && unicode.IsLower(runes[i+1][0]) {
|
if unicode.IsUpper(runes[i][0]) && unicode.IsLower(runes[i+1][0]) {
|
||||||
runes[i+1] = append([]rune{runes[i][len(runes[i])-1]}, runes[i+1]...)
|
runes[i+1] = append([]rune{runes[i][len(runes[i])-1]}, runes[i+1]...)
|
||||||
runes[i] = runes[i][:len(runes[i])-1]
|
runes[i] = runes[i][:len(runes[i])-1]
|
||||||
|
2
vendor/github.com/containers/common/pkg/report/template.go
generated
vendored
2
vendor/github.com/containers/common/pkg/report/template.go
generated
vendored
@ -101,7 +101,7 @@ func Headers(object any, overrides map[string]string) []map[string]string {
|
|||||||
|
|
||||||
// Column header will be field name upper-cased.
|
// Column header will be field name upper-cased.
|
||||||
headers := make(map[string]string, value.NumField())
|
headers := make(map[string]string, value.NumField())
|
||||||
for i := 0; i < value.Type().NumField(); i++ {
|
for i := range value.Type().NumField() {
|
||||||
field := value.Type().Field(i)
|
field := value.Type().Field(i)
|
||||||
// Recurse to find field names from promoted structs
|
// Recurse to find field names from promoted structs
|
||||||
if field.Type.Kind() == reflect.Struct && field.Anonymous {
|
if field.Type.Kind() == reflect.Struct && field.Anonymous {
|
||||||
|
24
vendor/github.com/syndtr/gocapability/LICENSE
generated
vendored
24
vendor/github.com/syndtr/gocapability/LICENSE
generated
vendored
@ -1,24 +0,0 @@
|
|||||||
Copyright 2013 Suryandaru Triandana <syndtr@gmail.com>
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
133
vendor/github.com/syndtr/gocapability/capability/capability.go
generated
vendored
133
vendor/github.com/syndtr/gocapability/capability/capability.go
generated
vendored
@ -1,133 +0,0 @@
|
|||||||
// Copyright (c) 2013, Suryandaru Triandana <syndtr@gmail.com>
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
// Package capability provides utilities for manipulating POSIX capabilities.
|
|
||||||
package capability
|
|
||||||
|
|
||||||
type Capabilities interface {
|
|
||||||
// Get check whether a capability present in the given
|
|
||||||
// capabilities set. The 'which' value should be one of EFFECTIVE,
|
|
||||||
// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.
|
|
||||||
Get(which CapType, what Cap) bool
|
|
||||||
|
|
||||||
// Empty check whether all capability bits of the given capabilities
|
|
||||||
// set are zero. The 'which' value should be one of EFFECTIVE,
|
|
||||||
// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.
|
|
||||||
Empty(which CapType) bool
|
|
||||||
|
|
||||||
// Full check whether all capability bits of the given capabilities
|
|
||||||
// set are one. The 'which' value should be one of EFFECTIVE,
|
|
||||||
// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.
|
|
||||||
Full(which CapType) bool
|
|
||||||
|
|
||||||
// Set sets capabilities of the given capabilities sets. The
|
|
||||||
// 'which' value should be one or combination (OR'ed) of EFFECTIVE,
|
|
||||||
// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.
|
|
||||||
Set(which CapType, caps ...Cap)
|
|
||||||
|
|
||||||
// Unset unsets capabilities of the given capabilities sets. The
|
|
||||||
// 'which' value should be one or combination (OR'ed) of EFFECTIVE,
|
|
||||||
// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.
|
|
||||||
Unset(which CapType, caps ...Cap)
|
|
||||||
|
|
||||||
// Fill sets all bits of the given capabilities kind to one. The
|
|
||||||
// 'kind' value should be one or combination (OR'ed) of CAPS,
|
|
||||||
// BOUNDS or AMBS.
|
|
||||||
Fill(kind CapType)
|
|
||||||
|
|
||||||
// Clear sets all bits of the given capabilities kind to zero. The
|
|
||||||
// 'kind' value should be one or combination (OR'ed) of CAPS,
|
|
||||||
// BOUNDS or AMBS.
|
|
||||||
Clear(kind CapType)
|
|
||||||
|
|
||||||
// String return current capabilities state of the given capabilities
|
|
||||||
// set as string. The 'which' value should be one of EFFECTIVE,
|
|
||||||
// PERMITTED, INHERITABLE BOUNDING or AMBIENT
|
|
||||||
StringCap(which CapType) string
|
|
||||||
|
|
||||||
// String return current capabilities state as string.
|
|
||||||
String() string
|
|
||||||
|
|
||||||
// Load load actual capabilities value. This will overwrite all
|
|
||||||
// outstanding changes.
|
|
||||||
Load() error
|
|
||||||
|
|
||||||
// Apply apply the capabilities settings, so all changes will take
|
|
||||||
// effect.
|
|
||||||
Apply(kind CapType) error
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewPid initializes a new Capabilities object for given pid when
|
|
||||||
// it is nonzero, or for the current process if pid is 0.
|
|
||||||
//
|
|
||||||
// Deprecated: Replace with NewPid2. For example, replace:
|
|
||||||
//
|
|
||||||
// c, err := NewPid(0)
|
|
||||||
// if err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// with:
|
|
||||||
//
|
|
||||||
// c, err := NewPid2(0)
|
|
||||||
// if err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
// err = c.Load()
|
|
||||||
// if err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
func NewPid(pid int) (Capabilities, error) {
|
|
||||||
c, err := newPid(pid)
|
|
||||||
if err != nil {
|
|
||||||
return c, err
|
|
||||||
}
|
|
||||||
err = c.Load()
|
|
||||||
return c, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewPid2 initializes a new Capabilities object for given pid when
|
|
||||||
// it is nonzero, or for the current process if pid is 0. This
|
|
||||||
// does not load the process's current capabilities; to do that you
|
|
||||||
// must call Load explicitly.
|
|
||||||
func NewPid2(pid int) (Capabilities, error) {
|
|
||||||
return newPid(pid)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewFile initializes a new Capabilities object for given file path.
|
|
||||||
//
|
|
||||||
// Deprecated: Replace with NewFile2. For example, replace:
|
|
||||||
//
|
|
||||||
// c, err := NewFile(path)
|
|
||||||
// if err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// with:
|
|
||||||
//
|
|
||||||
// c, err := NewFile2(path)
|
|
||||||
// if err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
// err = c.Load()
|
|
||||||
// if err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
func NewFile(path string) (Capabilities, error) {
|
|
||||||
c, err := newFile(path)
|
|
||||||
if err != nil {
|
|
||||||
return c, err
|
|
||||||
}
|
|
||||||
err = c.Load()
|
|
||||||
return c, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewFile2 creates a new initialized Capabilities object for given
|
|
||||||
// file path. This does not load the process's current capabilities;
|
|
||||||
// to do that you must call Load explicitly.
|
|
||||||
func NewFile2(path string) (Capabilities, error) {
|
|
||||||
return newFile(path)
|
|
||||||
}
|
|
642
vendor/github.com/syndtr/gocapability/capability/capability_linux.go
generated
vendored
642
vendor/github.com/syndtr/gocapability/capability/capability_linux.go
generated
vendored
@ -1,642 +0,0 @@
|
|||||||
// Copyright (c) 2013, Suryandaru Triandana <syndtr@gmail.com>
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
package capability
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
var errUnknownVers = errors.New("unknown capability version")
|
|
||||||
|
|
||||||
const (
|
|
||||||
linuxCapVer1 = 0x19980330
|
|
||||||
linuxCapVer2 = 0x20071026
|
|
||||||
linuxCapVer3 = 0x20080522
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
capVers uint32
|
|
||||||
capLastCap Cap
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
var hdr capHeader
|
|
||||||
capget(&hdr, nil)
|
|
||||||
capVers = hdr.version
|
|
||||||
|
|
||||||
if initLastCap() == nil {
|
|
||||||
CAP_LAST_CAP = capLastCap
|
|
||||||
if capLastCap > 31 {
|
|
||||||
capUpperMask = (uint32(1) << (uint(capLastCap) - 31)) - 1
|
|
||||||
} else {
|
|
||||||
capUpperMask = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func initLastCap() error {
|
|
||||||
if capLastCap != 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
f, err := os.Open("/proc/sys/kernel/cap_last_cap")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
|
|
||||||
var b []byte = make([]byte, 11)
|
|
||||||
_, err = f.Read(b)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Sscanf(string(b), "%d", &capLastCap)
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func mkStringCap(c Capabilities, which CapType) (ret string) {
|
|
||||||
for i, first := Cap(0), true; i <= CAP_LAST_CAP; i++ {
|
|
||||||
if !c.Get(which, i) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if first {
|
|
||||||
first = false
|
|
||||||
} else {
|
|
||||||
ret += ", "
|
|
||||||
}
|
|
||||||
ret += i.String()
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func mkString(c Capabilities, max CapType) (ret string) {
|
|
||||||
ret = "{"
|
|
||||||
for i := CapType(1); i <= max; i <<= 1 {
|
|
||||||
ret += " " + i.String() + "=\""
|
|
||||||
if c.Empty(i) {
|
|
||||||
ret += "empty"
|
|
||||||
} else if c.Full(i) {
|
|
||||||
ret += "full"
|
|
||||||
} else {
|
|
||||||
ret += c.StringCap(i)
|
|
||||||
}
|
|
||||||
ret += "\""
|
|
||||||
}
|
|
||||||
ret += " }"
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func newPid(pid int) (c Capabilities, err error) {
|
|
||||||
switch capVers {
|
|
||||||
case linuxCapVer1:
|
|
||||||
p := new(capsV1)
|
|
||||||
p.hdr.version = capVers
|
|
||||||
p.hdr.pid = int32(pid)
|
|
||||||
c = p
|
|
||||||
case linuxCapVer2, linuxCapVer3:
|
|
||||||
p := new(capsV3)
|
|
||||||
p.hdr.version = capVers
|
|
||||||
p.hdr.pid = int32(pid)
|
|
||||||
c = p
|
|
||||||
default:
|
|
||||||
err = errUnknownVers
|
|
||||||
return
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
type capsV1 struct {
|
|
||||||
hdr capHeader
|
|
||||||
data capData
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV1) Get(which CapType, what Cap) bool {
|
|
||||||
if what > 32 {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
switch which {
|
|
||||||
case EFFECTIVE:
|
|
||||||
return (1<<uint(what))&c.data.effective != 0
|
|
||||||
case PERMITTED:
|
|
||||||
return (1<<uint(what))&c.data.permitted != 0
|
|
||||||
case INHERITABLE:
|
|
||||||
return (1<<uint(what))&c.data.inheritable != 0
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV1) getData(which CapType) (ret uint32) {
|
|
||||||
switch which {
|
|
||||||
case EFFECTIVE:
|
|
||||||
ret = c.data.effective
|
|
||||||
case PERMITTED:
|
|
||||||
ret = c.data.permitted
|
|
||||||
case INHERITABLE:
|
|
||||||
ret = c.data.inheritable
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV1) Empty(which CapType) bool {
|
|
||||||
return c.getData(which) == 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV1) Full(which CapType) bool {
|
|
||||||
return (c.getData(which) & 0x7fffffff) == 0x7fffffff
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV1) Set(which CapType, caps ...Cap) {
|
|
||||||
for _, what := range caps {
|
|
||||||
if what > 32 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if which&EFFECTIVE != 0 {
|
|
||||||
c.data.effective |= 1 << uint(what)
|
|
||||||
}
|
|
||||||
if which&PERMITTED != 0 {
|
|
||||||
c.data.permitted |= 1 << uint(what)
|
|
||||||
}
|
|
||||||
if which&INHERITABLE != 0 {
|
|
||||||
c.data.inheritable |= 1 << uint(what)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV1) Unset(which CapType, caps ...Cap) {
|
|
||||||
for _, what := range caps {
|
|
||||||
if what > 32 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if which&EFFECTIVE != 0 {
|
|
||||||
c.data.effective &= ^(1 << uint(what))
|
|
||||||
}
|
|
||||||
if which&PERMITTED != 0 {
|
|
||||||
c.data.permitted &= ^(1 << uint(what))
|
|
||||||
}
|
|
||||||
if which&INHERITABLE != 0 {
|
|
||||||
c.data.inheritable &= ^(1 << uint(what))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV1) Fill(kind CapType) {
|
|
||||||
if kind&CAPS == CAPS {
|
|
||||||
c.data.effective = 0x7fffffff
|
|
||||||
c.data.permitted = 0x7fffffff
|
|
||||||
c.data.inheritable = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV1) Clear(kind CapType) {
|
|
||||||
if kind&CAPS == CAPS {
|
|
||||||
c.data.effective = 0
|
|
||||||
c.data.permitted = 0
|
|
||||||
c.data.inheritable = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV1) StringCap(which CapType) (ret string) {
|
|
||||||
return mkStringCap(c, which)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV1) String() (ret string) {
|
|
||||||
return mkString(c, BOUNDING)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV1) Load() (err error) {
|
|
||||||
return capget(&c.hdr, &c.data)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV1) Apply(kind CapType) error {
|
|
||||||
if kind&CAPS == CAPS {
|
|
||||||
return capset(&c.hdr, &c.data)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type capsV3 struct {
|
|
||||||
hdr capHeader
|
|
||||||
data [2]capData
|
|
||||||
bounds [2]uint32
|
|
||||||
ambient [2]uint32
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV3) Get(which CapType, what Cap) bool {
|
|
||||||
var i uint
|
|
||||||
if what > 31 {
|
|
||||||
i = uint(what) >> 5
|
|
||||||
what %= 32
|
|
||||||
}
|
|
||||||
|
|
||||||
switch which {
|
|
||||||
case EFFECTIVE:
|
|
||||||
return (1<<uint(what))&c.data[i].effective != 0
|
|
||||||
case PERMITTED:
|
|
||||||
return (1<<uint(what))&c.data[i].permitted != 0
|
|
||||||
case INHERITABLE:
|
|
||||||
return (1<<uint(what))&c.data[i].inheritable != 0
|
|
||||||
case BOUNDING:
|
|
||||||
return (1<<uint(what))&c.bounds[i] != 0
|
|
||||||
case AMBIENT:
|
|
||||||
return (1<<uint(what))&c.ambient[i] != 0
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV3) getData(which CapType, dest []uint32) {
|
|
||||||
switch which {
|
|
||||||
case EFFECTIVE:
|
|
||||||
dest[0] = c.data[0].effective
|
|
||||||
dest[1] = c.data[1].effective
|
|
||||||
case PERMITTED:
|
|
||||||
dest[0] = c.data[0].permitted
|
|
||||||
dest[1] = c.data[1].permitted
|
|
||||||
case INHERITABLE:
|
|
||||||
dest[0] = c.data[0].inheritable
|
|
||||||
dest[1] = c.data[1].inheritable
|
|
||||||
case BOUNDING:
|
|
||||||
dest[0] = c.bounds[0]
|
|
||||||
dest[1] = c.bounds[1]
|
|
||||||
case AMBIENT:
|
|
||||||
dest[0] = c.ambient[0]
|
|
||||||
dest[1] = c.ambient[1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV3) Empty(which CapType) bool {
|
|
||||||
var data [2]uint32
|
|
||||||
c.getData(which, data[:])
|
|
||||||
return data[0] == 0 && data[1] == 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV3) Full(which CapType) bool {
|
|
||||||
var data [2]uint32
|
|
||||||
c.getData(which, data[:])
|
|
||||||
if (data[0] & 0xffffffff) != 0xffffffff {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return (data[1] & capUpperMask) == capUpperMask
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV3) Set(which CapType, caps ...Cap) {
|
|
||||||
for _, what := range caps {
|
|
||||||
var i uint
|
|
||||||
if what > 31 {
|
|
||||||
i = uint(what) >> 5
|
|
||||||
what %= 32
|
|
||||||
}
|
|
||||||
|
|
||||||
if which&EFFECTIVE != 0 {
|
|
||||||
c.data[i].effective |= 1 << uint(what)
|
|
||||||
}
|
|
||||||
if which&PERMITTED != 0 {
|
|
||||||
c.data[i].permitted |= 1 << uint(what)
|
|
||||||
}
|
|
||||||
if which&INHERITABLE != 0 {
|
|
||||||
c.data[i].inheritable |= 1 << uint(what)
|
|
||||||
}
|
|
||||||
if which&BOUNDING != 0 {
|
|
||||||
c.bounds[i] |= 1 << uint(what)
|
|
||||||
}
|
|
||||||
if which&AMBIENT != 0 {
|
|
||||||
c.ambient[i] |= 1 << uint(what)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV3) Unset(which CapType, caps ...Cap) {
|
|
||||||
for _, what := range caps {
|
|
||||||
var i uint
|
|
||||||
if what > 31 {
|
|
||||||
i = uint(what) >> 5
|
|
||||||
what %= 32
|
|
||||||
}
|
|
||||||
|
|
||||||
if which&EFFECTIVE != 0 {
|
|
||||||
c.data[i].effective &= ^(1 << uint(what))
|
|
||||||
}
|
|
||||||
if which&PERMITTED != 0 {
|
|
||||||
c.data[i].permitted &= ^(1 << uint(what))
|
|
||||||
}
|
|
||||||
if which&INHERITABLE != 0 {
|
|
||||||
c.data[i].inheritable &= ^(1 << uint(what))
|
|
||||||
}
|
|
||||||
if which&BOUNDING != 0 {
|
|
||||||
c.bounds[i] &= ^(1 << uint(what))
|
|
||||||
}
|
|
||||||
if which&AMBIENT != 0 {
|
|
||||||
c.ambient[i] &= ^(1 << uint(what))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV3) Fill(kind CapType) {
|
|
||||||
if kind&CAPS == CAPS {
|
|
||||||
c.data[0].effective = 0xffffffff
|
|
||||||
c.data[0].permitted = 0xffffffff
|
|
||||||
c.data[0].inheritable = 0
|
|
||||||
c.data[1].effective = 0xffffffff
|
|
||||||
c.data[1].permitted = 0xffffffff
|
|
||||||
c.data[1].inheritable = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
if kind&BOUNDS == BOUNDS {
|
|
||||||
c.bounds[0] = 0xffffffff
|
|
||||||
c.bounds[1] = 0xffffffff
|
|
||||||
}
|
|
||||||
if kind&AMBS == AMBS {
|
|
||||||
c.ambient[0] = 0xffffffff
|
|
||||||
c.ambient[1] = 0xffffffff
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV3) Clear(kind CapType) {
|
|
||||||
if kind&CAPS == CAPS {
|
|
||||||
c.data[0].effective = 0
|
|
||||||
c.data[0].permitted = 0
|
|
||||||
c.data[0].inheritable = 0
|
|
||||||
c.data[1].effective = 0
|
|
||||||
c.data[1].permitted = 0
|
|
||||||
c.data[1].inheritable = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
if kind&BOUNDS == BOUNDS {
|
|
||||||
c.bounds[0] = 0
|
|
||||||
c.bounds[1] = 0
|
|
||||||
}
|
|
||||||
if kind&AMBS == AMBS {
|
|
||||||
c.ambient[0] = 0
|
|
||||||
c.ambient[1] = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV3) StringCap(which CapType) (ret string) {
|
|
||||||
return mkStringCap(c, which)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV3) String() (ret string) {
|
|
||||||
return mkString(c, BOUNDING)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV3) Load() (err error) {
|
|
||||||
err = capget(&c.hdr, &c.data[0])
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var status_path string
|
|
||||||
|
|
||||||
if c.hdr.pid == 0 {
|
|
||||||
status_path = fmt.Sprintf("/proc/self/status")
|
|
||||||
} else {
|
|
||||||
status_path = fmt.Sprintf("/proc/%d/status", c.hdr.pid)
|
|
||||||
}
|
|
||||||
|
|
||||||
f, err := os.Open(status_path)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
b := bufio.NewReader(f)
|
|
||||||
for {
|
|
||||||
line, e := b.ReadString('\n')
|
|
||||||
if e != nil {
|
|
||||||
if e != io.EOF {
|
|
||||||
err = e
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if strings.HasPrefix(line, "CapB") {
|
|
||||||
fmt.Sscanf(line[4:], "nd: %08x%08x", &c.bounds[1], &c.bounds[0])
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if strings.HasPrefix(line, "CapA") {
|
|
||||||
fmt.Sscanf(line[4:], "mb: %08x%08x", &c.ambient[1], &c.ambient[0])
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
f.Close()
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsV3) Apply(kind CapType) (err error) {
|
|
||||||
if kind&BOUNDS == BOUNDS {
|
|
||||||
var data [2]capData
|
|
||||||
err = capget(&c.hdr, &data[0])
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (1<<uint(CAP_SETPCAP))&data[0].effective != 0 {
|
|
||||||
for i := Cap(0); i <= CAP_LAST_CAP; i++ {
|
|
||||||
if c.Get(BOUNDING, i) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
err = prctl(syscall.PR_CAPBSET_DROP, uintptr(i), 0, 0, 0)
|
|
||||||
if err != nil {
|
|
||||||
// Ignore EINVAL since the capability may not be supported in this system.
|
|
||||||
if errno, ok := err.(syscall.Errno); ok && errno == syscall.EINVAL {
|
|
||||||
err = nil
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if kind&CAPS == CAPS {
|
|
||||||
err = capset(&c.hdr, &c.data[0])
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if kind&AMBS == AMBS {
|
|
||||||
for i := Cap(0); i <= CAP_LAST_CAP; i++ {
|
|
||||||
action := pr_CAP_AMBIENT_LOWER
|
|
||||||
if c.Get(AMBIENT, i) {
|
|
||||||
action = pr_CAP_AMBIENT_RAISE
|
|
||||||
}
|
|
||||||
err := prctl(pr_CAP_AMBIENT, action, uintptr(i), 0, 0)
|
|
||||||
// Ignore EINVAL as not supported on kernels before 4.3
|
|
||||||
if errno, ok := err.(syscall.Errno); ok && errno == syscall.EINVAL {
|
|
||||||
err = nil
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func newFile(path string) (c Capabilities, err error) {
|
|
||||||
c = &capsFile{path: path}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
type capsFile struct {
|
|
||||||
path string
|
|
||||||
data vfscapData
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsFile) Get(which CapType, what Cap) bool {
|
|
||||||
var i uint
|
|
||||||
if what > 31 {
|
|
||||||
if c.data.version == 1 {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
i = uint(what) >> 5
|
|
||||||
what %= 32
|
|
||||||
}
|
|
||||||
|
|
||||||
switch which {
|
|
||||||
case EFFECTIVE:
|
|
||||||
return (1<<uint(what))&c.data.effective[i] != 0
|
|
||||||
case PERMITTED:
|
|
||||||
return (1<<uint(what))&c.data.data[i].permitted != 0
|
|
||||||
case INHERITABLE:
|
|
||||||
return (1<<uint(what))&c.data.data[i].inheritable != 0
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsFile) getData(which CapType, dest []uint32) {
|
|
||||||
switch which {
|
|
||||||
case EFFECTIVE:
|
|
||||||
dest[0] = c.data.effective[0]
|
|
||||||
dest[1] = c.data.effective[1]
|
|
||||||
case PERMITTED:
|
|
||||||
dest[0] = c.data.data[0].permitted
|
|
||||||
dest[1] = c.data.data[1].permitted
|
|
||||||
case INHERITABLE:
|
|
||||||
dest[0] = c.data.data[0].inheritable
|
|
||||||
dest[1] = c.data.data[1].inheritable
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsFile) Empty(which CapType) bool {
|
|
||||||
var data [2]uint32
|
|
||||||
c.getData(which, data[:])
|
|
||||||
return data[0] == 0 && data[1] == 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsFile) Full(which CapType) bool {
|
|
||||||
var data [2]uint32
|
|
||||||
c.getData(which, data[:])
|
|
||||||
if c.data.version == 0 {
|
|
||||||
return (data[0] & 0x7fffffff) == 0x7fffffff
|
|
||||||
}
|
|
||||||
if (data[0] & 0xffffffff) != 0xffffffff {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return (data[1] & capUpperMask) == capUpperMask
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsFile) Set(which CapType, caps ...Cap) {
|
|
||||||
for _, what := range caps {
|
|
||||||
var i uint
|
|
||||||
if what > 31 {
|
|
||||||
if c.data.version == 1 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
i = uint(what) >> 5
|
|
||||||
what %= 32
|
|
||||||
}
|
|
||||||
|
|
||||||
if which&EFFECTIVE != 0 {
|
|
||||||
c.data.effective[i] |= 1 << uint(what)
|
|
||||||
}
|
|
||||||
if which&PERMITTED != 0 {
|
|
||||||
c.data.data[i].permitted |= 1 << uint(what)
|
|
||||||
}
|
|
||||||
if which&INHERITABLE != 0 {
|
|
||||||
c.data.data[i].inheritable |= 1 << uint(what)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsFile) Unset(which CapType, caps ...Cap) {
|
|
||||||
for _, what := range caps {
|
|
||||||
var i uint
|
|
||||||
if what > 31 {
|
|
||||||
if c.data.version == 1 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
i = uint(what) >> 5
|
|
||||||
what %= 32
|
|
||||||
}
|
|
||||||
|
|
||||||
if which&EFFECTIVE != 0 {
|
|
||||||
c.data.effective[i] &= ^(1 << uint(what))
|
|
||||||
}
|
|
||||||
if which&PERMITTED != 0 {
|
|
||||||
c.data.data[i].permitted &= ^(1 << uint(what))
|
|
||||||
}
|
|
||||||
if which&INHERITABLE != 0 {
|
|
||||||
c.data.data[i].inheritable &= ^(1 << uint(what))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsFile) Fill(kind CapType) {
|
|
||||||
if kind&CAPS == CAPS {
|
|
||||||
c.data.effective[0] = 0xffffffff
|
|
||||||
c.data.data[0].permitted = 0xffffffff
|
|
||||||
c.data.data[0].inheritable = 0
|
|
||||||
if c.data.version == 2 {
|
|
||||||
c.data.effective[1] = 0xffffffff
|
|
||||||
c.data.data[1].permitted = 0xffffffff
|
|
||||||
c.data.data[1].inheritable = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsFile) Clear(kind CapType) {
|
|
||||||
if kind&CAPS == CAPS {
|
|
||||||
c.data.effective[0] = 0
|
|
||||||
c.data.data[0].permitted = 0
|
|
||||||
c.data.data[0].inheritable = 0
|
|
||||||
if c.data.version == 2 {
|
|
||||||
c.data.effective[1] = 0
|
|
||||||
c.data.data[1].permitted = 0
|
|
||||||
c.data.data[1].inheritable = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsFile) StringCap(which CapType) (ret string) {
|
|
||||||
return mkStringCap(c, which)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsFile) String() (ret string) {
|
|
||||||
return mkString(c, INHERITABLE)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsFile) Load() (err error) {
|
|
||||||
return getVfsCap(c.path, &c.data)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *capsFile) Apply(kind CapType) (err error) {
|
|
||||||
if kind&CAPS == CAPS {
|
|
||||||
return setVfsCap(c.path, &c.data)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
19
vendor/github.com/syndtr/gocapability/capability/capability_noop.go
generated
vendored
19
vendor/github.com/syndtr/gocapability/capability/capability_noop.go
generated
vendored
@ -1,19 +0,0 @@
|
|||||||
// Copyright (c) 2013, Suryandaru Triandana <syndtr@gmail.com>
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !linux
|
|
||||||
|
|
||||||
package capability
|
|
||||||
|
|
||||||
import "errors"
|
|
||||||
|
|
||||||
func newPid(pid int) (Capabilities, error) {
|
|
||||||
return nil, errors.New("not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func newFile(path string) (Capabilities, error) {
|
|
||||||
return nil, errors.New("not supported")
|
|
||||||
}
|
|
309
vendor/github.com/syndtr/gocapability/capability/enum.go
generated
vendored
309
vendor/github.com/syndtr/gocapability/capability/enum.go
generated
vendored
@ -1,309 +0,0 @@
|
|||||||
// Copyright (c) 2013, Suryandaru Triandana <syndtr@gmail.com>
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
package capability
|
|
||||||
|
|
||||||
type CapType uint
|
|
||||||
|
|
||||||
func (c CapType) String() string {
|
|
||||||
switch c {
|
|
||||||
case EFFECTIVE:
|
|
||||||
return "effective"
|
|
||||||
case PERMITTED:
|
|
||||||
return "permitted"
|
|
||||||
case INHERITABLE:
|
|
||||||
return "inheritable"
|
|
||||||
case BOUNDING:
|
|
||||||
return "bounding"
|
|
||||||
case CAPS:
|
|
||||||
return "caps"
|
|
||||||
case AMBIENT:
|
|
||||||
return "ambient"
|
|
||||||
}
|
|
||||||
return "unknown"
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
EFFECTIVE CapType = 1 << iota
|
|
||||||
PERMITTED
|
|
||||||
INHERITABLE
|
|
||||||
BOUNDING
|
|
||||||
AMBIENT
|
|
||||||
|
|
||||||
CAPS = EFFECTIVE | PERMITTED | INHERITABLE
|
|
||||||
BOUNDS = BOUNDING
|
|
||||||
AMBS = AMBIENT
|
|
||||||
)
|
|
||||||
|
|
||||||
//go:generate go run enumgen/gen.go
|
|
||||||
type Cap int
|
|
||||||
|
|
||||||
// POSIX-draft defined capabilities and Linux extensions.
|
|
||||||
//
|
|
||||||
// Defined in https://github.com/torvalds/linux/blob/master/include/uapi/linux/capability.h
|
|
||||||
const (
|
|
||||||
// In a system with the [_POSIX_CHOWN_RESTRICTED] option defined, this
|
|
||||||
// overrides the restriction of changing file ownership and group
|
|
||||||
// ownership.
|
|
||||||
CAP_CHOWN = Cap(0)
|
|
||||||
|
|
||||||
// Override all DAC access, including ACL execute access if
|
|
||||||
// [_POSIX_ACL] is defined. Excluding DAC access covered by
|
|
||||||
// CAP_LINUX_IMMUTABLE.
|
|
||||||
CAP_DAC_OVERRIDE = Cap(1)
|
|
||||||
|
|
||||||
// Overrides all DAC restrictions regarding read and search on files
|
|
||||||
// and directories, including ACL restrictions if [_POSIX_ACL] is
|
|
||||||
// defined. Excluding DAC access covered by CAP_LINUX_IMMUTABLE.
|
|
||||||
CAP_DAC_READ_SEARCH = Cap(2)
|
|
||||||
|
|
||||||
// Overrides all restrictions about allowed operations on files, where
|
|
||||||
// file owner ID must be equal to the user ID, except where CAP_FSETID
|
|
||||||
// is applicable. It doesn't override MAC and DAC restrictions.
|
|
||||||
CAP_FOWNER = Cap(3)
|
|
||||||
|
|
||||||
// Overrides the following restrictions that the effective user ID
|
|
||||||
// shall match the file owner ID when setting the S_ISUID and S_ISGID
|
|
||||||
// bits on that file; that the effective group ID (or one of the
|
|
||||||
// supplementary group IDs) shall match the file owner ID when setting
|
|
||||||
// the S_ISGID bit on that file; that the S_ISUID and S_ISGID bits are
|
|
||||||
// cleared on successful return from chown(2) (not implemented).
|
|
||||||
CAP_FSETID = Cap(4)
|
|
||||||
|
|
||||||
// Overrides the restriction that the real or effective user ID of a
|
|
||||||
// process sending a signal must match the real or effective user ID
|
|
||||||
// of the process receiving the signal.
|
|
||||||
CAP_KILL = Cap(5)
|
|
||||||
|
|
||||||
// Allows setgid(2) manipulation
|
|
||||||
// Allows setgroups(2)
|
|
||||||
// Allows forged gids on socket credentials passing.
|
|
||||||
CAP_SETGID = Cap(6)
|
|
||||||
|
|
||||||
// Allows set*uid(2) manipulation (including fsuid).
|
|
||||||
// Allows forged pids on socket credentials passing.
|
|
||||||
CAP_SETUID = Cap(7)
|
|
||||||
|
|
||||||
// Linux-specific capabilities
|
|
||||||
|
|
||||||
// Without VFS support for capabilities:
|
|
||||||
// Transfer any capability in your permitted set to any pid,
|
|
||||||
// remove any capability in your permitted set from any pid
|
|
||||||
// With VFS support for capabilities (neither of above, but)
|
|
||||||
// Add any capability from current's capability bounding set
|
|
||||||
// to the current process' inheritable set
|
|
||||||
// Allow taking bits out of capability bounding set
|
|
||||||
// Allow modification of the securebits for a process
|
|
||||||
CAP_SETPCAP = Cap(8)
|
|
||||||
|
|
||||||
// Allow modification of S_IMMUTABLE and S_APPEND file attributes
|
|
||||||
CAP_LINUX_IMMUTABLE = Cap(9)
|
|
||||||
|
|
||||||
// Allows binding to TCP/UDP sockets below 1024
|
|
||||||
// Allows binding to ATM VCIs below 32
|
|
||||||
CAP_NET_BIND_SERVICE = Cap(10)
|
|
||||||
|
|
||||||
// Allow broadcasting, listen to multicast
|
|
||||||
CAP_NET_BROADCAST = Cap(11)
|
|
||||||
|
|
||||||
// Allow interface configuration
|
|
||||||
// Allow administration of IP firewall, masquerading and accounting
|
|
||||||
// Allow setting debug option on sockets
|
|
||||||
// Allow modification of routing tables
|
|
||||||
// Allow setting arbitrary process / process group ownership on
|
|
||||||
// sockets
|
|
||||||
// Allow binding to any address for transparent proxying (also via NET_RAW)
|
|
||||||
// Allow setting TOS (type of service)
|
|
||||||
// Allow setting promiscuous mode
|
|
||||||
// Allow clearing driver statistics
|
|
||||||
// Allow multicasting
|
|
||||||
// Allow read/write of device-specific registers
|
|
||||||
// Allow activation of ATM control sockets
|
|
||||||
CAP_NET_ADMIN = Cap(12)
|
|
||||||
|
|
||||||
// Allow use of RAW sockets
|
|
||||||
// Allow use of PACKET sockets
|
|
||||||
// Allow binding to any address for transparent proxying (also via NET_ADMIN)
|
|
||||||
CAP_NET_RAW = Cap(13)
|
|
||||||
|
|
||||||
// Allow locking of shared memory segments
|
|
||||||
// Allow mlock and mlockall (which doesn't really have anything to do
|
|
||||||
// with IPC)
|
|
||||||
CAP_IPC_LOCK = Cap(14)
|
|
||||||
|
|
||||||
// Override IPC ownership checks
|
|
||||||
CAP_IPC_OWNER = Cap(15)
|
|
||||||
|
|
||||||
// Insert and remove kernel modules - modify kernel without limit
|
|
||||||
CAP_SYS_MODULE = Cap(16)
|
|
||||||
|
|
||||||
// Allow ioperm/iopl access
|
|
||||||
// Allow sending USB messages to any device via /proc/bus/usb
|
|
||||||
CAP_SYS_RAWIO = Cap(17)
|
|
||||||
|
|
||||||
// Allow use of chroot()
|
|
||||||
CAP_SYS_CHROOT = Cap(18)
|
|
||||||
|
|
||||||
// Allow ptrace() of any process
|
|
||||||
CAP_SYS_PTRACE = Cap(19)
|
|
||||||
|
|
||||||
// Allow configuration of process accounting
|
|
||||||
CAP_SYS_PACCT = Cap(20)
|
|
||||||
|
|
||||||
// Allow configuration of the secure attention key
|
|
||||||
// Allow administration of the random device
|
|
||||||
// Allow examination and configuration of disk quotas
|
|
||||||
// Allow setting the domainname
|
|
||||||
// Allow setting the hostname
|
|
||||||
// Allow calling bdflush()
|
|
||||||
// Allow mount() and umount(), setting up new smb connection
|
|
||||||
// Allow some autofs root ioctls
|
|
||||||
// Allow nfsservctl
|
|
||||||
// Allow VM86_REQUEST_IRQ
|
|
||||||
// Allow to read/write pci config on alpha
|
|
||||||
// Allow irix_prctl on mips (setstacksize)
|
|
||||||
// Allow flushing all cache on m68k (sys_cacheflush)
|
|
||||||
// Allow removing semaphores
|
|
||||||
// Used instead of CAP_CHOWN to "chown" IPC message queues, semaphores
|
|
||||||
// and shared memory
|
|
||||||
// Allow locking/unlocking of shared memory segment
|
|
||||||
// Allow turning swap on/off
|
|
||||||
// Allow forged pids on socket credentials passing
|
|
||||||
// Allow setting readahead and flushing buffers on block devices
|
|
||||||
// Allow setting geometry in floppy driver
|
|
||||||
// Allow turning DMA on/off in xd driver
|
|
||||||
// Allow administration of md devices (mostly the above, but some
|
|
||||||
// extra ioctls)
|
|
||||||
// Allow tuning the ide driver
|
|
||||||
// Allow access to the nvram device
|
|
||||||
// Allow administration of apm_bios, serial and bttv (TV) device
|
|
||||||
// Allow manufacturer commands in isdn CAPI support driver
|
|
||||||
// Allow reading non-standardized portions of pci configuration space
|
|
||||||
// Allow DDI debug ioctl on sbpcd driver
|
|
||||||
// Allow setting up serial ports
|
|
||||||
// Allow sending raw qic-117 commands
|
|
||||||
// Allow enabling/disabling tagged queuing on SCSI controllers and sending
|
|
||||||
// arbitrary SCSI commands
|
|
||||||
// Allow setting encryption key on loopback filesystem
|
|
||||||
// Allow setting zone reclaim policy
|
|
||||||
// Allow everything under CAP_BPF and CAP_PERFMON for backward compatibility
|
|
||||||
CAP_SYS_ADMIN = Cap(21)
|
|
||||||
|
|
||||||
// Allow use of reboot()
|
|
||||||
CAP_SYS_BOOT = Cap(22)
|
|
||||||
|
|
||||||
// Allow raising priority and setting priority on other (different
|
|
||||||
// UID) processes
|
|
||||||
// Allow use of FIFO and round-robin (realtime) scheduling on own
|
|
||||||
// processes and setting the scheduling algorithm used by another
|
|
||||||
// process.
|
|
||||||
// Allow setting cpu affinity on other processes
|
|
||||||
CAP_SYS_NICE = Cap(23)
|
|
||||||
|
|
||||||
// Override resource limits. Set resource limits.
|
|
||||||
// Override quota limits.
|
|
||||||
// Override reserved space on ext2 filesystem
|
|
||||||
// Modify data journaling mode on ext3 filesystem (uses journaling
|
|
||||||
// resources)
|
|
||||||
// NOTE: ext2 honors fsuid when checking for resource overrides, so
|
|
||||||
// you can override using fsuid too
|
|
||||||
// Override size restrictions on IPC message queues
|
|
||||||
// Allow more than 64hz interrupts from the real-time clock
|
|
||||||
// Override max number of consoles on console allocation
|
|
||||||
// Override max number of keymaps
|
|
||||||
// Control memory reclaim behavior
|
|
||||||
CAP_SYS_RESOURCE = Cap(24)
|
|
||||||
|
|
||||||
// Allow manipulation of system clock
|
|
||||||
// Allow irix_stime on mips
|
|
||||||
// Allow setting the real-time clock
|
|
||||||
CAP_SYS_TIME = Cap(25)
|
|
||||||
|
|
||||||
// Allow configuration of tty devices
|
|
||||||
// Allow vhangup() of tty
|
|
||||||
CAP_SYS_TTY_CONFIG = Cap(26)
|
|
||||||
|
|
||||||
// Allow the privileged aspects of mknod()
|
|
||||||
CAP_MKNOD = Cap(27)
|
|
||||||
|
|
||||||
// Allow taking of leases on files
|
|
||||||
CAP_LEASE = Cap(28)
|
|
||||||
|
|
||||||
CAP_AUDIT_WRITE = Cap(29)
|
|
||||||
CAP_AUDIT_CONTROL = Cap(30)
|
|
||||||
CAP_SETFCAP = Cap(31)
|
|
||||||
|
|
||||||
// Override MAC access.
|
|
||||||
// The base kernel enforces no MAC policy.
|
|
||||||
// An LSM may enforce a MAC policy, and if it does and it chooses
|
|
||||||
// to implement capability based overrides of that policy, this is
|
|
||||||
// the capability it should use to do so.
|
|
||||||
CAP_MAC_OVERRIDE = Cap(32)
|
|
||||||
|
|
||||||
// Allow MAC configuration or state changes.
|
|
||||||
// The base kernel requires no MAC configuration.
|
|
||||||
// An LSM may enforce a MAC policy, and if it does and it chooses
|
|
||||||
// to implement capability based checks on modifications to that
|
|
||||||
// policy or the data required to maintain it, this is the
|
|
||||||
// capability it should use to do so.
|
|
||||||
CAP_MAC_ADMIN = Cap(33)
|
|
||||||
|
|
||||||
// Allow configuring the kernel's syslog (printk behaviour)
|
|
||||||
CAP_SYSLOG = Cap(34)
|
|
||||||
|
|
||||||
// Allow triggering something that will wake the system
|
|
||||||
CAP_WAKE_ALARM = Cap(35)
|
|
||||||
|
|
||||||
// Allow preventing system suspends
|
|
||||||
CAP_BLOCK_SUSPEND = Cap(36)
|
|
||||||
|
|
||||||
// Allow reading the audit log via multicast netlink socket
|
|
||||||
CAP_AUDIT_READ = Cap(37)
|
|
||||||
|
|
||||||
// Allow system performance and observability privileged operations
|
|
||||||
// using perf_events, i915_perf and other kernel subsystems
|
|
||||||
CAP_PERFMON = Cap(38)
|
|
||||||
|
|
||||||
// CAP_BPF allows the following BPF operations:
|
|
||||||
// - Creating all types of BPF maps
|
|
||||||
// - Advanced verifier features
|
|
||||||
// - Indirect variable access
|
|
||||||
// - Bounded loops
|
|
||||||
// - BPF to BPF function calls
|
|
||||||
// - Scalar precision tracking
|
|
||||||
// - Larger complexity limits
|
|
||||||
// - Dead code elimination
|
|
||||||
// - And potentially other features
|
|
||||||
// - Loading BPF Type Format (BTF) data
|
|
||||||
// - Retrieve xlated and JITed code of BPF programs
|
|
||||||
// - Use bpf_spin_lock() helper
|
|
||||||
//
|
|
||||||
// CAP_PERFMON relaxes the verifier checks further:
|
|
||||||
// - BPF progs can use of pointer-to-integer conversions
|
|
||||||
// - speculation attack hardening measures are bypassed
|
|
||||||
// - bpf_probe_read to read arbitrary kernel memory is allowed
|
|
||||||
// - bpf_trace_printk to print kernel memory is allowed
|
|
||||||
//
|
|
||||||
// CAP_SYS_ADMIN is required to use bpf_probe_write_user.
|
|
||||||
//
|
|
||||||
// CAP_SYS_ADMIN is required to iterate system wide loaded
|
|
||||||
// programs, maps, links, BTFs and convert their IDs to file descriptors.
|
|
||||||
//
|
|
||||||
// CAP_PERFMON and CAP_BPF are required to load tracing programs.
|
|
||||||
// CAP_NET_ADMIN and CAP_BPF are required to load networking programs.
|
|
||||||
CAP_BPF = Cap(39)
|
|
||||||
|
|
||||||
// Allow checkpoint/restore related operations.
|
|
||||||
// Introduced in kernel 5.9
|
|
||||||
CAP_CHECKPOINT_RESTORE = Cap(40)
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// Highest valid capability of the running kernel.
|
|
||||||
CAP_LAST_CAP = Cap(63)
|
|
||||||
|
|
||||||
capUpperMask = ^uint32(0)
|
|
||||||
)
|
|
138
vendor/github.com/syndtr/gocapability/capability/enum_gen.go
generated
vendored
138
vendor/github.com/syndtr/gocapability/capability/enum_gen.go
generated
vendored
@ -1,138 +0,0 @@
|
|||||||
// generated file; DO NOT EDIT - use go generate in directory with source
|
|
||||||
|
|
||||||
package capability
|
|
||||||
|
|
||||||
func (c Cap) String() string {
|
|
||||||
switch c {
|
|
||||||
case CAP_CHOWN:
|
|
||||||
return "chown"
|
|
||||||
case CAP_DAC_OVERRIDE:
|
|
||||||
return "dac_override"
|
|
||||||
case CAP_DAC_READ_SEARCH:
|
|
||||||
return "dac_read_search"
|
|
||||||
case CAP_FOWNER:
|
|
||||||
return "fowner"
|
|
||||||
case CAP_FSETID:
|
|
||||||
return "fsetid"
|
|
||||||
case CAP_KILL:
|
|
||||||
return "kill"
|
|
||||||
case CAP_SETGID:
|
|
||||||
return "setgid"
|
|
||||||
case CAP_SETUID:
|
|
||||||
return "setuid"
|
|
||||||
case CAP_SETPCAP:
|
|
||||||
return "setpcap"
|
|
||||||
case CAP_LINUX_IMMUTABLE:
|
|
||||||
return "linux_immutable"
|
|
||||||
case CAP_NET_BIND_SERVICE:
|
|
||||||
return "net_bind_service"
|
|
||||||
case CAP_NET_BROADCAST:
|
|
||||||
return "net_broadcast"
|
|
||||||
case CAP_NET_ADMIN:
|
|
||||||
return "net_admin"
|
|
||||||
case CAP_NET_RAW:
|
|
||||||
return "net_raw"
|
|
||||||
case CAP_IPC_LOCK:
|
|
||||||
return "ipc_lock"
|
|
||||||
case CAP_IPC_OWNER:
|
|
||||||
return "ipc_owner"
|
|
||||||
case CAP_SYS_MODULE:
|
|
||||||
return "sys_module"
|
|
||||||
case CAP_SYS_RAWIO:
|
|
||||||
return "sys_rawio"
|
|
||||||
case CAP_SYS_CHROOT:
|
|
||||||
return "sys_chroot"
|
|
||||||
case CAP_SYS_PTRACE:
|
|
||||||
return "sys_ptrace"
|
|
||||||
case CAP_SYS_PACCT:
|
|
||||||
return "sys_pacct"
|
|
||||||
case CAP_SYS_ADMIN:
|
|
||||||
return "sys_admin"
|
|
||||||
case CAP_SYS_BOOT:
|
|
||||||
return "sys_boot"
|
|
||||||
case CAP_SYS_NICE:
|
|
||||||
return "sys_nice"
|
|
||||||
case CAP_SYS_RESOURCE:
|
|
||||||
return "sys_resource"
|
|
||||||
case CAP_SYS_TIME:
|
|
||||||
return "sys_time"
|
|
||||||
case CAP_SYS_TTY_CONFIG:
|
|
||||||
return "sys_tty_config"
|
|
||||||
case CAP_MKNOD:
|
|
||||||
return "mknod"
|
|
||||||
case CAP_LEASE:
|
|
||||||
return "lease"
|
|
||||||
case CAP_AUDIT_WRITE:
|
|
||||||
return "audit_write"
|
|
||||||
case CAP_AUDIT_CONTROL:
|
|
||||||
return "audit_control"
|
|
||||||
case CAP_SETFCAP:
|
|
||||||
return "setfcap"
|
|
||||||
case CAP_MAC_OVERRIDE:
|
|
||||||
return "mac_override"
|
|
||||||
case CAP_MAC_ADMIN:
|
|
||||||
return "mac_admin"
|
|
||||||
case CAP_SYSLOG:
|
|
||||||
return "syslog"
|
|
||||||
case CAP_WAKE_ALARM:
|
|
||||||
return "wake_alarm"
|
|
||||||
case CAP_BLOCK_SUSPEND:
|
|
||||||
return "block_suspend"
|
|
||||||
case CAP_AUDIT_READ:
|
|
||||||
return "audit_read"
|
|
||||||
case CAP_PERFMON:
|
|
||||||
return "perfmon"
|
|
||||||
case CAP_BPF:
|
|
||||||
return "bpf"
|
|
||||||
case CAP_CHECKPOINT_RESTORE:
|
|
||||||
return "checkpoint_restore"
|
|
||||||
}
|
|
||||||
return "unknown"
|
|
||||||
}
|
|
||||||
|
|
||||||
// List returns list of all supported capabilities
|
|
||||||
func List() []Cap {
|
|
||||||
return []Cap{
|
|
||||||
CAP_CHOWN,
|
|
||||||
CAP_DAC_OVERRIDE,
|
|
||||||
CAP_DAC_READ_SEARCH,
|
|
||||||
CAP_FOWNER,
|
|
||||||
CAP_FSETID,
|
|
||||||
CAP_KILL,
|
|
||||||
CAP_SETGID,
|
|
||||||
CAP_SETUID,
|
|
||||||
CAP_SETPCAP,
|
|
||||||
CAP_LINUX_IMMUTABLE,
|
|
||||||
CAP_NET_BIND_SERVICE,
|
|
||||||
CAP_NET_BROADCAST,
|
|
||||||
CAP_NET_ADMIN,
|
|
||||||
CAP_NET_RAW,
|
|
||||||
CAP_IPC_LOCK,
|
|
||||||
CAP_IPC_OWNER,
|
|
||||||
CAP_SYS_MODULE,
|
|
||||||
CAP_SYS_RAWIO,
|
|
||||||
CAP_SYS_CHROOT,
|
|
||||||
CAP_SYS_PTRACE,
|
|
||||||
CAP_SYS_PACCT,
|
|
||||||
CAP_SYS_ADMIN,
|
|
||||||
CAP_SYS_BOOT,
|
|
||||||
CAP_SYS_NICE,
|
|
||||||
CAP_SYS_RESOURCE,
|
|
||||||
CAP_SYS_TIME,
|
|
||||||
CAP_SYS_TTY_CONFIG,
|
|
||||||
CAP_MKNOD,
|
|
||||||
CAP_LEASE,
|
|
||||||
CAP_AUDIT_WRITE,
|
|
||||||
CAP_AUDIT_CONTROL,
|
|
||||||
CAP_SETFCAP,
|
|
||||||
CAP_MAC_OVERRIDE,
|
|
||||||
CAP_MAC_ADMIN,
|
|
||||||
CAP_SYSLOG,
|
|
||||||
CAP_WAKE_ALARM,
|
|
||||||
CAP_BLOCK_SUSPEND,
|
|
||||||
CAP_AUDIT_READ,
|
|
||||||
CAP_PERFMON,
|
|
||||||
CAP_BPF,
|
|
||||||
CAP_CHECKPOINT_RESTORE,
|
|
||||||
}
|
|
||||||
}
|
|
154
vendor/github.com/syndtr/gocapability/capability/syscall_linux.go
generated
vendored
154
vendor/github.com/syndtr/gocapability/capability/syscall_linux.go
generated
vendored
@ -1,154 +0,0 @@
|
|||||||
// Copyright (c) 2013, Suryandaru Triandana <syndtr@gmail.com>
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
package capability
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
type capHeader struct {
|
|
||||||
version uint32
|
|
||||||
pid int32
|
|
||||||
}
|
|
||||||
|
|
||||||
type capData struct {
|
|
||||||
effective uint32
|
|
||||||
permitted uint32
|
|
||||||
inheritable uint32
|
|
||||||
}
|
|
||||||
|
|
||||||
func capget(hdr *capHeader, data *capData) (err error) {
|
|
||||||
_, _, e1 := syscall.Syscall(syscall.SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func capset(hdr *capHeader, data *capData) (err error) {
|
|
||||||
_, _, e1 := syscall.Syscall(syscall.SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// not yet in syscall
|
|
||||||
const (
|
|
||||||
pr_CAP_AMBIENT = 47
|
|
||||||
pr_CAP_AMBIENT_IS_SET = uintptr(1)
|
|
||||||
pr_CAP_AMBIENT_RAISE = uintptr(2)
|
|
||||||
pr_CAP_AMBIENT_LOWER = uintptr(3)
|
|
||||||
pr_CAP_AMBIENT_CLEAR_ALL = uintptr(4)
|
|
||||||
)
|
|
||||||
|
|
||||||
func prctl(option int, arg2, arg3, arg4, arg5 uintptr) (err error) {
|
|
||||||
_, _, e1 := syscall.Syscall6(syscall.SYS_PRCTL, uintptr(option), arg2, arg3, arg4, arg5, 0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
vfsXattrName = "security.capability"
|
|
||||||
|
|
||||||
vfsCapVerMask = 0xff000000
|
|
||||||
vfsCapVer1 = 0x01000000
|
|
||||||
vfsCapVer2 = 0x02000000
|
|
||||||
|
|
||||||
vfsCapFlagMask = ^vfsCapVerMask
|
|
||||||
vfsCapFlageffective = 0x000001
|
|
||||||
|
|
||||||
vfscapDataSizeV1 = 4 * (1 + 2*1)
|
|
||||||
vfscapDataSizeV2 = 4 * (1 + 2*2)
|
|
||||||
)
|
|
||||||
|
|
||||||
type vfscapData struct {
|
|
||||||
magic uint32
|
|
||||||
data [2]struct {
|
|
||||||
permitted uint32
|
|
||||||
inheritable uint32
|
|
||||||
}
|
|
||||||
effective [2]uint32
|
|
||||||
version int8
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
_vfsXattrName *byte
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
_vfsXattrName, _ = syscall.BytePtrFromString(vfsXattrName)
|
|
||||||
}
|
|
||||||
|
|
||||||
func getVfsCap(path string, dest *vfscapData) (err error) {
|
|
||||||
var _p0 *byte
|
|
||||||
_p0, err = syscall.BytePtrFromString(path)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
r0, _, e1 := syscall.Syscall6(syscall.SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_vfsXattrName)), uintptr(unsafe.Pointer(dest)), vfscapDataSizeV2, 0, 0)
|
|
||||||
if e1 != 0 {
|
|
||||||
if e1 == syscall.ENODATA {
|
|
||||||
dest.version = 2
|
|
||||||
return
|
|
||||||
}
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
switch dest.magic & vfsCapVerMask {
|
|
||||||
case vfsCapVer1:
|
|
||||||
dest.version = 1
|
|
||||||
if r0 != vfscapDataSizeV1 {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
dest.data[1].permitted = 0
|
|
||||||
dest.data[1].inheritable = 0
|
|
||||||
case vfsCapVer2:
|
|
||||||
dest.version = 2
|
|
||||||
if r0 != vfscapDataSizeV2 {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
if dest.magic&vfsCapFlageffective != 0 {
|
|
||||||
dest.effective[0] = dest.data[0].permitted | dest.data[0].inheritable
|
|
||||||
dest.effective[1] = dest.data[1].permitted | dest.data[1].inheritable
|
|
||||||
} else {
|
|
||||||
dest.effective[0] = 0
|
|
||||||
dest.effective[1] = 0
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func setVfsCap(path string, data *vfscapData) (err error) {
|
|
||||||
var _p0 *byte
|
|
||||||
_p0, err = syscall.BytePtrFromString(path)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var size uintptr
|
|
||||||
if data.version == 1 {
|
|
||||||
data.magic = vfsCapVer1
|
|
||||||
size = vfscapDataSizeV1
|
|
||||||
} else if data.version == 2 {
|
|
||||||
data.magic = vfsCapVer2
|
|
||||||
if data.effective[0] != 0 || data.effective[1] != 0 {
|
|
||||||
data.magic |= vfsCapFlageffective
|
|
||||||
}
|
|
||||||
size = vfscapDataSizeV2
|
|
||||||
} else {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
_, _, e1 := syscall.Syscall6(syscall.SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_vfsXattrName)), uintptr(unsafe.Pointer(data)), size, 0, 0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
2
vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go
generated
vendored
2
vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go
generated
vendored
@ -2,7 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build (!amd64 && !ppc64le && !s390x) || !gc || purego
|
//go:build (!amd64 && !ppc64le && !ppc64 && !s390x) || !gc || purego
|
||||||
|
|
||||||
package poly1305
|
package poly1305
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gc && !purego
|
//go:build gc && !purego && (ppc64 || ppc64le)
|
||||||
|
|
||||||
package poly1305
|
package poly1305
|
||||||
|
|
@ -2,15 +2,25 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build gc && !purego
|
//go:build gc && !purego && (ppc64 || ppc64le)
|
||||||
|
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
// This was ported from the amd64 implementation.
|
// This was ported from the amd64 implementation.
|
||||||
|
|
||||||
|
#ifdef GOARCH_ppc64le
|
||||||
|
#define LE_MOVD MOVD
|
||||||
|
#define LE_MOVWZ MOVWZ
|
||||||
|
#define LE_MOVHZ MOVHZ
|
||||||
|
#else
|
||||||
|
#define LE_MOVD MOVDBR
|
||||||
|
#define LE_MOVWZ MOVWBR
|
||||||
|
#define LE_MOVHZ MOVHBR
|
||||||
|
#endif
|
||||||
|
|
||||||
#define POLY1305_ADD(msg, h0, h1, h2, t0, t1, t2) \
|
#define POLY1305_ADD(msg, h0, h1, h2, t0, t1, t2) \
|
||||||
MOVD (msg), t0; \
|
LE_MOVD (msg)( R0), t0; \
|
||||||
MOVD 8(msg), t1; \
|
LE_MOVD (msg)(R24), t1; \
|
||||||
MOVD $1, t2; \
|
MOVD $1, t2; \
|
||||||
ADDC t0, h0, h0; \
|
ADDC t0, h0, h0; \
|
||||||
ADDE t1, h1, h1; \
|
ADDE t1, h1, h1; \
|
||||||
@ -50,10 +60,6 @@
|
|||||||
ADDE t3, h1, h1; \
|
ADDE t3, h1, h1; \
|
||||||
ADDZE h2
|
ADDZE h2
|
||||||
|
|
||||||
DATA ·poly1305Mask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF
|
|
||||||
DATA ·poly1305Mask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC
|
|
||||||
GLOBL ·poly1305Mask<>(SB), RODATA, $16
|
|
||||||
|
|
||||||
// func update(state *[7]uint64, msg []byte)
|
// func update(state *[7]uint64, msg []byte)
|
||||||
TEXT ·update(SB), $0-32
|
TEXT ·update(SB), $0-32
|
||||||
MOVD state+0(FP), R3
|
MOVD state+0(FP), R3
|
||||||
@ -66,6 +72,8 @@ TEXT ·update(SB), $0-32
|
|||||||
MOVD 24(R3), R11 // r0
|
MOVD 24(R3), R11 // r0
|
||||||
MOVD 32(R3), R12 // r1
|
MOVD 32(R3), R12 // r1
|
||||||
|
|
||||||
|
MOVD $8, R24
|
||||||
|
|
||||||
CMP R5, $16
|
CMP R5, $16
|
||||||
BLT bytes_between_0_and_15
|
BLT bytes_between_0_and_15
|
||||||
|
|
||||||
@ -94,7 +102,7 @@ flush_buffer:
|
|||||||
|
|
||||||
// Greater than 8 -- load the rightmost remaining bytes in msg
|
// Greater than 8 -- load the rightmost remaining bytes in msg
|
||||||
// and put into R17 (h1)
|
// and put into R17 (h1)
|
||||||
MOVD (R4)(R21), R17
|
LE_MOVD (R4)(R21), R17
|
||||||
MOVD $16, R22
|
MOVD $16, R22
|
||||||
|
|
||||||
// Find the offset to those bytes
|
// Find the offset to those bytes
|
||||||
@ -118,7 +126,7 @@ just1:
|
|||||||
BLT less8
|
BLT less8
|
||||||
|
|
||||||
// Exactly 8
|
// Exactly 8
|
||||||
MOVD (R4), R16
|
LE_MOVD (R4), R16
|
||||||
|
|
||||||
CMP R17, $0
|
CMP R17, $0
|
||||||
|
|
||||||
@ -133,7 +141,7 @@ less8:
|
|||||||
MOVD $0, R22 // shift count
|
MOVD $0, R22 // shift count
|
||||||
CMP R5, $4
|
CMP R5, $4
|
||||||
BLT less4
|
BLT less4
|
||||||
MOVWZ (R4), R16
|
LE_MOVWZ (R4), R16
|
||||||
ADD $4, R4
|
ADD $4, R4
|
||||||
ADD $-4, R5
|
ADD $-4, R5
|
||||||
MOVD $32, R22
|
MOVD $32, R22
|
||||||
@ -141,7 +149,7 @@ less8:
|
|||||||
less4:
|
less4:
|
||||||
CMP R5, $2
|
CMP R5, $2
|
||||||
BLT less2
|
BLT less2
|
||||||
MOVHZ (R4), R21
|
LE_MOVHZ (R4), R21
|
||||||
SLD R22, R21, R21
|
SLD R22, R21, R21
|
||||||
OR R16, R21, R16
|
OR R16, R21, R16
|
||||||
ADD $16, R22
|
ADD $16, R22
|
4
vendor/golang.org/x/crypto/sha3/doc.go
generated
vendored
4
vendor/golang.org/x/crypto/sha3/doc.go
generated
vendored
@ -5,6 +5,10 @@
|
|||||||
// Package sha3 implements the SHA-3 fixed-output-length hash functions and
|
// Package sha3 implements the SHA-3 fixed-output-length hash functions and
|
||||||
// the SHAKE variable-output-length hash functions defined by FIPS-202.
|
// the SHAKE variable-output-length hash functions defined by FIPS-202.
|
||||||
//
|
//
|
||||||
|
// All types in this package also implement [encoding.BinaryMarshaler],
|
||||||
|
// [encoding.BinaryAppender] and [encoding.BinaryUnmarshaler] to marshal and
|
||||||
|
// unmarshal the internal state of the hash.
|
||||||
|
//
|
||||||
// Both types of hash function use the "sponge" construction and the Keccak
|
// Both types of hash function use the "sponge" construction and the Keccak
|
||||||
// permutation. For a detailed specification see http://keccak.noekeon.org/
|
// permutation. For a detailed specification see http://keccak.noekeon.org/
|
||||||
//
|
//
|
||||||
|
31
vendor/golang.org/x/crypto/sha3/hashes.go
generated
vendored
31
vendor/golang.org/x/crypto/sha3/hashes.go
generated
vendored
@ -48,33 +48,52 @@ func init() {
|
|||||||
crypto.RegisterHash(crypto.SHA3_512, New512)
|
crypto.RegisterHash(crypto.SHA3_512, New512)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
dsbyteSHA3 = 0b00000110
|
||||||
|
dsbyteKeccak = 0b00000001
|
||||||
|
dsbyteShake = 0b00011111
|
||||||
|
dsbyteCShake = 0b00000100
|
||||||
|
|
||||||
|
// rateK[c] is the rate in bytes for Keccak[c] where c is the capacity in
|
||||||
|
// bits. Given the sponge size is 1600 bits, the rate is 1600 - c bits.
|
||||||
|
rateK256 = (1600 - 256) / 8
|
||||||
|
rateK448 = (1600 - 448) / 8
|
||||||
|
rateK512 = (1600 - 512) / 8
|
||||||
|
rateK768 = (1600 - 768) / 8
|
||||||
|
rateK1024 = (1600 - 1024) / 8
|
||||||
|
)
|
||||||
|
|
||||||
func new224Generic() *state {
|
func new224Generic() *state {
|
||||||
return &state{rate: 144, outputLen: 28, dsbyte: 0x06}
|
return &state{rate: rateK448, outputLen: 28, dsbyte: dsbyteSHA3}
|
||||||
}
|
}
|
||||||
|
|
||||||
func new256Generic() *state {
|
func new256Generic() *state {
|
||||||
return &state{rate: 136, outputLen: 32, dsbyte: 0x06}
|
return &state{rate: rateK512, outputLen: 32, dsbyte: dsbyteSHA3}
|
||||||
}
|
}
|
||||||
|
|
||||||
func new384Generic() *state {
|
func new384Generic() *state {
|
||||||
return &state{rate: 104, outputLen: 48, dsbyte: 0x06}
|
return &state{rate: rateK768, outputLen: 48, dsbyte: dsbyteSHA3}
|
||||||
}
|
}
|
||||||
|
|
||||||
func new512Generic() *state {
|
func new512Generic() *state {
|
||||||
return &state{rate: 72, outputLen: 64, dsbyte: 0x06}
|
return &state{rate: rateK1024, outputLen: 64, dsbyte: dsbyteSHA3}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewLegacyKeccak256 creates a new Keccak-256 hash.
|
// NewLegacyKeccak256 creates a new Keccak-256 hash.
|
||||||
//
|
//
|
||||||
// Only use this function if you require compatibility with an existing cryptosystem
|
// Only use this function if you require compatibility with an existing cryptosystem
|
||||||
// that uses non-standard padding. All other users should use New256 instead.
|
// that uses non-standard padding. All other users should use New256 instead.
|
||||||
func NewLegacyKeccak256() hash.Hash { return &state{rate: 136, outputLen: 32, dsbyte: 0x01} }
|
func NewLegacyKeccak256() hash.Hash {
|
||||||
|
return &state{rate: rateK512, outputLen: 32, dsbyte: dsbyteKeccak}
|
||||||
|
}
|
||||||
|
|
||||||
// NewLegacyKeccak512 creates a new Keccak-512 hash.
|
// NewLegacyKeccak512 creates a new Keccak-512 hash.
|
||||||
//
|
//
|
||||||
// Only use this function if you require compatibility with an existing cryptosystem
|
// Only use this function if you require compatibility with an existing cryptosystem
|
||||||
// that uses non-standard padding. All other users should use New512 instead.
|
// that uses non-standard padding. All other users should use New512 instead.
|
||||||
func NewLegacyKeccak512() hash.Hash { return &state{rate: 72, outputLen: 64, dsbyte: 0x01} }
|
func NewLegacyKeccak512() hash.Hash {
|
||||||
|
return &state{rate: rateK1024, outputLen: 64, dsbyte: dsbyteKeccak}
|
||||||
|
}
|
||||||
|
|
||||||
// Sum224 returns the SHA3-224 digest of the data.
|
// Sum224 returns the SHA3-224 digest of the data.
|
||||||
func Sum224(data []byte) (digest [28]byte) {
|
func Sum224(data []byte) (digest [28]byte) {
|
||||||
|
185
vendor/golang.org/x/crypto/sha3/sha3.go
generated
vendored
185
vendor/golang.org/x/crypto/sha3/sha3.go
generated
vendored
@ -4,6 +4,15 @@
|
|||||||
|
|
||||||
package sha3
|
package sha3
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/subtle"
|
||||||
|
"encoding/binary"
|
||||||
|
"errors"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
|
"golang.org/x/sys/cpu"
|
||||||
|
)
|
||||||
|
|
||||||
// spongeDirection indicates the direction bytes are flowing through the sponge.
|
// spongeDirection indicates the direction bytes are flowing through the sponge.
|
||||||
type spongeDirection int
|
type spongeDirection int
|
||||||
|
|
||||||
@ -14,16 +23,13 @@ const (
|
|||||||
spongeSqueezing
|
spongeSqueezing
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
// maxRate is the maximum size of the internal buffer. SHAKE-256
|
|
||||||
// currently needs the largest buffer.
|
|
||||||
maxRate = 168
|
|
||||||
)
|
|
||||||
|
|
||||||
type state struct {
|
type state struct {
|
||||||
// Generic sponge components.
|
a [1600 / 8]byte // main state of the hash
|
||||||
a [25]uint64 // main state of the hash
|
|
||||||
rate int // the number of bytes of state to use
|
// a[n:rate] is the buffer. If absorbing, it's the remaining space to XOR
|
||||||
|
// into before running the permutation. If squeezing, it's the remaining
|
||||||
|
// output to produce before running the permutation.
|
||||||
|
n, rate int
|
||||||
|
|
||||||
// dsbyte contains the "domain separation" bits and the first bit of
|
// dsbyte contains the "domain separation" bits and the first bit of
|
||||||
// the padding. Sections 6.1 and 6.2 of [1] separate the outputs of the
|
// the padding. Sections 6.1 and 6.2 of [1] separate the outputs of the
|
||||||
@ -39,10 +45,6 @@ type state struct {
|
|||||||
// Extendable-Output Functions (May 2014)"
|
// Extendable-Output Functions (May 2014)"
|
||||||
dsbyte byte
|
dsbyte byte
|
||||||
|
|
||||||
i, n int // storage[i:n] is the buffer, i is only used while squeezing
|
|
||||||
storage [maxRate]byte
|
|
||||||
|
|
||||||
// Specific to SHA-3 and SHAKE.
|
|
||||||
outputLen int // the default output size in bytes
|
outputLen int // the default output size in bytes
|
||||||
state spongeDirection // whether the sponge is absorbing or squeezing
|
state spongeDirection // whether the sponge is absorbing or squeezing
|
||||||
}
|
}
|
||||||
@ -61,7 +63,7 @@ func (d *state) Reset() {
|
|||||||
d.a[i] = 0
|
d.a[i] = 0
|
||||||
}
|
}
|
||||||
d.state = spongeAbsorbing
|
d.state = spongeAbsorbing
|
||||||
d.i, d.n = 0, 0
|
d.n = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *state) clone() *state {
|
func (d *state) clone() *state {
|
||||||
@ -69,22 +71,25 @@ func (d *state) clone() *state {
|
|||||||
return &ret
|
return &ret
|
||||||
}
|
}
|
||||||
|
|
||||||
// permute applies the KeccakF-1600 permutation. It handles
|
// permute applies the KeccakF-1600 permutation.
|
||||||
// any input-output buffering.
|
|
||||||
func (d *state) permute() {
|
func (d *state) permute() {
|
||||||
switch d.state {
|
var a *[25]uint64
|
||||||
case spongeAbsorbing:
|
if cpu.IsBigEndian {
|
||||||
// If we're absorbing, we need to xor the input into the state
|
a = new([25]uint64)
|
||||||
// before applying the permutation.
|
for i := range a {
|
||||||
xorIn(d, d.storage[:d.rate])
|
a[i] = binary.LittleEndian.Uint64(d.a[i*8:])
|
||||||
d.n = 0
|
}
|
||||||
keccakF1600(&d.a)
|
} else {
|
||||||
case spongeSqueezing:
|
a = (*[25]uint64)(unsafe.Pointer(&d.a))
|
||||||
// If we're squeezing, we need to apply the permutation before
|
}
|
||||||
// copying more output.
|
|
||||||
keccakF1600(&d.a)
|
keccakF1600(a)
|
||||||
d.i = 0
|
d.n = 0
|
||||||
copyOut(d, d.storage[:d.rate])
|
|
||||||
|
if cpu.IsBigEndian {
|
||||||
|
for i := range a {
|
||||||
|
binary.LittleEndian.PutUint64(d.a[i*8:], a[i])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,53 +97,36 @@ func (d *state) permute() {
|
|||||||
// the multi-bitrate 10..1 padding rule, and permutes the state.
|
// the multi-bitrate 10..1 padding rule, and permutes the state.
|
||||||
func (d *state) padAndPermute() {
|
func (d *state) padAndPermute() {
|
||||||
// Pad with this instance's domain-separator bits. We know that there's
|
// Pad with this instance's domain-separator bits. We know that there's
|
||||||
// at least one byte of space in d.buf because, if it were full,
|
// at least one byte of space in the sponge because, if it were full,
|
||||||
// permute would have been called to empty it. dsbyte also contains the
|
// permute would have been called to empty it. dsbyte also contains the
|
||||||
// first one bit for the padding. See the comment in the state struct.
|
// first one bit for the padding. See the comment in the state struct.
|
||||||
d.storage[d.n] = d.dsbyte
|
d.a[d.n] ^= d.dsbyte
|
||||||
d.n++
|
|
||||||
for d.n < d.rate {
|
|
||||||
d.storage[d.n] = 0
|
|
||||||
d.n++
|
|
||||||
}
|
|
||||||
// This adds the final one bit for the padding. Because of the way that
|
// This adds the final one bit for the padding. Because of the way that
|
||||||
// bits are numbered from the LSB upwards, the final bit is the MSB of
|
// bits are numbered from the LSB upwards, the final bit is the MSB of
|
||||||
// the last byte.
|
// the last byte.
|
||||||
d.storage[d.rate-1] ^= 0x80
|
d.a[d.rate-1] ^= 0x80
|
||||||
// Apply the permutation
|
// Apply the permutation
|
||||||
d.permute()
|
d.permute()
|
||||||
d.state = spongeSqueezing
|
d.state = spongeSqueezing
|
||||||
d.n = d.rate
|
|
||||||
copyOut(d, d.storage[:d.rate])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write absorbs more data into the hash's state. It panics if any
|
// Write absorbs more data into the hash's state. It panics if any
|
||||||
// output has already been read.
|
// output has already been read.
|
||||||
func (d *state) Write(p []byte) (written int, err error) {
|
func (d *state) Write(p []byte) (n int, err error) {
|
||||||
if d.state != spongeAbsorbing {
|
if d.state != spongeAbsorbing {
|
||||||
panic("sha3: Write after Read")
|
panic("sha3: Write after Read")
|
||||||
}
|
}
|
||||||
written = len(p)
|
|
||||||
|
n = len(p)
|
||||||
|
|
||||||
for len(p) > 0 {
|
for len(p) > 0 {
|
||||||
if d.n == 0 && len(p) >= d.rate {
|
x := subtle.XORBytes(d.a[d.n:d.rate], d.a[d.n:d.rate], p)
|
||||||
// The fast path; absorb a full "rate" bytes of input and apply the permutation.
|
d.n += x
|
||||||
xorIn(d, p[:d.rate])
|
p = p[x:]
|
||||||
p = p[d.rate:]
|
|
||||||
keccakF1600(&d.a)
|
|
||||||
} else {
|
|
||||||
// The slow path; buffer the input until we can fill the sponge, and then xor it in.
|
|
||||||
todo := d.rate - d.n
|
|
||||||
if todo > len(p) {
|
|
||||||
todo = len(p)
|
|
||||||
}
|
|
||||||
d.n += copy(d.storage[d.n:], p[:todo])
|
|
||||||
p = p[todo:]
|
|
||||||
|
|
||||||
// If the sponge is full, apply the permutation.
|
// If the sponge is full, apply the permutation.
|
||||||
if d.n == d.rate {
|
if d.n == d.rate {
|
||||||
d.permute()
|
d.permute()
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,14 +144,14 @@ func (d *state) Read(out []byte) (n int, err error) {
|
|||||||
|
|
||||||
// Now, do the squeezing.
|
// Now, do the squeezing.
|
||||||
for len(out) > 0 {
|
for len(out) > 0 {
|
||||||
n := copy(out, d.storage[d.i:d.n])
|
|
||||||
d.i += n
|
|
||||||
out = out[n:]
|
|
||||||
|
|
||||||
// Apply the permutation if we've squeezed the sponge dry.
|
// Apply the permutation if we've squeezed the sponge dry.
|
||||||
if d.i == d.rate {
|
if d.n == d.rate {
|
||||||
d.permute()
|
d.permute()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
x := copy(out, d.a[d.n:d.rate])
|
||||||
|
d.n += x
|
||||||
|
out = out[x:]
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
@ -183,3 +171,74 @@ func (d *state) Sum(in []byte) []byte {
|
|||||||
dup.Read(hash)
|
dup.Read(hash)
|
||||||
return append(in, hash...)
|
return append(in, hash...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
magicSHA3 = "sha\x08"
|
||||||
|
magicShake = "sha\x09"
|
||||||
|
magicCShake = "sha\x0a"
|
||||||
|
magicKeccak = "sha\x0b"
|
||||||
|
// magic || rate || main state || n || sponge direction
|
||||||
|
marshaledSize = len(magicSHA3) + 1 + 200 + 1 + 1
|
||||||
|
)
|
||||||
|
|
||||||
|
func (d *state) MarshalBinary() ([]byte, error) {
|
||||||
|
return d.AppendBinary(make([]byte, 0, marshaledSize))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *state) AppendBinary(b []byte) ([]byte, error) {
|
||||||
|
switch d.dsbyte {
|
||||||
|
case dsbyteSHA3:
|
||||||
|
b = append(b, magicSHA3...)
|
||||||
|
case dsbyteShake:
|
||||||
|
b = append(b, magicShake...)
|
||||||
|
case dsbyteCShake:
|
||||||
|
b = append(b, magicCShake...)
|
||||||
|
case dsbyteKeccak:
|
||||||
|
b = append(b, magicKeccak...)
|
||||||
|
default:
|
||||||
|
panic("unknown dsbyte")
|
||||||
|
}
|
||||||
|
// rate is at most 168, and n is at most rate.
|
||||||
|
b = append(b, byte(d.rate))
|
||||||
|
b = append(b, d.a[:]...)
|
||||||
|
b = append(b, byte(d.n), byte(d.state))
|
||||||
|
return b, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *state) UnmarshalBinary(b []byte) error {
|
||||||
|
if len(b) != marshaledSize {
|
||||||
|
return errors.New("sha3: invalid hash state")
|
||||||
|
}
|
||||||
|
|
||||||
|
magic := string(b[:len(magicSHA3)])
|
||||||
|
b = b[len(magicSHA3):]
|
||||||
|
switch {
|
||||||
|
case magic == magicSHA3 && d.dsbyte == dsbyteSHA3:
|
||||||
|
case magic == magicShake && d.dsbyte == dsbyteShake:
|
||||||
|
case magic == magicCShake && d.dsbyte == dsbyteCShake:
|
||||||
|
case magic == magicKeccak && d.dsbyte == dsbyteKeccak:
|
||||||
|
default:
|
||||||
|
return errors.New("sha3: invalid hash state identifier")
|
||||||
|
}
|
||||||
|
|
||||||
|
rate := int(b[0])
|
||||||
|
b = b[1:]
|
||||||
|
if rate != d.rate {
|
||||||
|
return errors.New("sha3: invalid hash state function")
|
||||||
|
}
|
||||||
|
|
||||||
|
copy(d.a[:], b)
|
||||||
|
b = b[len(d.a):]
|
||||||
|
|
||||||
|
n, state := int(b[0]), spongeDirection(b[1])
|
||||||
|
if n > d.rate {
|
||||||
|
return errors.New("sha3: invalid hash state")
|
||||||
|
}
|
||||||
|
d.n = n
|
||||||
|
if state != spongeAbsorbing && state != spongeSqueezing {
|
||||||
|
return errors.New("sha3: invalid hash state")
|
||||||
|
}
|
||||||
|
d.state = state
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
83
vendor/golang.org/x/crypto/sha3/shake.go
generated
vendored
83
vendor/golang.org/x/crypto/sha3/shake.go
generated
vendored
@ -16,9 +16,12 @@ package sha3
|
|||||||
// [2] https://doi.org/10.6028/NIST.SP.800-185
|
// [2] https://doi.org/10.6028/NIST.SP.800-185
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"errors"
|
||||||
"hash"
|
"hash"
|
||||||
"io"
|
"io"
|
||||||
|
"math/bits"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ShakeHash defines the interface to hash functions that support
|
// ShakeHash defines the interface to hash functions that support
|
||||||
@ -50,41 +53,33 @@ type cshakeState struct {
|
|||||||
initBlock []byte
|
initBlock []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
// Consts for configuring initial SHA-3 state
|
func bytepad(data []byte, rate int) []byte {
|
||||||
const (
|
out := make([]byte, 0, 9+len(data)+rate-1)
|
||||||
dsbyteShake = 0x1f
|
out = append(out, leftEncode(uint64(rate))...)
|
||||||
dsbyteCShake = 0x04
|
out = append(out, data...)
|
||||||
rate128 = 168
|
if padlen := rate - len(out)%rate; padlen < rate {
|
||||||
rate256 = 136
|
out = append(out, make([]byte, padlen)...)
|
||||||
)
|
}
|
||||||
|
return out
|
||||||
func bytepad(input []byte, w int) []byte {
|
|
||||||
// leftEncode always returns max 9 bytes
|
|
||||||
buf := make([]byte, 0, 9+len(input)+w)
|
|
||||||
buf = append(buf, leftEncode(uint64(w))...)
|
|
||||||
buf = append(buf, input...)
|
|
||||||
padlen := w - (len(buf) % w)
|
|
||||||
return append(buf, make([]byte, padlen)...)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func leftEncode(value uint64) []byte {
|
func leftEncode(x uint64) []byte {
|
||||||
var b [9]byte
|
// Let n be the smallest positive integer for which 2^(8n) > x.
|
||||||
binary.BigEndian.PutUint64(b[1:], value)
|
n := (bits.Len64(x) + 7) / 8
|
||||||
// Trim all but last leading zero bytes
|
if n == 0 {
|
||||||
i := byte(1)
|
n = 1
|
||||||
for i < 8 && b[i] == 0 {
|
|
||||||
i++
|
|
||||||
}
|
}
|
||||||
// Prepend number of encoded bytes
|
// Return n || x with n as a byte and x an n bytes in big-endian order.
|
||||||
b[i-1] = 9 - i
|
b := make([]byte, 9)
|
||||||
return b[i-1:]
|
binary.BigEndian.PutUint64(b[1:], x)
|
||||||
|
b = b[9-n-1:]
|
||||||
|
b[0] = byte(n)
|
||||||
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
func newCShake(N, S []byte, rate, outputLen int, dsbyte byte) ShakeHash {
|
func newCShake(N, S []byte, rate, outputLen int, dsbyte byte) ShakeHash {
|
||||||
c := cshakeState{state: &state{rate: rate, outputLen: outputLen, dsbyte: dsbyte}}
|
c := cshakeState{state: &state{rate: rate, outputLen: outputLen, dsbyte: dsbyte}}
|
||||||
|
c.initBlock = make([]byte, 0, 9+len(N)+9+len(S)) // leftEncode returns max 9 bytes
|
||||||
// leftEncode returns max 9 bytes
|
|
||||||
c.initBlock = make([]byte, 0, 9*2+len(N)+len(S))
|
|
||||||
c.initBlock = append(c.initBlock, leftEncode(uint64(len(N))*8)...)
|
c.initBlock = append(c.initBlock, leftEncode(uint64(len(N))*8)...)
|
||||||
c.initBlock = append(c.initBlock, N...)
|
c.initBlock = append(c.initBlock, N...)
|
||||||
c.initBlock = append(c.initBlock, leftEncode(uint64(len(S))*8)...)
|
c.initBlock = append(c.initBlock, leftEncode(uint64(len(S))*8)...)
|
||||||
@ -111,6 +106,30 @@ func (c *state) Clone() ShakeHash {
|
|||||||
return c.clone()
|
return c.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *cshakeState) MarshalBinary() ([]byte, error) {
|
||||||
|
return c.AppendBinary(make([]byte, 0, marshaledSize+len(c.initBlock)))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *cshakeState) AppendBinary(b []byte) ([]byte, error) {
|
||||||
|
b, err := c.state.AppendBinary(b)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
b = append(b, c.initBlock...)
|
||||||
|
return b, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *cshakeState) UnmarshalBinary(b []byte) error {
|
||||||
|
if len(b) <= marshaledSize {
|
||||||
|
return errors.New("sha3: invalid hash state")
|
||||||
|
}
|
||||||
|
if err := c.state.UnmarshalBinary(b[:marshaledSize]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
c.initBlock = bytes.Clone(b[marshaledSize:])
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// NewShake128 creates a new SHAKE128 variable-output-length ShakeHash.
|
// NewShake128 creates a new SHAKE128 variable-output-length ShakeHash.
|
||||||
// Its generic security strength is 128 bits against all attacks if at
|
// Its generic security strength is 128 bits against all attacks if at
|
||||||
// least 32 bytes of its output are used.
|
// least 32 bytes of its output are used.
|
||||||
@ -126,11 +145,11 @@ func NewShake256() ShakeHash {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newShake128Generic() *state {
|
func newShake128Generic() *state {
|
||||||
return &state{rate: rate128, outputLen: 32, dsbyte: dsbyteShake}
|
return &state{rate: rateK256, outputLen: 32, dsbyte: dsbyteShake}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newShake256Generic() *state {
|
func newShake256Generic() *state {
|
||||||
return &state{rate: rate256, outputLen: 64, dsbyte: dsbyteShake}
|
return &state{rate: rateK512, outputLen: 64, dsbyte: dsbyteShake}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCShake128 creates a new instance of cSHAKE128 variable-output-length ShakeHash,
|
// NewCShake128 creates a new instance of cSHAKE128 variable-output-length ShakeHash,
|
||||||
@ -143,7 +162,7 @@ func NewCShake128(N, S []byte) ShakeHash {
|
|||||||
if len(N) == 0 && len(S) == 0 {
|
if len(N) == 0 && len(S) == 0 {
|
||||||
return NewShake128()
|
return NewShake128()
|
||||||
}
|
}
|
||||||
return newCShake(N, S, rate128, 32, dsbyteCShake)
|
return newCShake(N, S, rateK256, 32, dsbyteCShake)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCShake256 creates a new instance of cSHAKE256 variable-output-length ShakeHash,
|
// NewCShake256 creates a new instance of cSHAKE256 variable-output-length ShakeHash,
|
||||||
@ -156,7 +175,7 @@ func NewCShake256(N, S []byte) ShakeHash {
|
|||||||
if len(N) == 0 && len(S) == 0 {
|
if len(N) == 0 && len(S) == 0 {
|
||||||
return NewShake256()
|
return NewShake256()
|
||||||
}
|
}
|
||||||
return newCShake(N, S, rate256, 64, dsbyteCShake)
|
return newCShake(N, S, rateK512, 64, dsbyteCShake)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ShakeSum128 writes an arbitrary-length digest of data into hash.
|
// ShakeSum128 writes an arbitrary-length digest of data into hash.
|
||||||
|
40
vendor/golang.org/x/crypto/sha3/xor.go
generated
vendored
40
vendor/golang.org/x/crypto/sha3/xor.go
generated
vendored
@ -1,40 +0,0 @@
|
|||||||
// Copyright 2015 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.
|
|
||||||
|
|
||||||
package sha3
|
|
||||||
|
|
||||||
import (
|
|
||||||
"crypto/subtle"
|
|
||||||
"encoding/binary"
|
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"golang.org/x/sys/cpu"
|
|
||||||
)
|
|
||||||
|
|
||||||
// xorIn xors the bytes in buf into the state.
|
|
||||||
func xorIn(d *state, buf []byte) {
|
|
||||||
if cpu.IsBigEndian {
|
|
||||||
for i := 0; len(buf) >= 8; i++ {
|
|
||||||
a := binary.LittleEndian.Uint64(buf)
|
|
||||||
d.a[i] ^= a
|
|
||||||
buf = buf[8:]
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ab := (*[25 * 64 / 8]byte)(unsafe.Pointer(&d.a))
|
|
||||||
subtle.XORBytes(ab[:], ab[:], buf)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// copyOut copies uint64s to a byte buffer.
|
|
||||||
func copyOut(d *state, b []byte) {
|
|
||||||
if cpu.IsBigEndian {
|
|
||||||
for i := 0; len(b) >= 8; i++ {
|
|
||||||
binary.LittleEndian.PutUint64(b, d.a[i])
|
|
||||||
b = b[8:]
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ab := (*[25 * 64 / 8]byte)(unsafe.Pointer(&d.a))
|
|
||||||
copy(b, ab[:])
|
|
||||||
}
|
|
||||||
}
|
|
122
vendor/golang.org/x/net/http2/config.go
generated
vendored
Normal file
122
vendor/golang.org/x/net/http2/config.go
generated
vendored
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
// Copyright 2024 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.
|
||||||
|
|
||||||
|
package http2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// http2Config is a package-internal version of net/http.HTTP2Config.
|
||||||
|
//
|
||||||
|
// http.HTTP2Config was added in Go 1.24.
|
||||||
|
// When running with a version of net/http that includes HTTP2Config,
|
||||||
|
// we merge the configuration with the fields in Transport or Server
|
||||||
|
// to produce an http2Config.
|
||||||
|
//
|
||||||
|
// Zero valued fields in http2Config are interpreted as in the
|
||||||
|
// net/http.HTTPConfig documentation.
|
||||||
|
//
|
||||||
|
// Precedence order for reconciling configurations is:
|
||||||
|
//
|
||||||
|
// - Use the net/http.{Server,Transport}.HTTP2Config value, when non-zero.
|
||||||
|
// - Otherwise use the http2.{Server.Transport} value.
|
||||||
|
// - If the resulting value is zero or out of range, use a default.
|
||||||
|
type http2Config struct {
|
||||||
|
MaxConcurrentStreams uint32
|
||||||
|
MaxDecoderHeaderTableSize uint32
|
||||||
|
MaxEncoderHeaderTableSize uint32
|
||||||
|
MaxReadFrameSize uint32
|
||||||
|
MaxUploadBufferPerConnection int32
|
||||||
|
MaxUploadBufferPerStream int32
|
||||||
|
SendPingTimeout time.Duration
|
||||||
|
PingTimeout time.Duration
|
||||||
|
WriteByteTimeout time.Duration
|
||||||
|
PermitProhibitedCipherSuites bool
|
||||||
|
CountError func(errType string)
|
||||||
|
}
|
||||||
|
|
||||||
|
// configFromServer merges configuration settings from
|
||||||
|
// net/http.Server.HTTP2Config and http2.Server.
|
||||||
|
func configFromServer(h1 *http.Server, h2 *Server) http2Config {
|
||||||
|
conf := http2Config{
|
||||||
|
MaxConcurrentStreams: h2.MaxConcurrentStreams,
|
||||||
|
MaxEncoderHeaderTableSize: h2.MaxEncoderHeaderTableSize,
|
||||||
|
MaxDecoderHeaderTableSize: h2.MaxDecoderHeaderTableSize,
|
||||||
|
MaxReadFrameSize: h2.MaxReadFrameSize,
|
||||||
|
MaxUploadBufferPerConnection: h2.MaxUploadBufferPerConnection,
|
||||||
|
MaxUploadBufferPerStream: h2.MaxUploadBufferPerStream,
|
||||||
|
SendPingTimeout: h2.ReadIdleTimeout,
|
||||||
|
PingTimeout: h2.PingTimeout,
|
||||||
|
WriteByteTimeout: h2.WriteByteTimeout,
|
||||||
|
PermitProhibitedCipherSuites: h2.PermitProhibitedCipherSuites,
|
||||||
|
CountError: h2.CountError,
|
||||||
|
}
|
||||||
|
fillNetHTTPServerConfig(&conf, h1)
|
||||||
|
setConfigDefaults(&conf, true)
|
||||||
|
return conf
|
||||||
|
}
|
||||||
|
|
||||||
|
// configFromServer merges configuration settings from h2 and h2.t1.HTTP2
|
||||||
|
// (the net/http Transport).
|
||||||
|
func configFromTransport(h2 *Transport) http2Config {
|
||||||
|
conf := http2Config{
|
||||||
|
MaxEncoderHeaderTableSize: h2.MaxEncoderHeaderTableSize,
|
||||||
|
MaxDecoderHeaderTableSize: h2.MaxDecoderHeaderTableSize,
|
||||||
|
MaxReadFrameSize: h2.MaxReadFrameSize,
|
||||||
|
SendPingTimeout: h2.ReadIdleTimeout,
|
||||||
|
PingTimeout: h2.PingTimeout,
|
||||||
|
WriteByteTimeout: h2.WriteByteTimeout,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unlike most config fields, where out-of-range values revert to the default,
|
||||||
|
// Transport.MaxReadFrameSize clips.
|
||||||
|
if conf.MaxReadFrameSize < minMaxFrameSize {
|
||||||
|
conf.MaxReadFrameSize = minMaxFrameSize
|
||||||
|
} else if conf.MaxReadFrameSize > maxFrameSize {
|
||||||
|
conf.MaxReadFrameSize = maxFrameSize
|
||||||
|
}
|
||||||
|
|
||||||
|
if h2.t1 != nil {
|
||||||
|
fillNetHTTPTransportConfig(&conf, h2.t1)
|
||||||
|
}
|
||||||
|
setConfigDefaults(&conf, false)
|
||||||
|
return conf
|
||||||
|
}
|
||||||
|
|
||||||
|
func setDefault[T ~int | ~int32 | ~uint32 | ~int64](v *T, minval, maxval, defval T) {
|
||||||
|
if *v < minval || *v > maxval {
|
||||||
|
*v = defval
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func setConfigDefaults(conf *http2Config, server bool) {
|
||||||
|
setDefault(&conf.MaxConcurrentStreams, 1, math.MaxUint32, defaultMaxStreams)
|
||||||
|
setDefault(&conf.MaxEncoderHeaderTableSize, 1, math.MaxUint32, initialHeaderTableSize)
|
||||||
|
setDefault(&conf.MaxDecoderHeaderTableSize, 1, math.MaxUint32, initialHeaderTableSize)
|
||||||
|
if server {
|
||||||
|
setDefault(&conf.MaxUploadBufferPerConnection, initialWindowSize, math.MaxInt32, 1<<20)
|
||||||
|
} else {
|
||||||
|
setDefault(&conf.MaxUploadBufferPerConnection, initialWindowSize, math.MaxInt32, transportDefaultConnFlow)
|
||||||
|
}
|
||||||
|
if server {
|
||||||
|
setDefault(&conf.MaxUploadBufferPerStream, 1, math.MaxInt32, 1<<20)
|
||||||
|
} else {
|
||||||
|
setDefault(&conf.MaxUploadBufferPerStream, 1, math.MaxInt32, transportDefaultStreamFlow)
|
||||||
|
}
|
||||||
|
setDefault(&conf.MaxReadFrameSize, minMaxFrameSize, maxFrameSize, defaultMaxReadFrameSize)
|
||||||
|
setDefault(&conf.PingTimeout, 1, math.MaxInt64, 15*time.Second)
|
||||||
|
}
|
||||||
|
|
||||||
|
// adjustHTTP1MaxHeaderSize converts a limit in bytes on the size of an HTTP/1 header
|
||||||
|
// to an HTTP/2 MAX_HEADER_LIST_SIZE value.
|
||||||
|
func adjustHTTP1MaxHeaderSize(n int64) int64 {
|
||||||
|
// http2's count is in a slightly different unit and includes 32 bytes per pair.
|
||||||
|
// So, take the net/http.Server value and pad it up a bit, assuming 10 headers.
|
||||||
|
const perFieldOverhead = 32 // per http2 spec
|
||||||
|
const typicalHeaders = 10 // conservative
|
||||||
|
return n + typicalHeaders*perFieldOverhead
|
||||||
|
}
|
61
vendor/golang.org/x/net/http2/config_go124.go
generated
vendored
Normal file
61
vendor/golang.org/x/net/http2/config_go124.go
generated
vendored
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// Copyright 2024 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 go1.24
|
||||||
|
|
||||||
|
package http2
|
||||||
|
|
||||||
|
import "net/http"
|
||||||
|
|
||||||
|
// fillNetHTTPServerConfig sets fields in conf from srv.HTTP2.
|
||||||
|
func fillNetHTTPServerConfig(conf *http2Config, srv *http.Server) {
|
||||||
|
fillNetHTTPConfig(conf, srv.HTTP2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// fillNetHTTPServerConfig sets fields in conf from tr.HTTP2.
|
||||||
|
func fillNetHTTPTransportConfig(conf *http2Config, tr *http.Transport) {
|
||||||
|
fillNetHTTPConfig(conf, tr.HTTP2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func fillNetHTTPConfig(conf *http2Config, h2 *http.HTTP2Config) {
|
||||||
|
if h2 == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if h2.MaxConcurrentStreams != 0 {
|
||||||
|
conf.MaxConcurrentStreams = uint32(h2.MaxConcurrentStreams)
|
||||||
|
}
|
||||||
|
if h2.MaxEncoderHeaderTableSize != 0 {
|
||||||
|
conf.MaxEncoderHeaderTableSize = uint32(h2.MaxEncoderHeaderTableSize)
|
||||||
|
}
|
||||||
|
if h2.MaxDecoderHeaderTableSize != 0 {
|
||||||
|
conf.MaxDecoderHeaderTableSize = uint32(h2.MaxDecoderHeaderTableSize)
|
||||||
|
}
|
||||||
|
if h2.MaxConcurrentStreams != 0 {
|
||||||
|
conf.MaxConcurrentStreams = uint32(h2.MaxConcurrentStreams)
|
||||||
|
}
|
||||||
|
if h2.MaxReadFrameSize != 0 {
|
||||||
|
conf.MaxReadFrameSize = uint32(h2.MaxReadFrameSize)
|
||||||
|
}
|
||||||
|
if h2.MaxReceiveBufferPerConnection != 0 {
|
||||||
|
conf.MaxUploadBufferPerConnection = int32(h2.MaxReceiveBufferPerConnection)
|
||||||
|
}
|
||||||
|
if h2.MaxReceiveBufferPerStream != 0 {
|
||||||
|
conf.MaxUploadBufferPerStream = int32(h2.MaxReceiveBufferPerStream)
|
||||||
|
}
|
||||||
|
if h2.SendPingTimeout != 0 {
|
||||||
|
conf.SendPingTimeout = h2.SendPingTimeout
|
||||||
|
}
|
||||||
|
if h2.PingTimeout != 0 {
|
||||||
|
conf.PingTimeout = h2.PingTimeout
|
||||||
|
}
|
||||||
|
if h2.WriteByteTimeout != 0 {
|
||||||
|
conf.WriteByteTimeout = h2.WriteByteTimeout
|
||||||
|
}
|
||||||
|
if h2.PermitProhibitedCipherSuites {
|
||||||
|
conf.PermitProhibitedCipherSuites = true
|
||||||
|
}
|
||||||
|
if h2.CountError != nil {
|
||||||
|
conf.CountError = h2.CountError
|
||||||
|
}
|
||||||
|
}
|
16
vendor/golang.org/x/net/http2/config_pre_go124.go
generated
vendored
Normal file
16
vendor/golang.org/x/net/http2/config_pre_go124.go
generated
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Copyright 2024 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 !go1.24
|
||||||
|
|
||||||
|
package http2
|
||||||
|
|
||||||
|
import "net/http"
|
||||||
|
|
||||||
|
// Pre-Go 1.24 fallback.
|
||||||
|
// The Server.HTTP2 and Transport.HTTP2 config fields were added in Go 1.24.
|
||||||
|
|
||||||
|
func fillNetHTTPServerConfig(conf *http2Config, srv *http.Server) {}
|
||||||
|
|
||||||
|
func fillNetHTTPTransportConfig(conf *http2Config, tr *http.Transport) {}
|
53
vendor/golang.org/x/net/http2/http2.go
generated
vendored
53
vendor/golang.org/x/net/http2/http2.go
generated
vendored
@ -19,8 +19,9 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"context"
|
"context"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"sort"
|
"sort"
|
||||||
@ -237,13 +238,19 @@ func (cw closeWaiter) Wait() {
|
|||||||
// Its buffered writer is lazily allocated as needed, to minimize
|
// Its buffered writer is lazily allocated as needed, to minimize
|
||||||
// idle memory usage with many connections.
|
// idle memory usage with many connections.
|
||||||
type bufferedWriter struct {
|
type bufferedWriter struct {
|
||||||
_ incomparable
|
_ incomparable
|
||||||
w io.Writer // immutable
|
group synctestGroupInterface // immutable
|
||||||
bw *bufio.Writer // non-nil when data is buffered
|
conn net.Conn // immutable
|
||||||
|
bw *bufio.Writer // non-nil when data is buffered
|
||||||
|
byteTimeout time.Duration // immutable, WriteByteTimeout
|
||||||
}
|
}
|
||||||
|
|
||||||
func newBufferedWriter(w io.Writer) *bufferedWriter {
|
func newBufferedWriter(group synctestGroupInterface, conn net.Conn, timeout time.Duration) *bufferedWriter {
|
||||||
return &bufferedWriter{w: w}
|
return &bufferedWriter{
|
||||||
|
group: group,
|
||||||
|
conn: conn,
|
||||||
|
byteTimeout: timeout,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// bufWriterPoolBufferSize is the size of bufio.Writer's
|
// bufWriterPoolBufferSize is the size of bufio.Writer's
|
||||||
@ -270,7 +277,7 @@ func (w *bufferedWriter) Available() int {
|
|||||||
func (w *bufferedWriter) Write(p []byte) (n int, err error) {
|
func (w *bufferedWriter) Write(p []byte) (n int, err error) {
|
||||||
if w.bw == nil {
|
if w.bw == nil {
|
||||||
bw := bufWriterPool.Get().(*bufio.Writer)
|
bw := bufWriterPool.Get().(*bufio.Writer)
|
||||||
bw.Reset(w.w)
|
bw.Reset((*bufferedWriterTimeoutWriter)(w))
|
||||||
w.bw = bw
|
w.bw = bw
|
||||||
}
|
}
|
||||||
return w.bw.Write(p)
|
return w.bw.Write(p)
|
||||||
@ -288,6 +295,38 @@ func (w *bufferedWriter) Flush() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type bufferedWriterTimeoutWriter bufferedWriter
|
||||||
|
|
||||||
|
func (w *bufferedWriterTimeoutWriter) Write(p []byte) (n int, err error) {
|
||||||
|
return writeWithByteTimeout(w.group, w.conn, w.byteTimeout, p)
|
||||||
|
}
|
||||||
|
|
||||||
|
// writeWithByteTimeout writes to conn.
|
||||||
|
// If more than timeout passes without any bytes being written to the connection,
|
||||||
|
// the write fails.
|
||||||
|
func writeWithByteTimeout(group synctestGroupInterface, conn net.Conn, timeout time.Duration, p []byte) (n int, err error) {
|
||||||
|
if timeout <= 0 {
|
||||||
|
return conn.Write(p)
|
||||||
|
}
|
||||||
|
for {
|
||||||
|
var now time.Time
|
||||||
|
if group == nil {
|
||||||
|
now = time.Now()
|
||||||
|
} else {
|
||||||
|
now = group.Now()
|
||||||
|
}
|
||||||
|
conn.SetWriteDeadline(now.Add(timeout))
|
||||||
|
nn, err := conn.Write(p[n:])
|
||||||
|
n += nn
|
||||||
|
if n == len(p) || nn == 0 || !errors.Is(err, os.ErrDeadlineExceeded) {
|
||||||
|
// Either we finished the write, made no progress, or hit the deadline.
|
||||||
|
// Whichever it is, we're done now.
|
||||||
|
conn.SetWriteDeadline(time.Time{})
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func mustUint31(v int32) uint32 {
|
func mustUint31(v int32) uint32 {
|
||||||
if v < 0 || v > 2147483647 {
|
if v < 0 || v > 2147483647 {
|
||||||
panic("out of range")
|
panic("out of range")
|
||||||
|
181
vendor/golang.org/x/net/http2/server.go
generated
vendored
181
vendor/golang.org/x/net/http2/server.go
generated
vendored
@ -29,6 +29,7 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"crypto/rand"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -52,10 +53,14 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
prefaceTimeout = 10 * time.Second
|
prefaceTimeout = 10 * time.Second
|
||||||
firstSettingsTimeout = 2 * time.Second // should be in-flight with preface anyway
|
firstSettingsTimeout = 2 * time.Second // should be in-flight with preface anyway
|
||||||
handlerChunkWriteSize = 4 << 10
|
handlerChunkWriteSize = 4 << 10
|
||||||
defaultMaxStreams = 250 // TODO: make this 100 as the GFE seems to?
|
defaultMaxStreams = 250 // TODO: make this 100 as the GFE seems to?
|
||||||
|
|
||||||
|
// 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.
|
||||||
maxQueuedControlFrames = 10000
|
maxQueuedControlFrames = 10000
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -127,6 +132,22 @@ type Server struct {
|
|||||||
// If zero or negative, there is no timeout.
|
// If zero or negative, there is no timeout.
|
||||||
IdleTimeout time.Duration
|
IdleTimeout time.Duration
|
||||||
|
|
||||||
|
// ReadIdleTimeout is the timeout after which a health check using a ping
|
||||||
|
// frame will be carried out if no frame is received on the connection.
|
||||||
|
// If zero, no health check is performed.
|
||||||
|
ReadIdleTimeout time.Duration
|
||||||
|
|
||||||
|
// PingTimeout is the timeout after which the connection will be closed
|
||||||
|
// if a response to a ping is not received.
|
||||||
|
// If zero, a default of 15 seconds is used.
|
||||||
|
PingTimeout time.Duration
|
||||||
|
|
||||||
|
// WriteByteTimeout is the timeout after which a connection will be
|
||||||
|
// closed if no data can be written to it. The timeout begins when data is
|
||||||
|
// available to write, and is extended whenever any bytes are written.
|
||||||
|
// If zero or negative, there is no timeout.
|
||||||
|
WriteByteTimeout time.Duration
|
||||||
|
|
||||||
// MaxUploadBufferPerConnection is the size of the initial flow
|
// MaxUploadBufferPerConnection is the size of the initial flow
|
||||||
// control window for each connections. The HTTP/2 spec does not
|
// control window for each connections. The HTTP/2 spec does not
|
||||||
// allow this to be smaller than 65535 or larger than 2^32-1.
|
// allow this to be smaller than 65535 or larger than 2^32-1.
|
||||||
@ -189,57 +210,6 @@ func (s *Server) afterFunc(d time.Duration, f func()) timer {
|
|||||||
return timeTimer{time.AfterFunc(d, f)}
|
return timeTimer{time.AfterFunc(d, f)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) initialConnRecvWindowSize() int32 {
|
|
||||||
if s.MaxUploadBufferPerConnection >= initialWindowSize {
|
|
||||||
return s.MaxUploadBufferPerConnection
|
|
||||||
}
|
|
||||||
return 1 << 20
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Server) initialStreamRecvWindowSize() int32 {
|
|
||||||
if s.MaxUploadBufferPerStream > 0 {
|
|
||||||
return s.MaxUploadBufferPerStream
|
|
||||||
}
|
|
||||||
return 1 << 20
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Server) maxReadFrameSize() uint32 {
|
|
||||||
if v := s.MaxReadFrameSize; v >= minMaxFrameSize && v <= maxFrameSize {
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
return defaultMaxReadFrameSize
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Server) maxConcurrentStreams() uint32 {
|
|
||||||
if v := s.MaxConcurrentStreams; v > 0 {
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
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.
|
|
||||||
func (s *Server) maxQueuedControlFrames() int {
|
|
||||||
// TODO: if anybody asks, add a Server field, and remember to define the
|
|
||||||
// behavior of negative values.
|
|
||||||
return maxQueuedControlFrames
|
|
||||||
}
|
|
||||||
|
|
||||||
type serverInternalState struct {
|
type serverInternalState struct {
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
activeConns map[*serverConn]struct{}
|
activeConns map[*serverConn]struct{}
|
||||||
@ -440,13 +410,15 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon
|
|||||||
baseCtx, cancel := serverConnBaseContext(c, opts)
|
baseCtx, cancel := serverConnBaseContext(c, opts)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
http1srv := opts.baseConfig()
|
||||||
|
conf := configFromServer(http1srv, s)
|
||||||
sc := &serverConn{
|
sc := &serverConn{
|
||||||
srv: s,
|
srv: s,
|
||||||
hs: opts.baseConfig(),
|
hs: http1srv,
|
||||||
conn: c,
|
conn: c,
|
||||||
baseCtx: baseCtx,
|
baseCtx: baseCtx,
|
||||||
remoteAddrStr: c.RemoteAddr().String(),
|
remoteAddrStr: c.RemoteAddr().String(),
|
||||||
bw: newBufferedWriter(c),
|
bw: newBufferedWriter(s.group, c, conf.WriteByteTimeout),
|
||||||
handler: opts.handler(),
|
handler: opts.handler(),
|
||||||
streams: make(map[uint32]*stream),
|
streams: make(map[uint32]*stream),
|
||||||
readFrameCh: make(chan readFrameResult),
|
readFrameCh: make(chan readFrameResult),
|
||||||
@ -456,9 +428,12 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon
|
|||||||
bodyReadCh: make(chan bodyReadMsg), // buffering doesn't matter either way
|
bodyReadCh: make(chan bodyReadMsg), // buffering doesn't matter either way
|
||||||
doneServing: make(chan struct{}),
|
doneServing: make(chan struct{}),
|
||||||
clientMaxStreams: math.MaxUint32, // Section 6.5.2: "Initially, there is no limit to this value"
|
clientMaxStreams: math.MaxUint32, // Section 6.5.2: "Initially, there is no limit to this value"
|
||||||
advMaxStreams: s.maxConcurrentStreams(),
|
advMaxStreams: conf.MaxConcurrentStreams,
|
||||||
initialStreamSendWindowSize: initialWindowSize,
|
initialStreamSendWindowSize: initialWindowSize,
|
||||||
|
initialStreamRecvWindowSize: conf.MaxUploadBufferPerStream,
|
||||||
maxFrameSize: initialMaxFrameSize,
|
maxFrameSize: initialMaxFrameSize,
|
||||||
|
pingTimeout: conf.PingTimeout,
|
||||||
|
countErrorFunc: conf.CountError,
|
||||||
serveG: newGoroutineLock(),
|
serveG: newGoroutineLock(),
|
||||||
pushEnabled: true,
|
pushEnabled: true,
|
||||||
sawClientPreface: opts.SawClientPreface,
|
sawClientPreface: opts.SawClientPreface,
|
||||||
@ -491,15 +466,15 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon
|
|||||||
sc.flow.add(initialWindowSize)
|
sc.flow.add(initialWindowSize)
|
||||||
sc.inflow.init(initialWindowSize)
|
sc.inflow.init(initialWindowSize)
|
||||||
sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf)
|
sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf)
|
||||||
sc.hpackEncoder.SetMaxDynamicTableSizeLimit(s.maxEncoderHeaderTableSize())
|
sc.hpackEncoder.SetMaxDynamicTableSizeLimit(conf.MaxEncoderHeaderTableSize)
|
||||||
|
|
||||||
fr := NewFramer(sc.bw, c)
|
fr := NewFramer(sc.bw, c)
|
||||||
if s.CountError != nil {
|
if conf.CountError != nil {
|
||||||
fr.countError = s.CountError
|
fr.countError = conf.CountError
|
||||||
}
|
}
|
||||||
fr.ReadMetaHeaders = hpack.NewDecoder(s.maxDecoderHeaderTableSize(), nil)
|
fr.ReadMetaHeaders = hpack.NewDecoder(conf.MaxDecoderHeaderTableSize, nil)
|
||||||
fr.MaxHeaderListSize = sc.maxHeaderListSize()
|
fr.MaxHeaderListSize = sc.maxHeaderListSize()
|
||||||
fr.SetMaxReadFrameSize(s.maxReadFrameSize())
|
fr.SetMaxReadFrameSize(conf.MaxReadFrameSize)
|
||||||
sc.framer = fr
|
sc.framer = fr
|
||||||
|
|
||||||
if tc, ok := c.(connectionStater); ok {
|
if tc, ok := c.(connectionStater); ok {
|
||||||
@ -532,7 +507,7 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon
|
|||||||
// So for now, do nothing here again.
|
// So for now, do nothing here again.
|
||||||
}
|
}
|
||||||
|
|
||||||
if !s.PermitProhibitedCipherSuites && isBadCipher(sc.tlsState.CipherSuite) {
|
if !conf.PermitProhibitedCipherSuites && isBadCipher(sc.tlsState.CipherSuite) {
|
||||||
// "Endpoints MAY choose to generate a connection error
|
// "Endpoints MAY choose to generate a connection error
|
||||||
// (Section 5.4.1) of type INADEQUATE_SECURITY if one of
|
// (Section 5.4.1) of type INADEQUATE_SECURITY if one of
|
||||||
// the prohibited cipher suites are negotiated."
|
// the prohibited cipher suites are negotiated."
|
||||||
@ -569,7 +544,7 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon
|
|||||||
opts.UpgradeRequest = nil
|
opts.UpgradeRequest = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
sc.serve()
|
sc.serve(conf)
|
||||||
}
|
}
|
||||||
|
|
||||||
func serverConnBaseContext(c net.Conn, opts *ServeConnOpts) (ctx context.Context, cancel func()) {
|
func serverConnBaseContext(c net.Conn, opts *ServeConnOpts) (ctx context.Context, cancel func()) {
|
||||||
@ -609,6 +584,7 @@ type serverConn struct {
|
|||||||
tlsState *tls.ConnectionState // shared by all handlers, like net/http
|
tlsState *tls.ConnectionState // shared by all handlers, like net/http
|
||||||
remoteAddrStr string
|
remoteAddrStr string
|
||||||
writeSched WriteScheduler
|
writeSched WriteScheduler
|
||||||
|
countErrorFunc func(errType string)
|
||||||
|
|
||||||
// Everything following is owned by the serve loop; use serveG.check():
|
// Everything following is owned by the serve loop; use serveG.check():
|
||||||
serveG goroutineLock // used to verify funcs are on serve()
|
serveG goroutineLock // used to verify funcs are on serve()
|
||||||
@ -628,6 +604,7 @@ type serverConn struct {
|
|||||||
streams map[uint32]*stream
|
streams map[uint32]*stream
|
||||||
unstartedHandlers []unstartedHandler
|
unstartedHandlers []unstartedHandler
|
||||||
initialStreamSendWindowSize int32
|
initialStreamSendWindowSize int32
|
||||||
|
initialStreamRecvWindowSize int32
|
||||||
maxFrameSize int32
|
maxFrameSize int32
|
||||||
peerMaxHeaderListSize uint32 // zero means unknown (default)
|
peerMaxHeaderListSize uint32 // zero means unknown (default)
|
||||||
canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case
|
canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case
|
||||||
@ -638,9 +615,14 @@ type serverConn struct {
|
|||||||
inGoAway bool // we've started to or sent GOAWAY
|
inGoAway bool // we've started to or sent GOAWAY
|
||||||
inFrameScheduleLoop bool // whether we're in the scheduleFrameWrite loop
|
inFrameScheduleLoop bool // whether we're in the scheduleFrameWrite loop
|
||||||
needToSendGoAway bool // we need to schedule a GOAWAY frame write
|
needToSendGoAway bool // we need to schedule a GOAWAY frame write
|
||||||
|
pingSent bool
|
||||||
|
sentPingData [8]byte
|
||||||
goAwayCode ErrCode
|
goAwayCode ErrCode
|
||||||
shutdownTimer timer // nil until used
|
shutdownTimer timer // nil until used
|
||||||
idleTimer timer // nil if unused
|
idleTimer timer // nil if unused
|
||||||
|
readIdleTimeout time.Duration
|
||||||
|
pingTimeout time.Duration
|
||||||
|
readIdleTimer timer // nil if unused
|
||||||
|
|
||||||
// Owned by the writeFrameAsync goroutine:
|
// Owned by the writeFrameAsync goroutine:
|
||||||
headerWriteBuf bytes.Buffer
|
headerWriteBuf bytes.Buffer
|
||||||
@ -655,11 +637,7 @@ func (sc *serverConn) maxHeaderListSize() uint32 {
|
|||||||
if n <= 0 {
|
if n <= 0 {
|
||||||
n = http.DefaultMaxHeaderBytes
|
n = http.DefaultMaxHeaderBytes
|
||||||
}
|
}
|
||||||
// http2's count is in a slightly different unit and includes 32 bytes per pair.
|
return uint32(adjustHTTP1MaxHeaderSize(int64(n)))
|
||||||
// So, take the net/http.Server value and pad it up a bit, assuming 10 headers.
|
|
||||||
const perFieldOverhead = 32 // per http2 spec
|
|
||||||
const typicalHeaders = 10 // conservative
|
|
||||||
return uint32(n + typicalHeaders*perFieldOverhead)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sc *serverConn) curOpenStreams() uint32 {
|
func (sc *serverConn) curOpenStreams() uint32 {
|
||||||
@ -923,7 +901,7 @@ func (sc *serverConn) notePanic() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sc *serverConn) serve() {
|
func (sc *serverConn) serve(conf http2Config) {
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
defer sc.notePanic()
|
defer sc.notePanic()
|
||||||
defer sc.conn.Close()
|
defer sc.conn.Close()
|
||||||
@ -937,18 +915,18 @@ func (sc *serverConn) serve() {
|
|||||||
|
|
||||||
sc.writeFrame(FrameWriteRequest{
|
sc.writeFrame(FrameWriteRequest{
|
||||||
write: writeSettings{
|
write: writeSettings{
|
||||||
{SettingMaxFrameSize, sc.srv.maxReadFrameSize()},
|
{SettingMaxFrameSize, conf.MaxReadFrameSize},
|
||||||
{SettingMaxConcurrentStreams, sc.advMaxStreams},
|
{SettingMaxConcurrentStreams, sc.advMaxStreams},
|
||||||
{SettingMaxHeaderListSize, sc.maxHeaderListSize()},
|
{SettingMaxHeaderListSize, sc.maxHeaderListSize()},
|
||||||
{SettingHeaderTableSize, sc.srv.maxDecoderHeaderTableSize()},
|
{SettingHeaderTableSize, conf.MaxDecoderHeaderTableSize},
|
||||||
{SettingInitialWindowSize, uint32(sc.srv.initialStreamRecvWindowSize())},
|
{SettingInitialWindowSize, uint32(sc.initialStreamRecvWindowSize)},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
sc.unackedSettings++
|
sc.unackedSettings++
|
||||||
|
|
||||||
// Each connection starts with initialWindowSize inflow tokens.
|
// Each connection starts with initialWindowSize inflow tokens.
|
||||||
// If a higher value is configured, we add more tokens.
|
// If a higher value is configured, we add more tokens.
|
||||||
if diff := sc.srv.initialConnRecvWindowSize() - initialWindowSize; diff > 0 {
|
if diff := conf.MaxUploadBufferPerConnection - initialWindowSize; diff > 0 {
|
||||||
sc.sendWindowUpdate(nil, int(diff))
|
sc.sendWindowUpdate(nil, int(diff))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -968,11 +946,18 @@ func (sc *serverConn) serve() {
|
|||||||
defer sc.idleTimer.Stop()
|
defer sc.idleTimer.Stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if conf.SendPingTimeout > 0 {
|
||||||
|
sc.readIdleTimeout = conf.SendPingTimeout
|
||||||
|
sc.readIdleTimer = sc.srv.afterFunc(conf.SendPingTimeout, sc.onReadIdleTimer)
|
||||||
|
defer sc.readIdleTimer.Stop()
|
||||||
|
}
|
||||||
|
|
||||||
go sc.readFrames() // closed by defer sc.conn.Close above
|
go sc.readFrames() // closed by defer sc.conn.Close above
|
||||||
|
|
||||||
settingsTimer := sc.srv.afterFunc(firstSettingsTimeout, sc.onSettingsTimer)
|
settingsTimer := sc.srv.afterFunc(firstSettingsTimeout, sc.onSettingsTimer)
|
||||||
defer settingsTimer.Stop()
|
defer settingsTimer.Stop()
|
||||||
|
|
||||||
|
lastFrameTime := sc.srv.now()
|
||||||
loopNum := 0
|
loopNum := 0
|
||||||
for {
|
for {
|
||||||
loopNum++
|
loopNum++
|
||||||
@ -986,6 +971,7 @@ func (sc *serverConn) serve() {
|
|||||||
case res := <-sc.wroteFrameCh:
|
case res := <-sc.wroteFrameCh:
|
||||||
sc.wroteFrame(res)
|
sc.wroteFrame(res)
|
||||||
case res := <-sc.readFrameCh:
|
case res := <-sc.readFrameCh:
|
||||||
|
lastFrameTime = sc.srv.now()
|
||||||
// Process any written frames before reading new frames from the client since a
|
// Process any written frames before reading new frames from the client since a
|
||||||
// written frame could have triggered a new stream to be started.
|
// written frame could have triggered a new stream to be started.
|
||||||
if sc.writingFrameAsync {
|
if sc.writingFrameAsync {
|
||||||
@ -1017,6 +1003,8 @@ func (sc *serverConn) serve() {
|
|||||||
case idleTimerMsg:
|
case idleTimerMsg:
|
||||||
sc.vlogf("connection is idle")
|
sc.vlogf("connection is idle")
|
||||||
sc.goAway(ErrCodeNo)
|
sc.goAway(ErrCodeNo)
|
||||||
|
case readIdleTimerMsg:
|
||||||
|
sc.handlePingTimer(lastFrameTime)
|
||||||
case shutdownTimerMsg:
|
case shutdownTimerMsg:
|
||||||
sc.vlogf("GOAWAY close timer fired; closing conn from %v", sc.conn.RemoteAddr())
|
sc.vlogf("GOAWAY close timer fired; closing conn from %v", sc.conn.RemoteAddr())
|
||||||
return
|
return
|
||||||
@ -1039,7 +1027,7 @@ func (sc *serverConn) serve() {
|
|||||||
// If the peer is causing us to generate a lot of control frames,
|
// If the peer is causing us to generate a lot of control frames,
|
||||||
// but not reading them from us, assume they are trying to make us
|
// but not reading them from us, assume they are trying to make us
|
||||||
// run out of memory.
|
// run out of memory.
|
||||||
if sc.queuedControlFrames > sc.srv.maxQueuedControlFrames() {
|
if sc.queuedControlFrames > maxQueuedControlFrames {
|
||||||
sc.vlogf("http2: too many control frames in send queue, closing connection")
|
sc.vlogf("http2: too many control frames in send queue, closing connection")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -1055,12 +1043,39 @@ func (sc *serverConn) serve() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sc *serverConn) handlePingTimer(lastFrameReadTime time.Time) {
|
||||||
|
if sc.pingSent {
|
||||||
|
sc.vlogf("timeout waiting for PING response")
|
||||||
|
sc.conn.Close()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
pingAt := lastFrameReadTime.Add(sc.readIdleTimeout)
|
||||||
|
now := sc.srv.now()
|
||||||
|
if pingAt.After(now) {
|
||||||
|
// We received frames since arming the ping timer.
|
||||||
|
// Reset it for the next possible timeout.
|
||||||
|
sc.readIdleTimer.Reset(pingAt.Sub(now))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
sc.pingSent = true
|
||||||
|
// Ignore crypto/rand.Read errors: It generally can't fail, and worse case if it does
|
||||||
|
// is we send a PING frame containing 0s.
|
||||||
|
_, _ = rand.Read(sc.sentPingData[:])
|
||||||
|
sc.writeFrame(FrameWriteRequest{
|
||||||
|
write: &writePing{data: sc.sentPingData},
|
||||||
|
})
|
||||||
|
sc.readIdleTimer.Reset(sc.pingTimeout)
|
||||||
|
}
|
||||||
|
|
||||||
type serverMessage int
|
type serverMessage int
|
||||||
|
|
||||||
// Message values sent to serveMsgCh.
|
// Message values sent to serveMsgCh.
|
||||||
var (
|
var (
|
||||||
settingsTimerMsg = new(serverMessage)
|
settingsTimerMsg = new(serverMessage)
|
||||||
idleTimerMsg = new(serverMessage)
|
idleTimerMsg = new(serverMessage)
|
||||||
|
readIdleTimerMsg = new(serverMessage)
|
||||||
shutdownTimerMsg = new(serverMessage)
|
shutdownTimerMsg = new(serverMessage)
|
||||||
gracefulShutdownMsg = new(serverMessage)
|
gracefulShutdownMsg = new(serverMessage)
|
||||||
handlerDoneMsg = new(serverMessage)
|
handlerDoneMsg = new(serverMessage)
|
||||||
@ -1068,6 +1083,7 @@ var (
|
|||||||
|
|
||||||
func (sc *serverConn) onSettingsTimer() { sc.sendServeMsg(settingsTimerMsg) }
|
func (sc *serverConn) onSettingsTimer() { sc.sendServeMsg(settingsTimerMsg) }
|
||||||
func (sc *serverConn) onIdleTimer() { sc.sendServeMsg(idleTimerMsg) }
|
func (sc *serverConn) onIdleTimer() { sc.sendServeMsg(idleTimerMsg) }
|
||||||
|
func (sc *serverConn) onReadIdleTimer() { sc.sendServeMsg(readIdleTimerMsg) }
|
||||||
func (sc *serverConn) onShutdownTimer() { sc.sendServeMsg(shutdownTimerMsg) }
|
func (sc *serverConn) onShutdownTimer() { sc.sendServeMsg(shutdownTimerMsg) }
|
||||||
|
|
||||||
func (sc *serverConn) sendServeMsg(msg interface{}) {
|
func (sc *serverConn) sendServeMsg(msg interface{}) {
|
||||||
@ -1320,6 +1336,10 @@ func (sc *serverConn) wroteFrame(res frameWriteResult) {
|
|||||||
sc.writingFrame = false
|
sc.writingFrame = false
|
||||||
sc.writingFrameAsync = false
|
sc.writingFrameAsync = false
|
||||||
|
|
||||||
|
if res.err != nil {
|
||||||
|
sc.conn.Close()
|
||||||
|
}
|
||||||
|
|
||||||
wr := res.wr
|
wr := res.wr
|
||||||
|
|
||||||
if writeEndsStream(wr.write) {
|
if writeEndsStream(wr.write) {
|
||||||
@ -1594,6 +1614,11 @@ func (sc *serverConn) processFrame(f Frame) error {
|
|||||||
func (sc *serverConn) processPing(f *PingFrame) error {
|
func (sc *serverConn) processPing(f *PingFrame) error {
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
if f.IsAck() {
|
if f.IsAck() {
|
||||||
|
if sc.pingSent && sc.sentPingData == f.Data {
|
||||||
|
// This is a response to a PING we sent.
|
||||||
|
sc.pingSent = false
|
||||||
|
sc.readIdleTimer.Reset(sc.readIdleTimeout)
|
||||||
|
}
|
||||||
// 6.7 PING: " An endpoint MUST NOT respond to PING frames
|
// 6.7 PING: " An endpoint MUST NOT respond to PING frames
|
||||||
// containing this flag."
|
// containing this flag."
|
||||||
return nil
|
return nil
|
||||||
@ -2160,7 +2185,7 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream
|
|||||||
st.cw.Init()
|
st.cw.Init()
|
||||||
st.flow.conn = &sc.flow // link to conn-level counter
|
st.flow.conn = &sc.flow // link to conn-level counter
|
||||||
st.flow.add(sc.initialStreamSendWindowSize)
|
st.flow.add(sc.initialStreamSendWindowSize)
|
||||||
st.inflow.init(sc.srv.initialStreamRecvWindowSize())
|
st.inflow.init(sc.initialStreamRecvWindowSize)
|
||||||
if sc.hs.WriteTimeout > 0 {
|
if sc.hs.WriteTimeout > 0 {
|
||||||
st.writeDeadline = sc.srv.afterFunc(sc.hs.WriteTimeout, st.onWriteTimeout)
|
st.writeDeadline = sc.srv.afterFunc(sc.hs.WriteTimeout, st.onWriteTimeout)
|
||||||
}
|
}
|
||||||
@ -3301,7 +3326,7 @@ func (sc *serverConn) countError(name string, err error) error {
|
|||||||
if sc == nil || sc.srv == nil {
|
if sc == nil || sc.srv == nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
f := sc.srv.CountError
|
f := sc.countErrorFunc
|
||||||
if f == nil {
|
if f == nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
141
vendor/golang.org/x/net/http2/transport.go
generated
vendored
141
vendor/golang.org/x/net/http2/transport.go
generated
vendored
@ -25,7 +25,6 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptrace"
|
"net/http/httptrace"
|
||||||
"net/textproto"
|
"net/textproto"
|
||||||
"os"
|
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -227,40 +226,26 @@ func (t *Transport) contextWithTimeout(ctx context.Context, d time.Duration) (co
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *Transport) maxHeaderListSize() uint32 {
|
func (t *Transport) maxHeaderListSize() uint32 {
|
||||||
if t.MaxHeaderListSize == 0 {
|
n := int64(t.MaxHeaderListSize)
|
||||||
|
if t.t1 != nil && t.t1.MaxResponseHeaderBytes != 0 {
|
||||||
|
n = t.t1.MaxResponseHeaderBytes
|
||||||
|
if n > 0 {
|
||||||
|
n = adjustHTTP1MaxHeaderSize(n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if n <= 0 {
|
||||||
return 10 << 20
|
return 10 << 20
|
||||||
}
|
}
|
||||||
if t.MaxHeaderListSize == 0xffffffff {
|
if n >= 0xffffffff {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
return t.MaxHeaderListSize
|
return uint32(n)
|
||||||
}
|
|
||||||
|
|
||||||
func (t *Transport) maxFrameReadSize() uint32 {
|
|
||||||
if t.MaxReadFrameSize == 0 {
|
|
||||||
return 0 // use the default provided by the peer
|
|
||||||
}
|
|
||||||
if t.MaxReadFrameSize < minMaxFrameSize {
|
|
||||||
return minMaxFrameSize
|
|
||||||
}
|
|
||||||
if t.MaxReadFrameSize > maxFrameSize {
|
|
||||||
return maxFrameSize
|
|
||||||
}
|
|
||||||
return t.MaxReadFrameSize
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Transport) disableCompression() bool {
|
func (t *Transport) disableCompression() bool {
|
||||||
return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression)
|
return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Transport) pingTimeout() time.Duration {
|
|
||||||
if t.PingTimeout == 0 {
|
|
||||||
return 15 * time.Second
|
|
||||||
}
|
|
||||||
return t.PingTimeout
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// ConfigureTransport configures a net/http HTTP/1 Transport to use HTTP/2.
|
// ConfigureTransport configures a net/http HTTP/1 Transport to use HTTP/2.
|
||||||
// It returns an error if t1 has already been HTTP/2-enabled.
|
// It returns an error if t1 has already been HTTP/2-enabled.
|
||||||
//
|
//
|
||||||
@ -370,11 +355,14 @@ type ClientConn struct {
|
|||||||
lastActive time.Time
|
lastActive time.Time
|
||||||
lastIdle time.Time // time last idle
|
lastIdle time.Time // time last idle
|
||||||
// Settings from peer: (also guarded by wmu)
|
// Settings from peer: (also guarded by wmu)
|
||||||
maxFrameSize uint32
|
maxFrameSize uint32
|
||||||
maxConcurrentStreams uint32
|
maxConcurrentStreams uint32
|
||||||
peerMaxHeaderListSize uint64
|
peerMaxHeaderListSize uint64
|
||||||
peerMaxHeaderTableSize uint32
|
peerMaxHeaderTableSize uint32
|
||||||
initialWindowSize uint32
|
initialWindowSize uint32
|
||||||
|
initialStreamRecvWindowSize int32
|
||||||
|
readIdleTimeout time.Duration
|
||||||
|
pingTimeout time.Duration
|
||||||
|
|
||||||
// reqHeaderMu is a 1-element semaphore channel controlling access to sending new requests.
|
// reqHeaderMu is a 1-element semaphore channel controlling access to sending new requests.
|
||||||
// Write to reqHeaderMu to lock it, read from it to unlock.
|
// Write to reqHeaderMu to lock it, read from it to unlock.
|
||||||
@ -499,6 +487,7 @@ func (cs *clientStream) closeReqBodyLocked() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type stickyErrWriter struct {
|
type stickyErrWriter struct {
|
||||||
|
group synctestGroupInterface
|
||||||
conn net.Conn
|
conn net.Conn
|
||||||
timeout time.Duration
|
timeout time.Duration
|
||||||
err *error
|
err *error
|
||||||
@ -508,22 +497,9 @@ func (sew stickyErrWriter) Write(p []byte) (n int, err error) {
|
|||||||
if *sew.err != nil {
|
if *sew.err != nil {
|
||||||
return 0, *sew.err
|
return 0, *sew.err
|
||||||
}
|
}
|
||||||
for {
|
n, err = writeWithByteTimeout(sew.group, sew.conn, sew.timeout, p)
|
||||||
if sew.timeout != 0 {
|
*sew.err = err
|
||||||
sew.conn.SetWriteDeadline(time.Now().Add(sew.timeout))
|
return n, err
|
||||||
}
|
|
||||||
nn, err := sew.conn.Write(p[n:])
|
|
||||||
n += nn
|
|
||||||
if n < len(p) && nn > 0 && errors.Is(err, os.ErrDeadlineExceeded) {
|
|
||||||
// Keep extending the deadline so long as we're making progress.
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if sew.timeout != 0 {
|
|
||||||
sew.conn.SetWriteDeadline(time.Time{})
|
|
||||||
}
|
|
||||||
*sew.err = err
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// noCachedConnError is the concrete type of ErrNoCachedConn, which
|
// noCachedConnError is the concrete type of ErrNoCachedConn, which
|
||||||
@ -758,44 +734,36 @@ func (t *Transport) expectContinueTimeout() time.Duration {
|
|||||||
return t.t1.ExpectContinueTimeout
|
return t.t1.ExpectContinueTimeout
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Transport) maxDecoderHeaderTableSize() uint32 {
|
|
||||||
if v := t.MaxDecoderHeaderTableSize; v > 0 {
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
return initialHeaderTableSize
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *Transport) maxEncoderHeaderTableSize() uint32 {
|
|
||||||
if v := t.MaxEncoderHeaderTableSize; v > 0 {
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
return initialHeaderTableSize
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) {
|
func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) {
|
||||||
return t.newClientConn(c, t.disableKeepAlives())
|
return t.newClientConn(c, t.disableKeepAlives())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, error) {
|
func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, error) {
|
||||||
|
conf := configFromTransport(t)
|
||||||
cc := &ClientConn{
|
cc := &ClientConn{
|
||||||
t: t,
|
t: t,
|
||||||
tconn: c,
|
tconn: c,
|
||||||
readerDone: make(chan struct{}),
|
readerDone: make(chan struct{}),
|
||||||
nextStreamID: 1,
|
nextStreamID: 1,
|
||||||
maxFrameSize: 16 << 10, // spec default
|
maxFrameSize: 16 << 10, // spec default
|
||||||
initialWindowSize: 65535, // spec default
|
initialWindowSize: 65535, // spec default
|
||||||
maxConcurrentStreams: initialMaxConcurrentStreams, // "infinite", per spec. Use a smaller value until we have received server settings.
|
initialStreamRecvWindowSize: conf.MaxUploadBufferPerStream,
|
||||||
peerMaxHeaderListSize: 0xffffffffffffffff, // "infinite", per spec. Use 2^64-1 instead.
|
maxConcurrentStreams: initialMaxConcurrentStreams, // "infinite", per spec. Use a smaller value until we have received server settings.
|
||||||
streams: make(map[uint32]*clientStream),
|
peerMaxHeaderListSize: 0xffffffffffffffff, // "infinite", per spec. Use 2^64-1 instead.
|
||||||
singleUse: singleUse,
|
streams: make(map[uint32]*clientStream),
|
||||||
wantSettingsAck: true,
|
singleUse: singleUse,
|
||||||
pings: make(map[[8]byte]chan struct{}),
|
wantSettingsAck: true,
|
||||||
reqHeaderMu: make(chan struct{}, 1),
|
readIdleTimeout: conf.SendPingTimeout,
|
||||||
|
pingTimeout: conf.PingTimeout,
|
||||||
|
pings: make(map[[8]byte]chan struct{}),
|
||||||
|
reqHeaderMu: make(chan struct{}, 1),
|
||||||
}
|
}
|
||||||
|
var group synctestGroupInterface
|
||||||
if t.transportTestHooks != nil {
|
if t.transportTestHooks != nil {
|
||||||
t.markNewGoroutine()
|
t.markNewGoroutine()
|
||||||
t.transportTestHooks.newclientconn(cc)
|
t.transportTestHooks.newclientconn(cc)
|
||||||
c = cc.tconn
|
c = cc.tconn
|
||||||
|
group = t.group
|
||||||
}
|
}
|
||||||
if VerboseLogs {
|
if VerboseLogs {
|
||||||
t.vlogf("http2: Transport creating client conn %p to %v", cc, c.RemoteAddr())
|
t.vlogf("http2: Transport creating client conn %p to %v", cc, c.RemoteAddr())
|
||||||
@ -807,24 +775,23 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
|
|||||||
// TODO: adjust this writer size to account for frame size +
|
// TODO: adjust this writer size to account for frame size +
|
||||||
// MTU + crypto/tls record padding.
|
// MTU + crypto/tls record padding.
|
||||||
cc.bw = bufio.NewWriter(stickyErrWriter{
|
cc.bw = bufio.NewWriter(stickyErrWriter{
|
||||||
|
group: group,
|
||||||
conn: c,
|
conn: c,
|
||||||
timeout: t.WriteByteTimeout,
|
timeout: conf.WriteByteTimeout,
|
||||||
err: &cc.werr,
|
err: &cc.werr,
|
||||||
})
|
})
|
||||||
cc.br = bufio.NewReader(c)
|
cc.br = bufio.NewReader(c)
|
||||||
cc.fr = NewFramer(cc.bw, cc.br)
|
cc.fr = NewFramer(cc.bw, cc.br)
|
||||||
if t.maxFrameReadSize() != 0 {
|
cc.fr.SetMaxReadFrameSize(conf.MaxReadFrameSize)
|
||||||
cc.fr.SetMaxReadFrameSize(t.maxFrameReadSize())
|
|
||||||
}
|
|
||||||
if t.CountError != nil {
|
if t.CountError != nil {
|
||||||
cc.fr.countError = t.CountError
|
cc.fr.countError = t.CountError
|
||||||
}
|
}
|
||||||
maxHeaderTableSize := t.maxDecoderHeaderTableSize()
|
maxHeaderTableSize := conf.MaxDecoderHeaderTableSize
|
||||||
cc.fr.ReadMetaHeaders = hpack.NewDecoder(maxHeaderTableSize, nil)
|
cc.fr.ReadMetaHeaders = hpack.NewDecoder(maxHeaderTableSize, nil)
|
||||||
cc.fr.MaxHeaderListSize = t.maxHeaderListSize()
|
cc.fr.MaxHeaderListSize = t.maxHeaderListSize()
|
||||||
|
|
||||||
cc.henc = hpack.NewEncoder(&cc.hbuf)
|
cc.henc = hpack.NewEncoder(&cc.hbuf)
|
||||||
cc.henc.SetMaxDynamicTableSizeLimit(t.maxEncoderHeaderTableSize())
|
cc.henc.SetMaxDynamicTableSizeLimit(conf.MaxEncoderHeaderTableSize)
|
||||||
cc.peerMaxHeaderTableSize = initialHeaderTableSize
|
cc.peerMaxHeaderTableSize = initialHeaderTableSize
|
||||||
|
|
||||||
if cs, ok := c.(connectionStater); ok {
|
if cs, ok := c.(connectionStater); ok {
|
||||||
@ -834,11 +801,9 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
|
|||||||
|
|
||||||
initialSettings := []Setting{
|
initialSettings := []Setting{
|
||||||
{ID: SettingEnablePush, Val: 0},
|
{ID: SettingEnablePush, Val: 0},
|
||||||
{ID: SettingInitialWindowSize, Val: transportDefaultStreamFlow},
|
{ID: SettingInitialWindowSize, Val: uint32(cc.initialStreamRecvWindowSize)},
|
||||||
}
|
|
||||||
if max := t.maxFrameReadSize(); max != 0 {
|
|
||||||
initialSettings = append(initialSettings, Setting{ID: SettingMaxFrameSize, Val: max})
|
|
||||||
}
|
}
|
||||||
|
initialSettings = append(initialSettings, Setting{ID: SettingMaxFrameSize, Val: conf.MaxReadFrameSize})
|
||||||
if max := t.maxHeaderListSize(); max != 0 {
|
if max := t.maxHeaderListSize(); max != 0 {
|
||||||
initialSettings = append(initialSettings, Setting{ID: SettingMaxHeaderListSize, Val: max})
|
initialSettings = append(initialSettings, Setting{ID: SettingMaxHeaderListSize, Val: max})
|
||||||
}
|
}
|
||||||
@ -848,8 +813,8 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
|
|||||||
|
|
||||||
cc.bw.Write(clientPreface)
|
cc.bw.Write(clientPreface)
|
||||||
cc.fr.WriteSettings(initialSettings...)
|
cc.fr.WriteSettings(initialSettings...)
|
||||||
cc.fr.WriteWindowUpdate(0, transportDefaultConnFlow)
|
cc.fr.WriteWindowUpdate(0, uint32(conf.MaxUploadBufferPerConnection))
|
||||||
cc.inflow.init(transportDefaultConnFlow + initialWindowSize)
|
cc.inflow.init(conf.MaxUploadBufferPerConnection + initialWindowSize)
|
||||||
cc.bw.Flush()
|
cc.bw.Flush()
|
||||||
if cc.werr != nil {
|
if cc.werr != nil {
|
||||||
cc.Close()
|
cc.Close()
|
||||||
@ -867,7 +832,7 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (cc *ClientConn) healthCheck() {
|
func (cc *ClientConn) healthCheck() {
|
||||||
pingTimeout := cc.t.pingTimeout()
|
pingTimeout := cc.pingTimeout
|
||||||
// We don't need to periodically ping in the health check, because the readLoop of ClientConn will
|
// We don't need to periodically ping in the health check, because the readLoop of ClientConn will
|
||||||
// trigger the healthCheck again if there is no frame received.
|
// trigger the healthCheck again if there is no frame received.
|
||||||
ctx, cancel := cc.t.contextWithTimeout(context.Background(), pingTimeout)
|
ctx, cancel := cc.t.contextWithTimeout(context.Background(), pingTimeout)
|
||||||
@ -2199,7 +2164,7 @@ type resAndError struct {
|
|||||||
func (cc *ClientConn) addStreamLocked(cs *clientStream) {
|
func (cc *ClientConn) addStreamLocked(cs *clientStream) {
|
||||||
cs.flow.add(int32(cc.initialWindowSize))
|
cs.flow.add(int32(cc.initialWindowSize))
|
||||||
cs.flow.setConnFlow(&cc.flow)
|
cs.flow.setConnFlow(&cc.flow)
|
||||||
cs.inflow.init(transportDefaultStreamFlow)
|
cs.inflow.init(cc.initialStreamRecvWindowSize)
|
||||||
cs.ID = cc.nextStreamID
|
cs.ID = cc.nextStreamID
|
||||||
cc.nextStreamID += 2
|
cc.nextStreamID += 2
|
||||||
cc.streams[cs.ID] = cs
|
cc.streams[cs.ID] = cs
|
||||||
@ -2345,7 +2310,7 @@ func (cc *ClientConn) countReadFrameError(err error) {
|
|||||||
func (rl *clientConnReadLoop) run() error {
|
func (rl *clientConnReadLoop) run() error {
|
||||||
cc := rl.cc
|
cc := rl.cc
|
||||||
gotSettings := false
|
gotSettings := false
|
||||||
readIdleTimeout := cc.t.ReadIdleTimeout
|
readIdleTimeout := cc.readIdleTimeout
|
||||||
var t timer
|
var t timer
|
||||||
if readIdleTimeout != 0 {
|
if readIdleTimeout != 0 {
|
||||||
t = cc.t.afterFunc(readIdleTimeout, cc.healthCheck)
|
t = cc.t.afterFunc(readIdleTimeout, cc.healthCheck)
|
||||||
|
10
vendor/golang.org/x/net/http2/write.go
generated
vendored
10
vendor/golang.org/x/net/http2/write.go
generated
vendored
@ -131,6 +131,16 @@ func (se StreamError) writeFrame(ctx writeContext) error {
|
|||||||
|
|
||||||
func (se StreamError) staysWithinBuffer(max int) bool { return frameHeaderLen+4 <= max }
|
func (se StreamError) staysWithinBuffer(max int) bool { return frameHeaderLen+4 <= max }
|
||||||
|
|
||||||
|
type writePing struct {
|
||||||
|
data [8]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w writePing) writeFrame(ctx writeContext) error {
|
||||||
|
return ctx.Framer().WritePing(false, w.data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w writePing) staysWithinBuffer(max int) bool { return frameHeaderLen+len(w.data) <= max }
|
||||||
|
|
||||||
type writePingAck struct{ pf *PingFrame }
|
type writePingAck struct{ pf *PingFrame }
|
||||||
|
|
||||||
func (w writePingAck) writeFrame(ctx writeContext) error {
|
func (w writePingAck) writeFrame(ctx writeContext) error {
|
||||||
|
17
vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s
generated
vendored
Normal file
17
vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s
generated
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// Copyright 2024 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 && amd64 && gc
|
||||||
|
|
||||||
|
#include "textflag.h"
|
||||||
|
|
||||||
|
TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_sysctl(SB)
|
||||||
|
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_sysctlbyname_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_sysctlbyname(SB)
|
||||||
|
GLOBL ·libc_sysctlbyname_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_sysctlbyname_trampoline_addr(SB)/8, $libc_sysctlbyname_trampoline<>(SB)
|
61
vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go
generated
vendored
Normal file
61
vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go
generated
vendored
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// Copyright 2024 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 && amd64 && gc
|
||||||
|
|
||||||
|
package cpu
|
||||||
|
|
||||||
|
// darwinSupportsAVX512 checks Darwin kernel for AVX512 support via sysctl
|
||||||
|
// call (see issue 43089). It also restricts AVX512 support for Darwin to
|
||||||
|
// kernel version 21.3.0 (MacOS 12.2.0) or later (see issue 49233).
|
||||||
|
//
|
||||||
|
// Background:
|
||||||
|
// Darwin implements a special mechanism to economize on thread state when
|
||||||
|
// AVX512 specific registers are not in use. This scheme minimizes state when
|
||||||
|
// preempting threads that haven't yet used any AVX512 instructions, but adds
|
||||||
|
// special requirements to check for AVX512 hardware support at runtime (e.g.
|
||||||
|
// via sysctl call or commpage inspection). See issue 43089 and link below for
|
||||||
|
// full background:
|
||||||
|
// https://github.com/apple-oss-distributions/xnu/blob/xnu-11215.1.10/osfmk/i386/fpu.c#L214-L240
|
||||||
|
//
|
||||||
|
// Additionally, all versions of the Darwin kernel from 19.6.0 through 21.2.0
|
||||||
|
// (corresponding to MacOS 10.15.6 - 12.1) have a bug that can cause corruption
|
||||||
|
// of the AVX512 mask registers (K0-K7) upon signal return. For this reason
|
||||||
|
// AVX512 is considered unsafe to use on Darwin for kernel versions prior to
|
||||||
|
// 21.3.0, where a fix has been confirmed. See issue 49233 for full background.
|
||||||
|
func darwinSupportsAVX512() bool {
|
||||||
|
return darwinSysctlEnabled([]byte("hw.optional.avx512f\x00")) && darwinKernelVersionCheck(21, 3, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure Darwin kernel version is at least major.minor.patch, avoiding dependencies
|
||||||
|
func darwinKernelVersionCheck(major, minor, patch int) bool {
|
||||||
|
var release [256]byte
|
||||||
|
err := darwinOSRelease(&release)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var mmp [3]int
|
||||||
|
c := 0
|
||||||
|
Loop:
|
||||||
|
for _, b := range release[:] {
|
||||||
|
switch {
|
||||||
|
case b >= '0' && b <= '9':
|
||||||
|
mmp[c] = 10*mmp[c] + int(b-'0')
|
||||||
|
case b == '.':
|
||||||
|
c++
|
||||||
|
if c > 2 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case b == 0:
|
||||||
|
break Loop
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if c != 2 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return mmp[0] > major || mmp[0] == major && (mmp[1] > minor || mmp[1] == minor && mmp[2] >= patch)
|
||||||
|
}
|
4
vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
generated
vendored
4
vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
generated
vendored
@ -6,10 +6,10 @@
|
|||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
// cpuid is implemented in cpu_x86.s for gc compiler
|
// cpuid is implemented in cpu_gc_x86.s for gc compiler
|
||||||
// and in cpu_gccgo.c for gccgo.
|
// and in cpu_gccgo.c for gccgo.
|
||||||
func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)
|
func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)
|
||||||
|
|
||||||
// xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler
|
// xgetbv with ecx = 0 is implemented in cpu_gc_x86.s for gc compiler
|
||||||
// and in cpu_gccgo.c for gccgo.
|
// and in cpu_gccgo.c for gccgo.
|
||||||
func xgetbv() (eax, edx uint32)
|
func xgetbv() (eax, edx uint32)
|
||||||
|
2
vendor/golang.org/x/sys/cpu/cpu_x86.s → vendor/golang.org/x/sys/cpu/cpu_gc_x86.s
generated
vendored
2
vendor/golang.org/x/sys/cpu/cpu_x86.s → vendor/golang.org/x/sys/cpu/cpu_gc_x86.s
generated
vendored
@ -18,7 +18,7 @@ TEXT ·cpuid(SB), NOSPLIT, $0-24
|
|||||||
RET
|
RET
|
||||||
|
|
||||||
// func xgetbv() (eax, edx uint32)
|
// func xgetbv() (eax, edx uint32)
|
||||||
TEXT ·xgetbv(SB),NOSPLIT,$0-8
|
TEXT ·xgetbv(SB), NOSPLIT, $0-8
|
||||||
MOVL $0, CX
|
MOVL $0, CX
|
||||||
XGETBV
|
XGETBV
|
||||||
MOVL AX, eax+0(FP)
|
MOVL AX, eax+0(FP)
|
6
vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go
generated
vendored
6
vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go
generated
vendored
@ -23,9 +23,3 @@ func xgetbv() (eax, edx uint32) {
|
|||||||
gccgoXgetbv(&a, &d)
|
gccgoXgetbv(&a, &d)
|
||||||
return a, d
|
return a, d
|
||||||
}
|
}
|
||||||
|
|
||||||
// gccgo doesn't build on Darwin, per:
|
|
||||||
// https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/gcc.rb#L76
|
|
||||||
func darwinSupportsAVX512() bool {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go
generated
vendored
@ -110,7 +110,6 @@ func doinit() {
|
|||||||
ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM)
|
ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM)
|
||||||
ARM64.HasDIT = isSet(hwCap, hwcap_DIT)
|
ARM64.HasDIT = isSet(hwCap, hwcap_DIT)
|
||||||
|
|
||||||
|
|
||||||
// HWCAP2 feature bits
|
// HWCAP2 feature bits
|
||||||
ARM64.HasSVE2 = isSet(hwCap2, hwcap2_SVE2)
|
ARM64.HasSVE2 = isSet(hwCap2, hwcap2_SVE2)
|
||||||
ARM64.HasI8MM = isSet(hwCap2, hwcap2_I8MM)
|
ARM64.HasI8MM = isSet(hwCap2, hwcap2_I8MM)
|
||||||
|
11
vendor/golang.org/x/sys/cpu/cpu_other_x86.go
generated
vendored
Normal file
11
vendor/golang.org/x/sys/cpu/cpu_other_x86.go
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Copyright 2024 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 || amd64p32 || (amd64 && (!darwin || !gc))
|
||||||
|
|
||||||
|
package cpu
|
||||||
|
|
||||||
|
func darwinSupportsAVX512() bool {
|
||||||
|
panic("only implemented for gc && amd64 && darwin")
|
||||||
|
}
|
6
vendor/golang.org/x/sys/cpu/cpu_x86.go
generated
vendored
6
vendor/golang.org/x/sys/cpu/cpu_x86.go
generated
vendored
@ -92,10 +92,8 @@ func archInit() {
|
|||||||
osSupportsAVX = isSet(1, eax) && isSet(2, eax)
|
osSupportsAVX = isSet(1, eax) && isSet(2, eax)
|
||||||
|
|
||||||
if runtime.GOOS == "darwin" {
|
if runtime.GOOS == "darwin" {
|
||||||
// Darwin doesn't save/restore AVX-512 mask registers correctly across signal handlers.
|
// Darwin requires special AVX512 checks, see cpu_darwin_x86.go
|
||||||
// Since users can't rely on mask register contents, let's not advertise AVX-512 support.
|
osSupportsAVX512 = osSupportsAVX && darwinSupportsAVX512()
|
||||||
// See issue 49233.
|
|
||||||
osSupportsAVX512 = false
|
|
||||||
} else {
|
} else {
|
||||||
// Check if OPMASK and ZMM registers have OS support.
|
// Check if OPMASK and ZMM registers have OS support.
|
||||||
osSupportsAVX512 = osSupportsAVX && isSet(5, eax) && isSet(6, eax) && isSet(7, eax)
|
osSupportsAVX512 = osSupportsAVX && isSet(5, eax) && isSet(6, eax) && isSet(7, eax)
|
||||||
|
98
vendor/golang.org/x/sys/cpu/syscall_darwin_x86_gc.go
generated
vendored
Normal file
98
vendor/golang.org/x/sys/cpu/syscall_darwin_x86_gc.go
generated
vendored
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
// Copyright 2024 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.
|
||||||
|
|
||||||
|
// Minimal copy of x/sys/unix so the cpu package can make a
|
||||||
|
// system call on Darwin without depending on x/sys/unix.
|
||||||
|
|
||||||
|
//go:build darwin && amd64 && gc
|
||||||
|
|
||||||
|
package cpu
|
||||||
|
|
||||||
|
import (
|
||||||
|
"syscall"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
type _C_int int32
|
||||||
|
|
||||||
|
// adapted from unix.Uname() at x/sys/unix/syscall_darwin.go L419
|
||||||
|
func darwinOSRelease(release *[256]byte) error {
|
||||||
|
// from x/sys/unix/zerrors_openbsd_amd64.go
|
||||||
|
const (
|
||||||
|
CTL_KERN = 0x1
|
||||||
|
KERN_OSRELEASE = 0x2
|
||||||
|
)
|
||||||
|
|
||||||
|
mib := []_C_int{CTL_KERN, KERN_OSRELEASE}
|
||||||
|
n := unsafe.Sizeof(*release)
|
||||||
|
|
||||||
|
return sysctl(mib, &release[0], &n, nil, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
type Errno = syscall.Errno
|
||||||
|
|
||||||
|
var _zero uintptr // Single-word zero for use when we need a valid pointer to 0 bytes.
|
||||||
|
|
||||||
|
// from x/sys/unix/zsyscall_darwin_amd64.go L791-807
|
||||||
|
func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) error {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(mib) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&mib[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
if _, _, err := syscall_syscall6(
|
||||||
|
libc_sysctl_trampoline_addr,
|
||||||
|
uintptr(_p0),
|
||||||
|
uintptr(len(mib)),
|
||||||
|
uintptr(unsafe.Pointer(old)),
|
||||||
|
uintptr(unsafe.Pointer(oldlen)),
|
||||||
|
uintptr(unsafe.Pointer(new)),
|
||||||
|
uintptr(newlen),
|
||||||
|
); err != 0 {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_sysctl_trampoline_addr uintptr
|
||||||
|
|
||||||
|
// adapted from internal/cpu/cpu_arm64_darwin.go
|
||||||
|
func darwinSysctlEnabled(name []byte) bool {
|
||||||
|
out := int32(0)
|
||||||
|
nout := unsafe.Sizeof(out)
|
||||||
|
if ret := sysctlbyname(&name[0], (*byte)(unsafe.Pointer(&out)), &nout, nil, 0); ret != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return out > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
var libc_sysctlbyname_trampoline_addr uintptr
|
||||||
|
|
||||||
|
// adapted from runtime/sys_darwin.go in the pattern of sysctl() above, as defined in x/sys/unix
|
||||||
|
func sysctlbyname(name *byte, old *byte, oldlen *uintptr, new *byte, newlen uintptr) error {
|
||||||
|
if _, _, err := syscall_syscall6(
|
||||||
|
libc_sysctlbyname_trampoline_addr,
|
||||||
|
uintptr(unsafe.Pointer(name)),
|
||||||
|
uintptr(unsafe.Pointer(old)),
|
||||||
|
uintptr(unsafe.Pointer(oldlen)),
|
||||||
|
uintptr(unsafe.Pointer(new)),
|
||||||
|
uintptr(newlen),
|
||||||
|
0,
|
||||||
|
); err != 0 {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_sysctlbyname sysctlbyname "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// Implemented in the runtime package (runtime/sys_darwin.go)
|
||||||
|
func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
|
||||||
|
//go:linkname syscall_syscall6 syscall.syscall6
|
96
vendor/golang.org/x/sys/unix/ioctl_linux.go
generated
vendored
96
vendor/golang.org/x/sys/unix/ioctl_linux.go
generated
vendored
@ -58,6 +58,102 @@ func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) {
|
|||||||
return &value, err
|
return &value, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IoctlGetEthtoolTsInfo fetches ethtool timestamping and PHC
|
||||||
|
// association for the network device specified by ifname.
|
||||||
|
func IoctlGetEthtoolTsInfo(fd int, ifname string) (*EthtoolTsInfo, error) {
|
||||||
|
ifr, err := NewIfreq(ifname)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
value := EthtoolTsInfo{Cmd: ETHTOOL_GET_TS_INFO}
|
||||||
|
ifrd := ifr.withData(unsafe.Pointer(&value))
|
||||||
|
|
||||||
|
err = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd)
|
||||||
|
return &value, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// IoctlGetHwTstamp retrieves the hardware timestamping configuration
|
||||||
|
// for the network device specified by ifname.
|
||||||
|
func IoctlGetHwTstamp(fd int, ifname string) (*HwTstampConfig, error) {
|
||||||
|
ifr, err := NewIfreq(ifname)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
value := HwTstampConfig{}
|
||||||
|
ifrd := ifr.withData(unsafe.Pointer(&value))
|
||||||
|
|
||||||
|
err = ioctlIfreqData(fd, SIOCGHWTSTAMP, &ifrd)
|
||||||
|
return &value, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// IoctlSetHwTstamp updates the hardware timestamping configuration for
|
||||||
|
// the network device specified by ifname.
|
||||||
|
func IoctlSetHwTstamp(fd int, ifname string, cfg *HwTstampConfig) error {
|
||||||
|
ifr, err := NewIfreq(ifname)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
ifrd := ifr.withData(unsafe.Pointer(cfg))
|
||||||
|
return ioctlIfreqData(fd, SIOCSHWTSTAMP, &ifrd)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FdToClockID derives the clock ID from the file descriptor number
|
||||||
|
// - see clock_gettime(3), FD_TO_CLOCKID macros. The resulting ID is
|
||||||
|
// suitable for system calls like ClockGettime.
|
||||||
|
func FdToClockID(fd int) int32 { return int32((int(^fd) << 3) | 3) }
|
||||||
|
|
||||||
|
// IoctlPtpClockGetcaps returns the description of a given PTP device.
|
||||||
|
func IoctlPtpClockGetcaps(fd int) (*PtpClockCaps, error) {
|
||||||
|
var value PtpClockCaps
|
||||||
|
err := ioctlPtr(fd, PTP_CLOCK_GETCAPS2, unsafe.Pointer(&value))
|
||||||
|
return &value, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// IoctlPtpSysOffsetPrecise returns a description of the clock
|
||||||
|
// offset compared to the system clock.
|
||||||
|
func IoctlPtpSysOffsetPrecise(fd int) (*PtpSysOffsetPrecise, error) {
|
||||||
|
var value PtpSysOffsetPrecise
|
||||||
|
err := ioctlPtr(fd, PTP_SYS_OFFSET_PRECISE2, unsafe.Pointer(&value))
|
||||||
|
return &value, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// IoctlPtpSysOffsetExtended returns an extended description of the
|
||||||
|
// clock offset compared to the system clock. The samples parameter
|
||||||
|
// specifies the desired number of measurements.
|
||||||
|
func IoctlPtpSysOffsetExtended(fd int, samples uint) (*PtpSysOffsetExtended, error) {
|
||||||
|
value := PtpSysOffsetExtended{Samples: uint32(samples)}
|
||||||
|
err := ioctlPtr(fd, PTP_SYS_OFFSET_EXTENDED2, unsafe.Pointer(&value))
|
||||||
|
return &value, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// IoctlPtpPinGetfunc returns the configuration of the specified
|
||||||
|
// I/O pin on given PTP device.
|
||||||
|
func IoctlPtpPinGetfunc(fd int, index uint) (*PtpPinDesc, error) {
|
||||||
|
value := PtpPinDesc{Index: uint32(index)}
|
||||||
|
err := ioctlPtr(fd, PTP_PIN_GETFUNC2, unsafe.Pointer(&value))
|
||||||
|
return &value, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// IoctlPtpPinSetfunc updates configuration of the specified PTP
|
||||||
|
// I/O pin.
|
||||||
|
func IoctlPtpPinSetfunc(fd int, pd *PtpPinDesc) error {
|
||||||
|
return ioctlPtr(fd, PTP_PIN_SETFUNC2, unsafe.Pointer(pd))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IoctlPtpPeroutRequest configures the periodic output mode of the
|
||||||
|
// PTP I/O pins.
|
||||||
|
func IoctlPtpPeroutRequest(fd int, r *PtpPeroutRequest) error {
|
||||||
|
return ioctlPtr(fd, PTP_PEROUT_REQUEST2, unsafe.Pointer(r))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IoctlPtpExttsRequest configures the external timestamping mode
|
||||||
|
// of the PTP I/O pins.
|
||||||
|
func IoctlPtpExttsRequest(fd int, r *PtpExttsRequest) error {
|
||||||
|
return ioctlPtr(fd, PTP_EXTTS_REQUEST2, unsafe.Pointer(r))
|
||||||
|
}
|
||||||
|
|
||||||
// IoctlGetWatchdogInfo fetches information about a watchdog device from the
|
// IoctlGetWatchdogInfo fetches information about a watchdog device from the
|
||||||
// Linux watchdog API. For more information, see:
|
// Linux watchdog API. For more information, see:
|
||||||
// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.
|
// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.
|
||||||
|
12
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
12
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
@ -158,6 +158,16 @@ includes_Linux='
|
|||||||
#endif
|
#endif
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
|
|
||||||
|
// See the description in unix/linux/types.go
|
||||||
|
#if defined(__ARM_EABI__) || \
|
||||||
|
(defined(__mips__) && (_MIPS_SIM == _ABIO32)) || \
|
||||||
|
(defined(__powerpc__) && (!defined(__powerpc64__)))
|
||||||
|
# ifdef _TIME_BITS
|
||||||
|
# undef _TIME_BITS
|
||||||
|
# endif
|
||||||
|
# define _TIME_BITS 32
|
||||||
|
#endif
|
||||||
|
|
||||||
// <sys/ioctl.h> is broken on powerpc64, as it fails to include definitions of
|
// <sys/ioctl.h> is broken on powerpc64, as it fails to include definitions of
|
||||||
// these structures. We just include them copied from <bits/termios.h>.
|
// these structures. We just include them copied from <bits/termios.h>.
|
||||||
#if defined(__powerpc__)
|
#if defined(__powerpc__)
|
||||||
@ -256,6 +266,7 @@ struct ltchars {
|
|||||||
#include <linux/nsfs.h>
|
#include <linux/nsfs.h>
|
||||||
#include <linux/perf_event.h>
|
#include <linux/perf_event.h>
|
||||||
#include <linux/pps.h>
|
#include <linux/pps.h>
|
||||||
|
#include <linux/ptp_clock.h>
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/random.h>
|
#include <linux/random.h>
|
||||||
#include <linux/reboot.h>
|
#include <linux/reboot.h>
|
||||||
@ -527,6 +538,7 @@ ccflags="$@"
|
|||||||
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ ||
|
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ ||
|
||||||
$2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ ||
|
$2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ ||
|
||||||
$2 ~ /^NFC_.*_(MAX)?SIZE$/ ||
|
$2 ~ /^NFC_.*_(MAX)?SIZE$/ ||
|
||||||
|
$2 ~ /^PTP_/ ||
|
||||||
$2 ~ /^RAW_PAYLOAD_/ ||
|
$2 ~ /^RAW_PAYLOAD_/ ||
|
||||||
$2 ~ /^[US]F_/ ||
|
$2 ~ /^[US]F_/ ||
|
||||||
$2 ~ /^TP_STATUS_/ ||
|
$2 ~ /^TP_STATUS_/ ||
|
||||||
|
1
vendor/golang.org/x/sys/unix/syscall_linux.go
generated
vendored
1
vendor/golang.org/x/sys/unix/syscall_linux.go
generated
vendored
@ -1860,6 +1860,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||||||
//sys ClockAdjtime(clockid int32, buf *Timex) (state int, err error)
|
//sys ClockAdjtime(clockid int32, buf *Timex) (state int, err error)
|
||||||
//sys ClockGetres(clockid int32, res *Timespec) (err error)
|
//sys ClockGetres(clockid int32, res *Timespec) (err error)
|
||||||
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
//sys ClockGettime(clockid int32, time *Timespec) (err error)
|
||||||
|
//sys ClockSettime(clockid int32, time *Timespec) (err error)
|
||||||
//sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error)
|
//sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error)
|
||||||
//sys Close(fd int) (err error)
|
//sys Close(fd int) (err error)
|
||||||
//sys CloseRange(first uint, last uint, flags uint) (err error)
|
//sys CloseRange(first uint, last uint, flags uint) (err error)
|
||||||
|
104
vendor/golang.org/x/sys/unix/syscall_zos_s390x.go
generated
vendored
104
vendor/golang.org/x/sys/unix/syscall_zos_s390x.go
generated
vendored
@ -768,6 +768,15 @@ func Munmap(b []byte) (err error) {
|
|||||||
return mapper.Munmap(b)
|
return mapper.Munmap(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MmapPtr(fd int, offset int64, addr unsafe.Pointer, length uintptr, prot int, flags int) (ret unsafe.Pointer, err error) {
|
||||||
|
xaddr, err := mapper.mmap(uintptr(addr), length, prot, flags, fd, offset)
|
||||||
|
return unsafe.Pointer(xaddr), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func MunmapPtr(addr unsafe.Pointer, length uintptr) (err error) {
|
||||||
|
return mapper.munmap(uintptr(addr), length)
|
||||||
|
}
|
||||||
|
|
||||||
//sys Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A
|
//sys Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A
|
||||||
//sysnb Getgid() (gid int)
|
//sysnb Getgid() (gid int)
|
||||||
//sysnb Getpid() (pid int)
|
//sysnb Getpid() (pid int)
|
||||||
@ -816,10 +825,10 @@ func Lstat(path string, stat *Stat_t) (err error) {
|
|||||||
// for checking symlinks begins with $VERSION/ $SYSNAME/ $SYSSYMR/ $SYSSYMA/
|
// for checking symlinks begins with $VERSION/ $SYSNAME/ $SYSSYMR/ $SYSSYMA/
|
||||||
func isSpecialPath(path []byte) (v bool) {
|
func isSpecialPath(path []byte) (v bool) {
|
||||||
var special = [4][8]byte{
|
var special = [4][8]byte{
|
||||||
[8]byte{'V', 'E', 'R', 'S', 'I', 'O', 'N', '/'},
|
{'V', 'E', 'R', 'S', 'I', 'O', 'N', '/'},
|
||||||
[8]byte{'S', 'Y', 'S', 'N', 'A', 'M', 'E', '/'},
|
{'S', 'Y', 'S', 'N', 'A', 'M', 'E', '/'},
|
||||||
[8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'R', '/'},
|
{'S', 'Y', 'S', 'S', 'Y', 'M', 'R', '/'},
|
||||||
[8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'A', '/'}}
|
{'S', 'Y', 'S', 'S', 'Y', 'M', 'A', '/'}}
|
||||||
|
|
||||||
var i, j int
|
var i, j int
|
||||||
for i = 0; i < len(special); i++ {
|
for i = 0; i < len(special); i++ {
|
||||||
@ -3115,3 +3124,90 @@ func legacy_Mkfifoat(dirfd int, path string, mode uint32) (err error) {
|
|||||||
//sys Posix_openpt(oflag int) (fd int, err error) = SYS_POSIX_OPENPT
|
//sys Posix_openpt(oflag int) (fd int, err error) = SYS_POSIX_OPENPT
|
||||||
//sys Grantpt(fildes int) (rc int, err error) = SYS_GRANTPT
|
//sys Grantpt(fildes int) (rc int, err error) = SYS_GRANTPT
|
||||||
//sys Unlockpt(fildes int) (rc int, err error) = SYS_UNLOCKPT
|
//sys Unlockpt(fildes int) (rc int, err error) = SYS_UNLOCKPT
|
||||||
|
|
||||||
|
func fcntlAsIs(fd uintptr, cmd int, arg uintptr) (val int, err error) {
|
||||||
|
runtime.EnterSyscall()
|
||||||
|
r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, uintptr(fd), uintptr(cmd), arg)
|
||||||
|
runtime.ExitSyscall()
|
||||||
|
val = int(r0)
|
||||||
|
if int64(r0) == -1 {
|
||||||
|
err = errnoErr2(e1, e2)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func Fcntl(fd uintptr, cmd int, op interface{}) (ret int, err error) {
|
||||||
|
switch op.(type) {
|
||||||
|
case *Flock_t:
|
||||||
|
err = FcntlFlock(fd, cmd, op.(*Flock_t))
|
||||||
|
if err != nil {
|
||||||
|
ret = -1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
case int:
|
||||||
|
return FcntlInt(fd, cmd, op.(int))
|
||||||
|
case *F_cnvrt:
|
||||||
|
return fcntlAsIs(fd, cmd, uintptr(unsafe.Pointer(op.(*F_cnvrt))))
|
||||||
|
case unsafe.Pointer:
|
||||||
|
return fcntlAsIs(fd, cmd, uintptr(op.(unsafe.Pointer)))
|
||||||
|
default:
|
||||||
|
return -1, EINVAL
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
|
||||||
|
if raceenabled {
|
||||||
|
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
||||||
|
}
|
||||||
|
return sendfile(outfd, infd, offset, count)
|
||||||
|
}
|
||||||
|
|
||||||
|
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
|
||||||
|
// TODO: use LE call instead if the call is implemented
|
||||||
|
originalOffset, err := Seek(infd, 0, SEEK_CUR)
|
||||||
|
if err != nil {
|
||||||
|
return -1, err
|
||||||
|
}
|
||||||
|
//start reading data from in_fd
|
||||||
|
if offset != nil {
|
||||||
|
_, err := Seek(infd, *offset, SEEK_SET)
|
||||||
|
if err != nil {
|
||||||
|
return -1, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buf := make([]byte, count)
|
||||||
|
readBuf := make([]byte, 0)
|
||||||
|
var n int = 0
|
||||||
|
for i := 0; i < count; i += n {
|
||||||
|
n, err := Read(infd, buf)
|
||||||
|
if n == 0 {
|
||||||
|
if err != nil {
|
||||||
|
return -1, err
|
||||||
|
} else { // EOF
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
readBuf = append(readBuf, buf...)
|
||||||
|
buf = buf[0:0]
|
||||||
|
}
|
||||||
|
|
||||||
|
n2, err := Write(outfd, readBuf)
|
||||||
|
if err != nil {
|
||||||
|
return -1, err
|
||||||
|
}
|
||||||
|
|
||||||
|
//When sendfile() returns, this variable will be set to the
|
||||||
|
// offset of the byte following the last byte that was read.
|
||||||
|
if offset != nil {
|
||||||
|
*offset = *offset + int64(n)
|
||||||
|
// If offset is not NULL, then sendfile() does not modify the file
|
||||||
|
// offset of in_fd
|
||||||
|
_, err := Seek(infd, originalOffset, SEEK_SET)
|
||||||
|
if err != nil {
|
||||||
|
return -1, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return n2, nil
|
||||||
|
}
|
||||||
|
22
vendor/golang.org/x/sys/unix/zerrors_linux.go
generated
vendored
22
vendor/golang.org/x/sys/unix/zerrors_linux.go
generated
vendored
@ -2625,6 +2625,28 @@ const (
|
|||||||
PR_UNALIGN_NOPRINT = 0x1
|
PR_UNALIGN_NOPRINT = 0x1
|
||||||
PR_UNALIGN_SIGBUS = 0x2
|
PR_UNALIGN_SIGBUS = 0x2
|
||||||
PSTOREFS_MAGIC = 0x6165676c
|
PSTOREFS_MAGIC = 0x6165676c
|
||||||
|
PTP_CLK_MAGIC = '='
|
||||||
|
PTP_ENABLE_FEATURE = 0x1
|
||||||
|
PTP_EXTTS_EDGES = 0x6
|
||||||
|
PTP_EXTTS_EVENT_VALID = 0x1
|
||||||
|
PTP_EXTTS_V1_VALID_FLAGS = 0x7
|
||||||
|
PTP_EXTTS_VALID_FLAGS = 0x1f
|
||||||
|
PTP_EXT_OFFSET = 0x10
|
||||||
|
PTP_FALLING_EDGE = 0x4
|
||||||
|
PTP_MAX_SAMPLES = 0x19
|
||||||
|
PTP_PEROUT_DUTY_CYCLE = 0x2
|
||||||
|
PTP_PEROUT_ONE_SHOT = 0x1
|
||||||
|
PTP_PEROUT_PHASE = 0x4
|
||||||
|
PTP_PEROUT_V1_VALID_FLAGS = 0x0
|
||||||
|
PTP_PEROUT_VALID_FLAGS = 0x7
|
||||||
|
PTP_PIN_GETFUNC = 0xc0603d06
|
||||||
|
PTP_PIN_GETFUNC2 = 0xc0603d0f
|
||||||
|
PTP_RISING_EDGE = 0x2
|
||||||
|
PTP_STRICT_FLAGS = 0x8
|
||||||
|
PTP_SYS_OFFSET_EXTENDED = 0xc4c03d09
|
||||||
|
PTP_SYS_OFFSET_EXTENDED2 = 0xc4c03d12
|
||||||
|
PTP_SYS_OFFSET_PRECISE = 0xc0403d08
|
||||||
|
PTP_SYS_OFFSET_PRECISE2 = 0xc0403d11
|
||||||
PTRACE_ATTACH = 0x10
|
PTRACE_ATTACH = 0x10
|
||||||
PTRACE_CONT = 0x7
|
PTRACE_CONT = 0x7
|
||||||
PTRACE_DETACH = 0x11
|
PTRACE_DETACH = 0x11
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_386.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_386.go
generated
vendored
@ -237,6 +237,20 @@ const (
|
|||||||
PPPIOCUNBRIDGECHAN = 0x7434
|
PPPIOCUNBRIDGECHAN = 0x7434
|
||||||
PPPIOCXFERUNIT = 0x744e
|
PPPIOCXFERUNIT = 0x744e
|
||||||
PR_SET_PTRACER_ANY = 0xffffffff
|
PR_SET_PTRACER_ANY = 0xffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x80503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x80503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x40043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x40043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x40103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x40103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x3d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x40043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x40383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x40383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x40603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x40603d10
|
||||||
|
PTP_SYS_OFFSET = 0x43403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x43403d0e
|
||||||
PTRACE_GETFPREGS = 0xe
|
PTRACE_GETFPREGS = 0xe
|
||||||
PTRACE_GETFPXREGS = 0x12
|
PTRACE_GETFPXREGS = 0x12
|
||||||
PTRACE_GET_THREAD_AREA = 0x19
|
PTRACE_GET_THREAD_AREA = 0x19
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
generated
vendored
@ -237,6 +237,20 @@ const (
|
|||||||
PPPIOCUNBRIDGECHAN = 0x7434
|
PPPIOCUNBRIDGECHAN = 0x7434
|
||||||
PPPIOCXFERUNIT = 0x744e
|
PPPIOCXFERUNIT = 0x744e
|
||||||
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x80503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x80503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x40043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x40043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x40103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x40103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x3d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x40043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x40383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x40383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x40603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x40603d10
|
||||||
|
PTP_SYS_OFFSET = 0x43403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x43403d0e
|
||||||
PTRACE_ARCH_PRCTL = 0x1e
|
PTRACE_ARCH_PRCTL = 0x1e
|
||||||
PTRACE_GETFPREGS = 0xe
|
PTRACE_GETFPREGS = 0xe
|
||||||
PTRACE_GETFPXREGS = 0x12
|
PTRACE_GETFPXREGS = 0x12
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
generated
vendored
@ -234,6 +234,20 @@ const (
|
|||||||
PPPIOCUNBRIDGECHAN = 0x7434
|
PPPIOCUNBRIDGECHAN = 0x7434
|
||||||
PPPIOCXFERUNIT = 0x744e
|
PPPIOCXFERUNIT = 0x744e
|
||||||
PR_SET_PTRACER_ANY = 0xffffffff
|
PR_SET_PTRACER_ANY = 0xffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x80503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x80503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x40043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x40043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x40103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x40103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x3d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x40043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x40383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x40383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x40603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x40603d10
|
||||||
|
PTP_SYS_OFFSET = 0x43403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x43403d0e
|
||||||
PTRACE_GETCRUNCHREGS = 0x19
|
PTRACE_GETCRUNCHREGS = 0x19
|
||||||
PTRACE_GETFDPIC = 0x1f
|
PTRACE_GETFDPIC = 0x1f
|
||||||
PTRACE_GETFDPIC_EXEC = 0x0
|
PTRACE_GETFDPIC_EXEC = 0x0
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
generated
vendored
@ -240,6 +240,20 @@ const (
|
|||||||
PROT_BTI = 0x10
|
PROT_BTI = 0x10
|
||||||
PROT_MTE = 0x20
|
PROT_MTE = 0x20
|
||||||
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x80503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x80503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x40043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x40043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x40103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x40103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x3d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x40043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x40383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x40383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x40603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x40603d10
|
||||||
|
PTP_SYS_OFFSET = 0x43403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x43403d0e
|
||||||
PTRACE_PEEKMTETAGS = 0x21
|
PTRACE_PEEKMTETAGS = 0x21
|
||||||
PTRACE_POKEMTETAGS = 0x22
|
PTRACE_POKEMTETAGS = 0x22
|
||||||
PTRACE_SYSEMU = 0x1f
|
PTRACE_SYSEMU = 0x1f
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go
generated
vendored
@ -238,6 +238,20 @@ const (
|
|||||||
PPPIOCUNBRIDGECHAN = 0x7434
|
PPPIOCUNBRIDGECHAN = 0x7434
|
||||||
PPPIOCXFERUNIT = 0x744e
|
PPPIOCXFERUNIT = 0x744e
|
||||||
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x80503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x80503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x40043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x40043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x40103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x40103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x3d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x40043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x40383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x40383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x40603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x40603d10
|
||||||
|
PTP_SYS_OFFSET = 0x43403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x43403d0e
|
||||||
PTRACE_SYSEMU = 0x1f
|
PTRACE_SYSEMU = 0x1f
|
||||||
PTRACE_SYSEMU_SINGLESTEP = 0x20
|
PTRACE_SYSEMU_SINGLESTEP = 0x20
|
||||||
RLIMIT_AS = 0x9
|
RLIMIT_AS = 0x9
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
generated
vendored
@ -234,6 +234,20 @@ const (
|
|||||||
PPPIOCUNBRIDGECHAN = 0x20007434
|
PPPIOCUNBRIDGECHAN = 0x20007434
|
||||||
PPPIOCXFERUNIT = 0x2000744e
|
PPPIOCXFERUNIT = 0x2000744e
|
||||||
PR_SET_PTRACER_ANY = 0xffffffff
|
PR_SET_PTRACER_ANY = 0xffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x40503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x40503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x80043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x80043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x80103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x80103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x20003d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x80043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x80383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x80383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x80603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x80603d10
|
||||||
|
PTP_SYS_OFFSET = 0x83403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x83403d0e
|
||||||
PTRACE_GETFPREGS = 0xe
|
PTRACE_GETFPREGS = 0xe
|
||||||
PTRACE_GET_THREAD_AREA = 0x19
|
PTRACE_GET_THREAD_AREA = 0x19
|
||||||
PTRACE_GET_THREAD_AREA_3264 = 0xc4
|
PTRACE_GET_THREAD_AREA_3264 = 0xc4
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
generated
vendored
@ -234,6 +234,20 @@ const (
|
|||||||
PPPIOCUNBRIDGECHAN = 0x20007434
|
PPPIOCUNBRIDGECHAN = 0x20007434
|
||||||
PPPIOCXFERUNIT = 0x2000744e
|
PPPIOCXFERUNIT = 0x2000744e
|
||||||
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x40503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x40503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x80043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x80043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x80103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x80103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x20003d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x80043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x80383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x80383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x80603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x80603d10
|
||||||
|
PTP_SYS_OFFSET = 0x83403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x83403d0e
|
||||||
PTRACE_GETFPREGS = 0xe
|
PTRACE_GETFPREGS = 0xe
|
||||||
PTRACE_GET_THREAD_AREA = 0x19
|
PTRACE_GET_THREAD_AREA = 0x19
|
||||||
PTRACE_GET_THREAD_AREA_3264 = 0xc4
|
PTRACE_GET_THREAD_AREA_3264 = 0xc4
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
generated
vendored
@ -234,6 +234,20 @@ const (
|
|||||||
PPPIOCUNBRIDGECHAN = 0x20007434
|
PPPIOCUNBRIDGECHAN = 0x20007434
|
||||||
PPPIOCXFERUNIT = 0x2000744e
|
PPPIOCXFERUNIT = 0x2000744e
|
||||||
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x40503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x40503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x80043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x80043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x80103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x80103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x20003d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x80043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x80383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x80383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x80603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x80603d10
|
||||||
|
PTP_SYS_OFFSET = 0x83403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x83403d0e
|
||||||
PTRACE_GETFPREGS = 0xe
|
PTRACE_GETFPREGS = 0xe
|
||||||
PTRACE_GET_THREAD_AREA = 0x19
|
PTRACE_GET_THREAD_AREA = 0x19
|
||||||
PTRACE_GET_THREAD_AREA_3264 = 0xc4
|
PTRACE_GET_THREAD_AREA_3264 = 0xc4
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
generated
vendored
@ -234,6 +234,20 @@ const (
|
|||||||
PPPIOCUNBRIDGECHAN = 0x20007434
|
PPPIOCUNBRIDGECHAN = 0x20007434
|
||||||
PPPIOCXFERUNIT = 0x2000744e
|
PPPIOCXFERUNIT = 0x2000744e
|
||||||
PR_SET_PTRACER_ANY = 0xffffffff
|
PR_SET_PTRACER_ANY = 0xffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x40503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x40503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x80043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x80043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x80103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x80103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x20003d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x80043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x80383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x80383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x80603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x80603d10
|
||||||
|
PTP_SYS_OFFSET = 0x83403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x83403d0e
|
||||||
PTRACE_GETFPREGS = 0xe
|
PTRACE_GETFPREGS = 0xe
|
||||||
PTRACE_GET_THREAD_AREA = 0x19
|
PTRACE_GET_THREAD_AREA = 0x19
|
||||||
PTRACE_GET_THREAD_AREA_3264 = 0xc4
|
PTRACE_GET_THREAD_AREA_3264 = 0xc4
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
generated
vendored
@ -237,6 +237,20 @@ const (
|
|||||||
PPPIOCXFERUNIT = 0x2000744e
|
PPPIOCXFERUNIT = 0x2000744e
|
||||||
PROT_SAO = 0x10
|
PROT_SAO = 0x10
|
||||||
PR_SET_PTRACER_ANY = 0xffffffff
|
PR_SET_PTRACER_ANY = 0xffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x40503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x40503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x80043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x80043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x80103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x80103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x20003d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x80043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x80383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x80383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x80603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x80603d10
|
||||||
|
PTP_SYS_OFFSET = 0x83403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x83403d0e
|
||||||
PTRACE_GETEVRREGS = 0x14
|
PTRACE_GETEVRREGS = 0x14
|
||||||
PTRACE_GETFPREGS = 0xe
|
PTRACE_GETFPREGS = 0xe
|
||||||
PTRACE_GETREGS64 = 0x16
|
PTRACE_GETREGS64 = 0x16
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
generated
vendored
@ -237,6 +237,20 @@ const (
|
|||||||
PPPIOCXFERUNIT = 0x2000744e
|
PPPIOCXFERUNIT = 0x2000744e
|
||||||
PROT_SAO = 0x10
|
PROT_SAO = 0x10
|
||||||
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x40503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x40503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x80043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x80043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x80103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x80103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x20003d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x80043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x80383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x80383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x80603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x80603d10
|
||||||
|
PTP_SYS_OFFSET = 0x83403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x83403d0e
|
||||||
PTRACE_GETEVRREGS = 0x14
|
PTRACE_GETEVRREGS = 0x14
|
||||||
PTRACE_GETFPREGS = 0xe
|
PTRACE_GETFPREGS = 0xe
|
||||||
PTRACE_GETREGS64 = 0x16
|
PTRACE_GETREGS64 = 0x16
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
generated
vendored
@ -237,6 +237,20 @@ const (
|
|||||||
PPPIOCXFERUNIT = 0x2000744e
|
PPPIOCXFERUNIT = 0x2000744e
|
||||||
PROT_SAO = 0x10
|
PROT_SAO = 0x10
|
||||||
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x40503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x40503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x80043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x80043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x80103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x80103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x20003d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x80043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x80383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x80383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x80603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x80603d10
|
||||||
|
PTP_SYS_OFFSET = 0x83403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x83403d0e
|
||||||
PTRACE_GETEVRREGS = 0x14
|
PTRACE_GETEVRREGS = 0x14
|
||||||
PTRACE_GETFPREGS = 0xe
|
PTRACE_GETFPREGS = 0xe
|
||||||
PTRACE_GETREGS64 = 0x16
|
PTRACE_GETREGS64 = 0x16
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
generated
vendored
@ -234,6 +234,20 @@ const (
|
|||||||
PPPIOCUNBRIDGECHAN = 0x7434
|
PPPIOCUNBRIDGECHAN = 0x7434
|
||||||
PPPIOCXFERUNIT = 0x744e
|
PPPIOCXFERUNIT = 0x744e
|
||||||
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x80503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x80503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x40043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x40043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x40103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x40103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x3d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x40043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x40383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x40383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x40603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x40603d10
|
||||||
|
PTP_SYS_OFFSET = 0x43403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x43403d0e
|
||||||
PTRACE_GETFDPIC = 0x21
|
PTRACE_GETFDPIC = 0x21
|
||||||
PTRACE_GETFDPIC_EXEC = 0x0
|
PTRACE_GETFDPIC_EXEC = 0x0
|
||||||
PTRACE_GETFDPIC_INTERP = 0x1
|
PTRACE_GETFDPIC_INTERP = 0x1
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
generated
vendored
@ -234,6 +234,20 @@ const (
|
|||||||
PPPIOCUNBRIDGECHAN = 0x7434
|
PPPIOCUNBRIDGECHAN = 0x7434
|
||||||
PPPIOCXFERUNIT = 0x744e
|
PPPIOCXFERUNIT = 0x744e
|
||||||
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x80503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x80503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x40043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x40043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x40103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x40103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x3d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x40043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x40383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x40383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x40603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x40603d10
|
||||||
|
PTP_SYS_OFFSET = 0x43403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x43403d0e
|
||||||
PTRACE_DISABLE_TE = 0x5010
|
PTRACE_DISABLE_TE = 0x5010
|
||||||
PTRACE_ENABLE_TE = 0x5009
|
PTRACE_ENABLE_TE = 0x5009
|
||||||
PTRACE_GET_LAST_BREAK = 0x5006
|
PTRACE_GET_LAST_BREAK = 0x5006
|
||||||
|
14
vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
generated
vendored
14
vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
generated
vendored
@ -239,6 +239,20 @@ const (
|
|||||||
PPPIOCUNBRIDGECHAN = 0x20007434
|
PPPIOCUNBRIDGECHAN = 0x20007434
|
||||||
PPPIOCXFERUNIT = 0x2000744e
|
PPPIOCXFERUNIT = 0x2000744e
|
||||||
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
||||||
|
PTP_CLOCK_GETCAPS = 0x40503d01
|
||||||
|
PTP_CLOCK_GETCAPS2 = 0x40503d0a
|
||||||
|
PTP_ENABLE_PPS = 0x80043d04
|
||||||
|
PTP_ENABLE_PPS2 = 0x80043d0d
|
||||||
|
PTP_EXTTS_REQUEST = 0x80103d02
|
||||||
|
PTP_EXTTS_REQUEST2 = 0x80103d0b
|
||||||
|
PTP_MASK_CLEAR_ALL = 0x20003d13
|
||||||
|
PTP_MASK_EN_SINGLE = 0x80043d14
|
||||||
|
PTP_PEROUT_REQUEST = 0x80383d03
|
||||||
|
PTP_PEROUT_REQUEST2 = 0x80383d0c
|
||||||
|
PTP_PIN_SETFUNC = 0x80603d07
|
||||||
|
PTP_PIN_SETFUNC2 = 0x80603d10
|
||||||
|
PTP_SYS_OFFSET = 0x83403d05
|
||||||
|
PTP_SYS_OFFSET2 = 0x83403d0e
|
||||||
PTRACE_GETFPAREGS = 0x14
|
PTRACE_GETFPAREGS = 0x14
|
||||||
PTRACE_GETFPREGS = 0xe
|
PTRACE_GETFPREGS = 0xe
|
||||||
PTRACE_GETFPREGS64 = 0x19
|
PTRACE_GETFPREGS64 = 0x19
|
||||||
|
10
vendor/golang.org/x/sys/unix/zsyscall_linux.go
generated
vendored
10
vendor/golang.org/x/sys/unix/zsyscall_linux.go
generated
vendored
@ -592,6 +592,16 @@ func ClockGettime(clockid int32, time *Timespec) (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func ClockSettime(clockid int32, time *Timespec) (err error) {
|
||||||
|
_, _, e1 := Syscall(SYS_CLOCK_SETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {
|
func ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {
|
||||||
_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)
|
_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
|
120
vendor/golang.org/x/sys/unix/ztypes_linux.go
generated
vendored
120
vendor/golang.org/x/sys/unix/ztypes_linux.go
generated
vendored
@ -1752,12 +1752,6 @@ const (
|
|||||||
IFLA_IPVLAN_UNSPEC = 0x0
|
IFLA_IPVLAN_UNSPEC = 0x0
|
||||||
IFLA_IPVLAN_MODE = 0x1
|
IFLA_IPVLAN_MODE = 0x1
|
||||||
IFLA_IPVLAN_FLAGS = 0x2
|
IFLA_IPVLAN_FLAGS = 0x2
|
||||||
NETKIT_NEXT = -0x1
|
|
||||||
NETKIT_PASS = 0x0
|
|
||||||
NETKIT_DROP = 0x2
|
|
||||||
NETKIT_REDIRECT = 0x7
|
|
||||||
NETKIT_L2 = 0x0
|
|
||||||
NETKIT_L3 = 0x1
|
|
||||||
IFLA_NETKIT_UNSPEC = 0x0
|
IFLA_NETKIT_UNSPEC = 0x0
|
||||||
IFLA_NETKIT_PEER_INFO = 0x1
|
IFLA_NETKIT_PEER_INFO = 0x1
|
||||||
IFLA_NETKIT_PRIMARY = 0x2
|
IFLA_NETKIT_PRIMARY = 0x2
|
||||||
@ -1796,6 +1790,7 @@ const (
|
|||||||
IFLA_VXLAN_DF = 0x1d
|
IFLA_VXLAN_DF = 0x1d
|
||||||
IFLA_VXLAN_VNIFILTER = 0x1e
|
IFLA_VXLAN_VNIFILTER = 0x1e
|
||||||
IFLA_VXLAN_LOCALBYPASS = 0x1f
|
IFLA_VXLAN_LOCALBYPASS = 0x1f
|
||||||
|
IFLA_VXLAN_LABEL_POLICY = 0x20
|
||||||
IFLA_GENEVE_UNSPEC = 0x0
|
IFLA_GENEVE_UNSPEC = 0x0
|
||||||
IFLA_GENEVE_ID = 0x1
|
IFLA_GENEVE_ID = 0x1
|
||||||
IFLA_GENEVE_REMOTE = 0x2
|
IFLA_GENEVE_REMOTE = 0x2
|
||||||
@ -1825,6 +1820,8 @@ const (
|
|||||||
IFLA_GTP_ROLE = 0x4
|
IFLA_GTP_ROLE = 0x4
|
||||||
IFLA_GTP_CREATE_SOCKETS = 0x5
|
IFLA_GTP_CREATE_SOCKETS = 0x5
|
||||||
IFLA_GTP_RESTART_COUNT = 0x6
|
IFLA_GTP_RESTART_COUNT = 0x6
|
||||||
|
IFLA_GTP_LOCAL = 0x7
|
||||||
|
IFLA_GTP_LOCAL6 = 0x8
|
||||||
IFLA_BOND_UNSPEC = 0x0
|
IFLA_BOND_UNSPEC = 0x0
|
||||||
IFLA_BOND_MODE = 0x1
|
IFLA_BOND_MODE = 0x1
|
||||||
IFLA_BOND_ACTIVE_SLAVE = 0x2
|
IFLA_BOND_ACTIVE_SLAVE = 0x2
|
||||||
@ -1857,6 +1854,7 @@ const (
|
|||||||
IFLA_BOND_AD_LACP_ACTIVE = 0x1d
|
IFLA_BOND_AD_LACP_ACTIVE = 0x1d
|
||||||
IFLA_BOND_MISSED_MAX = 0x1e
|
IFLA_BOND_MISSED_MAX = 0x1e
|
||||||
IFLA_BOND_NS_IP6_TARGET = 0x1f
|
IFLA_BOND_NS_IP6_TARGET = 0x1f
|
||||||
|
IFLA_BOND_COUPLED_CONTROL = 0x20
|
||||||
IFLA_BOND_AD_INFO_UNSPEC = 0x0
|
IFLA_BOND_AD_INFO_UNSPEC = 0x0
|
||||||
IFLA_BOND_AD_INFO_AGGREGATOR = 0x1
|
IFLA_BOND_AD_INFO_AGGREGATOR = 0x1
|
||||||
IFLA_BOND_AD_INFO_NUM_PORTS = 0x2
|
IFLA_BOND_AD_INFO_NUM_PORTS = 0x2
|
||||||
@ -1925,6 +1923,7 @@ const (
|
|||||||
IFLA_HSR_SEQ_NR = 0x5
|
IFLA_HSR_SEQ_NR = 0x5
|
||||||
IFLA_HSR_VERSION = 0x6
|
IFLA_HSR_VERSION = 0x6
|
||||||
IFLA_HSR_PROTOCOL = 0x7
|
IFLA_HSR_PROTOCOL = 0x7
|
||||||
|
IFLA_HSR_INTERLINK = 0x8
|
||||||
IFLA_STATS_UNSPEC = 0x0
|
IFLA_STATS_UNSPEC = 0x0
|
||||||
IFLA_STATS_LINK_64 = 0x1
|
IFLA_STATS_LINK_64 = 0x1
|
||||||
IFLA_STATS_LINK_XSTATS = 0x2
|
IFLA_STATS_LINK_XSTATS = 0x2
|
||||||
@ -1977,6 +1976,15 @@ const (
|
|||||||
IFLA_DSA_MASTER = 0x1
|
IFLA_DSA_MASTER = 0x1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
NETKIT_NEXT = -0x1
|
||||||
|
NETKIT_PASS = 0x0
|
||||||
|
NETKIT_DROP = 0x2
|
||||||
|
NETKIT_REDIRECT = 0x7
|
||||||
|
NETKIT_L2 = 0x0
|
||||||
|
NETKIT_L3 = 0x1
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
NF_INET_PRE_ROUTING = 0x0
|
NF_INET_PRE_ROUTING = 0x0
|
||||||
NF_INET_LOCAL_IN = 0x1
|
NF_INET_LOCAL_IN = 0x1
|
||||||
@ -4110,6 +4118,106 @@ type EthtoolDrvinfo struct {
|
|||||||
Regdump_len uint32
|
Regdump_len uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type EthtoolTsInfo struct {
|
||||||
|
Cmd uint32
|
||||||
|
So_timestamping uint32
|
||||||
|
Phc_index int32
|
||||||
|
Tx_types uint32
|
||||||
|
Tx_reserved [3]uint32
|
||||||
|
Rx_filters uint32
|
||||||
|
Rx_reserved [3]uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type HwTstampConfig struct {
|
||||||
|
Flags int32
|
||||||
|
Tx_type int32
|
||||||
|
Rx_filter int32
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
HWTSTAMP_FILTER_NONE = 0x0
|
||||||
|
HWTSTAMP_FILTER_ALL = 0x1
|
||||||
|
HWTSTAMP_FILTER_SOME = 0x2
|
||||||
|
HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 0x3
|
||||||
|
HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 0x6
|
||||||
|
HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 0x9
|
||||||
|
HWTSTAMP_FILTER_PTP_V2_EVENT = 0xc
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
HWTSTAMP_TX_OFF = 0x0
|
||||||
|
HWTSTAMP_TX_ON = 0x1
|
||||||
|
HWTSTAMP_TX_ONESTEP_SYNC = 0x2
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
PtpClockCaps struct {
|
||||||
|
Max_adj int32
|
||||||
|
N_alarm int32
|
||||||
|
N_ext_ts int32
|
||||||
|
N_per_out int32
|
||||||
|
Pps int32
|
||||||
|
N_pins int32
|
||||||
|
Cross_timestamping int32
|
||||||
|
Adjust_phase int32
|
||||||
|
Max_phase_adj int32
|
||||||
|
Rsv [11]int32
|
||||||
|
}
|
||||||
|
PtpClockTime struct {
|
||||||
|
Sec int64
|
||||||
|
Nsec uint32
|
||||||
|
Reserved uint32
|
||||||
|
}
|
||||||
|
PtpExttsEvent struct {
|
||||||
|
T PtpClockTime
|
||||||
|
Index uint32
|
||||||
|
Flags uint32
|
||||||
|
Rsv [2]uint32
|
||||||
|
}
|
||||||
|
PtpExttsRequest struct {
|
||||||
|
Index uint32
|
||||||
|
Flags uint32
|
||||||
|
Rsv [2]uint32
|
||||||
|
}
|
||||||
|
PtpPeroutRequest struct {
|
||||||
|
StartOrPhase PtpClockTime
|
||||||
|
Period PtpClockTime
|
||||||
|
Index uint32
|
||||||
|
Flags uint32
|
||||||
|
On PtpClockTime
|
||||||
|
}
|
||||||
|
PtpPinDesc struct {
|
||||||
|
Name [64]byte
|
||||||
|
Index uint32
|
||||||
|
Func uint32
|
||||||
|
Chan uint32
|
||||||
|
Rsv [5]uint32
|
||||||
|
}
|
||||||
|
PtpSysOffset struct {
|
||||||
|
Samples uint32
|
||||||
|
Rsv [3]uint32
|
||||||
|
Ts [51]PtpClockTime
|
||||||
|
}
|
||||||
|
PtpSysOffsetExtended struct {
|
||||||
|
Samples uint32
|
||||||
|
Rsv [3]uint32
|
||||||
|
Ts [25][3]PtpClockTime
|
||||||
|
}
|
||||||
|
PtpSysOffsetPrecise struct {
|
||||||
|
Device PtpClockTime
|
||||||
|
Realtime PtpClockTime
|
||||||
|
Monoraw PtpClockTime
|
||||||
|
Rsv [4]uint32
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
PTP_PF_NONE = 0x0
|
||||||
|
PTP_PF_EXTTS = 0x1
|
||||||
|
PTP_PF_PEROUT = 0x2
|
||||||
|
PTP_PF_PHYSYNC = 0x3
|
||||||
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
HIDRawReportDescriptor struct {
|
HIDRawReportDescriptor struct {
|
||||||
Size uint32
|
Size uint32
|
||||||
|
6
vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go
generated
vendored
6
vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go
generated
vendored
@ -377,6 +377,12 @@ type Flock_t struct {
|
|||||||
Pid int32
|
Pid int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type F_cnvrt struct {
|
||||||
|
Cvtcmd int32
|
||||||
|
Pccsid int16
|
||||||
|
Fccsid int16
|
||||||
|
}
|
||||||
|
|
||||||
type Termios struct {
|
type Termios struct {
|
||||||
Cflag uint32
|
Cflag uint32
|
||||||
Iflag uint32
|
Iflag uint32
|
||||||
|
34
vendor/golang.org/x/sys/windows/syscall_windows.go
generated
vendored
34
vendor/golang.org/x/sys/windows/syscall_windows.go
generated
vendored
@ -725,20 +725,12 @@ func DurationSinceBoot() time.Duration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Ftruncate(fd Handle, length int64) (err error) {
|
func Ftruncate(fd Handle, length int64) (err error) {
|
||||||
curoffset, e := Seek(fd, 0, 1)
|
type _FILE_END_OF_FILE_INFO struct {
|
||||||
if e != nil {
|
EndOfFile int64
|
||||||
return e
|
|
||||||
}
|
}
|
||||||
defer Seek(fd, curoffset, 0)
|
var info _FILE_END_OF_FILE_INFO
|
||||||
_, e = Seek(fd, length, 0)
|
info.EndOfFile = length
|
||||||
if e != nil {
|
return SetFileInformationByHandle(fd, FileEndOfFileInfo, (*byte)(unsafe.Pointer(&info)), uint32(unsafe.Sizeof(info)))
|
||||||
return e
|
|
||||||
}
|
|
||||||
e = SetEndOfFile(fd)
|
|
||||||
if e != nil {
|
|
||||||
return e
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Gettimeofday(tv *Timeval) (err error) {
|
func Gettimeofday(tv *Timeval) (err error) {
|
||||||
@ -894,6 +886,11 @@ const socket_error = uintptr(^uint32(0))
|
|||||||
//sys GetACP() (acp uint32) = kernel32.GetACP
|
//sys GetACP() (acp uint32) = kernel32.GetACP
|
||||||
//sys MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar
|
//sys MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar
|
||||||
//sys getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) = iphlpapi.GetBestInterfaceEx
|
//sys getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) = iphlpapi.GetBestInterfaceEx
|
||||||
|
//sys GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) = iphlpapi.GetIfEntry2Ex
|
||||||
|
//sys GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) = iphlpapi.GetUnicastIpAddressEntry
|
||||||
|
//sys NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyIpInterfaceChange
|
||||||
|
//sys NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyUnicastIpAddressChange
|
||||||
|
//sys CancelMibChangeNotify2(notificationHandle Handle) (errcode error) = iphlpapi.CancelMibChangeNotify2
|
||||||
|
|
||||||
// For testing: clients can set this flag to force
|
// For testing: clients can set this flag to force
|
||||||
// creation of IPv6 sockets to return EAFNOSUPPORT.
|
// creation of IPv6 sockets to return EAFNOSUPPORT.
|
||||||
@ -1685,13 +1682,16 @@ func (s NTStatus) Error() string {
|
|||||||
// do not use NTUnicodeString, and instead UTF16PtrFromString should be used for
|
// do not use NTUnicodeString, and instead UTF16PtrFromString should be used for
|
||||||
// the more common *uint16 string type.
|
// the more common *uint16 string type.
|
||||||
func NewNTUnicodeString(s string) (*NTUnicodeString, error) {
|
func NewNTUnicodeString(s string) (*NTUnicodeString, error) {
|
||||||
var u NTUnicodeString
|
s16, err := UTF16FromString(s)
|
||||||
s16, err := UTF16PtrFromString(s)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
RtlInitUnicodeString(&u, s16)
|
n := uint16(len(s16) * 2)
|
||||||
return &u, nil
|
return &NTUnicodeString{
|
||||||
|
Length: n - 2, // subtract 2 bytes for the NULL terminator
|
||||||
|
MaximumLength: n,
|
||||||
|
Buffer: &s16[0],
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Slice returns a uint16 slice that aliases the data in the NTUnicodeString.
|
// Slice returns a uint16 slice that aliases the data in the NTUnicodeString.
|
||||||
|
126
vendor/golang.org/x/sys/windows/types_windows.go
generated
vendored
126
vendor/golang.org/x/sys/windows/types_windows.go
generated
vendored
@ -2203,6 +2203,132 @@ const (
|
|||||||
IfOperStatusLowerLayerDown = 7
|
IfOperStatusLowerLayerDown = 7
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
IF_MAX_PHYS_ADDRESS_LENGTH = 32
|
||||||
|
IF_MAX_STRING_SIZE = 256
|
||||||
|
)
|
||||||
|
|
||||||
|
// MIB_IF_ENTRY_LEVEL enumeration from netioapi.h or
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/nf-netioapi-getifentry2ex.
|
||||||
|
const (
|
||||||
|
MibIfEntryNormal = 0
|
||||||
|
MibIfEntryNormalWithoutStatistics = 2
|
||||||
|
)
|
||||||
|
|
||||||
|
// MIB_NOTIFICATION_TYPE enumeration from netioapi.h or
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ne-netioapi-mib_notification_type.
|
||||||
|
const (
|
||||||
|
MibParameterNotification = 0
|
||||||
|
MibAddInstance = 1
|
||||||
|
MibDeleteInstance = 2
|
||||||
|
MibInitialNotification = 3
|
||||||
|
)
|
||||||
|
|
||||||
|
// MibIfRow2 stores information about a particular interface. See
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_if_row2.
|
||||||
|
type MibIfRow2 struct {
|
||||||
|
InterfaceLuid uint64
|
||||||
|
InterfaceIndex uint32
|
||||||
|
InterfaceGuid GUID
|
||||||
|
Alias [IF_MAX_STRING_SIZE + 1]uint16
|
||||||
|
Description [IF_MAX_STRING_SIZE + 1]uint16
|
||||||
|
PhysicalAddressLength uint32
|
||||||
|
PhysicalAddress [IF_MAX_PHYS_ADDRESS_LENGTH]uint8
|
||||||
|
PermanentPhysicalAddress [IF_MAX_PHYS_ADDRESS_LENGTH]uint8
|
||||||
|
Mtu uint32
|
||||||
|
Type uint32
|
||||||
|
TunnelType uint32
|
||||||
|
MediaType uint32
|
||||||
|
PhysicalMediumType uint32
|
||||||
|
AccessType uint32
|
||||||
|
DirectionType uint32
|
||||||
|
InterfaceAndOperStatusFlags uint8
|
||||||
|
OperStatus uint32
|
||||||
|
AdminStatus uint32
|
||||||
|
MediaConnectState uint32
|
||||||
|
NetworkGuid GUID
|
||||||
|
ConnectionType uint32
|
||||||
|
TransmitLinkSpeed uint64
|
||||||
|
ReceiveLinkSpeed uint64
|
||||||
|
InOctets uint64
|
||||||
|
InUcastPkts uint64
|
||||||
|
InNUcastPkts uint64
|
||||||
|
InDiscards uint64
|
||||||
|
InErrors uint64
|
||||||
|
InUnknownProtos uint64
|
||||||
|
InUcastOctets uint64
|
||||||
|
InMulticastOctets uint64
|
||||||
|
InBroadcastOctets uint64
|
||||||
|
OutOctets uint64
|
||||||
|
OutUcastPkts uint64
|
||||||
|
OutNUcastPkts uint64
|
||||||
|
OutDiscards uint64
|
||||||
|
OutErrors uint64
|
||||||
|
OutUcastOctets uint64
|
||||||
|
OutMulticastOctets uint64
|
||||||
|
OutBroadcastOctets uint64
|
||||||
|
OutQLen uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
// MIB_UNICASTIPADDRESS_ROW stores information about a unicast IP address. See
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_unicastipaddress_row.
|
||||||
|
type MibUnicastIpAddressRow struct {
|
||||||
|
Address RawSockaddrInet6 // SOCKADDR_INET union
|
||||||
|
InterfaceLuid uint64
|
||||||
|
InterfaceIndex uint32
|
||||||
|
PrefixOrigin uint32
|
||||||
|
SuffixOrigin uint32
|
||||||
|
ValidLifetime uint32
|
||||||
|
PreferredLifetime uint32
|
||||||
|
OnLinkPrefixLength uint8
|
||||||
|
SkipAsSource uint8
|
||||||
|
DadState uint32
|
||||||
|
ScopeId uint32
|
||||||
|
CreationTimeStamp Filetime
|
||||||
|
}
|
||||||
|
|
||||||
|
const ScopeLevelCount = 16
|
||||||
|
|
||||||
|
// MIB_IPINTERFACE_ROW stores interface management information for a particular IP address family on a network interface.
|
||||||
|
// See https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipinterface_row.
|
||||||
|
type MibIpInterfaceRow struct {
|
||||||
|
Family uint16
|
||||||
|
InterfaceLuid uint64
|
||||||
|
InterfaceIndex uint32
|
||||||
|
MaxReassemblySize uint32
|
||||||
|
InterfaceIdentifier uint64
|
||||||
|
MinRouterAdvertisementInterval uint32
|
||||||
|
MaxRouterAdvertisementInterval uint32
|
||||||
|
AdvertisingEnabled uint8
|
||||||
|
ForwardingEnabled uint8
|
||||||
|
WeakHostSend uint8
|
||||||
|
WeakHostReceive uint8
|
||||||
|
UseAutomaticMetric uint8
|
||||||
|
UseNeighborUnreachabilityDetection uint8
|
||||||
|
ManagedAddressConfigurationSupported uint8
|
||||||
|
OtherStatefulConfigurationSupported uint8
|
||||||
|
AdvertiseDefaultRoute uint8
|
||||||
|
RouterDiscoveryBehavior uint32
|
||||||
|
DadTransmits uint32
|
||||||
|
BaseReachableTime uint32
|
||||||
|
RetransmitTime uint32
|
||||||
|
PathMtuDiscoveryTimeout uint32
|
||||||
|
LinkLocalAddressBehavior uint32
|
||||||
|
LinkLocalAddressTimeout uint32
|
||||||
|
ZoneIndices [ScopeLevelCount]uint32
|
||||||
|
SitePrefixLength uint32
|
||||||
|
Metric uint32
|
||||||
|
NlMtu uint32
|
||||||
|
Connected uint8
|
||||||
|
SupportsWakeUpPatterns uint8
|
||||||
|
SupportsNeighborDiscovery uint8
|
||||||
|
SupportsRouterDiscovery uint8
|
||||||
|
ReachableTime uint32
|
||||||
|
TransmitOffload uint32
|
||||||
|
ReceiveOffload uint32
|
||||||
|
DisableDefaultRoutes uint8
|
||||||
|
}
|
||||||
|
|
||||||
// Console related constants used for the mode parameter to SetConsoleMode. See
|
// Console related constants used for the mode parameter to SetConsoleMode. See
|
||||||
// https://docs.microsoft.com/en-us/windows/console/setconsolemode for details.
|
// https://docs.microsoft.com/en-us/windows/console/setconsolemode for details.
|
||||||
|
|
||||||
|
53
vendor/golang.org/x/sys/windows/zsyscall_windows.go
generated
vendored
53
vendor/golang.org/x/sys/windows/zsyscall_windows.go
generated
vendored
@ -181,10 +181,15 @@ var (
|
|||||||
procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree")
|
procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree")
|
||||||
procDwmGetWindowAttribute = moddwmapi.NewProc("DwmGetWindowAttribute")
|
procDwmGetWindowAttribute = moddwmapi.NewProc("DwmGetWindowAttribute")
|
||||||
procDwmSetWindowAttribute = moddwmapi.NewProc("DwmSetWindowAttribute")
|
procDwmSetWindowAttribute = moddwmapi.NewProc("DwmSetWindowAttribute")
|
||||||
|
procCancelMibChangeNotify2 = modiphlpapi.NewProc("CancelMibChangeNotify2")
|
||||||
procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses")
|
procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses")
|
||||||
procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo")
|
procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo")
|
||||||
procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx")
|
procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx")
|
||||||
procGetIfEntry = modiphlpapi.NewProc("GetIfEntry")
|
procGetIfEntry = modiphlpapi.NewProc("GetIfEntry")
|
||||||
|
procGetIfEntry2Ex = modiphlpapi.NewProc("GetIfEntry2Ex")
|
||||||
|
procGetUnicastIpAddressEntry = modiphlpapi.NewProc("GetUnicastIpAddressEntry")
|
||||||
|
procNotifyIpInterfaceChange = modiphlpapi.NewProc("NotifyIpInterfaceChange")
|
||||||
|
procNotifyUnicastIpAddressChange = modiphlpapi.NewProc("NotifyUnicastIpAddressChange")
|
||||||
procAddDllDirectory = modkernel32.NewProc("AddDllDirectory")
|
procAddDllDirectory = modkernel32.NewProc("AddDllDirectory")
|
||||||
procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject")
|
procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject")
|
||||||
procCancelIo = modkernel32.NewProc("CancelIo")
|
procCancelIo = modkernel32.NewProc("CancelIo")
|
||||||
@ -1606,6 +1611,14 @@ func DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, si
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CancelMibChangeNotify2(notificationHandle Handle) (errcode error) {
|
||||||
|
r0, _, _ := syscall.SyscallN(procCancelMibChangeNotify2.Addr(), uintptr(notificationHandle))
|
||||||
|
if r0 != 0 {
|
||||||
|
errcode = syscall.Errno(r0)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) {
|
func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) {
|
||||||
r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0)
|
r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0)
|
||||||
if r0 != 0 {
|
if r0 != 0 {
|
||||||
@ -1638,6 +1651,46 @@ func GetIfEntry(pIfRow *MibIfRow) (errcode error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) {
|
||||||
|
r0, _, _ := syscall.SyscallN(procGetIfEntry2Ex.Addr(), uintptr(level), uintptr(unsafe.Pointer(row)))
|
||||||
|
if r0 != 0 {
|
||||||
|
errcode = syscall.Errno(r0)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) {
|
||||||
|
r0, _, _ := syscall.SyscallN(procGetUnicastIpAddressEntry.Addr(), uintptr(unsafe.Pointer(row)))
|
||||||
|
if r0 != 0 {
|
||||||
|
errcode = syscall.Errno(r0)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) {
|
||||||
|
var _p0 uint32
|
||||||
|
if initialNotification {
|
||||||
|
_p0 = 1
|
||||||
|
}
|
||||||
|
r0, _, _ := syscall.SyscallN(procNotifyIpInterfaceChange.Addr(), uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle)))
|
||||||
|
if r0 != 0 {
|
||||||
|
errcode = syscall.Errno(r0)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) {
|
||||||
|
var _p0 uint32
|
||||||
|
if initialNotification {
|
||||||
|
_p0 = 1
|
||||||
|
}
|
||||||
|
r0, _, _ := syscall.SyscallN(procNotifyUnicastIpAddressChange.Addr(), uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle)))
|
||||||
|
if r0 != 0 {
|
||||||
|
errcode = syscall.Errno(r0)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func AddDllDirectory(path *uint16) (cookie uintptr, err error) {
|
func AddDllDirectory(path *uint16) (cookie uintptr, err error) {
|
||||||
r0, _, e1 := syscall.Syscall(procAddDllDirectory.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
|
r0, _, e1 := syscall.Syscall(procAddDllDirectory.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
|
||||||
cookie = uintptr(r0)
|
cookie = uintptr(r0)
|
||||||
|
11
vendor/golang.org/x/term/README.md
generated
vendored
11
vendor/golang.org/x/term/README.md
generated
vendored
@ -4,16 +4,13 @@
|
|||||||
|
|
||||||
This repository provides Go terminal and console support packages.
|
This repository provides Go terminal and console support packages.
|
||||||
|
|
||||||
## Download/Install
|
|
||||||
|
|
||||||
The easiest way to install is to run `go get -u golang.org/x/term`. You can
|
|
||||||
also manually git clone the repository to `$GOPATH/src/golang.org/x/term`.
|
|
||||||
|
|
||||||
## Report Issues / Send Patches
|
## Report Issues / Send Patches
|
||||||
|
|
||||||
This repository uses Gerrit for code changes. To learn how to submit changes to
|
This repository uses Gerrit for code changes. To learn how to submit changes to
|
||||||
this repository, see https://golang.org/doc/contribute.html.
|
this repository, see https://go.dev/doc/contribute.
|
||||||
|
|
||||||
|
The git repository is https://go.googlesource.com/term.
|
||||||
|
|
||||||
The main issue tracker for the term repository is located at
|
The main issue tracker for the term repository is located at
|
||||||
https://github.com/golang/go/issues. Prefix your issue with "x/term:" in the
|
https://go.dev/issues. Prefix your issue with "x/term:" in the
|
||||||
subject line, so it is easy to find.
|
subject line, so it is easy to find.
|
||||||
|
2
vendor/google.golang.org/protobuf/encoding/protojson/decode.go
generated
vendored
2
vendor/google.golang.org/protobuf/encoding/protojson/decode.go
generated
vendored
@ -351,7 +351,7 @@ func (d decoder) unmarshalScalar(fd protoreflect.FieldDescriptor) (protoreflect.
|
|||||||
panic(fmt.Sprintf("unmarshalScalar: invalid scalar kind %v", kind))
|
panic(fmt.Sprintf("unmarshalScalar: invalid scalar kind %v", kind))
|
||||||
}
|
}
|
||||||
|
|
||||||
return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v type: %v", kind, tok.RawString())
|
return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v field %v: %v", kind, fd.JSONName(), tok.RawString())
|
||||||
}
|
}
|
||||||
|
|
||||||
func unmarshalInt(tok json.Token, bitSize int) (protoreflect.Value, bool) {
|
func unmarshalInt(tok json.Token, bitSize int) (protoreflect.Value, bool) {
|
||||||
|
4
vendor/google.golang.org/protobuf/encoding/protojson/encode.go
generated
vendored
4
vendor/google.golang.org/protobuf/encoding/protojson/encode.go
generated
vendored
@ -216,9 +216,7 @@ func (m unpopulatedFieldRanger) Range(f func(protoreflect.FieldDescriptor, proto
|
|||||||
}
|
}
|
||||||
|
|
||||||
v := m.Get(fd)
|
v := m.Get(fd)
|
||||||
isProto2Scalar := fd.Syntax() == protoreflect.Proto2 && fd.Default().IsValid()
|
if fd.HasPresence() {
|
||||||
isSingularMessage := fd.Cardinality() != protoreflect.Repeated && fd.Message() != nil
|
|
||||||
if isProto2Scalar || isSingularMessage {
|
|
||||||
if m.skipNull {
|
if m.skipNull {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
20
vendor/google.golang.org/protobuf/internal/descopts/options.go
generated
vendored
20
vendor/google.golang.org/protobuf/internal/descopts/options.go
generated
vendored
@ -9,7 +9,7 @@
|
|||||||
// dependency on the descriptor proto package).
|
// dependency on the descriptor proto package).
|
||||||
package descopts
|
package descopts
|
||||||
|
|
||||||
import pref "google.golang.org/protobuf/reflect/protoreflect"
|
import "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
|
||||||
// These variables are set by the init function in descriptor.pb.go via logic
|
// These variables are set by the init function in descriptor.pb.go via logic
|
||||||
// in internal/filetype. In other words, so long as the descriptor proto package
|
// in internal/filetype. In other words, so long as the descriptor proto package
|
||||||
@ -17,13 +17,13 @@ import pref "google.golang.org/protobuf/reflect/protoreflect"
|
|||||||
//
|
//
|
||||||
// Each variable is populated with a nil pointer to the options struct.
|
// Each variable is populated with a nil pointer to the options struct.
|
||||||
var (
|
var (
|
||||||
File pref.ProtoMessage
|
File protoreflect.ProtoMessage
|
||||||
Enum pref.ProtoMessage
|
Enum protoreflect.ProtoMessage
|
||||||
EnumValue pref.ProtoMessage
|
EnumValue protoreflect.ProtoMessage
|
||||||
Message pref.ProtoMessage
|
Message protoreflect.ProtoMessage
|
||||||
Field pref.ProtoMessage
|
Field protoreflect.ProtoMessage
|
||||||
Oneof pref.ProtoMessage
|
Oneof protoreflect.ProtoMessage
|
||||||
ExtensionRange pref.ProtoMessage
|
ExtensionRange protoreflect.ProtoMessage
|
||||||
Service pref.ProtoMessage
|
Service protoreflect.ProtoMessage
|
||||||
Method pref.ProtoMessage
|
Method protoreflect.ProtoMessage
|
||||||
)
|
)
|
||||||
|
2
vendor/google.golang.org/protobuf/internal/editionssupport/editions.go
generated
vendored
2
vendor/google.golang.org/protobuf/internal/editionssupport/editions.go
generated
vendored
@ -5,7 +5,7 @@
|
|||||||
// Package editionssupport defines constants for editions that are supported.
|
// Package editionssupport defines constants for editions that are supported.
|
||||||
package editionssupport
|
package editionssupport
|
||||||
|
|
||||||
import descriptorpb "google.golang.org/protobuf/types/descriptorpb"
|
import "google.golang.org/protobuf/types/descriptorpb"
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Minimum = descriptorpb.Edition_EDITION_PROTO2
|
Minimum = descriptorpb.Edition_EDITION_PROTO2
|
||||||
|
4
vendor/google.golang.org/protobuf/internal/filedesc/desc.go
generated
vendored
4
vendor/google.golang.org/protobuf/internal/filedesc/desc.go
generated
vendored
@ -258,6 +258,7 @@ type (
|
|||||||
StringName stringName
|
StringName stringName
|
||||||
IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto
|
IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto
|
||||||
IsWeak bool // promoted from google.protobuf.FieldOptions
|
IsWeak bool // promoted from google.protobuf.FieldOptions
|
||||||
|
IsLazy bool // promoted from google.protobuf.FieldOptions
|
||||||
Default defaultValue
|
Default defaultValue
|
||||||
ContainingOneof protoreflect.OneofDescriptor // must be consistent with Message.Oneofs.Fields
|
ContainingOneof protoreflect.OneofDescriptor // must be consistent with Message.Oneofs.Fields
|
||||||
Enum protoreflect.EnumDescriptor
|
Enum protoreflect.EnumDescriptor
|
||||||
@ -351,6 +352,7 @@ func (fd *Field) IsPacked() bool {
|
|||||||
}
|
}
|
||||||
func (fd *Field) IsExtension() bool { return false }
|
func (fd *Field) IsExtension() bool { return false }
|
||||||
func (fd *Field) IsWeak() bool { return fd.L1.IsWeak }
|
func (fd *Field) IsWeak() bool { return fd.L1.IsWeak }
|
||||||
|
func (fd *Field) IsLazy() bool { return fd.L1.IsLazy }
|
||||||
func (fd *Field) IsList() bool { return fd.Cardinality() == protoreflect.Repeated && !fd.IsMap() }
|
func (fd *Field) IsList() bool { return fd.Cardinality() == protoreflect.Repeated && !fd.IsMap() }
|
||||||
func (fd *Field) IsMap() bool { return fd.Message() != nil && fd.Message().IsMapEntry() }
|
func (fd *Field) IsMap() bool { return fd.Message() != nil && fd.Message().IsMapEntry() }
|
||||||
func (fd *Field) MapKey() protoreflect.FieldDescriptor {
|
func (fd *Field) MapKey() protoreflect.FieldDescriptor {
|
||||||
@ -425,6 +427,7 @@ type (
|
|||||||
Extendee protoreflect.MessageDescriptor
|
Extendee protoreflect.MessageDescriptor
|
||||||
Cardinality protoreflect.Cardinality
|
Cardinality protoreflect.Cardinality
|
||||||
Kind protoreflect.Kind
|
Kind protoreflect.Kind
|
||||||
|
IsLazy bool
|
||||||
EditionFeatures EditionFeatures
|
EditionFeatures EditionFeatures
|
||||||
}
|
}
|
||||||
ExtensionL2 struct {
|
ExtensionL2 struct {
|
||||||
@ -465,6 +468,7 @@ func (xd *Extension) IsPacked() bool {
|
|||||||
}
|
}
|
||||||
func (xd *Extension) IsExtension() bool { return true }
|
func (xd *Extension) IsExtension() bool { return true }
|
||||||
func (xd *Extension) IsWeak() bool { return false }
|
func (xd *Extension) IsWeak() bool { return false }
|
||||||
|
func (xd *Extension) IsLazy() bool { return xd.L1.IsLazy }
|
||||||
func (xd *Extension) IsList() bool { return xd.Cardinality() == protoreflect.Repeated }
|
func (xd *Extension) IsList() bool { return xd.Cardinality() == protoreflect.Repeated }
|
||||||
func (xd *Extension) IsMap() bool { return false }
|
func (xd *Extension) IsMap() bool { return false }
|
||||||
func (xd *Extension) MapKey() protoreflect.FieldDescriptor { return nil }
|
func (xd *Extension) MapKey() protoreflect.FieldDescriptor { return nil }
|
||||||
|
2
vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go
generated
vendored
2
vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go
generated
vendored
@ -495,6 +495,8 @@ func (xd *Extension) unmarshalOptions(b []byte) {
|
|||||||
switch num {
|
switch num {
|
||||||
case genid.FieldOptions_Packed_field_number:
|
case genid.FieldOptions_Packed_field_number:
|
||||||
xd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)
|
xd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)
|
||||||
|
case genid.FieldOptions_Lazy_field_number:
|
||||||
|
xd.L1.IsLazy = protowire.DecodeBool(v)
|
||||||
}
|
}
|
||||||
case protowire.BytesType:
|
case protowire.BytesType:
|
||||||
v, m := protowire.ConsumeBytes(b)
|
v, m := protowire.ConsumeBytes(b)
|
||||||
|
2
vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go
generated
vendored
2
vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go
generated
vendored
@ -504,6 +504,8 @@ func (fd *Field) unmarshalOptions(b []byte) {
|
|||||||
fd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)
|
fd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)
|
||||||
case genid.FieldOptions_Weak_field_number:
|
case genid.FieldOptions_Weak_field_number:
|
||||||
fd.L1.IsWeak = protowire.DecodeBool(v)
|
fd.L1.IsWeak = protowire.DecodeBool(v)
|
||||||
|
case genid.FieldOptions_Lazy_field_number:
|
||||||
|
fd.L1.IsLazy = protowire.DecodeBool(v)
|
||||||
case FieldOptions_EnforceUTF8:
|
case FieldOptions_EnforceUTF8:
|
||||||
fd.L1.EditionFeatures.IsUTF8Validated = protowire.DecodeBool(v)
|
fd.L1.EditionFeatures.IsUTF8Validated = protowire.DecodeBool(v)
|
||||||
}
|
}
|
||||||
|
2
vendor/google.golang.org/protobuf/internal/filedesc/editions.go
generated
vendored
2
vendor/google.golang.org/protobuf/internal/filedesc/editions.go
generated
vendored
@ -68,7 +68,7 @@ func unmarshalFeatureSet(b []byte, parent EditionFeatures) EditionFeatures {
|
|||||||
v, m := protowire.ConsumeBytes(b)
|
v, m := protowire.ConsumeBytes(b)
|
||||||
b = b[m:]
|
b = b[m:]
|
||||||
switch num {
|
switch num {
|
||||||
case genid.GoFeatures_LegacyUnmarshalJsonEnum_field_number:
|
case genid.FeatureSet_Go_ext_number:
|
||||||
parent = unmarshalGoFeature(v, parent)
|
parent = unmarshalGoFeature(v, parent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
vendor/google.golang.org/protobuf/internal/genid/doc.go
generated
vendored
2
vendor/google.golang.org/protobuf/internal/genid/doc.go
generated
vendored
@ -6,6 +6,6 @@
|
|||||||
// and the well-known types.
|
// and the well-known types.
|
||||||
package genid
|
package genid
|
||||||
|
|
||||||
import protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
import "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
|
||||||
const GoogleProtobuf_package protoreflect.FullName = "google.protobuf"
|
const GoogleProtobuf_package protoreflect.FullName = "google.protobuf"
|
||||||
|
15
vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go
generated
vendored
15
vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go
generated
vendored
@ -12,20 +12,25 @@ import (
|
|||||||
|
|
||||||
const File_google_protobuf_go_features_proto = "google/protobuf/go_features.proto"
|
const File_google_protobuf_go_features_proto = "google/protobuf/go_features.proto"
|
||||||
|
|
||||||
// Names for google.protobuf.GoFeatures.
|
// Names for pb.GoFeatures.
|
||||||
const (
|
const (
|
||||||
GoFeatures_message_name protoreflect.Name = "GoFeatures"
|
GoFeatures_message_name protoreflect.Name = "GoFeatures"
|
||||||
GoFeatures_message_fullname protoreflect.FullName = "google.protobuf.GoFeatures"
|
GoFeatures_message_fullname protoreflect.FullName = "pb.GoFeatures"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field names for google.protobuf.GoFeatures.
|
// Field names for pb.GoFeatures.
|
||||||
const (
|
const (
|
||||||
GoFeatures_LegacyUnmarshalJsonEnum_field_name protoreflect.Name = "legacy_unmarshal_json_enum"
|
GoFeatures_LegacyUnmarshalJsonEnum_field_name protoreflect.Name = "legacy_unmarshal_json_enum"
|
||||||
|
|
||||||
GoFeatures_LegacyUnmarshalJsonEnum_field_fullname protoreflect.FullName = "google.protobuf.GoFeatures.legacy_unmarshal_json_enum"
|
GoFeatures_LegacyUnmarshalJsonEnum_field_fullname protoreflect.FullName = "pb.GoFeatures.legacy_unmarshal_json_enum"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field numbers for google.protobuf.GoFeatures.
|
// Field numbers for pb.GoFeatures.
|
||||||
const (
|
const (
|
||||||
GoFeatures_LegacyUnmarshalJsonEnum_field_number protoreflect.FieldNumber = 1
|
GoFeatures_LegacyUnmarshalJsonEnum_field_number protoreflect.FieldNumber = 1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Extension numbers
|
||||||
|
const (
|
||||||
|
FeatureSet_Go_ext_number protoreflect.FieldNumber = 1002
|
||||||
|
)
|
||||||
|
2
vendor/google.golang.org/protobuf/internal/genid/map_entry.go
generated
vendored
2
vendor/google.golang.org/protobuf/internal/genid/map_entry.go
generated
vendored
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
package genid
|
package genid
|
||||||
|
|
||||||
import protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
import "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
|
||||||
// Generic field names and numbers for synthetic map entry messages.
|
// Generic field names and numbers for synthetic map entry messages.
|
||||||
const (
|
const (
|
||||||
|
2
vendor/google.golang.org/protobuf/internal/genid/wrappers.go
generated
vendored
2
vendor/google.golang.org/protobuf/internal/genid/wrappers.go
generated
vendored
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
package genid
|
package genid
|
||||||
|
|
||||||
import protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
import "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
|
||||||
// Generic field name and number for messages in wrappers.proto.
|
// Generic field name and number for messages in wrappers.proto.
|
||||||
const (
|
const (
|
||||||
|
11
vendor/google.golang.org/protobuf/internal/impl/codec_extension.go
generated
vendored
11
vendor/google.golang.org/protobuf/internal/impl/codec_extension.go
generated
vendored
@ -67,7 +67,6 @@ type lazyExtensionValue struct {
|
|||||||
xi *extensionFieldInfo
|
xi *extensionFieldInfo
|
||||||
value protoreflect.Value
|
value protoreflect.Value
|
||||||
b []byte
|
b []byte
|
||||||
fn func() protoreflect.Value
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type ExtensionField struct {
|
type ExtensionField struct {
|
||||||
@ -158,10 +157,9 @@ func (f *ExtensionField) lazyInit() {
|
|||||||
}
|
}
|
||||||
f.lazy.value = val
|
f.lazy.value = val
|
||||||
} else {
|
} else {
|
||||||
f.lazy.value = f.lazy.fn()
|
panic("No support for lazy fns for ExtensionField")
|
||||||
}
|
}
|
||||||
f.lazy.xi = nil
|
f.lazy.xi = nil
|
||||||
f.lazy.fn = nil
|
|
||||||
f.lazy.b = nil
|
f.lazy.b = nil
|
||||||
atomic.StoreUint32(&f.lazy.atomicOnce, 1)
|
atomic.StoreUint32(&f.lazy.atomicOnce, 1)
|
||||||
}
|
}
|
||||||
@ -174,13 +172,6 @@ func (f *ExtensionField) Set(t protoreflect.ExtensionType, v protoreflect.Value)
|
|||||||
f.lazy = nil
|
f.lazy = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetLazy sets the type and a value that is to be lazily evaluated upon first use.
|
|
||||||
// This must not be called concurrently.
|
|
||||||
func (f *ExtensionField) SetLazy(t protoreflect.ExtensionType, fn func() protoreflect.Value) {
|
|
||||||
f.typ = t
|
|
||||||
f.lazy = &lazyExtensionValue{fn: fn}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Value returns the value of the extension field.
|
// Value returns the value of the extension field.
|
||||||
// This may be called concurrently.
|
// This may be called concurrently.
|
||||||
func (f *ExtensionField) Value() protoreflect.Value {
|
func (f *ExtensionField) Value() protoreflect.Value {
|
||||||
|
3
vendor/google.golang.org/protobuf/internal/impl/codec_field.go
generated
vendored
3
vendor/google.golang.org/protobuf/internal/impl/codec_field.go
generated
vendored
@ -65,6 +65,9 @@ func (mi *MessageInfo) initOneofFieldCoders(od protoreflect.OneofDescriptor, si
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return out, err
|
return out, err
|
||||||
}
|
}
|
||||||
|
if cf.funcs.isInit == nil {
|
||||||
|
out.initialized = true
|
||||||
|
}
|
||||||
vi.Set(vw)
|
vi.Set(vw)
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
3
vendor/google.golang.org/protobuf/internal/impl/codec_message.go
generated
vendored
3
vendor/google.golang.org/protobuf/internal/impl/codec_message.go
generated
vendored
@ -189,6 +189,9 @@ func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) {
|
|||||||
if mi.methods.Merge == nil {
|
if mi.methods.Merge == nil {
|
||||||
mi.methods.Merge = mi.merge
|
mi.methods.Merge = mi.merge
|
||||||
}
|
}
|
||||||
|
if mi.methods.Equal == nil {
|
||||||
|
mi.methods.Equal = equal
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// getUnknownBytes returns a *[]byte for the unknown fields.
|
// getUnknownBytes returns a *[]byte for the unknown fields.
|
||||||
|
210
vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go
generated
vendored
210
vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go
generated
vendored
@ -1,210 +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 purego || appengine
|
|
||||||
// +build purego appengine
|
|
||||||
|
|
||||||
package impl
|
|
||||||
|
|
||||||
import (
|
|
||||||
"reflect"
|
|
||||||
|
|
||||||
"google.golang.org/protobuf/encoding/protowire"
|
|
||||||
)
|
|
||||||
|
|
||||||
func sizeEnum(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
|
|
||||||
v := p.v.Elem().Int()
|
|
||||||
return f.tagsize + protowire.SizeVarint(uint64(v))
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendEnum(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
|
|
||||||
v := p.v.Elem().Int()
|
|
||||||
b = protowire.AppendVarint(b, f.wiretag)
|
|
||||||
b = protowire.AppendVarint(b, uint64(v))
|
|
||||||
return b, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func consumeEnum(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
|
|
||||||
if wtyp != protowire.VarintType {
|
|
||||||
return out, errUnknown
|
|
||||||
}
|
|
||||||
v, n := protowire.ConsumeVarint(b)
|
|
||||||
if n < 0 {
|
|
||||||
return out, errDecode
|
|
||||||
}
|
|
||||||
p.v.Elem().SetInt(int64(v))
|
|
||||||
out.n = n
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func mergeEnum(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
|
|
||||||
dst.v.Elem().Set(src.v.Elem())
|
|
||||||
}
|
|
||||||
|
|
||||||
var coderEnum = pointerCoderFuncs{
|
|
||||||
size: sizeEnum,
|
|
||||||
marshal: appendEnum,
|
|
||||||
unmarshal: consumeEnum,
|
|
||||||
merge: mergeEnum,
|
|
||||||
}
|
|
||||||
|
|
||||||
func sizeEnumNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
|
|
||||||
if p.v.Elem().Int() == 0 {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
return sizeEnum(p, f, opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendEnumNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
|
|
||||||
if p.v.Elem().Int() == 0 {
|
|
||||||
return b, nil
|
|
||||||
}
|
|
||||||
return appendEnum(b, p, f, opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
func mergeEnumNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
|
|
||||||
if src.v.Elem().Int() != 0 {
|
|
||||||
dst.v.Elem().Set(src.v.Elem())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var coderEnumNoZero = pointerCoderFuncs{
|
|
||||||
size: sizeEnumNoZero,
|
|
||||||
marshal: appendEnumNoZero,
|
|
||||||
unmarshal: consumeEnum,
|
|
||||||
merge: mergeEnumNoZero,
|
|
||||||
}
|
|
||||||
|
|
||||||
func sizeEnumPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
|
|
||||||
return sizeEnum(pointer{p.v.Elem()}, f, opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendEnumPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
|
|
||||||
return appendEnum(b, pointer{p.v.Elem()}, f, opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
func consumeEnumPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
|
||||||
if wtyp != protowire.VarintType {
|
|
||||||
return out, errUnknown
|
|
||||||
}
|
|
||||||
if p.v.Elem().IsNil() {
|
|
||||||
p.v.Elem().Set(reflect.New(p.v.Elem().Type().Elem()))
|
|
||||||
}
|
|
||||||
return consumeEnum(b, pointer{p.v.Elem()}, wtyp, f, opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
func mergeEnumPtr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
|
|
||||||
if !src.v.Elem().IsNil() {
|
|
||||||
v := reflect.New(dst.v.Type().Elem().Elem())
|
|
||||||
v.Elem().Set(src.v.Elem().Elem())
|
|
||||||
dst.v.Elem().Set(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var coderEnumPtr = pointerCoderFuncs{
|
|
||||||
size: sizeEnumPtr,
|
|
||||||
marshal: appendEnumPtr,
|
|
||||||
unmarshal: consumeEnumPtr,
|
|
||||||
merge: mergeEnumPtr,
|
|
||||||
}
|
|
||||||
|
|
||||||
func sizeEnumSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
|
|
||||||
s := p.v.Elem()
|
|
||||||
for i, llen := 0, s.Len(); i < llen; i++ {
|
|
||||||
size += protowire.SizeVarint(uint64(s.Index(i).Int())) + f.tagsize
|
|
||||||
}
|
|
||||||
return size
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendEnumSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
|
|
||||||
s := p.v.Elem()
|
|
||||||
for i, llen := 0, s.Len(); i < llen; i++ {
|
|
||||||
b = protowire.AppendVarint(b, f.wiretag)
|
|
||||||
b = protowire.AppendVarint(b, uint64(s.Index(i).Int()))
|
|
||||||
}
|
|
||||||
return b, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func consumeEnumSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
|
||||||
s := p.v.Elem()
|
|
||||||
if wtyp == protowire.BytesType {
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
|
||||||
if n < 0 {
|
|
||||||
return out, errDecode
|
|
||||||
}
|
|
||||||
for len(b) > 0 {
|
|
||||||
v, n := protowire.ConsumeVarint(b)
|
|
||||||
if n < 0 {
|
|
||||||
return out, errDecode
|
|
||||||
}
|
|
||||||
rv := reflect.New(s.Type().Elem()).Elem()
|
|
||||||
rv.SetInt(int64(v))
|
|
||||||
s.Set(reflect.Append(s, rv))
|
|
||||||
b = b[n:]
|
|
||||||
}
|
|
||||||
out.n = n
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
if wtyp != protowire.VarintType {
|
|
||||||
return out, errUnknown
|
|
||||||
}
|
|
||||||
v, n := protowire.ConsumeVarint(b)
|
|
||||||
if n < 0 {
|
|
||||||
return out, errDecode
|
|
||||||
}
|
|
||||||
rv := reflect.New(s.Type().Elem()).Elem()
|
|
||||||
rv.SetInt(int64(v))
|
|
||||||
s.Set(reflect.Append(s, rv))
|
|
||||||
out.n = n
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func mergeEnumSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
|
|
||||||
dst.v.Elem().Set(reflect.AppendSlice(dst.v.Elem(), src.v.Elem()))
|
|
||||||
}
|
|
||||||
|
|
||||||
var coderEnumSlice = pointerCoderFuncs{
|
|
||||||
size: sizeEnumSlice,
|
|
||||||
marshal: appendEnumSlice,
|
|
||||||
unmarshal: consumeEnumSlice,
|
|
||||||
merge: mergeEnumSlice,
|
|
||||||
}
|
|
||||||
|
|
||||||
func sizeEnumPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
|
|
||||||
s := p.v.Elem()
|
|
||||||
llen := s.Len()
|
|
||||||
if llen == 0 {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
n := 0
|
|
||||||
for i := 0; i < llen; i++ {
|
|
||||||
n += protowire.SizeVarint(uint64(s.Index(i).Int()))
|
|
||||||
}
|
|
||||||
return f.tagsize + protowire.SizeBytes(n)
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendEnumPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
|
|
||||||
s := p.v.Elem()
|
|
||||||
llen := s.Len()
|
|
||||||
if llen == 0 {
|
|
||||||
return b, nil
|
|
||||||
}
|
|
||||||
b = protowire.AppendVarint(b, f.wiretag)
|
|
||||||
n := 0
|
|
||||||
for i := 0; i < llen; i++ {
|
|
||||||
n += protowire.SizeVarint(uint64(s.Index(i).Int()))
|
|
||||||
}
|
|
||||||
b = protowire.AppendVarint(b, uint64(n))
|
|
||||||
for i := 0; i < llen; i++ {
|
|
||||||
b = protowire.AppendVarint(b, uint64(s.Index(i).Int()))
|
|
||||||
}
|
|
||||||
return b, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var coderEnumPackedSlice = pointerCoderFuncs{
|
|
||||||
size: sizeEnumPackedSlice,
|
|
||||||
marshal: appendEnumPackedSlice,
|
|
||||||
unmarshal: consumeEnumSlice,
|
|
||||||
merge: mergeEnumSlice,
|
|
||||||
}
|
|
3
vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go
generated
vendored
3
vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go
generated
vendored
@ -2,9 +2,6 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine
|
|
||||||
// +build !purego,!appengine
|
|
||||||
|
|
||||||
package impl
|
package impl
|
||||||
|
|
||||||
// When using unsafe pointers, we can just treat enum values as int32s.
|
// When using unsafe pointers, we can just treat enum values as int32s.
|
||||||
|
2
vendor/google.golang.org/protobuf/internal/impl/convert.go
generated
vendored
2
vendor/google.golang.org/protobuf/internal/impl/convert.go
generated
vendored
@ -322,7 +322,7 @@ func (c *stringConverter) PBValueOf(v reflect.Value) protoreflect.Value {
|
|||||||
return protoreflect.ValueOfString(v.Convert(stringType).String())
|
return protoreflect.ValueOfString(v.Convert(stringType).String())
|
||||||
}
|
}
|
||||||
func (c *stringConverter) GoValueOf(v protoreflect.Value) reflect.Value {
|
func (c *stringConverter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
// pref.Value.String never panics, so we go through an interface
|
// protoreflect.Value.String never panics, so we go through an interface
|
||||||
// conversion here to check the type.
|
// conversion here to check the type.
|
||||||
s := v.Interface().(string)
|
s := v.Interface().(string)
|
||||||
if c.goType.Kind() == reflect.Slice && s == "" {
|
if c.goType.Kind() == reflect.Slice && s == "" {
|
||||||
|
2
vendor/google.golang.org/protobuf/internal/impl/encode.go
generated
vendored
2
vendor/google.golang.org/protobuf/internal/impl/encode.go
generated
vendored
@ -10,7 +10,7 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
"google.golang.org/protobuf/internal/flags"
|
"google.golang.org/protobuf/internal/flags"
|
||||||
proto "google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
piface "google.golang.org/protobuf/runtime/protoiface"
|
piface "google.golang.org/protobuf/runtime/protoiface"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
224
vendor/google.golang.org/protobuf/internal/impl/equal.go
generated
vendored
Normal file
224
vendor/google.golang.org/protobuf/internal/impl/equal.go
generated
vendored
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
// Copyright 2024 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.
|
||||||
|
|
||||||
|
package impl
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
|
||||||
|
"google.golang.org/protobuf/encoding/protowire"
|
||||||
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
|
)
|
||||||
|
|
||||||
|
func equal(in protoiface.EqualInput) protoiface.EqualOutput {
|
||||||
|
return protoiface.EqualOutput{Equal: equalMessage(in.MessageA, in.MessageB)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// equalMessage is a fast-path variant of protoreflect.equalMessage.
|
||||||
|
// It takes advantage of the internal messageState type to avoid
|
||||||
|
// unnecessary allocations, type assertions.
|
||||||
|
func equalMessage(mx, my protoreflect.Message) bool {
|
||||||
|
if mx == nil || my == nil {
|
||||||
|
return mx == my
|
||||||
|
}
|
||||||
|
if mx.Descriptor() != my.Descriptor() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
msx, ok := mx.(*messageState)
|
||||||
|
if !ok {
|
||||||
|
return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))
|
||||||
|
}
|
||||||
|
msy, ok := my.(*messageState)
|
||||||
|
if !ok {
|
||||||
|
return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))
|
||||||
|
}
|
||||||
|
|
||||||
|
mi := msx.messageInfo()
|
||||||
|
miy := msy.messageInfo()
|
||||||
|
if mi != miy {
|
||||||
|
return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))
|
||||||
|
}
|
||||||
|
mi.init()
|
||||||
|
// Compares regular fields
|
||||||
|
// Modified Message.Range code that compares two messages of the same type
|
||||||
|
// while going over the fields.
|
||||||
|
for _, ri := range mi.rangeInfos {
|
||||||
|
var fd protoreflect.FieldDescriptor
|
||||||
|
var vx, vy protoreflect.Value
|
||||||
|
|
||||||
|
switch ri := ri.(type) {
|
||||||
|
case *fieldInfo:
|
||||||
|
hx := ri.has(msx.pointer())
|
||||||
|
hy := ri.has(msy.pointer())
|
||||||
|
if hx != hy {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if !hx {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fd = ri.fieldDesc
|
||||||
|
vx = ri.get(msx.pointer())
|
||||||
|
vy = ri.get(msy.pointer())
|
||||||
|
case *oneofInfo:
|
||||||
|
fnx := ri.which(msx.pointer())
|
||||||
|
fny := ri.which(msy.pointer())
|
||||||
|
if fnx != fny {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if fnx <= 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fi := mi.fields[fnx]
|
||||||
|
fd = fi.fieldDesc
|
||||||
|
vx = fi.get(msx.pointer())
|
||||||
|
vy = fi.get(msy.pointer())
|
||||||
|
}
|
||||||
|
|
||||||
|
if !equalValue(fd, vx, vy) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compare extensions.
|
||||||
|
// This is more complicated because mx or my could have empty/nil extension maps,
|
||||||
|
// however some populated extension map values are equal to nil extension maps.
|
||||||
|
emx := mi.extensionMap(msx.pointer())
|
||||||
|
emy := mi.extensionMap(msy.pointer())
|
||||||
|
if emx != nil {
|
||||||
|
for k, x := range *emx {
|
||||||
|
xd := x.Type().TypeDescriptor()
|
||||||
|
xv := x.Value()
|
||||||
|
var y ExtensionField
|
||||||
|
ok := false
|
||||||
|
if emy != nil {
|
||||||
|
y, ok = (*emy)[k]
|
||||||
|
}
|
||||||
|
// We need to treat empty lists as equal to nil values
|
||||||
|
if emy == nil || !ok {
|
||||||
|
if xd.IsList() && xv.List().Len() == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if !equalValue(xd, xv, y.Value()) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if emy != nil {
|
||||||
|
// emy may have extensions emx does not have, need to check them as well
|
||||||
|
for k, y := range *emy {
|
||||||
|
if emx != nil {
|
||||||
|
// emx has the field, so we already checked it
|
||||||
|
if _, ok := (*emx)[k]; ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Empty lists are equal to nil
|
||||||
|
if y.Type().TypeDescriptor().IsList() && y.Value().List().Len() == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cant be equal if the extension is populated
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return equalUnknown(mx.GetUnknown(), my.GetUnknown())
|
||||||
|
}
|
||||||
|
|
||||||
|
func equalValue(fd protoreflect.FieldDescriptor, vx, vy protoreflect.Value) bool {
|
||||||
|
// slow path
|
||||||
|
if fd.Kind() != protoreflect.MessageKind {
|
||||||
|
return vx.Equal(vy)
|
||||||
|
}
|
||||||
|
|
||||||
|
// fast path special cases
|
||||||
|
if fd.IsMap() {
|
||||||
|
if fd.MapValue().Kind() == protoreflect.MessageKind {
|
||||||
|
return equalMessageMap(vx.Map(), vy.Map())
|
||||||
|
}
|
||||||
|
return vx.Equal(vy)
|
||||||
|
}
|
||||||
|
|
||||||
|
if fd.IsList() {
|
||||||
|
return equalMessageList(vx.List(), vy.List())
|
||||||
|
}
|
||||||
|
|
||||||
|
return equalMessage(vx.Message(), vy.Message())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mostly copied from protoreflect.equalMap.
|
||||||
|
// This variant only works for messages as map types.
|
||||||
|
// All other map types should be handled via Value.Equal.
|
||||||
|
func equalMessageMap(mx, my protoreflect.Map) bool {
|
||||||
|
if mx.Len() != my.Len() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
equal := true
|
||||||
|
mx.Range(func(k protoreflect.MapKey, vx protoreflect.Value) bool {
|
||||||
|
if !my.Has(k) {
|
||||||
|
equal = false
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
vy := my.Get(k)
|
||||||
|
equal = equalMessage(vx.Message(), vy.Message())
|
||||||
|
return equal
|
||||||
|
})
|
||||||
|
return equal
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mostly copied from protoreflect.equalList.
|
||||||
|
// The only change is the usage of equalImpl instead of protoreflect.equalValue.
|
||||||
|
func equalMessageList(lx, ly protoreflect.List) bool {
|
||||||
|
if lx.Len() != ly.Len() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for i := 0; i < lx.Len(); i++ {
|
||||||
|
// We only operate on messages here since equalImpl will not call us in any other case.
|
||||||
|
if !equalMessage(lx.Get(i).Message(), ly.Get(i).Message()) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// equalUnknown compares unknown fields by direct comparison on the raw bytes
|
||||||
|
// of each individual field number.
|
||||||
|
// Copied from protoreflect.equalUnknown.
|
||||||
|
func equalUnknown(x, y protoreflect.RawFields) bool {
|
||||||
|
if len(x) != len(y) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if bytes.Equal([]byte(x), []byte(y)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
mx := make(map[protoreflect.FieldNumber]protoreflect.RawFields)
|
||||||
|
my := make(map[protoreflect.FieldNumber]protoreflect.RawFields)
|
||||||
|
for len(x) > 0 {
|
||||||
|
fnum, _, n := protowire.ConsumeField(x)
|
||||||
|
mx[fnum] = append(mx[fnum], x[:n]...)
|
||||||
|
x = x[n:]
|
||||||
|
}
|
||||||
|
for len(y) > 0 {
|
||||||
|
fnum, _, n := protowire.ConsumeField(y)
|
||||||
|
my[fnum] = append(my[fnum], y[:n]...)
|
||||||
|
y = y[n:]
|
||||||
|
}
|
||||||
|
if len(mx) != len(my) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v1 := range mx {
|
||||||
|
if v2, ok := my[k]; !ok || !bytes.Equal([]byte(v1), []byte(v2)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
1
vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go
generated
vendored
1
vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go
generated
vendored
@ -160,6 +160,7 @@ func (x placeholderExtension) HasPresence() bool
|
|||||||
func (x placeholderExtension) HasOptionalKeyword() bool { return false }
|
func (x placeholderExtension) HasOptionalKeyword() bool { return false }
|
||||||
func (x placeholderExtension) IsExtension() bool { return true }
|
func (x placeholderExtension) IsExtension() bool { return true }
|
||||||
func (x placeholderExtension) IsWeak() bool { return false }
|
func (x placeholderExtension) IsWeak() bool { return false }
|
||||||
|
func (x placeholderExtension) IsLazy() bool { return false }
|
||||||
func (x placeholderExtension) IsPacked() bool { return false }
|
func (x placeholderExtension) IsPacked() bool { return false }
|
||||||
func (x placeholderExtension) IsList() bool { return false }
|
func (x placeholderExtension) IsList() bool { return false }
|
||||||
func (x placeholderExtension) IsMap() bool { return false }
|
func (x placeholderExtension) IsMap() bool { return false }
|
||||||
|
4
vendor/google.golang.org/protobuf/internal/impl/message.go
generated
vendored
4
vendor/google.golang.org/protobuf/internal/impl/message.go
generated
vendored
@ -30,8 +30,8 @@ type MessageInfo struct {
|
|||||||
// Desc is the underlying message descriptor type and must be populated.
|
// Desc is the underlying message descriptor type and must be populated.
|
||||||
Desc protoreflect.MessageDescriptor
|
Desc protoreflect.MessageDescriptor
|
||||||
|
|
||||||
// Exporter must be provided in a purego environment in order to provide
|
// Deprecated: Exporter will be removed the next time we bump
|
||||||
// access to unexported fields.
|
// protoimpl.GenVersion. See https://github.com/golang/protobuf/issues/1640
|
||||||
Exporter exporter
|
Exporter exporter
|
||||||
|
|
||||||
// OneofWrappers is list of pointers to oneof wrapper struct types.
|
// OneofWrappers is list of pointers to oneof wrapper struct types.
|
||||||
|
215
vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go
generated
vendored
215
vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go
generated
vendored
@ -1,215 +0,0 @@
|
|||||||
// Copyright 2018 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 purego || appengine
|
|
||||||
// +build purego appengine
|
|
||||||
|
|
||||||
package impl
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"reflect"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
const UnsafeEnabled = false
|
|
||||||
|
|
||||||
// Pointer is an opaque pointer type.
|
|
||||||
type Pointer any
|
|
||||||
|
|
||||||
// offset represents the offset to a struct field, accessible from a pointer.
|
|
||||||
// The offset is the field index into a struct.
|
|
||||||
type offset struct {
|
|
||||||
index int
|
|
||||||
export exporter
|
|
||||||
}
|
|
||||||
|
|
||||||
// offsetOf returns a field offset for the struct field.
|
|
||||||
func offsetOf(f reflect.StructField, x exporter) offset {
|
|
||||||
if len(f.Index) != 1 {
|
|
||||||
panic("embedded structs are not supported")
|
|
||||||
}
|
|
||||||
if f.PkgPath == "" {
|
|
||||||
return offset{index: f.Index[0]} // field is already exported
|
|
||||||
}
|
|
||||||
if x == nil {
|
|
||||||
panic("exporter must be provided for unexported field")
|
|
||||||
}
|
|
||||||
return offset{index: f.Index[0], export: x}
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsValid reports whether the offset is valid.
|
|
||||||
func (f offset) IsValid() bool { return f.index >= 0 }
|
|
||||||
|
|
||||||
// invalidOffset is an invalid field offset.
|
|
||||||
var invalidOffset = offset{index: -1}
|
|
||||||
|
|
||||||
// zeroOffset is a noop when calling pointer.Apply.
|
|
||||||
var zeroOffset = offset{index: 0}
|
|
||||||
|
|
||||||
// pointer is an abstract representation of a pointer to a struct or field.
|
|
||||||
type pointer struct{ v reflect.Value }
|
|
||||||
|
|
||||||
// pointerOf returns p as a pointer.
|
|
||||||
func pointerOf(p Pointer) pointer {
|
|
||||||
return pointerOfIface(p)
|
|
||||||
}
|
|
||||||
|
|
||||||
// pointerOfValue returns v as a pointer.
|
|
||||||
func pointerOfValue(v reflect.Value) pointer {
|
|
||||||
return pointer{v: v}
|
|
||||||
}
|
|
||||||
|
|
||||||
// pointerOfIface returns the pointer portion of an interface.
|
|
||||||
func pointerOfIface(v any) pointer {
|
|
||||||
return pointer{v: reflect.ValueOf(v)}
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsNil reports whether the pointer is nil.
|
|
||||||
func (p pointer) IsNil() bool {
|
|
||||||
return p.v.IsNil()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Apply adds an offset to the pointer to derive a new pointer
|
|
||||||
// to a specified field. The current pointer must be pointing at a struct.
|
|
||||||
func (p pointer) Apply(f offset) pointer {
|
|
||||||
if f.export != nil {
|
|
||||||
if v := reflect.ValueOf(f.export(p.v.Interface(), f.index)); v.IsValid() {
|
|
||||||
return pointer{v: v}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return pointer{v: p.v.Elem().Field(f.index).Addr()}
|
|
||||||
}
|
|
||||||
|
|
||||||
// AsValueOf treats p as a pointer to an object of type t and returns the value.
|
|
||||||
// It is equivalent to reflect.ValueOf(p.AsIfaceOf(t))
|
|
||||||
func (p pointer) AsValueOf(t reflect.Type) reflect.Value {
|
|
||||||
if got := p.v.Type().Elem(); got != t {
|
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", got, t))
|
|
||||||
}
|
|
||||||
return p.v
|
|
||||||
}
|
|
||||||
|
|
||||||
// AsIfaceOf treats p as a pointer to an object of type t and returns the value.
|
|
||||||
// It is equivalent to p.AsValueOf(t).Interface()
|
|
||||||
func (p pointer) AsIfaceOf(t reflect.Type) any {
|
|
||||||
return p.AsValueOf(t).Interface()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) Bool() *bool { return p.v.Interface().(*bool) }
|
|
||||||
func (p pointer) BoolPtr() **bool { return p.v.Interface().(**bool) }
|
|
||||||
func (p pointer) BoolSlice() *[]bool { return p.v.Interface().(*[]bool) }
|
|
||||||
func (p pointer) Int32() *int32 { return p.v.Interface().(*int32) }
|
|
||||||
func (p pointer) Int32Ptr() **int32 { return p.v.Interface().(**int32) }
|
|
||||||
func (p pointer) Int32Slice() *[]int32 { return p.v.Interface().(*[]int32) }
|
|
||||||
func (p pointer) Int64() *int64 { return p.v.Interface().(*int64) }
|
|
||||||
func (p pointer) Int64Ptr() **int64 { return p.v.Interface().(**int64) }
|
|
||||||
func (p pointer) Int64Slice() *[]int64 { return p.v.Interface().(*[]int64) }
|
|
||||||
func (p pointer) Uint32() *uint32 { return p.v.Interface().(*uint32) }
|
|
||||||
func (p pointer) Uint32Ptr() **uint32 { return p.v.Interface().(**uint32) }
|
|
||||||
func (p pointer) Uint32Slice() *[]uint32 { return p.v.Interface().(*[]uint32) }
|
|
||||||
func (p pointer) Uint64() *uint64 { return p.v.Interface().(*uint64) }
|
|
||||||
func (p pointer) Uint64Ptr() **uint64 { return p.v.Interface().(**uint64) }
|
|
||||||
func (p pointer) Uint64Slice() *[]uint64 { return p.v.Interface().(*[]uint64) }
|
|
||||||
func (p pointer) Float32() *float32 { return p.v.Interface().(*float32) }
|
|
||||||
func (p pointer) Float32Ptr() **float32 { return p.v.Interface().(**float32) }
|
|
||||||
func (p pointer) Float32Slice() *[]float32 { return p.v.Interface().(*[]float32) }
|
|
||||||
func (p pointer) Float64() *float64 { return p.v.Interface().(*float64) }
|
|
||||||
func (p pointer) Float64Ptr() **float64 { return p.v.Interface().(**float64) }
|
|
||||||
func (p pointer) Float64Slice() *[]float64 { return p.v.Interface().(*[]float64) }
|
|
||||||
func (p pointer) String() *string { return p.v.Interface().(*string) }
|
|
||||||
func (p pointer) StringPtr() **string { return p.v.Interface().(**string) }
|
|
||||||
func (p pointer) StringSlice() *[]string { return p.v.Interface().(*[]string) }
|
|
||||||
func (p pointer) Bytes() *[]byte { return p.v.Interface().(*[]byte) }
|
|
||||||
func (p pointer) BytesPtr() **[]byte { return p.v.Interface().(**[]byte) }
|
|
||||||
func (p pointer) BytesSlice() *[][]byte { return p.v.Interface().(*[][]byte) }
|
|
||||||
func (p pointer) WeakFields() *weakFields { return (*weakFields)(p.v.Interface().(*WeakFields)) }
|
|
||||||
func (p pointer) Extensions() *map[int32]ExtensionField {
|
|
||||||
return p.v.Interface().(*map[int32]ExtensionField)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) Elem() pointer {
|
|
||||||
return pointer{v: p.v.Elem()}
|
|
||||||
}
|
|
||||||
|
|
||||||
// PointerSlice copies []*T from p as a new []pointer.
|
|
||||||
// This behavior differs from the implementation in pointer_unsafe.go.
|
|
||||||
func (p pointer) PointerSlice() []pointer {
|
|
||||||
// TODO: reconsider this
|
|
||||||
if p.v.IsNil() {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
n := p.v.Elem().Len()
|
|
||||||
s := make([]pointer, n)
|
|
||||||
for i := 0; i < n; i++ {
|
|
||||||
s[i] = pointer{v: p.v.Elem().Index(i)}
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
// AppendPointerSlice appends v to p, which must be a []*T.
|
|
||||||
func (p pointer) AppendPointerSlice(v pointer) {
|
|
||||||
sp := p.v.Elem()
|
|
||||||
sp.Set(reflect.Append(sp, v.v))
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetPointer sets *p to v.
|
|
||||||
func (p pointer) SetPointer(v pointer) {
|
|
||||||
p.v.Elem().Set(v.v)
|
|
||||||
}
|
|
||||||
|
|
||||||
func growSlice(p pointer, addCap int) {
|
|
||||||
// TODO: Once we only support Go 1.20 and newer, use reflect.Grow.
|
|
||||||
in := p.v.Elem()
|
|
||||||
out := reflect.MakeSlice(in.Type(), in.Len(), in.Len()+addCap)
|
|
||||||
reflect.Copy(out, in)
|
|
||||||
p.v.Elem().Set(out)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growBoolSlice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growInt32Slice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growUint32Slice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growInt64Slice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growUint64Slice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growFloat64Slice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growFloat32Slice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (Export) MessageStateOf(p Pointer) *messageState { panic("not supported") }
|
|
||||||
func (ms *messageState) pointer() pointer { panic("not supported") }
|
|
||||||
func (ms *messageState) messageInfo() *MessageInfo { panic("not supported") }
|
|
||||||
func (ms *messageState) LoadMessageInfo() *MessageInfo { panic("not supported") }
|
|
||||||
func (ms *messageState) StoreMessageInfo(mi *MessageInfo) { panic("not supported") }
|
|
||||||
|
|
||||||
type atomicNilMessage struct {
|
|
||||||
once sync.Once
|
|
||||||
m messageReflectWrapper
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *atomicNilMessage) Init(mi *MessageInfo) *messageReflectWrapper {
|
|
||||||
m.once.Do(func() {
|
|
||||||
m.m.p = pointerOfIface(reflect.Zero(mi.GoReflectType).Interface())
|
|
||||||
m.m.mi = mi
|
|
||||||
})
|
|
||||||
return &m.m
|
|
||||||
}
|
|
3
vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go
generated
vendored
3
vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go
generated
vendored
@ -2,9 +2,6 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine
|
|
||||||
// +build !purego,!appengine
|
|
||||||
|
|
||||||
package impl
|
package impl
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
28
vendor/google.golang.org/protobuf/internal/strs/strings_pure.go
generated
vendored
28
vendor/google.golang.org/protobuf/internal/strs/strings_pure.go
generated
vendored
@ -1,28 +0,0 @@
|
|||||||
// Copyright 2018 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 purego || appengine
|
|
||||||
// +build purego appengine
|
|
||||||
|
|
||||||
package strs
|
|
||||||
|
|
||||||
import pref "google.golang.org/protobuf/reflect/protoreflect"
|
|
||||||
|
|
||||||
func UnsafeString(b []byte) string {
|
|
||||||
return string(b)
|
|
||||||
}
|
|
||||||
|
|
||||||
func UnsafeBytes(s string) []byte {
|
|
||||||
return []byte(s)
|
|
||||||
}
|
|
||||||
|
|
||||||
type Builder struct{}
|
|
||||||
|
|
||||||
func (*Builder) AppendFullName(prefix pref.FullName, name pref.Name) pref.FullName {
|
|
||||||
return prefix.Append(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*Builder) MakeString(b []byte) string {
|
|
||||||
return string(b)
|
|
||||||
}
|
|
3
vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go
generated
vendored
3
vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go
generated
vendored
@ -2,8 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine && !go1.21
|
//go:build !go1.21
|
||||||
// +build !purego,!appengine,!go1.21
|
|
||||||
|
|
||||||
package strs
|
package strs
|
||||||
|
|
||||||
|
3
vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go
generated
vendored
3
vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go
generated
vendored
@ -2,8 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine && go1.21
|
//go:build go1.21
|
||||||
// +build !purego,!appengine,go1.21
|
|
||||||
|
|
||||||
package strs
|
package strs
|
||||||
|
|
||||||
|
4
vendor/google.golang.org/protobuf/internal/version/version.go
generated
vendored
4
vendor/google.golang.org/protobuf/internal/version/version.go
generated
vendored
@ -51,8 +51,8 @@ import (
|
|||||||
// 10. Send out the CL for review and submit it.
|
// 10. Send out the CL for review and submit it.
|
||||||
const (
|
const (
|
||||||
Major = 1
|
Major = 1
|
||||||
Minor = 34
|
Minor = 35
|
||||||
Patch = 2
|
Patch = 1
|
||||||
PreRelease = ""
|
PreRelease = ""
|
||||||
)
|
)
|
||||||
|
|
||||||
|
9
vendor/google.golang.org/protobuf/proto/equal.go
generated
vendored
9
vendor/google.golang.org/protobuf/proto/equal.go
generated
vendored
@ -8,6 +8,7 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Equal reports whether two messages are equal,
|
// Equal reports whether two messages are equal,
|
||||||
@ -51,6 +52,14 @@ func Equal(x, y Message) bool {
|
|||||||
if mx.IsValid() != my.IsValid() {
|
if mx.IsValid() != my.IsValid() {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only one of the messages needs to implement the fast-path for it to work.
|
||||||
|
pmx := protoMethods(mx)
|
||||||
|
pmy := protoMethods(my)
|
||||||
|
if pmx != nil && pmy != nil && pmx.Equal != nil && pmy.Equal != nil {
|
||||||
|
return pmx.Equal(protoiface.EqualInput{MessageA: mx, MessageB: my}).Equal
|
||||||
|
}
|
||||||
|
|
||||||
vx := protoreflect.ValueOfMessage(mx)
|
vx := protoreflect.ValueOfMessage(mx)
|
||||||
vy := protoreflect.ValueOfMessage(my)
|
vy := protoreflect.ValueOfMessage(my)
|
||||||
return vx.Equal(vy)
|
return vx.Equal(vy)
|
||||||
|
71
vendor/google.golang.org/protobuf/proto/extension.go
generated
vendored
71
vendor/google.golang.org/protobuf/proto/extension.go
generated
vendored
@ -39,6 +39,48 @@ func ClearExtension(m Message, xt protoreflect.ExtensionType) {
|
|||||||
// If the field is unpopulated, it returns the default value for
|
// If the field is unpopulated, it returns the default value for
|
||||||
// scalars and an immutable, empty value for lists or messages.
|
// scalars and an immutable, empty value for lists or messages.
|
||||||
// It panics if xt does not extend m.
|
// It panics if xt does not extend m.
|
||||||
|
//
|
||||||
|
// The type of the value is dependent on the field type of the extension.
|
||||||
|
// For extensions generated by protoc-gen-go, the Go type is as follows:
|
||||||
|
//
|
||||||
|
// ╔═══════════════════╤═════════════════════════╗
|
||||||
|
// ║ Go type │ Protobuf kind ║
|
||||||
|
// ╠═══════════════════╪═════════════════════════╣
|
||||||
|
// ║ bool │ bool ║
|
||||||
|
// ║ int32 │ int32, sint32, sfixed32 ║
|
||||||
|
// ║ int64 │ int64, sint64, sfixed64 ║
|
||||||
|
// ║ uint32 │ uint32, fixed32 ║
|
||||||
|
// ║ uint64 │ uint64, fixed64 ║
|
||||||
|
// ║ float32 │ float ║
|
||||||
|
// ║ float64 │ double ║
|
||||||
|
// ║ string │ string ║
|
||||||
|
// ║ []byte │ bytes ║
|
||||||
|
// ║ protoreflect.Enum │ enum ║
|
||||||
|
// ║ proto.Message │ message, group ║
|
||||||
|
// ╚═══════════════════╧═════════════════════════╝
|
||||||
|
//
|
||||||
|
// The protoreflect.Enum and proto.Message types are the concrete Go type
|
||||||
|
// associated with the named enum or message. Repeated fields are represented
|
||||||
|
// using a Go slice of the base element type.
|
||||||
|
//
|
||||||
|
// If a generated extension descriptor variable is directly passed to
|
||||||
|
// GetExtension, then the call should be followed immediately by a
|
||||||
|
// type assertion to the expected output value. For example:
|
||||||
|
//
|
||||||
|
// mm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage)
|
||||||
|
//
|
||||||
|
// This pattern enables static analysis tools to verify that the asserted type
|
||||||
|
// matches the Go type associated with the extension field and
|
||||||
|
// also enables a possible future migration to a type-safe extension API.
|
||||||
|
//
|
||||||
|
// Since singular messages are the most common extension type, the pattern of
|
||||||
|
// calling HasExtension followed by GetExtension may be simplified to:
|
||||||
|
//
|
||||||
|
// if mm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage); mm != nil {
|
||||||
|
// ... // make use of mm
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// The mm variable is non-nil if and only if HasExtension reports true.
|
||||||
func GetExtension(m Message, xt protoreflect.ExtensionType) any {
|
func GetExtension(m Message, xt protoreflect.ExtensionType) any {
|
||||||
// Treat nil message interface as an empty message; return the default.
|
// Treat nil message interface as an empty message; return the default.
|
||||||
if m == nil {
|
if m == nil {
|
||||||
@ -51,6 +93,35 @@ func GetExtension(m Message, xt protoreflect.ExtensionType) any {
|
|||||||
// SetExtension stores the value of an extension field.
|
// SetExtension stores the value of an extension field.
|
||||||
// It panics if m is invalid, xt does not extend m, or if type of v
|
// It panics if m is invalid, xt does not extend m, or if type of v
|
||||||
// is invalid for the specified extension field.
|
// is invalid for the specified extension field.
|
||||||
|
//
|
||||||
|
// The type of the value is dependent on the field type of the extension.
|
||||||
|
// For extensions generated by protoc-gen-go, the Go type is as follows:
|
||||||
|
//
|
||||||
|
// ╔═══════════════════╤═════════════════════════╗
|
||||||
|
// ║ Go type │ Protobuf kind ║
|
||||||
|
// ╠═══════════════════╪═════════════════════════╣
|
||||||
|
// ║ bool │ bool ║
|
||||||
|
// ║ int32 │ int32, sint32, sfixed32 ║
|
||||||
|
// ║ int64 │ int64, sint64, sfixed64 ║
|
||||||
|
// ║ uint32 │ uint32, fixed32 ║
|
||||||
|
// ║ uint64 │ uint64, fixed64 ║
|
||||||
|
// ║ float32 │ float ║
|
||||||
|
// ║ float64 │ double ║
|
||||||
|
// ║ string │ string ║
|
||||||
|
// ║ []byte │ bytes ║
|
||||||
|
// ║ protoreflect.Enum │ enum ║
|
||||||
|
// ║ proto.Message │ message, group ║
|
||||||
|
// ╚═══════════════════╧═════════════════════════╝
|
||||||
|
//
|
||||||
|
// The protoreflect.Enum and proto.Message types are the concrete Go type
|
||||||
|
// associated with the named enum or message. Repeated fields are represented
|
||||||
|
// using a Go slice of the base element type.
|
||||||
|
//
|
||||||
|
// If a generated extension descriptor variable is directly passed to
|
||||||
|
// SetExtension (e.g., foopb.E_MyExtension), then the value should be a
|
||||||
|
// concrete type that matches the expected Go type for the extension descriptor
|
||||||
|
// so that static analysis tools can verify type correctness.
|
||||||
|
// This also enables a possible future migration to a type-safe extension API.
|
||||||
func SetExtension(m Message, xt protoreflect.ExtensionType, v any) {
|
func SetExtension(m Message, xt protoreflect.ExtensionType, v any) {
|
||||||
xd := xt.TypeDescriptor()
|
xd := xt.TypeDescriptor()
|
||||||
pv := xt.ValueOf(v)
|
pv := xt.ValueOf(v)
|
||||||
|
4
vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go
generated
vendored
4
vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go
generated
vendored
@ -150,6 +150,7 @@ func (r descsByName) initFieldsFromDescriptorProto(fds []*descriptorpb.FieldDesc
|
|||||||
opts = proto.Clone(opts).(*descriptorpb.FieldOptions)
|
opts = proto.Clone(opts).(*descriptorpb.FieldOptions)
|
||||||
f.L1.Options = func() protoreflect.ProtoMessage { return opts }
|
f.L1.Options = func() protoreflect.ProtoMessage { return opts }
|
||||||
f.L1.IsWeak = opts.GetWeak()
|
f.L1.IsWeak = opts.GetWeak()
|
||||||
|
f.L1.IsLazy = opts.GetLazy()
|
||||||
if opts.Packed != nil {
|
if opts.Packed != nil {
|
||||||
f.L1.EditionFeatures.IsPacked = opts.GetPacked()
|
f.L1.EditionFeatures.IsPacked = opts.GetPacked()
|
||||||
}
|
}
|
||||||
@ -214,6 +215,9 @@ func (r descsByName) initExtensionDeclarations(xds []*descriptorpb.FieldDescript
|
|||||||
if xd.JsonName != nil {
|
if xd.JsonName != nil {
|
||||||
x.L2.StringName.InitJSON(xd.GetJsonName())
|
x.L2.StringName.InitJSON(xd.GetJsonName())
|
||||||
}
|
}
|
||||||
|
if x.L1.Kind == protoreflect.MessageKind && x.L1.EditionFeatures.IsDelimitedEncoded {
|
||||||
|
x.L1.Kind = protoreflect.GroupKind
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return xs, nil
|
return xs, nil
|
||||||
}
|
}
|
||||||
|
2
vendor/google.golang.org/protobuf/reflect/protodesc/editions.go
generated
vendored
2
vendor/google.golang.org/protobuf/reflect/protodesc/editions.go
generated
vendored
@ -14,7 +14,7 @@ import (
|
|||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
"google.golang.org/protobuf/types/descriptorpb"
|
"google.golang.org/protobuf/types/descriptorpb"
|
||||||
gofeaturespb "google.golang.org/protobuf/types/gofeaturespb"
|
"google.golang.org/protobuf/types/gofeaturespb"
|
||||||
)
|
)
|
||||||
|
|
||||||
var defaults = &descriptorpb.FeatureSetDefaults{}
|
var defaults = &descriptorpb.FeatureSetDefaults{}
|
||||||
|
10
vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go
generated
vendored
10
vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go
generated
vendored
@ -23,6 +23,7 @@ type (
|
|||||||
Unmarshal func(unmarshalInput) (unmarshalOutput, error)
|
Unmarshal func(unmarshalInput) (unmarshalOutput, error)
|
||||||
Merge func(mergeInput) mergeOutput
|
Merge func(mergeInput) mergeOutput
|
||||||
CheckInitialized func(checkInitializedInput) (checkInitializedOutput, error)
|
CheckInitialized func(checkInitializedInput) (checkInitializedOutput, error)
|
||||||
|
Equal func(equalInput) equalOutput
|
||||||
}
|
}
|
||||||
supportFlags = uint64
|
supportFlags = uint64
|
||||||
sizeInput = struct {
|
sizeInput = struct {
|
||||||
@ -75,4 +76,13 @@ type (
|
|||||||
checkInitializedOutput = struct {
|
checkInitializedOutput = struct {
|
||||||
pragma.NoUnkeyedLiterals
|
pragma.NoUnkeyedLiterals
|
||||||
}
|
}
|
||||||
|
equalInput = struct {
|
||||||
|
pragma.NoUnkeyedLiterals
|
||||||
|
MessageA Message
|
||||||
|
MessageB Message
|
||||||
|
}
|
||||||
|
equalOutput = struct {
|
||||||
|
pragma.NoUnkeyedLiterals
|
||||||
|
Equal bool
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
60
vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go
generated
vendored
60
vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go
generated
vendored
@ -1,60 +0,0 @@
|
|||||||
// Copyright 2018 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 purego || appengine
|
|
||||||
// +build purego appengine
|
|
||||||
|
|
||||||
package protoreflect
|
|
||||||
|
|
||||||
import "google.golang.org/protobuf/internal/pragma"
|
|
||||||
|
|
||||||
type valueType int
|
|
||||||
|
|
||||||
const (
|
|
||||||
nilType valueType = iota
|
|
||||||
boolType
|
|
||||||
int32Type
|
|
||||||
int64Type
|
|
||||||
uint32Type
|
|
||||||
uint64Type
|
|
||||||
float32Type
|
|
||||||
float64Type
|
|
||||||
stringType
|
|
||||||
bytesType
|
|
||||||
enumType
|
|
||||||
ifaceType
|
|
||||||
)
|
|
||||||
|
|
||||||
// value is a union where only one type can be represented at a time.
|
|
||||||
// This uses a distinct field for each type. This is type safe in Go, but
|
|
||||||
// occupies more memory than necessary (72B).
|
|
||||||
type value struct {
|
|
||||||
pragma.DoNotCompare // 0B
|
|
||||||
|
|
||||||
typ valueType // 8B
|
|
||||||
num uint64 // 8B
|
|
||||||
str string // 16B
|
|
||||||
bin []byte // 24B
|
|
||||||
iface any // 16B
|
|
||||||
}
|
|
||||||
|
|
||||||
func valueOfString(v string) Value {
|
|
||||||
return Value{typ: stringType, str: v}
|
|
||||||
}
|
|
||||||
func valueOfBytes(v []byte) Value {
|
|
||||||
return Value{typ: bytesType, bin: v}
|
|
||||||
}
|
|
||||||
func valueOfIface(v any) Value {
|
|
||||||
return Value{typ: ifaceType, iface: v}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v Value) getString() string {
|
|
||||||
return v.str
|
|
||||||
}
|
|
||||||
func (v Value) getBytes() []byte {
|
|
||||||
return v.bin
|
|
||||||
}
|
|
||||||
func (v Value) getIface() any {
|
|
||||||
return v.iface
|
|
||||||
}
|
|
3
vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go
generated
vendored
3
vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go
generated
vendored
@ -2,8 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine && !go1.21
|
//go:build !go1.21
|
||||||
// +build !purego,!appengine,!go1.21
|
|
||||||
|
|
||||||
package protoreflect
|
package protoreflect
|
||||||
|
|
||||||
|
3
vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go
generated
vendored
3
vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go
generated
vendored
@ -2,8 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine && go1.21
|
//go:build go1.21
|
||||||
// +build !purego,!appengine,go1.21
|
|
||||||
|
|
||||||
package protoreflect
|
package protoreflect
|
||||||
|
|
||||||
|
18
vendor/google.golang.org/protobuf/runtime/protoiface/methods.go
generated
vendored
18
vendor/google.golang.org/protobuf/runtime/protoiface/methods.go
generated
vendored
@ -39,6 +39,9 @@ type Methods = struct {
|
|||||||
|
|
||||||
// CheckInitialized returns an error if any required fields in the message are not set.
|
// CheckInitialized returns an error if any required fields in the message are not set.
|
||||||
CheckInitialized func(CheckInitializedInput) (CheckInitializedOutput, error)
|
CheckInitialized func(CheckInitializedInput) (CheckInitializedOutput, error)
|
||||||
|
|
||||||
|
// Equal compares two messages and returns EqualOutput.Equal == true if they are equal.
|
||||||
|
Equal func(EqualInput) EqualOutput
|
||||||
}
|
}
|
||||||
|
|
||||||
// SupportFlags indicate support for optional features.
|
// SupportFlags indicate support for optional features.
|
||||||
@ -166,3 +169,18 @@ type CheckInitializedInput = struct {
|
|||||||
type CheckInitializedOutput = struct {
|
type CheckInitializedOutput = struct {
|
||||||
pragma.NoUnkeyedLiterals
|
pragma.NoUnkeyedLiterals
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EqualInput is input to the Equal method.
|
||||||
|
type EqualInput = struct {
|
||||||
|
pragma.NoUnkeyedLiterals
|
||||||
|
|
||||||
|
MessageA protoreflect.Message
|
||||||
|
MessageB protoreflect.Message
|
||||||
|
}
|
||||||
|
|
||||||
|
// EqualOutput is output from the Equal method.
|
||||||
|
type EqualOutput = struct {
|
||||||
|
pragma.NoUnkeyedLiterals
|
||||||
|
|
||||||
|
Equal bool
|
||||||
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user