VOL-2765 Issue simulated TestResult after TestResponse
Change-Id: I3918a49a088b942236299e215a704970ceb17a74
diff --git a/internal/bbsim/devices/onu.go b/internal/bbsim/devices/onu.go
index 43759c9..583a848 100644
--- a/internal/bbsim/devices/onu.go
+++ b/internal/bbsim/devices/onu.go
@@ -567,6 +567,37 @@
}
}
+// Create a TestResponse packet and send it
+func (o *Onu) sendTestResult(msg OmciMessage, stream openolt.Openolt_EnableIndicationServer) error {
+ resp, err := omcilib.BuildTestResult(HexDecode(msg.omciMsg.Pkt))
+ if err != nil {
+ return err
+ }
+
+ var omciInd openolt.OmciIndication
+ omciInd.IntfId = o.PonPortID
+ omciInd.OnuId = o.ID
+ omciInd.Pkt = resp
+
+ omci := &openolt.Indication_OmciInd{OmciInd: &omciInd}
+ if err := stream.Send(&openolt.Indication{Data: omci}); err != nil {
+ onuLogger.WithFields(log.Fields{
+ "IntfId": o.PonPortID,
+ "SerialNumber": o.Sn(),
+ "omciPacket": omciInd.Pkt,
+ "msg": msg,
+ }).Errorf("send TestResult omcisim indication failed: %v", err)
+ return err
+ }
+ onuLogger.WithFields(log.Fields{
+ "IntfId": o.PonPortID,
+ "SerialNumber": o.Sn(),
+ "omciPacket": omciInd.Pkt,
+ }).Tracef("Sent TestResult OMCI message")
+
+ return nil
+}
+
func (o *Onu) handleOmciMessage(msg OmciMessage, stream openolt.Openolt_EnableIndicationServer) {
onuLogger.WithFields(log.Fields{
@@ -608,6 +639,16 @@
"SerialNumber": o.Sn(),
"omciPacket": omciInd.Pkt,
}).Tracef("Sent OMCI message")
+
+ // Test message is special, it requires sending two packets:
+ // first packet: TestResponse, says whether test was started successully, handled by omci-sim
+ // second packet, TestResult, reports the result of running the self-test
+ // TestResult can come some time after a TestResponse
+ // TODO: Implement some delay between the TestResponse and the TestResult
+ isTest, err := omcilib.IsTestRequest(HexDecode(msg.omciMsg.Pkt))
+ if (err == nil) && (isTest) {
+ o.sendTestResult(msg, stream)
+ }
}
func (o *Onu) storePortNumber(portNo uint32) {
@@ -834,7 +875,6 @@
}).Errorf("Error while transitioning ONU State %v", err)
}
}
-
}
}