Skip to content

Commit 284cce0

Browse files
atulpatel261194venkyvsp
authored andcommitted
feat(mgmt): adding Mgmt api for opi-evpn-bridge netlink DB dump
Signed-off-by: atulpatel261194 <Atul.Patel@intel.com>
1 parent 4918e77 commit 284cce0

File tree

6 files changed

+170
-35
lines changed

6 files changed

+170
-35
lines changed

cmd/network/evpn-mgmt.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
// Copyright (c) 2022-2023 Intel Corporation, or its subsidiaries.
3+
// Copyright (c) 2022-2023 Dell Inc, or its subsidiaries.
4+
// Copyright (c) 2024 Ericsson AB.
5+
6+
// Package network implements the network related CLI commands
7+
package network
8+
9+
import (
10+
"context"
11+
"log"
12+
"time"
13+
14+
"github.com/opiproject/godpu/cmd/common"
15+
"github.com/opiproject/godpu/network"
16+
"github.com/spf13/cobra"
17+
)
18+
19+
// DumpNetlinkDatabase Get netlink database details
20+
func DumpNetlinkDatabase() *cobra.Command {
21+
var details bool
22+
23+
cmd := &cobra.Command{
24+
Use: "dump-netlink-DB",
25+
Short: "Show details of a netlink database",
26+
Long: "Show details of netlink database with current running config",
27+
Run: func(c *cobra.Command, _ []string) {
28+
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
29+
30+
tlsFiles, err := c.Flags().GetString(common.TLSFiles)
31+
cobra.CheckErr(err)
32+
33+
addr, err := c.Flags().GetString(common.AddrCmdLineArg)
34+
cobra.CheckErr(err)
35+
36+
evpnClient, err := network.NewManagement(addr, tlsFiles)
37+
if err != nil {
38+
log.Fatalf("could not create gRPC client: %v", err)
39+
}
40+
defer cancel()
41+
42+
// grpc call to create the bridge port
43+
result, err := evpnClient.DumpNetlinkDB(ctx, details)
44+
if err != nil {
45+
log.Fatalf("DumpNetlinkDatabase: Error occurred while dumping the netlink database: %q", err)
46+
}
47+
log.Printf("DumpNetlinkDatabase: %s", result.Details)
48+
},
49+
}
50+
51+
cmd.Flags().BoolVar(&details, "details", false, "get the dump with details")
52+
53+
if err := cmd.MarkFlagRequired("details"); err != nil {
54+
log.Fatalf("Error marking flag as required: %v", err)
55+
}
56+
return cmd
57+
}

cmd/network/evpn-test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ func NewEvpnCommand() *cobra.Command {
4949
cmd.AddCommand(GetSVI())
5050
cmd.AddCommand(ListSVIs())
5151
cmd.AddCommand(UpdateSVI())
52+
// Mgmt cli's
53+
cmd.AddCommand(DumpNetlinkDatabase())
5254

5355
return cmd
5456
}

go.mod

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,34 +11,37 @@ require (
1111
github.com/onsi/ginkgo/v2 v2.14.0
1212
github.com/onsi/gomega v1.30.0
1313
github.com/opiproject/opi-api v0.0.0-20240304222410-5dba226aaa9e
14+
github.com/opiproject/opi-evpn-bridge v0.2.0
1415
github.com/spf13/cobra v1.8.0
1516
github.com/stretchr/testify v1.8.4
1617
go.einride.tech/aip v0.66.0
17-
golang.org/x/net v0.20.0
18+
golang.org/x/net v0.21.0
1819
golang.org/x/text v0.14.0
19-
google.golang.org/grpc v1.60.1
20+
google.golang.org/grpc v1.61.0
2021
google.golang.org/protobuf v1.32.0
2122
)
2223

