[VOL-5104] - BBSIM crashed when adding flows

Change-Id: I57aa8a3b9007ec77c94612b0c0537f1827b78902
diff --git a/internal/bbsim/devices/olt.go b/internal/bbsim/devices/olt.go
index 46b57b9..bbe49bc 100644
--- a/internal/bbsim/devices/olt.go
+++ b/internal/bbsim/devices/olt.go
@@ -1180,7 +1180,9 @@
 			return nil, err
 		}
 
-		o.storeGemPortIdByFlow(flow)
+		if err := o.storeGemPortIdByFlow(flow); err != nil {
+			return nil, err
+		}
 		o.storeAllocId(flow)
 
 		msg := types.Message{
@@ -1744,7 +1746,7 @@
 	}
 }
 
-func (o *OltDevice) storeGemPortId(ponId uint32, onuId uint32, portNo uint32, gemId int32, flowId uint64) {
+func (o *OltDevice) storeGemPortId(ponId uint32, onuId uint32, portNo uint32, gemId int32, flowId uint64) error {
 	o.GemPortIDsLock.Lock()
 	defer o.GemPortIDsLock.Unlock()
 
@@ -1756,6 +1758,7 @@
 			"GemportId": gemId,
 			"FlowId":    flowId,
 		}).Error("trying-to-store-gemport-for-unknown-onu")
+		return fmt.Errorf("failed-trying-to-store-gemport-%d-for-unknown-onu-%d-and-IntfId-%d", gemId, onuId, ponId)
 	}
 
 	oltLogger.WithFields(log.Fields{
@@ -1773,9 +1776,11 @@
 		o.GemPortIDs[ponId][onuId][portNo][gemId] = make(map[uint64]bool)
 	}
 	o.GemPortIDs[ponId][onuId][portNo][gemId][flowId] = true
+
+	return nil
 }
 
-func (o *OltDevice) storeGemPortIdByFlow(flow *openolt.Flow) {
+func (o *OltDevice) storeGemPortIdByFlow(flow *openolt.Flow) error {
 	oltLogger.WithFields(log.Fields{
 		"IntfId":        flow.AccessIntfId,
 		"OnuId":         flow.OnuId,
@@ -1788,11 +1793,19 @@
 
 	if flow.ReplicateFlow {
 		for _, gem := range flow.PbitToGemport {
-			o.storeGemPortId(uint32(flow.AccessIntfId), uint32(flow.OnuId), flow.PortNo, int32(gem), flow.FlowId)
+			err := o.storeGemPortId(uint32(flow.AccessIntfId), uint32(flow.OnuId), flow.PortNo, int32(gem), flow.FlowId)
+			if err != nil {
+				return err
+			}
 		}
 	} else {
-		o.storeGemPortId(uint32(flow.AccessIntfId), uint32(flow.OnuId), flow.PortNo, flow.GemportId, flow.FlowId)
+		err := o.storeGemPortId(uint32(flow.AccessIntfId), uint32(flow.OnuId), flow.PortNo, flow.GemportId, flow.FlowId)
+		if err != nil {
+			return err
+		}
 	}
+
+	return nil
 }
 
 func (o *OltDevice) freeGemPortId(flow *openolt.Flow) {