Skip to content

Commit

Permalink
fix(evpn): use latest evpn opi-api
Browse files Browse the repository at this point in the history
Signed-off-by: Atul Patel <[email protected]>
Co-authored-by: Dimitrios Markou <[email protected]>
Co-authored-by: Venkatesh Vemula <[email protected]>
Co-authored-by: Banoth Saikumar <[email protected]>
  • Loading branch information
4 people authored and artek-koltun committed Mar 26, 2024
1 parent 6e3f317 commit acb3a85
Show file tree
Hide file tree
Showing 7 changed files with 145 additions and 47 deletions.
22 changes: 13 additions & 9 deletions cmd/network/evpn-bridge-port.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2022-2023 Intel Corporation, or its subsidiaries.
// Copyright (c) 2022-2023 Dell Inc, or its subsidiaries.
// Copyright (c) 2024 Ericsson AB.

// Package network implements the network related CLI commands
package network
Expand Down Expand Up @@ -38,8 +39,9 @@ func CreateBridgePort() *cobra.Command {
if err != nil {
log.Fatalf("could not create Bridge Port: %v", err)
}
log.Printf("Created Bridge Port:\n status: %s\n type: %s\n name: %s\n bridges: %s\n mac: %s\n", bridgePort.GetStatus().GetOperStatus(), bridgePort.GetSpec().GetPtype(),
bridgePort.GetName(), bridgePort.GetSpec().GetLogicalBridges(), bridgePort.GetSpec().GetMacAddress())

log.Println("Created Bridge Port:")
PrintBP(bridgePort)
},
}

Expand Down Expand Up @@ -89,7 +91,7 @@ func DeleteBridgePort() *cobra.Command {
if err != nil {
log.Fatalf("DeleteBridgePort: Error occurred while deleting Bridge Port: %q", err)
}
log.Printf("Deleted BridgePort ")
log.Printf("Deleted BridgePort: %s\n", name)
},
}

Expand Down Expand Up @@ -122,8 +124,8 @@ func GetBridgePort() *cobra.Command {
if err != nil {
log.Fatalf("GetBridgePort: Error occurred while creating Bridge Port: %q", err)
}
log.Printf("Bridge Port:\n status: %s\n type: %s\n name: %s\n bridges: %s\n mac: %s\n", bridgePort.GetStatus().GetOperStatus(), bridgePort.GetSpec().GetPtype(),
bridgePort.GetName(), bridgePort.GetSpec().GetLogicalBridges(), bridgePort.GetSpec().GetMacAddress())
log.Println("Get Bridge Port:")
PrintBP(bridgePort)
},
}

Expand Down Expand Up @@ -158,9 +160,10 @@ func ListBridgePorts() *cobra.Command {
log.Fatalf("Failed to get items: %v", err)
}
// Process the server response
log.Println("List Bridge Ports:")
for _, bridgePort := range resp.BridgePorts {
log.Printf("Bridge Port:\n status: %s\n type: %s\n name: %s\n bridges: %s\n mac: %s\n", bridgePort.GetStatus().GetOperStatus(), bridgePort.GetSpec().GetPtype(),
bridgePort.GetName(), bridgePort.GetSpec().GetLogicalBridges(), bridgePort.GetSpec().GetMacAddress())
log.Println("Bridge Port with:")
PrintBP(bridgePort)
}

// Check if there are more pages to retrieve
Expand Down Expand Up @@ -203,8 +206,9 @@ func UpdateBridgePort() *cobra.Command {
if err != nil {
log.Fatalf("UpdateBridgePort: Error occurred while creating Bridge Port: %q", err)
}
log.Printf("Bridge Port:\n status: %s\n type: %s\n name: %s\n bridges: %s\n mac: %s\n", bridgePort.GetStatus().GetOperStatus(), bridgePort.GetSpec().GetPtype(),
bridgePort.GetName(), bridgePort.GetSpec().GetLogicalBridges(), bridgePort.GetSpec().GetMacAddress())

log.Println("Updated Bridge Port:")
PrintBP(bridgePort)
},
}
cmd.Flags().StringVar(&name, "name", "", "name of the Bridge Port")
Expand Down
31 changes: 16 additions & 15 deletions cmd/network/evpn-logical-brige.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2022-2023 Intel Corporation, or its subsidiaries.
// Copyright (c) 2022-2023 Dell Inc, or its subsidiaries.
// Copyright (c) 2024 Ericsson AB.

