Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func (debugDP *DebugDP) DeletePortFromDataPlane(bridgeName string, portName stri

}

func (debugDP *DebugDP) InitDataPlane(bridgeName string) error {
func (debugDP *DebugDP) InitDataPlane(bridgeName string, isMacLearning bool) error {
debugDP.log.Info("Init Data plane", "bridgeName", bridgeName)
return nil
}
Expand Down
7 changes: 5 additions & 2 deletions internal/daemon/vendor-specific-plugins/marvell/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,14 @@ const (
DpuRpmDeviceID string = "a063"
NfName string = "mrvl-nf1"
isNf bool = false
isMacLearning bool = true
)

// multiple dataplane can be added using mrvldp interface functions
type mrvldp interface {
AddPortToDataPlane(bridgeName string, portName string, vfPCIAddres string, isDPDK bool) error
DeletePortFromDataPlane(bridgeName string, portName string) error
InitDataPlane(bridgeName string) error
InitDataPlane(bridgeName string, isMacLearning bool) error
ReadAllPortFromDataPlane(bridgeName string) (string, error)
DeleteDataplane(bridgeName string) error
AddFlowRuleToDataPlane(bridgeName string, inPort string, outPort string, dstMac string) error
Expand Down Expand Up @@ -292,7 +293,7 @@ func (vsp *mrvlVspServer) doInit(dpuMode bool) (*pb.IpPort, error) {
}
// Initialize Marvell Data Path
vsp.bridgeName = "br-mrv0" // TODO: example name discuss on it
if err := vsp.mrvlDP.InitDataPlane(vsp.bridgeName); err != nil {
if err := vsp.mrvlDP.InitDataPlane(vsp.bridgeName, isMacLearning); err != nil {
klog.Errorf("Error occurred in initializing Data Path: %v", err)
vsp.Stop()
return nil, err
Expand All @@ -319,6 +320,8 @@ func (vsp *mrvlVspServer) doInit(dpuMode bool) (*pb.IpPort, error) {
// It will return the IpPort and error
func (vsp *mrvlVspServer) Init(ctx context.Context, in *pb.InitRequest) (*pb.IpPort, error) {
klog.Infof("Received Init() request: DpuMode: %v", in.DpuMode)
// To set the isMacLearning variable from the InitRequest
// vsp.isMacLearning = in.IsMacLearning
result, err := vsp.doInit(in.DpuMode)
klog.Infof("Received Init() request done: DpuMode: %v, IpPort: %v, err: %v", in.DpuMode, result, err)
return result, err
Expand Down
20 changes: 19 additions & 1 deletion internal/daemon/vendor-specific-plugins/marvell/ovs-dp/ovsdp.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ func createBridge(bridgeName string) error {
}

// InitDataPlane initializes the data path in this case it creates an ovs bridge
func (ovsdp *OvsDP) InitDataPlane(bridgeName string) error {
func (ovsdp *OvsDP) InitDataPlane(bridgeName string, isMacLearning bool) error {
ovsdp.log.Info("Initializing OVS-DPDK Data Plane")
ovsdp.bridgeName = bridgeName
// "br0" For Testing Purpose
Expand All @@ -93,6 +93,24 @@ func (ovsdp *OvsDP) InitDataPlane(bridgeName string) error {

}
ovsdp.log.Info("OVS-DPDK Bridge Created Successfully", "BridgeName", bridgeName)

// Modify the default NORMAL flow to have highest priority
if isMacLearning {
ovsdp.log.Info("Modifying NORMAL flow to highest priority")
// First delete the existing NORMAL flow
cmd := exec.Command("chroot", "/host", "ovs-ofctl", "del-flows", bridgeName)
if err := cmd.Run(); err != nil {
ovsdp.log.Error(err, "Error occurred in deleting default NORMAL flow")
return err
}
// Add high priority NORMAL flow
cmd = exec.Command("chroot", "/host", "ovs-ofctl", "add-flow", bridgeName, "priority=65535,actions=NORMAL")
if err := cmd.Run(); err != nil {
ovsdp.log.Error(err, "Error occurred in adding high priority NORMAL flow")
return err
}
ovsdp.log.Info("NORMAL flow priority updated successfully", "Priority", 65535)
}
// Get the name of interface from device id with device id as "a063"
// a063 is the device id of RPM interface
portName, err := mrvlutils.GetNameByDeviceID(deviceId)
Expand Down