Skip to content

Commit 4217f0b

Browse files
authored
Merge branch 'master' into add_soak_test_rel_test
2 parents 8c0caef + 4f08b5a commit 4217f0b

File tree

13 files changed

+737
-75
lines changed

13 files changed

+737
-75
lines changed

.github/workflows/kops-test.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ jobs:
4343
ROLE_ARN: ${{ secrets.EKS_CLUSTER_ROLE_ARN }}
4444
RUN_CNI_INTEGRATION_TESTS: false
4545
RUN_KOPS_TEST: true
46-
K8S_VERSION: 1.33.0-beta.0
47-
KOPS_VERSION: v1.33.0-beta.1
46+
K8S_VERSION: 1.34.0-beta.0
47+
KOPS_VERSION: v1.34.0-beta.1
4848
KOPS_RUN_TOO_NEW_VERSION: 1
4949
run: |
5050
./scripts/run-integration-tests.sh

cmd/aws-vpc-cni-init/main.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ package main
1717
import (
1818
"os"
1919

20+
"github.com/aws/amazon-vpc-cni-k8s/pkg/netlinkwrapper"
2021
"github.com/aws/amazon-vpc-cni-k8s/pkg/procsyswrapper"
2122
"github.com/aws/amazon-vpc-cni-k8s/utils"
2223
"github.com/aws/amazon-vpc-cni-k8s/utils/cp"
2324
"github.com/aws/amazon-vpc-cni-k8s/utils/imds"
2425

2526
"github.com/pkg/errors"
2627
log "github.com/sirupsen/logrus"
27-
"github.com/vishvananda/netlink"
2828
)
2929