// Package network implements the network related CLI commands
package network
Expand Down Expand Up @@ -34,13 +35,13 @@ func CreateLogicalBridge() *cobra.Command {
}
defer cancel()

resp, err := evpnClient.CreateLogicalBridge(ctx, name, vlanID, vni, vtep)
lb, err := evpnClient.CreateLogicalBridge(ctx, name, vlanID, vni, vtep)
if err != nil {
log.Fatalf("failed to create logical bridge: %v", err)
}

log.Printf(" Created Logical Bridge \n name: %s\n vlan: %d\n vni: %d\n status: %s\n VtepIpPrefix:%s", resp.GetName(), resp.GetSpec().GetVlanId(),
resp.GetSpec().GetVni(), resp.GetStatus(), resp.GetSpec().GetVtepIpPrefix())
log.Println("Created Logical Bridge:")
PrintLB(lb)
},
}
cmd.Flags().StringVar(&addr, "addr", "localhost:50151", "address of OPI gRPC server")
Expand Down Expand Up @@ -83,12 +84,12 @@ func DeleteLogicalBridge() *cobra.Command {
}
defer cancel()

resp, err := evpnClient.DeleteLogicalBridge(ctx, name, allowMissing)
_, err = evpnClient.DeleteLogicalBridge(ctx, name, allowMissing)
if err != nil {
log.Fatalf("failed to delete logical bridge: %v", err)
}

log.Printf("Deleted Logical Bridge: %s\n", resp)
log.Printf("Deleted Logical Bridge: %s\n", name)
},
}

Expand Down Expand Up @@ -119,13 +120,13 @@ func GetLogicalBridge() *cobra.Command {
}
defer cancel()

resp, err := evpnClient.GetLogicalBridge(ctx, name)
lb, err := evpnClient.GetLogicalBridge(ctx, name)
if err != nil {
log.Fatalf("failed to get logical bridge: %v", err)
}

log.Printf(" Created Logical Bridge \n name: %s\n vlan: %d\n vni: %d\n status: %s\n VtepIpPrefix:%s", resp.GetName(), resp.GetSpec().GetVlanId(),
resp.GetSpec().GetVni(), resp.GetStatus(), resp.GetSpec().GetVtepIpPrefix())
log.Println("Get Logical Bridge:")
PrintLB(lb)
},
}

Expand Down Expand Up @@ -160,9 +161,10 @@ func ListLogicalBridges() *cobra.Command {
log.Fatalf("Failed to get items: %v", err)
}
// Process the server response
for _, item := range resp.LogicalBridges {
log.Printf(" Created Logical Bridge \n name: %s\n vlan: %d\n vni: %d\n status: %s\n VtepIpPrefix:%s", item.GetName(), item.GetSpec().GetVlanId(),
item.GetSpec().GetVni(), item.GetStatus(), item.GetSpec().GetVtepIpPrefix())
log.Println("List Logical Bridges:")
for _, lb := range resp.LogicalBridges {
log.Println("Logical Bridge with: ")
PrintLB(lb)
}

// Check if there are more pages to retrieve
Expand Down Expand Up @@ -198,13 +200,12 @@ func UpdateLogicalBridge() *cobra.Command {
}
defer cancel()

resp, err := evpnClient.UpdateLogicalBridge(ctx, name, updateMask)
lb, err := evpnClient.UpdateLogicalBridge(ctx, name, updateMask)
if err != nil {
log.Fatalf("failed to update logical bridge: %v", err)
}

log.Printf(" Updated Logical Bridge \n name: %s\n vlan: %d\n vni: %d\n status: %s\n VtepIpPrefix:%s", resp.GetName(), resp.GetSpec().GetVlanId(),
resp.GetSpec().GetVni(), resp.GetStatus(), resp.GetSpec().GetVtepIpPrefix())
log.Println("Updated Logical Bridge:")
PrintLB(lb)
},
}
cmd.Flags().StringVar(&name, "name", "", "name of the logical bridge")
Expand Down
25 changes: 12 additions & 13 deletions cmd/network/evpn-svi.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2022-2023 Intel Corporation, or its subsidiaries.
// Copyright (c) 2022-2023 Dell Inc, or its subsidiaries.
// Copyright (c) 2024 Ericsson AB.

