chore: upgrade to rtnetlink/v2 library

The v1 version is no longer supported.

The major change is the decoding of link data, but we're not using it,
as we have our own decoders/encoders for a long time.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
This commit is contained in:
Andrey Smirnov 2024-06-13 17:48:36 +04:00
parent 1fb8453c2d
commit 6f6a5d1057
No known key found for this signature in database
GPG Key ID: FE042E3D4085A811
18 changed files with 79 additions and 33 deletions

4
go.mod
View File

@ -92,7 +92,7 @@ require (
github.com/hetznercloud/hcloud-go/v2 v2.9.0
github.com/insomniacslk/dhcp v0.0.0-20240529192340-51bc6136a0a6
github.com/jeromer/syslogparser v1.1.0
github.com/jsimonetti/rtnetlink v1.4.2
github.com/jsimonetti/rtnetlink/v2 v2.0.2
github.com/jxskiss/base62 v1.1.0
github.com/klauspost/compress v1.17.9
github.com/klauspost/cpuid/v2 v2.2.8
@ -147,7 +147,7 @@ require (
github.com/siderolabs/grpc-proxy v0.4.0
github.com/siderolabs/kms-client v0.1.0
github.com/siderolabs/net v0.4.0
github.com/siderolabs/siderolink v0.3.8
github.com/siderolabs/siderolink v0.3.9
github.com/siderolabs/talos/pkg/machinery v1.8.0-alpha.0.0.20240521134552-e1711cd3c985
github.com/spf13/cobra v1.8.0
github.com/spf13/pflag v1.0.5

8
go.sum
View File

@ -436,8 +436,8 @@ github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtL
github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
github.com/jsimonetti/rtnetlink v0.0.0-20190606172950-9527aa82566a/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw=
github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4/go.mod h1:WGuG/smIU4J/54PblvSbh+xvCZmpJnFgr3ds6Z55XMQ=
github.com/jsimonetti/rtnetlink v1.4.2 h1:Df9w9TZ3npHTyDn0Ev9e1uzmN2odmXd0QX+J5GTEn90=
github.com/jsimonetti/rtnetlink v1.4.2/go.mod h1:92s6LJdE+1iOrw+F2/RO7LYI2Qd8pPpFNNUYW06gcoM=
github.com/jsimonetti/rtnetlink/v2 v2.0.2 h1:ZKlbCujrIpp4/u3V2Ka0oxlf4BCkt6ojkvpy3nZoCBY=
github.com/jsimonetti/rtnetlink/v2 v2.0.2/go.mod h1:7MoNYNbb3UaDHtF8udiJo/RH6VsTKP1pqKLUTVCvToE=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
@ -680,8 +680,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/protoenc v0.2.1 h1:BqxEmeWQeMpNP3R6WrPqDatX8sM/r4t97OP8mFmg6GA=
github.com/siderolabs/protoenc v0.2.1/go.mod h1:StTHxjet1g11GpNAWiATgc8K0HMKiFSEVVFOa/H0otc=
github.com/siderolabs/siderolink v0.3.8 h1:UPG7SKgWXCrCRiHfQkHZQYy0xSVSF+KitnhXYC+ofAE=
github.com/siderolabs/siderolink v0.3.8/go.mod h1:mgfFQbAB28mX88jJp/7LlWmoyMEB4CcObcdJUcdNskQ=
github.com/siderolabs/siderolink v0.3.9 h1:lvHFCu+CdfUyMk90g1Zt5r7n1Dw3jhXMxyzXmQ0776o=
github.com/siderolabs/siderolink v0.3.9/go.mod h1:QbGnXpHI5MDq6qMZkCFnxYOOw5eE+lkLx53L5ZgjLMQ=
github.com/siderolabs/tcpproxy v0.1.0 h1:IbkS9vRhjMOscc1US3M5P1RnsGKFgB6U5IzUk+4WkKA=
github.com/siderolabs/tcpproxy v0.1.0/go.mod h1:onn6CPPj/w1UNqQ0U97oRPF0CqbrgEApYCw4P9IiCW8=
github.com/siderolabs/wgctrl-go v0.0.0-20240401105613-579af3342774 h1:wLhs5zMQVjA6LN9WpF2owOdtcoRp40zL8AaQSle+9EE=

View File

@ -14,7 +14,7 @@ import (
"github.com/cosi-project/runtime/pkg/controller"
"github.com/cosi-project/runtime/pkg/resource"
"github.com/jsimonetti/rtnetlink"
"github.com/jsimonetti/rtnetlink/v2"
"github.com/mdlayher/arp"
"go.uber.org/zap"
"go4.org/netipx"

View File

@ -21,7 +21,7 @@ import (
"github.com/cosi-project/runtime/pkg/state"
"github.com/cosi-project/runtime/pkg/state/impl/inmem"
"github.com/cosi-project/runtime/pkg/state/impl/namespaced"
"github.com/jsimonetti/rtnetlink"
"github.com/jsimonetti/rtnetlink/v2"
"github.com/siderolabs/go-retry/retry"
"github.com/stretchr/testify/suite"
"go.uber.org/zap/zaptest"

View File

@ -11,7 +11,7 @@ import (
"github.com/cosi-project/runtime/pkg/controller"
"github.com/cosi-project/runtime/pkg/resource"
"github.com/jsimonetti/rtnetlink"
"github.com/jsimonetti/rtnetlink/v2"
"go.uber.org/zap"
"golang.org/x/sys/unix"

View File

@ -14,7 +14,7 @@ import (
"github.com/cosi-project/runtime/pkg/resource"
"github.com/cosi-project/runtime/pkg/safe"
"github.com/hashicorp/go-multierror"
"github.com/jsimonetti/rtnetlink"
"github.com/jsimonetti/rtnetlink/v2"
"github.com/siderolabs/gen/pair/ordered"
"github.com/siderolabs/go-pointer"
"go.uber.org/zap"
@ -231,6 +231,14 @@ func (ctrl *LinkSpecController) syncLink(ctx context.Context, r controller.Runti
case resource.PhaseRunning:
existing := findLink(*links, link.TypedSpec().Name)
var existingRawLinkData []byte
if existing != nil && existing.Attributes != nil && existing.Attributes.Info != nil && existing.Attributes.Info.Data != nil {
if existingLinkData, ok := existing.Attributes.Info.Data.(*rtnetlink.LinkData); ok {
existingRawLinkData = existingLinkData.Data
}
}
// check if type/kind matches for the existing logical link
if existing != nil && link.TypedSpec().Logical {
replace := false
@ -261,7 +269,11 @@ func (ctrl *LinkSpecController) syncLink(ctx context.Context, r controller.Runti
if !replace && link.TypedSpec().Kind == network.LinkKindVLAN {
var existingVLAN network.VLANSpec
if err := networkadapter.VLANSpec(&existingVLAN).Decode(existing.Attributes.Info.Data); err != nil {
if existingRawLinkData == nil {
return fmt.Errorf("existing link %q has no data, can't decode VLAN settings", link.TypedSpec().Name)
}
if err := networkadapter.VLANSpec(&existingVLAN).Decode(existingRawLinkData); err != nil {
return fmt.Errorf("error decoding VLAN properties on %q: %w", link.TypedSpec().Name, err)
}
@ -326,9 +338,12 @@ func (ctrl *LinkSpecController) syncLink(ctx context.Context, r controller.Runti
Type: parentIndex,
Info: &rtnetlink.LinkInfo{
Kind: link.TypedSpec().Kind,
Data: &rtnetlink.LinkData{
Name: link.TypedSpec().Kind,
Data: data,
},
},
},
}); err != nil {
return fmt.Errorf("error creating logical link %q: %w", link.TypedSpec().Name, err)
}
@ -351,7 +366,11 @@ func (ctrl *LinkSpecController) syncLink(ctx context.Context, r controller.Runti
if link.TypedSpec().Kind == network.LinkKindBond {
var existingBond network.BondMasterSpec
if err := networkadapter.BondMasterSpec(&existingBond).Decode(existing.Attributes.Info.Data); err != nil {
if existingRawLinkData == nil {
return fmt.Errorf("existing link %q has no data, can't decode bond settings", link.TypedSpec().Name)
}
if err := networkadapter.BondMasterSpec(&existingBond).Decode(existingRawLinkData); err != nil {
return fmt.Errorf("error parsing bond attributes for %q: %w", link.TypedSpec().Name, err)
}
@ -403,9 +422,12 @@ func (ctrl *LinkSpecController) syncLink(ctx context.Context, r controller.Runti
Attributes: &rtnetlink.LinkAttributes{
Info: &rtnetlink.LinkInfo{
Kind: existing.Attributes.Info.Kind,
Data: &rtnetlink.LinkData{
Name: existing.Attributes.Info.Kind,
Data: data,
},
},
},
}); err != nil {
return fmt.Errorf("error updating bond settings for %q: %w", link.TypedSpec().Name, err)
}
@ -418,7 +440,11 @@ func (ctrl *LinkSpecController) syncLink(ctx context.Context, r controller.Runti
if link.TypedSpec().Kind == network.LinkKindBridge {
var existingBridge network.BridgeMasterSpec
if err := networkadapter.BridgeMasterSpec(&existingBridge).Decode(existing.Attributes.Info.Data); err != nil {
if existingRawLinkData == nil {
return fmt.Errorf("existing link %q has no data, can't decode bridge settings", link.TypedSpec().Name)
}
if err := networkadapter.BridgeMasterSpec(&existingBridge).Decode(existingRawLinkData); err != nil {
return fmt.Errorf("error parsing bridge attributes for %q: %w", link.TypedSpec().Name, err)
}
@ -470,9 +496,12 @@ func (ctrl *LinkSpecController) syncLink(ctx context.Context, r controller.Runti
Attributes: &rtnetlink.LinkAttributes{
Info: &rtnetlink.LinkInfo{
Kind: existing.Attributes.Info.Kind,
Data: &rtnetlink.LinkData{
Name: existing.Attributes.Info.Kind,
Data: data,
},
},
},
}); err != nil {
return fmt.Errorf("error updating bridge settings for %q: %w", link.TypedSpec().Name, err)
}

View File

@ -13,7 +13,7 @@ import (
"github.com/cosi-project/runtime/pkg/controller"
"github.com/cosi-project/runtime/pkg/resource"
"github.com/jsimonetti/rtnetlink"
"github.com/jsimonetti/rtnetlink/v2"
"github.com/mdlayher/ethtool"
ethtoolioctl "github.com/safchain/ethtool"
"go.uber.org/zap"
@ -297,17 +297,31 @@ func (ctrl *LinkStatusController) reconcile(
status.FirmwareVersion = driverInfo.FwVersion
// link.Attributes.Info will be non-nil, because we set status.Kind above using link.Attributes.Info.Kind
var rawLinkData []byte
if link.Attributes.Info != nil && link.Attributes.Info.Data != nil {
if linkData, ok := link.Attributes.Info.Data.(*rtnetlink.LinkData); ok {
rawLinkData = linkData.Data
}
}
switch status.Kind {
case network.LinkKindVLAN:
if err = networkadapter.VLANSpec(&status.VLAN).Decode(link.Attributes.Info.Data); err != nil {
if rawLinkData == nil {
logger.Warn("VLAN link data is nil", zap.String("link", link.Attributes.Name))
} else if err = networkadapter.VLANSpec(&status.VLAN).Decode(rawLinkData); err != nil {
logger.Warn("failure decoding VLAN attributes", zap.Error(err), zap.String("link", link.Attributes.Name))
}
case network.LinkKindBond:
if err = networkadapter.BondMasterSpec(&status.BondMaster).Decode(link.Attributes.Info.Data); err != nil {
if rawLinkData == nil {
logger.Warn("bond link data is nil", zap.String("link", link.Attributes.Name))
} else if err = networkadapter.BondMasterSpec(&status.BondMaster).Decode(rawLinkData); err != nil {
logger.Warn("failure decoding bond attributes", zap.Error(err), zap.String("link", link.Attributes.Name))
}
case network.LinkKindBridge:
if err = networkadapter.BridgeMasterSpec(&status.BridgeMaster).Decode(link.Attributes.Info.Data); err != nil {
if rawLinkData == nil {
logger.Warn("bridge link data is nil", zap.String("link", link.Attributes.Name))
} else if err = networkadapter.BridgeMasterSpec(&status.BridgeMaster).Decode(rawLinkData); err != nil {
logger.Warn("failure decoding bridge attributes", zap.Error(err), zap.String("link", link.Attributes.Name))
}
case network.LinkKindWireguard:

View File

@ -22,7 +22,7 @@ import (
"github.com/cosi-project/runtime/pkg/state"
"github.com/cosi-project/runtime/pkg/state/impl/inmem"
"github.com/cosi-project/runtime/pkg/state/impl/namespaced"
"github.com/jsimonetti/rtnetlink"
"github.com/jsimonetti/rtnetlink/v2"
"github.com/mdlayher/netlink"
"github.com/siderolabs/go-retry/retry"
"github.com/stretchr/testify/suite"
@ -317,10 +317,13 @@ func (suite *LinkStatusSuite) TestBridgeInterface() {
Name: bridgeInterface,
Info: &rtnetlink.LinkInfo{
Kind: "bridge",
Data: &rtnetlink.LinkData{
Name: "bridge",
Data: bridgeData,
},
},
},
},
),
)

View File

@ -155,7 +155,7 @@ func (s *NfTablesChainSuite) TestICMPLimit() {
s.checkNftOutput(`table inet talos-test {
chain test1 {
type filter hook input priority security; policy accept;
meta l4proto icmp limit rate 5/second accept
meta l4proto icmp limit rate 5/second burst 5 packets accept
}
}`)
}

View File

@ -17,7 +17,7 @@ import (
"github.com/insomniacslk/dhcp/dhcpv6"
"github.com/insomniacslk/dhcp/dhcpv6/nclient6"
"github.com/jsimonetti/rtnetlink"
"github.com/jsimonetti/rtnetlink/v2"
"github.com/siderolabs/gen/xslices"
"github.com/siderolabs/go-retry/retry"
"go.uber.org/zap"

View File

@ -12,7 +12,7 @@ import (
"github.com/cosi-project/runtime/pkg/controller"
"github.com/cosi-project/runtime/pkg/resource"
"github.com/hashicorp/go-multierror"
"github.com/jsimonetti/rtnetlink"
"github.com/jsimonetti/rtnetlink/v2"
"github.com/siderolabs/gen/value"
"go.uber.org/zap"
"golang.org/x/sys/unix"

View File

@ -20,7 +20,7 @@ import (
"github.com/cosi-project/runtime/pkg/state"
"github.com/cosi-project/runtime/pkg/state/impl/inmem"
"github.com/cosi-project/runtime/pkg/state/impl/namespaced"
"github.com/jsimonetti/rtnetlink"
"github.com/jsimonetti/rtnetlink/v2"
"github.com/siderolabs/go-retry/retry"
"github.com/stretchr/testify/suite"
"go.uber.org/zap/zaptest"

View File

@ -11,7 +11,7 @@ import (
"github.com/cosi-project/runtime/pkg/controller"
"github.com/cosi-project/runtime/pkg/resource"
"github.com/jsimonetti/rtnetlink"
"github.com/jsimonetti/rtnetlink/v2"
"go.uber.org/zap"
"golang.org/x/sys/unix"

View File

@ -8,7 +8,7 @@ import (
"fmt"
"sync"
"github.com/jsimonetti/rtnetlink"
"github.com/jsimonetti/rtnetlink/v2"
"github.com/mdlayher/netlink"
)

View File

@ -15,7 +15,7 @@ require (
github.com/evanphx/json-patch v5.9.0+incompatible
github.com/ghodss/yaml v1.0.0
github.com/hashicorp/go-multierror v1.1.1
github.com/jsimonetti/rtnetlink v1.4.2
github.com/jsimonetti/rtnetlink/v2 v2.0.2
github.com/mdlayher/ethtool v0.1.0
github.com/opencontainers/runtime-spec v1.2.0
github.com/planetscale/vtprotobuf v0.6.0

View File

@ -56,8 +56,8 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA=
github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
github.com/jsimonetti/rtnetlink v1.4.2 h1:Df9w9TZ3npHTyDn0Ev9e1uzmN2odmXd0QX+J5GTEn90=
github.com/jsimonetti/rtnetlink v1.4.2/go.mod h1:92s6LJdE+1iOrw+F2/RO7LYI2Qd8pPpFNNUYW06gcoM=
github.com/jsimonetti/rtnetlink/v2 v2.0.2 h1:ZKlbCujrIpp4/u3V2Ka0oxlf4BCkt6ojkvpy3nZoCBY=
github.com/jsimonetti/rtnetlink/v2 v2.0.2/go.mod h1:7MoNYNbb3UaDHtF8udiJo/RH6VsTKP1pqKLUTVCvToE=
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=

View File

@ -5,7 +5,7 @@
package nethelpers
import (
"github.com/jsimonetti/rtnetlink"
"github.com/jsimonetti/rtnetlink/v2"
)
// OperationalState wraps rtnetlink.OperationalState for YAML marshaling.

View File

@ -21,7 +21,7 @@ import (
"github.com/containernetworking/plugins/pkg/testutils"
"github.com/coreos/go-iptables/iptables"
"github.com/google/uuid"
"github.com/jsimonetti/rtnetlink"
"github.com/jsimonetti/rtnetlink/v2"
"github.com/siderolabs/gen/xslices"
sideronet "github.com/siderolabs/net"
"github.com/vishvananda/netlink"