diff --git a/vendor/github.com/opencord/omci-lib-go/v2/generated/multicastsubscriberconfiginfo.go b/vendor/github.com/opencord/omci-lib-go/v2/generated/multicastsubscriberconfiginfo.go
new file mode 100644
index 0000000..1932b6b
--- /dev/null
+++ b/vendor/github.com/opencord/omci-lib-go/v2/generated/multicastsubscriberconfiginfo.go
@@ -0,0 +1,204 @@
+/*
+ * 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"
+
+// MulticastSubscriberConfigInfoClassID is the 16-bit ID for the OMCI
+// Managed entity Multicast subscriber config info
+const MulticastSubscriberConfigInfoClassID = ClassID(310) // 0x0136
+
+var multicastsubscriberconfiginfoBME *ManagedEntityDefinition
+
+// MulticastSubscriberConfigInfo (Class ID: #310 / 0x0136)
+//	This ME organizes data associated with multicast management at subscriber ports of IEEE-802.1
+//	bridges, including IEEE-802.1p mappers when the provisioning model is mapper-based rather than
+//	bridge-based. Instances of this ME are created and deleted by the OLT. Because of backward
+//	compatibility considerations, a subscriber port without an associated multicast subscriber
+//	config info ME would be expected to support unrestricted multicast access; this ME may therefore
+//	be viewed as restrictive, rather than permissive.
+//
+//	Through separate attributes, this ME supports either a single multicast operations profile in
+//	its backward compatible form, or a list of multicast operations profiles instead (the list may
+//	of course contain a single entry). The OLT can determine whether the ONU supports the multiple
+//	profile capability by performing a get operation on the optional multicast service package table
+//	attribute, which exists only on ONUs that are prepared to support the feature.
+//
+//	Relationships
+//		An instance of this ME is associated with one instance of the MAC bridge port configuration data
+//		or the IEEE-802.1p mapper service profile.
+//
+//	Attributes
+//		Managed Entity Id
+//			This attribute uniquely identifies each instance of this ME. Through an identical ID, this ME is
+//			implicitly linked to an instance of the MAC bridge port configuration data or IEEE-802.1p mapper
+//			ME. (R, setbycreate) (mandatory) (2-bytes)
+//
+//		Me Type
+//			(R,-W, setbycreate) (mandatory) (1-byte)
+//
+//			This attribute indicates the type of the ME implicitly linked by the ME ID attribute.
+//
+//			0	MAC bridge port config data
+//
+//			1	IEEE-802.1p mapper service profile
+//
+//		Multicast Operations Profile Pointer
+//			This attribute points to an instance of the multicast operations profile. This attribute is
+//			ignored by the ONU if a non-empty multicast service package table attribute is present. (R,W,
+//			set-by-create) (mandatory) (2 bytes)
+//
+//		Max Simultaneous Groups
+//			This attribute specifies the maximum number of dynamic multicast groups that may be replicated
+//			to the client port at any one time. The recommended default value 0 specifies that no
+//			administrative limit is to be imposed. (R,-W, setbycreate) (optional) (2-bytes)
+//
+//		Max Multicast Bandwidth
+//			This attribute specifies the maximum imputed dynamic bandwidth, in bytes per second, that may be
+//			delivered to the client port at any one time. The recommended default value 0 specifies that no
+//			administrative limit is to be imposed. (R,-W, setbycreate) (optional) (4-bytes)
+//
+//		Bandwidth Enforcement
+//			The recommended default value of this Boolean attribute is false, and specifies that attempts to
+//			exceed the max multicast bandwidth be counted but honoured. The value true specifies that such
+//			attempts be counted and denied. The imputed bandwidth value is taken from the dynamic access
+//			control list table, both for a new join request and for pre-existing groups. (R,-W, setbycreate)
+//			(optional) (1-byte)
+//
+//		Multicast Service Package Table
+//			This attribute is a list that specifies one or more multicast service packages. When the ONU
+//			receives an IGMP/MLD join request, it searches the multicast service package table in row key
+//			order, matching the VID (UNI) field (several rows can share the same VID). For each VID (UNI)
+//			match, the multicast operations profile pointer is used to access the ME that contains the
+//			attributes associated with the service package. The search stops when all requested multicast
+//			groups have been found and dealt with.
+//
+//			Each list entry is a vector of six components as follow.
+//
+//			-	Table control (2-bytes)
+//
+//			The first 2-bytes of each entry contain a key into the table. It is the responsibility of the
+//			OLT to assign and track table keys and content. Since row keys are created by the OLT, they may
+//			be densely or sparsely packed.
+//
+//			The two MSBs of this field determine the meaning of a set operation. These bits are returned as
+//			00 during get next operations.
+//
+//			Bits 14..11 are reserved. Bits 10..1 are the row key itself.
+//
+//			-	VID (UNI). The value in this field is compared with the VID of upstream IGMP/MLD messages, and
+//			is used to decide whether to honour a join request. (2 bytes)
+//
+//			Values:
+//
+//			0..4095 - Matched against the VID of the IGMP/MLD message. 0 indicates a priority-tagged
+//			message, whose P bits are ignored.
+//
+//			4096 - Matches untagged IGMP/MLD messages only.
+//
+//			4097 - Matches tagged messages only, but ignores the value of the VID.
+//
+//			0xFFFF - Unspecified.
+//
+//			The VID (UNI) comparison occurs prior to any action defined by the upstream IGMP tag control
+//			attribute in an associated multicast operations profile (or alternatively, before any
+//			modification by a possible (extended) VLAN tagging operation configuration data ME).
+//
+//			-	Max simultaneous groups. This field specifies the maximum number of dynamic multicast groups
+//			that may be replicated to the client port at any one time, for the multicast service package
+//			that is associated with this row. The value 0 specifies that no administrative limit is to be
+//			imposed. (2-bytes)
+//
+//			-	Max multicast bandwidth. This field specifies the maximum imputed dynamic bandwidth, in bytes
+//			per second, that may be delivered to the client port at any one time, for the multicast service
+//			package that is associated with this row. The value 0 specifies that no administrative limit is
+//			to be imposed. (4-bytes)
+//
+//			NOTE - The port is also constrained by the global max simultaneous groups and max multicast
+//			bandwidth attributes of the multicast subscriber config info ME.
+//
+//			-	Multicast operations profile pointer. This field contains the ME ID of the multicast
+//			operations profile ME associated with this service package. (2 bytes)
+//
+//			-	Reserved (8 bytes)
+//
+//			(R,-W) (optional) (20N bytes, where N is the number of entries in the table)
+//
+//		Allowed Preview Groups Table
+//			Each list entry begins with a table control field:
+//
+//			This attribute is a list that specifies the preview groups that are currently allowed for the
+//			UNI associated with this ME. It is intended to support paid viewing of a multicast group that
+//			may or may not have been previewed.
+//
+//			When an IGMP/MLD join request is received, the order of search precedence is as follows.
+//
+//			1. Multicast operations profile(s), fully authorized groups
+//
+//			2. This attribute, the allowed preview groups table
+//
+//			3. Multicast operations profile(s), preview-only groups
+//
+//			If the first match is a group listed in this attribute, the ONU forwards the group to the UNI
+//			until the group is removed from this list or until the subscriber leaves the group.
+//
+type MulticastSubscriberConfigInfo struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	multicastsubscriberconfiginfoBME = &ManagedEntityDefinition{
+		Name:    "MulticastSubscriberConfigInfo",
+		ClassID: 310,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetNext,
+			Set,
+			SetTable,
+		),
+		AllowedAttributeMask: 0xfe00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", PointerAttributeType, 0x0000, 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, 0),
+			1: ByteField("MeType", EnumerationAttributeType, 0x8000, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, 1),
+			2: Uint16Field("MulticastOperationsProfilePointer", PointerAttributeType, 0x4000, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, 2),
+			3: Uint16Field("MaxSimultaneousGroups", UnsignedIntegerAttributeType, 0x2000, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, true, false, 3),
+			4: Uint32Field("MaxMulticastBandwidth", UnsignedIntegerAttributeType, 0x1000, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, true, false, 4),
+			5: ByteField("BandwidthEnforcement", EnumerationAttributeType, 0x0800, 0, mapset.NewSetWith(Read, SetByCreate, Write), false, true, false, 5),
+			6: TableField("MulticastServicePackageTable", TableAttributeType, 0x0400, TableInfo{nil, 20}, mapset.NewSetWith(Read, Write), false, true, false, 6),
+			7: TableField("AllowedPreviewGroupsTable", TableAttributeType, 0x0200, TableInfo{nil, 22}, mapset.NewSetWith(Read, Write), false, false, false, 7),
+		},
+		Access:  CreatedByOlt,
+		Support: UnknownSupport,
+	}
+}
+
+// NewMulticastSubscriberConfigInfo (class ID 310) 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 NewMulticastSubscriberConfigInfo(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(*multicastsubscriberconfiginfoBME, params...)
+}
