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