mirror of
https://github.com/siderolabs/talos.git
synced 2025-11-28 14:11:15 +01:00
feat: provide initial support for ethtool configuration
See https://github.com/siderolabs/ethtool - our fork. This PR covers only configuring rings, follow-up PRs will address other pieces: channels and features. Example: ``` node: 172.20.0.5 metadata: namespace: network type: EthernetStatuses.net.talos.dev id: enp0s2 version: 4 owner: network.EthernetStatusController phase: running created: 2025-02-04T16:03:14Z updated: 2025-02-04T16:04:12Z spec: linkState: true port: Other duplex: Unknown rings: rx-max: 256 tx-max: 256 rx: 128 tx: 128 tx-push: false rx-push: false ``` Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
This commit is contained in:
parent
b726e2f9f7
commit
716f700da7
@ -105,9 +105,9 @@ linters-settings:
|
||||
- golang.zx2c4.com/wireguard
|
||||
- golang.zx2c4.com/wireguard/wgctrl
|
||||
- cloud.google.com/go
|
||||
- github.com/mdlayher/ethtool
|
||||
# fd-leak related replacements: https://github.com/siderolabs/talos/issues/9412
|
||||
- github.com/insomniacslk/dhcp
|
||||
- github.com/safchain/ethtool
|
||||
retract-allow-no-explanation: false
|
||||
exclude-forbidden: false
|
||||
|
||||
|
||||
@ -102,6 +102,55 @@ message DNSResolveCacheSpec {
|
||||
string status = 1;
|
||||
}
|
||||
|
||||
// EthernetRingsSpec describes config of Ethernet rings.
|
||||
message EthernetRingsSpec {
|
||||
uint32 rx = 1;
|
||||
uint32 rx_mini = 2;
|
||||
uint32 rx_jumbo = 3;
|
||||
uint32 tx = 4;
|
||||
uint32 rx_buf_len = 5;
|
||||
uint32 cqe_size = 6;
|
||||
bool tx_push = 7;
|
||||
bool rx_push = 8;
|
||||
uint32 tx_push_buf_len = 9;
|
||||
bool tcp_data_split = 10;
|
||||
}
|
||||
|
||||
// EthernetRingsStatus describes status of Ethernet rings.
|
||||
message EthernetRingsStatus {
|
||||
uint32 rx_max = 1;
|
||||
uint32 rx_mini_max = 2;
|
||||
uint32 rx_jumbo_max = 3;
|
||||
uint32 tx_max = 4;
|
||||
uint32 tx_push_buf_len_max = 5;
|
||||
uint32 rx = 6;
|
||||
uint32 rx_mini = 7;
|
||||
uint32 rx_jumbo = 8;
|
||||
uint32 tx = 9;
|
||||
uint32 rx_buf_len = 10;
|
||||
uint32 cqe_size = 11;
|
||||
bool tx_push = 12;
|
||||
bool rx_push = 13;
|
||||
uint32 tx_push_buf_len = 14;
|
||||
bool tcp_data_split = 15;
|
||||
}
|
||||
|
||||
// EthernetSpecSpec describes config of Ethernet link.
|
||||
message EthernetSpecSpec {
|
||||
EthernetRingsSpec rings = 1;
|
||||
}
|
||||
|
||||
// EthernetStatusSpec describes status of rendered secrets.
|
||||
message EthernetStatusSpec {
|
||||
bool link_state = 1;
|
||||
int64 speed_megabits = 2;
|
||||
talos.resource.definitions.enums.NethelpersPort port = 3;
|
||||
talos.resource.definitions.enums.NethelpersDuplex duplex = 4;
|
||||
repeated string our_modes = 5;
|
||||
repeated string peer_modes = 6;
|
||||
EthernetRingsStatus rings = 7;
|
||||
}
|
||||
|
||||
// HardwareAddrSpec describes spec for the link.
|
||||
message HardwareAddrSpec {
|
||||
string name = 1;
|
||||
|
||||
@ -92,7 +92,7 @@ func (table *Table) WriteResource(node string, r resource.Resource, event state.
|
||||
label = "-"
|
||||
case state.Updated:
|
||||
label = " "
|
||||
case state.Bootstrapped, state.Errored:
|
||||
case state.Bootstrapped, state.Errored, state.Noop:
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
55
go.mod
55
go.mod
@ -1,6 +1,6 @@
|
||||
module github.com/siderolabs/talos
|
||||
|
||||
go 1.23.3
|
||||
go 1.23.5
|
||||
|
||||
replace (
|
||||
// see e.g. https://github.com/grpc/grpc-go/issues/6696
|
||||
@ -9,6 +9,9 @@ replace (
|
||||
// forked coredns so we don't carry caddy and other stuff into the Talos
|
||||
github.com/coredns/coredns => github.com/siderolabs/coredns v1.12.50
|
||||
|
||||
// forked ethtool introduces missing APIs
|
||||
github.com/mdlayher/ethtool => github.com/siderolabs/ethtool v0.0.0-20250204161245-ee04fc1b1856
|
||||
|
||||
// see https://github.com/mdlayher/kobject/pull/5
|
||||
github.com/mdlayher/kobject => github.com/smira/kobject v0.0.0-20240304111826-49c8d4613389
|
||||
|
||||
@ -70,7 +73,7 @@ require (
|
||||
github.com/containernetworking/plugins v1.6.1
|
||||
github.com/coredns/coredns v1.11.3
|
||||
github.com/coreos/go-iptables v0.8.0
|
||||
github.com/cosi-project/runtime v0.8.1
|
||||
github.com/cosi-project/runtime v0.9.2
|
||||
github.com/distribution/reference v0.6.0
|
||||
github.com/docker/cli v27.4.1+incompatible
|
||||
github.com/docker/docker v27.4.1+incompatible
|
||||
@ -89,7 +92,7 @@ require (
|
||||
github.com/godbus/dbus/v5 v5.1.0
|
||||
github.com/golang/mock v1.6.0
|
||||
github.com/google/cadvisor v0.51.0
|
||||
github.com/google/cel-go v0.22.1
|
||||
github.com/google/cel-go v0.23.2
|
||||
github.com/google/go-containerregistry v0.20.2
|
||||
github.com/google/go-tpm v0.9.3
|
||||
github.com/google/nftables v0.2.0
|
||||
@ -180,15 +183,15 @@ require (
|
||||
go.uber.org/zap v1.27.0
|
||||
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba
|
||||
golang.org/x/net v0.34.0
|
||||
golang.org/x/oauth2 v0.24.0
|
||||
golang.org/x/sync v0.10.0
|
||||
golang.org/x/sys v0.29.0
|
||||
golang.org/x/oauth2 v0.25.0
|
||||
golang.org/x/sync v0.11.0
|
||||
golang.org/x/sys v0.30.0
|
||||
golang.org/x/term v0.28.0
|
||||
golang.org/x/text v0.21.0
|
||||
golang.org/x/time v0.8.0
|
||||
golang.org/x/text v0.22.0
|
||||
golang.org/x/time v0.10.0
|
||||
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6
|
||||
google.golang.org/grpc v1.69.2
|
||||
google.golang.org/protobuf v1.36.1
|
||||
google.golang.org/grpc v1.70.0
|
||||
google.golang.org/protobuf v1.36.4
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
k8s.io/klog/v2 v2.130.1
|
||||
kernel.org/pub/linux/libs/security/libcap/cap v1.2.73
|
||||
@ -197,7 +200,7 @@ require (
|
||||
)
|
||||
|
||||
require (
|
||||
cel.dev/expr v0.18.0 // indirect
|
||||
cel.dev/expr v0.19.2 // indirect
|
||||
github.com/0x5a17ed/itkit v0.6.0 // indirect
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect
|
||||
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2 // indirect
|
||||
@ -208,9 +211,9 @@ require (
|
||||
github.com/MakeNowJust/heredoc v1.0.0 // indirect
|
||||
github.com/Microsoft/go-winio v0.6.2 // indirect
|
||||
github.com/Microsoft/hcsshim v0.12.9 // indirect
|
||||
github.com/ProtonMail/go-crypto v1.1.3 // indirect
|
||||
github.com/ProtonMail/go-crypto v1.1.5 // indirect
|
||||
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f // indirect
|
||||
github.com/ProtonMail/gopenpgp/v2 v2.8.1 // indirect
|
||||
github.com/ProtonMail/gopenpgp/v2 v2.8.2 // indirect
|
||||
github.com/adrg/xdg v0.5.3 // indirect
|
||||
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
|
||||
github.com/apparentlymart/go-cidr v1.1.0 // indirect
|
||||
@ -234,7 +237,7 @@ require (
|
||||
github.com/containerd/continuity v0.4.4 // indirect
|
||||
github.com/containerd/errdefs/pkg v0.3.0 // indirect
|
||||
github.com/containerd/fifo v1.1.0 // indirect
|
||||
github.com/containerd/go-cni v1.1.11 // indirect
|
||||
github.com/containerd/go-cni v1.1.12 // indirect
|
||||
github.com/containerd/plugin v1.0.0 // indirect
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect
|
||||
github.com/containerd/ttrpc v1.2.7 // indirect
|
||||
@ -248,7 +251,7 @@ require (
|
||||
github.com/docker/go-units v0.5.0 // indirect
|
||||
github.com/emicklei/dot v1.6.4 // indirect
|
||||
github.com/emicklei/go-restful/v3 v3.11.2 // indirect
|
||||
github.com/evanphx/json-patch v5.9.0+incompatible // indirect
|
||||
github.com/evanphx/json-patch v5.9.11+incompatible // indirect
|
||||
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect
|
||||
github.com/felixge/httpsnoop v1.0.4 // indirect
|
||||
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
|
||||
@ -274,7 +277,7 @@ require (
|
||||
github.com/gorilla/websocket v1.5.1 // indirect
|
||||
github.com/gosuri/uilive v0.0.4 // indirect
|
||||
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 // indirect
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.0 // indirect
|
||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||
github.com/hashicorp/go-safetemp v1.0.0 // indirect
|
||||
github.com/hashicorp/go-version v1.6.0 // indirect
|
||||
@ -289,7 +292,7 @@ require (
|
||||
github.com/lmittmann/tint v1.0.4 // indirect
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
||||
github.com/mailru/easyjson v0.7.7 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-colorable v0.1.14 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.15 // indirect
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
|
||||
github.com/mdlayher/ethernet v0.0.0-20220221185849-529eae5b6118 // indirect
|
||||
@ -317,6 +320,7 @@ require (
|
||||
github.com/opencontainers/selinux v1.11.1 // indirect
|
||||
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
|
||||
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect
|
||||
github.com/pierrec/lz4/v4 v4.1.21 // indirect
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
@ -327,7 +331,8 @@ require (
|
||||
github.com/prometheus/common v0.60.1 // indirect
|
||||
github.com/rivo/uniseg v0.4.7 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||
github.com/siderolabs/protoenc v0.2.1 // indirect
|
||||
github.com/sasha-s/go-deadlock v0.3.5 // indirect
|
||||
github.com/siderolabs/protoenc v0.2.2 // indirect
|
||||
github.com/siderolabs/tcpproxy v0.1.0 // indirect
|
||||
github.com/spf13/afero v1.10.0 // indirect
|
||||
github.com/stoewer/go-strcase v1.3.0 // indirect
|
||||
@ -347,18 +352,18 @@ require (
|
||||
go.opencensus.io v0.24.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect
|
||||
go.opentelemetry.io/otel v1.31.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.31.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.31.0 // indirect
|
||||
go.opentelemetry.io/otel v1.32.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.32.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.32.0 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
golang.org/x/crypto v0.32.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c // indirect
|
||||
golang.org/x/mod v0.22.0 // indirect
|
||||
golang.org/x/tools v0.27.0 // indirect
|
||||
golang.org/x/tools v0.29.0 // indirect
|
||||
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
|
||||
golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241223144023-3abc09e42ca8 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250127172529-29210b9bc287 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287 // indirect
|
||||
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
|
||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
|
||||
128
go.sum
128
go.sum
@ -1,5 +1,5 @@
|
||||
cel.dev/expr v0.18.0 h1:CJ6drgk+Hf96lkLikr4rFf19WrU0BOWEihyZnI2TAzo=
|
||||
cel.dev/expr v0.18.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw=
|
||||
cel.dev/expr v0.19.2 h1:V354PbqIXr9IQdwy4SYA4xa0HXaWq1BUPAGzugBY5V4=
|
||||
cel.dev/expr v0.19.2/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw=
|
||||
cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A=
|
||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||
cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
|
||||
@ -43,12 +43,12 @@ github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA
|
||||
github.com/Microsoft/hcsshim v0.12.9 h1:2zJy5KA+l0loz1HzEGqyNnjd3fyZA31ZBCGKacp6lLg=
|
||||
github.com/Microsoft/hcsshim v0.12.9/go.mod h1:fJ0gkFAna6ukt0bLdKB8djt4XIJhF/vEPuoIWYVvZ8Y=
|
||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||
github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk=
|
||||
github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
|
||||
github.com/ProtonMail/go-crypto v1.1.5 h1:eoAQfK2dwL+tFSFpr7TbOaPNUbPiJj4fLYwwGE1FQO4=
|
||||
github.com/ProtonMail/go-crypto v1.1.5/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
|
||||
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f h1:tCbYj7/299ekTTXpdwKYF8eBlsYsDVoggDAuAjoK66k=
|
||||
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f/go.mod h1:gcr0kNtGBqin9zDW9GOHcVntrwnjrK+qdJ06mWYBybw=
|
||||
github.com/ProtonMail/gopenpgp/v2 v2.8.1 h1:WGE1THOhOnLurL0+N4BOlLkIhjEO7YVZgmpgyDHN56A=
|
||||
github.com/ProtonMail/gopenpgp/v2 v2.8.1/go.mod h1:4PUgqGSQjd7HldUbAgMmC69+Gv6DO8NomCNi0y8+BTc=
|
||||
github.com/ProtonMail/gopenpgp/v2 v2.8.2 h1:fe/XagfxkHRCr+cLFMcoF7XwaASRGSmK/fmcmK8yo6o=
|
||||
github.com/ProtonMail/gopenpgp/v2 v2.8.2/go.mod h1:pPWZyRQWpQ7g8NWsdZmUynNZ1R09k4MdbSHvm+KooqM=
|
||||
github.com/adrg/xdg v0.5.3 h1:xRnxJXne7+oWDatRhR1JLnvuccuIeCoBu2rtuLqQB78=
|
||||
github.com/adrg/xdg v0.5.3/go.mod h1:nlTsY+NNiCBGCK2tpm09vRqfVzrc2fLmXGpBLF0zlTQ=
|
||||
github.com/alexflint/go-filemutex v1.3.0 h1:LgE+nTUWnQCyRKbpoceKZsPQbs84LivvgwUymZXdOcM=
|
||||
@ -101,8 +101,8 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1U
|
||||
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4=
|
||||
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
|
||||
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
|
||||
github.com/brianvoe/gofakeit/v6 v6.24.0 h1:74yq7RRz/noddscZHRS2T84oHZisW9muwbb8sRnU52A=
|
||||
github.com/brianvoe/gofakeit/v6 v6.24.0/go.mod h1:Ow6qC71xtwm79anlwKRlWZW6zVq9D2XHE4QSSMP/rU8=
|
||||
github.com/brianvoe/gofakeit/v6 v6.28.0 h1:Xib46XXuQfmlLS2EXRuJpqcw8St6qSZz75OUo0tgAW4=
|
||||
github.com/brianvoe/gofakeit/v6 v6.28.0/go.mod h1:Xj58BMSnFqcn/fAQeSK+/PLtC5kSb7FJIq4JyGa8vEs=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
@ -139,8 +139,8 @@ github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151X
|
||||
github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk=
|
||||
github.com/containerd/fifo v1.1.0 h1:4I2mbh5stb1u6ycIABlBw9zgtlK8viPI9QkQNRQEEmY=
|
||||
github.com/containerd/fifo v1.1.0/go.mod h1:bmC4NWMbXlt2EZ0Hc7Fx7QzTFxgPID13eH0Qu+MAb2o=
|
||||
github.com/containerd/go-cni v1.1.11 h1:fWt1K15AmSLsEfa57N+qYw4NeGPiQKYq1pjNGJwV9mc=
|
||||
github.com/containerd/go-cni v1.1.11/go.mod h1:/Y/sL8yqYQn1ZG1om1OncJB1W4zN3YmjfP/ShCzG/OY=
|
||||
github.com/containerd/go-cni v1.1.12 h1:wm/5VD/i255hjM4uIZjBRiEQ7y98W9ACy/mHeLi4+94=
|
||||
github.com/containerd/go-cni v1.1.12/go.mod h1:+jaqRBdtW5faJxj2Qwg1Of7GsV66xcvnCx4mSJtUlxU=
|
||||
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
|
||||
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
|
||||
github.com/containerd/platforms v1.0.0-rc.1 h1:83KIq4yy1erSRgOVHNk1HYdPvzdJ5CnsWaRoJX4C41E=
|
||||
@ -165,8 +165,8 @@ github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr
|
||||
github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
|
||||
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
|
||||
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
github.com/cosi-project/runtime v0.8.1 h1:zM5g3cOhvN8HjZ6iBtWwwP4KWmpXSTfMXo3QUZiRjhI=
|
||||
github.com/cosi-project/runtime v0.8.1/go.mod h1:sNqLK/aBb8862xGS4HLAcwTloDuH0TeU3N1+qr3TmAs=
|
||||
github.com/cosi-project/runtime v0.9.2 h1:l0kugKjZUFrmBFwkza2lt2vA1u8PBuWbrbB2HvPmkTs=
|
||||
github.com/cosi-project/runtime v0.9.2/go.mod h1:dzAY2bdrPv0y39FyJOOURMkx3Ae7erMVoxX/N0OAZQU=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc=
|
||||
@ -218,8 +218,8 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m
|
||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
|
||||
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/evanphx/json-patch v5.9.11+incompatible h1:ixHHqfcGvxhWkniF1tWxBHA0yb4Z+d1UQi45df52xW8=
|
||||
github.com/evanphx/json-patch v5.9.11+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4=
|
||||
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc=
|
||||
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
||||
@ -307,8 +307,8 @@ github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
|
||||
github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
|
||||
github.com/google/cadvisor v0.51.0 h1:BspqSPdZoLKrnvuZNOvM/KiJ/A+RdixwagN20n+2H8k=
|
||||
github.com/google/cadvisor v0.51.0/go.mod h1:czGE/c/P/i0QFpVNKTFrIEzord9Y10YfpwuaSWXELc0=
|
||||
github.com/google/cel-go v0.22.1 h1:AfVXx3chM2qwoSbM7Da8g8hX8OVSkBFwX+rz2+PcK40=
|
||||
github.com/google/cel-go v0.22.1/go.mod h1:BuznPXXfQDpXKWQ9sPW3TzlAJN5zzFe+i9tIs0yC4s8=
|
||||
github.com/google/cel-go v0.23.2 h1:UdEe3CvQh3Nv+E/j9r1Y//WO0K0cSyD7/y0bzyLIMI4=
|
||||
github.com/google/cel-go v0.23.2/go.mod h1:52Pb6QsDbC5kvgxvZhiL9QX1oZEkcUF/ZqaPx1J5Wwo=
|
||||
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
|
||||
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
@ -363,8 +363,8 @@ github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:Fecb
|
||||
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.2.0 h1:kQ0NI7W1B3HwiN5gAYtY+XFItDPbLBwYRxAqbFTyDes=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.2.0/go.mod h1:zrT2dxOAjNFPRGjTUe2Xmb4q4YdUwVvQFV6xiCSf+z0=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.0 h1:VD1gqscl4nYs1YxVuSdemTrSgTKrwOWDK0FVFMqm+Cg=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.0/go.mod h1:4EgsQoS4TOhJizV+JTFg40qx1Ofh3XmXEQNBpgvNT40=
|
||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
|
||||
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
@ -457,9 +457,8 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0
|
||||
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||
github.com/martinlindhe/base36 v1.1.1 h1:1F1MZ5MGghBXDZ2KJ3QfxmiydlWOGB8HCEtkap5NkVg=
|
||||
github.com/martinlindhe/base36 v1.1.1/go.mod h1:vMS8PaZ5e/jV9LwFKlm0YLnXl/hpOihiBxKkIoc3g08=
|
||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
|
||||
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||
@ -471,10 +470,6 @@ github.com/mdlayher/arp v0.0.0-20220512170110-6706a2966875 h1:ql8x//rJsHMjS+qqEa
|
||||
github.com/mdlayher/arp v0.0.0-20220512170110-6706a2966875/go.mod h1:kfOoFJuHWp76v1RgZCb9/gVUc7XdY877S2uVYbNliGc=
|
||||
github.com/mdlayher/ethernet v0.0.0-20220221185849-529eae5b6118 h1:2oDp6OOhLxQ9JBoUuysVz9UZ9uI6oLUbvAZu0x8o+vE=
|
||||
github.com/mdlayher/ethernet v0.0.0-20220221185849-529eae5b6118/go.mod h1:ZFUnHIVchZ9lJoWoEGUg8Q3M4U8aNNWA3CVSUTkW4og=
|
||||
github.com/mdlayher/ethtool v0.0.0-20210210192532-2b88debcdd43/go.mod h1:+t7E0lkKfbBsebllff1xdTmyJt8lH37niI6kwFk9OTo=
|
||||
github.com/mdlayher/ethtool v0.2.0 h1:akcA4WZVWozzirPASeMq8qgLkxpF3ykftVXwnrMKrhY=
|
||||
github.com/mdlayher/ethtool v0.2.0/go.mod h1:W0pIBrNPK1TslIN4Z9wt1EVbay66Kbvek2z2f29VBfw=
|
||||
github.com/mdlayher/genetlink v1.0.0/go.mod h1:0rJ0h4itni50A86M2kHcgS85ttZazNt7a8H2a2cw0Gc=
|
||||
github.com/mdlayher/genetlink v1.3.2 h1:KdrNKe+CTu+IbZnm/GVUMXSqBBLqcGpRDa0xkQy56gw=
|
||||
github.com/mdlayher/genetlink v1.3.2/go.mod h1:tcC3pkCrPUGIKKsCsp0B3AdaaKuHtaxoJRz3cc+528o=
|
||||
github.com/mdlayher/netlink v0.0.0-20190409211403-11939a169225/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA=
|
||||
@ -483,7 +478,6 @@ github.com/mdlayher/netlink v1.1.0/go.mod h1:H4WCitaheIsdF9yOYu8CFmCgQthAPIWZmcK
|
||||
github.com/mdlayher/netlink v1.1.1/go.mod h1:WTYpFb/WTvlRJAyKhZL5/uy69TDDpHHu2VZmb2XgV7o=
|
||||
github.com/mdlayher/netlink v1.2.0/go.mod h1:kwVW1io0AZy9A1E2YYgaD4Cj+C+GPkU6klXCMzIJ9p8=
|
||||
github.com/mdlayher/netlink v1.2.1/go.mod h1:bacnNlfhqHqqLo4WsYeXSqfyXkInQ9JneWI68v1KwSU=
|
||||
github.com/mdlayher/netlink v1.2.2-0.20210123213345-5cc92139ae3e/go.mod h1:bacnNlfhqHqqLo4WsYeXSqfyXkInQ9JneWI68v1KwSU=
|
||||
github.com/mdlayher/netlink v1.3.0/go.mod h1:xK/BssKuwcRXHrtN04UBkwQ6dY9VviGGuriDdoPSWys=
|
||||
github.com/mdlayher/netlink v1.4.0/go.mod h1:dRJi5IABcZpBD2A3D0Mv/AiX8I9uDEu5oGkAVrekmf8=
|
||||
github.com/mdlayher/netlink v1.4.1/go.mod h1:e4/KuJ+s8UhfUpO9z00/fDZZmhSrs+oxyqAS9cNgn6Q=
|
||||
@ -498,6 +492,7 @@ github.com/mdlayher/packet v1.1.2/go.mod h1:GEu1+n9sG5VtiRE4SydOmX5GTwyyYlteZiFU
|
||||
github.com/mdlayher/socket v0.0.0-20210307095302-262dc9984e00/go.mod h1:GAFlyu4/XV68LkQKYzKhIo/WW7j3Zi0YRAz/BOoanUc=
|
||||
github.com/mdlayher/socket v0.1.1/go.mod h1:mYV5YIZAfHh4dzDVzI8x8tWLWCliuX8Mon5Awbj+qDs=
|
||||
github.com/mdlayher/socket v0.2.1/go.mod h1:QLlNPkFR88mRUNQIzRBMfXxwKal8H7u1h3bL1CV+f0E=
|
||||
github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA=
|
||||
github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos=
|
||||
github.com/mdlayher/socket v0.5.1/go.mod h1:TjPLHI1UgwEv5J1B5q0zTZq12A/6H7nKmtTanQE37IQ=
|
||||
github.com/mdp/qrterminal/v3 v3.2.0 h1:qteQMXO3oyTK4IHwj2mWsKYYRBOp1Pj2WRYFYYNTCdk=
|
||||
@ -577,6 +572,8 @@ github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNH
|
||||
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw=
|
||||
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
|
||||
github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
|
||||
github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
||||
github.com/pin/tftp/v3 v3.1.0 h1:rQaxd4pGwcAJnpId8zC+O2NX3B2/NscjDZQaqEjuE7c=
|
||||
@ -628,6 +625,8 @@ github.com/safchain/ethtool v0.5.9 h1://6RvaOKFf3nQ0rl5+8zBbE4/72455VC9Jq61pfq67
|
||||
github.com/safchain/ethtool v0.5.9/go.mod h1:w8oSsZeowyRaM7xJJBAbubzzrOkwO8TBgPSEqPP/5mg=
|
||||
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4=
|
||||
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY=
|
||||
github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU=
|
||||
github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U=
|
||||
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.30 h1:yoKAVkEVwAqbGbR8n87rHQ1dulL25rKloGadb3vm770=
|
||||
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.30/go.mod h1:sH0u6fq6x4R5M7WxkoQFY/o7UaiItec0o1LinLCJNq8=
|
||||
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
|
||||
@ -640,6 +639,8 @@ github.com/siderolabs/discovery-api v0.1.5 h1:fcHVkLkWla7C5+9IeOGEUQ4N8Yp9R7a/kc
|
||||
github.com/siderolabs/discovery-api v0.1.5/go.mod h1:b9jOm9T2puYVcRqCAjWxPcHz2qBqDX8I0OZDOyOFHXg=
|
||||
github.com/siderolabs/discovery-client v0.1.10 h1:bTAvFLiISSzVXyYL1cIgAz8cPYd9ZfvhxwdebgtxARA=
|
||||
github.com/siderolabs/discovery-client v0.1.10/go.mod h1:Ew1z07eyJwqNwum84IKYH4S649KEKK5WUmRW49HlXS8=
|
||||
github.com/siderolabs/ethtool v0.0.0-20250204161245-ee04fc1b1856 h1:LQe9knKlZXGdrm0J/bcojk42qqhfBoPpiqqgXQa/7pY=
|
||||
github.com/siderolabs/ethtool v0.0.0-20250204161245-ee04fc1b1856/go.mod h1:3u47fCDlOQGM7IhXhUB3uPEcjdQxGmK53/45kEg1HDM=
|
||||
github.com/siderolabs/gen v0.8.0 h1:Pj93+hexkk5hQ7izjJ6YXnEWc8vlzOmDwFz13/VzS7o=
|
||||
github.com/siderolabs/gen v0.8.0/go.mod h1:an3a2Y53O7kUjnnK8Bfu3gewtvnIOu5RTU6HalFtXQQ=
|
||||
github.com/siderolabs/go-api-signature v0.3.6 h1:wDIsXbpl7Oa/FXvxB6uz4VL9INA9fmr3EbmjEZYFJrU=
|
||||
@ -686,8 +687,8 @@ github.com/siderolabs/net v0.4.0 h1:1bOgVay/ijPkJz4qct98nHsiB/ysLQU0KLoBC4qLm7I=
|
||||
github.com/siderolabs/net v0.4.0/go.mod h1:/ibG+Hm9HU27agp5r9Q3eZicEfjquzNzQNux5uEk0kM=
|
||||
github.com/siderolabs/proto-codec v0.1.1 h1:4jiUwW/vaXTZ+YNgZDs37B4aj/1mzV/erIkzUUCRY9g=
|
||||
github.com/siderolabs/proto-codec v0.1.1/go.mod h1:rIvmhKJG8+JwSCGPX+cQljpOMDmuHhLKPkt6KaFwEaU=
|
||||
github.com/siderolabs/protoenc v0.2.1 h1:BqxEmeWQeMpNP3R6WrPqDatX8sM/r4t97OP8mFmg6GA=
|
||||
github.com/siderolabs/protoenc v0.2.1/go.mod h1:StTHxjet1g11GpNAWiATgc8K0HMKiFSEVVFOa/H0otc=
|
||||
github.com/siderolabs/protoenc v0.2.2 h1:vVQDrTjV+QSOiroWTca6h2Sn5XWYk7VSUPav5J0Qp54=
|
||||
github.com/siderolabs/protoenc v0.2.2/go.mod h1:gtkHkjSCFEceXUHUzKDpnuvXu1mab9D3pVxTnQN+z+o=
|
||||
github.com/siderolabs/siderolink v0.3.11 h1:teJ/LMjSyLekhJVy2+nDIuOBPrVRAMwusJQzxdA95K0=
|
||||
github.com/siderolabs/siderolink v0.3.11/go.mod h1:QbGnXpHI5MDq6qMZkCFnxYOOw5eE+lkLx53L5ZgjLMQ=
|
||||
github.com/siderolabs/tcpproxy v0.1.0 h1:IbkS9vRhjMOscc1US3M5P1RnsGKFgB6U5IzUk+4WkKA=
|
||||
@ -728,6 +729,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI=
|
||||
@ -800,20 +803,20 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.5
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0/go.mod h1:n8MR6/liuGB5EmTETUBeU5ZgqMOlqKRxUaqPQBOANZ8=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM=
|
||||
go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY=
|
||||
go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE=
|
||||
go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
|
||||
go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 h1:K0XaT3DwHAcV4nKLzcQvwAgSyisUghWoY20I7huthMk=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0/go.mod h1:B5Ki776z/MBnVha1Nzwp5arlzBbE3+1jk+pGmaP5HME=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 h1:lUsI2TYsQw2r1IASwoROaCnjdj2cvC2+Jbxvk6nHnWU=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0/go.mod h1:2HpZxxQurfGxJlJDblybejHB6RX6pmExPNe517hREw4=
|
||||
go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE=
|
||||
go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY=
|
||||
go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
|
||||
go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
|
||||
go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys=
|
||||
go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A=
|
||||
go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M=
|
||||
go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8=
|
||||
go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4=
|
||||
go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ=
|
||||
go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
|
||||
go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
|
||||
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
||||
go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
|
||||
go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
|
||||
@ -836,8 +839,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0
|
||||
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
|
||||
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo=
|
||||
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak=
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc=
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
@ -883,6 +886,7 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx
|
||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
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.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
|
||||
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
|
||||
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
@ -893,8 +897,8 @@ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ
|
||||
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
|
||||
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||
golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
|
||||
golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
@ -906,8 +910,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
|
||||
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
|
||||
golang.org/x/sync v0.11.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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
@ -931,7 +935,6 @@ golang.org/x/sys v0.0.0-20201218084310-7d0127a74742/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210110051926-789bb1bd4061/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210123111255-9b0068b26619/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210216163648-f7da38b97c65/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
@ -955,22 +958,24 @@ golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.16.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.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
|
||||
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||
golang.org/x/sys v0.30.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-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.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
|
||||
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
|
||||
golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
|
||||
golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
|
||||
@ -982,11 +987,12 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
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.8.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.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||
golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
|
||||
golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
||||
golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4=
|
||||
golang.org/x/time v0.10.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-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
@ -1005,8 +1011,8 @@ golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o=
|
||||
golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q=
|
||||
golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE=
|
||||
golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
@ -1042,10 +1048,10 @@ google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEc
|
||||
google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
|
||||
google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241223144023-3abc09e42ca8 h1:st3LcW/BPi75W4q1jJTEor/QWwbNlPlDG0JTn6XhZu0=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241223144023-3abc09e42ca8/go.mod h1:klhJGKFyG8Tn50enBn7gizg4nXGXJ+jqEREdCWaPcV4=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 h1:TqExAhdPaB60Ux47Cn0oLV07rGnxZzIsaRhQaqS666A=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250127172529-29210b9bc287 h1:A2ni10G3UlplFrWdCDJTl7D7mJ7GSRm37S+PDimaKRw=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250127172529-29210b9bc287/go.mod h1:iYONQfRdizDB8JJBybql13nArx91jcUk7zCXEsOofM4=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287 h1:J1H9f+LEdWAfHcez/4cvaVBox7cOYT+IU6rgqj5x++8=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287/go.mod h1:8BS3B93F/U1juMFq9+EDk+qOT5CO1R9IzXxG3PTqiRk=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||
@ -1062,8 +1068,8 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD
|
||||
google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
|
||||
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
||||
google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
||||
google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU=
|
||||
google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
|
||||
google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
|
||||
google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw=
|
||||
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
@ -1078,8 +1084,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=
|
||||
google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM=
|
||||
google.golang.org/protobuf v1.36.4/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 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
module github.com/siderolabs/cloud-image-uploader
|
||||
|
||||
go 1.23.3
|
||||
go 1.23.5
|
||||
|
||||
require (
|
||||
cloud.google.com/go/storage v1.49.0
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
module github.com/siderolabs/talos-hack-docgen
|
||||
|
||||
go 1.23.3
|
||||
go 1.23.5
|
||||
|
||||
// forked go-yaml that introduces RawYAML interface, which can be used to populate YAML fields using bytes
|
||||
// which are then encoded as a valid YAML blocks with proper indentiation
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
module github.com/siderolabs/gotagsrewrite
|
||||
|
||||
go 1.23.3
|
||||
go 1.23.5
|
||||
|
||||
require (
|
||||
github.com/fatih/structtag v1.2.0
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
module module-sig-verify
|
||||
|
||||
go 1.23.3
|
||||
go 1.23.5
|
||||
|
||||
require go.mozilla.org/pkcs7 v0.9.0
|
||||
|
||||
@ -100,6 +100,13 @@ The NQN can be read by `talosctl read /etc/nvme/hostnqn`
|
||||
title = "ISO"
|
||||
description = """\
|
||||
Talos starting with 1.10 will have ISO's that will use GRUB only for legacy BIOS and systemd-boot for modern UEFI systems.
|
||||
"""
|
||||
|
||||
[notes.ethernet]
|
||||
title = "Ethernet"
|
||||
description = """\
|
||||
Talos now provides `ethtool`-style Ethernet low-level configuration via `network/EthernetConfig` documents.
|
||||
Current status of the interface can be read by `talosctl get ethernetstatus`.
|
||||
"""
|
||||
|
||||
[make_deps]
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
module github.com/siderolabs/structprotogen
|
||||
|
||||
go 1.23.3
|
||||
go 1.23.5
|
||||
|
||||
require (
|
||||
github.com/fatih/structtag v1.2.0
|
||||
|
||||
@ -51,7 +51,7 @@ func (p *localAddressProvider) watch(evCh <-chan state.Event) {
|
||||
switch ev.Type {
|
||||
case state.Created, state.Updated:
|
||||
// expected
|
||||
case state.Destroyed, state.Bootstrapped, state.Errored:
|
||||
case state.Destroyed, state.Bootstrapped, state.Errored, state.Noop:
|
||||
// shouldn't happen, ignore
|
||||
continue
|
||||
}
|
||||
|
||||
@ -51,7 +51,7 @@ func NewTLSConfig(ctx context.Context, resources state.State) (*TLSConfig, error
|
||||
switch event.Type {
|
||||
case state.Created, state.Updated:
|
||||
// expected
|
||||
case state.Destroyed, state.Bootstrapped:
|
||||
case state.Destroyed, state.Bootstrapped, state.Noop:
|
||||
// ignore, we'll get another event
|
||||
continue
|
||||
case state.Errored:
|
||||
@ -85,7 +85,7 @@ func (tlsConfig *TLSConfig) Watch(ctx context.Context, onUpdate func()) error {
|
||||
switch event.Type {
|
||||
case state.Created, state.Updated:
|
||||
// expected
|
||||
case state.Destroyed, state.Bootstrapped:
|
||||
case state.Destroyed, state.Bootstrapped, state.Noop:
|
||||
// ignore, we'll get another event
|
||||
continue
|
||||
case state.Errored:
|
||||
|
||||
@ -0,0 +1,92 @@
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
package network
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/cosi-project/runtime/pkg/controller"
|
||||
"github.com/cosi-project/runtime/pkg/safe"
|
||||
"github.com/cosi-project/runtime/pkg/state"
|
||||
"github.com/siderolabs/gen/optional"
|
||||
"go.uber.org/zap"
|
||||
|
||||
configtypes "github.com/siderolabs/talos/pkg/machinery/config/config"
|
||||
"github.com/siderolabs/talos/pkg/machinery/resources/config"
|
||||
"github.com/siderolabs/talos/pkg/machinery/resources/network"
|
||||
)
|
||||
|
||||
// EthernetConfigController manages network.EthernetSpec based on machine configuration.
|
||||
type EthernetConfigController struct{}
|
||||
|
||||
// Name implements controller.Controller interface.
|
||||
func (ctrl *EthernetConfigController) Name() string {
|
||||
return "network.EthernetConfigController"
|
||||
}
|
||||
|
||||
// Inputs implements controller.Controller interface.
|
||||
func (ctrl *EthernetConfigController) Inputs() []controller.Input {
|
||||
return []controller.Input{
|
||||
{
|
||||
Namespace: config.NamespaceName,
|
||||
Type: config.MachineConfigType,
|
||||
ID: optional.Some(config.V1Alpha1ID),
|
||||
Kind: controller.InputWeak,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// Outputs implements controller.Controller interface.
|
||||
func (ctrl *EthernetConfigController) Outputs() []controller.Output {
|
||||
return []controller.Output{
|
||||
{
|
||||
Type: network.EthernetSpecType,
|
||||
Kind: controller.OutputShared,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// Run implements controller.Controller interface.
|
||||
func (ctrl *EthernetConfigController) Run(ctx context.Context, r controller.Runtime, logger *zap.Logger) error {
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return nil
|
||||
case <-r.EventCh():
|
||||
}
|
||||
|
||||
r.StartTrackingOutputs()
|
||||
|
||||
cfg, err := safe.ReaderGetByID[*config.MachineConfig](ctx, r, config.V1Alpha1ID)
|
||||
if err != nil && !state.IsNotFoundError(err) {
|
||||
return fmt.Errorf("error reading machine configuration: %w", err)
|
||||
}
|
||||
|
||||
if cfg != nil {
|
||||
if err = ctrl.apply(ctx, r, cfg.Config().EthernetConfigs()); err != nil {
|
||||
return fmt.Errorf("error applying EthernetSpec: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
if err = safe.CleanupOutputs[*network.EthernetSpec](ctx, r); err != nil {
|
||||
return fmt.Errorf("error cleaning up EthernetSpec: %w", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (ctrl *EthernetConfigController) apply(ctx context.Context, r controller.Runtime, configs []configtypes.EthernetConfig) error {
|
||||
for _, cfg := range configs {
|
||||
if err := safe.WriterModify(ctx, r, network.NewEthernetSpec(network.NamespaceName, cfg.Name()), func(spec *network.EthernetSpec) error {
|
||||
spec.TypedSpec().Rings = network.EthernetRingsSpec(cfg.Rings())
|
||||
|
||||
return nil
|
||||
}); err != nil {
|
||||
return fmt.Errorf("error writing EthernetSpec: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
135
internal/app/machined/pkg/controllers/network/ethernet_spec.go
Normal file
135
internal/app/machined/pkg/controllers/network/ethernet_spec.go
Normal file
@ -0,0 +1,135 @@
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
package network
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/cosi-project/runtime/pkg/controller"
|
||||
"github.com/cosi-project/runtime/pkg/safe"
|
||||
"github.com/mdlayher/ethtool"
|
||||
"github.com/siderolabs/gen/optional"
|
||||
"go.uber.org/zap"
|
||||
|
||||
"github.com/siderolabs/talos/internal/app/machined/pkg/controllers/runtime"
|
||||
"github.com/siderolabs/talos/pkg/machinery/resources/network"
|
||||
)
|
||||
|
||||
// EthernetSpecController reports Ethernet link statuses.
|
||||
type EthernetSpecController struct{}
|
||||
|
||||
// Name implements controller.Controller interface.
|
||||
func (ctrl *EthernetSpecController) Name() string {
|
||||
return "network.EthernetSpecController"
|
||||
}
|
||||
|
||||
// Inputs implements controller.Controller interface.
|
||||
func (ctrl *EthernetSpecController) Inputs() []controller.Input {
|
||||
return []controller.Input{
|
||||
{
|
||||
Namespace: network.NamespaceName,
|
||||
Type: network.EthernetSpecType,
|
||||
Kind: controller.InputWeak,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// Outputs implements controller.Controller interface.
|
||||
func (ctrl *EthernetSpecController) Outputs() []controller.Output {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Run implements controller.Controller interface.
|
||||
func (ctrl *EthernetSpecController) Run(ctx context.Context, r controller.Runtime, logger *zap.Logger) error {
|
||||
// wait for udevd to be healthy, which implies that all link renames are done
|
||||
if err := runtime.WaitForDevicesReady(ctx, r,
|
||||
[]controller.Input{
|
||||
{
|
||||
Namespace: network.NamespaceName,
|
||||
Type: network.EthernetSpecType,
|
||||
Kind: controller.InputWeak,
|
||||
},
|
||||
},
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ethClient, err := ethtool.New()
|
||||
if err != nil {
|
||||
logger.Warn("error dialing ethtool socket", zap.Error(err))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
defer ethClient.Close() //nolint:errcheck
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return nil
|
||||
case <-r.EventCh():
|
||||
}
|
||||
|
||||
specs, err := safe.ReaderListAll[*network.EthernetSpec](ctx, r)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error reading EthernetSpec resources: %w", err)
|
||||
}
|
||||
|
||||
var errs error
|
||||
|
||||
for spec := range specs.All() {
|
||||
if err = ctrl.apply(ethClient, spec); err != nil {
|
||||
errs = errors.Join(errs, fmt.Errorf("error configuring %q: %w", spec.Metadata().ID(), err))
|
||||
}
|
||||
}
|
||||
|
||||
if errs != nil {
|
||||
return fmt.Errorf("failed to reconcile Ethernet specs: %w", errs)
|
||||
}
|
||||
|
||||
r.ResetRestartBackoff()
|
||||
}
|
||||
}
|
||||
|
||||
func optionalFromPtr[T any](ptr *T) optional.Optional[T] {
|
||||
if ptr == nil {
|
||||
return optional.None[T]()
|
||||
}
|
||||
|
||||
return optional.Some(*ptr)
|
||||
}
|
||||
|
||||
func (ctrl *EthernetSpecController) apply(
|
||||
ethClient *ethtool.Client,
|
||||
spec *network.EthernetSpec,
|
||||
) error {
|
||||
ringSpec := spec.TypedSpec().Rings
|
||||
|
||||
var zeroRingSpec network.EthernetRingsSpec
|
||||
|
||||
if ringSpec != zeroRingSpec {
|
||||
if err := ethClient.SetRings(ethtool.Rings{
|
||||
Interface: ethtool.Interface{
|
||||
Name: spec.Metadata().ID(),
|
||||
},
|
||||
RX: optionalFromPtr(ringSpec.RX),
|
||||
RXMini: optionalFromPtr(ringSpec.RXMini),
|
||||
RXJumbo: optionalFromPtr(ringSpec.RXJumbo),
|
||||
TX: optionalFromPtr(ringSpec.TX),
|
||||
RXBufLen: optionalFromPtr(ringSpec.RXBufLen),
|
||||
CQESize: optionalFromPtr(ringSpec.CQESize),
|
||||
TXPush: optionalFromPtr(ringSpec.TXPush),
|
||||
RXPush: optionalFromPtr(ringSpec.RXPush),
|
||||
TXPushBufLen: optionalFromPtr(ringSpec.TXPushBufLen),
|
||||
TCPDataSplit: optionalFromPtr(ringSpec.TCPDataSplit),
|
||||
}); err != nil {
|
||||
return fmt.Errorf("error updating rings: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
184
internal/app/machined/pkg/controllers/network/ethernet_status.go
Normal file
184
internal/app/machined/pkg/controllers/network/ethernet_status.go
Normal file
@ -0,0 +1,184 @@
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
package network
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/cosi-project/runtime/pkg/controller"
|
||||
"github.com/cosi-project/runtime/pkg/safe"
|
||||
"github.com/mdlayher/ethtool"
|
||||
"github.com/siderolabs/gen/xslices"
|
||||
"github.com/siderolabs/go-pointer"
|
||||
"go.uber.org/zap"
|
||||
|
||||
"github.com/siderolabs/talos/internal/app/machined/pkg/controllers/network/watch"
|
||||
"github.com/siderolabs/talos/internal/app/machined/pkg/controllers/runtime"
|
||||
"github.com/siderolabs/talos/pkg/machinery/nethelpers"
|
||||
"github.com/siderolabs/talos/pkg/machinery/resources/network"
|
||||
)
|
||||
|
||||
// EthernetStatusController reports Ethernet link statuses.
|
||||
type EthernetStatusController struct{}
|
||||
|
||||
// Name implements controller.Controller interface.
|
||||
func (ctrl *EthernetStatusController) Name() string {
|
||||
return "network.EthernetStatusController"
|
||||
}
|
||||
|
||||
// Inputs implements controller.Controller interface.
|
||||
func (ctrl *EthernetStatusController) Inputs() []controller.Input {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Outputs implements controller.Controller interface.
|
||||
func (ctrl *EthernetStatusController) Outputs() []controller.Output {
|
||||
return []controller.Output{
|
||||
{
|
||||
Type: network.EthernetStatusType,
|
||||
Kind: controller.OutputExclusive,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// Run implements controller.Controller interface.
|
||||
func (ctrl *EthernetStatusController) Run(ctx context.Context, r controller.Runtime, logger *zap.Logger) error {
|
||||
// wait for udevd to be healthy, which implies that all link renames are done
|
||||
if err := runtime.WaitForDevicesReady(ctx, r,
|
||||
[]controller.Input{
|
||||
{
|
||||
Namespace: network.NamespaceName,
|
||||
Type: network.LinkSpecType,
|
||||
Kind: controller.InputStrong,
|
||||
},
|
||||
},
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// create watch connections to ethtool via genetlink
|
||||
// these connections are used only to join multicast groups and receive notifications on changes
|
||||
// other connections are used to send requests and receive responses, as we can't mix the notifications and request/responses
|
||||
ethtoolWatcher, err := watch.NewEthtool(watch.NewDefaultRateLimitedTrigger(ctx, r))
|
||||
if err != nil {
|
||||
logger.Warn("ethtool watcher failed to start", zap.Error(err))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
defer ethtoolWatcher.Done()
|
||||
|
||||
ethClient, err := ethtool.New()
|
||||
if err != nil {
|
||||
logger.Warn("error dialing ethtool socket", zap.Error(err))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
defer ethClient.Close() //nolint:errcheck
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return nil
|
||||
case <-r.EventCh():
|
||||
}
|
||||
|
||||
r.StartTrackingOutputs()
|
||||
|
||||
if err = ctrl.reconcile(ctx, r, logger, ethClient); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = safe.CleanupOutputs[*network.EthernetStatus](ctx, r); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// reconcile function runs for every reconciliation loop querying the ethtool state and updating resources.
|
||||
//
|
||||
//nolint:gocyclo
|
||||
func (ctrl *EthernetStatusController) reconcile(
|
||||
ctx context.Context,
|
||||
r controller.Runtime,
|
||||
logger *zap.Logger,
|
||||
ethClient *ethtool.Client,
|
||||
) error {
|
||||
linkInfos, err := ethClient.LinkInfos()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error listing links: %w", err)
|
||||
}
|
||||
|
||||
for _, linkInfo := range linkInfos {
|
||||
iface := linkInfo.Interface
|
||||
|
||||
lgger := logger.With(zap.String("interface", iface.Name))
|
||||
|
||||
linkState, err := ethClient.LinkState(iface)
|
||||
if err != nil && !errors.Is(err, os.ErrNotExist) {
|
||||
lgger.Warn("error getting link state", zap.Error(err))
|
||||
}
|
||||
|
||||
linkMode, err := ethClient.LinkMode(iface)
|
||||
if err != nil && !errors.Is(err, os.ErrNotExist) {
|
||||
lgger.Warn("error getting link mode", zap.Error(err))
|
||||
}
|
||||
|
||||
rings, err := ethClient.Rings(iface)
|
||||
if err != nil && !errors.Is(err, os.ErrNotExist) {
|
||||
lgger.Warn("error getting rings", zap.Error(err))
|
||||
}
|
||||
|
||||
if err := safe.WriterModify(ctx, r, network.NewEthernetStatus(network.NamespaceName, iface.Name), func(res *network.EthernetStatus) error {
|
||||
res.TypedSpec().Port = nethelpers.Port(linkInfo.Port)
|
||||
|
||||
if linkMode != nil {
|
||||
res.TypedSpec().Duplex = nethelpers.Duplex(linkMode.Duplex)
|
||||
res.TypedSpec().OurModes = xslices.Map(linkMode.Ours, func(m ethtool.AdvertisedLinkMode) string { return m.Name })
|
||||
res.TypedSpec().PeerModes = xslices.Map(linkMode.Peer, func(m ethtool.AdvertisedLinkMode) string { return m.Name })
|
||||
} else {
|
||||
res.TypedSpec().Duplex = nethelpers.Duplex(0)
|
||||
}
|
||||
|
||||
if linkState == nil {
|
||||
res.TypedSpec().LinkState = nil
|
||||
} else {
|
||||
res.TypedSpec().LinkState = pointer.To(linkState.Link)
|
||||
}
|
||||
|
||||
if rings == nil {
|
||||
res.TypedSpec().Rings = nil
|
||||
} else {
|
||||
res.TypedSpec().Rings = &network.EthernetRingsStatus{
|
||||
RXMax: rings.RXMax.Ptr(),
|
||||
RXMiniMax: rings.RXMiniMax.Ptr(),
|
||||
RXJumboMax: rings.RXJumboMax.Ptr(),
|
||||
TXMax: rings.TXMax.Ptr(),
|
||||
TXPushBufLenMax: rings.TXPushBufLenMax.Ptr(),
|
||||
RX: rings.RX.Ptr(),
|
||||
RXMini: rings.RXMini.Ptr(),
|
||||
RXJumbo: rings.RXJumbo.Ptr(),
|
||||
TX: rings.TX.Ptr(),
|
||||
RXBufLen: rings.RXBufLen.Ptr(),
|
||||
CQESize: rings.CQESize.Ptr(),
|
||||
TXPush: rings.TXPush.Ptr(),
|
||||
RXPush: rings.RXPush.Ptr(),
|
||||
TXPushBufLen: rings.TXPushBufLen.Ptr(),
|
||||
TCPDataSplit: rings.TCPDataSplit.Ptr(),
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}); err != nil {
|
||||
return fmt.Errorf("error updating EthernetStatus resource: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -257,7 +257,7 @@ func (m *Metal) NetworkConfiguration(ctx context.Context, st state.State, ch cha
|
||||
switch event.Type {
|
||||
case state.Errored:
|
||||
return fmt.Errorf("watch failed: %w", event.Error)
|
||||
case state.Bootstrapped:
|
||||
case state.Bootstrapped, state.Noop:
|
||||
// ignored, should not happen
|
||||
case state.Created, state.Updated:
|
||||
switch r := event.Resource.(type) {
|
||||
|
||||
@ -65,7 +65,7 @@ waitLoop:
|
||||
switch ev.Type {
|
||||
case state.Errored:
|
||||
return nil, fmt.Errorf("error watching variables: %w", ev.Error)
|
||||
case state.Bootstrapped:
|
||||
case state.Bootstrapped, state.Noop:
|
||||
// ignored
|
||||
case state.Created, state.Updated, state.Destroyed:
|
||||
for _, variable := range activeVariables {
|
||||
|
||||
@ -77,7 +77,7 @@ func PopulateVariables(ctx context.Context, downloadURL string, st state.State,
|
||||
switch ev.Type {
|
||||
case state.Errored:
|
||||
return "", fmt.Errorf("error watching variables: %w", ev.Error)
|
||||
case state.Bootstrapped:
|
||||
case state.Bootstrapped, state.Noop:
|
||||
// ignored
|
||||
case state.Created, state.Updated, state.Destroyed:
|
||||
anyHandled := false
|
||||
|
||||
@ -2061,7 +2061,7 @@ func WaitForCARoots(runtime.Sequence, any) (runtime.TaskExecutionFunc, string) {
|
||||
switch e.Type {
|
||||
case state.Errored:
|
||||
return e.Error
|
||||
case state.Bootstrapped, state.Destroyed: // ignore
|
||||
case state.Bootstrapped, state.Destroyed, state.Noop: // ignore
|
||||
case state.Created, state.Updated:
|
||||
switch res := e.Resource.(type) {
|
||||
case *resourcefiles.EtcFileSpec:
|
||||
|
||||
@ -237,6 +237,9 @@ func (ctrl *Controller) Run(ctx context.Context, drainer *runtime.Drainer) error
|
||||
PodResolvConfPath: constants.PodResolvConfPath,
|
||||
V1Alpha1Mode: ctrl.v1alpha1Runtime.State().Platform().Mode(),
|
||||
},
|
||||
&network.EthernetConfigController{},
|
||||
&network.EthernetSpecController{},
|
||||
&network.EthernetStatusController{},
|
||||
&network.HardwareAddrController{},
|
||||
&network.HostDNSConfigController{},
|
||||
&network.HostnameConfigController{
|
||||
|
||||
@ -168,6 +168,8 @@ func NewState() (*State, error) {
|
||||
&network.DeviceConfigSpec{},
|
||||
&network.DNSResolveCache{},
|
||||
&network.DNSUpstream{},
|
||||
&network.EthernetSpec{},
|
||||
&network.EthernetStatus{},
|
||||
&network.HardwareAddr{},
|
||||
&network.HostDNSConfig{},
|
||||
&network.HostnameStatus{},
|
||||
|
||||
@ -53,7 +53,7 @@ func NewTLSConfig(ctx context.Context, resources state.State) (*TLSConfig, error
|
||||
switch event.Type {
|
||||
case state.Created, state.Updated:
|
||||
// expected
|
||||
case state.Destroyed, state.Bootstrapped:
|
||||
case state.Destroyed, state.Bootstrapped, state.Noop:
|
||||
// ignore, we'll get another event
|
||||
continue
|
||||
case state.Errored:
|
||||
@ -87,7 +87,7 @@ func (tlsConfig *TLSConfig) Watch(ctx context.Context) error {
|
||||
switch event.Type {
|
||||
case state.Created, state.Updated:
|
||||
// expected
|
||||
case state.Destroyed, state.Bootstrapped:
|
||||
case state.Destroyed, state.Bootstrapped, state.Noop:
|
||||
// ignore, we'll get another event
|
||||
continue
|
||||
case state.Errored:
|
||||
|
||||
132
internal/integration/api/ethernet.go
Normal file
132
internal/integration/api/ethernet.go
Normal file
@ -0,0 +1,132 @@
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
//go:build integration_api
|
||||
|
||||
package api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/cosi-project/runtime/pkg/resource"
|
||||
"github.com/cosi-project/runtime/pkg/resource/rtestutils"
|
||||
"github.com/cosi-project/runtime/pkg/safe"
|
||||
"github.com/siderolabs/go-pointer"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"gopkg.in/yaml.v3"
|
||||
|
||||
"github.com/siderolabs/talos/internal/integration/base"
|
||||
"github.com/siderolabs/talos/pkg/machinery/client"
|
||||
networkconfig "github.com/siderolabs/talos/pkg/machinery/config/types/network"
|
||||
"github.com/siderolabs/talos/pkg/machinery/resources/network"
|
||||
)
|
||||
|
||||
// EthernetSuite ...
|
||||
type EthernetSuite struct {
|
||||
base.APISuite
|
||||
|
||||
ctx context.Context //nolint:containedctx
|
||||
ctxCancel context.CancelFunc
|
||||
}
|
||||
|
||||
// SuiteName ...
|
||||
func (suite *EthernetSuite) SuiteName() string {
|
||||
return "api.EthernetSuite"
|
||||
}
|
||||
|
||||
// SetupTest ...
|
||||
func (suite *EthernetSuite) SetupTest() {
|
||||
suite.ctx, suite.ctxCancel = context.WithTimeout(context.Background(), 1*time.Minute)
|
||||
|
||||
if suite.Cluster == nil || suite.Cluster.Provisioner() != base.ProvisionerQEMU {
|
||||
suite.T().Skip("skipping ethernet test since provisioner is not qemu")
|
||||
}
|
||||
}
|
||||
|
||||
// TearDownTest ...
|
||||
func (suite *EthernetSuite) TearDownTest() {
|
||||
if suite.ctxCancel != nil {
|
||||
suite.ctxCancel()
|
||||
}
|
||||
}
|
||||
|
||||
// TestEthernetConfig verifies changing Ethernet settings.
|
||||
func (suite *EthernetSuite) TestEthernetConfig() {
|
||||
// pick up a random node to test the Ethernet on, and use it throughout the test
|
||||
node := suite.RandomDiscoveredNodeInternalIP()
|
||||
|
||||
suite.T().Logf("testing Ethernet on node %s", node)
|
||||
|
||||
// build a Talos API context which is tied to the node
|
||||
nodeCtx := client.WithNode(suite.ctx, node)
|
||||
|
||||
// pick a Ethernet links
|
||||
ethStatuses, err := safe.StateListAll[*network.EthernetStatus](nodeCtx, suite.Client.COSI)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
var (
|
||||
linkName string
|
||||
prevRingConfig *network.EthernetRingsStatus
|
||||
)
|
||||
|
||||
for ethStatus := range ethStatuses.All() {
|
||||
if ethStatus.TypedSpec().Rings != nil && ethStatus.TypedSpec().Rings.RXMax != nil {
|
||||
linkName = ethStatus.Metadata().ID()
|
||||
prevRingConfig = ethStatus.TypedSpec().Rings
|
||||
|
||||
marshaled, err := resource.MarshalYAML(ethStatus)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
out, err := yaml.Marshal(marshaled)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
suite.T().Logf("found link %s with: %s", linkName, string(out))
|
||||
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
suite.Require().NotEmpty(linkName, "no link provides RX rings")
|
||||
|
||||
if os.Getenv("CI") != "" {
|
||||
suite.T().Skip("skipping ethtool test in CI, as QEMU version doesn't support updating RX rings for virtio")
|
||||
}
|
||||
|
||||
// first, adjust RX rings to be 50% of what it was before
|
||||
newRX := pointer.SafeDeref(prevRingConfig.RXMax) / 2
|
||||
|
||||
cfgDocument := networkconfig.NewEthernetConfigV1Alpha1(linkName)
|
||||
cfgDocument.RingsConfig = &networkconfig.EthernetRingsConfig{
|
||||
RX: pointer.To(newRX),
|
||||
}
|
||||
suite.PatchMachineConfig(nodeCtx, cfgDocument)
|
||||
|
||||
// now EthernetStatus should reflect the new RX rings
|
||||
rtestutils.AssertResource(nodeCtx, suite.T(), suite.Client.COSI, linkName,
|
||||
func(ethStatus *network.EthernetStatus, asrt *assert.Assertions) {
|
||||
asrt.Equal(newRX, pointer.SafeDeref(ethStatus.TypedSpec().Rings.RX))
|
||||
},
|
||||
)
|
||||
|
||||
// now, let's revert the RX rings to what it was before
|
||||
cfgDocument.RingsConfig.RX = prevRingConfig.RX
|
||||
|
||||
suite.PatchMachineConfig(nodeCtx, cfgDocument)
|
||||
|
||||
// now EthernetStatus should reflect the new RX rings
|
||||
rtestutils.AssertResource(nodeCtx, suite.T(), suite.Client.COSI, linkName,
|
||||
func(ethStatus *network.EthernetStatus, asrt *assert.Assertions) {
|
||||
asrt.Equal(pointer.SafeDeref(prevRingConfig.RX), pointer.SafeDeref(ethStatus.TypedSpec().Rings.RX))
|
||||
},
|
||||
)
|
||||
|
||||
// remove the config document
|
||||
suite.RemoveMachineConfigDocuments(nodeCtx, cfgDocument.MetaKind)
|
||||
}
|
||||
|
||||
func init() {
|
||||
allSuites = append(allSuites, new(EthernetSuite))
|
||||
}
|
||||
@ -152,7 +152,7 @@ func (source *Source) runResourceWatch(ctx context.Context, node string) error {
|
||||
switch event.Type {
|
||||
case state.Errored:
|
||||
return fmt.Errorf("watch failed: %w", event.Error)
|
||||
case state.Bootstrapped:
|
||||
case state.Bootstrapped, state.Noop:
|
||||
// ignored
|
||||
case state.Created, state.Updated:
|
||||
if !channel.SendWithContext(ctx, source.ch, Data{
|
||||
|
||||
@ -79,7 +79,7 @@ func AllNodesBootedAssertion(ctx context.Context, cluster ClusterInfo) error {
|
||||
}
|
||||
|
||||
nodeStages[ev.node] = machineStatus.TypedSpec().Stage
|
||||
case state.Destroyed, state.Bootstrapped:
|
||||
case state.Destroyed, state.Bootstrapped, state.Noop:
|
||||
// nothing
|
||||
case state.Errored:
|
||||
return fmt.Errorf("error watching machine %s status: %w", ev.node, ev.event.Error)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -18,4 +18,5 @@ type Config interface { //nolint:interfacebloat
|
||||
Volumes() VolumesConfig
|
||||
KubespanConfig() KubespanConfig
|
||||
PCIDriverRebindConfig() PCIDriverRebindConfig
|
||||
EthernetConfigs() []EthernetConfig
|
||||
}
|
||||
|
||||
@ -64,3 +64,23 @@ func (w networkRuleConfigWrapper) Rules() []NetworkRule {
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// EthernetConfig defines a network interface configuration.
|
||||
type EthernetConfig interface {
|
||||
NamedDocument
|
||||
Rings() EthernetRingsConfig
|
||||
}
|
||||
|
||||
// EthernetRingsConfig defines a configuration for Ethernet link rings.
|
||||
type EthernetRingsConfig struct {
|
||||
RX *uint32
|
||||
TX *uint32
|
||||
RXMini *uint32
|
||||
RXJumbo *uint32
|
||||
RXBufLen *uint32
|
||||
CQESize *uint32
|
||||
TXPush *bool
|
||||
RXPush *bool
|
||||
TXPushBufLen *uint32
|
||||
TCPDataSplit *bool
|
||||
}
|
||||
|
||||
@ -215,6 +215,11 @@ func (container *Container) PCIDriverRebindConfig() config.PCIDriverRebindConfig
|
||||
return config.WrapPCIDriverRebindConfig(findMatchingDocs[config.PCIDriverRebindConfig](container.documents)...)
|
||||
}
|
||||
|
||||
// EthernetConfigs implements config.Config interface.
|
||||
func (container *Container) EthernetConfigs() []config.EthernetConfig {
|
||||
return findMatchingDocs[config.EthernetConfig](container.documents)
|
||||
}
|
||||
|
||||
// Bytes returns source YAML representation (if available) or does default encoding.
|
||||
func (container *Container) Bytes() ([]byte, error) {
|
||||
if !container.readonly {
|
||||
|
||||
@ -249,6 +249,125 @@
|
||||
"kind"
|
||||
]
|
||||
},
|
||||
"network.EthernetConfigV1Alpha1": {
|
||||
"properties": {
|
||||
"apiVersion": {
|
||||
"enum": [
|
||||
"v1alpha1"
|
||||
],
|
||||
"title": "apiVersion",
|
||||
"description": "apiVersion is the API version of the resource.\n",
|
||||
"markdownDescription": "apiVersion is the API version of the resource.",
|
||||
"x-intellij-html-description": "\u003cp\u003eapiVersion is the API version of the resource.\u003c/p\u003e\n"
|
||||
},
|
||||
"kind": {
|
||||
"enum": [
|
||||
"EthernetConfig"
|
||||
],
|
||||
"title": "kind",
|
||||
"description": "kind is the kind of the resource.\n",
|
||||
"markdownDescription": "kind is the kind of the resource.",
|
||||
"x-intellij-html-description": "\u003cp\u003ekind is the kind of the resource.\u003c/p\u003e\n"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"title": "name",
|
||||
"description": "Name of the link (interface).\n",
|
||||
"markdownDescription": "Name of the link (interface).",
|
||||
"x-intellij-html-description": "\u003cp\u003eName of the link (interface).\u003c/p\u003e\n"
|
||||
},
|
||||
"rings": {
|
||||
"$ref": "#/$defs/network.EthernetRingsConfig",
|
||||
"title": "rings",
|
||||
"description": "Configuration for Ethernet link rings.\n\nThis is similar to ethtool -G command.\n",
|
||||
"markdownDescription": "Configuration for Ethernet link rings.\n\nThis is similar to `ethtool -G` command.",
|
||||
"x-intellij-html-description": "\u003cp\u003eConfiguration for Ethernet link rings.\u003c/p\u003e\n\n\u003cp\u003eThis is similar to \u003ccode\u003eethtool -G\u003c/code\u003e command.\u003c/p\u003e\n"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"type": "object",
|
||||
"required": [
|
||||
"apiVersion",
|
||||
"kind",
|
||||
"name"
|
||||
]
|
||||
},
|
||||
"network.EthernetRingsConfig": {
|
||||
"properties": {
|
||||
"rx": {
|
||||
"type": "integer",
|
||||
"title": "rx",
|
||||
"description": "Number of RX rings.\n",
|
||||
"markdownDescription": "Number of RX rings.",
|
||||
"x-intellij-html-description": "\u003cp\u003eNumber of RX rings.\u003c/p\u003e\n"
|
||||
},
|
||||
"tx": {
|
||||
"type": "integer",
|
||||
"title": "tx",
|
||||
"description": "Number of TX rings.\n",
|
||||
"markdownDescription": "Number of TX rings.",
|
||||
"x-intellij-html-description": "\u003cp\u003eNumber of TX rings.\u003c/p\u003e\n"
|
||||
},
|
||||
"rx-mini": {
|
||||
"type": "integer",
|
||||
"title": "rx-mini",
|
||||
"description": "Number of RX mini rings.\n",
|
||||
"markdownDescription": "Number of RX mini rings.",
|
||||
"x-intellij-html-description": "\u003cp\u003eNumber of RX mini rings.\u003c/p\u003e\n"
|
||||
},
|
||||
"rx-jumbo": {
|
||||
"type": "integer",
|
||||
"title": "rx-jumbo",
|
||||
"description": "Number of RX jumbo rings.\n",
|
||||
"markdownDescription": "Number of RX jumbo rings.",
|
||||
"x-intellij-html-description": "\u003cp\u003eNumber of RX jumbo rings.\u003c/p\u003e\n"
|
||||
},
|
||||
"rx-buf-len": {
|
||||
"type": "integer",
|
||||
"title": "rx-buf-len",
|
||||
"description": "RX buffer length.\n",
|
||||
"markdownDescription": "RX buffer length.",
|
||||
"x-intellij-html-description": "\u003cp\u003eRX buffer length.\u003c/p\u003e\n"
|
||||
},
|
||||
"cqe-size": {
|
||||
"type": "integer",
|
||||
"title": "cqe-size",
|
||||
"description": "CQE size.\n",
|
||||
"markdownDescription": "CQE size.",
|
||||
"x-intellij-html-description": "\u003cp\u003eCQE size.\u003c/p\u003e\n"
|
||||
},
|
||||
"tx-push": {
|
||||
"type": "boolean",
|
||||
"title": "tx-push",
|
||||
"description": "TX push enabled.\n",
|
||||
"markdownDescription": "TX push enabled.",
|
||||
"x-intellij-html-description": "\u003cp\u003eTX push enabled.\u003c/p\u003e\n"
|
||||
},
|
||||
"rx-push": {
|
||||
"type": "boolean",
|
||||
"title": "rx-push",
|
||||
"description": "RX push enabled.\n",
|
||||
"markdownDescription": "RX push enabled.",
|
||||
"x-intellij-html-description": "\u003cp\u003eRX push enabled.\u003c/p\u003e\n"
|
||||
},
|
||||
"tx-push-buf-len": {
|
||||
"type": "integer",
|
||||
"title": "tx-push-buf-len",
|
||||
"description": "TX push buffer length.\n",
|
||||
"markdownDescription": "TX push buffer length.",
|
||||
"x-intellij-html-description": "\u003cp\u003eTX push buffer length.\u003c/p\u003e\n"
|
||||
},
|
||||
"tcp-data-split": {
|
||||
"type": "boolean",
|
||||
"title": "tcp-data-split",
|
||||
"description": "TCP data split enabled.\n",
|
||||
"markdownDescription": "TCP data split enabled.",
|
||||
"x-intellij-html-description": "\u003cp\u003eTCP data split enabled.\u003c/p\u003e\n"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"type": "object"
|
||||
},
|
||||
"network.IngressRule": {
|
||||
"properties": {
|
||||
"subnet": {
|
||||
@ -3769,6 +3888,9 @@
|
||||
{
|
||||
"$ref": "#/$defs/network.DefaultActionConfigV1Alpha1"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/network.EthernetConfigV1Alpha1"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/network.KubespanEndpointsConfigV1Alpha1"
|
||||
},
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
// Code generated by "deep-copy -type DefaultActionConfigV1Alpha1 -type KubespanEndpointsConfigV1Alpha1 -type RuleConfigV1Alpha1 -pointer-receiver -header-file ../../../../../hack/boilerplate.txt -o deep_copy.generated.go ."; DO NOT EDIT.
|
||||
// Code generated by "deep-copy -type DefaultActionConfigV1Alpha1 -type KubespanEndpointsConfigV1Alpha1 -type EthernetConfigV1Alpha1 -type RuleConfigV1Alpha1 -pointer-receiver -header-file ../../../../../hack/boilerplate.txt -o deep_copy.generated.go ."; DO NOT EDIT.
|
||||
|
||||
package network
|
||||
|
||||
@ -26,6 +26,56 @@ func (o *KubespanEndpointsConfigV1Alpha1) DeepCopy() *KubespanEndpointsConfigV1A
|
||||
return &cp
|
||||
}
|
||||
|
||||
// DeepCopy generates a deep copy of *EthernetConfigV1Alpha1.
|
||||
func (o *EthernetConfigV1Alpha1) DeepCopy() *EthernetConfigV1Alpha1 {
|
||||
var cp EthernetConfigV1Alpha1 = *o
|
||||
if o.RingsConfig != nil {
|
||||
cp.RingsConfig = new(EthernetRingsConfig)
|
||||
*cp.RingsConfig = *o.RingsConfig
|
||||
if o.RingsConfig.RX != nil {
|
||||
cp.RingsConfig.RX = new(uint32)
|
||||
*cp.RingsConfig.RX = *o.RingsConfig.RX
|
||||
}
|
||||
if o.RingsConfig.TX != nil {
|
||||
cp.RingsConfig.TX = new(uint32)
|
||||
*cp.RingsConfig.TX = *o.RingsConfig.TX
|
||||
}
|
||||
if o.RingsConfig.RXMini != nil {
|
||||
cp.RingsConfig.RXMini = new(uint32)
|
||||
*cp.RingsConfig.RXMini = *o.RingsConfig.RXMini
|
||||
}
|
||||
if o.RingsConfig.RXJumbo != nil {
|
||||
cp.RingsConfig.RXJumbo = new(uint32)
|
||||
*cp.RingsConfig.RXJumbo = *o.RingsConfig.RXJumbo
|
||||
}
|
||||
if o.RingsConfig.RXBufLen != nil {
|
||||
cp.RingsConfig.RXBufLen = new(uint32)
|
||||
*cp.RingsConfig.RXBufLen = *o.RingsConfig.RXBufLen
|
||||
}
|
||||
if o.RingsConfig.CQESize != nil {
|
||||
cp.RingsConfig.CQESize = new(uint32)
|
||||
*cp.RingsConfig.CQESize = *o.RingsConfig.CQESize
|
||||
}
|
||||
if o.RingsConfig.TXPush != nil {
|
||||
cp.RingsConfig.TXPush = new(bool)
|
||||
*cp.RingsConfig.TXPush = *o.RingsConfig.TXPush
|
||||
}
|
||||
if o.RingsConfig.RXPush != nil {
|
||||
cp.RingsConfig.RXPush = new(bool)
|
||||
*cp.RingsConfig.RXPush = *o.RingsConfig.RXPush
|
||||
}
|
||||
if o.RingsConfig.TXPushBufLen != nil {
|
||||
cp.RingsConfig.TXPushBufLen = new(uint32)
|
||||
*cp.RingsConfig.TXPushBufLen = *o.RingsConfig.TXPushBufLen
|
||||
}
|
||||
if o.RingsConfig.TCPDataSplit != nil {
|
||||
cp.RingsConfig.TCPDataSplit = new(bool)
|
||||
*cp.RingsConfig.TCPDataSplit = *o.RingsConfig.TCPDataSplit
|
||||
}
|
||||
}
|
||||
return &cp
|
||||
}
|
||||
|
||||
// DeepCopy generates a deep copy of *RuleConfigV1Alpha1.
|
||||
func (o *RuleConfigV1Alpha1) DeepCopy() *RuleConfigV1Alpha1 {
|
||||
var cp RuleConfigV1Alpha1 = *o
|
||||
|
||||
124
pkg/machinery/config/types/network/ethernet.go
Normal file
124
pkg/machinery/config/types/network/ethernet.go
Normal file
@ -0,0 +1,124 @@
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
package network
|
||||
|
||||
//docgen:jsonschema
|
||||
|
||||
import (
|
||||
"github.com/siderolabs/go-pointer"
|
||||
|
||||
"github.com/siderolabs/talos/pkg/machinery/config/config"
|
||||
"github.com/siderolabs/talos/pkg/machinery/config/internal/registry"
|
||||
"github.com/siderolabs/talos/pkg/machinery/config/types/meta"
|
||||
)
|
||||
|
||||
// EthernetKind is a Ethernet config document kind.
|
||||
const EthernetKind = "EthernetConfig"
|
||||
|
||||
func init() {
|
||||
registry.Register(EthernetKind, func(version string) config.Document {
|
||||
switch version {
|
||||
case "v1alpha1":
|
||||
return &EthernetConfigV1Alpha1{}
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Check interfaces.
|
||||
var (
|
||||
_ config.EthernetConfig = &EthernetConfigV1Alpha1{}
|
||||
_ config.NamedDocument = &EthernetConfigV1Alpha1{}
|
||||
)
|
||||
|
||||
// EthernetConfigV1Alpha1 is a config document to configure Ethernet interfaces.
|
||||
//
|
||||
// examples:
|
||||
// - value: exampleEthernetConfigV1Alpha1()
|
||||
// alias: EthernetConfig
|
||||
// schemaRoot: true
|
||||
// schemaMeta: v1alpha1/EthernetConfig
|
||||
type EthernetConfigV1Alpha1 struct {
|
||||
meta.Meta `yaml:",inline"`
|
||||
// description: |
|
||||
// Name of the link (interface).
|
||||
// schemaRequired: true
|
||||
MetaName string `yaml:"name"`
|
||||
// description: |
|
||||
// Configuration for Ethernet link rings.
|
||||
//
|
||||
// This is similar to `ethtool -G` command.
|
||||
RingsConfig *EthernetRingsConfig `yaml:"rings,omitempty"`
|
||||
}
|
||||
|
||||
// EthernetRingsConfig is a configuration for Ethernet link rings.
|
||||
type EthernetRingsConfig struct {
|
||||
// description: |
|
||||
// Number of RX rings.
|
||||
RX *uint32 `yaml:"rx,omitempty"`
|
||||
// description: |
|
||||
// Number of TX rings.
|
||||
TX *uint32 `yaml:"tx,omitempty"`
|
||||
// description: |
|
||||
// Number of RX mini rings.
|
||||
RXMini *uint32 `yaml:"rx-mini,omitempty"`
|
||||
// description: |
|
||||
// Number of RX jumbo rings.
|
||||
RXJumbo *uint32 `yaml:"rx-jumbo,omitempty"`
|
||||
// description: |
|
||||
// RX buffer length.
|
||||
RXBufLen *uint32 `yaml:"rx-buf-len,omitempty"`
|
||||
// description: |
|
||||
// CQE size.
|
||||
CQESize *uint32 `yaml:"cqe-size,omitempty"`
|
||||
// description: |
|
||||
// TX push enabled.
|
||||
TXPush *bool `yaml:"tx-push,omitempty"`
|
||||
// description: |
|
||||
// RX push enabled.
|
||||
RXPush *bool `yaml:"rx-push,omitempty"`
|
||||
// description: |
|
||||
// TX push buffer length.
|
||||
TXPushBufLen *uint32 `yaml:"tx-push-buf-len,omitempty"`
|
||||
// description: |
|
||||
// TCP data split enabled.
|
||||
TCPDataSplit *bool `yaml:"tcp-data-split,omitempty"`
|
||||
}
|
||||
|
||||
// NewEthernetConfigV1Alpha1 creates a new EthernetConfig config document.
|
||||
func NewEthernetConfigV1Alpha1(name string) *EthernetConfigV1Alpha1 {
|
||||
return &EthernetConfigV1Alpha1{
|
||||
Meta: meta.Meta{
|
||||
MetaKind: EthernetKind,
|
||||
MetaAPIVersion: "v1alpha1",
|
||||
},
|
||||
MetaName: name,
|
||||
}
|
||||
}
|
||||
|
||||
func exampleEthernetConfigV1Alpha1() *EthernetConfigV1Alpha1 {
|
||||
cfg := NewEthernetConfigV1Alpha1("enp0s2")
|
||||
cfg.RingsConfig = &EthernetRingsConfig{
|
||||
RX: pointer.To[uint32](256),
|
||||
}
|
||||
|
||||
return cfg
|
||||
}
|
||||
|
||||
// Clone implements config.Document interface.
|
||||
func (s *EthernetConfigV1Alpha1) Clone() config.Document {
|
||||
return s.DeepCopy()
|
||||
}
|
||||
|
||||
// Name implements config.NamedDocument interface.
|
||||
func (s *EthernetConfigV1Alpha1) Name() string {
|
||||
return s.MetaName
|
||||
}
|
||||
|
||||
// Rings implements config.EthernetConfig interface.
|
||||
func (s *EthernetConfigV1Alpha1) Rings() config.EthernetRingsConfig {
|
||||
return config.EthernetRingsConfig(pointer.SafeDeref(s.RingsConfig))
|
||||
}
|
||||
59
pkg/machinery/config/types/network/ethernet_test.go
Normal file
59
pkg/machinery/config/types/network/ethernet_test.go
Normal file
@ -0,0 +1,59 @@
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
package network_test
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"testing"
|
||||
|
||||
"github.com/siderolabs/go-pointer"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/siderolabs/talos/pkg/machinery/config/configloader"
|
||||
"github.com/siderolabs/talos/pkg/machinery/config/encoder"
|
||||
"github.com/siderolabs/talos/pkg/machinery/config/types/meta"
|
||||
"github.com/siderolabs/talos/pkg/machinery/config/types/network"
|
||||
)
|
||||
|
||||
//go:embed testdata/ethernetconfig.yaml
|
||||
var expectedEthernetConfigDocument []byte
|
||||
|
||||
func TestEthernetConfigMarshalStability(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
cfg := network.NewEthernetConfigV1Alpha1("enp0s1")
|
||||
cfg.RingsConfig = &network.EthernetRingsConfig{
|
||||
RX: pointer.To[uint32](16),
|
||||
}
|
||||
|
||||
marshaled, err := encoder.NewEncoder(cfg, encoder.WithComments(encoder.CommentsDisabled)).Encode()
|
||||
require.NoError(t, err)
|
||||
|
||||
t.Log(string(marshaled))
|
||||
|
||||
assert.Equal(t, expectedEthernetConfigDocument, marshaled)
|
||||
}
|
||||
|
||||
func TestEthernetConfigUnmarshal(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
provider, err := configloader.NewFromBytes(expectedEthernetConfigDocument)
|
||||
require.NoError(t, err)
|
||||
|
||||
docs := provider.Documents()
|
||||
require.Len(t, docs, 1)
|
||||
|
||||
assert.Equal(t, &network.EthernetConfigV1Alpha1{
|
||||
Meta: meta.Meta{
|
||||
MetaAPIVersion: "v1alpha1",
|
||||
MetaKind: network.EthernetKind,
|
||||
},
|
||||
MetaName: "enp0s1",
|
||||
RingsConfig: &network.EthernetRingsConfig{
|
||||
RX: pointer.To[uint32](16),
|
||||
},
|
||||
}, docs[0])
|
||||
}
|
||||
@ -5,6 +5,6 @@
|
||||
// Package network provides network machine configuration documents.
|
||||
package network
|
||||
|
||||
//go:generate docgen -output network_doc.go network.go default_action_config.go kubespan_endpoints.go port_range.go rule_config.go
|
||||
//go:generate docgen -output network_doc.go network.go default_action_config.go ethernet.go kubespan_endpoints.go port_range.go rule_config.go
|
||||
|
||||
//go:generate deep-copy -type DefaultActionConfigV1Alpha1 -type KubespanEndpointsConfigV1Alpha1 -type RuleConfigV1Alpha1 -pointer-receiver -header-file ../../../../../hack/boilerplate.txt -o deep_copy.generated.go .
|
||||
//go:generate deep-copy -type DefaultActionConfigV1Alpha1 -type KubespanEndpointsConfigV1Alpha1 -type EthernetConfigV1Alpha1 -type RuleConfigV1Alpha1 -pointer-receiver -header-file ../../../../../hack/boilerplate.txt -o deep_copy.generated.go .
|
||||
|
||||
@ -37,6 +37,123 @@ func (DefaultActionConfigV1Alpha1) Doc() *encoder.Doc {
|
||||
return doc
|
||||
}
|
||||
|
||||
func (EthernetConfigV1Alpha1) Doc() *encoder.Doc {
|
||||
doc := &encoder.Doc{
|
||||
Type: "EthernetConfig",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "EthernetConfig is a config document to configure Ethernet interfaces." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
Description: "EthernetConfig is a config document to configure Ethernet interfaces.",
|
||||
Fields: []encoder.Doc{
|
||||
{},
|
||||
{
|
||||
Name: "name",
|
||||
Type: "string",
|
||||
Note: "",
|
||||
Description: "Name of the link (interface).",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "Name of the link (interface)." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
},
|
||||
{
|
||||
Name: "rings",
|
||||
Type: "EthernetRingsConfig",
|
||||
Note: "",
|
||||
Description: "Configuration for Ethernet link rings.\n\nThis is similar to `ethtool -G` command.",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "Configuration for Ethernet link rings." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
doc.AddExample("", exampleEthernetConfigV1Alpha1())
|
||||
|
||||
return doc
|
||||
}
|
||||
|
||||
func (EthernetRingsConfig) Doc() *encoder.Doc {
|
||||
doc := &encoder.Doc{
|
||||
Type: "EthernetRingsConfig",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "EthernetRingsConfig is a configuration for Ethernet link rings." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
Description: "EthernetRingsConfig is a configuration for Ethernet link rings.",
|
||||
AppearsIn: []encoder.Appearance{
|
||||
{
|
||||
TypeName: "EthernetConfigV1Alpha1",
|
||||
FieldName: "rings",
|
||||
},
|
||||
},
|
||||
Fields: []encoder.Doc{
|
||||
{
|
||||
Name: "rx",
|
||||
Type: "uint32",
|
||||
Note: "",
|
||||
Description: "Number of RX rings.",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "Number of RX rings." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
},
|
||||
{
|
||||
Name: "tx",
|
||||
Type: "uint32",
|
||||
Note: "",
|
||||
Description: "Number of TX rings.",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "Number of TX rings." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
},
|
||||
{
|
||||
Name: "rx-mini",
|
||||
Type: "uint32",
|
||||
Note: "",
|
||||
Description: "Number of RX mini rings.",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "Number of RX mini rings." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
},
|
||||
{
|
||||
Name: "rx-jumbo",
|
||||
Type: "uint32",
|
||||
Note: "",
|
||||
Description: "Number of RX jumbo rings.",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "Number of RX jumbo rings." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
},
|
||||
{
|
||||
Name: "rx-buf-len",
|
||||
Type: "uint32",
|
||||
Note: "",
|
||||
Description: "RX buffer length.",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "RX buffer length." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
},
|
||||
{
|
||||
Name: "cqe-size",
|
||||
Type: "uint32",
|
||||
Note: "",
|
||||
Description: "CQE size.",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "CQE size." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
},
|
||||
{
|
||||
Name: "tx-push",
|
||||
Type: "bool",
|
||||
Note: "",
|
||||
Description: "TX push enabled.",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "TX push enabled." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
},
|
||||
{
|
||||
Name: "rx-push",
|
||||
Type: "bool",
|
||||
Note: "",
|
||||
Description: "RX push enabled.",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "RX push enabled." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
},
|
||||
{
|
||||
Name: "tx-push-buf-len",
|
||||
Type: "uint32",
|
||||
Note: "",
|
||||
Description: "TX push buffer length.",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "TX push buffer length." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
},
|
||||
{
|
||||
Name: "tcp-data-split",
|
||||
Type: "bool",
|
||||
Note: "",
|
||||
Description: "TCP data split enabled.",
|
||||
Comments: [3]string{"" /* encoder.HeadComment */, "TCP data split enabled." /* encoder.LineComment */, "" /* encoder.FootComment */},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return doc
|
||||
}
|
||||
|
||||
func (KubespanEndpointsConfigV1Alpha1) Doc() *encoder.Doc {
|
||||
doc := &encoder.Doc{
|
||||
Type: "KubeSpanEndpointsConfig",
|
||||
@ -178,6 +295,8 @@ func GetFileDoc() *encoder.FileDoc {
|
||||
Description: "Package network provides network machine configuration documents.\n",
|
||||
Structs: []*encoder.Doc{
|
||||
DefaultActionConfigV1Alpha1{}.Doc(),
|
||||
EthernetConfigV1Alpha1{}.Doc(),
|
||||
EthernetRingsConfig{}.Doc(),
|
||||
KubespanEndpointsConfigV1Alpha1{}.Doc(),
|
||||
RuleConfigV1Alpha1{}.Doc(),
|
||||
RulePortSelector{}.Doc(),
|
||||
|
||||
5
pkg/machinery/config/types/network/testdata/ethernetconfig.yaml
vendored
Normal file
5
pkg/machinery/config/types/network/testdata/ethernetconfig.yaml
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
apiVersion: v1alpha1
|
||||
kind: EthernetConfig
|
||||
name: enp0s1
|
||||
rings:
|
||||
rx: 16
|
||||
@ -1,21 +1,26 @@
|
||||
module github.com/siderolabs/talos/pkg/machinery
|
||||
|
||||
go 1.23.3
|
||||
go 1.23.5
|
||||
|
||||
// forked go-yaml that introduces RawYAML interface, which can be used to populate YAML fields using bytes
|
||||
// which are then encoded as a valid YAML blocks with proper indentiation
|
||||
replace gopkg.in/yaml.v3 => github.com/unix4ever/yaml v0.0.0-20220527175918-f17b0f05cf2c
|
||||
replace (
|
||||
// forked ethtool introduces missing APIs
|
||||
github.com/mdlayher/ethtool => github.com/siderolabs/ethtool v0.0.0-20250204161245-ee04fc1b1856
|
||||
|
||||
// forked go-yaml that introduces RawYAML interface, which can be used to populate YAML fields using bytes
|
||||
// which are then encoded as a valid YAML blocks with proper indentiation
|
||||
gopkg.in/yaml.v3 => github.com/unix4ever/yaml v0.0.0-20220527175918-f17b0f05cf2c
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/blang/semver/v4 v4.0.0
|
||||
github.com/containerd/go-cni v1.1.11
|
||||
github.com/cosi-project/runtime v0.8.1
|
||||
github.com/containerd/go-cni v1.1.12
|
||||
github.com/cosi-project/runtime v0.9.2
|
||||
github.com/dustin/go-humanize v1.0.1
|
||||
github.com/emicklei/dot v1.6.4
|
||||
github.com/evanphx/json-patch v5.9.0+incompatible
|
||||
github.com/evanphx/json-patch v5.9.11+incompatible
|
||||
github.com/fatih/color v1.18.0
|
||||
github.com/ghodss/yaml v1.0.0
|
||||
github.com/google/cel-go v0.22.1
|
||||
github.com/google/cel-go v0.23.2
|
||||
github.com/hashicorp/go-multierror v1.1.1
|
||||
github.com/hexops/gotextdiff v1.0.3
|
||||
github.com/jsimonetti/rtnetlink/v2 v2.0.3-0.20241216183107-2d6e9f8ad3f2
|
||||
@ -30,21 +35,21 @@ require (
|
||||
github.com/siderolabs/go-blockdevice/v2 v2.0.13
|
||||
github.com/siderolabs/go-pointer v1.0.0
|
||||
github.com/siderolabs/net v0.4.0
|
||||
github.com/siderolabs/protoenc v0.2.1
|
||||
github.com/siderolabs/protoenc v0.2.2
|
||||
github.com/stretchr/testify v1.10.0
|
||||
go.uber.org/zap v1.27.0
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241223144023-3abc09e42ca8
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8
|
||||
google.golang.org/grpc v1.69.2
|
||||
google.golang.org/protobuf v1.36.1
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250127172529-29210b9bc287
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287
|
||||
google.golang.org/grpc v1.70.0
|
||||
google.golang.org/protobuf v1.36.4
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
)
|
||||
|
||||
require (
|
||||
cel.dev/expr v0.18.0 // indirect
|
||||
github.com/ProtonMail/go-crypto v1.1.3 // indirect
|
||||
cel.dev/expr v0.19.2 // indirect
|
||||
github.com/ProtonMail/go-crypto v1.1.5 // indirect
|
||||
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f // indirect
|
||||
github.com/ProtonMail/gopenpgp/v2 v2.8.1 // indirect
|
||||
github.com/ProtonMail/gopenpgp/v2 v2.8.2 // indirect
|
||||
github.com/adrg/xdg v0.5.3 // indirect
|
||||
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
|
||||
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
|
||||
@ -53,25 +58,27 @@ require (
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||
github.com/gertd/go-pluralize v0.2.1 // indirect
|
||||
github.com/google/go-cmp v0.6.0 // indirect
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 // indirect
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.0 // indirect
|
||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||
github.com/josharian/native v1.1.0 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-colorable v0.1.14 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/mdlayher/genetlink v1.3.2 // indirect
|
||||
github.com/mdlayher/netlink v1.7.2 // indirect
|
||||
github.com/mdlayher/socket v0.5.1 // indirect
|
||||
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/sasha-s/go-deadlock v0.3.5 // indirect
|
||||
github.com/stoewer/go-strcase v1.3.0 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
golang.org/x/crypto v0.31.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect
|
||||
golang.org/x/net v0.33.0 // indirect
|
||||
golang.org/x/sync v0.10.0 // indirect
|
||||
golang.org/x/sys v0.28.0 // indirect
|
||||
golang.org/x/text v0.21.0 // indirect
|
||||
golang.org/x/time v0.8.0 // indirect
|
||||
golang.org/x/crypto v0.32.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c // indirect
|
||||
golang.org/x/net v0.34.0 // indirect
|
||||
golang.org/x/sync v0.11.0 // indirect
|
||||
golang.org/x/sys v0.30.0 // indirect
|
||||
golang.org/x/text v0.22.0 // indirect
|
||||
golang.org/x/time v0.10.0 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
)
|
||||
|
||||
@ -1,31 +1,31 @@
|
||||
cel.dev/expr v0.18.0 h1:CJ6drgk+Hf96lkLikr4rFf19WrU0BOWEihyZnI2TAzo=
|
||||
cel.dev/expr v0.18.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw=
|
||||
github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk=
|
||||
github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
|
||||
cel.dev/expr v0.19.2 h1:V354PbqIXr9IQdwy4SYA4xa0HXaWq1BUPAGzugBY5V4=
|
||||
cel.dev/expr v0.19.2/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw=
|
||||
github.com/ProtonMail/go-crypto v1.1.5 h1:eoAQfK2dwL+tFSFpr7TbOaPNUbPiJj4fLYwwGE1FQO4=
|
||||
github.com/ProtonMail/go-crypto v1.1.5/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
|
||||
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f h1:tCbYj7/299ekTTXpdwKYF8eBlsYsDVoggDAuAjoK66k=
|
||||
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f/go.mod h1:gcr0kNtGBqin9zDW9GOHcVntrwnjrK+qdJ06mWYBybw=
|
||||
github.com/ProtonMail/gopenpgp/v2 v2.8.1 h1:WGE1THOhOnLurL0+N4BOlLkIhjEO7YVZgmpgyDHN56A=
|
||||
github.com/ProtonMail/gopenpgp/v2 v2.8.1/go.mod h1:4PUgqGSQjd7HldUbAgMmC69+Gv6DO8NomCNi0y8+BTc=
|
||||
github.com/ProtonMail/gopenpgp/v2 v2.8.2 h1:fe/XagfxkHRCr+cLFMcoF7XwaASRGSmK/fmcmK8yo6o=
|
||||
github.com/ProtonMail/gopenpgp/v2 v2.8.2/go.mod h1:pPWZyRQWpQ7g8NWsdZmUynNZ1R09k4MdbSHvm+KooqM=
|
||||
github.com/adrg/xdg v0.5.3 h1:xRnxJXne7+oWDatRhR1JLnvuccuIeCoBu2rtuLqQB78=
|
||||
github.com/adrg/xdg v0.5.3/go.mod h1:nlTsY+NNiCBGCK2tpm09vRqfVzrc2fLmXGpBLF0zlTQ=
|
||||
github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
|
||||
github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw=
|
||||
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
|
||||
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
|
||||
github.com/brianvoe/gofakeit/v6 v6.24.0 h1:74yq7RRz/noddscZHRS2T84oHZisW9muwbb8sRnU52A=
|
||||
github.com/brianvoe/gofakeit/v6 v6.24.0/go.mod h1:Ow6qC71xtwm79anlwKRlWZW6zVq9D2XHE4QSSMP/rU8=
|
||||
github.com/brianvoe/gofakeit/v6 v6.28.0 h1:Xib46XXuQfmlLS2EXRuJpqcw8St6qSZz75OUo0tgAW4=
|
||||
github.com/brianvoe/gofakeit/v6 v6.28.0/go.mod h1:Xj58BMSnFqcn/fAQeSK+/PLtC5kSb7FJIq4JyGa8vEs=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
github.com/cilium/ebpf v0.12.3 h1:8ht6F9MquybnY97at+VDZb3eQQr8ev79RueWeVaEcG4=
|
||||
github.com/cilium/ebpf v0.12.3/go.mod h1:TctK1ivibvI3znr66ljgi4hqOT8EYQjz1KWBfb1UVgM=
|
||||
github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys=
|
||||
github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
|
||||
github.com/containerd/go-cni v1.1.11 h1:fWt1K15AmSLsEfa57N+qYw4NeGPiQKYq1pjNGJwV9mc=
|
||||
github.com/containerd/go-cni v1.1.11/go.mod h1:/Y/sL8yqYQn1ZG1om1OncJB1W4zN3YmjfP/ShCzG/OY=
|
||||
github.com/containerd/go-cni v1.1.12 h1:wm/5VD/i255hjM4uIZjBRiEQ7y98W9ACy/mHeLi4+94=
|
||||
github.com/containerd/go-cni v1.1.12/go.mod h1:+jaqRBdtW5faJxj2Qwg1Of7GsV66xcvnCx4mSJtUlxU=
|
||||
github.com/containernetworking/cni v1.2.3 h1:hhOcjNVUQTnzdRJ6alC5XF+wd9mfGIUaj8FuJbEslXM=
|
||||
github.com/containernetworking/cni v1.2.3/go.mod h1:DuLgF+aPd3DzcTQTtp/Nvl1Kim23oFKdm2okJzBQA5M=
|
||||
github.com/cosi-project/runtime v0.8.1 h1:zM5g3cOhvN8HjZ6iBtWwwP4KWmpXSTfMXo3QUZiRjhI=
|
||||
github.com/cosi-project/runtime v0.8.1/go.mod h1:sNqLK/aBb8862xGS4HLAcwTloDuH0TeU3N1+qr3TmAs=
|
||||
github.com/cosi-project/runtime v0.9.2 h1:l0kugKjZUFrmBFwkza2lt2vA1u8PBuWbrbB2HvPmkTs=
|
||||
github.com/cosi-project/runtime v0.9.2/go.mod h1:dzAY2bdrPv0y39FyJOOURMkx3Ae7erMVoxX/N0OAZQU=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||
@ -34,8 +34,8 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp
|
||||
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||
github.com/emicklei/dot v1.6.4 h1:cG9ycT67d9Yw22G+mAb4XiuUz6E6H1S0zePp/5Cwe/c=
|
||||
github.com/emicklei/dot v1.6.4/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s=
|
||||
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
|
||||
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/evanphx/json-patch v5.9.11+incompatible h1:ixHHqfcGvxhWkniF1tWxBHA0yb4Z+d1UQi45df52xW8=
|
||||
github.com/evanphx/json-patch v5.9.11+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
||||
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
||||
github.com/gertd/go-pluralize v0.2.1 h1:M3uASbVjMnTsPb0PNqg+E/24Vwigyo/tvyMTtAlLgiA=
|
||||
@ -50,16 +50,16 @@ github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v
|
||||
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
|
||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||
github.com/google/cel-go v0.22.1 h1:AfVXx3chM2qwoSbM7Da8g8hX8OVSkBFwX+rz2+PcK40=
|
||||
github.com/google/cel-go v0.22.1/go.mod h1:BuznPXXfQDpXKWQ9sPW3TzlAJN5zzFe+i9tIs0yC4s8=
|
||||
github.com/google/cel-go v0.23.2 h1:UdEe3CvQh3Nv+E/j9r1Y//WO0K0cSyD7/y0bzyLIMI4=
|
||||
github.com/google/cel-go v0.23.2/go.mod h1:52Pb6QsDbC5kvgxvZhiL9QX1oZEkcUF/ZqaPx1J5Wwo=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg=
|
||||
github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.0 h1:VD1gqscl4nYs1YxVuSdemTrSgTKrwOWDK0FVFMqm+Cg=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.0/go.mod h1:4EgsQoS4TOhJizV+JTFg40qx1Ofh3XmXEQNBpgvNT40=
|
||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
|
||||
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
@ -75,13 +75,10 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
|
||||
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mdlayher/ethtool v0.2.0 h1:akcA4WZVWozzirPASeMq8qgLkxpF3ykftVXwnrMKrhY=
|
||||
github.com/mdlayher/ethtool v0.2.0/go.mod h1:W0pIBrNPK1TslIN4Z9wt1EVbay66Kbvek2z2f29VBfw=
|
||||
github.com/mdlayher/genetlink v1.3.2 h1:KdrNKe+CTu+IbZnm/GVUMXSqBBLqcGpRDa0xkQy56gw=
|
||||
github.com/mdlayher/genetlink v1.3.2/go.mod h1:tcC3pkCrPUGIKKsCsp0B3AdaaKuHtaxoJRz3cc+528o=
|
||||
github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g=
|
||||
@ -94,6 +91,8 @@ github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
|
||||
github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
|
||||
github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk=
|
||||
github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw=
|
||||
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
@ -108,8 +107,12 @@ github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkB
|
||||
github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
|
||||
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4=
|
||||
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY=
|
||||
github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU=
|
||||
github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U=
|
||||
github.com/siderolabs/crypto v0.5.1 h1:aZEUTZBoP8rH+0TqQAlUgazriPh89MrXf4R+th+m6ps=
|
||||
github.com/siderolabs/crypto v0.5.1/go.mod h1:7RHC7eUKBx6RLS2lDaNXrQ83zY9iPH/aQSTxk1I4/j4=
|
||||
github.com/siderolabs/ethtool v0.0.0-20250204161245-ee04fc1b1856 h1:LQe9knKlZXGdrm0J/bcojk42qqhfBoPpiqqgXQa/7pY=
|
||||
github.com/siderolabs/ethtool v0.0.0-20250204161245-ee04fc1b1856/go.mod h1:3u47fCDlOQGM7IhXhUB3uPEcjdQxGmK53/45kEg1HDM=
|
||||
github.com/siderolabs/gen v0.8.0 h1:Pj93+hexkk5hQ7izjJ6YXnEWc8vlzOmDwFz13/VzS7o=
|
||||
github.com/siderolabs/gen v0.8.0/go.mod h1:an3a2Y53O7kUjnnK8Bfu3gewtvnIOu5RTU6HalFtXQQ=
|
||||
github.com/siderolabs/go-api-signature v0.3.6 h1:wDIsXbpl7Oa/FXvxB6uz4VL9INA9fmr3EbmjEZYFJrU=
|
||||
@ -122,8 +125,8 @@ github.com/siderolabs/go-retry v0.3.3 h1:zKV+S1vumtO72E6sYsLlmIdV/G/GcYSBLiEx/c9
|
||||
github.com/siderolabs/go-retry v0.3.3/go.mod h1:Ff/VGc7v7un4uQg3DybgrmOWHEmJ8BzZds/XNn/BqMI=
|
||||
github.com/siderolabs/net v0.4.0 h1:1bOgVay/ijPkJz4qct98nHsiB/ysLQU0KLoBC4qLm7I=
|
||||
github.com/siderolabs/net v0.4.0/go.mod h1:/ibG+Hm9HU27agp5r9Q3eZicEfjquzNzQNux5uEk0kM=
|
||||
github.com/siderolabs/protoenc v0.2.1 h1:BqxEmeWQeMpNP3R6WrPqDatX8sM/r4t97OP8mFmg6GA=
|
||||
github.com/siderolabs/protoenc v0.2.1/go.mod h1:StTHxjet1g11GpNAWiATgc8K0HMKiFSEVVFOa/H0otc=
|
||||
github.com/siderolabs/protoenc v0.2.2 h1:vVQDrTjV+QSOiroWTca6h2Sn5XWYk7VSUPav5J0Qp54=
|
||||
github.com/siderolabs/protoenc v0.2.2/go.mod h1:gtkHkjSCFEceXUHUzKDpnuvXu1mab9D3pVxTnQN+z+o=
|
||||
github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs=
|
||||
github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
@ -141,16 +144,16 @@ github.com/unix4ever/yaml v0.0.0-20220527175918-f17b0f05cf2c/go.mod h1:K4uyk7z7B
|
||||
github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8=
|
||||
github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY=
|
||||
go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE=
|
||||
go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE=
|
||||
go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY=
|
||||
go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
|
||||
go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
|
||||
go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys=
|
||||
go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A=
|
||||
go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
|
||||
go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
|
||||
go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M=
|
||||
go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8=
|
||||
go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4=
|
||||
go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ=
|
||||
go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
|
||||
go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
|
||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
||||
@ -159,34 +162,33 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
||||
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
|
||||
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
|
||||
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo=
|
||||
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak=
|
||||
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
|
||||
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc=
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
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.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
|
||||
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
||||
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
|
||||
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/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.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
|
||||
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
|
||||
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
|
||||
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||
golang.org/x/sys v0.30.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-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
@ -195,25 +197,25 @@ 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.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||
golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
|
||||
golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
||||
golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4=
|
||||
golang.org/x/time v0.10.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-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o=
|
||||
golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q=
|
||||
golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE=
|
||||
golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241223144023-3abc09e42ca8 h1:st3LcW/BPi75W4q1jJTEor/QWwbNlPlDG0JTn6XhZu0=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241223144023-3abc09e42ca8/go.mod h1:klhJGKFyG8Tn50enBn7gizg4nXGXJ+jqEREdCWaPcV4=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 h1:TqExAhdPaB60Ux47Cn0oLV07rGnxZzIsaRhQaqS666A=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA=
|
||||
google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU=
|
||||
google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
|
||||
google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=
|
||||
google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250127172529-29210b9bc287 h1:A2ni10G3UlplFrWdCDJTl7D7mJ7GSRm37S+PDimaKRw=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250127172529-29210b9bc287/go.mod h1:iYONQfRdizDB8JJBybql13nArx91jcUk7zCXEsOofM4=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287 h1:J1H9f+LEdWAfHcez/4cvaVBox7cOYT+IU6rgqj5x++8=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287/go.mod h1:8BS3B93F/U1juMFq9+EDk+qOT5CO1R9IzXxG3PTqiRk=
|
||||
google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
|
||||
google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw=
|
||||
google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM=
|
||||
google.golang.org/protobuf v1.36.4/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 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
|
||||
@ -16,7 +16,7 @@ import (
|
||||
"github.com/siderolabs/talos/pkg/machinery/proto"
|
||||
)
|
||||
|
||||
//go:generate deep-copy -type AddressSpecSpec -type AddressStatusSpec -type DNSResolveCacheSpec -type HardwareAddrSpec -type HostDNSConfigSpec -type HostnameSpecSpec -type HostnameStatusSpec -type LinkRefreshSpec -type LinkSpecSpec -type LinkStatusSpec -type NfTablesChainSpec -type NodeAddressSpec -type NodeAddressSortAlgorithmSpec -type NodeAddressFilterSpec -type OperatorSpecSpec -type ProbeSpecSpec -type ProbeStatusSpec -type ResolverSpecSpec -type ResolverStatusSpec -type RouteSpecSpec -type RouteStatusSpec -type StatusSpec -type TimeServerSpecSpec -type TimeServerStatusSpec -header-file ../../../../hack/boilerplate.txt -o deep_copy.generated.go .
|
||||
//go:generate deep-copy -type AddressSpecSpec -type AddressStatusSpec -type DNSResolveCacheSpec -type EthernetSpecSpec -type EthernetStatusSpec -type HardwareAddrSpec -type HostDNSConfigSpec -type HostnameSpecSpec -type HostnameStatusSpec -type LinkRefreshSpec -type LinkSpecSpec -type LinkStatusSpec -type NfTablesChainSpec -type NodeAddressSpec -type NodeAddressSortAlgorithmSpec -type NodeAddressFilterSpec -type OperatorSpecSpec -type ProbeSpecSpec -type ProbeStatusSpec -type ResolverSpecSpec -type ResolverStatusSpec -type RouteSpecSpec -type RouteStatusSpec -type StatusSpec -type TimeServerSpecSpec -type TimeServerStatusSpec -header-file ../../../../hack/boilerplate.txt -o deep_copy.generated.go .
|
||||
|
||||
// AddressSpecType is type of AddressSpec resource.
|
||||
const AddressSpecType = resource.Type("AddressSpecs.net.talos.dev")
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
// Code generated by "deep-copy -type AddressSpecSpec -type AddressStatusSpec -type DNSResolveCacheSpec -type HardwareAddrSpec -type HostDNSConfigSpec -type HostnameSpecSpec -type HostnameStatusSpec -type LinkRefreshSpec -type LinkSpecSpec -type LinkStatusSpec -type NfTablesChainSpec -type NodeAddressSpec -type NodeAddressSortAlgorithmSpec -type NodeAddressFilterSpec -type OperatorSpecSpec -type ProbeSpecSpec -type ProbeStatusSpec -type ResolverSpecSpec -type ResolverStatusSpec -type RouteSpecSpec -type RouteStatusSpec -type StatusSpec -type TimeServerSpecSpec -type TimeServerStatusSpec -header-file ../../../../hack/boilerplate.txt -o deep_copy.generated.go ."; DO NOT EDIT.
|
||||
// Code generated by "deep-copy -type AddressSpecSpec -type AddressStatusSpec -type DNSResolveCacheSpec -type EthernetSpecSpec -type EthernetStatusSpec -type HardwareAddrSpec -type HostDNSConfigSpec -type HostnameSpecSpec -type HostnameStatusSpec -type LinkRefreshSpec -type LinkSpecSpec -type LinkStatusSpec -type NfTablesChainSpec -type NodeAddressSpec -type NodeAddressSortAlgorithmSpec -type NodeAddressFilterSpec -type OperatorSpecSpec -type ProbeSpecSpec -type ProbeStatusSpec -type ResolverSpecSpec -type ResolverStatusSpec -type RouteSpecSpec -type RouteStatusSpec -type StatusSpec -type TimeServerSpecSpec -type TimeServerStatusSpec -header-file ../../../../hack/boilerplate.txt -o deep_copy.generated.go ."; DO NOT EDIT.
|
||||
|
||||
package network
|
||||
|
||||
@ -30,6 +30,134 @@ func (o DNSResolveCacheSpec) DeepCopy() DNSResolveCacheSpec {
|
||||
return cp
|
||||
}
|
||||
|
||||
// DeepCopy generates a deep copy of EthernetSpecSpec.
|
||||
func (o EthernetSpecSpec) DeepCopy() EthernetSpecSpec {
|
||||
var cp EthernetSpecSpec = o
|
||||
if o.Rings.RX != nil {
|
||||
cp.Rings.RX = new(uint32)
|
||||
*cp.Rings.RX = *o.Rings.RX
|
||||
}
|
||||
if o.Rings.TX != nil {
|
||||
cp.Rings.TX = new(uint32)
|
||||
*cp.Rings.TX = *o.Rings.TX
|
||||
}
|
||||
if o.Rings.RXMini != nil {
|
||||
cp.Rings.RXMini = new(uint32)
|
||||
*cp.Rings.RXMini = *o.Rings.RXMini
|
||||
}
|
||||
if o.Rings.RXJumbo != nil {
|
||||
cp.Rings.RXJumbo = new(uint32)
|
||||
*cp.Rings.RXJumbo = *o.Rings.RXJumbo
|
||||
}
|
||||
if o.Rings.RXBufLen != nil {
|
||||
cp.Rings.RXBufLen = new(uint32)
|
||||
*cp.Rings.RXBufLen = *o.Rings.RXBufLen
|
||||
}
|
||||
if o.Rings.CQESize != nil {
|
||||
cp.Rings.CQESize = new(uint32)
|
||||
*cp.Rings.CQESize = *o.Rings.CQESize
|
||||
}
|
||||
if o.Rings.TXPush != nil {
|
||||
cp.Rings.TXPush = new(bool)
|
||||
*cp.Rings.TXPush = *o.Rings.TXPush
|
||||
}
|
||||
if o.Rings.RXPush != nil {
|
||||
cp.Rings.RXPush = new(bool)
|
||||
*cp.Rings.RXPush = *o.Rings.RXPush
|
||||
}
|
||||
if o.Rings.TXPushBufLen != nil {
|
||||
cp.Rings.TXPushBufLen = new(uint32)
|
||||
*cp.Rings.TXPushBufLen = *o.Rings.TXPushBufLen
|
||||
}
|
||||
if o.Rings.TCPDataSplit != nil {
|
||||
cp.Rings.TCPDataSplit = new(bool)
|
||||
*cp.Rings.TCPDataSplit = *o.Rings.TCPDataSplit
|
||||
}
|
||||
return cp
|
||||
}
|
||||
|
||||
// DeepCopy generates a deep copy of EthernetStatusSpec.
|
||||
func (o EthernetStatusSpec) DeepCopy() EthernetStatusSpec {
|
||||
var cp EthernetStatusSpec = o
|
||||
if o.LinkState != nil {
|
||||
cp.LinkState = new(bool)
|
||||
*cp.LinkState = *o.LinkState
|
||||
}
|
||||
if o.OurModes != nil {
|
||||
cp.OurModes = make([]string, len(o.OurModes))
|
||||
copy(cp.OurModes, o.OurModes)
|
||||
}
|
||||
if o.PeerModes != nil {
|
||||
cp.PeerModes = make([]string, len(o.PeerModes))
|
||||
copy(cp.PeerModes, o.PeerModes)
|
||||
}
|
||||
if o.Rings != nil {
|
||||
cp.Rings = new(EthernetRingsStatus)
|
||||
*cp.Rings = *o.Rings
|
||||
if o.Rings.RXMax != nil {
|
||||
cp.Rings.RXMax = new(uint32)
|
||||
*cp.Rings.RXMax = *o.Rings.RXMax
|
||||
}
|
||||
if o.Rings.RXMiniMax != nil {
|
||||
cp.Rings.RXMiniMax = new(uint32)
|
||||
*cp.Rings.RXMiniMax = *o.Rings.RXMiniMax
|
||||
}
|
||||
if o.Rings.RXJumboMax != nil {
|
||||
cp.Rings.RXJumboMax = new(uint32)
|
||||
*cp.Rings.RXJumboMax = *o.Rings.RXJumboMax
|
||||
}
|
||||
if o.Rings.TXMax != nil {
|
||||
cp.Rings.TXMax = new(uint32)
|
||||
*cp.Rings.TXMax = *o.Rings.TXMax
|
||||
}
|
||||
if o.Rings.TXPushBufLenMax != nil {
|
||||
cp.Rings.TXPushBufLenMax = new(uint32)
|
||||
*cp.Rings.TXPushBufLenMax = *o.Rings.TXPushBufLenMax
|
||||
}
|
||||
if o.Rings.RX != nil {
|
||||
cp.Rings.RX = new(uint32)
|
||||
*cp.Rings.RX = *o.Rings.RX
|
||||
}
|
||||
if o.Rings.RXMini != nil {
|
||||
cp.Rings.RXMini = new(uint32)
|
||||
*cp.Rings.RXMini = *o.Rings.RXMini
|
||||
}
|
||||
if o.Rings.RXJumbo != nil {
|
||||
cp.Rings.RXJumbo = new(uint32)
|
||||
*cp.Rings.RXJumbo = *o.Rings.RXJumbo
|
||||
}
|
||||
if o.Rings.TX != nil {
|
||||
cp.Rings.TX = new(uint32)
|
||||
*cp.Rings.TX = *o.Rings.TX
|
||||
}
|
||||
if o.Rings.RXBufLen != nil {
|
||||
cp.Rings.RXBufLen = new(uint32)
|
||||
*cp.Rings.RXBufLen = *o.Rings.RXBufLen
|
||||
}
|
||||
if o.Rings.CQESize != nil {
|
||||
cp.Rings.CQESize = new(uint32)
|
||||
*cp.Rings.CQESize = *o.Rings.CQESize
|
||||
}
|
||||
if o.Rings.TXPush != nil {
|
||||
cp.Rings.TXPush = new(bool)
|
||||
*cp.Rings.TXPush = *o.Rings.TXPush
|
||||
}
|
||||
if o.Rings.RXPush != nil {
|
||||
cp.Rings.RXPush = new(bool)
|
||||
*cp.Rings.RXPush = *o.Rings.RXPush
|
||||
}
|
||||
if o.Rings.TXPushBufLen != nil {
|
||||
cp.Rings.TXPushBufLen = new(uint32)
|
||||
*cp.Rings.TXPushBufLen = *o.Rings.TXPushBufLen
|
||||
}
|
||||
if o.Rings.TCPDataSplit != nil {
|
||||
cp.Rings.TCPDataSplit = new(bool)
|
||||
*cp.Rings.TCPDataSplit = *o.Rings.TCPDataSplit
|
||||
}
|
||||
}
|
||||
return cp
|
||||
}
|
||||
|
||||
// DeepCopy generates a deep copy of HardwareAddrSpec.
|
||||
func (o HardwareAddrSpec) DeepCopy() HardwareAddrSpec {
|
||||
var cp HardwareAddrSpec = o
|
||||
|
||||
72
pkg/machinery/resources/network/ethernet_spec.go
Normal file
72
pkg/machinery/resources/network/ethernet_spec.go
Normal file
@ -0,0 +1,72 @@
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
package network
|
||||
|
||||
import (
|
||||
"github.com/cosi-project/runtime/pkg/resource"
|
||||
"github.com/cosi-project/runtime/pkg/resource/meta"
|
||||
"github.com/cosi-project/runtime/pkg/resource/protobuf"
|
||||
"github.com/cosi-project/runtime/pkg/resource/typed"
|
||||
|
||||
"github.com/siderolabs/talos/pkg/machinery/proto"
|
||||
)
|
||||
|
||||
// EthernetSpecType is type of EthernetSpec resource.
|
||||
const EthernetSpecType = resource.Type("EthernetSpecs.net.talos.dev")
|
||||
|
||||
// EthernetSpec resource holds Ethernet network link status.
|
||||
type EthernetSpec = typed.Resource[EthernetSpecSpec, EthernetSpecExtension]
|
||||
|
||||
// EthernetSpecSpec describes config of Ethernet link.
|
||||
//
|
||||
//gotagsrewrite:gen
|
||||
type EthernetSpecSpec struct {
|
||||
Rings EthernetRingsSpec `yaml:"rings,omitempty" protobuf:"1"`
|
||||
}
|
||||
|
||||
// EthernetRingsSpec describes config of Ethernet rings.
|
||||
//
|
||||
//gotagsrewrite:gen
|
||||
type EthernetRingsSpec struct {
|
||||
RX *uint32 `yaml:"rx,omitempty" protobuf:"1"`
|
||||
TX *uint32 `yaml:"tx,omitempty" protobuf:"4"`
|
||||
RXMini *uint32 `yaml:"rx-mini,omitempty" protobuf:"2"`
|
||||
RXJumbo *uint32 `yaml:"rx-jumbo,omitempty" protobuf:"3"`
|
||||
RXBufLen *uint32 `yaml:"rx-buf-len,omitempty" protobuf:"5"`
|
||||
CQESize *uint32 `yaml:"cqe-size,omitempty" protobuf:"6"`
|
||||
TXPush *bool `yaml:"tx-push,omitempty" protobuf:"7"`
|
||||
RXPush *bool `yaml:"rx-push,omitempty" protobuf:"8"`
|
||||
TXPushBufLen *uint32 `yaml:"tx-push-buf-len,omitempty" protobuf:"9"`
|
||||
TCPDataSplit *bool `yaml:"tcp-data-split,omitempty" protobuf:"10"`
|
||||
}
|
||||
|
||||
// NewEthernetSpec initializes a EthernetSpec resource.
|
||||
func NewEthernetSpec(namespace resource.Namespace, id resource.ID) *EthernetSpec {
|
||||
return typed.NewResource[EthernetSpecSpec, EthernetSpecExtension](
|
||||
resource.NewMetadata(namespace, EthernetSpecType, id, resource.VersionUndefined),
|
||||
EthernetSpecSpec{},
|
||||
)
|
||||
}
|
||||
|
||||
// EthernetSpecExtension provides auxiliary methods for EthernetSpec.
|
||||
type EthernetSpecExtension struct{}
|
||||
|
||||
// ResourceDefinition implements [typed.Extension] interface.
|
||||
func (EthernetSpecExtension) ResourceDefinition() meta.ResourceDefinitionSpec {
|
||||
return meta.ResourceDefinitionSpec{
|
||||
Type: EthernetSpecType,
|
||||
DefaultNamespace: NamespaceName,
|
||||
Sensitivity: meta.NonSensitive,
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterDefaultTypes()
|
||||
|
||||
err := protobuf.RegisterDynamic[EthernetSpecSpec](EthernetSpecType, &EthernetSpec{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
98
pkg/machinery/resources/network/ethernet_status.go
Normal file
98
pkg/machinery/resources/network/ethernet_status.go
Normal file
@ -0,0 +1,98 @@
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
package network
|
||||
|
||||
import (
|
||||
"github.com/cosi-project/runtime/pkg/resource"
|
||||
"github.com/cosi-project/runtime/pkg/resource/meta"
|
||||
"github.com/cosi-project/runtime/pkg/resource/protobuf"
|
||||
"github.com/cosi-project/runtime/pkg/resource/typed"
|
||||
|
||||
"github.com/siderolabs/talos/pkg/machinery/nethelpers"
|
||||
"github.com/siderolabs/talos/pkg/machinery/proto"
|
||||
)
|
||||
|
||||
// EthernetStatusType is type of EthernetStatus resource.
|
||||
const EthernetStatusType = resource.Type("EthernetStatuses.net.talos.dev")
|
||||
|
||||
// EthernetStatus resource holds Ethernet network link status.
|
||||
type EthernetStatus = typed.Resource[EthernetStatusSpec, EthernetStatusExtension]
|
||||
|
||||
// EthernetStatusSpec describes status of rendered secrets.
|
||||
//
|
||||
//gotagsrewrite:gen
|
||||
type EthernetStatusSpec struct {
|
||||
LinkState *bool `yaml:"linkState,omitempty" protobuf:"1"`
|
||||
SpeedMegabits int `yaml:"speedMbit,omitempty" protobuf:"2"`
|
||||
Port nethelpers.Port `yaml:"port" protobuf:"3"`
|
||||
Duplex nethelpers.Duplex `yaml:"duplex" protobuf:"4"`
|
||||
OurModes []string `yaml:"ourModes,omitempty" protobuf:"5"`
|
||||
PeerModes []string `yaml:"peerModes,omitempty" protobuf:"6"`
|
||||
Rings *EthernetRingsStatus `yaml:"rings,omitempty" protobuf:"7"`
|
||||
}
|
||||
|
||||
// EthernetRingsStatus describes status of Ethernet rings.
|
||||
//
|
||||
//gotagsrewrite:gen
|
||||
type EthernetRingsStatus struct {
|
||||
// Read-only settings.
|
||||
RXMax *uint32 `yaml:"rx-max,omitempty" protobuf:"1"`
|
||||
RXMiniMax *uint32 `yaml:"rx-mini-max,omitempty" protobuf:"2"`
|
||||
RXJumboMax *uint32 `yaml:"rx-jumbo-max,omitempty" protobuf:"3"`
|
||||
TXMax *uint32 `yaml:"tx-max,omitempty" protobuf:"4"`
|
||||
TXPushBufLenMax *uint32 `yaml:"tx-push-buf-len-max,omitempty" protobuf:"5"`
|
||||
|
||||
// Current settings (read-write).
|
||||
RX *uint32 `yaml:"rx,omitempty" protobuf:"6"`
|
||||
RXMini *uint32 `yaml:"rx-mini,omitempty" protobuf:"7"`
|
||||
RXJumbo *uint32 `yaml:"rx-jumbo,omitempty" protobuf:"8"`
|
||||
TX *uint32 `yaml:"tx,omitempty" protobuf:"9"`
|
||||
RXBufLen *uint32 `yaml:"rx-buf-len,omitempty" protobuf:"10"`
|
||||
CQESize *uint32 `yaml:"cqe-size,omitempty" protobuf:"11"`
|
||||
TXPush *bool `yaml:"tx-push,omitempty" protobuf:"12"`
|
||||
RXPush *bool `yaml:"rx-push,omitempty" protobuf:"13"`
|
||||
TXPushBufLen *uint32 `yaml:"tx-push-buf-len,omitempty" protobuf:"14"`
|
||||
TCPDataSplit *bool `yaml:"tcp-data-split,omitempty" protobuf:"15"`
|
||||
}
|
||||
|
||||
// NewEthernetStatus initializes a EthernetStatus resource.
|
||||
func NewEthernetStatus(namespace resource.Namespace, id resource.ID) *EthernetStatus {
|
||||
return typed.NewResource[EthernetStatusSpec, EthernetStatusExtension](
|
||||
resource.NewMetadata(namespace, EthernetStatusType, id, resource.VersionUndefined),
|
||||
EthernetStatusSpec{},
|
||||
)
|
||||
}
|
||||
|
||||
// EthernetStatusExtension provides auxiliary methods for EthernetStatus.
|
||||
type EthernetStatusExtension struct{}
|
||||
|
||||
// ResourceDefinition implements [typed.Extension] interface.
|
||||
func (EthernetStatusExtension) ResourceDefinition() meta.ResourceDefinitionSpec {
|
||||
return meta.ResourceDefinitionSpec{
|
||||
Type: EthernetStatusType,
|
||||
Aliases: []resource.Type{"ethtool"},
|
||||
DefaultNamespace: NamespaceName,
|
||||
PrintColumns: []meta.PrintColumn{
|
||||
{
|
||||
Name: "Link",
|
||||
JSONPath: `{.linkState}`,
|
||||
},
|
||||
{
|
||||
Name: "Speed",
|
||||
JSONPath: `{.speedMbit}`,
|
||||
},
|
||||
},
|
||||
Sensitivity: meta.NonSensitive,
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterDefaultTypes()
|
||||
|
||||
err := protobuf.RegisterDynamic[EthernetStatusSpec](EthernetStatusType, &EthernetStatus{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
@ -29,6 +29,8 @@ func TestRegisterResource(t *testing.T) {
|
||||
&network.AddressSpec{},
|
||||
&network.HardwareAddr{},
|
||||
&network.DNSUpstream{},
|
||||
&network.EthernetSpec{},
|
||||
&network.EthernetStatus{},
|
||||
&network.HostDNSConfig{},
|
||||
&network.HostnameStatus{},
|
||||
&network.HostnameSpec{},
|
||||
|
||||
@ -203,6 +203,10 @@ description: Talos gRPC API reference.
|
||||
- [DHCP4OperatorSpec](#talos.resource.definitions.network.DHCP4OperatorSpec)
|
||||
- [DHCP6OperatorSpec](#talos.resource.definitions.network.DHCP6OperatorSpec)
|
||||
- [DNSResolveCacheSpec](#talos.resource.definitions.network.DNSResolveCacheSpec)
|
||||
- [EthernetRingsSpec](#talos.resource.definitions.network.EthernetRingsSpec)
|
||||
- [EthernetRingsStatus](#talos.resource.definitions.network.EthernetRingsStatus)
|
||||
- [EthernetSpecSpec](#talos.resource.definitions.network.EthernetSpecSpec)
|
||||
- [EthernetStatusSpec](#talos.resource.definitions.network.EthernetStatusSpec)
|
||||
- [HardwareAddrSpec](#talos.resource.definitions.network.HardwareAddrSpec)
|
||||
- [HostDNSConfigSpec](#talos.resource.definitions.network.HostDNSConfigSpec)
|
||||
- [HostnameSpecSpec](#talos.resource.definitions.network.HostnameSpecSpec)
|
||||
@ -3729,6 +3733,95 @@ DNSResolveCacheSpec describes DNS servers status.
|
||||
|
||||
|
||||
|
||||
<a name="talos.resource.definitions.network.EthernetRingsSpec"></a>
|
||||
|
||||
### EthernetRingsSpec
|
||||
EthernetRingsSpec describes config of Ethernet rings.
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| rx | [uint32](#uint32) | | |
|
||||
| rx_mini | [uint32](#uint32) | | |
|
||||
| rx_jumbo | [uint32](#uint32) | | |
|
||||
| tx | [uint32](#uint32) | | |
|
||||
| rx_buf_len | [uint32](#uint32) | | |
|
||||
| cqe_size | [uint32](#uint32) | | |
|
||||
| tx_push | [bool](#bool) | | |
|
||||
| rx_push | [bool](#bool) | | |
|
||||
| tx_push_buf_len | [uint32](#uint32) | | |
|
||||
| tcp_data_split | [bool](#bool) | | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="talos.resource.definitions.network.EthernetRingsStatus"></a>
|
||||
|
||||
### EthernetRingsStatus
|
||||
EthernetRingsStatus describes status of Ethernet rings.
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| rx_max | [uint32](#uint32) | | |
|
||||
| rx_mini_max | [uint32](#uint32) | | |
|
||||
| rx_jumbo_max | [uint32](#uint32) | | |
|
||||
| tx_max | [uint32](#uint32) | | |
|
||||
| tx_push_buf_len_max | [uint32](#uint32) | | |
|
||||
| rx | [uint32](#uint32) | | |
|
||||
| rx_mini | [uint32](#uint32) | | |
|
||||
| rx_jumbo | [uint32](#uint32) | | |
|
||||
| tx | [uint32](#uint32) | | |
|
||||
| rx_buf_len | [uint32](#uint32) | | |
|
||||
| cqe_size | [uint32](#uint32) | | |
|
||||
| tx_push | [bool](#bool) | | |
|
||||
| rx_push | [bool](#bool) | | |
|
||||
| tx_push_buf_len | [uint32](#uint32) | | |
|
||||
| tcp_data_split | [bool](#bool) | | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="talos.resource.definitions.network.EthernetSpecSpec"></a>
|
||||
|
||||
### EthernetSpecSpec
|
||||
EthernetSpecSpec describes config of Ethernet link.
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| rings | [EthernetRingsSpec](#talos.resource.definitions.network.EthernetRingsSpec) | | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="talos.resource.definitions.network.EthernetStatusSpec"></a>
|
||||
|
||||
### EthernetStatusSpec
|
||||
EthernetStatusSpec describes status of rendered secrets.
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| link_state | [bool](#bool) | | |
|
||||
| speed_megabits | [int64](#int64) | | |
|
||||
| port | [talos.resource.definitions.enums.NethelpersPort](#talos.resource.definitions.enums.NethelpersPort) | | |
|
||||
| duplex | [talos.resource.definitions.enums.NethelpersDuplex](#talos.resource.definitions.enums.NethelpersDuplex) | | |
|
||||
| our_modes | [string](#string) | repeated | |
|
||||
| peer_modes | [string](#string) | repeated | |
|
||||
| rings | [EthernetRingsStatus](#talos.resource.definitions.network.EthernetRingsStatus) | | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="talos.resource.definitions.network.HardwareAddrSpec"></a>
|
||||
|
||||
### HardwareAddrSpec
|
||||
|
||||
@ -0,0 +1,60 @@
|
||||
---
|
||||
description: EthernetConfig is a config document to configure Ethernet interfaces.
|
||||
title: EthernetConfig
|
||||
---
|
||||
|
||||
<!-- markdownlint-disable -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{{< highlight yaml >}}
|
||||
apiVersion: v1alpha1
|
||||
kind: EthernetConfig
|
||||
name: enp0s2 # Name of the link (interface).
|
||||
# Configuration for Ethernet link rings.
|
||||
rings:
|
||||
rx: 256 # Number of RX rings.
|
||||
{{< /highlight >}}
|
||||
|
||||
|
||||
| Field | Type | Description | Value(s) |
|
||||
|-------|------|-------------|----------|
|
||||
|`name` |string |Name of the link (interface). | |
|
||||
|`rings` |<a href="#EthernetConfig.rings">EthernetRingsConfig</a> |<details><summary>Configuration for Ethernet link rings.</summary><br />This is similar to `ethtool -G` command.</details> | |
|
||||
|
||||
|
||||
|
||||
|
||||
## rings {#EthernetConfig.rings}
|
||||
|
||||
EthernetRingsConfig is a configuration for Ethernet link rings.
|
||||
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Value(s) |
|
||||
|-------|------|-------------|----------|
|
||||
|`rx` |uint32 |Number of RX rings. | |
|
||||
|`tx` |uint32 |Number of TX rings. | |
|
||||
|`rx-mini` |uint32 |Number of RX mini rings. | |
|
||||
|`rx-jumbo` |uint32 |Number of RX jumbo rings. | |
|
||||
|`rx-buf-len` |uint32 |RX buffer length. | |
|
||||
|`cqe-size` |uint32 |CQE size. | |
|
||||
|`tx-push` |bool |TX push enabled. | |
|
||||
|`rx-push` |bool |RX push enabled. | |
|
||||
|`tx-push-buf-len` |uint32 |TX push buffer length. | |
|
||||
|`tcp-data-split` |bool |TCP data split enabled. | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -249,6 +249,125 @@
|
||||
"kind"
|
||||
]
|
||||
},
|
||||
"network.EthernetConfigV1Alpha1": {
|
||||
"properties": {
|
||||
"apiVersion": {
|
||||
"enum": [
|
||||
"v1alpha1"
|
||||
],
|
||||
"title": "apiVersion",
|
||||
"description": "apiVersion is the API version of the resource.\n",
|
||||
"markdownDescription": "apiVersion is the API version of the resource.",
|
||||
"x-intellij-html-description": "\u003cp\u003eapiVersion is the API version of the resource.\u003c/p\u003e\n"
|
||||
},
|
||||
"kind": {
|
||||
"enum": [
|
||||
"EthernetConfig"
|
||||
],
|
||||
"title": "kind",
|
||||
"description": "kind is the kind of the resource.\n",
|
||||
"markdownDescription": "kind is the kind of the resource.",
|
||||
"x-intellij-html-description": "\u003cp\u003ekind is the kind of the resource.\u003c/p\u003e\n"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"title": "name",
|
||||
"description": "Name of the link (interface).\n",
|
||||
"markdownDescription": "Name of the link (interface).",
|
||||
"x-intellij-html-description": "\u003cp\u003eName of the link (interface).\u003c/p\u003e\n"
|
||||
},
|
||||
"rings": {
|
||||
"$ref": "#/$defs/network.EthernetRingsConfig",
|
||||
"title": "rings",
|
||||
"description": "Configuration for Ethernet link rings.\n\nThis is similar to ethtool -G command.\n",
|
||||
"markdownDescription": "Configuration for Ethernet link rings.\n\nThis is similar to `ethtool -G` command.",
|
||||
"x-intellij-html-description": "\u003cp\u003eConfiguration for Ethernet link rings.\u003c/p\u003e\n\n\u003cp\u003eThis is similar to \u003ccode\u003eethtool -G\u003c/code\u003e command.\u003c/p\u003e\n"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"type": "object",
|
||||
"required": [
|
||||
"apiVersion",
|
||||
"kind",
|
||||
"name"
|
||||
]
|
||||
},
|
||||
"network.EthernetRingsConfig": {
|
||||
"properties": {
|
||||
"rx": {
|
||||
"type": "integer",
|
||||
"title": "rx",
|
||||
"description": "Number of RX rings.\n",
|
||||
"markdownDescription": "Number of RX rings.",
|
||||
"x-intellij-html-description": "\u003cp\u003eNumber of RX rings.\u003c/p\u003e\n"
|
||||
},
|
||||
"tx": {
|
||||
"type": "integer",
|
||||
"title": "tx",
|
||||
"description": "Number of TX rings.\n",
|
||||
"markdownDescription": "Number of TX rings.",
|
||||
"x-intellij-html-description": "\u003cp\u003eNumber of TX rings.\u003c/p\u003e\n"
|
||||
},
|
||||
"rx-mini": {
|
||||
"type": "integer",
|
||||
"title": "rx-mini",
|
||||
"description": "Number of RX mini rings.\n",
|
||||
"markdownDescription": "Number of RX mini rings.",
|
||||
"x-intellij-html-description": "\u003cp\u003eNumber of RX mini rings.\u003c/p\u003e\n"
|
||||
},
|
||||
"rx-jumbo": {
|
||||
"type": "integer",
|
||||
"title": "rx-jumbo",
|
||||
"description": "Number of RX jumbo rings.\n",
|
||||
"markdownDescription": "Number of RX jumbo rings.",
|
||||
"x-intellij-html-description": "\u003cp\u003eNumber of RX jumbo rings.\u003c/p\u003e\n"
|
||||
},
|
||||
"rx-buf-len": {
|
||||
"type": "integer",
|
||||
"title": "rx-buf-len",
|
||||
"description": "RX buffer length.\n",
|
||||
"markdownDescription": "RX buffer length.",
|
||||
"x-intellij-html-description": "\u003cp\u003eRX buffer length.\u003c/p\u003e\n"
|
||||
},
|
||||
"cqe-size": {
|
||||
"type": "integer",
|
||||
"title": "cqe-size",
|
||||
"description": "CQE size.\n",
|
||||
"markdownDescription": "CQE size.",
|
||||
"x-intellij-html-description": "\u003cp\u003eCQE size.\u003c/p\u003e\n"
|
||||
},
|
||||
"tx-push": {
|
||||
"type": "boolean",
|
||||
"title": "tx-push",
|
||||
"description": "TX push enabled.\n",
|
||||
"markdownDescription": "TX push enabled.",
|
||||
"x-intellij-html-description": "\u003cp\u003eTX push enabled.\u003c/p\u003e\n"
|
||||
},
|
||||
"rx-push": {
|
||||
"type": "boolean",
|
||||
"title": "rx-push",
|
||||
"description": "RX push enabled.\n",
|
||||
"markdownDescription": "RX push enabled.",
|
||||
"x-intellij-html-description": "\u003cp\u003eRX push enabled.\u003c/p\u003e\n"
|
||||
},
|
||||
"tx-push-buf-len": {
|
||||
"type": "integer",
|
||||
"title": "tx-push-buf-len",
|
||||
"description": "TX push buffer length.\n",
|
||||
"markdownDescription": "TX push buffer length.",
|
||||
"x-intellij-html-description": "\u003cp\u003eTX push buffer length.\u003c/p\u003e\n"
|
||||
},
|
||||
"tcp-data-split": {
|
||||
"type": "boolean",
|
||||
"title": "tcp-data-split",
|
||||
"description": "TCP data split enabled.\n",
|
||||
"markdownDescription": "TCP data split enabled.",
|
||||
"x-intellij-html-description": "\u003cp\u003eTCP data split enabled.\u003c/p\u003e\n"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"type": "object"
|
||||
},
|
||||
"network.IngressRule": {
|
||||
"properties": {
|
||||
"subnet": {
|
||||
@ -3769,6 +3888,9 @@
|
||||
{
|
||||
"$ref": "#/$defs/network.DefaultActionConfigV1Alpha1"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/network.EthernetConfigV1Alpha1"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/network.KubespanEndpointsConfigV1Alpha1"
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user