WIP - Suggesting changes (take2)

    This is not yet completed, still working on things. Eventually the plan
    is to provide the following changes

    - restructure repo to be more aligned with https://github.com/golang-standards/project-layout
    - add k8s probes
    - modifications (golang range loops, etc) to follow some golang
    practices

Change-Id: I6922cbc00b5ef17ceab183aba00a7fc59ab46480
diff --git a/internal/pkg/openflow/packet.go b/internal/pkg/openflow/packet.go
new file mode 100644
index 0000000..dc26594
--- /dev/null
+++ b/internal/pkg/openflow/packet.go
@@ -0,0 +1,62 @@
+/*
+   Copyright 2020 the original author or authors.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
+
+package openflow
+
+import (
+	"encoding/json"
+	ofp "github.com/donNewtonAlpha/goloxi/of13"
+	"github.com/opencord/voltha-lib-go/v2/pkg/log"
+	"github.com/opencord/voltha-protos/v2/go/voltha"
+)
+
+func (ofc *OFClient) handlePacketOut(packetOut *ofp.PacketOut) {
+	if logger.V(log.DebugLevel) {
+		js, _ := json.Marshal(packetOut)
+		logger.Debugw("handlePacketOut called",
+			log.Fields{
+				"device-id":  ofc.DeviceID,
+				"packet-out": js})
+	}
+
+	// Collection actions
+	var actions []*voltha.OfpAction
+	for _, action := range packetOut.GetActions() {
+		actions = append(actions, extractAction(action))
+	}
+
+	// Build packet out
+	pbPacketOut := voltha.PacketOut{
+		Id: ofc.DeviceID,
+		PacketOut: &voltha.OfpPacketOut{
+			BufferId: packetOut.GetBufferId(),
+			InPort:   uint32(packetOut.GetInPort()),
+			Actions:  actions,
+			Data:     packetOut.GetData(),
+		},
+	}
+
+	if logger.V(log.DebugLevel) {
+		js, _ := json.Marshal(pbPacketOut)
+		logger.Debugw("handlePacketOut sending",
+			log.Fields{
+				"device-id":  ofc.DeviceID,
+				"packet-out": js})
+	}
+
+	// Queue it
+	ofc.PacketOutChannel <- &pbPacketOut
+}