/*
 * Copyright (c) 2018 - present.  Boling Consulting Solutions (bcsw.net)
 * Copyright 2020-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.
 */
/*
 * NOTE: This file was generated, manual edits will be overwritten!
 *
 * Generated by 'goCodeGenerator.py':
 *              https://github.com/cboling/OMCI-parser/README.md
 */

package generated

import "github.com/deckarep/golang-set"

// Dot1AgMepClassID is the 16-bit ID for the OMCI
// Managed entity Dot1ag MEP
const Dot1AgMepClassID = ClassID(302) // 0x012e

var dot1agmepBME *ManagedEntityDefinition

// Dot1AgMep (Class ID: #302 / 0x012e)
//	This ME models an MEP as defined primarily in [IEEE 802.1ag] and secondarily in [ITUT Y.1731].
//	It is created and deleted by the OLT. An MEP exists at one of eight possible maintenance levels,
//	and resides at the boundary of a MD. It inherits a name, and optionally a set of associated
//	VLANs, from its associated MA.
//
//	Relationships
//		One or more MEPs may be associated with a MAC bridge port or an IEEE 802.1p mapper in the
//		absence of a MAC bridge. An MEP is also associated with zero or more VLANs and an MA.
//
//	Attributes
//		Managed Entity Id
//			This attribute uniquely identifies each instance of this ME. (R, setbycreate) (mandatory)
//			(2-bytes)
//
//		Layer 2 Entity Pointer
//			Depending on the value of the layer 2 type attribute, this pointer specifies the MAC bridge port
//			configuration data ME or the IEEE 802.1p mapper service profile ME with which this MEP is
//			associated. (R,-W, setbycreate) (mandatory) (2-bytes)
//
//		Layer 2 Type
//			This attribute specifies whether the MA is associated with a MAC bridge port (value 0) or an
//			IEEE 802.1p mapper (value 1). (R,-W, setbycreate) (mandatory) (1-byte)
//
//		Ma Pointer
//			This pointer specifies the maintenance association with which this MEP is associated. (R,-W,
//			setbycreate) (mandatory) (2-bytes)
//
//		Mep Id
//			This attribute specifies the MEP's own identity in the MA. For a given MA, the MEP ID must be
//			unique throughout the network defined by the MD. The MEP ID is defined in the range 1..8191. The
//			value 0 indicates that no MEP ID is (yet) configured. (R,-W, setbycreate) (mandatory) (2-bytes)
//
//		Mep Control
//			This attribute specifies some of the overall behavioural aspects of the MEP. It is interpreted
//			as follows.
//
//			(R,-W, setbycreate) (mandatory) (1-byte)
//
//		Primary Vlan
//			This attribute is a 12-bit VLAN ID. The value 0 indicates that the MEP inherits its primary VLAN
//			from its parent MA. CFM messages, except forwarded LTMs, are tagged with the primary VLAN ID. If
//			explicitly specified, the value of this attribute must be one of the VLANs associated with the
//			parent MA. (R,-W, setbycreate) (mandatory) (2-bytes)
//
//		Administrative State
//			This attribute locks (1) and unlocks (0) the functions performed by this ME. Administrative
//			state is further described in clause A.1.6. (R,-W, setbycreate) (mandatory) (1-byte)
//
//		Ccm And Ltm Priority
//			Ranging from 0..7, this attribute permits CCM and LTM frames to be explicitly prioritized, which
//			may be needed if flows are separated, e.g., by 802.1p priority. The priority specified in this
//			attribute is also used in linktrace reply (LTR) frames originated by this MEP. The value 0xFF
//			selects the IEEE 802.1ag default, whereby CCM and LTM frames are transmitted with the highest
//			Ethernet priority available. (R,-W, setbycreate) (mandatory) (1-byte)
//
//		Egress Identifier
//			This attribute comprises 8-bytes to be included in LTMs. They allow received LTRs to be directed
//			to the correct originator. The attribute includes the originator MAC address and a locally
//			defined identifier. If this field is 0, the ONU uses the MEP's MAC address, with 0 as the
//			locally defined identifier. (R,-W, setbycreate) (mandatory) (8-bytes)
//
//		Peer Mep Ids
//			This attribute lists the expected peer MEPs for CCMs, 2-bytes per MEP ID. [IEEE 802.1ag] allows
//			for multipoint networks, and therefore a list of peer MEPs. This attribute allows for up to 12
//			peers for a given MEP, though GPON applications are expected to need only a single peer. Missing
//			or unexpected messages trigger alarm declaration after a soak interval. Unused peer MEP slots
//			should be set to 0. (R,-W) (mandatory) (24-bytes)
//
//		Eth Ais Control
//			This attribute controls the generation of Ethernet alarm indication signal (AIS) frames when
//			they are enabled through the MEP control attribute. It is interpreted as follows:
//
//			(R,-W, setbycreate) (mandatory if ETH AIS is enabled) (1-byte)
//
//		Fault Alarm Threshold
//			This attribute specifies the lowest priority alarm that is allowed to generate a fault alarm.
//			The value 0 specifies that the ONU uses its internal default. It is defined as follows.
//
//			1	All defects generate alarms after suitable soaking, including AIS and RDICCM.
//
//			2	Alarm generated only by one of: MACstatus, RemoteCCM, ErrorCCM, XconCCM. This value is
//			recommended as the default in [IEEE 802.1ag].
//
//			3	Alarm generated only by one of: RemoteCCM, ErrorCCM, XconCCM.
//
//			4	Alarm generated only by one of: ErrorCCM, XconCCM.
//
//			5	Alarm generated only by: XconCCM.
//
//			6	No alarms are to be reported. This setting may be useful during configuration of services
//			across the network when spurious alarms could otherwise be generated.
//
//			(R,-W, setbycreate) (optional) (1-byte)
//
//		Alarm Declaration Soak Time
//			This attribute defines the defect soak time that must elapse before the MEP declares an alarm.
//			It is expressed in 10-ms units with a range of 250 to 1000, i.e., 2.5-s to 10-s. The default is
//			recommended to be 2.5 seconds. (R,-W) (mandatory) (2-bytes)
//
//		Alarm Clear Soak Time
//			This attribute defines the defect-free soak time that must elapse before the MEP clears an
//			alarm. It is expressed in intervals of 10-ms with a range of 250 to 1-000, i.e., 2.5-s to 10-s.
//			The default is recommended to be 10-s. (R,-W) (mandatory) (2-bytes)
//
type Dot1AgMep struct {
	ManagedEntityDefinition
	Attributes AttributeValueMap
}