24+
replace github.com/opiproject/opi-evpn-bridge => github.com/mardim91/opi-evpn-bridge v0.0.0-20241209100717-35ff8ff45934
25+
2326
require (
2427
github.com/davecgh/go-spew v1.1.1 // indirect
25-
github.com/go-logr/logr v1.3.0 // indirect
28+
github.com/go-logr/logr v1.4.1 // indirect
2629
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
2730
github.com/golang/protobuf v1.5.3 // indirect
2831
github.com/google/go-cmp v0.6.0 // indirect
2932
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect
30-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect
33+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
3134
github.com/inconshreveable/mousetrap v1.1.0 // indirect
3235
github.com/kr/text v0.2.0 // indirect
3336
github.com/pmezard/go-difflib v1.0.0 // indirect
3437
github.com/rogpeppe/go-internal v1.9.0 // indirect
3538
github.com/spf13/pflag v1.0.5 // indirect
36-
github.com/stretchr/objx v0.5.0 // indirect
37-
golang.org/x/sync v0.5.0 // indirect
38-
golang.org/x/sys v0.16.0 // indirect
39-
golang.org/x/tools v0.16.1 // indirect
40-
google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a // indirect
41-
google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 // indirect
42-
google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect
39+
github.com/stretchr/objx v0.5.1 // indirect
40+
golang.org/x/sync v0.6.0 // indirect
41+
golang.org/x/sys v0.17.0 // indirect
42+
golang.org/x/tools v0.17.0 // indirect
43+
google.golang.org/genproto v0.0.0-20240108191215-35c7eff3a6b1 // indirect
44+
google.golang.org/genproto/googleapis/api v0.0.0-20240108191215-35c7eff3a6b1 // indirect
45+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1 // indirect
4346
gopkg.in/yaml.v3 v3.0.1 // indirect
4447
)

