/*
 * Copyright (c) 2018 - present.  Boling Consulting Solutions (bcsw.net)
 *
 * 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"

const Vdsl2LineConfigurationExtensions3ClassId ClassID = ClassID(410)

var vdsl2lineconfigurationextensions3BME *ManagedEntityDefinition

// Vdsl2LineConfigurationExtensions3 (class ID #410)
//	This ME extends the xDSL line configuration MEs.
//
//	An instance of this ME is created and deleted by the OLT.
//
//	Relationships
//		An instance of this ME may be associated with zero or more instances of an xDSL UNI.////		The overall xDSL line configuration profile is modelled in several parts, all of which are
//		associated together through a common ME ID (the client PPTP xDSL UNI part 1 has a single
//		pointer, which refers to the entire set of line configuration parts).
//
//	Attributes
//		Managed Entity Id
//			Managed entity ID: This attribute uniquely identifies each instance of this ME. All xDSL and
//			VDSL2 line configuration profiles and extensions that pertain to a given PPTP xDSL UNI must
//			share a common ME ID. (R, setbycreate) (mandatory) (2 bytes)
//
//		Ripolicyds
//			RIPOLICYds: This attribute indicates which policy shall be applied to determine the triggers for
//			re-initialization in the downstream direction. A valid range of values is given in clause
//			7.3.1.1.12.1 of [ITU-T G.997.1]. (R, W) (optional) (1 byte)
//
//		Ripolicyus
//			RIPOLICYus: This attribute indicates which policy shall be applied to determine the triggers for
//			re-initialization in the upstream direction. A valid range of values is given in clause
//			7.3.1.1.12.2 of [ITU-T G.997.1]. (R, W) (optional) (1 byte)
//
//		Reinit_Time_Thresholdds
//			REINIT_TIME_THRESHOLDds: This attribute indicates defines the downstream threshold for re-
//			initialization based on SES, to be used by the VTU receiver when re-initialization policy 1 is
//			used in downstream. A valid range of values is given in clause 7.3.1.1.13.1 of [ITU-T G.997.1].
//			(R, W) (optional) (1 byte)
//
//		Reinit_Time_Thresholdus
//			REINIT_TIME_THRESHOLDus: This attribute indicates defines the upstream threshold for re-
//			initialization based on SES, to be used by the VTU receiver when reinitialization policy 1 is
//			used in upstream. A valid range of values is given in clause 7.3.1.1.13.2 of [ITU-T G.997.1].
//			(R, W) (optional) (1 byte)
//
//		Rxrefvnsfus
//			RXREFVNSFus: If SNRM_MODE = 4, this attribute defines the upstream receiver-referred virtual
//			noise scaling factor. The attribute value ranges from 0 (–64.0 dBm) to 255 (+63.5 dBm) – see
//			clause 7.3.1.7.5 of [ITU-T G.997.1]. (R, W) (optional) (1 byte)
//
//		Txrefvnsfds
//			TXREFVNSFds: If SNRM_MODE = 4, this attribute defines the downstream transmitter referred
//			virtual noise scaling factor. The attribute value ranges from 0 (–64.0 dBm) to 255 (+63.5 dBm)
//			– see clause 7.3.1.7.6 of [ITU-T G.997.1]. (R, W) (optional) (1 byte)
//
//		Rtx_Modeds
//			RTX_MODEds: This attribute controls the mode of operation of [ITU-T G.998.4] retransmission in
//			the downstream direction. A valid range of values is given in clause 7.3.1.11 of [ITU-T
//			G.997.1]. (R, W) (mandatory) (1 byte)
//
//		Rtx_Modeus
//			RTX_MODEus: This attribute controls the mode of operation of [ITU-T G.998.4] retransmission in
//			the upstream direction. A valid range of values is given in clause 7.3.1.11 of [ITU-T G.997.1].
//			(R, W) (mandatory) (1 byte)
//
//		Leftr_Thresh
//			LEFTR_THRESH: If retransmission is used in a given transmit direction, LEFTR_THRESH specifies
//			the threshold for declaring a near-end ''leftr'' defect. LEFTR_THRESH is equal to the integer
//			value of this attribute multiplied by 0.01. Valid values and usage are given in clause 7.3.1.12
//			of [ITU-T G.997.1]. (R, W) (mandatory) (1 byte)
//
//		Maxdelayoctet_Split Parameter Mdosplit
//			MAXDELAYOCTET-split parameter (MDOSPLIT): This attribute defines the percentage of the
//			MAXDELAYOCTET_ext if operating in [ITU-T G.998.4] or MAXDELAYOCTET in other cases allocated to
//			the downstream direction. MDOSPLIT is equal to the integer value of this attribute multiplied by
//			1%. Valid values and usage are given in clause 7.3.1.14 of [ITUT G.997.1]. (R, W) (optional)
//			(1 byte)
//
//		Attndr Method Attndr_Method
//			ATTNDR Method (ATTNDR_METHOD): This attribute specifies the method to be used for the
//			calculation of the ATTNDR in the downstream and upstream direction. Valid values are given in
//			clause 7.3.1.15.1 of [ITU-T G.997.1]. (R, W) (optional) (1 byte)
//
//		Attndr Maxdelayoctet_Split Parameter Attndr_Mdosplit
//			ATTNDR MAXDELAYOCTET-split parameter (ATTNDR_MDOSPLIT): This attribute defines the percentage of
//			the MAXDELAYOCTET_ext if operating in [ITU-T G.998.4] or MAXDELAYOCTET in other cases allocated
//			to the downstream direction to be used in the improved method for calculation of the ATTNDR. The
//			valid values are identical to the values of the line configuration parameter MDOSPLIT. See
//			clause 7.3.1.15.2 of [ITUT G.997.1]. (R, W) (optional) (1 byte)
//
type Vdsl2LineConfigurationExtensions3 struct {
	ManagedEntityDefinition
	Attributes AttributeValueMap
}

func init() {
	vdsl2lineconfigurationextensions3BME = &ManagedEntityDefinition{
		Name:    "Vdsl2LineConfigurationExtensions3",
		ClassID: 410,
		MessageTypes: mapset.NewSetWith(
			Create,
			Delete,
			Get,
			Set,
		),
		AllowedAttributeMask: 0XFFF0,
		AttributeDefinitions: AttributeDefinitionMap{
			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
			1:  ByteField("Ripolicyds", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 1),
			2:  ByteField("Ripolicyus", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 2),
			3:  ByteField("ReinitTimeThresholdds", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 3),
			4:  ByteField("ReinitTimeThresholdus", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
			5:  ByteField("Rxrefvnsfus", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 5),
			6:  ByteField("Txrefvnsfds", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 6),
			7:  ByteField("RtxModeds", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
			8:  ByteField("RtxModeus", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
			9:  ByteField("LeftrThresh", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 9),
			10: ByteField("MaxdelayoctetSplitParameterMdosplit", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 10),
			11: ByteField("AttndrMethodAttndrMethod", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
			12: ByteField("AttndrMaxdelayoctetSplitParameterAttndrMdosplit", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
		},
	}
}

// NewVdsl2LineConfigurationExtensions3 (class ID 410 creates the basic
// Managed Entity definition that is used to validate an ME of this type that
// is received from the wire, about to be sent on the wire.
func NewVdsl2LineConfigurationExtensions3(params ...ParamData) (*ManagedEntity, OmciErrors) {
	return NewManagedEntity(vdsl2lineconfigurationextensions3BME, params...)
}
