[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})
+		}
+	}
+
 }