VOL-3505 Send an ofp_error_msg on flow add/delete error
Change-Id: I3791d4ab7ae0f7730f52988234d0c99af2cea75f
diff --git a/rw_core/core/device/event/event.go b/rw_core/core/device/event/event.go
index 5817c64..f1a6ce8 100644
--- a/rw_core/core/device/event/event.go
+++ b/rw_core/core/device/event/event.go
@@ -19,6 +19,7 @@
import (
"context"
"encoding/hex"
+ "fmt"
"sync"
"github.com/golang/protobuf/ptypes/empty"
@@ -139,6 +140,26 @@
}
}
+func (q *Manager) SendFlowChangeEvent(ctx context.Context, deviceID string, res []error, xid uint32) {
+ logger.Debugw(ctx, "SendChangeEvent", log.Fields{"device-id": deviceID, "flowId": xid})
+ errorType := openflow_13.OfpErrorType_OFPET_FLOW_MOD_FAILED
+ q.changeEventQueue <- openflow_13.ChangeEvent{
+ Id: deviceID,
+ Event: &openflow_13.ChangeEvent_Error{
+ Error: &openflow_13.OfpErrorMsg{
+ Header: &openflow_13.OfpHeader{
+ Version: 0,
+ Type: openflow_13.OfpType_OFPT_FLOW_MOD,
+ Xid: xid,
+ },
+ Type: uint32(errorType),
+ Code: uint32(openflow_13.OfpFlowModFailedCode_OFPFMFC_UNKNOWN),
+ Data: []byte(fmt.Sprintf("%v", res[:])),
+ },
+ },
+ }
+}
+
// ReceiveChangeEvents receives change in events
func (q *Manager) ReceiveChangeEvents(_ *empty.Empty, changeEvents voltha.VolthaService_ReceiveChangeEventsServer) error {
ctx := context.Background()