SEBA-958 send periodic port stats

Change-Id: I981e6c70b214845d87e8ae96b370fcdf58ccfef3
diff --git a/internal/bbsim/devices/helpers.go b/internal/bbsim/devices/helpers.go
index c4bab28..e72093b 100644
--- a/internal/bbsim/devices/helpers.go
+++ b/internal/bbsim/devices/helpers.go
@@ -17,6 +17,7 @@
 package devices
 
 import (
+	"math/rand"
 	"strconv"
 	"time"
 
@@ -85,3 +86,46 @@
 		olt.EventChannel <- event
 	}
 }
+
+func getPortStats(packetCount uint64, incrementStat bool) (*openolt.PortStatistics, uint64) {
+	// increment current packet count by random number
+	if incrementStat {
+		packetCount = packetCount + uint64(rand.Intn(50)+1*10)
+	}
+
+	// fill all other stats based on packet count
+	portStats := &openolt.PortStatistics{
+		RxBytes:        packetCount * 64,
+		RxPackets:      packetCount,
+		RxUcastPackets: packetCount * 40 / 100,
+		RxMcastPackets: packetCount * 30 / 100,
+		RxBcastPackets: packetCount * 30 / 100,
+		RxErrorPackets: 0,
+		TxBytes:        packetCount * 64,
+		TxPackets:      packetCount,
+		TxUcastPackets: packetCount * 40 / 100,
+		TxMcastPackets: packetCount * 30 / 100,
+		TxBcastPackets: packetCount * 30 / 100,
+		TxErrorPackets: 0,
+		RxCrcErrors:    0,
+		BipErrors:      0,
+		Timestamp:      uint32(time.Now().Unix()),
+	}
+
+	return portStats, packetCount
+}
+
+// InterfaceIDToPortNo converts InterfaceID to voltha PortID
+// Refer openolt adapter code(master) voltha-openolt-adapter/adaptercore/olt_platform.go: IntfIDToPortNo()
+func InterfaceIDToPortNo(intfID uint32, intfType string) uint32 {
+	// Converts interface-id to port-numbers that can be understood by the VOLTHA
+	if intfType == "nni" {
+		// nni at voltha starts with 1,048,576
+		// nni = 1,048,576 + InterfaceID
+		return 0x1<<20 + intfID
+	} else if intfType == "pon" {
+		// pon = 536,870,912 + InterfaceID
+		return (0x2 << 28) + intfID
+	}
+	return 0
+}