diff --git a/vendor/github.com/opencord/omci-lib-go/v2/generated/xdsldownstreamrfibandsprofile.go b/vendor/github.com/opencord/omci-lib-go/v2/generated/xdsldownstreamrfibandsprofile.go
new file mode 100644
index 0000000..bd31bb0
--- /dev/null
+++ b/vendor/github.com/opencord/omci-lib-go/v2/generated/xdsldownstreamrfibandsprofile.go
@@ -0,0 +1,128 @@
+/*
+ * 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"
+
+// XdslDownstreamRfiBandsProfileClassID is the 16-bit ID for the OMCI
+// Managed entity xDSL downstream RFI bands profile
+const XdslDownstreamRfiBandsProfileClassID = ClassID(111) // 0x006f
+
+var xdsldownstreamrfibandsprofileBME *ManagedEntityDefinition
+
+// XdslDownstreamRfiBandsProfile (Class ID: #111 / 0x006f)
+//	This ME contains the downstream RFI bands profile for an xDSL UNI. Instances of this ME are
+//	created and deleted by the OLT.
+//
+//	Relationships
+//		An instance of this ME may be associated with zero or more instances of the PPTP xDSL UNI part
+//		1.
+//
+//	Attributes
+//		Managed Entity Id
+//			This attribute uniquely identifies each instance of this ME. The value 0 is reserved. (R,
+//			setbycreate) (mandatory) (2-bytes)
+//
+//		Downstream Rfi Bands Table
+//			The RFIBANDS attribute is a table where each entry comprises:
+//
+//			o	an entry number field (1-byte, first entry numbered 1);
+//
+//			o	subcarrier index 1 field (2-bytes);
+//
+//			o	subcarrier index 2 field (2-bytes).
+//
+//			For [ITU-T G.992.5], this configuration attribute defines the subset of downstream PSD mask
+//			breakpoints, as specified in the downstream PSD mask, to be used to notch an RFI band. This
+//			subset consists of couples of consecutive subcarrier indices belonging to breakpoints: [ti; ti-+
+//			1], corresponding to the low level of the notch. Interpolation around these points is defined in
+//			[ITUT G.992.5].
+//
+//			For [ITU-T G.993.2], this attribute defines the bands where the PSD is to be reduced as
+//			specified in clause 7.2.1.2 of [ITUT G.993.2]. Each band is represented by start and stop
+//			subcarrier indices with a subcarrier spacing of 4.3125-kHz. Up to 16 bands may be specified.
+//			This attribute defines the RFI bands for both upstream and downstream directions.
+//
+//			Entries have the default value 0 for both subcarrier index 1 and subcarrier index-2. Setting an
+//			entry with a non-zero subcarrier index 1 and subcarrier index-2 implies insertion into the table
+//			or replacement of an existing entry. Setting an entry's subcarrier index 1 and subcarrier index
+//			2 to 0 implies deletion from the table, if present.
+//
+//			(R,-W) (mandatory for [ITU-T G.992.5], [ITU-T G.993.2]) (5 * N bytes where N is the number of
+//			RFI bands)
+//
+//		Bands Valid
+//			This Boolean attribute controls and reports the operational status of the downstream RFI bands
+//			table.
+//
+//			If this attribute is true, the downstream RFI bands table has been impressed on the DSL
+//			equipment.
+//
+//			If this attribute is false, the downstream RFI bands table has not been impressed on the DSL
+//			equipment. The default value is false.
+//
+//			This attribute can be modified by the ONU and OLT, as follows.
+//
+//			o	If the OLT changes any of the RFI bands table entries or sets bands valid false, then bands
+//			valid is false.
+//
+//			o	If bands valid is false and OLT sets bands valid true, the ONU impresses the downstream RFI
+//			bands data on to the DSL equipment.
+//
+//			(R,-W) (mandatory) (1-byte)
+//
+type XdslDownstreamRfiBandsProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdsldownstreamrfibandsprofileBME = &ManagedEntityDefinition{
+		Name:    "XdslDownstreamRfiBandsProfile",
+		ClassID: 111,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetNext,
+			Set,
+			SetTable,
+		),
+		AllowedAttributeMask: 0xc000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", PointerAttributeType, 0x0000, 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, 0),
+			1: TableField("DownstreamRfiBandsTable", TableAttributeType, 0x8000, TableInfo{nil, 5}, mapset.NewSetWith(Read, Write), false, false, false, 1),
+			2: ByteField("BandsValid", UnsignedIntegerAttributeType, 0x4000, 0, mapset.NewSetWith(Read, Write), false, false, false, 2),
+		},
+		Access:  CreatedByOlt,
+		Support: UnknownSupport,
+	}
+}
+
+// NewXdslDownstreamRfiBandsProfile (class ID 111) 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 NewXdslDownstreamRfiBandsProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(*xdsldownstreamrfibandsprofileBME, params...)
+}
