VOL-2632 Error propagation from HashFlowStats

Change-Id: If2872e97e2b6c3c751f64dadfef47bfde3a77551
diff --git a/rw_core/core/logical_device_agent.go b/rw_core/core/logical_device_agent.go
index cfd486a..fc9dd92 100644
--- a/rw_core/core/logical_device_agent.go
+++ b/rw_core/core/logical_device_agent.go
@@ -814,6 +814,7 @@
 	var flows []*ofp.OfpFlowStats
 	var meters []*ofp.OfpMeterEntry
 	var flow *ofp.OfpFlowStats
+	var err error
 
 	if lDevice.Flows != nil && lDevice.Flows.Items != nil {
 		flows = lDevice.Flows.Items
@@ -832,13 +833,19 @@
 			log.Warnw("overlapped-flows", log.Fields{"logicaldeviceId": agent.logicalDeviceID})
 		} else {
 			//	Add flow
-			flow = fu.FlowStatsEntryFromFlowModMessage(mod)
+			flow, err = fu.FlowStatsEntryFromFlowModMessage(mod)
+			if err != nil {
+				return err
+			}
 			flows = append(flows, flow)
 			updatedFlows = append(updatedFlows, flow)
 			changed = true
 		}
 	} else {
-		flow = fu.FlowStatsEntryFromFlowModMessage(mod)
+		flow, err = fu.FlowStatsEntryFromFlowModMessage(mod)
+		if err != nil {
+			return err
+		}
 		idx := fu.FindFlows(flows, flow)
 		if idx >= 0 {
 			oldFlow := flows[idx]
@@ -964,7 +971,11 @@
 	toDelete := make([]*ofp.OfpFlowStats, 0)
 	for _, f := range flows {
 		// Check whether the flow and the flowmod matches
-		if fu.FlowMatch(f, fu.FlowStatsEntryFromFlowModMessage(mod)) {
+		fs, err := fu.FlowStatsEntryFromFlowModMessage(mod)
+		if err != nil {
+			return err
+		}
+		if fu.FlowMatch(f, fs) {
 			toDelete = append(toDelete, f)
 			continue
 		}
@@ -1098,7 +1109,10 @@
 
 	changedFlow := false
 	changedMeter := false
-	flow := fu.FlowStatsEntryFromFlowModMessage(mod)
+	flow, err := fu.FlowStatsEntryFromFlowModMessage(mod)
+	if err != nil {
+		return err
+	}
 	flowsToDelete := make([]*ofp.OfpFlowStats, 0)
 	idx := fu.FindFlows(flows, flow)
 	if idx >= 0 {