Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge Main to Release 1.0 #97

Merged
merged 27 commits into from
Nov 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
a0cb275
Use default error formating instead of wrap when errors.Wrap isn't im…
orsenthil Jul 15, 2024
9138d08
Fixup update flow (#88)
jayanthvn Aug 26, 2024
16a8c7e
Bump golang.org/x/sys from 0.20.0 to 0.24.0 (#89)
dependabot[bot] Aug 27, 2024
f761c85
Merge remote-tracking branch 'upstream/main' into release-1.0
jayanthvn Aug 28, 2024
cec469d
fix test on rel-branch
jayanthvn Aug 28, 2024
2092d21
Log the return error no from syscall
jaydeokar Sep 18, 2024
66e803d
Merge branch 'main' into use_ret_code
orsenthil Sep 30, 2024
346a497
Merge branch 'main' into orsenthil-patch-1
yash97 Oct 8, 2024
85816f8
Fix PR checks
orsenthil Oct 9, 2024
3edff11
fix go dependencies.
orsenthil Oct 9, 2024
6d39374
fix go.sum dependencies.
orsenthil Oct 9, 2024
c62d5df
Merge pull request #94 from orsenthil/main
orsenthil Oct 9, 2024
0b331fc
Merge branch 'main' into orsenthil-patch-1
orsenthil Oct 9, 2024
01c059e
Merge branch 'main' into use_ret_code
orsenthil Oct 9, 2024
ee4cf22
Bump github.com/vishvananda/netlink from 1.1.0 to 1.3.0
dependabot[bot] Oct 9, 2024
0581d0e
Merge pull request #86 from aws/orsenthil-patch-1
orsenthil Oct 9, 2024
8c6d404
Merge branch 'main' into use_ret_code
orsenthil Oct 9, 2024
54e746d
Merge pull request #92 from jaydeokar/use_ret_code
orsenthil Oct 9, 2024
e062685
Updated go.mod dependencies.
orsenthil Oct 9, 2024
f62a0ed
Merge branch 'main' into dependabot/go_modules/github.com/vishvananda…
orsenthil Oct 9, 2024
4db5a8e
Merge pull request #91 from aws/dependabot/go_modules/github.com/vish…
orsenthil Oct 9, 2024
f355a97
Bump golang.org/x/sys from 0.24.0 to 0.26.0
dependabot[bot] Oct 9, 2024
2a0a0fb
updated go mod and go sum.
orsenthil Oct 9, 2024
30604a6
Merge pull request #95 from aws/dependabot/go_modules/golang.org/x/sy…
orsenthil Oct 9, 2024
135349f
added GetBPFmapInfo method to support PIN_NONE where pinpath does not…
nithu0115 Nov 5, 2024
f30b24c
Merge main to rel-1.0
jayanthvn Nov 5, 2024
4ebdb63
fix mege
jayanthvn Nov 5, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/pr-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: "1.20"
go-version: "1.23"
- name: Set up tools
run: |
go install golang.org/x/lint/golint@latest
Expand All @@ -46,7 +46,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: "1.20"
go-version: "1.23"
- name: Set up BPF
run: |
sudo apt-get install libbpf-dev
Expand Down
14 changes: 10 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
module github.com/aws/aws-ebpf-sdk-go

go 1.19
go 1.22.0

toolchain go1.22.7

require (
github.com/golang/mock v1.6.0
github.com/stretchr/testify v1.9.0
github.com/vishvananda/netlink v1.1.0
github.com/vishvananda/netlink v1.3.0
go.uber.org/zap v1.27.0
golang.org/x/sys v0.24.0
golang.org/x/sys v0.26.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
)

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df // indirect
github.com/vishvananda/netns v0.0.4 // indirect
go.uber.org/multierr v1.10.0 // indirect
golang.org/x/mod v0.21.0 // indirect
golang.org/x/sync v0.8.0 // indirect
golang.org/x/tools v0.26.0 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
21 changes: 14 additions & 7 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0=
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df h1:OviZH7qLw/7ZovXvuNyL3XQl8UFofeikI1NW1Gypu7k=
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
github.com/vishvananda/netlink v1.3.0 h1:X7l42GfcV4S6E4vHTsw48qbrV+9PVojNfIhZcwQdrZk=
github.com/vishvananda/netlink v1.3.0/go.mod h1:i6NetklAujEcC6fK0JPjT8qSwWyO0HLn4UKG+hGqeJs=
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.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
Expand All @@ -19,25 +19,32 @@ 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-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
golang.org/x/sync v0.8.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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/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.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ=
golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
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-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
Expand Down
22 changes: 15 additions & 7 deletions pkg/elfparser/elf.go
Original file line number Diff line number Diff line change
Expand Up @@ -201,12 +201,20 @@ func (e *elfLoader) loadMap(parsedMapData []ebpf_maps.CreateEBPFMapInput) (map[s
}

//Fill ID
mapInfo, err := (e.bpfMapApi).GetMapFromPinPath(pinPath)
if err != nil {
return nil, fmt.Errorf("map '%s' doesn't exist", mapNameStr)
if loadedMaps.PinOptions.Type == constdef.PIN_NONE.Index() {
mapInfo, err := (e.bpfMapApi).GetBPFmapInfo(bpfMap.MapFD)
if err != nil {
return nil, fmt.Errorf("failed to get map info '%s'", mapNameStr)
}
bpfMap.MapID = uint32(mapInfo.Id)
} else {
mapInfo, err := (e.bpfMapApi).GetMapFromPinPath(pinPath)
if err != nil {
return nil, fmt.Errorf("map '%s' doesn't exist", mapNameStr)
}
mapID := uint32(mapInfo.Id)
bpfMap.MapID = mapID
}
mapID := uint32(mapInfo.Id)
bpfMap.MapID = mapID

programmedMaps[loadedMaps.Name] = bpfMap

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

for _, pgmInput := range loadedProgData {
bpfData := BpfData{}
progFD, _ := e.bpfProgApi.LoadProg(pgmInput)
progFD, errno := e.bpfProgApi.LoadProg(pgmInput)
if progFD == -1 {
log.Infof("Failed to load prog")
log.Infof("Failed to load prog", "error", errno)
return nil, fmt.Errorf("failed to Load the prog")
}
log.Infof("loaded prog with %d", progFD)
Expand Down
87 changes: 87 additions & 0 deletions pkg/elfparser/elf_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,14 @@ package elfparser
import (
"debug/elf"
"errors"
"fmt"
"os"
"sort"
"strings"
"testing"

ebpf_maps "github.com/aws/aws-ebpf-sdk-go/pkg/maps"

constdef "github.com/aws/aws-ebpf-sdk-go/pkg/constants"
mock_ebpf_maps "github.com/aws/aws-ebpf-sdk-go/pkg/maps/mocks"
mock_ebpf_progs "github.com/aws/aws-ebpf-sdk-go/pkg/progs/mocks"
Expand Down Expand Up @@ -668,3 +671,87 @@ func TestProgType(t *testing.T) {
})
}
}

func TestLoadMap(t *testing.T) {
tests := []struct {
name string
pinType uint32
mapFD uint32
mapInfo ebpf_maps.BpfMapInfo
wantMapID uint32
wantErr bool
getInfoErr error
pinPath string
}{
{
name: "Successful retrieval of map info",
pinType: constdef.PIN_NONE.Index(),
mapFD: 10,
mapInfo: ebpf_maps.BpfMapInfo{Id: 12345},
wantMapID: 12345,
wantErr: false,
},
{
name: "Map retrieval error",
pinType: constdef.PIN_NONE.Index(),
mapFD: 20,
getInfoErr: fmt.Errorf("failed to get map info"),
wantErr: true,
},
{
name: "Pinned map retrieval from path",
pinType: constdef.PIN_GLOBAL_NS.Index(),
mapFD: 30,
mapInfo: ebpf_maps.BpfMapInfo{Id: 54321},
wantMapID: 54321,
wantErr: false,
pinPath: "/sys/fs/bpf/globals/aws/maps/test_map",
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

mockBpfMapAPI := mock_ebpf_maps.NewMockBpfMapAPIs(ctrl)
mockBpfProgAPI := mock_ebpf_progs.NewMockBpfProgAPIs(ctrl)

// Mock CreateBPFMap to return a BpfMap with MapFD set to tt.mapFD
mockBpfMapAPI.EXPECT().CreateBPFMap(gomock.Any()).Return(ebpf_maps.BpfMap{MapFD: tt.mapFD}, nil).AnyTimes()

// Mock GetBPFmapInfo or GetMapFromPinPath based on the pin type and error expectation
if tt.getInfoErr != nil {
mockBpfMapAPI.EXPECT().GetBPFmapInfo(tt.mapFD).Return(ebpf_maps.BpfMapInfo{}, tt.getInfoErr)
} else if tt.pinType == constdef.PIN_NONE.Index() {
mockBpfMapAPI.EXPECT().GetBPFmapInfo(tt.mapFD).Return(tt.mapInfo, nil)
} else {
mockBpfMapAPI.EXPECT().GetMapFromPinPath(tt.pinPath).Return(tt.mapInfo, nil)
}

// Set up the loader and the map input
elfLoader := &elfLoader{
bpfMapApi: mockBpfMapAPI,
bpfProgApi: mockBpfProgAPI,
}
parsedMapData := []ebpf_maps.CreateEBPFMapInput{
{
Name: "test_map",
PinOptions: &ebpf_maps.BpfMapPinOptions{Type: tt.pinType, PinPath: tt.pinPath},
},
}

loadedMaps, err := elfLoader.loadMap(parsedMapData)
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
if loadedMap, exists := loadedMaps["test_map"]; exists {
assert.Equal(t, tt.wantMapID, loadedMap.MapID)
} else {
t.Errorf("Expected map 'test_map' to be loaded")
}
}
})
}
}
6 changes: 6 additions & 0 deletions pkg/maps/loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,8 @@ type BpfMapAPIs interface {
BulkRefreshMapEntries(newMapContents map[string][]byte) error
// Retrieve map info from pin path
GetMapFromPinPath(pinPath string) (BpfMapInfo, error)
// Retrieve map info without pin path
GetBPFmapInfo(mapFD uint32) (BpfMapInfo, error)
}

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

func (m *BpfMap) GetBPFmapInfo(mapFD uint32) (BpfMapInfo, error) {
return GetBPFmapInfo(int(mapFD))
}

func GetBPFmapInfo(mapFD int) (BpfMapInfo, error) {
var bpfMapInfo BpfMapInfo
objInfo := BpfObjGetInfo{
Expand Down
15 changes: 15 additions & 0 deletions pkg/maps/mocks/ebpf_mocks.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions pkg/tc/tc.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ func (m *bpfTc) TCIngressAttach(interfaceName string, progFD int, funcName strin

intf, err := netlink.LinkByName(interfaceName)
if err != nil {
log.Errorf("failed to find device by name %s: %w", interfaceName, err)
log.Errorf("failed to find device by name %s: %v", interfaceName, err)
return err
}

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

intf, err := netlink.LinkByName(interfaceName)
if err != nil {
log.Errorf("failed to find device by name %s: %w", interfaceName, err)
log.Errorf("failed to find device by name %s: %v", interfaceName, err)
return err
}

Expand Down
8 changes: 5 additions & 3 deletions test/go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
module github.com/jayanthvn/pure-gobpf/test

go 1.19
go 1.22.0

toolchain go1.22.7

require (
github.com/aws/aws-ebpf-sdk-go v0.0.0-20230616053809-009e64b9692e
Expand All @@ -10,11 +12,11 @@ require (
require (
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.17 // indirect
github.com/vishvananda/netlink v1.1.0 // indirect
github.com/vishvananda/netlink v1.3.0 // indirect
github.com/vishvananda/netns v0.0.4 // indirect
go.uber.org/multierr v1.10.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/sys v0.24.0 // indirect
golang.org/x/sys v0.26.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
)

Expand Down
18 changes: 12 additions & 6 deletions test/go.sum
Original file line number Diff line number Diff line change
@@ -1,28 +1,34 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
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-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0=
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/vishvananda/netlink v1.3.0 h1:X7l42GfcV4S6E4vHTsw48qbrV+9PVojNfIhZcwQdrZk=
github.com/vishvananda/netlink v1.3.0/go.mod h1:i6NetklAujEcC6fK0JPjT8qSwWyO0HLn4UKG+hGqeJs=
github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8=
github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
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.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
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/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Loading