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
+###############################################################
+
+
+