func init() {
	dot1agmepBME = &ManagedEntityDefinition{
		Name:    "Dot1AgMep",
		ClassID: 302,
		MessageTypes: mapset.NewSetWith(
			Create,
			Delete,
			Get,
			Set,
		),
		AllowedAttributeMask: 0xfffc,
		AttributeDefinitions: AttributeDefinitionMap{
			0:  Uint16Field("ManagedEntityId", PointerAttributeType, 0x0000, 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, 0),
			1:  Uint16Field("Layer2EntityPointer", UnsignedIntegerAttributeType, 0x8000, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, 1),
			2:  ByteField("Layer2Type", UnsignedIntegerAttributeType, 0x4000, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, 2),
			3:  Uint16Field("MaPointer", UnsignedIntegerAttributeType, 0x2000, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, 3),
			4:  Uint16Field("MepId", UnsignedIntegerAttributeType, 0x1000, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, 4),
			5:  ByteField("MepControl", UnsignedIntegerAttributeType, 0x0800, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, 5),
			6:  Uint16Field("PrimaryVlan", UnsignedIntegerAttributeType, 0x0400, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, 6),
			7:  ByteField("AdministrativeState", UnsignedIntegerAttributeType, 0x0200, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, 7),
			8:  ByteField("CcmAndLtmPriority", UnsignedIntegerAttributeType, 0x0100, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, 8),
			9:  Uint64Field("EgressIdentifier", UnsignedIntegerAttributeType, 0x0080, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, 9),
			10: MultiByteField("PeerMepIds", OctetsAttributeType, 0x0040, 24, toOctets("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"), mapset.NewSetWith(Read, Write), false, false, false, 10),
			11: ByteField("EthAisControl", UnsignedIntegerAttributeType, 0x0020, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, 11),
			12: ByteField("FaultAlarmThreshold", UnsignedIntegerAttributeType, 0x0010, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, true, false, 12),
			13: Uint16Field("AlarmDeclarationSoakTime", UnsignedIntegerAttributeType, 0x0008, 0, mapset.NewSetWith(Read, Write), false, false, false, 13),
			14: Uint16Field("AlarmClearSoakTime", UnsignedIntegerAttributeType, 0x0004, 0, mapset.NewSetWith(Read, Write), false, false, false, 14),
		},
		Access:  CreatedByOlt,
		Support: UnknownSupport,
		Alarms: AlarmMap{
			0: "RDI CCM",
			1: "MAC status",
			2: "Remote CCM",
			3: "Error CCM",
			4: "Xcon CCM",
			5: "Unexpected period",
			6: "AIS",
		},
	}
}

// NewDot1AgMep (class ID 302) creates the basic
// Managed Entity definition that is used to validate an ME of this type that
// is received from or transmitted to the OMCC.
func NewDot1AgMep(params ...ParamData) (*ManagedEntity, OmciErrors) {
	return NewManagedEntity(*dot1agmepBME, params...)
}