3030
const (
@@ -49,7 +49,8 @@ func getNodePrimaryIF() (string, error) {
4949
}
5050
log.Infof("Found primaryMAC %s", primaryMAC)
5151

52-
links, err := netlink.LinkList()
52+
nl := netlinkwrapper.NewNetLink()
53+
links, err := nl.LinkList()
5354
if err != nil {
5455
return primaryIF, errors.Wrap(err, "Failed to list links")
5556
}

cmd/routed-eni-cni-plugin/driver/driver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@ func (n *linuxNetwork) teardownIPBasedContainerRouteRules(containerAddr *net.IPN
564564
log.Debugf("Successfully deleted toContainer rule, containerAddr=%s, rtTable=%v", containerAddr.String(), "main")
565565

566566
if rtTable != unix.RT_TABLE_MAIN {
567-
fromContainerRule := netlink.NewRule()
567+
fromContainerRule := n.netLink.NewRule()
568568
fromContainerRule.Src = containerAddr
569569
fromContainerRule.Priority = networkutils.FromPodRulePriority
570570
fromContainerRule.Table = rtTable

go.mod

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ require (
66
github.com/apparentlymart/go-cidr v1.1.0
77
github.com/aws/amazon-vpc-cni-k8s/test/agent v0.0.0-20231212223725-21c4bd73015b
88
github.com/aws/amazon-vpc-resource-controller-k8s v1.7.14
9-
github.com/aws/aws-sdk-go-v2 v1.39.1
10-
github.com/aws/aws-sdk-go-v2/config v1.31.10
11-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.8
12-
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.59.2
13-
github.com/aws/aws-sdk-go-v2/service/cloudformation v1.66.3
14-
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.51.0
15-
github.com/aws/aws-sdk-go-v2/service/ec2 v1.254.0
16-
github.com/aws/aws-sdk-go-v2/service/eks v1.74.1
17-
github.com/aws/aws-sdk-go-v2/service/iam v1.47.6
9+
github.com/aws/aws-sdk-go-v2 v1.39.2
10+
github.com/aws/aws-sdk-go-v2/config v1.31.12
11+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9
12+
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.59.3
13+
github.com/aws/aws-sdk-go-v2/service/cloudformation v1.66.4
14+
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.51.1
15+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.254.1
16+
github.com/aws/aws-sdk-go-v2/service/eks v1.74.2
17+
github.com/aws/aws-sdk-go-v2/service/iam v1.47.7
1818
github.com/aws/smithy-go v1.23.0
1919
github.com/containernetworking/cni v1.2.3
2020
github.com/containernetworking/plugins v1.5.1
@@ -61,15 +61,15 @@ require (
6161
github.com/Masterminds/sprig/v3 v3.3.0 // indirect
6262
github.com/Masterminds/squirrel v1.5.4 // indirect
6363
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
64-
github.com/aws/aws-sdk-go-v2/credentials v1.18.14 // indirect
65-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.8 // indirect
66-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.8 // indirect
64+
github.com/aws/aws-sdk-go-v2/credentials v1.18.16 // indirect
65+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9 // indirect
66+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9 // indirect
6767
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
6868
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1 // indirect
69-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.8 // indirect
70-
github.com/aws/aws-sdk-go-v2/service/sso v1.29.4 // indirect
71-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.0 // indirect
72-
github.com/aws/aws-sdk-go-v2/service/sts v1.38.5 // indirect
69+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9 // indirect
70+
github.com/aws/aws-sdk-go-v2/service/sso v1.29.6 // indirect
71+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1 // indirect
72+
github.com/aws/aws-sdk-go-v2/service/sts v1.38.6 // indirect
7373
github.com/beorn7/perks v1.0.1 // indirect
7474
github.com/blang/semver/v4 v4.0.0 // indirect
7575
github.com/cespare/xxhash/v2 v2.3.0 // indirect

go.sum

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -30,42 +30,42 @@ github.com/aws/amazon-vpc-cni-k8s/test/agent v0.0.0-20231212223725-21c4bd73015b
3030
github.com/aws/amazon-vpc-cni-k8s/test/agent v0.0.0-20231212223725-21c4bd73015b/go.mod h1:NvS1b2fBgkUvAWgBF8h0aRaVVoUeIlpUMnlTW2wIqik=
3131
github.com/aws/amazon-vpc-resource-controller-k8s v1.7.14 h1:yNVxFCiX+G+s4r97S6J+n2yUN+XcA8BRNl8EDZJLc2c=
3232
github.com/aws/amazon-vpc-resource-controller-k8s v1.7.14/go.mod h1:4LvyjChJniQoNMLfmdzAwUy6JfYGB1DKHEEvd6Hq93E=
33-
github.com/aws/aws-sdk-go-v2 v1.39.1 h1:fWZhGAwVRK/fAN2tmt7ilH4PPAE11rDj7HytrmbZ2FE=
34-
github.com/aws/aws-sdk-go-v2 v1.39.1/go.mod h1:sDioUELIUO9Znk23YVmIk86/9DOpkbyyVb1i/gUNFXY=
35-
github.com/aws/aws-sdk-go-v2/config v1.31.10 h1:7LllDZAegXU3yk41mwM6KcPu0wmjKGQB1bg99bNdQm4=
36-
github.com/aws/aws-sdk-go-v2/config v1.31.10/go.mod h1:Ge6gzXPjqu4v0oHvgAwvGzYcK921GU0hQM25WF/Kl+8=
37-
github.com/aws/aws-sdk-go-v2/credentials v1.18.14 h1:TxkI7QI+sFkTItN/6cJuMZEIVMFXeu2dI1ZffkXngKI=
38-
github.com/aws/aws-sdk-go-v2/credentials v1.18.14/go.mod h1:12x4Uw/vijC11XkctTjy92TNCQ+UnNJkT7fzX0Yd93E=
39-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.8 h1:gLD09eaJUdiszm7vd1btiQUYE0Hj+0I2b8AS+75z9AY=
40-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.8/go.mod h1:4RW3oMPt1POR74qVOC4SbubxAwdP4pCT0nSw3jycOU4=
41-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.8 h1:6bgAZgRyT4RoFWhxS+aoGMFyE0cD1bSzFnEEi4bFPGI=
42-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.8/go.mod h1:KcGkXFVU8U28qS4KvLEcPxytPZPBcRawaH2Pf/0jptE=
43-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.8 h1:HhJYoES3zOz34yWEpGENqJvRVPqpmJyR3+AFg9ybhdY=
44-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.8/go.mod h1:JnA+hPWeYAVbDssp83tv+ysAG8lTfLVXvSsyKg/7xNA=
33+
github.com/aws/aws-sdk-go-v2 v1.39.2 h1:EJLg8IdbzgeD7xgvZ+I8M1e0fL0ptn/M47lianzth0I=
34+
github.com/aws/aws-sdk-go-v2 v1.39.2/go.mod h1:sDioUELIUO9Znk23YVmIk86/9DOpkbyyVb1i/gUNFXY=
35+
github.com/aws/aws-sdk-go-v2/config v1.31.12 h1:pYM1Qgy0dKZLHX2cXslNacbcEFMkDMl+Bcj5ROuS6p8=
36+
github.com/aws/aws-sdk-go-v2/config v1.31.12/go.mod h1:/MM0dyD7KSDPR+39p9ZNVKaHDLb9qnfDurvVS2KAhN8=
37+
github.com/aws/aws-sdk-go-v2/credentials v1.18.16 h1:4JHirI4zp958zC026Sm+V4pSDwW4pwLefKrc0bF2lwI=
38+
github.com/aws/aws-sdk-go-v2/credentials v1.18.16/go.mod h1:qQMtGx9OSw7ty1yLclzLxXCRbrkjWAM7JnObZjmCB7I=
39+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9 h1:Mv4Bc0mWmv6oDuSWTKnk+wgeqPL5DRFu5bQL9BGPQ8Y=
40+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9/go.mod h1:IKlKfRppK2a1y0gy1yH6zD+yX5uplJ6UuPlgd48dJiQ=
41+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9 h1:se2vOWGD3dWQUtfn4wEjRQJb1HK1XsNIt825gskZ970=
42+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9/go.mod h1:hijCGH2VfbZQxqCDN7bwz/4dzxV+hkyhjawAtdPWKZA=
43+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9 h1:6RBnKZLkJM4hQ+kN6E7yWFveOTg8NLPHAkqrs4ZPlTU=
44+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9/go.mod h1:V9rQKRmK7AWuEsOMnHzKj8WyrIir1yUJbZxDuZLFvXI=
4545
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo=
4646
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo=
47-
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.59.2 h1:YOWVoIjUoiwAVIRVU3PG2yNldh9dQT5OegnO99RO4ls=
48-
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.59.2/go.mod h1:t08UbddtoRQcKiIW2ZTfxX5x6vRaTj6KrKcf1R0I4tw=
49-
github.com/aws/aws-sdk-go-v2/service/cloudformation v1.66.3 h1:P+Jr65DtpIuYme6a3pjsvDIpCfNDk8oCFVzGsfhWqz0=
50-
github.com/aws/aws-sdk-go-v2/service/cloudformation v1.66.3/go.mod h1:J5tabKm/zD5b3Uz4LKdZytESCQu0MGEzxUX7XYOOhNw=
51-
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.51.0 h1:T89y6fFOoARScOka13bVC3xuDdfvnccxZBhCA7Y5vcU=
52-
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.51.0/go.mod h1:6TdW6zAw6JIlaGSgRb/kV6pX7k7JfxiqKbymr6qB7ko=
53-
github.com/aws/aws-sdk-go-v2/service/ec2 v1.254.0 h1:fTLR6dLDTGChAjecRPlVrKeznT0rVdzR4yn9Z68MTGk=
54-
github.com/aws/aws-sdk-go-v2/service/ec2 v1.254.0/go.mod h1:V0jbRy1/IPapnkqgXSwVOFB+u5pnCwd9S+R3pKWULC4=
55-
github.com/aws/aws-sdk-go-v2/service/eks v1.74.1 h1:/twnp/d6RQaccM/hEin33E5iYG0vLQY9DDRDleB6UGw=
56-
github.com/aws/aws-sdk-go-v2/service/eks v1.74.1/go.mod h1:YfA/RHfplvaNVxukwg3e4KWJpsL7Ic7bfvCXhJnhbzQ=
57-
github.com/aws/aws-sdk-go-v2/service/iam v1.47.6 h1:EWehQXACWr+6hzfZPwZChlfoVhiUCfLHE0Xh3kAfzWQ=
58-
github.com/aws/aws-sdk-go-v2/service/iam v1.47.6/go.mod h1:qRXgEBWPIltrWHQwU+HkyBvwh1QgeigFcaCGCIVrWk0=
47+
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.59.3 h1:2tVkkifL19ZmmCRJyOudUuTNRzA1SYN7D32iEkB8CvE=
48+
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.59.3/go.mod h1:/Utcw7rzRwiW7C9ypYInnEtgyU7Nr8eG3+RFUUvuE1o=
49+
github.com/aws/aws-sdk-go-v2/service/cloudformation v1.66.4 h1:tvF35CdW6EWnRnBR8wJkwp9sdQGpw5/DzVbWzwKj65E=
50+
github.com/aws/aws-sdk-go-v2/service/cloudformation v1.66.4/go.mod h1:/q63oDWCyO4xLLRiVYpwufJDwSkL0IbC5epFNJne8JQ=
51+
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.51.1 h1:GqVafesryYki8Lw/yRzLcoSeaT06qSAIbLoZLqeY0ks=
52+
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.51.1/go.mod h1:Kg/y+WTU5U8KtZ8vYYz0CyiR8UCBbZkpsT7TeqIkQ2M=
53+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.254.1 h1:7p9bJCZ/b3EJXXARW7JMEs2IhsnI4YFHpfXQfgMh0eg=
54+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.254.1/go.mod h1:M8WWWIfXmxA4RgTXcI/5cSByxRqjgne32Sh0VIbrn0A=
55+
github.com/aws/aws-sdk-go-v2/service/eks v1.74.2 h1:GKqBur7gp6rnYbMZXh2+89f8g+/bu26ZKwpXfXrno80=
56+
github.com/aws/aws-sdk-go-v2/service/eks v1.74.2/go.mod h1:f1/1x766rRjLVUk94exobjhggT1MR3vO4wxglqOvpY4=
57+
github.com/aws/aws-sdk-go-v2/service/iam v1.47.7 h1:0EDAdmMTzsgXl++8a0JZ+Yx0/dOqT8o/EONknxlQK94=
58+
github.com/aws/aws-sdk-go-v2/service/iam v1.47.7/go.mod h1:NkNbn/8/mFrPUq0Kg6EM6c0+GaTLG+aPzXxwB7RF5xo=
5959
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1 h1:oegbebPEMA/1Jny7kvwejowCaHz1FWZAQ94WXFNCyTM=
6060
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1/go.mod h1:kemo5Myr9ac0U9JfSjMo9yHLtw+pECEHsFtJ9tqCEI8=
61-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.8 h1:M6JI2aGFEzYxsF6CXIuRBnkge9Wf9a2xU39rNeXgu10=
62-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.8/go.mod h1:Fw+MyTwlwjFsSTE31mH211Np+CUslml8mzc0AFEG09s=
63-
github.com/aws/aws-sdk-go-v2/service/sso v1.29.4 h1:FTdEN9dtWPB0EOURNtDPmwGp6GGvMqRJCAihkSl/1No=
64-
github.com/aws/aws-sdk-go-v2/service/sso v1.29.4/go.mod h1:mYubxV9Ff42fZH4kexj43gFPhgc/LyC7KqvUKt1watc=
65-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.0 h1:I7ghctfGXrscr7r1Ga/mDqSJKm7Fkpl5Mwq79Z+rZqU=
66-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.0/go.mod h1:Zo9id81XP6jbayIFWNuDpA6lMBWhsVy+3ou2jLa4JnA=
67-
github.com/aws/aws-sdk-go-v2/service/sts v1.38.5 h1:+LVB0xBqEgjQoqr9bGZbRzvg212B0f17JdflleJRNR4=
68-
github.com/aws/aws-sdk-go-v2/service/sts v1.38.5/go.mod h1:xoaxeqnnUaZjPjaICgIy5B+MHCSb/ZSOn4MvkFNOUA0=
61+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9 h1:5r34CgVOD4WZudeEKZ9/iKpiT6cM1JyEROpXjOcdWv8=
62+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9/go.mod h1:dB12CEbNWPbzO2uC6QSWHteqOg4JfBVJOojbAoAUb5I=
63+
github.com/aws/aws-sdk-go-v2/service/sso v1.29.6 h1:A1oRkiSQOWstGh61y4Wc/yQ04sqrQZr1Si/oAXj20/s=
64+
github.com/aws/aws-sdk-go-v2/service/sso v1.29.6/go.mod h1:5PfYspyCU5Vw1wNPsxi15LZovOnULudOQuVxphSflQA=
65+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1 h1:5fm5RTONng73/QA73LhCNR7UT9RpFH3hR6HWL6bIgVY=
66+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1/go.mod h1:xBEjWD13h+6nq+z4AkqSfSvqRKFgDIQeaMguAJndOWo=
67+
github.com/aws/aws-sdk-go-v2/service/sts v1.38.6 h1:p3jIvqYwUZgu/XYeI48bJxOhvm47hZb5HUQ0tn6Q9kA=
68+
github.com/aws/aws-sdk-go-v2/service/sts v1.38.6/go.mod h1:WtKK+ppze5yKPkZ0XwqIVWD4beCwv056ZbPQNoeHqM8=
6969
github.com/aws/smithy-go v1.23.0 h1:8n6I3gXzWJB2DxBDnfxgBaSX6oe0d/t10qGz7OKqMCE=
7070
github.com/aws/smithy-go v1.23.0/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
7171
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=

misc/eni-max-pods.txt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,26 @@ c8gn.medium 8
262262
c8gn.metal-24xl 1178
263263
c8gn.metal-48xl 590
264264
c8gn.xlarge 58
265+
c8i-flex.12xlarge 590
266+
c8i-flex.16xlarge 1010
267+
c8i-flex.2xlarge 118
268+
c8i-flex.4xlarge 394
269+
c8i-flex.8xlarge 492
270+
c8i-flex.large 59
271+
c8i-flex.xlarge 118
272+
c8i.12xlarge 590
273+
c8i.16xlarge 1010
274+
c8i.24xlarge 1010
275+
c8i.2xlarge 118
276+
c8i.32xlarge 1514
277+
c8i.48xlarge 1514
278+
c8i.4xlarge 394
279+
c8i.8xlarge 492
280+
c8i.96xlarge 1514
281+
c8i.large 59
282+
c8i.metal-48xl 1514
283+
c8i.metal-96xl 1514
284+
c8i.xlarge 118
265285
cr1.8xlarge 234
266286
d2.2xlarge 58
267287
d2.4xlarge 234
@@ -638,6 +658,18 @@ m7i.large 29
638658
m7i.metal-24xl 737
639659
m7i.metal-48xl 737
640660
m7i.xlarge 58
661+
m8a.12xlarge 758
662+
m8a.16xlarge 1010
663+
m8a.24xlarge 1010
664+
m8a.2xlarge 158
665+
m8a.48xlarge 1514
666+
m8a.4xlarge 314
667+
m8a.8xlarge 392
668+
m8a.large 59
669+
m8a.medium 8
670+
m8a.metal-24xl 1010
671+
m8a.metal-48xl 1514
672+
m8a.xlarge 78
641673
m8g.12xlarge 234
642674
m8g.16xlarge 737
643675
m8g.24xlarge 737

pkg/netlinkwrapper/netlink.go

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,17 @@
1515
package netlinkwrapper
1616

1717
import (
18+
"errors"
19+
"fmt"
1820
"syscall"
21+
"time"
1922

23+
"github.com/aws/amazon-vpc-cni-k8s/pkg/utils/logger"
2024
"github.com/vishvananda/netlink"
2125
)
2226

27+
var log = logger.Get()
28+
2329
// NetLink wraps methods used from the vishvananda/netlink package
2430
type NetLink interface {
2531
// LinkByName gets a link object given the device name
@@ -69,6 +75,30 @@ type NetLink interface {
6975
type netLink struct {
7076
}
7177

78+
func retryOnErrDumpInterrupted(f func() error) error {
79+
var lastErr error
80+
const maxAttempts = 5
81+
for attempt := 0; attempt < maxAttempts; attempt++ {
82+
err := f()
83+
if err == nil {
84+
log.Debugf("netlink operation succeeded on attempt %d of %d", attempt+1, maxAttempts)
85+
return nil
86+
}
87+
if !errors.Is(err, netlink.ErrDumpInterrupted) {
88+
log.Errorf("netlink operation failed with unrecoverable error on attempt %d of %d: %v", attempt+1, maxAttempts, err)
89+
return fmt.Errorf("netlink operation failed: %w", err)
90+
}
91+
log.Debugf("netlink operation interrupted on attempt %d of %d", attempt+1, maxAttempts)
92+
lastErr = err
93+
// Add small delay after first failed attempt to avoid overwhelming the kernel
94+
if attempt > 0 {
95+
time.Sleep(100 * time.Millisecond)
96+
}
97+
}
98+
log.Errorf("netlink operation interruption persisted after %d attempts: %v", maxAttempts, lastErr)
99+
return fmt.Errorf("netlink operation interruption persisted after %d attempts: %w", maxAttempts, lastErr)
100+
}
101+
72102
// NewNetLink creates a new NetLink object
73103
func NewNetLink() NetLink {
74104
return &netLink{}
@@ -103,15 +133,27 @@ func (*netLink) LinkSetUp(link netlink.Link) error {
103133
}
104134

105135
func (*netLink) LinkList() ([]netlink.Link, error) {
106-
return netlink.LinkList()
136+
var links []netlink.Link
137+
var err error
138+
err = retryOnErrDumpInterrupted(func() error {
139+
links, err = netlink.LinkList()
140+
return err
141+
})
142+
return links, err
107143
}
108144

109145
func (*netLink) LinkSetDown(link netlink.Link) error {
110146
return netlink.LinkSetDown(link)
111147
}
112148

113149
func (*netLink) RouteList(link netlink.Link, family int) ([]netlink.Route, error) {
114-
return netlink.RouteList(link, family)
150+
var routes []netlink.Route
151+
var err error
152+
err = retryOnErrDumpInterrupted(func() error {
153+
routes, err = netlink.RouteList(link, family)
154+
return err
155+
})
156+
return routes, err
115157
}
116158

117159
func (*netLink) RouteAdd(route *netlink.Route) error {
@@ -127,7 +169,13 @@ func (*netLink) RouteDel(route *netlink.Route) error {
127169
}
128170

129171
func (*netLink) AddrList(link netlink.Link, family int) ([]netlink.Addr, error) {
130-
return netlink.AddrList(link, family)
172+
var addrs []netlink.Addr
173+
var err error
174+
err = retryOnErrDumpInterrupted(func() error {
175+
addrs, err = netlink.AddrList(link, family)
176+
return err
177+
})
178+
return addrs, err
131179
}
132180

133181
func (*netLink) NeighAdd(neigh *netlink.Neigh) error {
@@ -151,7 +199,13 @@ func (*netLink) RuleDel(rule *netlink.Rule) error {
151199
}
152200

153201
func (*netLink) RuleList(family int) ([]netlink.Rule, error) {
154-
return netlink.RuleList(family)
202+
var rules []netlink.Rule
203+
var err error
204+
err = retryOnErrDumpInterrupted(func() error {
205+
rules, err = netlink.RuleList(family)
206+
return err
207+
})
208+
return rules, err
155209
}
156210

157211
func (*netLink) LinkSetMTU(link netlink.Link, mtu int) error {

0 commit comments

Comments
 (0)