// Package network implements the network related CLI commands
package network
Expand Down Expand Up @@ -42,11 +43,11 @@ func CreateSVI() *cobra.Command {
log.Fatalf("failed to create logical bridge: %v", err)
}

log.Printf("CreateSVI: Created SVI \n name: %s\n status: %d\n Vrf: %s\n LogicalBridge: %s\n MacAddress: %s\n EnableBgp: %t\n GwIPs: %s\nremoteAS: %d\n",
svi.GetName(), svi.GetStatus().GetOperStatus(), svi.GetSpec().GetVrf(), svi.GetSpec().GetLogicalBridge(), svi.GetSpec().GetMacAddress(),
svi.GetSpec().GetEnableBgp(), svi.GetSpec().GetGwIpPrefix(), svi.GetSpec().GetRemoteAs())
log.Println("Created SVI:")
PrintSvi(svi)
},
}
cmd.Flags().StringVar(&name, "name", "", "SVI Name")
cmd.Flags().StringVar(&vrf, "vrf", "", "Must be unique")
cmd.Flags().StringVar(&logicalBridge, "logicalBridge", "", "Pair of vni and vlan_id must be unique")
cmd.Flags().StringVar(&mac, "mac", "", "GW MAC address, random MAC assigned if not specified")
Expand Down Expand Up @@ -95,7 +96,7 @@ func DeleteSVI() *cobra.Command {
log.Fatalf("failed to create logical bridge: %v", err)
}

log.Printf("Deleted SVI ")
log.Printf("Deleted SVI: %s\n", name)
},
}

Expand Down Expand Up @@ -129,9 +130,8 @@ func GetSVI() *cobra.Command {
if err != nil {
log.Fatalf("GetSVI: Error occurred while creating Bridge Port: %q", err)
}
log.Printf("GetSVI: Created SVI \n name: %s\n status: %d\n Vrf: %s\n LogicalBridge: %s\n MacAddress: %s\n EnableBgp: %t\n GwIPs: %s\nremoteAS: %d\n",
svi.GetName(), svi.GetStatus().GetOperStatus(), svi.GetSpec().GetVrf(), svi.GetSpec().GetLogicalBridge(), svi.GetSpec().GetMacAddress(),
svi.GetSpec().GetEnableBgp(), svi.GetSpec().GetGwIpPrefix(), svi.GetSpec().GetRemoteAs())
log.Println("Get SVI:")
PrintSvi(svi)
},
}

Expand Down Expand Up @@ -166,10 +166,10 @@ func ListSVIs() *cobra.Command {
log.Fatalf("Failed to get items: %v", err)
}
// Process the server response
log.Println("List SVIs:")
for _, svi := range resp.Svis {
log.Printf("ListSVIs: SVI \n name: %s\n status: %d\n Vrf: %s\n LogicalBridge: %s\n MacAddress: %s\n EnableBgp: %t\n GwIPs: %s\nremoteAS: %d\n",
svi.GetName(), svi.GetStatus().GetOperStatus(), svi.GetSpec().GetVrf(), svi.GetSpec().GetLogicalBridge(), svi.GetSpec().GetMacAddress(),
svi.GetSpec().GetEnableBgp(), svi.GetSpec().GetGwIpPrefix(), svi.GetSpec().GetRemoteAs())
log.Println("SVI with:")
PrintSvi(svi)
}

// Check if there are more pages to retrieve
Expand Down Expand Up @@ -212,9 +212,8 @@ func UpdateSVI() *cobra.Command {
if err != nil {
log.Fatalf("GetBridgePort: Error occurred while creating Bridge Port: %q", err)
}
log.Printf("UpdateSVI: SVI \n name: %s\n status: %d\n Vrf: %s\n LogicalBridge: %s\n MacAddress: %s\n EnableBgp: %t\n GwIPs: %s\nremoteAS: %d\n",
svi.GetName(), svi.GetStatus().GetOperStatus(), svi.GetSpec().GetVrf(), svi.GetSpec().GetLogicalBridge(), svi.GetSpec().GetMacAddress(),
svi.GetSpec().GetEnableBgp(), svi.GetSpec().GetGwIpPrefix(), svi.GetSpec().GetRemoteAs())
log.Println("Updated SVI:")
PrintSvi(svi)
},
}
cmd.Flags().StringVar(&addr, "addr", "localhost:50151", "address of OPI gRPC server")
Expand Down
86 changes: 86 additions & 0 deletions cmd/network/evpn-utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2022-2023 Intel Corporation, or its subsidiaries.
// Copyright (c) 2022-2023 Dell Inc, or its subsidiaries.
// Copyright (c) 2024 Ericsson AB.

