VOL-291 : PON simulator refactoring for cluster integration
- Added ponsim build target in Makefile
- Added new option to vcore to select comm type with ponsim
- Modified all proto files to include destination go package
Amendments:
- Clean up based on review comments
- Properly close GRPC connections in ponsim_olt adapter
- Added voltha namespace to some k8s templates
Change-Id: I2f349fa7b3550a8a8cc8fc676cc896f33fbb9372
diff --git a/ponsim/v2/grpc/sbi/common_handler.go b/ponsim/v2/grpc/sbi/common_handler.go
new file mode 100644
index 0000000..4c59af6
--- /dev/null
+++ b/ponsim/v2/grpc/sbi/common_handler.go
@@ -0,0 +1,72 @@
+package sbi
+
+import (
+ "context"
+ "github.com/golang/protobuf/ptypes/empty"
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+ "github.com/opencord/voltha/ponsim/v2/common"
+ "github.com/opencord/voltha/ponsim/v2/core"
+ "github.com/opencord/voltha/protos/go/ponsim"
+ "github.com/sirupsen/logrus"
+ "io"
+)
+
+type PonSimCommonHandler struct {
+ device core.PonSimInterface
+}
+
+/*
+NewPonSimCommonHandler instantiates a handler for common GRPC servicing methods
+*/
+func NewPonSimCommonHandler(device core.PonSimInterface) *PonSimCommonHandler {
+ var handler *PonSimCommonHandler
+
+ handler = &PonSimCommonHandler{device: device}
+
+ return handler
+}
+
+/*
+ProcessData handles and forwards streaming INGRESS/EGRESS packets
+*/
+func (h *PonSimCommonHandler) ProcessData(stream ponsim.PonSimCommon_ProcessDataServer) error {
+ common.Logger().WithFields(logrus.Fields{
+ "handler": h,
+ }).Debug("Processing data")
+
+ var err error
+ var data *ponsim.IncomingData
+
+ for {
+
+ if data, err = stream.Recv(); err == io.EOF {
+ common.Logger().WithFields(logrus.Fields{
+ "handler": h,
+ }).Warn("Streaming channel was closed")
+ return stream.SendAndClose(&empty.Empty{})
+ } else if err != nil {
+ common.Logger().WithFields(logrus.Fields{
+ "handler": h,
+ "error": err.Error(),
+ }).Warn("Error occurred with stream")
+ return err
+ }
+
+ frame := gopacket.NewPacket(data.Payload, layers.LayerTypeEthernet, gopacket.Default)
+
+ h.device.Forward(
+ context.Background(),
+ int(data.Port),
+ frame,
+ )
+ common.Logger().WithFields(logrus.Fields{
+ "handler": h,
+ "frame": frame,
+ "port": data.Port,
+ }).Debug("Retrieved and forwarded packet")
+
+ }
+
+ return nil
+}