This commit cleans up the python directory to ensure the adapters
and the cli runs properly.

Change-Id: Ic68a3ecd1f16a5af44296e3c020c808b185f4c18
diff --git a/rw_core/core/device_manager.go b/rw_core/core/device_manager.go
index b2ab478..c4ac343 100644
--- a/rw_core/core/device_manager.go
+++ b/rw_core/core/device_manager.go
@@ -362,6 +362,34 @@
 	return nil
 }
 
+func (dMgr *DeviceManager) packetOut(deviceId string, outPort uint32, packet *ofp.OfpPacketOut) error {
+	log.Debugw("packetOut", log.Fields{"deviceId": deviceId, "outPort": outPort})
+	if agent := dMgr.getDeviceAgent(deviceId); agent != nil {
+		return agent.packetOut(outPort, packet)
+	}
+	return status.Errorf(codes.NotFound, "%s", deviceId)
+}
+
+func (dMgr *DeviceManager) PacketIn(deviceId string, port uint32, packet []byte) error {
+	log.Debugw("PacketIn", log.Fields{"deviceId": deviceId, "port": port})
+	// Get the logical device Id based on the deviceId
+	var device *voltha.Device
+	var err error
+	if device, err = dMgr.GetDevice(deviceId); err != nil {
+		log.Errorw("device-not-found", log.Fields{"deviceId": deviceId})
+		return err
+	}
+	if !device.Root{
+		log.Errorw("device-not-root", log.Fields{"deviceId": deviceId})
+		return status.Errorf(codes.FailedPrecondition, "%s", deviceId)
+	}
+
+	if err := dMgr.logicalDeviceMgr.packetIn(device.ParentId, port, packet); err != nil {
+		return err
+	}
+	return nil
+}
+
 func (dMgr *DeviceManager) createLogicalDevice(cDevice *voltha.Device) error {
 	log.Info("createLogicalDevice")
 	var logicalId *string