go.sum

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,12 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
1010
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1111
github.com/go-chi/chi v1.5.5 h1:vOB/HbEMt9QqBqErz07QehcOKHaWFtuj87tTDVz2qXE=
1212
github.com/go-chi/chi v1.5.5/go.mod h1:C9JqLr3tIYjDOZpzn+BCuxY8z8vmca43EeMgyZt7irw=
13-
github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
14-
github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
13+
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
14+
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
1515
github.com/go-ping/ping v1.1.0 h1:3MCGhVX4fyEUuhsfwPrsEdQw6xspHkv5zHsiSoDFZYw=
1616
github.com/go-ping/ping v1.1.0/go.mod h1:xIFjORFzTxqIV/tDVGO4eDy/bLuSyawEeojSm3GfRGk=
1717
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
1818
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
19-
github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo=
2019
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
2120
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
2221
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
@@ -28,8 +27,8 @@ github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLe
2827
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
2928
github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU=
3029
github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
31-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 h1:RtRsiaGvWxcwd8y3BiRZxsylPT8hLWZ5SPcfI+3IDNk=
32-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0/go.mod h1:TzP6duP4Py2pHLVPPQp42aoYI92+PCrVotyR5e8Vqlk=
30+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
31+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
3332
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
3433
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
3534
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
@@ -38,12 +37,12 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
3837
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
3938
github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4=
4039
github.com/lithammer/fuzzysearch v1.1.8/go.mod h1:IdqeyBClc3FFqSzYq/MXESsS4S0FsZ5ajtkr5xPLts4=
40+
github.com/mardim91/opi-evpn-bridge v0.0.0-20241209100717-35ff8ff45934 h1:NfpPZshW29DcrW44DCgmShmK7WuOhV/7Bdd2mMA/xpI=
41+
github.com/mardim91/opi-evpn-bridge v0.0.0-20241209100717-35ff8ff45934/go.mod h1:Lnt6BnGJEKm/poq+/blpIoyF8Fq8blkKc4kAcNCKlZ8=
4142
github.com/onsi/ginkgo/v2 v2.14.0 h1:vSmGj2Z5YPb9JwCWT6z6ihcUvDhuXLc3sJiqd3jMKAY=
4243
github.com/onsi/ginkgo/v2 v2.14.0/go.mod h1:JkUdW7JkN0V6rFvsHcJ478egV3XH9NxpD27Hal/PhZw=
4344
github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8=
4445
github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
45-
github.com/opiproject/opi-api v0.0.0-20240118183513-e44db269fba4 h1:YBjvYWQQAbNIGsAXvB6FwL9Encr1nzo3/w+bB/tXltM=
46-
github.com/opiproject/opi-api v0.0.0-20240118183513-e44db269fba4/go.mod h1:92pv4ulvvPMuxCJ9ND3aYbmBfEMLx0VCjpkiR7ZTqPY=
4746
github.com/opiproject/opi-api v0.0.0-20240304222410-5dba226aaa9e h1:jUa7DmVLjzLKg051y7rYyCD0NAbEHZQMimM1451D74I=
4847
github.com/opiproject/opi-api v0.0.0-20240304222410-5dba226aaa9e/go.mod h1:92pv4ulvvPMuxCJ9ND3aYbmBfEMLx0VCjpkiR7ZTqPY=
4948
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -57,11 +56,13 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
5756
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
5857
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
5958
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
60-
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
6159
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
60+
github.com/stretchr/objx v0.5.1 h1:4VhoImhV/Bm0ToFkXFi8hXNXwpDRZ/ynw3amt82mzq0=
61+
github.com/stretchr/objx v0.5.1/go.mod h1:/iHQpkQwBD6DLUmQ4pE+s1TXdob1mORJ4/UFdrifcy0=
6262
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
6363
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
6464
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
65+
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
6566
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
6667
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
6768
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
@@ -76,14 +77,14 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
7677
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
7778
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
7879
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
79-
golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
80-
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
80+
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
81+
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
8182
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
8283
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
8384
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
8485
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
85-
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
86-
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
86+
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
87+
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
8788
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
8889
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
8990
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -92,8 +93,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
9293
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
9394
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
9495
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
95-
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
96-
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
96+
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
97+
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
9798
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
9899
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
99100
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
@@ -108,18 +109,18 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
108109
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
109110
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
110111
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
111-
golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA=
112-
golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
112+
golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc=
113+
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
113114
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
114115
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
115-
google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a h1:fwgW9j3vHirt4ObdHoYNwuO24BEZjSzbh+zPaNWoiY8=
116-
google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE=
117-
google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU=
118-
google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0=
119-
google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo=
120-
google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc=
121-
google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU=
122-
google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM=
116+
google.golang.org/genproto v0.0.0-20240108191215-35c7eff3a6b1 h1:/IWabOtPziuXTEtI1KYCpM6Ss7vaAkeMxk+uXV/xvZs=
117+
google.golang.org/genproto v0.0.0-20240108191215-35c7eff3a6b1/go.mod h1:+Rvu7ElI+aLzyDQhpHMFMMltsD6m7nqpuWDd2CwJw3k=
118+
google.golang.org/genproto/googleapis/api v0.0.0-20240108191215-35c7eff3a6b1 h1:OPXtXn7fNMaXwO3JvOmF1QyTc00jsSFFz1vXXBOdCDo=
119+
google.golang.org/genproto/googleapis/api v0.0.0-20240108191215-35c7eff3a6b1/go.mod h1:B5xPO//w8qmBDjGReYLpR6UJPnkldGkCSMoH/2vxJeg=
120+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1 h1:gphdwh0npgs8elJ4T6J+DQJHPVF7RsuJHCfwztUb4J4=
121+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1/go.mod h1:daQN87bsDqDoe316QbbvX60nMoJQa4r6Ds0ZuoAe5yA=
122+
google.golang.org/grpc v1.61.0 h1:TOvOcuXn30kRao+gfcvsebNEa5iZIiLkisYEkf7R7o0=
123+
google.golang.org/grpc v1.61.0/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs=
123124
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
124125
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
125126
google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=

