VOL-1077 added NNI port and management port distinction

Change-Id: Ie24e05aa927661bb9a227d04e565018ce5523cd6
diff --git a/ponsim/v2/core/ponsim_device.go b/ponsim/v2/core/ponsim_device.go
index 13cae92..3fc52a5 100644
--- a/ponsim/v2/core/ponsim_device.go
+++ b/ponsim/v2/core/ponsim_device.go
@@ -111,7 +111,9 @@
 		forwarded := 0
 		links := o.links[int(egressPort)]
 
-		o.Counter.CountTxFrame(int(egressPort), len(common.GetEthernetLayer(egressFrame).Payload))
+		if int(egressPort) <= 2 && int(egressPort) > 0 {
+			o.Counter.CountTxFrame(int(egressPort), len(common.GetEthernetLayer(egressFrame).Payload))
+		}
 
 		for _, link := range links {
 			forwarded += 1
diff --git a/ponsim/v2/core/ponsim_olt.go b/ponsim/v2/core/ponsim_olt.go
index 34ed68a..15ca2e7 100644
--- a/ponsim/v2/core/ponsim_olt.go
+++ b/ponsim/v2/core/ponsim_olt.go
@@ -24,6 +24,7 @@
 	"github.com/golang/protobuf/ptypes/empty"
 	"github.com/google/gopacket"
 	"github.com/opencord/voltha/ponsim/v2/common"
+	"github.com/opencord/voltha/protos/go/openflow_13"
 	"github.com/opencord/voltha/protos/go/ponsim"
 	"github.com/sirupsen/logrus"
 	"google.golang.org/grpc"
@@ -122,6 +123,33 @@
 }
 
 /*
+forwardToNNI defines function to forward a packet to the NNI interface
+*/
+func (o *PonSimOltDevice) forwardToNNI() func(int, gopacket.Packet) {
+	return func(port int, frame gopacket.Packet) {
+		var err error
+		common.Logger().WithFields(logrus.Fields{
+			"device": o,
+			"port":   port,
+			"frame":  frame,
+		}).Debug("Forwarding packet to NNI")
+		if err = o.egressHandler.WritePacketData(frame.Data()); err != nil {
+			common.Logger().WithFields(logrus.Fields{
+				"device": o,
+				"port":   port,
+				"frame":  frame,
+			}).Fatal("Problem while forwarding packet to NNI")
+		} else {
+			common.Logger().WithFields(logrus.Fields{
+				"device": o,
+				"port":   port,
+				"frame":  frame,
+			}).Debug("Forwarded packet to NNI")
+		}
+	}
+}
+
+/*
 Start performs setup operations for an OLT device
 */
 func (o *PonSimOltDevice) Start(ctx context.Context) {
@@ -134,7 +162,10 @@
 	o.outgoing = make(chan []byte, 1)
 
 	// Add INGRESS operation
-	o.AddLink(2, 0, o.forwardToLAN())
+	o.AddLink(int(openflow_13.OfpPortNo_OFPP_CONTROLLER), 0, o.forwardToLAN())
+
+	// Add Data-Plane Forwarding operation
+	o.AddLink(2, 0, o.forwardToNNI())
 
 	// Start PM counter logging
 	o.counterLoop = common.NewIntervalHandler(90, o.Counter.LogCounts)
@@ -344,6 +375,10 @@
 			o.GetOnus()[portNum] = registree
 
 			o.AddLink(1, int(portNum), o.forwardToONU(portNum))
+			common.Logger().WithFields(logrus.Fields{
+				"port": portNum,
+				"onu":  onu,
+			}).Info("Connected ONU")
 			go o.MonitorOnu(ctx, portNum)
 			go o.Listen(ctx, portNum)
 		}