Skip to content

Commit 12e1801

Browse files
jayanthvnorsenthildependabot[bot]jaydeokaryash97
authored
Merge Main to Release 1.0 (#97)
* Use default error formating instead of wrap when errors.Wrap isn't implemented. Use default error formatting when the error wrap isn't available. The error message that was seen was ```{"level":"error","ts":"2024-06-30T10:52:42.597Z","caller":"ebpf/bpf_client.go:563","msg":"failed to find device by name eni3d4ff16416b: %!w(netlink.LinkNotFoundError={0xc0007ae7c0})"} ``` * Fixup update flow (#88) * Bump golang.org/x/sys from 0.20.0 to 0.24.0 (#89) Bumps [golang.org/x/sys](https://github.com/golang/sys) from 0.20.0 to 0.24.0. - [Commits](golang/sys@v0.20.0...v0.24.0) --- updated-dependencies: - dependency-name: golang.org/x/sys dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix test on rel-branch * Log the return error no from syscall * Fix PR checks Fix PR checks * fix go dependencies. * fix go.sum dependencies. * Bump github.com/vishvananda/netlink from 1.1.0 to 1.3.0 Bumps [github.com/vishvananda/netlink](https://github.com/vishvananda/netlink) from 1.1.0 to 1.3.0. - [Release notes](https://github.com/vishvananda/netlink/releases) - [Commits](vishvananda/netlink@v1.1.0...v1.3.0) --- updated-dependencies: - dependency-name: github.com/vishvananda/netlink dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> * Updated go.mod dependencies. * Bump golang.org/x/sys from 0.24.0 to 0.26.0 Bumps [golang.org/x/sys](https://github.com/golang/sys) from 0.24.0 to 0.26.0. - [Commits](golang/sys@v0.24.0...v0.26.0) --- updated-dependencies: - dependency-name: golang.org/x/sys dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> * updated go mod and go sum. * added GetBPFmapInfo method to support PIN_NONE where pinpath does not exist (#96) Co-authored-by: Nithish Kumar Murcherla <[email protected]> --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: Senthil Kumaran <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jay Deokar <[email protected]> Co-authored-by: Yash Thakkar <[email protected]> Co-authored-by: Senthil Kumaran <[email protected]> Co-authored-by: Nithish Murcherla <[email protected]> Co-authored-by: Nithish Kumar Murcherla <[email protected]>
1 parent 076432c commit 12e1801

File tree

10 files changed

+168
-31
lines changed

10 files changed

+168
-31
lines changed

.github/workflows/pr-tests.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
- name: Set up Go
2020
uses: actions/setup-go@v3
2121
with:
22-
go-version: "1.20"
22+
go-version: "1.23"
2323
- name: Set up tools
2424
run: |
2525
go install golang.org/x/lint/golint@latest
@@ -46,7 +46,7 @@ jobs:
4646
- name: Set up Go
4747
uses: actions/setup-go@v3
4848
with:
49-
go-version: "1.20"
49+
go-version: "1.23"
5050
- name: Set up BPF
5151
run: |
5252
sudo apt-get install libbpf-dev

go.mod

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
module github.com/aws/aws-ebpf-sdk-go
22

3-
go 1.19
3+
go 1.22.0
4+
5+
toolchain go1.22.7
46

57
require (
68
github.com/golang/mock v1.6.0
79
github.com/stretchr/testify v1.9.0
8-
github.com/vishvananda/netlink v1.1.0
10+
github.com/vishvananda/netlink v1.3.0
911
go.uber.org/zap v1.27.0
10-
golang.org/x/sys v0.24.0
12+
golang.org/x/sys v0.26.0
1113
gopkg.in/natefinch/lumberjack.v2 v2.2.1
1214
)
1315

1416
require (
1517
github.com/davecgh/go-spew v1.1.1 // indirect
1618
github.com/pmezard/go-difflib v1.0.0 // indirect
17-
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df // indirect
19+
github.com/vishvananda/netns v0.0.4 // indirect
1820
go.uber.org/multierr v1.10.0 // indirect
21+
golang.org/x/mod v0.21.0 // indirect
22+
golang.org/x/sync v0.8.0 // indirect
23+
golang.org/x/tools v0.26.0 // indirect
24+
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
1925
gopkg.in/yaml.v3 v3.0.1 // indirect
2026
)

go.sum

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
66
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
77
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
88
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
9-
github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0=
10-
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
11-
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df h1:OviZH7qLw/7ZovXvuNyL3XQl8UFofeikI1NW1Gypu7k=
12-
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
9+
github.com/vishvananda/netlink v1.3.0 h1:X7l42GfcV4S6E4vHTsw48qbrV+9PVojNfIhZcwQdrZk=
10+
github.com/vishvananda/netlink v1.3.0/go.mod h1:i6NetklAujEcC6fK0JPjT8qSwWyO0HLn4UKG+hGqeJs=
11+
github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8=
12+
github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
1313
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
1414
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
1515
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
@@ -19,25 +19,32 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
1919
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
2020
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
2121
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
22+
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
23+
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
2224
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
2325
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
2426
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
2527
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
2628
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
29+
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
30+
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
2731
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
2832
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
29-
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
3033
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
3134
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
3235
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
33-
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
34-
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
36+
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
37+
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
38+
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
39+
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
3540
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
3641
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
3742
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
3843
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
3944
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
4045
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
46+
golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ=
47+
golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
4148
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
4249
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
4350
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

pkg/elfparser/elf.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -201,12 +201,20 @@ func (e *elfLoader) loadMap(parsedMapData []ebpf_maps.CreateEBPFMapInput) (map[s
201201
}
202202

203203
//Fill ID
204-
mapInfo, err := (e.bpfMapApi).GetMapFromPinPath(pinPath)
205-
if err != nil {
206-
return nil, fmt.Errorf("map '%s' doesn't exist", mapNameStr)
204+
if loadedMaps.PinOptions.Type == constdef.PIN_NONE.Index() {
205+
mapInfo, err := (e.bpfMapApi).GetBPFmapInfo(bpfMap.MapFD)
206+
if err != nil {
207+
return nil, fmt.Errorf("failed to get map info '%s'", mapNameStr)
208+
}
209+
bpfMap.MapID = uint32(mapInfo.Id)
210+
} else {
211+
mapInfo, err := (e.bpfMapApi).GetMapFromPinPath(pinPath)
212+
if err != nil {
213+
return nil, fmt.Errorf("map '%s' doesn't exist", mapNameStr)
214+
}
215+
mapID := uint32(mapInfo.Id)
216+
bpfMap.MapID = mapID
207217
}
208-
mapID := uint32(mapInfo.Id)
209-
bpfMap.MapID = mapID
210218

211219
programmedMaps[loadedMaps.Name] = bpfMap
212220

@@ -279,9 +287,9 @@ func (e *elfLoader) loadProg(loadedProgData map[string]ebpf_progs.CreateEBPFProg
279287

280288
for _, pgmInput := range loadedProgData {
281289
bpfData := BpfData{}
282-
progFD, _ := e.bpfProgApi.LoadProg(pgmInput)
290+
progFD, errno := e.bpfProgApi.LoadProg(pgmInput)
283291
if progFD == -1 {
284-
log.Infof("Failed to load prog")
292+
log.Infof("Failed to load prog", "error", errno)
285293
return nil, fmt.Errorf("failed to Load the prog")
286294
}
287295
log.Infof("loaded prog with %d", progFD)

pkg/elfparser/elf_test.go

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,14 @@ package elfparser
1717
import (
1818
"debug/elf"
1919
"errors"
20+
"fmt"
2021
"os"
2122
"sort"
2223
"strings"
2324
"testing"
2425

26+
ebpf_maps "github.com/aws/aws-ebpf-sdk-go/pkg/maps"
27+
2528
constdef "github.com/aws/aws-ebpf-sdk-go/pkg/constants"
2629
mock_ebpf_maps "github.com/aws/aws-ebpf-sdk-go/pkg/maps/mocks"
2730
mock_ebpf_progs "github.com/aws/aws-ebpf-sdk-go/pkg/progs/mocks"
@@ -668,3 +671,87 @@ func TestProgType(t *testing.T) {
668671
})
669672
}
670673
}
674+
675+
func TestLoadMap(t *testing.T) {
676+
tests := []struct {
677+
name string
678+
pinType uint32
679+
mapFD uint32
680+
mapInfo ebpf_maps.BpfMapInfo
681+
wantMapID uint32
682+
wantErr bool
683+
getInfoErr error
684+
pinPath string
685+
}{
686+
{
687+
name: "Successful retrieval of map info",
688+
pinType: constdef.PIN_NONE.Index(),
689+
mapFD: 10,
690+
mapInfo: ebpf_maps.BpfMapInfo{Id: 12345},
691+
wantMapID: 12345,
692+
wantErr: false,
693+
},
694+
{
695+
name: "Map retrieval error",
696+
pinType: constdef.PIN_NONE.Index(),
697+
mapFD: 20,
698+
getInfoErr: fmt.Errorf("failed to get map info"),
699+
wantErr: true,
700+
},
701+
{
702+
name: "Pinned map retrieval from path",
703+
pinType: constdef.PIN_GLOBAL_NS.Index(),
704+
mapFD: 30,
705+
mapInfo: ebpf_maps.BpfMapInfo{Id: 54321},
706+
wantMapID: 54321,
707+
wantErr: false,
708+
pinPath: "/sys/fs/bpf/globals/aws/maps/test_map",
709+
},
710+
}
711+
712+
for _, tt := range tests {
713+
t.Run(tt.name, func(t *testing.T) {
714+
ctrl := gomock.NewController(t)
715+
defer ctrl.Finish()
716+
717+
mockBpfMapAPI := mock_ebpf_maps.NewMockBpfMapAPIs(ctrl)
718+
mockBpfProgAPI := mock_ebpf_progs.NewMockBpfProgAPIs(ctrl)
719+
720+
// Mock CreateBPFMap to return a BpfMap with MapFD set to tt.mapFD
721+
mockBpfMapAPI.EXPECT().CreateBPFMap(gomock.Any()).Return(ebpf_maps.BpfMap{MapFD: tt.mapFD}, nil).AnyTimes()
722+
723+
// Mock GetBPFmapInfo or GetMapFromPinPath based on the pin type and error expectation
724+
if tt.getInfoErr != nil {
725+
mockBpfMapAPI.EXPECT().GetBPFmapInfo(tt.mapFD).Return(ebpf_maps.BpfMapInfo{}, tt.getInfoErr)
726+
} else if tt.pinType == constdef.PIN_NONE.Index() {
727+
mockBpfMapAPI.EXPECT().GetBPFmapInfo(tt.mapFD).Return(tt.mapInfo, nil)
728+
} else {
729+
mockBpfMapAPI.EXPECT().GetMapFromPinPath(tt.pinPath).Return(tt.mapInfo, nil)
730+
}
731+
732+
// Set up the loader and the map input
733+
elfLoader := &elfLoader{
734+
bpfMapApi: mockBpfMapAPI,
735+
bpfProgApi: mockBpfProgAPI,
736+
}
737+
parsedMapData := []ebpf_maps.CreateEBPFMapInput{
738+
{
739+
Name: "test_map",
740+
PinOptions: &ebpf_maps.BpfMapPinOptions{Type: tt.pinType, PinPath: tt.pinPath},
741+
},
742+
}
743+
744+
loadedMaps, err := elfLoader.loadMap(parsedMapData)
745+
if tt.wantErr {
746+
assert.Error(t, err)
747+
} else {
748+
assert.NoError(t, err)
749+
if loadedMap, exists := loadedMaps["test_map"]; exists {
750+
assert.Equal(t, tt.wantMapID, loadedMap.MapID)
751+
} else {
752+
t.Errorf("Expected map 'test_map' to be loaded")
753+
}
754+
}
755+
})
756+
}
757+
}

pkg/maps/loader.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ type BpfMapAPIs interface {
175175
BulkRefreshMapEntries(newMapContents map[string][]byte) error
176176
// Retrieve map info from pin path
177177
GetMapFromPinPath(pinPath string) (BpfMapInfo, error)
178+
// Retrieve map info without pin path
179+
GetBPFmapInfo(mapFD uint32) (BpfMapInfo, error)
178180
}
179181

180182
func (m *BpfMap) CreateBPFMap(MapMetaData CreateEBPFMapInput) (BpfMap, error) {
@@ -542,6 +544,10 @@ func GetIDFromFD(mapFD int) (int, error) {
542544
return int(mapInfo.Id), nil
543545
}
544546

547+
func (m *BpfMap) GetBPFmapInfo(mapFD uint32) (BpfMapInfo, error) {
548+
return GetBPFmapInfo(int(mapFD))
549+
}
550+
545551
func GetBPFmapInfo(mapFD int) (BpfMapInfo, error) {
546552
var bpfMapInfo BpfMapInfo
547553
objInfo := BpfObjGetInfo{

pkg/maps/mocks/ebpf_mocks.go

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/tc/tc.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func (m *bpfTc) TCIngressAttach(interfaceName string, progFD int, funcName strin
9191

9292
intf, err := netlink.LinkByName(interfaceName)
9393
if err != nil {
94-
log.Errorf("failed to find device by name %s: %w", interfaceName, err)
94+
log.Errorf("failed to find device by name %s: %v", interfaceName, err)
9595
return err
9696
}
9797

@@ -143,7 +143,7 @@ func (m *bpfTc) TCIngressDetach(interfaceName string) error {
143143

144144
intf, err := netlink.LinkByName(interfaceName)
145145
if err != nil {
146-
log.Errorf("failed to find device by name %s: %w", interfaceName, err)
146+
log.Errorf("failed to find device by name %s: %v", interfaceName, err)
147147
return err
148148
}
149149

test/go.mod

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
module github.com/jayanthvn/pure-gobpf/test
22

3-
go 1.19
3+
go 1.22.0
4+
5+
toolchain go1.22.7
46

57
require (
68
github.com/aws/aws-ebpf-sdk-go v0.0.0-20230616053809-009e64b9692e
@@ -10,11 +12,11 @@ require (
1012
require (
1113
github.com/mattn/go-colorable v0.1.13 // indirect
1214
github.com/mattn/go-isatty v0.0.17 // indirect
13-
github.com/vishvananda/netlink v1.1.0 // indirect
15+
github.com/vishvananda/netlink v1.3.0 // indirect
1416
github.com/vishvananda/netns v0.0.4 // indirect
1517
go.uber.org/multierr v1.10.0 // indirect
1618
go.uber.org/zap v1.27.0 // indirect
17-
golang.org/x/sys v0.24.0 // indirect
19+
golang.org/x/sys v0.26.0 // indirect
1820
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
1921
)
2022

test/go.sum

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,34 @@
11
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
23
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
34
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
45
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
6+
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
57
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
68
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
79
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
810
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
911
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
1012
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
13+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
1114
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
12-
github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0=
13-
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
14-
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
15+
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
16+
github.com/vishvananda/netlink v1.3.0 h1:X7l42GfcV4S6E4vHTsw48qbrV+9PVojNfIhZcwQdrZk=
17+
github.com/vishvananda/netlink v1.3.0/go.mod h1:i6NetklAujEcC6fK0JPjT8qSwWyO0HLn4UKG+hGqeJs=
1518
github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8=
1619
github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
1720
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
21+
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
1822
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
1923
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
2024
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
2125
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
22-
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
2326
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
24-
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
25-
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
27+
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
28+
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
29+
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
30+
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
2631
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
2732
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
2833
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
34+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

0 commit comments

Comments
 (0)