network/evpn.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import (
1010
"errors"
1111

1212
grpcOpi "github.com/opiproject/godpu/grpc"
13+
1314
pb "github.com/opiproject/opi-api/network/evpn-gw/v1alpha1/gen/go"
15+
pm "github.com/opiproject/opi-evpn-bridge/pkg/netlink/proto/gen/go"
1416
"go.einride.tech/aip/resourcename"
1517
"google.golang.org/grpc"
1618
"google.golang.org/protobuf/types/known/emptypb"
@@ -28,12 +30,16 @@ type PbEvpnVRFClientGetter func(c grpc.ClientConnInterface) pb.VrfServiceClient
2830
// PbEvpnSVIClientGetter defines the function type used to retrieve an evpn protobuf SviServiceClient
2931
type PbEvpnSVIClientGetter func(c grpc.ClientConnInterface) pb.SviServiceClient
3032

33+
// PbEvpnMgmt defines the function type used to retrieve an evpn protobuf ManagementServiceClient
34+
type PbEvpnMgmt func(c grpc.ClientConnInterface) pm.ManagementServiceClient
35+
3136
type evpnClientImpl struct {
3237
// getEvpnClient PbEvpnClientGetter
3338
getEvpnLogicalBridgeClient PbEvpnLogicalBridgeClientGetter
3439
getEvpnBridgePortClient PbEvpnBridgePortClientGetter
3540
getEvpnVRFClient PbEvpnVRFClientGetter
3641
getEvpnSVIClient PbEvpnSVIClientGetter
42+
getEvpnMgmtClient PbEvpnMgmt
3743
grpcOpi.Connector
3844
}
3945

@@ -67,6 +73,9 @@ type EvpnClient interface {
6773
GetSvi(ctx context.Context, name string) (*pb.Svi, error)
6874
ListSvis(ctx context.Context, pageSize int32, pageToken string) (*pb.ListSvisResponse, error)
6975
UpdateSvi(ctx context.Context, name string, updateMask []string, allowMissing bool) (*pb.Svi, error)
76+
77+
// Management Interface
78+
DumpNetlinkDB(ctx context.Context, details bool) (*pm.DumpNetlinkDbResult, error)
7079
}
7180

7281
func resourceIDToFullName(container string, resourceID string) string {
@@ -105,6 +114,35 @@ func NewLogicalBridgeWithArgs(c grpcOpi.Connector, getter PbEvpnLogicalBridgeCli
105114
}, nil
106115
}
107116

117+
// NewManagement creates an evpn Logical Bridge client for use with OPI server at the given address
118+
func NewManagement(addr string, tls string) (EvpnClient, error) {
119+
c, err := grpcOpi.New(addr, tls)
120+
if err != nil {
121+
return nil, err
122+
}
123+
124+
// Default is to use the OPI grpc client and the pb client generated from the protobuf spec
125+
126+
return NewManagementWithArgs(c, pm.NewManagementServiceClient)
127+
}
128+
129+
// NewManagementWithArgs creates an evpn Mgmt client for use with OPI server using the given gRPC client and the given function for
130+
// retrieving an evpn protobuf client
131+
func NewManagementWithArgs(c grpcOpi.Connector, getter PbEvpnMgmt) (EvpnClient, error) {
132+
if c == nil {
133+
return nil, errors.New("grpc connector is nil")
134+
}
135+
136+
if getter == nil {
137+
return nil, errors.New("protobuf client getter is nil")
138+
}
139+
140+
return evpnClientImpl{
141+
getEvpnMgmtClient: getter,
142+
Connector: c,
143+
}, nil
144+
}
145+
108146
// NewBridgePort creates an evpn Bridge Port client for use with OPI server at the given address
109147
func NewBridgePort(addr string, tls string) (EvpnClient, error) {
110148
c, err := grpcOpi.New(addr, tls)

network/mgmt.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
// Copyright (c) 2022-2023 Intel Corporation, or its subsidiaries.
3+
// Copyright (c) 2022-2023 Dell Inc, or its subsidiaries.
4+
5+
// Package network implements the go library for OPI to be used to establish networking
6+
package network
7+
8+
import (
9+
"context"
10+
"log"
11+
12+
pm "github.com/opiproject/opi-evpn-bridge/pkg/netlink/proto/gen/go"
13+
)
14+
15+
// DumpNetlinkDb get netlink DB details from OPI server
16+
func (c evpnClientImpl) DumpNetlinkDB(ctx context.Context, details bool) (*pm.DumpNetlinkDbResult, error) {
17+
conn, closer, err := c.NewConn()
18+
if err != nil {
19+
log.Printf("error creating connection: %s\n", err)
20+
return nil, err
21+
}
22+
defer closer()
23+
24+
client := c.getEvpnMgmtClient(conn)
25+
data, err := client.DumpNetlinkDB(ctx, &pm.DumpNetlinkDbRequest{
26+
Details: details,
27+
})
28+
if err != nil {
29+
log.Printf("error getting vrf: %s\n", err)
30+
return nil, err
31+
}
32+
33+
return data, nil
34+
}

0 commit comments

Comments
 (0)