Skip to content

Commit

Permalink
fix(evpn): report error in comp details
Browse files Browse the repository at this point in the history
Signed-off-by: atulpatel261194 <[email protected]>
  • Loading branch information
atulpatel261194 committed Sep 30, 2024
1 parent 38a32cc commit 138318f
Show file tree
Hide file tree
Showing 3 changed files with 144 additions and 126 deletions.
48 changes: 26 additions & 22 deletions pkg/LinuxCIModule/lci.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ package linuxcimodule

import (
"context"
"fmt"

// "io/ioutil"
"log"
Expand Down Expand Up @@ -48,6 +49,7 @@ func handlebp(objectData *eventbus.ObjectData) {
log.Printf("LCI : GetBP error: %s\n", err)
comp.Name = lciComp
comp.CompStatus = common.ComponentStatusError
comp.Details = fmt.Sprintf("LCI : GetBP error: %s\n", err)
if comp.Timer == 0 {
comp.Timer = 2 * time.Second
} else {
Expand All @@ -63,6 +65,7 @@ func handlebp(objectData *eventbus.ObjectData) {
log.Printf("LVM: Mismatch in resoruce version %+v\n and bp resource version %+v\n", objectData.ResourceVersion, BP.ResourceVersion)
comp.Name = lciComp
comp.CompStatus = common.ComponentStatusError
comp.Details = fmt.Sprintf("LVM: Mismatch in resoruce version %+v\n and bp resource version %+v\n", objectData.ResourceVersion, BP.ResourceVersion)
if comp.Timer == 0 {
comp.Timer = 2 * time.Second
} else {
Expand All @@ -82,10 +85,10 @@ func handlebp(objectData *eventbus.ObjectData) {
}
}
if BP.Status.BPOperStatus != infradb.BridgePortOperStatusToBeDeleted {
status := setUpBp(BP)
details, status := setUpBp(BP)
comp.Name = lciComp
comp.Details = details
if status {
comp.Details = ""
comp.CompStatus = common.ComponentStatusSuccess
comp.Timer = 0
} else {
Expand All @@ -102,8 +105,9 @@ func handlebp(objectData *eventbus.ObjectData) {
log.Printf("error in updating bp status: %s\n", err)
}
} else {
status := tearDownBp(BP)
details, status := tearDownBp(BP)
comp.Name = lciComp
comp.Details = details
if status {
comp.CompStatus = common.ComponentStatusSuccess
comp.Timer = 0
Expand All @@ -124,92 +128,92 @@ func handlebp(objectData *eventbus.ObjectData) {
}

// setUpBp sets up the bridge port
func setUpBp(bp *infradb.BridgePort) bool {
func setUpBp(bp *infradb.BridgePort) (string, bool) {
resourceID := path.Base(bp.Name)
bridge, err := nlink.LinkByName(ctx, "br-tenant")
if err != nil {
log.Printf("LCI: Unable to find key br-tenant\n")
return false
return fmt.Sprintf("LCI: Unable to find key br-tenant, %s", err), false
}
iface, err := nlink.LinkByName(ctx, resourceID)
if err != nil {
log.Printf("LCI: Unable to find key %s\n", resourceID)
return false
return fmt.Sprintf("LCI: Unable to find key %s\n", resourceID), false
}
if err := nlink.LinkSetMaster(ctx, iface, bridge); err != nil {
log.Printf("LCI: Failed to add iface to bridge: %v", err)
return false
return fmt.Sprintf("LCI: Failed to add iface to bridge: %v", err), false
}
for _, bridgeRefName := range bp.Spec.LogicalBridges {
BrObj, err := infradb.GetLB(bridgeRefName)
if err != nil {
log.Printf("LCI: unable to find key %s and error is %v", bridgeRefName, err)
return false
return fmt.Sprintf("LCI: unable to find key %s and error is %v", bridgeRefName, err), false
}
if BrObj.Spec.VlanID > math.MaxUint16 {
log.Printf("LVM : VlanID %v value passed in Logical Bridge create is greater than 16 bit value\n", BrObj.Spec.VlanID)
return false
return fmt.Sprintf("LVM : VlanID %v value passed in Logical Bridge create is greater than 16 bit value\n", BrObj.Spec.VlanID), false
}
//TODO: Update opi-api to change vlanid to int16 in LogiclaBridge "https://linter.aip.dev/141/forbidden-types"
vid := uint16(BrObj.Spec.VlanID)
switch bp.Spec.Ptype {
case infradb.Access:
if err := nlink.BridgeVlanAdd(ctx, iface, vid, true, true, false, false); err != nil {
log.Printf("Failed to add vlan to bridge: %v", err)
return false
return fmt.Sprintf("Failed to add vlan to bridge: %v", err), false
}
case infradb.Trunk:
// Example: bridge vlan add dev eth2 vid 20
if err := nlink.BridgeVlanAdd(ctx, iface, vid, false, false, false, false); err != nil {
log.Printf("Failed to add vlan to bridge: %v", err)
return false
return fmt.Sprintf("Failed to add vlan to bridge: %v", err), false
}
default:
log.Printf("Only ACCESS or TRUNK supported and not (%d)", bp.Spec.Ptype)
return false
return fmt.Sprintf("Only ACCESS or TRUNK supported and not (%d)", bp.Spec.Ptype), false
}
}
if err := nlink.LinkSetUp(ctx, iface); err != nil {
log.Printf("Failed to up iface link: %v", err)
return false
return fmt.Sprintf("Failed to up iface link: %v", err), false
}
return true
return "", true
}

// tearDownBp tears down a bridge port
func tearDownBp(bp *infradb.BridgePort) bool {
func tearDownBp(bp *infradb.BridgePort) (string, bool) {
resourceID := path.Base(bp.Name)
iface, err := nlink.LinkByName(ctx, resourceID)
if err != nil {
log.Printf("LCI: Unable to find key %s\n", resourceID)
return false
return fmt.Sprintf("LCI: Unable to find key %s\n", resourceID), false
}
if err := nlink.LinkSetDown(ctx, iface); err != nil {
log.Printf("LCI: Failed to down link: %v", err)
return false
return fmt.Sprintf("LCI: Failed to down link: %v", err), false
}
for _, bridgeRefName := range bp.Spec.LogicalBridges {
BrObj, err := infradb.GetLB(bridgeRefName)
if err != nil {
log.Printf("LCI: unable to find key %s and error is %v", bridgeRefName, err)
return false
return fmt.Sprintf("LCI: unable to find key %s and error is %v", bridgeRefName, err), false
}
if BrObj.Spec.VlanID > math.MaxUint16 {
log.Printf("LVM : VlanID %v value passed in Logical Bridge create is greater than 16 bit value\n", BrObj.Spec.VlanID)
return false
return fmt.Sprintf("LVM : VlanID %v value passed in Logical Bridge create is greater than 16 bit value\n", BrObj.Spec.VlanID), false
}
//TODO: Update opi-api to change vlanid to uint16 in LogiclaBridge
vid := uint16(BrObj.Spec.VlanID)
if err := nlink.BridgeVlanDel(ctx, iface, vid, true, true, false, false); err != nil {
log.Printf("LCI: Failed to delete vlan to bridge: %v", err)
return false
return fmt.Sprintf("LCI: Failed to delete vlan to bridge: %v", err), false
}
}
if err := nlink.LinkDel(ctx, iface); err != nil {
log.Printf("Failed to delete link: %v", err)
return false
return fmt.Sprintf("Failed to delete link: %v", err), false
}
return true
return "", true
}

var ctx context.Context
Expand Down
Loading

0 comments on commit 138318f

Please sign in to comment.