VOL-1451 Initial checkin of openonu build

Produced docker container capable of building and running
openonu/brcm_openonci_onu.  Copied over current onu code
and resolved all imports by copying into the local source tree.

Change-Id: Ib9785d37afc65b7d32ecf74aee2456352626e2b6
diff --git a/python/extensions/eoam/EOAM_Layers.py b/python/extensions/eoam/EOAM_Layers.py
new file mode 100755
index 0000000..4554bdb
--- /dev/null
+++ b/python/extensions/eoam/EOAM_Layers.py
@@ -0,0 +1,152 @@
+#!/usr/bin/env python
+# Copyright 2017-present Open Networking Foundation
+#
+# 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.
+#--------------------------------------------------------------------------#
+# Copyright (C) 2015 - 2016 by Tibit Communications, Inc.                  #
+# All rights reserved.                                                     #
+#                                                                          #
+#    _______ ____  _ ______                                                #
+#   /_  __(_) __ )(_)_  __/                                                #
+#    / / / / __  / / / /                                                   #
+#   / / / / /_/ / / / /                                                    #
+#  /_/ /_/_____/_/ /_/                                                     #
+#                                                                          #
+#--------------------------------------------------------------------------#
+
+import sys
+import inspect
+
+# SCAPY-specific imports
+from scapy.packet import Packet, bind_layers
+from scapy.fields import StrField, PacketField, X3BytesField
+from scapy.layers.l2 import Ether
+
+from EOAM_TLV import *
+
+# Layer 2 definitions
+EOAM_MULTICAST_ADDRESS = '01:80:c2:00:00:02'   # Well-known OAM Multicast address
+UNUSED_SOURCE_ADDRESS  = '12:34:56:78:9a:bc'   # for OAM frames sent over the CLI
+IGMP_MULTICAST_ADDRESS = '01:00:5e:00:00:01'   # IGMP Multicast address
+OAM_ETHERTYPE          = 0xA8C8                # Ethertype value used to identify a 1904.2 message
+
+VENDOR_SPECIFIC_OPCODE = 0xFE
+CABLELABS_OUI          = 0x001000              # CableLabs OUI (used for DPoE OAM messages)
+TIBIT_OUI              = 0x2AEA15              # Tibit OUI
+ITU_OUI                = 0x0019A7              # ITU OUI - used to encapsulate OMCI messages
+
+# Message Types which can be received from the Tibit OLT, Tibit ONU, DPoE ONU, or GPON ONT
+# ove the 1904.2 transport
+RxedOamMsgTypeEnum = {
+    "Unknown"            : 0x00,
+    "Info"               : 0x01,    # Info PDU
+    "Event Notification" : 0x02,    # Event Notification - Tibit or DPoE Event
+    "DPoE Get Response"  : 0x03,    # DPoE Get Response
+    "DPoE Set Response"  : 0x04,    # DPoE Set Rewponse
+    "DPoE File Transfer" : 0x05,    # Specifically - a File Transfer ACK
+    "OMCI Message"       : 0x06,    # Contains an embedded OMCI message
+    }
+
+RxedOamMsgTypes = {v: k for k, v in RxedOamMsgTypeEnum.iteritems()}
+
+
+###############################################################
+# SCAPY Layer definitions used to parse 1904.2 messages
+###############################################################
+
+# OAM fields after the L2 addressing/VLAN tags
+# when the Ethertype is set to 0xA8C8
+class EOAMPayload(Packet):
+    name = 'EOAM Payload'
+    fields_desc = [
+        ByteEnumField("subtype", 0x03, SlowProtocolsSubtypeEnum),
+        XShortField("flags", 0x0050),
+        XByteField("opcode", VENDOR_SPECIFIC_OPCODE),
+    ]
+
+bind_layers(Ether, EOAMPayload, type=OAM_ETHERTYPE)
+
+
+# 1904.1 OAM Event
+class EOAM_EventMsg(Packet):
+    name = 'EOAM Event'
+    fields_desc = [
+        XShortField("sequence", 0x0001),
+        XByteField("tlv_type", VENDOR_SPECIFIC_OPCODE),
+        XByteField("length", 0x01),
+        X3BytesField("oui", CABLELABS_OUI),
+        PacketField("body", None, Packet),
+    ]
+
+bind_layers(EOAMPayload, EOAM_EventMsg, opcode=0x01)
+
+# Vendor-specific OAM message
+# indicated by an Opcode field set to 0xFE
+class EOAM_VendSpecificMsg(Packet):
+    name = "Vendor-Specific OAM"
+    fields_desc  = [
+        X3BytesField("oui", CABLELABS_OUI),
+    ]
+
+bind_layers(EOAMPayload, EOAM_VendSpecificMsg, opcode=VENDOR_SPECIFIC_OPCODE)
+
+# Tibit-specific OAM message
+# indicated by an OUI set to 0x2AEA15
+class EOAM_TibitMsg(Packet):
+    name = "Tibit OAM Message"
+    fields_desc  = [
+        ByteEnumField("dpoe_opcode", 0x01, DPoEOpcodeEnum),
+        PacketField("body", None, Packet),
+    ]
+
+bind_layers(EOAM_VendSpecificMsg, EOAM_TibitMsg, oui=TIBIT_OUI)
+
+# DPoE-specific OAM message
+# indicated by an OUI set to 0x001000
+class EOAM_DpoeMsg(Packet):
+    name = "DPoE OAM Message"
+    fields_desc  = [
+        ByteEnumField("dpoe_opcode", 0x01, DPoEOpcodeEnum),
+        PacketField("body", None, Packet),
+    ]
+
+bind_layers(EOAM_VendSpecificMsg, EOAM_DpoeMsg, oui=CABLELABS_OUI)
+
+# Embedded OMCI message
+# indicated by an OUI set to ITU OUI (0x0019A7)
+
+#class EOAM_OmciMsg(Packet):
+#    name = "OAM-encapsulated OMCI Message"
+#    fields_desc  = [
+#        XShortField("trans_id", 1),
+#        XByteField("msg_type", 0x49),
+#        XByteField("dev_id", 0x0A),
+#        XShortField("me_class", 0x0000),
+#        XShortField("me_inst", 0x0000),
+#        PacketField("body", None, Packet),
+#    ]
+
+class EOAM_OmciMsg(Packet):
+    name = "OAM-encapsulated OMCI Message"
+    fields_desc  = [
+        PacketField("body", None, Packet),
+    ]
+
+bind_layers(EOAM_VendSpecificMsg, EOAM_OmciMsg, oui=ITU_OUI)
+
+###############################################################
+# End of SCAPY Layers
+###############################################################
+
+
+