// Package network implements the network related CLI commands
package network

import (
"fmt"
"log"

"github.com/PraserX/ipconv"
pb "github.com/opiproject/opi-api/network/evpn-gw/v1alpha1/gen/go"
pc "github.com/opiproject/opi-api/network/opinetcommon/v1alpha1/gen/go"
)

// ComposeComponentsInfo composes the components with their details
func ComposeComponentsInfo(comp []*pb.Component) string {
var status string
for i := 0; i < len(comp); i++ {
str := fmt.Sprintf(" %+v\n", comp[i])
status += str
}
return status
}

// ComposeGwIps compose the gw ips string
func ComposeGwIps(comp []*pc.IPPrefix) string {
var status string
for i := 0; i < len(comp); i++ {
str := fmt.Sprintf("%+v/%v ", ipconv.IntToIPv4(comp[i].GetAddr().GetV4Addr()), comp[i].GetLen())
status += str
}
return status
}

// PrintLB prints the logical bridge fields in human readable format
func PrintLB(lb *pb.LogicalBridge) {
Vteip := fmt.Sprintf("%+v/%v", ipconv.IntToIPv4(lb.GetSpec().GetVtepIpPrefix().GetAddr().GetV4Addr()), lb.GetSpec().GetVtepIpPrefix().GetLen())
log.Println("name:", lb.GetName())
log.Println("status:", lb.GetStatus().GetOperStatus().String())
log.Println("vlan:", lb.GetSpec().GetVlanId())
log.Println("vni:", lb.GetSpec().GetVni())
log.Println("VtepIpPrefix:", Vteip)
log.Println("Component Status:")
log.Println(ComposeComponentsInfo(lb.GetStatus().GetComponents()))
}

// PrintBP prints the bridge Port fields in human readable format
func PrintBP(bp *pb.BridgePort) {
log.Println("name:", bp.GetName())
log.Println("status:", bp.GetStatus().GetOperStatus().String())
log.Println("ptype:", bp.GetSpec().GetPtype())
log.Println("mac:", bp.GetSpec().GetMacAddress())
log.Println("bridges:", bp.GetSpec().GetLogicalBridges())
log.Println("Component Status:")
log.Println(ComposeComponentsInfo(bp.GetStatus().GetComponents()))
}

// PrintSvi prints the svi fields in human readable format
func PrintSvi(svi *pb.Svi) {
log.Println("name:", svi.GetName())
log.Println("status:", svi.GetStatus().GetOperStatus().String())
log.Println("Vrf:", svi.GetSpec().GetVrf())
log.Println("LogicalBridge:", svi.GetSpec().GetLogicalBridge())
log.Println("MacAddress:", svi.GetSpec().GetMacAddress())
log.Println("EnableBgp:", svi.GetSpec().GetEnableBgp())
log.Println("GwIPs:", ComposeGwIps(svi.GetSpec().GetGwIpPrefix()))
log.Println("remoteAS:", svi.GetSpec().GetRemoteAs())
log.Println("Component Status:")
log.Println(ComposeComponentsInfo(svi.GetStatus().GetComponents()))
}

// PrintVrf prints the vrf fields in human readable format
func PrintVrf(vrf *pb.Vrf) {
Vteip := fmt.Sprintf("%+v/%v", ipconv.IntToIPv4(vrf.GetSpec().GetVtepIpPrefix().GetAddr().GetV4Addr()), vrf.GetSpec().GetVtepIpPrefix().GetLen())
Loopback := fmt.Sprintf("%+v/%+v", ipconv.IntToIPv4(vrf.GetSpec().GetLoopbackIpPrefix().GetAddr().GetV4Addr()), vrf.GetSpec().GetLoopbackIpPrefix().GetLen())
log.Println("name:", vrf.GetName())
log.Println("operation status:", vrf.GetStatus().GetOperStatus().String())
log.Println("vni:", vrf.GetSpec().GetVni())
log.Println("vtep ip:", Vteip)
log.Println("loopback ip:", Loopback)
log.Println("Component Status:")
log.Println(ComposeComponentsInfo(vrf.GetStatus().GetComponents()))
}
21 changes: 12 additions & 9 deletions cmd/network/evpn-vrf.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2022-2023 Intel Corporation, or its subsidiaries.
// Copyright (c) 2022-2023 Dell Inc, or its subsidiaries.
// Copyright (c) 2024 Ericsson AB.

