[VOL-3242] Sending FlowRemoved message once the FlowDeleteStrict message has been successfully sent to VOLTHA
Change-Id: Icbede80627159d5e99bcdc27600ddf567609cabb
diff --git a/VERSION b/VERSION
index 6085e94..23aa839 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.2.1
+1.2.2
diff --git a/internal/pkg/openflow/flowMod.go b/internal/pkg/openflow/flowMod.go
index a087cef..cc0c595 100644
--- a/internal/pkg/openflow/flowMod.go
+++ b/internal/pkg/openflow/flowMod.go
@@ -400,6 +400,12 @@
oxmList = append(oxmList, &ofpOxmField)
}
+ responseRequired := false
+
+ if flowDeleteStrict.GetFlags() == ofp.OFPFFSendFlowRem {
+ responseRequired = true
+ }
+
// Construct request
flowUpdate := openflow_13.FlowTableUpdate{
Id: ofc.DeviceID,
@@ -434,5 +440,27 @@
log.Fields{
"device-id": ofc.DeviceID,
"error": err})
+ return
}
+
+ if responseRequired {
+ response := ofp.NewFlowRemoved()
+
+ response.Cookie = flowDeleteStrict.Cookie
+ response.Priority = flowDeleteStrict.Priority
+ response.Reason = ofp.OFPRRDelete
+ response.Match = flowDeleteStrict.Match
+ response.IdleTimeout = flowDeleteStrict.IdleTimeout
+ response.HardTimeout = flowDeleteStrict.HardTimeout
+ response.Xid = flowDeleteStrict.Xid
+
+ err := ofc.SendMessage(response)
+ if err != nil {
+ logger.Errorw("Error sending FlowRemoved to ONOS",
+ log.Fields{
+ "device-id": ofc.DeviceID,
+ "error": err})
+ }
+ }
+
}