// Package network implements the network related CLI commands
package network
Expand Down Expand Up @@ -37,8 +38,8 @@ func CreateVRF() *cobra.Command {
if err != nil {
log.Fatalf("failed to create vrf: %v", err)
}
log.Printf("Created VRF with \n name: %s\n operation status: %d\n vni : %d\n vtep ip : %s\n loopback ip: %s\n", vrf.GetName(), vrf.GetStatus().GetOperStatus(),
vrf.GetSpec().GetVni(), vrf.GetSpec().GetVtepIpPrefix(), vrf.GetSpec().GetLoopbackIpPrefix())
log.Println("Created VRF:")
PrintVrf(vrf)
},
}

Expand Down Expand Up @@ -80,7 +81,7 @@ func DeleteVRF() *cobra.Command {
if err != nil {
log.Fatalf("DeleteVRF: Error occurred while creating Bridge Port: %q", err)
}
log.Printf("Deleted VRF with VPort ID: %s\n", name)
log.Printf("Deleted VRF: %s\n", name)
},
}

Expand Down Expand Up @@ -112,8 +113,9 @@ func GetVRF() *cobra.Command {
if err != nil {
log.Fatalf("DeleteVRF: Error occurred while creating Bridge Port: %q", err)
}
log.Printf("VRF with \n name: %s\n operation status: %d\n vni : %d\n vtep ip : %s\n loopback ip: %s\n", vrf.GetName(), vrf.GetStatus().GetOperStatus(),
vrf.GetSpec().GetVni(), vrf.GetSpec().GetVtepIpPrefix(), vrf.GetSpec().GetLoopbackIpPrefix())

log.Println("Get VRF:")
PrintVrf(vrf)
},
}

Expand Down Expand Up @@ -148,9 +150,10 @@ func ListVRFs() *cobra.Command {
log.Fatalf("Failed to get items: %v", err)
}
// Process the server response
log.Println("list VRFs:")
for _, vrf := range resp.Vrfs {
log.Printf("VRF with \n name: %s\n operation status: %d\n vni : %d\n vtep ip : %s\n loopback ip: %s\n", vrf.GetName(), vrf.GetStatus().GetOperStatus(),
vrf.GetSpec().GetVni(), vrf.GetSpec().GetVtepIpPrefix(), vrf.GetSpec().GetLoopbackIpPrefix())
log.Println("VRF with:")
PrintVrf(vrf)
}

// Check if there are more pages to retrieve
Expand Down Expand Up @@ -192,8 +195,8 @@ func UpdateVRF() *cobra.Command {
if err != nil {
log.Fatalf("GetBridgePort: Error occurred while creating Bridge Port: %q", err)
}
log.Printf("Updated VRF with \n name: %s\n operation status: %d\n vni : %d\n vtep ip : %s\n loopback ip: %s\n", vrf.GetName(), vrf.GetStatus().GetOperStatus(),
vrf.GetSpec().GetVni(), vrf.GetSpec().GetVtepIpPrefix(), vrf.GetSpec().GetLoopbackIpPrefix())
log.Println("Updated VRF:")
PrintVrf(vrf)
},
}
cmd.Flags().StringVar(&addr, "addr", "localhost:50151", "address of OPI gRPC server")
Expand Down
3 changes: 2 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ module github.com/opiproject/godpu
go 1.19

require (
github.com/PraserX/ipconv v1.2.0
github.com/go-chi/chi v1.5.5
github.com/go-ping/ping v1.1.0
github.com/google/uuid v1.5.0
github.com/lithammer/fuzzysearch v1.1.8
github.com/onsi/ginkgo/v2 v2.14.0
github.com/onsi/gomega v1.30.0
github.com/opiproject/opi-api v0.0.0-20240118183513-e44db269fba4
github.com/opiproject/opi-api v0.0.0-20240304222410-5dba226aaa9e
github.com/spf13/cobra v1.8.0
github.com/stretchr/testify v1.8.4
go.einride.tech/aip v0.66.0
Expand Down
Loading

0 comments on commit acb3a85

Please sign in to comment.