Committing vendored dependencies and generated protos

Change-Id: I349c149b513d9de7d9f60bde2c954a939da2fc54
diff --git a/vendor/github.com/cboling/omci/.gitignore b/vendor/github.com/cboling/omci/.gitignore
new file mode 100644
index 0000000..b5c16bf
--- /dev/null
+++ b/vendor/github.com/cboling/omci/.gitignore
@@ -0,0 +1,92 @@
+# Binaries for programs and plugins
+*.exe
+*.exe~
+*.dll
+*.so
+*.dylib
+
+# Test binary, build with `go test -c`
+*.test
+
+# Output of the go coverage tool, specifically when used with LiteIDE
+*.out
+
+# PyCharm / Goland
+.idea/
+### Go template
+# Binaries for programs and plugins
+*.exe
+*.exe~
+*.dll
+*.so
+*.dylib
+
+# Test binary, build with `go test -c`
+*.test
+
+# Output of the go coverage tool, specifically when used with LiteIDE
+*.out
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/usage.statistics.xml
+.idea/**/dictionaries
+.idea/**/shelf
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# Gradle and Maven with auto-import
+# When using Gradle or Maven with auto-import, you should exclude module files,
+# since they will be recreated, and may cause churn.  Uncomment if using
+# auto-import.
+# .idea/modules.xml
+# .idea/*.iml
+# .idea/modules
+
+# CMake
+cmake-build-*/
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
+
+/coverage.html
+/vendor/
diff --git a/vendor/github.com/cboling/omci/Gopkg.lock b/vendor/github.com/cboling/omci/Gopkg.lock
new file mode 100644
index 0000000..0f63cbc
--- /dev/null
+++ b/vendor/github.com/cboling/omci/Gopkg.lock
@@ -0,0 +1,69 @@
+# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
+
+
+[[projects]]
+  branch = "master"
+  digest = "1:5671867a7f78a839bce5a3a8d4513bdbec7f799ab9c919a2fb50fe6c167cd61e"
+  name = "github.com/aead/cmac"
+  packages = [
+    ".",
+    "aes",
+  ]
+  pruneopts = "UT"
+  revision = "7af84192f0b1d66a78841ebd3e0d2f5212a4a928"
+
+[[projects]]
+  digest = "1:ffe9824d294da03b391f44e1ae8281281b4afc1bdaa9588c9097785e3af10cec"
+  name = "github.com/davecgh/go-spew"
+  packages = ["spew"]
+  pruneopts = "UT"
+  revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73"
+  version = "v1.1.1"
+
+[[projects]]
+  digest = "1:e47d51dab652d26c3fba6f8cba403f922d02757a82abdc77e90df7948daf296e"
+  name = "github.com/deckarep/golang-set"
+  packages = ["."]
+  pruneopts = "UT"
+  revision = "cbaa98ba5575e67703b32b4b19f73c91f3c4159e"
+  version = "v1.7.1"
+
+[[projects]]
+  branch = "master"
+  digest = "1:e1bdf8bd56b2c7775b12f17219b2e6b1d45a39cf20e42926f9069b1755639918"
+  name = "github.com/google/gopacket"
+  packages = [
+    ".",
+    "layers",
+  ]
+  pruneopts = "UT"
+  revision = "66eed7fc5258c34b3ead3c5964ea538025686a68"
+
+[[projects]]
+  digest = "1:0028cb19b2e4c3112225cd871870f2d9cf49b9b4276531f03438a88e94be86fe"
+  name = "github.com/pmezard/go-difflib"
+  packages = ["difflib"]
+  pruneopts = "UT"
+  revision = "792786c7400a136282c1664665ae0a8db921c6c2"
+  version = "v1.0.0"
+
+[[projects]]
+  digest = "1:972c2427413d41a1e06ca4897e8528e5a1622894050e2f527b38ddf0f343f759"
+  name = "github.com/stretchr/testify"
+  packages = ["assert"]
+  pruneopts = "UT"
+  revision = "ffdc059bfe9ce6a4e144ba849dbedead332c6053"
+  version = "v1.3.0"
+
+[solve-meta]
+  analyzer-name = "dep"
+  analyzer-version = 1
+  input-imports = [
+    "github.com/aead/cmac/aes",
+    "github.com/deckarep/golang-set",
+    "github.com/google/gopacket",
+    "github.com/google/gopacket/layers",
+    "github.com/stretchr/testify/assert",
+  ]
+  solver-name = "gps-cdcl"
+  solver-version = 1
diff --git a/vendor/github.com/cboling/omci/Gopkg.toml b/vendor/github.com/cboling/omci/Gopkg.toml
new file mode 100644
index 0000000..3a8d1da
--- /dev/null
+++ b/vendor/github.com/cboling/omci/Gopkg.toml
@@ -0,0 +1,17 @@
+# Gopkg.toml example
+#
+# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
+# for detailed Gopkg.toml documentation.
+
+
+[[constraint]]
+  name = "github.com/google/gopacket"
+  branch = "master"
+
+[[constraint]]
+  name = "github.com/stretchr/testify"
+  version = "1.3.0"
+
+[prune]
+  go-tests = true
+  unused-packages = true
diff --git a/vendor/github.com/cboling/omci/LICENSE b/vendor/github.com/cboling/omci/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/vendor/github.com/cboling/omci/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   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.
diff --git a/vendor/github.com/cboling/omci/README.md b/vendor/github.com/cboling/omci/README.md
new file mode 100644
index 0000000..4a29ef4
--- /dev/null
+++ b/vendor/github.com/cboling/omci/README.md
@@ -0,0 +1,98 @@
+# OMCI
+
+OMCI gopacket library supports the encoding and decoding of ITU G.988 OMCI
+messages. It is currently a work in progress.
+
+## Message Types supported and under unit test
+The following OMCI message types currently have been coded and are covered
+satisfactory by unit tests.
+
+ - CreateRequest
+ - CreateResponse
+ - DeleteRequest
+ - DeleteResponse
+ - SetRequest
+ - GetRequest
+ - GetAllAlarmsRequest
+ - GetAllAlarmsResponse
+ - GetAllAlarmsNextRequest
+ - MibUploadRequest
+ - MibUploadResponse
+ - MibUploadNextRequest
+ - MibResetRequest
+ - MibResetResponse
+ - SynchronizeTimeRequest
+
+## Message Types supported but lacking full unit test
+The following OMCI message types currently have been coded and are partially covered
+by unit tests, but work still remains for sufficient/better unit test coverage.
+
+ - SetResponse
+ - GetResponse
+ - GetAllAlarmsNextResponse
+ - MibUploadNextResponse
+ - SynchronizeTimeResponse
+ - AttributeValueChange
+ - RebootRequest
+ - RebootResponse
+ - StartSoftwareDownloadRequest
+ - GetNextRequest
+ - GetNextResponse
+
+## Message Types supported but lacking any unit test
+The following OMCI message types currently have been coded but do not
+have any unit test coverage.
+
+ - StartSoftwareDownloadResponse
+ - DownloadSectionRequest
+ - DownloadSectionResponse
+ - EndSoftwareDownloadRequest
+ - EndSoftwareDownloadResponse
+ - ActivateSoftwareRequest
+ - ActivateSoftwareResponse
+ - CommitSoftwareRequest
+ - CommitSoftwareResponse
+ - GetCurrentDataRequest
+ - GetCurrentDataResponse
+ - AlarmNotification
+ 
+## Message Types not yet supported
+
+The following OMCI message types currently have not been coded.
+
+ - TestResult
+ - TestRequest
+ - TestResponse
+ - SetTableRequest
+ - SetTableResponse
+
+## Current user-test coverage
+
+
+## Other outstanding items
+
+Besides OMCI Message decode/serialization, and associated unit tests, the following items
+would be needed or useful in a first official release of this library. Some changes are
+to be done in the generated OMCI ME code as well.
+
+ - Specific examples of how to use this library (expand upon DecodeEncode.go examples)
+   Include unknown ME examples and how to catch various common or expected errors
+ - Add Alarm Table Support (generated MEs also)
+ - Add AVC flag for appropriate attributes
+ - For serialization, check early for message size exceeded
+ - Check proper gopacket use of Payload/Contents properties and make sure we
+   follow guidelines (if there are any)
+ - For 'mebase.go' string output, look up ME name and output as needed
+ - Look through 'error' messages and see if there are a few very common ones that
+   could be moved to a custom class to allow for better user interception/decode of
+   these errors.
+ 
+The following would be 'nice' to have but are not necessary for initial code release
+ - Extended message support
+ - MIC Encode/Decode support
+
+## Create requests
+Currently the OMCI parser does not decode the default Set-By-Create attribute values
+from the ITU document. So for attributes that do not have a default of zero, you must
+specify the defaults if you use the 'meframe.go' routine to create a CreateRequest
+for a specific Managed Entity Instance.
diff --git a/vendor/github.com/cboling/omci/coverage.cmd b/vendor/github.com/cboling/omci/coverage.cmd
new file mode 100644
index 0000000..3344ed8
--- /dev/null
+++ b/vendor/github.com/cboling/omci/coverage.cmd
@@ -0,0 +1,24 @@
+@echo off
+rem    Coverage report for windows builds
+rem
+rem First general build
+echo Building the source
+go build
+if ERRORLEVEL 1 GOTO buildFaild
+
+echo Starting unit test coverage
+go test . examples/... generated/... -coverprofile=cp.out
+
+rem Output HTML coverage report (to coverage.html)
+echo Creating HTML coverage report (coverage.html)
+go tool cover -html=cp.out
+
+rem Now show in default browser
+echo Launching browser with results
+rem start coverage.html
+
+@echo Done
+exit /B 0
+
+:buildFailed
+@echo Build failed
\ No newline at end of file
diff --git a/vendor/github.com/cboling/omci/coverage.sh b/vendor/github.com/cboling/omci/coverage.sh
new file mode 100644
index 0000000..26bfe5c
--- /dev/null
+++ b/vendor/github.com/cboling/omci/coverage.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+#
+#  Coverage report for windows builds
+#
+#First general build
+echo "Building the source"
+go build || exit $?
+
+echo "Starting unit test coverage"
+go test . examples/... generated/... -coverprofile=cp.out
+
+# Output HTML coverage report (to coverage.html)
+echo "Creating HTML coverage report (coverage.html)"
+go tool cover -html=cp.out
+
+# Now show in default browser
+echo "Launching browser with results"
diff --git a/vendor/github.com/cboling/omci/generated/aal5performancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/aal5performancemonitoringhistorydata.go
new file mode 100644
index 0000000..d2dd2e2
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/aal5performancemonitoringhistorydata.go
@@ -0,0 +1,110 @@
+/*
+ * 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 Aal5PerformanceMonitoringHistoryDataClassId ClassID = ClassID(18)
+
+var aal5performancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// Aal5PerformanceMonitoringHistoryData (class ID #18)
+//	This ME collects PM data as a result of performing segmentation and reassembly (SAR) and
+//	convergence sublayer (CS) level protocol monitoring. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of an IW VCC TP that represents AAL5
+//		functions.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 IW VCC TP. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Sum Of Invalid Cs Field Errors
+//			Sum of invalid CS field errors: This attribute counts the sum of invalid CS field errors. For
+//			AAL type 5, this attribute is a single count of the number of CS PDUs discarded due to one of
+//			the following error conditions: invalid common part indicator (CPI), oversized received SDU, or
+//			length violation. (R) (mandatory) (4 bytes)
+//
+//		Crc Violations
+//			CRC violations: This attribute counts CRC violations detected on incoming SAR PDUs. (R)
+//			(mandatory) (4 bytes)
+//
+//		Reassembly Timer Expirations
+//			Reassembly timer expirations: This attribute counts reassembly timer expirations. (R) (mandatory
+//			if reassembly timer is implemented) (4 bytes)
+//
+//		Buffer Overflows
+//			Buffer overflows: This attribute counts the number of times where there was not enough buffer
+//			space for a reassembled packet. (R) (mandatory) (4 bytes)
+//
+//		Encap Protocol Errors
+//			Encap protocol errors: This attribute counts the number of times that [IETF RFC 2684]
+//			encapsulation protocol detected a bad header. (R) (mandatory) (4 bytes)
+//
+type Aal5PerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	aal5performancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "Aal5PerformanceMonitoringHistoryData",
+		ClassID: 18,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFE00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("SumOfInvalidCsFieldErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("CrcViolations", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("ReassemblyTimerExpirations", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint32Field("BufferOverflows", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint32Field("EncapProtocolErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+		},
+	}
+}
+
+// NewAal5PerformanceMonitoringHistoryData (class ID 18 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 NewAal5PerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(aal5performancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/aal5profile.go b/vendor/github.com/cboling/omci/generated/aal5profile.go
new file mode 100644
index 0000000..af7db41
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/aal5profile.go
@@ -0,0 +1,82 @@
+/*
+ * 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 Aal5ProfileClassId ClassID = ClassID(16)
+
+var aal5profileBME *ManagedEntityDefinition
+
+// Aal5Profile (class ID #16)
+//	This ME organizes data that describe the AAL type 5 processing functions of the ONU. It is used
+//	with the IW VCC TP ME.
+//
+//	This ME is created and deleted by the OLT.
+//
+//	Relationships
+//		An instance of this ME may be associated with zero or more instances of the IW VCC TP.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Max Cpcs Pdu Size
+//			Max CPCS PDU size: This attribute specifies the maximum CPCS PDU size to be transmitted over the
+//			connection in both upstream and downstream directions. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Aal Mode
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Sscs Type
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+type Aal5Profile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	aal5profileBME = &ManagedEntityDefinition{
+		Name:    "Aal5Profile",
+		ClassID: 16,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XE000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("MaxCpcsPduSize", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: ByteField("AalMode", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: ByteField("SscsType", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+		},
+	}
+}
+
+// NewAal5Profile (class ID 16 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 NewAal5Profile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(aal5profileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/ani-g.go b/vendor/github.com/cboling/omci/generated/ani-g.go
new file mode 100644
index 0000000..f86fc9b
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/ani-g.go
@@ -0,0 +1,157 @@
+/*
+ * 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 AniGClassId ClassID = ClassID(263)
+
+var anigBME *ManagedEntityDefinition
+
+// AniG (class ID #263)
+//	This ME organizes data associated with each access network interface supported by a GPON ONU.
+//	The ONU automatically creates one instance of this ME for each PON physical port.
+//
+//	Relationships
+//		An instance of this ME is associated with each instance of a physical PON interface.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. Its value
+//			indicates the physical position of the PON interface. The first byte is the slot ID, defined in
+//			clause 9.1.5. The second byte is the port ID. (R) (mandatory) (2 bytes)
+//
+//		Sr Indication
+//			SR indication: This Boolean attribute indicates the ONU's capability to report queue status for
+//			DBA. The value true means that status reporting is available for all TCONTs that are associated
+//			with the ANI. (R) (mandatory) (1 byte)
+//
+//		Total TCont Number
+//			Total TCONT number: This attribute indicates the total number of T-CONTs that can be supported
+//			on this ANI. (R) (mandatory) (2 bytes)
+//
+//		Gem Block Length
+//			In all other ITU-T PON systems, the unit for queue occupancy reporting is fixed in at 4 bytes by
+//			the respective TC layer specification.
+//
+//		Piggyback Dba Reporting
+//			(R) (mandatory) (1 byte)
+//
+//		Deprecated
+//			Deprecated:	This attribute should be set to 0 by the ONU and ignored by the OLT. (R) (mandatory)
+//			(1 byte)
+//
+//		Signal Fail Threshold
+//			Signal fail (SF) threshold: This attribute specifies the downstream bit error rate (BER)
+//			threshold to detect the SF alarm. When this value is y, the BER threshold is 10–y. Valid values
+//			are 3..8. Upon ME instantiation, the ONU sets this attribute to 5. (R, W) (mandatory) (1 byte)
+//
+//		Signal Degrade Sd Threshold
+//			Signal degrade (SD) threshold: This attribute specifies the downstream BER threshold to detect
+//			the SD alarm. When this value is x, the BER threshold for SD is 10–x. Valid values are 4..10.
+//			The SD threshold must be lower than the SF threshold; i.e., x > y. Upon ME instantiation, the
+//			ONU sets this attribute to 9. (R, W) (mandatory) (1 byte)
+//
+//		Arc
+//			ARC:	See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Arc Interval
+//			ARC interval: See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Optical Signal Level
+//			Optical signal level: This attribute reports the current measurement of the total downstream
+//			optical signal level. Its value is a 2s complement integer referred to 1  mW (i.e., 1 dBm), with
+//			0.002 dB granularity. (R) (optional) (2 bytes)
+//
+//		Lower Optical Threshold
+//			Lower optical threshold: This attribute specifies the optical level the ONU uses to declare the
+//			downstream low received optical power alarm. Valid values are –127 dBm (coded as 254) to 0 dBm
+//			(coded as 0) in 0.5 dB increments. The default value 0xFF selects the ONU's internal policy.
+//			(R, W) (optional) (1 byte)
+//
+//		Upper Optical Threshold
+//			Upper optical threshold: This attribute specifies the optical level the ONU uses to declare the
+//			downstream high received optical power alarm. Valid values are –127 dBm (coded as 254) to 0 dBm
+//			(coded as 0) in 0.5 dB increments. The default value 0xFF selects the ONU's internal policy.
+//			(R, W) (optional) (1 byte)
+//
+//		Onu Response Time
+//			(R) (optional) (2 bytes)
+//
+//		Transmit Optical Level
+//			Transmit optical level: This attribute reports the current measurement of mean optical launch
+//			power. Its value is a 2s complement integer referred to 1 mW (i.e., 1 dBm), with 0.002 dB
+//			granularity. (R) (optional) (2 bytes)
+//
+//		Lower Transmit Power Threshold
+//			Lower transmit power threshold: This attribute specifies the minimum mean optical launch power
+//			that the ONU uses to declare the low transmit optical power alarm. Its value is a 2s complement
+//			integer referred to 1 mW (i.e., dBm), with 0.5 dB granularity. The default value –63.5 (0x81)
+//			selects the ONU's internal policy. (R, W) (optional) (1 byte)
+//
+//		Upper Transmit Power Threshold
+//			Upper transmit power threshold: This attribute specifies the maximum mean optical launch power
+//			that the ONU uses to declare the high transmit optical power alarm. Its value is a 2s complement
+//			integer referred to 1 mW (i.e., dBm), with 0.5 dB granularity. The default value –63.5 (0x81)
+//			selects the ONU's internal policy. (R, W) (optional) (1 byte)
+//
+type AniG struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	anigBME = &ManagedEntityDefinition{
+		Name:    "AniG",
+		ClassID: 263,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+			Test,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("SrIndication", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("TotalTcontNumber", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3:  Uint16Field("GemBlockLength", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4:  ByteField("PiggybackDbaReporting", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  ByteField("Deprecated", 0, mapset.NewSetWith(Read), false, false, false, true, 5),
+			6:  ByteField("SignalFailThreshold", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7:  ByteField("SignalDegradeSdThreshold", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8:  ByteField("Arc", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 8),
+			9:  ByteField("ArcInterval", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 9),
+			10: Uint16Field("OpticalSignalLevel", 0, mapset.NewSetWith(Read), false, false, true, false, 10),
+			11: ByteField("LowerOpticalThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
+			12: ByteField("UpperOpticalThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+			13: Uint16Field("OnuResponseTime", 0, mapset.NewSetWith(Read), false, false, true, false, 13),
+			14: Uint16Field("TransmitOpticalLevel", 0, mapset.NewSetWith(Read), false, false, true, false, 14),
+			15: ByteField("LowerTransmitPowerThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 15),
+			16: ByteField("UpperTransmitPowerThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 16),
+		},
+	}
+}
+
+// NewAniG (class ID 263 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 NewAniG(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(anigBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/attribute.go b/vendor/github.com/cboling/omci/generated/attribute.go
new file mode 100644
index 0000000..1246c56
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/attribute.go
@@ -0,0 +1,546 @@
+/*
+ * 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 (
+	"encoding/binary"
+	"errors"
+	"fmt"
+	"github.com/deckarep/golang-set"
+	"github.com/google/gopacket"
+	"sort"
+	"strings"
+)
+
+type AttributeDefinitionMap map[uint]*AttributeDefinition
+
+// AttributeDefinition defines a single specific Managed Entity's attributes
+type AttributeDefinition struct {
+	Name         string
+	Index        uint
+	DefValue     interface{} // Note: Not supported yet
+	Size         int
+	Access       mapset.Set // AttributeAccess...
+	Constraint   func(interface{}) *ParamError
+	Avc          bool // If true, an AVC notification can occur for the attribute
+	Tca          bool // If true, a threshold crossing alert alarm notification can occur for the attribute
+	Counter      bool // If true, this attribute is a PM counter
+	Optional     bool // If true, attribute is option, else mandatory
+	TableSupport bool // If true, attribute is a table
+	Deprecated   bool // If true, this attribute is deprecated and only 'read' operations (if-any) performed
+}
+
+func (attr *AttributeDefinition) String() string {
+	return fmt.Sprintf("AttributeDefinition: %v (%v): Size: %v, Default: %v, Access: %v",
+		attr.GetName(), attr.GetIndex(), attr.GetSize(), attr.GetDefault(), attr.GetAccess())
+}
+func (attr *AttributeDefinition) GetName() string         { return attr.Name }
+func (attr *AttributeDefinition) GetIndex() uint          { return attr.Index }
+func (attr *AttributeDefinition) GetDefault() interface{} { return attr.DefValue }
+func (attr *AttributeDefinition) GetSize() int            { return attr.Size }
+func (attr *AttributeDefinition) GetAccess() mapset.Set   { return attr.Access }
+func (attr *AttributeDefinition) GetConstraints() func(interface{}) *ParamError {
+	return attr.Constraint
+}
+func (attr *AttributeDefinition) IsTableAttribute() bool {
+	return attr.TableSupport
+}
+
+func (attr *AttributeDefinition) Decode(data []byte, df gopacket.DecodeFeedback, msgType byte) (interface{}, error) {
+	if attr.IsTableAttribute() {
+		value, err := attr.tableAttributeDecode(data, df, msgType)
+		if err != nil {
+			return nil, err
+		}
+		if attr.GetConstraints() != nil {
+			if omciErr := attr.GetConstraints()(value); omciErr != nil {
+				return nil, omciErr.GetError()
+			}
+		}
+		return value, nil
+	}
+	size := attr.GetSize()
+
+	if len(data) < size {
+		df.SetTruncated()
+		return nil, NewMessageTruncatedError("packet too small for field")
+	}
+	switch attr.GetSize() {
+	default:
+		value := make([]byte, size)
+		copy(value, data[:size])
+		if attr.GetConstraints() != nil {
+			if omciErr := attr.GetConstraints()(value); omciErr != nil {
+				return nil, omciErr.GetError()
+			}
+		}
+		return value, nil
+	case 1:
+		value := data[0]
+		if attr.GetConstraints() != nil {
+			if omciErr := attr.GetConstraints()(value); omciErr != nil {
+				return nil, omciErr.GetError()
+			}
+		}
+		return value, nil
+	case 2:
+		value := binary.BigEndian.Uint16(data[0:2])
+		if attr.GetConstraints() != nil {
+			if omciErr := attr.GetConstraints()(value); omciErr != nil {
+				return nil, omciErr.GetError()
+			}
+		}
+		return value, nil
+	case 4:
+		value := binary.BigEndian.Uint32(data[0:4])
+		if attr.GetConstraints() != nil {
+			if omciErr := attr.GetConstraints()(value); omciErr != nil {
+				return nil, omciErr.GetError()
+			}
+		}
+		return value, nil
+	case 8:
+		value := binary.BigEndian.Uint64(data[0:8])
+		if attr.GetConstraints() != nil {
+			omciErr := attr.GetConstraints()(value)
+			if omciErr != nil {
+				return nil, omciErr.GetError()
+			}
+		}
+		return value, nil
+	}
+}
+
+func (attr *AttributeDefinition) SerializeTo(value interface{}, b gopacket.SerializeBuffer,
+	msgType byte, bytesAvailable int) (int, error) {
+	if attr.IsTableAttribute() {
+		return attr.tableAttributeSerializeTo(value, b, msgType, bytesAvailable)
+	}
+	size := attr.GetSize()
+	if bytesAvailable < size {
+		return 0, NewMessageTruncatedError(fmt.Sprintf("not enough space for attribute: %v", attr.Name))
+	}
+	bytes, err := b.AppendBytes(size)
+	if err != nil {
+		return 0, err
+	}
+	switch size {
+	default:
+		copy(bytes, value.([]byte))
+	case 1:
+		switch value.(type) {
+		case int:
+			bytes[0] = byte(value.(int))
+		default:
+			bytes[0] = value.(byte)
+		}
+	case 2:
+		switch value.(type) {
+		case int:
+			binary.BigEndian.PutUint16(bytes, uint16(value.(int)))
+		default:
+			binary.BigEndian.PutUint16(bytes, value.(uint16))
+		}
+	case 4:
+		switch value.(type) {
+		case int:
+			binary.BigEndian.PutUint32(bytes, uint32(value.(int)))
+		default:
+			binary.BigEndian.PutUint32(bytes, value.(uint32))
+		}
+	case 8:
+		switch value.(type) {
+		case int:
+			binary.BigEndian.PutUint64(bytes, uint64(value.(int)))
+		default:
+			binary.BigEndian.PutUint64(bytes, value.(uint64))
+		}
+	}
+	return size, nil
+}
+
+// BufferToTableAttributes takes the reconstructed octet buffer transmitted for
+// a table attribute (over many GetNextResponses) and converts it into the desired
+// format for each table row
+func (attr *AttributeDefinition) BufferToTableAttributes(data []byte) (interface{}, error) {
+	// Source is network byte order octets. Convert to proper array of slices
+	rowSize := attr.GetSize()
+	dataSize := len(data)
+	index := 0
+
+	switch rowSize {
+	default:
+		value := make([][]byte, dataSize/rowSize)
+		for offset := 0; offset < dataSize; offset += rowSize {
+			value[index] = make([]byte, rowSize)
+			copy(value[index], data[offset:])
+			index++
+		}
+		return value, nil
+	case 1:
+		value := make([]byte, dataSize)
+		copy(value, data)
+		return value, nil
+	case 2:
+		value := make([]uint16, dataSize/2)
+		for offset := 0; offset < dataSize; offset += rowSize {
+			value[offset] = binary.BigEndian.Uint16(data[offset:])
+			index++
+		}
+		return value, nil
+	case 4:
+		value := make([]uint32, dataSize/4)
+		for offset := 0; offset < dataSize; offset += rowSize {
+			value[offset] = binary.BigEndian.Uint32(data[offset:])
+			index++
+		}
+		return value, nil
+	case 8:
+		value := make([]uint64, dataSize/8)
+		for offset := 0; offset < dataSize; offset += rowSize {
+			value[offset] = binary.BigEndian.Uint64(data[offset:])
+			index++
+		}
+		return value, nil
+	}
+}
+
+func (attr *AttributeDefinition) tableAttributeDecode(data []byte, df gopacket.DecodeFeedback, msgType byte) (interface{}, error) {
+	// Serialization of a table depends on the type of message. A
+	// Review of ITU-T G.988 shows that access on tables are
+	// either Read and/or Write, never Set-by-Create
+	switch msgType {
+	default:
+		return nil, errors.New(fmt.Sprintf("unsupported Message Type '%v' for table serialization", msgType))
+
+	case byte(Get) | AK: // Get Response
+		// Size
+		value := binary.BigEndian.Uint32(data[0:4])
+		return value, nil
+
+	case byte(GetNext) | AK: // Get Next Response
+		// Block of data (octets) that need to be reassembled before conversion
+		// to table/row-data.  If table attribute is not explicitly given a value
+		// we have to assume the entire data buffer is the value. The receiver of
+		// this frame will need to trim off any addtional information at the end
+		// of the last frame sequence since they (and the ONU) are the only ones
+		// who know how long the data really is.
+		size := attr.GetSize()
+		if size != 0 && len(data) < attr.GetSize() {
+			df.SetTruncated()
+			return nil, NewMessageTruncatedError("packet too small for field")
+		} else if size == 0 {
+			return nil, NewProcessingError("table attributes with no size are not supported: %v", attr.Name)
+		}
+		return data, nil
+
+	case byte(Set) | AR: // Set Request
+		fmt.Println("TODO")
+		return nil, errors.New("TODO")
+
+	case byte(SetTable) | AR: // Set Table Request
+		// TODO: Only baseline supported at this time
+		return nil, errors.New("attribute encode for set-table-request not yet supported")
+	}
+	return nil, errors.New("TODO")
+}
+
+func (attr *AttributeDefinition) tableAttributeSerializeTo(value interface{}, b gopacket.SerializeBuffer, msgType byte,
+	bytesAvailable int) (int, error) {
+	// Serialization of a table depends on the type of message. A
+	// Review of ITU-T G.988 shows that access on tables are
+	// either Read and/or Write, never Set-by-Create
+	switch msgType {
+	default:
+		return 0, errors.New(fmt.Sprintf("unsupported Message Type '%v' for table serialization", msgType))
+
+	case byte(Get) | AK: // Get Response
+		// Size
+		if bytesAvailable < 4 {
+			return 0, NewMessageTruncatedError(fmt.Sprintf("not enough space for attribute: %v", attr.Name))
+		}
+		if dwordSize, ok := value.(uint32); ok {
+			bytes, err := b.AppendBytes(4)
+			if err != nil {
+				return 0, err
+			}
+			binary.BigEndian.PutUint32(bytes, dwordSize)
+			return 4, nil
+		}
+		return 0, errors.New("unexpected type for table serialization")
+
+	case byte(GetNext) | AK: // Get Next Response
+		// Values are already in network by order form
+		if data, ok := value.([]byte); ok {
+			if bytesAvailable < len(data) {
+				return 0, NewMessageTruncatedError(fmt.Sprintf("not enough space for attribute: %v", attr.Name))
+			}
+			bytes, err := b.AppendBytes(len(data))
+			if err != nil {
+				return 0, err
+			}
+			copy(bytes, data)
+			return len(data), nil
+		}
+		return 0, errors.New("unexpected type for table serialization")
+
+	case byte(Set) | AR: // Set Request
+		fmt.Println("TODO")
+
+	case byte(SetTable) | AR: // Set Table Request
+		// TODO: Only baseline supported at this time
+		return 0, errors.New("attribute encode for set-table-request not yet supported")
+	}
+	size := attr.GetSize()
+	if bytesAvailable < size {
+		return 0, NewMessageTruncatedError(fmt.Sprintf("not enough space for attribute: %v", attr.Name))
+	}
+	bytes, err := b.AppendBytes(size)
+	if err != nil {
+		return 0, err
+	}
+	switch attr.GetSize() {
+	default:
+		copy(bytes, value.([]byte))
+	case 1:
+		switch value.(type) {
+		case int:
+			bytes[0] = byte(value.(int))
+		default:
+			bytes[0] = value.(byte)
+		}
+	case 2:
+		switch value.(type) {
+		case int:
+			binary.BigEndian.PutUint16(bytes, uint16(value.(int)))
+		default:
+			binary.BigEndian.PutUint16(bytes, value.(uint16))
+		}
+	case 4:
+		switch value.(type) {
+		case int:
+			binary.BigEndian.PutUint32(bytes, uint32(value.(int)))
+		default:
+			binary.BigEndian.PutUint32(bytes, value.(uint32))
+		}
+	case 8:
+		switch value.(type) {
+		case int:
+			binary.BigEndian.PutUint64(bytes, uint64(value.(int)))
+		default:
+			binary.BigEndian.PutUint64(bytes, value.(uint64))
+		}
+	}
+	return size, nil
+}
+
+// GetAttributeDefinitionByName searches the attribute definition map for the
+// attribute with the specified name (case insensitive)
+func GetAttributeDefinitionByName(attrMap *AttributeDefinitionMap, name string) (*AttributeDefinition, OmciErrors) {
+	nameLower := strings.ToLower(name)
+	for _, attrVal := range *attrMap {
+		if nameLower == strings.ToLower(attrVal.GetName()) {
+			return attrVal, nil
+		}
+	}
+	return nil, NewAttributeFailureError(fmt.Sprintf("attribute '%s' not found", name))
+}
+
+// GetAttributeDefinitionMapKeys is a convenience functions since we may need to
+// iterate a map in key index order. Maps in Go since v1.0 the iteration order
+// of maps have been randomized.
+func GetAttributeDefinitionMapKeys(attrMap AttributeDefinitionMap) []uint {
+	var keys []uint
+	for k := range attrMap {
+		keys = append(keys, k)
+	}
+	sort.Slice(keys, func(i, j int) bool { return keys[i] < keys[j] })
+	return keys
+}
+
+// GetAttributeBitmap is a convenience functions to scan a list of attributes
+// and return the bitmask that represents them
+func GetAttributeBitmap(attrMap AttributeDefinitionMap, attributes mapset.Set) (uint16, error) {
+	var mask uint16
+	for k, def := range attrMap {
+		if attributes.Contains(def.Name) {
+			mask |= 1 << uint16(16-k)
+			attributes.Remove(def.Name)
+		}
+	}
+	if attributes.Cardinality() > 0 {
+		return 0, errors.New(fmt.Sprintf("unsupported attributes: %v", attributes))
+	}
+	return mask, nil
+}
+
+///////////////////////////////////////////////////////////////////////
+// Packet definitions for attributes of various types/sizes
+
+func ByteField(name string, defVal uint8, access mapset.Set, avc bool,
+	counter bool, optional bool, deprecated bool, index uint) *AttributeDefinition {
+	return &AttributeDefinition{
+		Name:         name,
+		Index:        index,
+		DefValue:     defVal,
+		Size:         1,
+		Access:       access,
+		Avc:          avc,
+		Counter:      counter,
+		TableSupport: false,
+		Optional:     optional,
+		Deprecated:   deprecated,
+	}
+}
+
+func Uint16Field(name string, defVal uint16, access mapset.Set, avc bool,
+	counter bool, optional bool, deprecated bool, index uint) *AttributeDefinition {
+	return &AttributeDefinition{
+		Name:         name,
+		Index:        index,
+		DefValue:     defVal,
+		Size:         2,
+		Access:       access,
+		Avc:          avc,
+		Counter:      counter,
+		TableSupport: false,
+		Optional:     optional,
+		Deprecated:   deprecated,
+	}
+}
+
+func Uint32Field(name string, defVal uint32, access mapset.Set, avc bool,
+	counter bool, optional bool, deprecated bool, index uint) *AttributeDefinition {
+	return &AttributeDefinition{
+		Name:         name,
+		Index:        index,
+		DefValue:     defVal,
+		Size:         4,
+		Access:       access,
+		Avc:          avc,
+		Counter:      counter,
+		TableSupport: false,
+		Optional:     optional,
+		Deprecated:   deprecated,
+	}
+}
+
+func Uint64Field(name string, defVal uint64, access mapset.Set, avc bool,
+	counter bool, optional bool, deprecated bool, index uint) *AttributeDefinition {
+	return &AttributeDefinition{
+		Name:         name,
+		Index:        index,
+		DefValue:     defVal,
+		Size:         8,
+		Access:       access,
+		Avc:          avc,
+		Counter:      counter,
+		TableSupport: false,
+		Optional:     optional,
+		Deprecated:   deprecated,
+	}
+}
+
+func MultiByteField(name string, size uint, defVal []byte, access mapset.Set, avc bool,
+	counter bool, optional bool, deprecated bool, index uint) *AttributeDefinition {
+	return &AttributeDefinition{
+		Name:         name,
+		Index:        index,
+		DefValue:     defVal,
+		Size:         int(size),
+		Access:       access,
+		Avc:          avc,
+		Counter:      counter,
+		TableSupport: false,
+		Optional:     optional,
+		Deprecated:   deprecated,
+	}
+}
+
+// Notes on various OMCI ME Table attribute fields.  This comment will eventually be
+// removed once a good table solution is implemented.  These are not all the MEs with
+// table attributes, but probably ones I care about to support initially.
+//
+//   ME                     Notes
+//  --------------------------------------------------------------------------------------------
+//	Port-mapping package -> Combined Port table -> N * 25 sized rows (port (1) + ME(2) * 12)
+//  ONU Remote Debug     -> Reply table (N bytes)
+//  ONU3-G               -> Status snapshot recordtable M x N bytes
+//  MCAST Gem interworkTP-> IPv4 multicast adress table (12*n) (two 2 byte fields, two 4 byte fields)
+//                          IPv6 multicast adress table (24*n) (various sub-fields)
+//  L2 mcast gem TP      -> MCAST MAC addr filtering table (11 * n) (various sub-fields)
+//  MAC Bridge Port Filt -> MAC Filter table (8 * n) (3 fields, some are bits)      *** BITS ***
+//  MAC Bridge Port data -> Bridge Table (8*M) (vaius fields, some are bits)        *** BITS ***
+//  VLAN tagging filter  -> Rx Vlan tag op table (16 * n) Lots of bit fields        *** BITS ***
+//  MCAST operations profile
+//  MCAST Subscriber config info
+//  MCAST subscriber monitor
+//  OMCI                -> Two tables (N bytes and 2*N bytes)
+//  General pupose buffer   -> N bytes
+//  Enhanced security control (17 * N bytes), (16 * P Bytes) , (16 * Q bytes), and more...
+//
+// An early example of info to track
+//
+type TableInfo struct {
+	Value interface{}
+	Size  int
+}
+
+func (t *TableInfo) String() string {
+	return fmt.Sprintf("TableInfo: Size: %d, Value(s): %v", t.Size, t.Value)
+}
+
+// Now the field
+func TableField(name string, tableInfo TableInfo, access mapset.Set,
+	avc bool, optional bool, deprecated bool, index uint) *AttributeDefinition {
+	return &AttributeDefinition{
+		Name:         name,
+		Index:        index,
+		DefValue:     tableInfo.Value,
+		Size:         tableInfo.Size, //Number of elements
+		Access:       access,
+		Avc:          avc,
+		Counter:      false,
+		TableSupport: true,
+		Optional:     optional,
+		Deprecated:   deprecated,
+	}
+}
+
+func UnknownField(name string, defVal uint64, access mapset.Set, avc bool,
+	counter bool, optional bool, deprecated bool, index uint) *AttributeDefinition {
+	return &AttributeDefinition{
+		Name:         name,
+		Index:        index,
+		DefValue:     defVal,
+		Size:         99999999,
+		Access:       access,
+		Avc:          avc,
+		Counter:      counter,
+		TableSupport: false,
+		Optional:     optional,
+		Deprecated:   deprecated,
+	}
+}
+
+///////////////////////////////////////////////////////////////////////
+// Attribute Name to Value    (Interfaced defined in generated subdirectory)
+
+type AttributeValueMap map[string]interface{}
diff --git a/vendor/github.com/cboling/omci/generated/attributeme.go b/vendor/github.com/cboling/omci/generated/attributeme.go
new file mode 100644
index 0000000..e405e66
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/attributeme.go
@@ -0,0 +1,116 @@
+/*
+ * 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 AttributeMeClassId ClassID = ClassID(289)
+
+var attributemeBME *ManagedEntityDefinition
+
+// AttributeMe (class ID #289)
+//	This ME describes a particular attribute type that is supported by the ONU. This ME is not
+//	included in an MIB upload.
+//
+//	Relationships
+//		One or more attribute entities are related to each ME entity. More than one ME entity can refer
+//		to a given attribute entity.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. This number is
+//			the same as the one that appears in the attributes table in the ME. Only one instance of each
+//			unique attribute need be created. The ONU can assign attribute numbering as it pleases, out of
+//			the pool of 64K IDs; however, it is suggested that the numbering follow a rational scheme to aid
+//			human readability. (R) (mandatory) (2 bytes)
+//
+//		Name
+//			Name:	This attribute contains a 25 byte mnemonic tag for the attribute. Strings shorter than
+//			25 bytes are padded with null characters. (R) (mandatory) (25 bytes)
+//
+//		Size
+//			Size:	This attribute contains the size of the attribute, in bytes. The value 0 indicates that
+//			the attribute can have a variable/unknown size. (R) (mandatory) (2 bytes)
+//
+//		Access
+//			(R) (mandatory) (1 byte)
+//
+//		Format
+//			(R) (mandatory) (1 byte)
+//
+//		Lower Limit
+//			Lower limit:	This attribute provides the lowest value for the attribute. Valid for numeric types
+//			(pointer, signed integer, unsigned integer) only. For attributes smaller than 4 bytes, the
+//			desired numeric value is expressed in 4 byte representation (for example, the 2s complement
+//			1 byte integer 0xFE is expressed as 0xFFFF FFFE; the unsigned 1 byte integer 0xFE is expressed
+//			as 0x0000 00FE). (R) (mandatory) (4 bytes)
+//
+//		Upper Limit
+//			Upper limit:	This attribute provides the highest value for the attribute. It has the same
+//			validity and format as the lower limit attribute. (R) (mandatory) (4 bytes)
+//
+//		Bit Field
+//			Bit field:	This attribute is a mask of the supported bits in a bit field attribute, valid for
+//			bit field type only. A 1 in any position signifies that its code point is supported, while 0
+//			indicates that it is not supported. For bit fields smaller than 4 bytes, the attribute is
+//			aligned at the least significant end of the mask. (R) (mandatory) (4 bytes)
+//
+//		Code Points Table
+//			Code points table: This attribute lists the code points supported by an enumerated attribute.
+//			(R) (mandatory) (2 * Q bytes, where Q is the number of entries in the table.)
+//
+//		Support
+//			(R) (mandatory) (1 byte)
+//
+type AttributeMe struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	attributemeBME = &ManagedEntityDefinition{
+		Name:    "AttributeMe",
+		ClassID: 289,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			GetNext,
+		),
+		AllowedAttributeMask: 0XFF80,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: MultiByteField("Name", 25, nil, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("Size", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3: ByteField("Access", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: ByteField("Format", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("LowerLimit", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint32Field("UpperLimit", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint32Field("BitField", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8: TableField("CodePointsTable", TableInfo{0, 2}, mapset.NewSetWith(Read), false, false, false, 8),
+			9: ByteField("Support", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+		},
+	}
+}
+
+// NewAttributeMe (class ID 289 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 NewAttributeMe(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(attributemeBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/authenticationsecuritymethod.go b/vendor/github.com/cboling/omci/generated/authenticationsecuritymethod.go
new file mode 100644
index 0000000..58b64dd
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/authenticationsecuritymethod.go
@@ -0,0 +1,96 @@
+/*
+ * 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 AuthenticationSecurityMethodClassId ClassID = ClassID(148)
+
+var authenticationsecuritymethodBME *ManagedEntityDefinition
+
+// AuthenticationSecurityMethod (class ID #148)
+//	The authentication security method defines the user ID and password configuration to establish a
+//	session between a client and a server. This object may be used in the role of the client or
+//	server. An instance of this ME is created by the OLT if authenticated communication is
+//	necessary.
+//
+//	Relationships
+//		One instance of this management entity may be associated with a network address ME. This ME may
+//		also be cited by other MEs that require authentication parameter management.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The value 0xFFFF
+//			is reserved. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Validation Scheme
+//			(R, W) (mandatory) (1 byte)
+//
+//		Username 1
+//			Username 1:	This string attribute is the user name. If the string is shorter than 25 bytes, it
+//			must be null terminated (Note). (R, W) (mandatory) (25 bytes)
+//
+//		Password
+//			Password:	This string attribute is the password. If the string is shorter than 25 bytes, it must
+//			be null terminated. (R, W) (mandatory) (25 bytes)
+//
+//		Realm
+//			Realm:	This string attribute specifies the realm used in digest authentication. If the string is
+//			shorter than 25 bytes, it must be null terminated. (R, W) (mandatory) (25 bytes)
+//
+//		Username 2
+//			NOTE – The total username is the concatenation of the username 1 and username 2 attributes if
+//			and only if: a) username 1 comprises 25 non-null characters; b) username 2 is supported by the
+//			ONU; and c) username 2 contains a leading non-null character string. Otherwise, the total
+//			username is simply the value of the username 1 attribute.
+//
+type AuthenticationSecurityMethod struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	authenticationsecuritymethodBME = &ManagedEntityDefinition{
+		Name:    "AuthenticationSecurityMethod",
+		ClassID: 148,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("ValidationScheme", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2: MultiByteField("Username1", 25, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3: MultiByteField("Password", 25, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4: MultiByteField("Realm", 25, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5: MultiByteField("Username2", 25, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 5),
+		},
+	}
+}
+
+// NewAuthenticationSecurityMethod (class ID 148 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 NewAuthenticationSecurityMethod(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(authenticationsecuritymethodBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/bbftr-069managementserver.go b/vendor/github.com/cboling/omci/generated/bbftr-069managementserver.go
new file mode 100644
index 0000000..c3108af
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/bbftr-069managementserver.go
@@ -0,0 +1,92 @@
+/*
+ * 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 BbfTr069ManagementServerClassId ClassID = ClassID(340)
+
+var bbftr069managementserverBME *ManagedEntityDefinition
+
+// BbfTr069ManagementServer (class ID #340)
+//	If functions within the ONU are managed by [BBF TR-069], this ME allows OMCI configuration of
+//	the autoconfiguration server (ACS) URL and related authentication information for an ACS
+//	connection initiated by the ONU. [BBF TR-069] supports other means to discover its ACS, so not
+//	all BBF TR069-compatible ONUs necessarily support this ME. Furthermore, even if the ONU does
+//	support this ME, some operators may choose not to use it.
+//
+//	An ONU that supports OMCI configuration of ACS information automatically creates instances of
+//	this ME.
+//
+//	Relationships
+//		An instance of the BBF TR-069 management server ME exists for each instance of a BBF TR-069
+//		management domain within the ONU.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 a VEIP that links to the BBF TR-069
+//			management domain. (R) (mandatory) (2 bytes)
+//
+//		Administrative State
+//			Administrative state: This attribute locks (1) and unlocks (0) the functions performed by this
+//			ME. When the administrative state is locked, the functions of this ME are disabled. BBF TR-069
+//			connectivity to an ACS may be possible through means that do not depend on this ME. The default
+//			value of this attribute is locked. (R,W) (mandatory) (1 byte)
+//
+//		Acs Network Address
+//			ACS network address: This attribute points to an instance of a network address ME that contains
+//			URL and authentication information associated with the ACS URL. (R, W) (mandatory) (2 bytes)
+//
+//		Associated Tag
+//			Associated tag: This attribute is a TCI value for BBF TR-069 management traffic passing through
+//			the VEIP. A TCI, comprising user priority, CFI and VID, is represented by 2 bytes. The value
+//			0xFFFF specifies that BBF TR-069 management traffic passes through the VEIP with neither a VLAN
+//			nor a priority tag. (R, W) (mandatory) (2 bytes)
+//
+type BbfTr069ManagementServer struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	bbftr069managementserverBME = &ManagedEntityDefinition{
+		Name:    "BbfTr069ManagementServer",
+		ClassID: 340,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XE000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2: Uint16Field("AcsNetworkAddress", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3: Uint16Field("AssociatedTag", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+		},
+	}
+}
+
+// NewBbfTr069ManagementServer (class ID 340 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 NewBbfTr069ManagementServer(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(bbftr069managementserverBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/callcontrolperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/callcontrolperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..42527d2
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/callcontrolperformancemonitoringhistorydata.go
@@ -0,0 +1,109 @@
+/*
+ * 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 CallControlPerformanceMonitoringHistoryDataClassId ClassID = ClassID(140)
+
+var callcontrolperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// CallControlPerformanceMonitoringHistoryData (class ID #140)
+//	This ME collects PM data related to the call control channel. Instances of this ME are created
+//	and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the PPTP POTS UNI ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP POTS UNI. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Call Setup Failures
+//			Call setup failures: This attribute counts call set-up failures. (R) (mandatory) (4 bytes)
+//
+//		Call Setup Timer
+//			Call setup timer: This attribute is a high water-mark that records the longest duration of a
+//			single call set-up detected during this interval. Time is measured in milliseconds from the time
+//			an initial set-up was requested by the subscriber until the time at which a response was
+//			provided to the subscriber in the form of busy tone, audible ring tone, etc. (R) (mandatory)
+//			(4 bytes)
+//
+//		Call Terminate Failures
+//			Call terminate failures: This attribute counts the number of calls that were terminated with
+//			cause. (R) (mandatory) (4 bytes)
+//
+//		Analog Port Releases
+//			Analog port releases: This attribute counts the number of analogue port releases without
+//			dialling detected (abandoned calls). (R) (mandatory) (4 bytes)
+//
+//		Analog Port Off_Hook Timer
+//			Analog port off-hook timer: This attribute is a high water-mark that records the longest period
+//			of a single off-hook detected on the analogue port. Time is measured in milliseconds. (R)
+//			(mandatory) (4 bytes)
+//
+type CallControlPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	callcontrolperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "CallControlPerformanceMonitoringHistoryData",
+		ClassID: 140,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFE00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("CallSetupFailures", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("CallSetupTimer", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("CallTerminateFailures", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint32Field("AnalogPortReleases", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint32Field("AnalogPortOffHookTimer", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+		},
+	}
+}
+
+// NewCallControlPerformanceMonitoringHistoryData (class ID 140 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 NewCallControlPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(callcontrolperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/cardholder.go b/vendor/github.com/cboling/omci/generated/cardholder.go
new file mode 100644
index 0000000..0a3059b
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/cardholder.go
@@ -0,0 +1,153 @@
+/*
+ * 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 CardholderClassId ClassID = ClassID(5)
+
+var cardholderBME *ManagedEntityDefinition
+
+// Cardholder (class ID #5)
+//	The cardholder represents the fixed equipment slot configuration of the ONU. Each cardholder can
+//	contain 0 or 1 circuit packs; the circuit pack models equipment information that can change over
+//	the lifetime of the ONU, e.g., through replacement.
+//
+//	One instance of this ME exists for each physical slot in an ONU that has pluggable circuit
+//	packs. One or more instances of this ME may also exist in an integrated ONU, to represent
+//	virtual slots. Instances of this ME are created automatically by the ONU, and the status
+//	attributes are populated according to data within the ONU itself.
+//
+//	Slot 0 is intended to be used only in an integrated ONU. If an integrated ONU is modelled with a
+//	universal slot 0, it is recommended that it does not contain additional (non-zero) virtual
+//	slots. A cardholder for virtual slot 0 is recommended.
+//
+//	There is potential for conflict in the semantics of the expected plug-in unit type, the expected
+//	port count and the expected equipment ID, both when the slot is not populated and when a new
+//	circuit pack is inserted. The expected plug-in unit type and the plug-in type mismatch alarm are
+//	mandatory, although plug-and-play/unknown (circuit pack type 255) may be used as a way to
+//	minimize their significance. It is recommended that an ONU deny the provisioning of inconsistent
+//	combinations of expected equipment attributes.
+//
+//	When a circuit pack is plugged into a cardholder or when a cardholder is pre-provisioned to
+//	expect a circuit pack of a given type, it may trigger the ONU to instantiate a number of MEs and
+//	update the values of others, depending on the circuit pack type. The ONU may also delete a
+//	variety of other MEs when a circuit pack is reprovisioned to not expect a circuit pack or to
+//	expect a circuit pack of a different type. These actions are described in the definitions of the
+//	various MEs.
+//
+//	Expected equipment ID and expected port count are alternate ways to trigger the same
+//	preprovisioning effects. These tools may be useful if an ONU is prepared to accept more than one
+//	circuit pack of a given type but with different port counts, or if a circuit pack is a hybrid
+//	that matches none of the types in Table 9.1.5-1, but whose identification (e.g., part number) is
+//	known.
+//
+//	Relationships
+//		An ONU may contain zero or more instances of the cardholder, each of which may contain an
+//		instance of the circuit pack ME. The slot ID, real or virtual, is a fundamental identification
+//		mechanism for MEs that bear some relationship to a physical location.
+//
+//	Attributes
+//		Managed Entity Id
+//			NOTE 1 – Some xDSL MEs use the two MSBs of the slot number for other purposes. An ONU that
+//			supports these services may have slot limitations or restrictions.
+//
+//		Actual Plug In Unit Type
+//			Actual plugin unit type: This attribute is equal to the type of the circuit pack in the
+//			cardholder, or 0 if the cardholder is empty. When the cardholder is populated, this attribute is
+//			the same as the type attribute of the corresponding circuit pack ME. Circuit pack types are
+//			defined in Table 9.1.5-1. (R) (mandatory) (1 byte)
+//
+//		Expected Plug_In Unit Type
+//			Expected plug-in unit type: This attribute provisions the type of circuit pack for the slot. For
+//			type coding, see Table 9.1.5-1. The value 0 means that the cardholder is not provisioned to
+//			contain a circuit pack. The value 255 means that the cardholder is configured for plug-and-play.
+//			Upon ME instantiation, the ONU sets this attribute to 0. For integrated interfaces, this
+//			attribute may be used to represent the type of interface. (R, W) (mandatory) (1 byte)
+//
+//		Expected Port Count
+//			Expected port count: This attribute permits the OLT to specify the number of ports it expects in
+//			a circuit pack. Prior to provisioning by the OLT, the ONU initializes this attribute to 0.
+//			(R, W) (optional) (1 byte)
+//
+//		Expected Equipment Id
+//			Expected equipment ID: This attribute provisions the specific type of expected circuit pack.
+//			This attribute applies only to ONUs that do not have integrated interfaces. In some
+//			environments, this may contain the expected CLEI code. Upon ME instantiation, the ONU sets this
+//			attribute to all spaces. (R, W) (optional) (20 bytes)
+//
+//		Actual Equipment Id
+//			Actual equipment ID: This attribute identifies the specific type of circuit pack, once it is
+//			installed. This attribute applies only to ONUs that do not have integrated interfaces. In some
+//			environments, this may include the CLEI code. When the slot is empty or the equipment ID is not
+//			known, this attribute should be set to all spaces. (R) (optional) (20 bytes)
+//
+//		Protection Profile Pointer
+//			Protection profile pointer: This attribute specifies an equipment protection profile that may be
+//			associated with the cardholder. Its value is the least significant byte of the ME ID of the
+//			equipment protection profile with which it is associated, or 0 if equipment protection is not
+//			used. (R) (optional) (1 byte)
+//
+//		Invoke Protection Switch
+//			When circuit packs that support a PON interface (IF) function are switched, the response should
+//			be returned on the same PON that received the command. However, the OLT should also be prepared
+//			to accept a response on the redundant PON. (R, W) (optional) (1 byte)
+//
+//		Alarm _ Reporting Control
+//			Alarm-reporting control (ARC): See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Arc Interval
+//			ARC interval: See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+type Cardholder struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	cardholderBME = &ManagedEntityDefinition{
+		Name:    "Cardholder",
+		ClassID: 5,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF80,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: ByteField("ActualPlugInUnitType", 0, mapset.NewSetWith(Read), true, false, false, false, 1),
+			2: ByteField("ExpectedPlugInUnitType", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3: ByteField("ExpectedPortCount", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 3),
+			4: MultiByteField("ExpectedEquipmentId", 20, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+			5: MultiByteField("ActualEquipmentId", 20, nil, mapset.NewSetWith(Read), true, false, true, false, 5),
+			6: ByteField("ProtectionProfilePointer", 0, mapset.NewSetWith(Read), false, false, true, false, 6),
+			7: ByteField("InvokeProtectionSwitch", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 7),
+			8: ByteField("AlarmReportingControl", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 8),
+			9: ByteField("ArcInterval", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 9),
+		},
+	}
+}
+
+// NewCardholder (class ID 5 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 NewCardholder(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(cardholderBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/cesserviceprofile.go b/vendor/github.com/cboling/omci/generated/cesserviceprofile.go
new file mode 100644
index 0000000..50251f8
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/cesserviceprofile.go
@@ -0,0 +1,80 @@
+/*
+ * 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 CesServiceProfileClassId ClassID = ClassID(21)
+
+var cesserviceprofileBME *ManagedEntityDefinition
+
+// CesServiceProfile (class ID #21)
+//	NOTE – In [ITU-T G.984.4], this ME is called a CES service profile-G.
+//
+//	An instance of this ME organizes data that describe the CES service functions of the ONU.
+//	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 a GEM IW TP.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Ces Buffered Cdv Tolerance
+//			CES buffered CDV tolerance: This attribute represents the duration of user data that must be
+//			buffered by the CES IW entity to offset packet delay variation. It is expressed in 10 µs
+//			increments. 75 (750 μs) is suggested as a default value. (R, W, setbycreate) (mandatory)
+//			(2 bytes)
+//
+//		Channel Associated Signalling Cas
+//			(R, W, setbycreate) (optional) (1 byte)
+//
+type CesServiceProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	cesserviceprofileBME = &ManagedEntityDefinition{
+		Name:    "CesServiceProfile",
+		ClassID: 21,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XC000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("CesBufferedCdvTolerance", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: ByteField("ChannelAssociatedSignallingCas", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 2),
+		},
+	}
+}
+
+// NewCesServiceProfile (class ID 21 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 NewCesServiceProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(cesserviceprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/circuitpack.go b/vendor/github.com/cboling/omci/generated/circuitpack.go
new file mode 100644
index 0000000..e9b5b0b
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/circuitpack.go
@@ -0,0 +1,184 @@
+/*
+ * 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 CircuitPackClassId ClassID = ClassID(6)
+
+var circuitpackBME *ManagedEntityDefinition
+
+// CircuitPack (class ID #6)
+//	This ME models a real or virtual circuit pack that is equipped in a real or virtual ONU slot.
+//	For ONUs with integrated interfaces, this ME may be used to distinguish available types of
+//	interfaces (the port-mapping package is another way).
+//
+//	For ONUs with integrated interfaces, the ONU automatically creates an instance of this ME for
+//	each instance of the virtual cardholder ME. The ONU also creates an instance of this ME when the
+//	OLT provisions the cardholder to expect a circuit pack, i.e., when the OLT sets the expected
+//	plug-in unit type or equipment ID of the cardholder to a circuit pack type, as defined in Table
+//	9.1.5-1. The ONU also creates an instance of this ME when a circuit pack is installed in a
+//	cardholder whose expected plug-in unit type is 255 = plugandplay, and whose equipment ID is not
+//	provisioned. Finally, when the cardholder is provisioned for plug-and-play, an instance of this
+//	ME can be created at the request of the OLT.
+//
+//	The ONU deletes an instance of this ME when the OLT de-provisions the circuit pack (i.e., when
+//	the OLT sets the expected plug-in unit type or equipment ID of the cardholder to 0 = no LIM).
+//	The ONU also deletes an instance of this ME on request of the OLT if the expected plug-in unit
+//	type attribute of the corresponding cardholder is equal to 255, plug-and-play, and the expected
+//	equipment ID is blank (a string of all spaces). ONUs with integrated interfaces do not delete
+//	circuit pack instances.
+//
+//	NOTE – Creation and deletion by the OLT is retained for backward compatibility.
+//
+//	Relationships
+//		An instance of this ME is contained by an instance of the cardholder ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. Its value is the
+//			same as that of the cardholder ME containing this circuit pack instance. (R, setbycreate if
+//			applicable) (mandatory) (2 bytes)
+//
+//		Type
+//			Type:	This attribute identifies the circuit pack type. This attribute is a code as defined in
+//			Table 9.1.5-1. The value 255 means unknown or undefined, i.e., the inserted circuit pack is not
+//			recognized by the ONU or is not mapped to an entry in Table 9.1.5-1. In the latter case, the
+//			equipment ID attribute may contain inventory information. Upon autonomous ME instantiation, the
+//			ONU sets this attribute to 0 or to the type of the circuit pack that is physically present. (R,
+//			setbycreate if applicable) (mandatory) (1 byte)
+//
+//		Number Of Ports
+//			Number of ports: This attribute is the number of access ports on the circuit pack. If the port-
+//			mapping package is supported for this circuit pack, this attribute should be set to the total
+//			number of ports of all types. (R) (optional) (1 byte)
+//
+//		Serial Number
+//			Serial number: The serial number is expected to be unique for each circuit pack, at least within
+//			the scope of the given vendor. Note that the serial number may contain the vendor ID or version
+//			number. For integrated ONUs, this value is identical to the value of the serial number attribute
+//			of the ONU-G ME. Upon creation in the absence of a physical circuit pack, this attribute
+//			comprises all spaces. (R) (mandatory) (8 bytes)
+//
+//		Version
+//			Version:	This attribute is a string that identifies the version of the circuit pack as defined
+//			by the vendor. The value 0 indicates that version information is not available or applicable.
+//			For integrated ONUs, this value is identical to the value of the version attribute of the ONU-G
+//			ME. Upon creation in the absence of a physical circuit pack, this attribute comprises all
+//			spaces. (R) (mandatory) (14 bytes)
+//
+//		Vendor Id
+//			Vendor ID:	This attribute identifies the vendor of the circuit pack. For ONUs with integrated
+//			interfaces, this value is identical to the value of the vendor ID attribute of the ONU-G ME.
+//			Upon creation in the absence of a physical circuit pack, this attribute comprises all spaces.
+//			(R) (optional) (4 bytes)
+//
+//		Administrative State
+//			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) (mandatory) (1 byte)
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the circuit pack is capable of performing
+//			its function. Valid values are enabled (0), disabled (1) and unknown (2). Pending completion of
+//			initialization and self-test on an installed circuit pack, the ONU sets this attribute to 2. (R)
+//			(optional) (1 byte)
+//
+//		Bridged Or Ip Ind
+//			(R, W) (optional, only applicable for circuit packs with Ethernet interfaces) (1 byte)
+//
+//		Equipment Id
+//			Equipment ID: This attribute may be used to identify the vendor's specific type of circuit pack.
+//			In some environments, this attribute may include the CLEI code. Upon ME instantiation, the ONU
+//			sets this attribute to all spaces or to the equipment ID of the circuit pack that is physically
+//			present. (R) (optional) (20 bytes)
+//
+//		Card Configuration
+//			Upon autonomous instantiation, this attribute is set to 0. (R, W, setbycreate if applicable)
+//			(mandatory for configurable circuit packs) (1 byte)
+//
+//		Total T_Cont Buffer Number
+//			Total T-CONT buffer number: This attribute reports the total number of T-CONT buffers associated
+//			with the circuit pack. Upon ME instantiation, the ONU sets this attribute to 0 or to the value
+//			supported by the physical circuit pack. (R) (mandatory for circuit packs that provide a traffic
+//			scheduler function) (1 byte)
+//
+//		Total Priority Queue Number
+//			Total priority queue number: This value reports the total number of priority queues associated
+//			with the circuit pack. Upon ME instantiation, the ONU sets the attribute to 0 or to the value
+//			supported by the physical circuit pack. (R) (mandatory for circuit packs that provide a traffic
+//			scheduler function) (1 byte)
+//
+//		Total Traffic Scheduler Number
+//			Total traffic scheduler number: This value reports the total number of traffic schedulers
+//			associated with the circuit pack. The ONU supports null function, strict priority scheduling and
+//			WRR from the priority control, and guarantee of minimum rate control points of view. If the
+//			circuit pack has no traffic scheduler, this attribute should be absent or have the value 0. Upon
+//			ME instantiation, the ONU sets the attribute to 0 or to the value supported by the physical
+//			circuit pack. (R) (mandatory for circuit packs that provide a traffic scheduler function)
+//			(1 byte)
+//
+//		Power Shed Override
+//			Power shed override: This attribute allows ports to be excluded from the power shed control
+//			defined in clause 9.1.7. It is a bit mask that takes port 1 as the MSB; a bit value of 1 marks
+//			the corresponding port to override the power shed timer. For hardware that cannot shed power per
+//			port, this attribute is a slot override rather than a port override, with any non-zero port
+//			value causing the entire circuit pack to override power shedding. (R, W) (optional) (4 bytes)
+//
+type CircuitPack struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	circuitpackBME = &ManagedEntityDefinition{
+		Name:    "CircuitPack",
+		ClassID: 6,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFC,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("Type", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 1),
+			2:  ByteField("NumberOfPorts", 0, mapset.NewSetWith(Read), false, false, true, false, 2),
+			3:  Uint64Field("SerialNumber", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  MultiByteField("Version", 14, nil, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("VendorId", 0, mapset.NewSetWith(Read), false, false, true, false, 5),
+			6:  ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7:  ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 7),
+			8:  ByteField("BridgedOrIpInd", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
+			9:  MultiByteField("EquipmentId", 20, nil, mapset.NewSetWith(Read), false, false, true, false, 9),
+			10: ByteField("CardConfiguration", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 10),
+			11: ByteField("TotalTContBufferNumber", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: ByteField("TotalPriorityQueueNumber", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: ByteField("TotalTrafficSchedulerNumber", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint32Field("PowerShedOverride", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 14),
+		},
+	}
+}
+
+// NewCircuitPack (class ID 6 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 NewCircuitPack(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(circuitpackBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/classidmap.go b/vendor/github.com/cboling/omci/generated/classidmap.go
new file mode 100644
index 0000000..77e6a0c
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/classidmap.go
@@ -0,0 +1,233 @@
+/*
+ * 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 "fmt"
+
+// ManagedEntityInfo provides ManagedEntity information
+type ManagedEntityInfo struct {
+	New func(params ...ParamData) (*ManagedEntity, error)
+}
+
+// ParamData can be passed to the 'New' function to dictate how the returned
+// Managed Entity is created. You should supply either zero or one ParamData
+// structure to 'New'.
+//
+// If No ParamData is passed, the returned Managed Entity can only be used for
+// providing validation of other structures. This is commonly done in a packet
+// encoder/decoder to assist in that process.
+//
+// If One ParamData is passed, the returned Managed Entity will be initialized
+// with the given values/attributes and then validated. This is commonly done
+// when you wish to create an ME for transmission, storage or removal from a
+// persistent database, or some other similar purpose.
+//
+type ParamData struct {
+	EntityID   uint16
+	Attributes AttributeValueMap
+}
+
+// CreateME wraps a function that makes it a creator of a Managed Entity
+type CreateME func(params ...ParamData) (*ManagedEntity, OmciErrors)
+
+var classToManagedEntityMap map[ClassID]CreateME
+
+func init() {
+	// Create mapping of 16-bit managed entity class IDs to ME-type
+	classToManagedEntityMap = make(map[ClassID]CreateME, 160)
+
+	classToManagedEntityMap[2] = NewOnuData
+	classToManagedEntityMap[5] = NewCardholder
+	classToManagedEntityMap[6] = NewCircuitPack
+	classToManagedEntityMap[7] = NewSoftwareImage
+	classToManagedEntityMap[11] = NewPhysicalPathTerminationPointEthernetUni
+	classToManagedEntityMap[12] = NewPhysicalPathTerminationPointCesUni
+	classToManagedEntityMap[14] = NewInterworkingVccTerminationPoint
+	classToManagedEntityMap[16] = NewAal5Profile
+	classToManagedEntityMap[18] = NewAal5PerformanceMonitoringHistoryData
+	classToManagedEntityMap[21] = NewCesServiceProfile
+	classToManagedEntityMap[24] = NewEthernetPerformanceMonitoringHistoryData
+	classToManagedEntityMap[45] = NewMacBridgeServiceProfile
+	classToManagedEntityMap[46] = NewMacBridgeConfigurationData
+	classToManagedEntityMap[47] = NewMacBridgePortConfigurationData
+	classToManagedEntityMap[48] = NewMacBridgePortDesignationData
+	classToManagedEntityMap[49] = NewMacBridgePortFilterTableData
+	classToManagedEntityMap[50] = NewMacBridgePortBridgeTableData
+	classToManagedEntityMap[51] = NewMacBridgePerformanceMonitoringHistoryData
+	classToManagedEntityMap[52] = NewMacBridgePortPerformanceMonitoringHistoryData
+	classToManagedEntityMap[53] = NewPhysicalPathTerminationPointPotsUni
+	classToManagedEntityMap[58] = NewVoiceServiceProfile
+	classToManagedEntityMap[62] = NewVpPerformanceMonitoringHistoryData
+	classToManagedEntityMap[78] = NewVlanTaggingOperationConfigurationData
+	classToManagedEntityMap[79] = NewMacBridgePortFilterPreAssignTable
+	classToManagedEntityMap[82] = NewPhysicalPathTerminationPointVideoUni
+	classToManagedEntityMap[83] = NewPhysicalPathTerminationPointLctUni
+	classToManagedEntityMap[84] = NewVlanTaggingFilterData
+	classToManagedEntityMap[89] = NewEthernetPerformanceMonitoringHistoryData2
+	classToManagedEntityMap[90] = NewPhysicalPathTerminationPointVideoAni
+	classToManagedEntityMap[98] = NewPhysicalPathTerminationPointXdslUniPart1
+	classToManagedEntityMap[99] = NewPhysicalPathTerminationPointXdslUniPart2
+	classToManagedEntityMap[100] = NewXdslLineInventoryAndStatusDataPart1
+	classToManagedEntityMap[101] = NewXdslLineInventoryAndStatusDataPart2
+	classToManagedEntityMap[102] = NewXdslChannelDownstreamStatusData
+	classToManagedEntityMap[103] = NewXdslChannelUpstreamStatusData
+	classToManagedEntityMap[105] = NewXdslLineConfigurationProfilePart2
+	classToManagedEntityMap[106] = NewXdslLineConfigurationProfilePart3
+	classToManagedEntityMap[107] = NewXdslChannelConfigurationProfile
+	classToManagedEntityMap[108] = NewXdslSubcarrierMaskingDownstreamProfile
+	classToManagedEntityMap[109] = NewXdslSubcarrierMaskingUpstreamProfile
+	classToManagedEntityMap[112] = NewXdslXtuCPerformanceMonitoringHistoryData
+	classToManagedEntityMap[113] = NewXdslXtuRPerformanceMonitoringHistoryData
+	classToManagedEntityMap[114] = NewXdslXtuCChannelPerformanceMonitoringHistoryData
+	classToManagedEntityMap[115] = NewXdslXtuRChannelPerformanceMonitoringHistoryData
+	classToManagedEntityMap[116] = NewTcAdaptorPerformanceMonitoringHistoryDataXdsl
+	classToManagedEntityMap[130] = NewIeee8021PMapperServiceProfile
+	classToManagedEntityMap[131] = NewOltG
+	classToManagedEntityMap[133] = NewOnuPowerShedding
+	classToManagedEntityMap[134] = NewIpHostConfigData
+	classToManagedEntityMap[135] = NewIpHostPerformanceMonitoringHistoryData
+	classToManagedEntityMap[136] = NewTcpUdpConfigData
+	classToManagedEntityMap[137] = NewNetworkAddress
+	classToManagedEntityMap[138] = NewVoipConfigData
+	classToManagedEntityMap[139] = NewVoipVoiceCtp
+	classToManagedEntityMap[140] = NewCallControlPerformanceMonitoringHistoryData
+	classToManagedEntityMap[141] = NewVoipLineStatus
+	classToManagedEntityMap[142] = NewVoipMediaProfile
+	classToManagedEntityMap[143] = NewRtpProfileData
+	classToManagedEntityMap[144] = NewRtpPerformanceMonitoringHistoryData
+	classToManagedEntityMap[145] = NewNetworkDialPlanTable
+	classToManagedEntityMap[146] = NewVoipApplicationServiceProfile
+	classToManagedEntityMap[147] = NewVoipFeatureAccessCodes
+	classToManagedEntityMap[148] = NewAuthenticationSecurityMethod
+	classToManagedEntityMap[150] = NewSipAgentConfigData
+	classToManagedEntityMap[151] = NewSipAgentPerformanceMonitoringHistoryData
+	classToManagedEntityMap[152] = NewSipCallInitiationPerformanceMonitoringHistoryData
+	classToManagedEntityMap[153] = NewSipUserData
+	classToManagedEntityMap[155] = NewMgcConfigData
+	classToManagedEntityMap[156] = NewMgcPerformanceMonitoringHistoryData
+	classToManagedEntityMap[160] = NewEquipmentExtensionPackage
+	classToManagedEntityMap[162] = NewPhysicalPathTerminationPointMocaUni
+	classToManagedEntityMap[163] = NewMocaEthernetPerformanceMonitoringHistoryData
+	classToManagedEntityMap[171] = NewExtendedVlanTaggingOperationConfigurationData
+	classToManagedEntityMap[256] = NewOnuG
+	classToManagedEntityMap[257] = NewOnu2G
+	classToManagedEntityMap[262] = NewTCont
+	classToManagedEntityMap[263] = NewAniG
+	classToManagedEntityMap[264] = NewUniG
+	classToManagedEntityMap[266] = NewGemInterworkingTerminationPoint
+	classToManagedEntityMap[268] = NewGemPortNetworkCtp
+	classToManagedEntityMap[269] = NewVpNetworkCtp
+	classToManagedEntityMap[272] = NewGalEthernetProfile
+	classToManagedEntityMap[273] = NewThresholdData1
+	classToManagedEntityMap[274] = NewThresholdData2
+	classToManagedEntityMap[276] = NewGalEthernetPerformanceMonitoringHistoryData
+	classToManagedEntityMap[277] = NewPriorityQueue
+	classToManagedEntityMap[278] = NewTrafficScheduler
+	classToManagedEntityMap[280] = NewTrafficDescriptor
+	classToManagedEntityMap[281] = NewMulticastGemInterworkingTerminationPoint
+	classToManagedEntityMap[282] = NewPseudowireTerminationPoint
+	classToManagedEntityMap[283] = NewRtpPseudowireParameters
+	classToManagedEntityMap[284] = NewPseudowireMaintenanceProfile
+	classToManagedEntityMap[285] = NewPseudowirePerformanceMonitoringHistoryData
+	classToManagedEntityMap[286] = NewEthernetFlowTerminationPoint
+	classToManagedEntityMap[287] = NewOmci
+	classToManagedEntityMap[288] = NewManagedEntityMe
+	classToManagedEntityMap[289] = NewAttributeMe
+	classToManagedEntityMap[290] = NewDot1XPortExtensionPackage
+	classToManagedEntityMap[291] = NewDot1XConfigurationProfile
+	classToManagedEntityMap[292] = NewDot1XPerformanceMonitoringHistoryData
+	classToManagedEntityMap[293] = NewRadiusPerformanceMonitoringHistoryData
+	classToManagedEntityMap[296] = NewEthernetPerformanceMonitoringHistoryData3
+	classToManagedEntityMap[298] = NewDot1RateLimiter
+	classToManagedEntityMap[299] = NewDot1AgMaintenanceDomain
+	classToManagedEntityMap[300] = NewDot1AgMaintenanceAssociation
+	classToManagedEntityMap[301] = NewDot1AgDefaultMdLevel
+	classToManagedEntityMap[302] = NewDot1AgMep
+	classToManagedEntityMap[305] = NewDot1AgCfmStack
+	classToManagedEntityMap[310] = NewMulticastSubscriberConfigInfo
+	classToManagedEntityMap[311] = NewMulticastSubscriberMonitor
+	classToManagedEntityMap[313] = NewReAniG
+	classToManagedEntityMap[316] = NewReDownstreamAmplifier
+	classToManagedEntityMap[321] = NewEthernetFramePerformanceMonitoringHistoryDataDownstream
+	classToManagedEntityMap[322] = NewEthernetFramePerformanceMonitoringHistoryDataUpstream
+	classToManagedEntityMap[325] = NewXdslLineInventoryAndStatusDataPart5
+	classToManagedEntityMap[328] = NewReCommonAmplifierParameters
+	classToManagedEntityMap[329] = NewVirtualEthernetInterfacePoint
+	classToManagedEntityMap[332] = NewEnhancedSecurityControl
+	classToManagedEntityMap[333] = NewMplsPseudowireTerminationPoint
+	classToManagedEntityMap[334] = NewEthernetFrameExtendedPm
+	classToManagedEntityMap[335] = NewSnmpConfigurationData
+	classToManagedEntityMap[336] = NewOnuDynamicPowerManagementControl
+	classToManagedEntityMap[338] = NewPwAtmPerformanceMonitoringHistoryData
+	classToManagedEntityMap[339] = NewPwEthernetConfigurationData
+	classToManagedEntityMap[340] = NewBbfTr069ManagementServer
+	classToManagedEntityMap[341] = NewGemPortNetworkCtpPerformanceMonitoringHistoryData
+	classToManagedEntityMap[342] = NewTcpUdpPerformanceMonitoringHistoryData
+	classToManagedEntityMap[343] = NewEnergyConsumptionPerformanceMonitoringHistoryData
+	classToManagedEntityMap[344] = NewXgPonTcPerformanceMonitoringHistoryData
+	classToManagedEntityMap[345] = NewXgPonDownstreamManagementPerformanceMonitoringHistoryData
+	classToManagedEntityMap[346] = NewXgPonUpstreamManagementPerformanceMonitoringHistoryData
+	classToManagedEntityMap[348] = NewMacBridgePortIcmpv6ProcessPreAssignTable
+	classToManagedEntityMap[400] = NewEthernetPseudowireParameters
+	classToManagedEntityMap[408] = NewXdslXtuCPerformanceMonitoringHistoryDataPart2
+	classToManagedEntityMap[410] = NewVdsl2LineConfigurationExtensions3
+	classToManagedEntityMap[412] = NewXdslChannelConfigurationProfilePart2
+	classToManagedEntityMap[414] = NewXdslLineInventoryAndStatusDataPart8
+	classToManagedEntityMap[420] = NewEfmBondingLink
+	classToManagedEntityMap[421] = NewEfmBondingGroupPerformanceMonitoringHistoryData
+	classToManagedEntityMap[422] = NewEfmBondingGroupPerformanceMonitoringHistoryDataPart2
+	classToManagedEntityMap[423] = NewEfmBondingLinkPerformanceMonitoringHistoryData
+	classToManagedEntityMap[424] = NewEfmBondingPortPerformanceMonitoringHistoryData
+	classToManagedEntityMap[425] = NewEfmBondingPortPerformanceMonitoringHistoryDataPart2
+	classToManagedEntityMap[426] = NewEthernetFrameExtendedPm64Bit
+	classToManagedEntityMap[432] = NewFastChannelConfigurationProfile
+	classToManagedEntityMap[433] = NewFastDataPathConfigurationProfile
+	classToManagedEntityMap[434] = NewFastVectoringLineConfigurationExtensions
+	classToManagedEntityMap[436] = NewFastLineInventoryAndStatusDataPart2
+	classToManagedEntityMap[437] = NewFastXtuCPerformanceMonitoringHistoryData
+	classToManagedEntityMap[438] = NewFastXtuRPerformanceMonitoringHistoryData
+	classToManagedEntityMap[443] = NewTwdmChannelManagedEntity
+	classToManagedEntityMap[444] = NewTwdmChannelPhyLodsPerformanceMonitoringHistoryData
+	classToManagedEntityMap[445] = NewTwdmChannelXgemPerformanceMonitoringHistoryData
+	classToManagedEntityMap[446] = NewTwdmChannelPloamPerformanceMonitoringHistoryDataPart1
+	classToManagedEntityMap[447] = NewTwdmChannelPloamPerformanceMonitoringHistoryDataPart2
+	classToManagedEntityMap[448] = NewTwdmChannelPloamPerformanceMonitoringHistoryDataPart3
+	classToManagedEntityMap[449] = NewTwdmChannelTuningPerformanceMonitoringHistoryDataPart1
+	classToManagedEntityMap[450] = NewTwdmChannelTuningPerformanceMonitoringHistoryDataPart2
+	classToManagedEntityMap[451] = NewTwdmChannelTuningPerformanceMonitoringHistoryDataPart3
+	classToManagedEntityMap[452] = NewTwdmChannelOmciPerformanceMonitoringHistoryData
+}
+
+func LoadManagedEntityDefinition(classID ClassID, params ...ParamData) (*ManagedEntity, OmciErrors) {
+	newFunc, ok := classToManagedEntityMap[classID]
+	if ok {
+		return newFunc(params...)
+	}
+	return nil, NewUnknownEntityError(fmt.Sprintf("managed entity %d (%#x) definition not found",
+		uint16(classID), uint16(classID)))
+}
+
+func GetSupportedClassIDs() []ClassID {
+	supported := make([]ClassID, 0, len(classToManagedEntityMap))
+	for k := range classToManagedEntityMap {
+		supported = append(supported, k)
+	}
+	return supported
+}
diff --git a/vendor/github.com/cboling/omci/generated/dot1agcfmstack.go b/vendor/github.com/cboling/omci/generated/dot1agcfmstack.go
new file mode 100644
index 0000000..1744eea
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/dot1agcfmstack.go
@@ -0,0 +1,89 @@
+/*
+ * 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 Dot1AgCfmStackClassId ClassID = ClassID(305)
+
+var dot1agcfmstackBME *ManagedEntityDefinition
+
+// Dot1AgCfmStack (class ID #305)
+//	This ME reports the maintenance status of a bridge port at any given time. An ONU that supports
+//	[IEEE 802.1ag] functionality automatically creates an instance of the dot1ag CFM stack ME for
+//	each MAC bridge or IEEE 802.1p mapper, depending on its provisioning model.
+//
+//	The dot1ag CFM stack also lists any VLANs and bridge ports against which configuration errors
+//	are currently identified. The ONU should reject operations that create configuration errors.
+//	However, these errors can arise because of operations on other MEs that are not necessarily
+//	possible to detect during CFM configuration.
+//
+//	Relationships
+//		An ONU that supports [IEEE 802.1ag] creates one instance of this ME for each MAC bridge or IEEE
+//		802.1p mapper, depending on its provisioning model. It should not create an instance for an
+//		IEEE 802.1p mapper that is associated with a MAC bridge.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies an instance of this ME. Through an
+//			identical ID, this ME is implicitly linked to an instance of the MAC bridge service profile ME
+//			or an IEEE 802.1p mapper ME. It is expected that an ONU will implement CFM on bridges or on
+//			IEEE 802.1p mappers, but not both. For precision, the reference is disambiguated by the value of
+//			the layer 2 type pointer attribute. (R) (mandatory) (2 bytes)
+//
+//		Layer 2 Type
+//			Layer 2 type:	This attribute specifies whether the dot1ag CFM stack is associated with a MAC
+//			bridge service profile (value 0) or an IEEE 802.1p mapper (value 1). (R) (mandatory) (1 byte)
+//
+//		Mp Status Table
+//			(R) (mandatory) (18N bytes)
+//
+//		Configuration Error List Table
+//			(R) (mandatory) (5N bytes)
+//
+type Dot1AgCfmStack struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	dot1agcfmstackBME = &ManagedEntityDefinition{
+		Name:    "Dot1AgCfmStack",
+		ClassID: 305,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			GetNext,
+		),
+		AllowedAttributeMask: 0XE000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: ByteField("Layer2Type", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: TableField("MpStatusTable", TableInfo{nil, 18}, mapset.NewSetWith(Read), false, false, false, 2),
+			3: TableField("ConfigurationErrorListTable", TableInfo{nil, 5}, mapset.NewSetWith(Read), true, false, false, 3),
+		},
+	}
+}
+
+// NewDot1AgCfmStack (class ID 305 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 NewDot1AgCfmStack(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(dot1agcfmstackBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/dot1agdefaultmdlevel.go b/vendor/github.com/cboling/omci/generated/dot1agdefaultmdlevel.go
new file mode 100644
index 0000000..8668539
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/dot1agdefaultmdlevel.go
@@ -0,0 +1,107 @@
+/*
+ * 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 Dot1AgDefaultMdLevelClassId ClassID = ClassID(301)
+
+var dot1agdefaultmdlevelBME *ManagedEntityDefinition
+
+// Dot1AgDefaultMdLevel (class ID #301)
+//	The collection of the functionality called a maintenance half-function (MHF) is not explicitly
+//	modelled as a ME by either [IEEE 802.1ag] or the OMCI. The ONU automatically creates MHFs
+//	according to parameters specified in a dot1ag MD or a dot1ag MA ME; the dot1ag default MD level
+//	ME catches the corner cases not covered by other MEs, specifically VLANs not included by any
+//	defined MA.
+//
+//	The dot1ag default MD level comprises a configurable table, each entry of which specifies
+//	default MHF functionality for some set of VLANs. Once a set of VLANs is defined, operations to
+//	different table entries or to dot1ag MAs that conflict with the set membership should be denied.
+//	In addition, catch-all attributes are defined to specify MHF functionality when there is no
+//	match to either a table entry or an MA.
+//
+//	Relationships
+//		An ONU that supports [IEEE 802.1ag] automatically creates one instance of this ME for each MAC
+//		bridge or IEEE 802.1p mapper, depending on the ONU's provisioning model. It should not create an
+//		instance for an IEEE 802.1p mapper that is associated with a MAC bridge.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies an instance of this ME. Through an
+//			identical ID, this ME is implicitly linked to an instance of the MAC bridge service profile ME
+//			or an IEEE 802.1p mapper ME. It is expected that an ONU will implement CFM on bridges or on
+//			IEEE 802.1p mappers, but not both, depending on its provisioning model. For precision, the
+//			reference is disambiguated by the value of the layer 2 type pointer attribute. (R) (mandatory)
+//			(2 bytes)
+//
+//		Layer 2 Type
+//			Layer 2 type: This attribute specifies whether the dot1ag default MD level ME is associated with
+//			a MAC bridge service profile (value 0) or an IEEE 802.1p mapper (value 1). (R) (mandatory)
+//			(1 byte)
+//
+//		Catchall Level
+//			Catchall level: This attribute ranges from 0..7 and specifies the MD level of MHFs created when
+//			no specific match is found. (R, W) (mandatory) (1 byte)
+//
+//		Catchall Mhf Creation
+//			(R, W) (mandatory) (1 byte)
+//
+//		Catchall Sender Id Permission
+//			Catchall sender ID permission: This attribute determines the contents of the sender ID TLV
+//			included in CFM messages transmitted by MPs when no more specific match is found. This attribute
+//			is identical to that defined in the description of the dot1ag MD ME (i.e., excluding code point
+//			5, defer). (R, W) (mandatory) (1 byte)
+//
+//		Default Md Level Table
+//			(R, W) (mandatory) (29 bytes * N entries)
+//
+type Dot1AgDefaultMdLevel struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	dot1agdefaultmdlevelBME = &ManagedEntityDefinition{
+		Name:    "Dot1AgDefaultMdLevel",
+		ClassID: 301,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			GetNext,
+			Set,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: ByteField("Layer2Type", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: ByteField("CatchallLevel", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3: ByteField("CatchallMhfCreation", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4: ByteField("CatchallSenderIdPermission", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5: TableField("DefaultMdLevelTable", TableInfo{0, 1}, mapset.NewSetWith(Read, Write), false, false, false, 5),
+		},
+	}
+}
+
+// NewDot1AgDefaultMdLevel (class ID 301 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 NewDot1AgDefaultMdLevel(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(dot1agdefaultmdlevelBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/dot1agmaintenanceassociation.go b/vendor/github.com/cboling/omci/generated/dot1agmaintenanceassociation.go
new file mode 100644
index 0000000..3c09b07
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/dot1agmaintenanceassociation.go
@@ -0,0 +1,120 @@
+/*
+ * 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 Dot1AgMaintenanceAssociationClassId ClassID = ClassID(300)
+
+var dot1agmaintenanceassociationBME *ManagedEntityDefinition
+
+// Dot1AgMaintenanceAssociation (class ID #300)
+//	This ME models an [IEEE 802.1ag] service defined on a bridge port. An MA is a set of endpoints
+//	on opposite sides of a network, all existing at a defined maintenance level. One of the
+//	endpoints resides on the local ONU; the others are understood to be configured in a consistent
+//	way on external equipment. [ITUT Y.1731] refers to the MA as a maintenance entity group (MEG).
+//
+//	An MA is created and deleted by the OLT.
+//
+//	Relationships
+//		Any number of MAs may be associated with a given MD, or may stand on their own without an MD.
+//		One or more MAs may be associated with a MAC bridge or an IEEE 802.1p mapper. An MA exists at
+//		one of eight possible maintenance levels.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies an instance of this ME. The values 0 and
+//			0xFFFF are reserved. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Md Pointer
+//			MD pointer:	This pointer specifies the dot1ag maintenance domain with which this MA is
+//			associated. A null pointer specifies that the MA is not associated with an MD. (R, W,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Short Ma Name Format
+//			Short MA name format: This attribute specifies one of several possible formats for the short MA
+//			name attribute. Value 1, the primary VLAN ID, is recommended to be the default. (R, W,
+//			setbycreate) (mandatory) (1 byte)
+//
+//		Short Ma Name 1, Short Ma Name 2
+//			Short MA name 1, Short MA name 2: These two attributes may be regarded as an octet string whose
+//			value is the left-justified MA name. Because the MA name may or may not be a printable character
+//			string, an octet string is the appropriate representation. If the short MA name format specifies
+//			a character string, the string is null-terminated; otherwise, its length is determined by the
+//			short MA name format. Note that binary comparisons of the short MA name are made in other CFM
+//			state machines, so blanks, alphabetic case, etc., are significant. Also, note that the MD name
+//			and the MA short name must be packed (with additional bytes) into 48 byte CFM message headers.
+//			(R, W) (mandatory) (25 bytes * 2 attributes)
+//
+//		Continuity Check Message Ccm Interval
+//			Short intervals should be used judiciously, as they can interfere with the network's ability to
+//			handle subscriber traffic. The recommended value is 1 s. (R, W, setbycreate) (mandatory)
+//			(1 byte)
+//
+//		Associated Vlans
+//			Associated VLANs: This attribute is a list of up to 12 VLAN IDs with which this MA is
+//			associated. Once a set of VLANs is defined, the ONU should deny operations to other dot1ag MAs
+//			or dot1ag default MD level entries that conflict with the set membership. The all-zeros value
+//			indicates that this MA is not associated with any VLANs. Assuming that the attribute is not 0,
+//			the first entry is understood to be the primary VLAN. Except forwarded linktrace messages
+//			(LTMs), CFM messages emitted by MPs in this MA are tagged with the primary VLAN ID. (R, W)
+//			(mandatory) (2 bytes/entry * 12 entries = 24 bytes)
+//
+//		Mhf Creation
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Sender Id Permission
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+type Dot1AgMaintenanceAssociation struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	dot1agmaintenanceassociationBME = &ManagedEntityDefinition{
+		Name:    "Dot1AgMaintenanceAssociation",
+		ClassID: 300,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFE00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("MdPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: ByteField("ShortMaNameFormat", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: MultiByteField("ShortMaName1,ShortMaName2", 25, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4: ByteField("ContinuityCheckMessageCcmInterval", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5: MultiByteField("AssociatedVlans", 24, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6: ByteField("MhfCreation", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7: ByteField("SenderIdPermission", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+		},
+	}
+}
+
+// NewDot1AgMaintenanceAssociation (class ID 300 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 NewDot1AgMaintenanceAssociation(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(dot1agmaintenanceassociationBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/dot1agmaintenancedomain.go b/vendor/github.com/cboling/omci/generated/dot1agmaintenancedomain.go
new file mode 100644
index 0000000..b1ae103
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/dot1agmaintenancedomain.go
@@ -0,0 +1,102 @@
+/*
+ * 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 Dot1AgMaintenanceDomainClassId ClassID = ClassID(299)
+
+var dot1agmaintenancedomainBME *ManagedEntityDefinition
+
+// Dot1AgMaintenanceDomain (class ID #299)
+//	In [IEEE 802.1ag], a maintenance domain (MD) is a context within which configuration fault
+//	management (CFM) connectivity verification can occur. Individual services (maintenance
+//	associations, MAs) exist within an MD. An MD is created and deleted by the OLT. The MD ME is
+//	specified by [IEEE 802.1ag] in such a way that the same provisioning can be used for all
+//	associated systems in a network; the OMCI definition accordingly avoids ONU-specific information
+//	such as pointers.
+//
+//	Relationships
+//		Several MDs may be associated with a given bridge, at various MD levels, and a given MD may be
+//		associated with any number of bridges.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies an instance of this ME. The values 0 and
+//			0xFFFF are reserved. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Md Level
+//			MD level:	This attribute ranges from 0..7 and specifies the maintenance level of this MD. Higher
+//			numbers have wider geographic scope. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Md Name Format
+//			MD name format: This attribute specifies one of several possible formats for the MD name
+//			attribute. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Md Name 1 Md Name 2
+//			MD name 1, MD name 2:These two attributes may be regarded as a 50 byte octet string whose value
+//			is the left-justified maintenance domain name. The MD name may or may not be a printable
+//			character string, so an octet string is the appropriate representation. If the MD name format
+//			specifies a DNS-like name or a character string, the string is null-terminated; otherwise, its
+//			length is determined by the MD name format. If the MD has no name (MD name format = 0), this
+//			attribute is undefined. Note that binary comparisons of the MD name are made in other CFM state
+//			machines, so blanks, alphabetic case, etc., are significant. Also, note that the MD name and the
+//			MA name must be packed (with additional bytes) into 48 byte CFM message headers. (R, W)
+//			(mandatory if MD name format is not 1) (25 bytes * 2 attributes)
+//
+//		Maintenance Domain Intermediate Point Half Function Mhf Creation
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Sender Id Permission
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+type Dot1AgMaintenanceDomain struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	dot1agmaintenancedomainBME = &ManagedEntityDefinition{
+		Name:    "Dot1AgMaintenanceDomain",
+		ClassID: 299,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("MdLevel", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: ByteField("MdNameFormat", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: MultiByteField("MdName1MdName2", 25, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4: ByteField("MaintenanceDomainIntermediatePointHalfFunctionMhfCreation", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5: ByteField("SenderIdPermission", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+		},
+	}
+}
+
+// NewDot1AgMaintenanceDomain (class ID 299 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 NewDot1AgMaintenanceDomain(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(dot1agmaintenancedomainBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/dot1agmep.go b/vendor/github.com/cboling/omci/generated/dot1agmep.go
new file mode 100644
index 0000000..4b4924c
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/dot1agmep.go
@@ -0,0 +1,154 @@
+/*
+ * 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 Dot1AgMepClassId ClassID = ClassID(302)
+
+var dot1agmepBME *ManagedEntityDefinition
+
+// Dot1AgMep (class ID #302)
+//	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
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Layer 2 Entity Pointer
+//			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
+//			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
+//			MA pointer:	This pointer specifies the maintenance association with which this MEP is
+//			associated. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Mep Id
+//			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
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Primary Vlan
+//			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
+//			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
+//			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
+//			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
+//			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
+//			(R, W, setbycreate) (mandatory if ETH AIS is enabled) (1 byte)
+//
+//		Fault Alarm Threshold
+//			(R, W, setbycreate) (optional) (1 byte)
+//
+//		Alarm Declaration Soak Time
+//			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
+//			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", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  Uint16Field("Layer2EntityPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  ByteField("Layer2Type", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint16Field("MaPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4:  Uint16Field("MepId", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  ByteField("MepControl", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6:  Uint16Field("PrimaryVlan", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7:  ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8:  ByteField("CcmAndLtmPriority", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 8),
+			9:  Uint64Field("EgressIdentifier", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 9),
+			10: MultiByteField("PeerMepIds", 24, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 10),
+			11: ByteField("EthAisControl", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 11),
+			12: ByteField("FaultAlarmThreshold", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 12),
+			13: Uint16Field("AlarmDeclarationSoakTime", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 13),
+			14: Uint16Field("AlarmClearSoakTime", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 14),
+		},
+	}
+}
+
+// NewDot1AgMep (class ID 302 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 NewDot1AgMep(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(dot1agmepBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/dot1ratelimiter.go b/vendor/github.com/cboling/omci/generated/dot1ratelimiter.go
new file mode 100644
index 0000000..0ddf7de
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/dot1ratelimiter.go
@@ -0,0 +1,96 @@
+/*
+ * 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 Dot1RateLimiterClassId ClassID = ClassID(298)
+
+var dot1ratelimiterBME *ManagedEntityDefinition
+
+// Dot1RateLimiter (class ID #298)
+//	This ME allows rate limits to be defined for various types of upstream traffic that are
+//	processed by IEEE 802.1 bridges or related structures.
+//
+//	Relationships
+//		An instance of this ME may be linked to an instance of a MAC bridge service profile or an IEEE
+//		802.1p mapper.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Parent Me Pointer
+//			Parent ME pointer: This attribute points to an instance of a ME. The type of ME is determined by
+//			the TP type attribute. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Tp Type
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Upstream Unicast Flood Rate Pointer
+//			Upstream unicast flood rate pointer: This attribute points to an instance of the traffic
+//			descriptor that governs the rate of upstream unicast packets whose DA is unknown to the bridge.
+//			A null pointer specifies that no administrative limit is to be imposed. (R, W, setbycreate)
+//			(optional) (2 bytes)
+//
+//		Upstream Broadcast Rate Pointer
+//			Upstream broadcast rate pointer: This attribute points to an instance of the traffic descriptor
+//			that governs the rate of upstream broadcast packets. A null pointer specifies that no
+//			administrative limit is to be imposed. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Upstream Multicast Payload Rate Pointer
+//			Upstream multicast payload rate pointer: This attribute points to an instance of the traffic
+//			descriptor that governs the rate of upstream multicast payload packets. A null pointer specifies
+//			that no administrative limit is to be imposed. (R, W, setbycreate) (optional) (2 bytes)
+//
+type Dot1RateLimiter struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	dot1ratelimiterBME = &ManagedEntityDefinition{
+		Name:    "Dot1RateLimiter",
+		ClassID: 298,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("ParentMePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: ByteField("TpType", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint16Field("UpstreamUnicastFloodRatePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 3),
+			4: Uint16Field("UpstreamBroadcastRatePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 4),
+			5: Uint16Field("UpstreamMulticastPayloadRatePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 5),
+		},
+	}
+}
+
+// NewDot1RateLimiter (class ID 298 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 NewDot1RateLimiter(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(dot1ratelimiterBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/dot1xconfigurationprofile.go b/vendor/github.com/cboling/omci/generated/dot1xconfigurationprofile.go
new file mode 100644
index 0000000..361293a
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/dot1xconfigurationprofile.go
@@ -0,0 +1,117 @@
+/*
+ * 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 Dot1XConfigurationProfileClassId ClassID = ClassID(291)
+
+var dot1xconfigurationprofileBME *ManagedEntityDefinition
+
+// Dot1XConfigurationProfile (class ID #291)
+//	An instance of this ME represents a set of attributes that control an ONU's 802.1X operation
+//	with regard to IEEE 802 services. An instance of this ME is created by the ONU if it is capable
+//	of supporting [IEEE 802.1X] authentication of CPE.
+//
+//	Relationships
+//		One instance of this ME governs the ONU's 802.1X CPE authentication behaviour.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute provides a unique number for each instance of this ME. There
+//			is at most one instance, number 0. (R) (mandatory) (2 bytes)
+//
+//		Circuit Id Prefix
+//			Circuit ID prefix: This attribute is a pointer to a large string ME whose content appears as the
+//			prefix of the NAS port ID in radius access-request messages. The remainder of the NAS port ID
+//			field is local information (for example, slot-port, appended by the ONU itself). The default
+//			value of this attribute is the null pointer 0. (R, W) (mandatory) (2 bytes)
+//
+//		Fallback Policy
+//			Fallback policy: When set to 1 (deny), this attribute causes IEEE 802.1X conversations to fail
+//			when no external authentication server is accessible, such that no Ethernet service is provided.
+//			The default value 0 causes IEEE 802.1X conversations to succeed when no external authentication
+//			server is accessible. (R, W) (mandatory) (1 byte)
+//
+//		Auth Server 1
+//			Auth server 1: This attribute is a pointer to a large string ME that contains the URI of the
+//			first choice radius authentication server. The value 0 indicates that no radius authentication
+//			server is specified. (R, W) (mandatory) (2 bytes)
+//
+//		Shared Secret Auth1
+//			Shared secret auth1: This attribute is the shared secret for the first radius authentication
+//			server. It is a null-terminated character string. (R, W) (mandatory) (25 bytes)
+//
+//		Auth Server 2
+//			Auth server 2:	(R, W) (optional) (2 bytes)
+//
+//		Shared Secret Auth2
+//			Shared secret auth2:	(R, W) (optional) (25 bytes)
+//
+//		Auth Server 3
+//			Auth server 3:	(R, W) (optional) (2 bytes)
+//
+//		Shared Secret Auth3
+//			Shared secret auth3:	(R, W) (optional) (25 bytes)
+//
+//		Olt Proxy Address
+//			OLT proxy address: This attribute indicates the IP address of a possible proxy at the OLT for
+//			IEEE 802.1X radius messages. The default value 0.0.0.0 indicates that no proxy is required.
+//			(R, W) (optional) (4 bytes)
+//
+//		Calling Station Id Format
+//			Other values are reserved.
+//
+type Dot1XConfigurationProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	dot1xconfigurationprofileBME = &ManagedEntityDefinition{
+		Name:    "Dot1XConfigurationProfile",
+		ClassID: 291,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFC0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  Uint16Field("CircuitIdPrefix", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2:  ByteField("FallbackPolicy", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3:  Uint16Field("AuthServer1", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4:  MultiByteField("SharedSecretAuth1", 25, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5:  Uint16Field("AuthServer2", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 5),
+			6:  MultiByteField("SharedSecretAuth2", 25, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 6),
+			7:  Uint16Field("AuthServer3", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 7),
+			8:  MultiByteField("SharedSecretAuth3", 25, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 8),
+			9:  Uint32Field("OltProxyAddress", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 9),
+			10: Uint16Field("CallingStationIdFormat", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 10),
+		},
+	}
+}
+
+// NewDot1XConfigurationProfile (class ID 291 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 NewDot1XConfigurationProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(dot1xconfigurationprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/dot1xperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/dot1xperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..18d4bd6
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/dot1xperformancemonitoringhistorydata.go
@@ -0,0 +1,144 @@
+/*
+ * 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 Dot1XPerformanceMonitoringHistoryDataClassId ClassID = ClassID(292)
+
+var dot1xperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// Dot1XPerformanceMonitoringHistoryData (class ID #292)
+//	This ME collects performance statistics on an ONU's IEEE 802.1X CPE authentication operation.
+//	Instances of this ME are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME may be associated with each UNI that can perform IEEE 802.1X
+//		authentication of CPE.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 a PPTP. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contains PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Eapol Frames Received
+//			EAPOL frames received: This attribute counts received valid EAPOL frames of any type. (R)
+//			(mandatory) (4 bytes)
+//
+//		Eapol Frames Transmitted
+//			EAPOL frames transmitted: This attribute counts transmitted EAPOL frames of any type. (R)
+//			(mandatory) (4 bytes)
+//
+//		Eapol Start Frames Received
+//			EAPOL start frames received: This attribute counts received EAPOL start frames. (R) (mandatory)
+//			(4 bytes)
+//
+//		Eapol Logoff Frames Received
+//			EAPOL logoff frames received: This attribute counts received EAPOL logoff frames. (R)
+//			(mandatory) (4 bytes)
+//
+//		Invalid Eapol Frames Received
+//			Invalid EAPOL frames received: This attribute counts received EAPOL frames in which the frame
+//			type was not recognized. (R) (mandatory) (4 bytes)
+//
+//		Eap Resp_Id Frames Received
+//			EAP resp/id frames received: This attribute counts received EAP response frames containing an
+//			identifier type field. (R) (mandatory) (4 bytes)
+//
+//		Eap Response Frames Received
+//			EAP response frames received: This attribute counts received EAP response frames, other than
+//			resp/id frames. (R) (mandatory) (4 bytes)
+//
+//		Eap Initial Request Frames Transmitted
+//			EAP initial request frames transmitted: This attribute counts transmitted request frames
+//			containing an identifier type field. In [IEEE 802.1X], this is also called ReqId. (R)
+//			(mandatory) (4 bytes)
+//
+//		Eap Request Frames Transmitted
+//			EAP request frames transmitted: This attribute counts transmitted request frames, other than
+//			request/id frames. (R) (mandatory) (4 bytes)
+//
+//		Eap Length Error Frames Received
+//			EAP length error frames received: This attribute counts received EAPOL frames whose packet body
+//			length field was invalid. (R) (mandatory) (4 bytes)
+//
+//		Eap Success Frames Generated Autonomously
+//			EAP success frames generated autonomously: This attribute counts EAPOL success frames generated
+//			according to the local fallback policy because no radius server was available. (R) (mandatory)
+//			(4 bytes)
+//
+//		Eap Failure Frames Generated Autonomously
+//			EAP failure frames generated autonomously: This attribute counts EAPOL failure frames generated
+//			according to the local fallback policy because no radius server was available. (R) (mandatory)
+//			(4 bytes)
+//
+type Dot1XPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	dot1xperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "Dot1XPerformanceMonitoringHistoryData",
+		ClassID: 292,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFC,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("EapolFramesReceived", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("EapolFramesTransmitted", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("EapolStartFramesReceived", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("EapolLogoffFramesReceived", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("InvalidEapolFramesReceived", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("EapRespIdFramesReceived", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("EapResponseFramesReceived", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("EapInitialRequestFramesTransmitted", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("EapRequestFramesTransmitted", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("EapLengthErrorFramesReceived", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint32Field("EapSuccessFramesGeneratedAutonomously", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint32Field("EapFailureFramesGeneratedAutonomously", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+		},
+	}
+}
+
+// NewDot1XPerformanceMonitoringHistoryData (class ID 292 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 NewDot1XPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(dot1xperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/dot1xportextensionpackage.go b/vendor/github.com/cboling/omci/generated/dot1xportextensionpackage.go
new file mode 100644
index 0000000..7ff0491
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/dot1xportextensionpackage.go
@@ -0,0 +1,140 @@
+/*
+ * 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 Dot1XPortExtensionPackageClassId ClassID = ClassID(290)
+
+var dot1xportextensionpackageBME *ManagedEntityDefinition
+
+// Dot1XPortExtensionPackage (class ID #290)
+//	An instance of this ME represents a set of attributes that control a port's IEEE 802.1X
+//	operation. It is created and deleted autonomously by the ONU upon the creation or deletion of a
+//	PPTP that supports [IEEE 802.1X] authentication of customer premises equipment (CPE).
+//
+//	Relationships
+//		An instance of this ME is associated with a PPTP that performs IEEE 802.1X authentication of CPE
+//		(e.g., Ethernet or DSL).
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute provides a unique number for each instance of this ME. Its
+//			value is the same as that of its associated PPTP (i.e., slot and port number). (R) (mandatory)
+//			(2 bytes)
+//
+//		Dot1X Enable
+//			Dot1x enable: If true, this Boolean attribute forces the associated port to authenticate via
+//			[IEEE 802.1X] as a precondition of normal service. The default value false does not impose IEEE
+//			802.1X authentication on the associated port. (R, W) (mandatory) (1 byte)
+//
+//		Action Register
+//			(W) (mandatory) (1 byte)
+//
+//		Authenticator Pae State
+//			(R) (optional) (1 byte)
+//
+//		Backend Authentication State
+//			(R) (optional) (1 byte)
+//
+//		Admin Controlled Directions
+//			Admin controlled directions: This attribute controls the directionality of the port's
+//			authentication requirement. The default value 0 indicates that control is imposed in both
+//			directions. The value 1 indicates that control is imposed only on traffic from the subscriber
+//			towards the network. (R, W) (optional) (1 byte)
+//
+//		Operational Controlled Directions
+//			Operational controlled directions: This attribute indicates the directionality of the port's
+//			current authentication state. The value 0 indicates that control is imposed in both directions.
+//			The value 1 indicates that control is imposed only on traffic from the subscriber towards the
+//			network. (R) (optional) (1 byte)
+//
+//		Authenticator Controlled Port Status
+//			Authenticator controlled port status: This attribute indicates whether the controlled port is
+//			currently authorized (1) or unauthorized (2). (R) (optional) (1 byte)
+//
+//		Quiet Period
+//			Quiet period: This attribute specifies the interval between EAP request/identity invitations
+//			sent to the peer. Other events such as carrier present or EAPOL start frames from the peer may
+//			trigger an EAP request/identity frame from the ONU at any time; this attribute controls the
+//			ONU's periodic behaviour in the absence of these other inputs. It is expressed in seconds.
+//			(R, W) (optional) (2 bytes)
+//
+//		Server Timeout Period
+//			Server timeout period: This attribute specifies the time the ONU will wait for a response from
+//			the radius server before timing out. Within this maximum interval, the ONU may initiate several
+//			retransmissions with exponentially increasing delay. Upon timeout, the ONU may try another
+//			radius server if there is one, or invoke the fallback policy, if no alternate radius servers are
+//			available. Server timeout is expressed in seconds, with a default value of 30 and a maximum
+//			value of 65535. (R, W) (optional) (2 bytes)
+//
+//		Re_Authentication Period
+//			Re-authentication period: This attribute records the re-authentication interval specified by the
+//			radius authentication server. It is expressed in seconds. The attribute is only meaningful after
+//			a port has been authenticated. (R) (optional) (2 bytes)
+//
+//		Re_Authentication Enabled
+//			Re-authentication enabled: This Boolean attribute records whether the radius authentication
+//			server has enabled re-authentication on this service (true) or not (false). The attribute is
+//			only meaningful after a port has been authenticated. (R) (optional) (1 byte)
+//
+//		Key Transmission Enabled
+//			Key transmission enabled: This Boolean attribute indicates whether key transmission is enabled
+//			(true) or not (false). This feature is not required; the parameter is listed here for
+//			completeness vis-à-vis [IEEE 802.1X]. (R, W) (optional) (1 byte)
+//
+type Dot1XPortExtensionPackage struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	dot1xportextensionpackageBME = &ManagedEntityDefinition{
+		Name:    "Dot1XPortExtensionPackage",
+		ClassID: 290,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFF0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("Dot1XEnable", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2:  ByteField("ActionRegister", 0, mapset.NewSetWith(Write), false, false, false, false, 2),
+			3:  ByteField("AuthenticatorPaeState", 0, mapset.NewSetWith(Read), false, false, true, false, 3),
+			4:  ByteField("BackendAuthenticationState", 0, mapset.NewSetWith(Read), false, false, true, false, 4),
+			5:  ByteField("AdminControlledDirections", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 5),
+			6:  ByteField("OperationalControlledDirections", 0, mapset.NewSetWith(Read), false, false, true, false, 6),
+			7:  ByteField("AuthenticatorControlledPortStatus", 0, mapset.NewSetWith(Read), false, false, true, false, 7),
+			8:  Uint16Field("QuietPeriod", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 8),
+			9:  Uint16Field("ServerTimeoutPeriod", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 9),
+			10: Uint16Field("ReAuthenticationPeriod", 0, mapset.NewSetWith(Read), false, false, true, false, 10),
+			11: ByteField("ReAuthenticationEnabled", 0, mapset.NewSetWith(Read), false, false, true, false, 11),
+			12: ByteField("KeyTransmissionEnabled", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+		},
+	}
+}
+
+// NewDot1XPortExtensionPackage (class ID 290 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 NewDot1XPortExtensionPackage(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(dot1xportextensionpackageBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/efmbondinggroupperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/efmbondinggroupperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..0659555
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/efmbondinggroupperformancemonitoringhistorydata.go
@@ -0,0 +1,122 @@
+/*
+ * 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 EfmBondingGroupPerformanceMonitoringHistoryDataClassId ClassID = ClassID(421)
+
+var efmbondinggroupperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// EfmBondingGroupPerformanceMonitoringHistoryData (class ID #421)
+//	This ME collects PM data as seen at the xTU-C. Instances of this ME are created and deleted by
+//	the OLT.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 EFM bonding group. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contain PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Rx Bad Fragments
+//			Rx bad fragments: Clause 45.2.3.33 of [IEEE 802.3]. (R) (mandatory) (4 bytes)
+//
+//		Rx Lost Fragments
+//			Rx lost fragments: Clause 45.2.3.34 of [IEEE 802.3]. (R) (mandatory) (4 bytes)
+//
+//		Rx Lost Starts
+//			Rx lost starts: Clause 45.2.3.35 of [IEEE 802.3]. (R) (mandatory) (4 bytes)
+//
+//		Rx Lost Ends
+//			Rx lost ends: Clause 45.2.3.36 of [IEEE 802.3]. (R) (mandatory) (4 bytes)
+//
+//		Rx Frames
+//			Rx frames: Number of Ethernet frames received over this group. (R) (mandatory) (4 bytes)
+//
+//		Tx Frames
+//			Tx frames: Number of Ethernet frames transmitted over this group. (R) (mandatory) (4 bytes)
+//
+//		Rx Bytes
+//			Rx bytes: Number of bytes contained in the Ethernet frames received over this group. (R)
+//			(mandatory) (8 bytes)
+//
+//		Tx Bytes
+//			Tx bytes: Number of bytes contained in the Ethernet frames transmitted over this group. (R)
+//			(mandatory) (8 bytes)
+//
+//		Tx Discarded Frames
+//			Tx discarded frames: Number of Ethernet frames discarded by the group transmit function. (R)
+//			(mandatory) (4 bytes)
+//
+//		Tx Discarded Bytes
+//			Tx discarded bytes: Number of bytes contained in the Ethernet frames discarded by the group
+//			transmit function. (R) (mandatory) (4 bytes)
+//
+type EfmBondingGroupPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	efmbondinggroupperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "EfmBondingGroupPerformanceMonitoringHistoryData",
+		ClassID: 421,
+		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("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("RxBadFragments", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("RxLostFragments", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("RxLostStarts", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("RxLostEnds", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("RxFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("TxFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint64Field("RxBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint64Field("TxBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("TxDiscardedFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("TxDiscardedBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+		},
+	}
+}
+
+// NewEfmBondingGroupPerformanceMonitoringHistoryData (class ID 421 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 NewEfmBondingGroupPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(efmbondinggroupperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/efmbondinggroupperformancemonitoringhistorydatapart2.go b/vendor/github.com/cboling/omci/generated/efmbondinggroupperformancemonitoringhistorydatapart2.go
new file mode 100644
index 0000000..eddbf2c
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/efmbondinggroupperformancemonitoringhistorydatapart2.go
@@ -0,0 +1,138 @@
+/*
+ * 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 EfmBondingGroupPerformanceMonitoringHistoryDataPart2ClassId ClassID = ClassID(422)
+
+var efmbondinggroupperformancemonitoringhistorydatapart2BME *ManagedEntityDefinition
+
+// EfmBondingGroupPerformanceMonitoringHistoryDataPart2 (class ID #422)
+//	This ME collects PM data as seen at the xTU-C. Instances of this ME are created and deleted by
+//	the OLT.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 EFM bonding group. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contain PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Rx Unicast Frames
+//			Rx unicast frames: Number of unicast Ethernet frames received over this group. (R) (mandatory)
+//			(4 bytes)
+//
+//		Tx Unicast Frames
+//			Tx unicast frames: Number of unicast Ethernet frames transmitted over this group. (R)
+//			(mandatory) (4 bytes)
+//
+//		Rx Unicast Bytes
+//			Rx unicast bytes: Number of bytes contained in the unicast Ethernet frames received over this
+//			group. (R) (mandatory) (8 bytes)
+//
+//		Tx Unicast Bytes
+//			Tx unicast bytes: Number of bytes contained in the unicast Ethernet frames transmitted over this
+//			group. (R) (mandatory) (8 bytes)
+//
+//		Rx Broadcast Frames
+//			Rx broadcast frames: Number of broadcast Ethernet frames received over this group. (R)
+//			(mandatory) (4 bytes)
+//
+//		Tx Broadcast Frames
+//			Tx broadcast frames: Number of broadcast Ethernet frames transmitted over this group. (R)
+//			(mandatory) (4 bytes)
+//
+//		Rx Broadcast Bytes
+//			Rx broadcast bytes: Number of bytes contained in the broadcast Ethernet frames received over
+//			this group. (R) (mandatory) (8 bytes)
+//
+//		Tx Broadcast Bytes
+//			Tx broadcast bytes: Number of bytes contained in the broadcast Ethernet frames transmitted over
+//			this group. (R) (mandatory) (8 bytes)
+//
+//		Rx Multicast Frames
+//			Rx multicast frames: Number of multicast Ethernet frames received over this group. (R)
+//			(mandatory) (4 bytes)
+//
+//		Tx Multicast Frames
+//			Tx multicast frames: Number of multicast Ethernet frames transmitted over this group. (R)
+//			(mandatory) (4 bytes)
+//
+//		Rx Multicast Bytes
+//			Rx multicast bytes: Number of bytes contained in the multicast Ethernet frames received over
+//			this group. (R) (mandatory) (8 bytes)
+//
+//		Tx Multicast Bytes
+//			Tx multicast bytes: Number of bytes contained in the multicast Ethernet frames transmitted over
+//			this group. (R) (mandatory) (8 bytes)
+//
+type EfmBondingGroupPerformanceMonitoringHistoryDataPart2 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	efmbondinggroupperformancemonitoringhistorydatapart2BME = &ManagedEntityDefinition{
+		Name:    "EfmBondingGroupPerformanceMonitoringHistoryDataPart2",
+		ClassID: 422,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFC,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("RxUnicastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("TxUnicastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint64Field("RxUnicastBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint64Field("TxUnicastBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("RxBroadcastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("TxBroadcastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint64Field("RxBroadcastBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint64Field("TxBroadcastBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("RxMulticastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("TxMulticastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint64Field("RxMulticastBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint64Field("TxMulticastBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+		},
+	}
+}
+
+// NewEfmBondingGroupPerformanceMonitoringHistoryDataPart2 (class ID 422 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 NewEfmBondingGroupPerformanceMonitoringHistoryDataPart2(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(efmbondinggroupperformancemonitoringhistorydatapart2BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/efmbondinglink.go b/vendor/github.com/cboling/omci/generated/efmbondinglink.go
new file mode 100644
index 0000000..5ec16b5
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/efmbondinglink.go
@@ -0,0 +1,80 @@
+/*
+ * 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 EfmBondingLinkClassId ClassID = ClassID(420)
+
+var efmbondinglinkBME *ManagedEntityDefinition
+
+// EfmBondingLink (class ID #420)
+//	The EFM bonding link represents a link that can be bonded with other links to form a group. In
+//	[IEEE 802.3], a bonding group is known as a PAF and a link is known as a PME. Instances of this
+//	ME are created and deleted by the OLT.
+//
+//	Relationships
+//		An instance of this ME may be associated with zero or one instance of an EFM bonding group.
+//
+//	Attributes
+//		Managed Entity Id
+//			NOTE – This attribute has the same meaning as the Stream ID in clause C.3.1.2 of [ITU-T
+//			G.998.2], except that it cannot be changed. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Associated Group Me Id
+//			Associated group ME ID: This attribute is the ME ID of the bonding group to which this link is
+//			associated. Changing this attribute moves the link from one group to another. Setting this
+//			attribute to an ME ID that has not yet been provisioned will result in this link being placed in
+//			a single-link group that contains only this link. The default value for this attribute is the
+//			null pointer, 0xFFFF. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Link Alarm Enable
+//			(R, W, setbycreate) (mandatory) (1 bytes)
+//
+type EfmBondingLink struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	efmbondinglinkBME = &ManagedEntityDefinition{
+		Name:    "EfmBondingLink",
+		ClassID: 420,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XC000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("AssociatedGroupMeId", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: ByteField("LinkAlarmEnable", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+		},
+	}
+}
+
+// NewEfmBondingLink (class ID 420 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 NewEfmBondingLink(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(efmbondinglinkBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/efmbondinglinkperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/efmbondinglinkperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..f5963d4
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/efmbondinglinkperformancemonitoringhistorydata.go
@@ -0,0 +1,110 @@
+/*
+ * 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 EfmBondingLinkPerformanceMonitoringHistoryDataClassId ClassID = ClassID(423)
+
+var efmbondinglinkperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// EfmBondingLinkPerformanceMonitoringHistoryData (class ID #423)
+//	This ME collects PM data as seen at the xTU-C. Instances of this ME are created and deleted by
+//	the OLT.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 EFM bonding link. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contain PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Rx Errored Fragments
+//			Rx errored fragments: Clause 45.2.3.29 of [IEEE 802.3]. (R) (mandatory) (4 bytes)
+//
+//		Rx Small Fragments
+//			Rx small fragments: Clause 45.2.3.30 of [IEEE 802.3]. (R) (mandatory) (4 bytes)
+//
+//		Rx Large Fragments
+//			Rx large fragments: Clause 45.2.3.31 of [IEEE 802.3]. (R) (mandatory) (4 bytes)
+//
+//		Rx Discarded Fragments
+//			Rx discarded fragments: Clause 45.2.3.32 of [IEEE 802.3]. (R) (mandatory) (4 bytes)
+//
+//		Rx Fcs Errors
+//			Rx FCS errors: Clause 45.2.6.11 of [IEEE 802.3]. (R) (mandatory) (4 bytes)
+//
+//		Rx Coding Errors
+//			Rx coding errors: Clause 45.2.6.12 of [IEEE 802.3]. (R) (mandatory) (4 bytes)
+//
+//		Rx Fragments
+//			Rx fragments: Number of fragments received over this link. (R) (mandatory) (4 bytes)
+//
+//		Tx Fragments
+//			Tx fragments: Number of fragments transmitted over this link. (R) (mandatory) (4 bytes)
+//
+type EfmBondingLinkPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	efmbondinglinkperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "EfmBondingLinkPerformanceMonitoringHistoryData",
+		ClassID: 423,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFC0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("RxErroredFragments", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("RxSmallFragments", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("RxLargeFragments", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("RxDiscardedFragments", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("RxFcsErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("RxCodingErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("RxFragments", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("TxFragments", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+		},
+	}
+}
+
+// NewEfmBondingLinkPerformanceMonitoringHistoryData (class ID 423 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 NewEfmBondingLinkPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(efmbondinglinkperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/efmbondingportperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/efmbondingportperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..a857217
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/efmbondingportperformancemonitoringhistorydata.go
@@ -0,0 +1,107 @@
+/*
+ * 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 EfmBondingPortPerformanceMonitoringHistoryDataClassId ClassID = ClassID(424)
+
+var efmbondingportperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// EfmBondingPortPerformanceMonitoringHistoryData (class ID #424)
+//	This ME collects PM data as seen at the xTU-C. Instances of this ME are created and deleted by
+//	the OLT.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The two MSBs of
+//			the first byte are the bearer channel ID. Excluding the first 2 bits of the first byte, the
+//			remaining part of the ME ID is identical to that of this ME's parent PPTP xDSL UNI part 1. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contain PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Rx Frames
+//			Rx frames: Number of Ethernet frames received over this port. (R) (mandatory) (4 bytes)
+//
+//		Tx Frames
+//			Tx frames: Number of Ethernet frames transmitted over this port. (R) (mandatory) (4 bytes)
+//
+//		Rx Bytes
+//			Rx bytes: Number of bytes contained in the Ethernet frames received over this port. (R)
+//			(mandatory) (4 bytes)
+//
+//		Tx Bytes
+//			Tx bytes: Number of bytes contained in the Ethernet frames transmitted over this port. (R)
+//			(mandatory) (4 bytes)
+//
+//		Tx Discarded Frames
+//			Tx discarded frames: Number of Ethernet frames discarded by the port transmit function. (R)
+//			(mandatory) (4 bytes)
+//
+//		Tx Discarded Bytes
+//			Tx discarded bytes: Number of bytes contained in the Ethernet frames discarded by the port
+//			transmit function. (R) (mandatory) (4 bytes)
+//
+type EfmBondingPortPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	efmbondingportperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "EfmBondingPortPerformanceMonitoringHistoryData",
+		ClassID: 424,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("RxFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("TxFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("RxBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint32Field("TxBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint32Field("TxDiscardedFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8: Uint32Field("TxDiscardedBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+		},
+	}
+}
+
+// NewEfmBondingPortPerformanceMonitoringHistoryData (class ID 424 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 NewEfmBondingPortPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(efmbondingportperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/efmbondingportperformancemonitoringhistorydatapart2.go b/vendor/github.com/cboling/omci/generated/efmbondingportperformancemonitoringhistorydatapart2.go
new file mode 100644
index 0000000..cc3dd54
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/efmbondingportperformancemonitoringhistorydatapart2.go
@@ -0,0 +1,139 @@
+/*
+ * 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 EfmBondingPortPerformanceMonitoringHistoryDataPart2ClassId ClassID = ClassID(425)
+
+var efmbondingportperformancemonitoringhistorydatapart2BME *ManagedEntityDefinition
+
+// EfmBondingPortPerformanceMonitoringHistoryDataPart2 (class ID #425)
+//	This ME collects PM data as seen at the xTU-C. Instances of this ME are created and deleted by
+//	the OLT.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The two MSBs of
+//			the first byte are the bearer channel ID. Excluding the first 2 bits of the first byte, the
+//			remaining part of the ME ID is identical to that of this ME's parent PPTP xDSL UNI part 1. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contain PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Rx Unicast Frames
+//			Rx unicast frames: Number of unicast Ethernet frames received over this port. (R) (mandatory)
+//			(4 bytes)
+//
+//		Tx Unicast Frames
+//			Tx unicast frames: Number of unicast Ethernet frames transmitted over this port. (R) (mandatory)
+//			(4 bytes)
+//
+//		Rx Unicast Bytes
+//			Rx unicast bytes: Number of bytes contained in the unicast Ethernet frames received over this
+//			port. (R) (mandatory) (4 bytes)
+//
+//		Tx Unicast Bytes
+//			Tx unicast bytes: Number of bytes contained in the unicast Ethernet frames transmitted over this
+//			port. (R) (mandatory) (4 bytes)
+//
+//		Rx Broadcast Frames
+//			Rx broadcast frames: Number of broadcast Ethernet frames received over this port. (R)
+//			(mandatory) (4 bytes)
+//
+//		Tx Broadcast Frames
+//			Tx broadcast frames: Number of broadcast Ethernet frames transmitted over this port. (R)
+//			(mandatory) (4 bytes)
+//
+//		Rx Broadcast Bytes
+//			Rx broadcast bytes: Number of bytes contained in the broadcast Ethernet frames received over
+//			this port. (R) (mandatory) (4 bytes)
+//
+//		Tx Broadcast Bytes
+//			Tx broadcast bytes: Number of bytes contained in the broadcast Ethernet frames transmitted over
+//			this port. (R) (mandatory) (4 bytes)
+//
+//		Rx Multicast Frames
+//			Rx multicast frames: Number of multicast Ethernet frames received over this port. (R)
+//			(mandatory) (4 bytes)
+//
+//		Tx Multicast Frames
+//			Tx multicast frames: Number of multicast Ethernet frames transmitted over this port. (R)
+//			(mandatory) (4 bytes)
+//
+//		Rx Multicast Bytes
+//			Rx multicast bytes: Number of bytes contained in the multicast Ethernet frames received over
+//			this port. (R) (mandatory) (4 bytes)
+//
+//		Tx Multicast Bytes
+//			Tx multicast bytes: Number of bytes contained in the multicast Ethernet frames transmitted over
+//			this port. (R) (mandatory) (4 bytes)
+//
+type EfmBondingPortPerformanceMonitoringHistoryDataPart2 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	efmbondingportperformancemonitoringhistorydatapart2BME = &ManagedEntityDefinition{
+		Name:    "EfmBondingPortPerformanceMonitoringHistoryDataPart2",
+		ClassID: 425,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFC,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("RxUnicastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("TxUnicastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("RxUnicastBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("TxUnicastBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("RxBroadcastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("TxBroadcastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("RxBroadcastBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("TxBroadcastBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("RxMulticastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("TxMulticastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint32Field("RxMulticastBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint32Field("TxMulticastBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+		},
+	}
+}
+
+// NewEfmBondingPortPerformanceMonitoringHistoryDataPart2 (class ID 425 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 NewEfmBondingPortPerformanceMonitoringHistoryDataPart2(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(efmbondingportperformancemonitoringhistorydatapart2BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/energyconsumptionperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/energyconsumptionperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..26b0828
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/energyconsumptionperformancemonitoringhistorydata.go
@@ -0,0 +1,104 @@
+/*
+ * 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 EnergyConsumptionPerformanceMonitoringHistoryDataClassId ClassID = ClassID(343)
+
+var energyconsumptionperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// EnergyConsumptionPerformanceMonitoringHistoryData (class ID #343)
+//	This ME collects PM data associated with the ONU's energy consumption. The time spent in various
+//	low-power states is recorded as a measure of their utility. Furthermore, the ONU may also
+//	include the equivalent of a watt-hour meter, which can be sampled from time to time to measure
+//	actual power consumed.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with the ONU in its entirety.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The ME ID must
+//			be 0. (R, set-by-create) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: No thresholds are defined for this ME. For uniformity with other PMs, the
+//			attribute is retained and shown as mandatory, but it should be set to a null pointer. (R, W,
+//			set-by-create) (mandatory) (2 bytes)
+//
+//		Doze Time
+//			Doze time: This attribute records the time during which the ONU was in doze energy conservation
+//			mode, measured in microseconds. If watchful sleep is enabled in the ONU dynamic power management
+//			control ME, the ONU ignores this attribute. (R) (mandatory) (4 bytes)
+//
+//		Cyclic Sleep Time
+//			Cyclic sleep time: This attribute records the time during which the ONU was in cyclic sleep
+//			energy conservation mode, measured in microseconds. If watchful sleep is enabled in the ONU
+//			dynamic power management control ME, the ONU ignores this attribute. (R) (mandatory) (4 bytes)
+//
+//		Watchful Sleep Time
+//			Watchful sleep time: This attribute records the time during which the ONU was in watchful sleep
+//			energy conservation mode, measured in microseconds. (R) (mandatory) (4 bytes)
+//
+//		Energy Consumed
+//			Energy consumed: This attribute records the energy consumed by the ONU, measured in millijoules.
+//			(R) (optional) (4 bytes)
+//
+type EnergyConsumptionPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	energyconsumptionperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "EnergyConsumptionPerformanceMonitoringHistoryData",
+		ClassID: 343,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFC00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("DozeTime", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("CyclicSleepTime", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("WatchfulSleepTime", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint32Field("EnergyConsumed", 0, mapset.NewSetWith(Read), false, false, true, false, 6),
+		},
+	}
+}
+
+// NewEnergyConsumptionPerformanceMonitoringHistoryData (class ID 343 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 NewEnergyConsumptionPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(energyconsumptionperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/enhancedsecuritycontrol.go b/vendor/github.com/cboling/omci/generated/enhancedsecuritycontrol.go
new file mode 100644
index 0000000..bc8246c
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/enhancedsecuritycontrol.go
@@ -0,0 +1,138 @@
+/*
+ * 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 EnhancedSecurityControlClassId ClassID = ClassID(332)
+
+var enhancedsecuritycontrolBME *ManagedEntityDefinition
+
+// EnhancedSecurityControl (class ID #332)
+//	This ME contains the capabilities, parameters and controls of enhanced GPON security features
+//	when they are negotiated via the OMCI (Note). The attributes in this ME are intended to be used
+//	to implement a symmetric-key-based three step authentication process as described in the
+//	supplemental information section in the following.
+//
+//	NOTE – If an ITU-T G.987 system uses 802.1X authentication as defined in [ITU-T G.987.3], the
+//	only applicable attribute of this ME is the broadcast key table.
+//
+//	Relationships
+//		One instance of this ME is associated with the ONU ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. There is only
+//			one instance, number 0. (R) (mandatory) (2 bytes)
+//
+//		Olt Crypto Capabilities
+//			(W) (mandatory) (16 bytes)
+//
+//		Olt Random Challenge Table
+//			NOTE – It is assumed that the length of OLT_challenge is always an integer multiple of 16 bytes.
+//
+//		Olt Challenge Status
+//			The ONU initializes this attribute to the value false. (R, W) (mandatory) (1 byte)
+//
+//		Onu Selected Crypto Capabilities
+//			ONU selected crypto capabilities: This attribute specifies the cryptographic capability selected
+//			by the ONU in authentication step 2. Its value specifies one of the bit positions that has the
+//			value 1 in the OLT crypto capabilities attribute. (R) (mandatory) (1 byte)
+//
+//		Onu Random Challenge Table
+//			ONU random challenge table: This attribute specifies the random challenge ONU_challenge issued
+//			by the ONU during authentication step 2. It is structured as a table, with each entry being
+//			16 bytes of content. ONU_challenge is the concatenation of all 16 byte content fields in the
+//			table. Once the OLT triggers a response to be generated using the OLT challenge status
+//			attribute, the ONU generates the response and writes the table (in a single operation). The AVC
+//			generated by this attribute signals to the OLT that the challenge is ready, so that the OLT can
+//			commence a get/get-next sequence to obtain the table's contents. (R) (mandatory) (16 * P bytes)
+//
+//		Onu Authentication Result Table
+//			Once the OLT triggers a response to be generated using the OLT challenge status attribute, the
+//			ONU generates ONU_result and writes the table (in a single operation). The AVC generated by this
+//			attribute signals to the OLT that the response is ready, so that the OLT can commence a get/get-
+//			next sequence to obtain the table's contents. (R) (mandatory) (16 * Q bytes)
+//
+//		Olt Authentication Result Table
+//			This attribute is structured as a table, with each entry being 17 bytes. The first byte is the
+//			table row number, starting at 1; the remaining 16 bytes are content. OLT_result is the
+//			concatenation of all 16 byte content fields. The OLT writes all entries into the table, and then
+//			triggers the ONU's processing of the table using the OLT result status attribute. The number of
+//			rows R is implicit in the choice of hash algorithm. The OLT can clear the table with a set
+//			operation to row 0. (W) (mandatory) (17 * R bytes)
+//
+//		Olt Result Status
+//			(R, W) (mandatory) (1 byte)
+//
+//		Onu Authentication Status
+//			(R) (mandatory) (1 byte)
+//
+//		Master Session Key Name
+//			Upon the invalidation of a master session key (e.g., due to an ONU reset or deactivation, or due
+//			to an ONU-local decision that the master session key has expired), the ONU sets the master
+//			session key name to all zeros. (R) (mandatory) (16 bytes)
+//
+//		Broadcast Key Table
+//			(R, W) (optional) (18N bytes)
+//
+//		Effective Key Length
+//			Effective key length: This attribute specifies the maximum effective length, in bits, of keys
+//			generated by the ONU. (R) (optional) (2 bytes)
+//
+type EnhancedSecurityControl struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	enhancedsecuritycontrolBME = &ManagedEntityDefinition{
+		Name:    "EnhancedSecurityControl",
+		ClassID: 332,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			GetNext,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFF0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  MultiByteField("OltCryptoCapabilities", 16, nil, mapset.NewSetWith(Write), false, false, false, false, 1),
+			2:  TableField("OltRandomChallengeTable", TableInfo{nil, 17}, mapset.NewSetWith(Read, Write), false, false, false, 2),
+			3:  ByteField("OltChallengeStatus", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4:  ByteField("OnuSelectedCryptoCapabilities", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  TableField("OnuRandomChallengeTable", TableInfo{nil, 16}, mapset.NewSetWith(Read), true, false, false, 5),
+			6:  TableField("OnuAuthenticationResultTable", TableInfo{nil, 16}, mapset.NewSetWith(Read), true, false, false, 6),
+			7:  TableField("OltAuthenticationResultTable", TableInfo{nil, 17}, mapset.NewSetWith(Read, Write), false, false, false, 7),
+			8:  ByteField("OltResultStatus", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
+			9:  ByteField("OnuAuthenticationStatus", 0, mapset.NewSetWith(Read), true, false, false, false, 9),
+			10: MultiByteField("MasterSessionKeyName", 16, nil, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: TableField("BroadcastKeyTable", TableInfo{nil, 18}, mapset.NewSetWith(Read, Write), false, true, false, 11),
+			12: Uint16Field("EffectiveKeyLength", 0, mapset.NewSetWith(Read), false, false, true, false, 12),
+		},
+	}
+}
+
+// NewEnhancedSecurityControl (class ID 332 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 NewEnhancedSecurityControl(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(enhancedsecuritycontrolBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/equipmentextensionpackage.go b/vendor/github.com/cboling/omci/generated/equipmentextensionpackage.go
new file mode 100644
index 0000000..2b46de7
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/equipmentextensionpackage.go
@@ -0,0 +1,79 @@
+/*
+ * 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 EquipmentExtensionPackageClassId ClassID = ClassID(160)
+
+var equipmentextensionpackageBME *ManagedEntityDefinition
+
+// EquipmentExtensionPackage (class ID #160)
+//	This ME supports optional extensions to circuit pack MEs. If the circuit pack supports these
+//	features, the ONU creates and deletes this ME along with its associated real or virtual circuit
+//	pack.
+//
+//	Relationships
+//		An equipment extension package may be contained by an ONU-G or cardholder.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 ONU-G or cardholder. (R)
+//			(mandatory) (2 bytes)
+//
+//		Environmental Sense
+//			NOTE – Some specific sense point applications are already defined on the ONU-G ME. It is the
+//			vendor's choice how to configure and report sense points that appear both generically and
+//			specifically.
+//
+//		Contact Closure Output
+//			On read, the left bit in each pair should be set to 0 at the ONU and ignored at the OLT. The
+//			right bit indicates a released output point with 0 and an operated contact point with 1. (R, W)
+//			(optional) (2 bytes)
+//
+type EquipmentExtensionPackage struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	equipmentextensionpackageBME = &ManagedEntityDefinition{
+		Name:    "EquipmentExtensionPackage",
+		ClassID: 160,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XC000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: Uint16Field("EnvironmentalSense", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 1),
+			2: Uint16Field("ContactClosureOutput", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 2),
+		},
+	}
+}
+
+// NewEquipmentExtensionPackage (class ID 160 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 NewEquipmentExtensionPackage(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(equipmentextensionpackageBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/ethernetflowterminationpoint.go b/vendor/github.com/cboling/omci/generated/ethernetflowterminationpoint.go
new file mode 100644
index 0000000..0e4454a
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/ethernetflowterminationpoint.go
@@ -0,0 +1,95 @@
+/*
+ * 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 EthernetFlowTerminationPointClassId ClassID = ClassID(286)
+
+var ethernetflowterminationpointBME *ManagedEntityDefinition
+
+// EthernetFlowTerminationPoint (class ID #286)
+//	The Ethernet flow TP contains the attributes necessary to originate and terminate Ethernet
+//	frames in the ONU. It is appropriate when transporting pseudowire services via layer 2.
+//	Instances of this ME are created and deleted by the OLT.
+//
+//	Relationships
+//		One Ethernet flow TP ME exists for each distinct pseudowire service that is transported via
+//		layer 2.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. Through an
+//			identical ID, this ME is implicitly linked to a pseudowire TP ME. (R, setbycreate) (mandatory)
+//			(2 bytes)
+//
+//		Destination Mac
+//			Destination MAC: This attribute specifies the destination MAC address of upstream Ethernet
+//			frames. (R, W, setbycreate) (mandatory) (6 bytes)
+//
+//		Source Mac
+//			Source MAC: This attribute specifies the near-end MAC address. It is established by nonOMCI
+//			means (e.g., factory programmed into ONU flash memory) and is included here for information
+//			only. (R) (mandatory) (6 bytes)
+//
+//		Tag Policy
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Tci
+//			TCI:	If the tag policy calls for tagging of upstream Ethernet frames, this attribute specifies
+//			the tag control information, which includes the VLAN tag, P bits and CFI bit. (R, W) (optional)
+//			(2 bytes)
+//
+//		Loopback
+//			(R, W) (mandatory) (1 byte)
+//
+type EthernetFlowTerminationPoint struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	ethernetflowterminationpointBME = &ManagedEntityDefinition{
+		Name:    "EthernetFlowTerminationPoint",
+		ClassID: 286,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: MultiByteField("DestinationMac", 6, nil, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: MultiByteField("SourceMac", 6, nil, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3: ByteField("TagPolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: Uint16Field("Tci", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+			5: ByteField("Loopback", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+		},
+	}
+}
+
+// NewEthernetFlowTerminationPoint (class ID 286 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 NewEthernetFlowTerminationPoint(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(ethernetflowterminationpointBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/ethernetframeextendedpm.go b/vendor/github.com/cboling/omci/generated/ethernetframeextendedpm.go
new file mode 100644
index 0000000..887f8f2
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/ethernetframeextendedpm.go
@@ -0,0 +1,158 @@
+/*
+ * 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 EthernetFrameExtendedPmClassId ClassID = ClassID(334)
+
+var ethernetframeextendedpmBME *ManagedEntityDefinition
+
+// EthernetFrameExtendedPm (class ID #334)
+//	This ME collects some of the PM data at a point where an Ethernet flow can be observed. It is
+//	based on the Etherstats group of [IETF RFC 2819]. Instances of this ME are created and deleted
+//	by the OLT. References to received frames are to be interpreted as the number of frames entering
+//	the monitoring point in the direction specified by the control block.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME may be associated with an instance of an ME at any Ethernet interface
+//		within the ONU. The specific ME is identified in the control block attribute.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. To facilitate
+//			discovery, the identification of instances sequentially starting with 1 is encouraged. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. If
+//			continuous accumulation is enabled in the control block, this attribute is not used and has the
+//			fixed value 0. (R) (mandatory) (1 byte)
+//
+//		Control Block
+//			(R, W, setbycreate) (mandatory) (16 bytes)
+//
+//		Drop Events
+//			Drop events:	The total number of events in which frames were dropped due to a lack of resources.
+//			This is not necessarily the number of frames dropped; it is the number of times this event was
+//			detected. (R) (mandatory) (4 bytes)
+//
+//		Octets
+//			Octets:	The total number of octets received, including those in bad frames, excluding framing
+//			bits, but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Frames
+//			Frames:	The total number of frames received, including bad frames, broadcast frames and
+//			multicast frames. (R) (mandatory) (4 bytes)
+//
+//		Broadcast Frames
+//			Broadcast frames: The total number of received good frames directed to the broadcast address.
+//			This does not include multicast frames. (R) (mandatory) (4 bytes)
+//
+//		Multicast Frames
+//			Multicast frames: The total number of received good frames directed to a multicast address. This
+//			does not include broadcast frames. (R) (mandatory) (4 bytes)
+//
+//		Crc Errored Frames
+//			CRC errored frames: The total number of frames received that had a length (excluding framing
+//			bits, but including FCS octets) of between 64 and 1518 octets, inclusive, but had either a bad
+//			FCS with an integral number of octets (FCS error) or a bad FCS with a non-integral number of
+//			octets (alignment error). (R) (mandatory) (4 bytes)
+//
+//		Undersize Frames
+//			Undersize frames: The total number of frames received that were less than 64 octets long but
+//			were otherwise well formed (excluding framing bits, but including FCS octets). (R) (mandatory)
+//			(4 bytes)
+//
+//		Oversize Frames
+//			Oversize frames: The total number of frames received that were longer than 1518 octets
+//			(excluding framing bits, but including FCS octets) and were otherwise well formed. (R)
+//			(mandatory) (4 bytes)
+//
+//		Frames 64 Octets
+//			Frames 64 octets: The total number of received frames (including bad frames) that were 64 octets
+//			long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Frames 65 To 127 Octets
+//			Frames 65 to 127 octets: The total number of received frames (including bad frames) that were
+//			65..127 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Frames 128 To 255 Octets
+//			Frames 128 to 255 octets: The total number of frames (including bad frames) received that were
+//			128..255 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Frames 256 To 511 Octets
+//			Frames 256 to 511 octets: The total number of frames (including bad frames) received that were
+//			256..511 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Frames 512 To 1 023 Octets
+//			Frames 512 to 1 023 octets: The total number of frames (including bad frames) received that were
+//			512..1 023 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Frames 1024 To 1518 Octets
+//			Frames 1024 to 1518 octets: The total number of frames (including bad frames) received that were
+//			1024..1518 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+type EthernetFrameExtendedPm struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	ethernetframeextendedpmBME = &ManagedEntityDefinition{
+		Name:    "EthernetFrameExtendedPm",
+		ClassID: 334,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  MultiByteField("ControlBlock", 16, nil, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("DropEvents", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("Frames", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("BroadcastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("MulticastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("CrcErroredFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("UndersizeFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("OversizeFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("Frames64Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("Frames65To127Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint32Field("Frames128To255Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint32Field("Frames256To511Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: Uint32Field("Frames512To1023Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+			16: Uint32Field("Frames1024To1518Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 16),
+		},
+	}
+}
+
+// NewEthernetFrameExtendedPm (class ID 334 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 NewEthernetFrameExtendedPm(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(ethernetframeextendedpmBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/ethernetframeextendedpm64-bit.go b/vendor/github.com/cboling/omci/generated/ethernetframeextendedpm64-bit.go
new file mode 100644
index 0000000..38b2a0e
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/ethernetframeextendedpm64-bit.go
@@ -0,0 +1,154 @@
+/*
+ * 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 EthernetFrameExtendedPm64BitClassId ClassID = ClassID(426)
+
+var ethernetframeextendedpm64bitBME *ManagedEntityDefinition
+
+// EthernetFrameExtendedPm64Bit (class ID #426)
+//	This ME collects some of the PM data at a point where an Ethernet flow can be observed. It is
+//	based on the Etherstats group of [IETF RFC 2819] and [IETF RFC 2863]. Instances of this ME are
+//	created and deleted by the OLT. References to received frames are to be interpreted as the
+//	number of frames entering the monitoring point in the direction specified by the control block.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. To facilitate
+//			discovery, the identification of instances sequentially starting with 1 is encouraged. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. If
+//			continuous accumulation is enabled in the control block, this attribute is not used and has the
+//			fixed value 0. (R) (mandatory) (1 byte)
+//
+//		Control Block
+//			(R, W, setbycreate) (mandatory) (16 bytes)
+//
+//		Drop Events
+//			Drop events:	The total number of events in which frames were dropped due to a lack of resources.
+//			This is not necessarily the number of frames dropped; it is the number of times this event was
+//			detected. (R) (mandatory) (4 bytes)
+//
+//		Octets
+//			Octets:	The total number of octets received, including those in bad frames, excluding framing
+//			bits, but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Frames
+//			Frames:	The total number of frames received, including bad frames, broadcast frames and
+//			multicast frames. (R) (mandatory) (4 bytes)
+//
+//		Broadcast Frames
+//			Broadcast frames: The total number of received good frames directed to the broadcast address.
+//			This does not include multicast frames. (R) (mandatory) (4 bytes)
+//
+//		Multicast Frames
+//			Multicast frames: The total number of received good frames directed to a multicast address. This
+//			does not include broadcast frames. (R) (mandatory) (4 bytes)
+//
+//		Crc Errored Frames
+//			CRC errored frames: The total number of frames received that had a length (excluding framing
+//			bits, but including FCS octets) of between 64 and 1518 octets, inclusive, but had either a bad
+//			FCS with an integral number of octets (FCS error) or a bad FCS with a non-integral number of
+//			octets (alignment error). (R) (mandatory) (4 bytes)
+//
+//		Undersize Frames
+//			Undersize frames: The total number of frames received that were less than 64 octets long but
+//			were otherwise well formed (excluding framing bits, but including FCS octets). (R) (mandatory)
+//			(4 bytes)
+//
+//		Oversize Frames
+//			Oversize frames: The total number of frames received that were longer than 1518 octets
+//			(excluding framing bits, but including FCS octets) and were otherwise well formed. (R)
+//			(mandatory) (4 bytes)
+//
+//		Frames 64 Octets
+//			Frames 64 octets: The total number of received frames (including bad frames) that were 64 octets
+//			long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Frames 65 To 127 Octets
+//			Frames 65 to 127 octets: The total number of received frames (including bad frames) that were
+//			65..127 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Frames 128 To 255 Octets
+//			Frames 128 to 255 octets: The total number of frames (including bad frames) received that were
+//			128..255 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Frames 256 To 511 Octets
+//			Frames 256 to 511 octets: The total number of frames (including bad frames) received that were
+//			256..511 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Frames 512 To 1 023 Octets
+//			Frames 512 to 1 023 octets: The total number of frames (including bad frames) received that were
+//			512..1 023 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Frames 1024 To 1518 Octets
+//			Frames 1024 to 1518 octets: The total number of frames (including bad frames) received that were
+//			1024..1518 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+type EthernetFrameExtendedPm64Bit struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	ethernetframeextendedpm64bitBME = &ManagedEntityDefinition{
+		Name:    "EthernetFrameExtendedPm64Bit",
+		ClassID: 426,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  MultiByteField("ControlBlock", 16, nil, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint64Field("DropEvents", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint64Field("Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint64Field("Frames", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint64Field("BroadcastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint64Field("MulticastFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint64Field("CrcErroredFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint64Field("UndersizeFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint64Field("OversizeFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint64Field("Frames64Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint64Field("Frames65To127Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint64Field("Frames128To255Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint64Field("Frames256To511Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: Uint64Field("Frames512To1023Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+			16: Uint64Field("Frames1024To1518Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 16),
+		},
+	}
+}
+
+// NewEthernetFrameExtendedPm64Bit (class ID 426 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 NewEthernetFrameExtendedPm64Bit(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(ethernetframeextendedpm64bitBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/ethernetframeperformancemonitoringhistorydatadownstream.go b/vendor/github.com/cboling/omci/generated/ethernetframeperformancemonitoringhistorydatadownstream.go
new file mode 100644
index 0000000..6c65ece
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/ethernetframeperformancemonitoringhistorydatadownstream.go
@@ -0,0 +1,155 @@
+/*
+ * 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 EthernetFramePerformanceMonitoringHistoryDataDownstreamClassId ClassID = ClassID(321)
+
+var ethernetframeperformancemonitoringhistorydatadownstreamBME *ManagedEntityDefinition
+
+// EthernetFramePerformanceMonitoringHistoryDataDownstream (class ID #321)
+//	This ME is identical to the Ethernet frame PM history data upstream ME, with the exception that
+//	it monitors downstream traffic.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 a MAC bridge port configuration
+//			data. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Drop Events
+//			Drop events:	The total number of events in which packets were dropped due to a lack of
+//			resources. This is not necessarily the number of packets dropped; it is the number of times this
+//			event was detected. (R) (mandatory) (4 bytes)
+//
+//		Octets
+//			Octets:	The total number of upstream octets received, including those in bad packets, excluding
+//			framing bits, but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Packets
+//			Packets:	The total number of upstream packets received, including bad packets, broadcast packets
+//			and multicast packets. (R) (mandatory) (4 bytes)
+//
+//		Broadcast Packets
+//			Broadcast packets: The total number of upstream good packets received that were directed to the
+//			broadcast address. This does not include multicast packets. (R) (mandatory) (4 bytes)
+//
+//		Multicast Packets
+//			Multicast packets: The total number of upstream good packets received that were directed to a
+//			multicast address. This does not include broadcast packets. (R) (mandatory) (4 bytes)
+//
+//		Crc Errored Packets
+//			CRC errored packets: The total number of upstream packets received that had a length (excluding
+//			framing bits, but including FCS octets) of between 64 octets and 1518 octets, inclusive, but had
+//			either a bad FCS with an integral number of octets (FCS error) or a bad FCS with a non-integral
+//			number of octets (alignment error). (R) (mandatory) (4 bytes)
+//
+//		Undersize Packets
+//			Undersize packets: The total number of upstream packets received that were less than 64 octets
+//			long, but were otherwise well formed (excluding framing bits, but including FCS). (R)
+//			(mandatory) (4 bytes)
+//
+//		Oversize Packets
+//			NOTE 2 – If 2 000 byte Ethernet frames are supported, counts in this performance parameter are
+//			not necessarily errors.
+//
+//		Packets 64 Octets
+//			Packets 64 octets: The total number of upstream received packets (including bad packets) that
+//			were 64 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Packets 65 To 127 Octets
+//			Packets 65 to 127 octets: The total number of upstream received packets (including bad packets)
+//			that were 65..127 octets long, excluding framing bits but including FCS. (R) (mandatory)
+//			(4 bytes)
+//
+//		Packets 128 To 255 Octets
+//			Packets 128 to 255 octets: The total number of upstream packets (including bad packets) received
+//			that were 128..255 octets long, excluding framing bits but including FCS. (R) (mandatory)
+//			(4 bytes)
+//
+//		Packets 256 To 511 Octets
+//			Packets 256 to 511 octets: The total number of upstream packets (including bad packets) received
+//			that were 256..511 octets long, excluding framing bits but including FCS. (R) (mandatory)
+//			(4 bytes)
+//
+//		Packets 512 To 1023 Octets
+//			Packets 512 to 1023 octets: The total number of upstream packets (including bad packets)
+//			received that were 512..1 023 octets long, excluding framing bits but including FCS. (R)
+//			(mandatory) (4 bytes)
+//
+//		Packets 1024 To 1518 Octets
+//			Packets 1024 to 1518 octets: The total number of upstream packets (including bad packets)
+//			received that were 1024..1518 octets long, excluding framing bits, but including FCS. (R)
+//			(mandatory) (4 bytes)
+//
+type EthernetFramePerformanceMonitoringHistoryDataDownstream struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	ethernetframeperformancemonitoringhistorydatadownstreamBME = &ManagedEntityDefinition{
+		Name:    "EthernetFramePerformanceMonitoringHistoryDataDownstream",
+		ClassID: 321,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("DropEvents", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("Packets", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("BroadcastPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("MulticastPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("CrcErroredPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("UndersizePackets", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("OversizePackets", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("Packets64Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("Packets65To127Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint32Field("Packets128To255Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint32Field("Packets256To511Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: Uint32Field("Packets512To1023Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+			16: Uint32Field("Packets1024To1518Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 16),
+		},
+	}
+}
+
+// NewEthernetFramePerformanceMonitoringHistoryDataDownstream (class ID 321 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 NewEthernetFramePerformanceMonitoringHistoryDataDownstream(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(ethernetframeperformancemonitoringhistorydatadownstreamBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/ethernetframeperformancemonitoringhistorydataupstream.go b/vendor/github.com/cboling/omci/generated/ethernetframeperformancemonitoringhistorydataupstream.go
new file mode 100644
index 0000000..e808485
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/ethernetframeperformancemonitoringhistorydataupstream.go
@@ -0,0 +1,163 @@
+/*
+ * 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 EthernetFramePerformanceMonitoringHistoryDataUpstreamClassId ClassID = ClassID(322)
+
+var ethernetframeperformancemonitoringhistorydataupstreamBME *ManagedEntityDefinition
+
+// EthernetFramePerformanceMonitoringHistoryDataUpstream (class ID #322)
+//	This ME collects PM data associated with upstream Ethernet frame delivery. It is based on the
+//	Etherstats group of [IETF RFC 2819]. Instances of this ME are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	NOTE 1 – Implementers are encouraged to consider the Ethernet frame extended PM ME defined in
+//	clause 9.3.32, which collects the same counters in a more generalized way.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of a MAC bridge port configuration data.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 a MAC bridge port configuration
+//			data. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Drop Events
+//			Drop events:	The total number of events in which packets were dropped due to a lack of
+//			resources. This is not necessarily the number of packets dropped; it is the number of times this
+//			event was detected. (R) (mandatory) (4 bytes)
+//
+//		Octets
+//			Octets:	The total number of upstream octets received, including those in bad packets, excluding
+//			framing bits, but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Packets
+//			Packets:	The total number of upstream packets received, including bad packets, broadcast packets
+//			and multicast packets. (R) (mandatory) (4 bytes)
+//
+//		Broadcast Packets
+//			Broadcast packets: The total number of upstream good packets received that were directed to the
+//			broadcast address. This does not include multicast packets. (R) (mandatory) (4 bytes)
+//
+//		Multicast Packets
+//			Multicast packets: The total number of upstream good packets received that were directed to a
+//			multicast address. This does not include broadcast packets. (R) (mandatory) (4 bytes)
+//
+//		Crc Errored Packets
+//			CRC errored packets: The total number of upstream packets received that had a length (excluding
+//			framing bits, but including FCS octets) of between 64 octets and 1518 octets, inclusive, but had
+//			either a bad FCS with an integral number of octets (FCS error) or a bad FCS with a non-integral
+//			number of octets (alignment error). (R) (mandatory) (4 bytes)
+//
+//		Undersize Packets
+//			Undersize packets: The total number of upstream packets received that were less than 64 octets
+//			long, but were otherwise well formed (excluding framing bits, but including FCS). (R)
+//			(mandatory) (4 bytes)
+//
+//		Oversize Packets
+//			NOTE 2 – If 2 000 byte Ethernet frames are supported, counts in this performance parameter are
+//			not necessarily errors.
+//
+//		Packets 64 Octets
+//			Packets 64 octets: The total number of upstream received packets (including bad packets) that
+//			were 64 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Packets 65 To 127 Octets
+//			Packets 65 to 127 octets: The total number of upstream received packets (including bad packets)
+//			that were 65..127 octets long, excluding framing bits but including FCS. (R) (mandatory)
+//			(4 bytes)
+//
+//		Packets 128 To 255 Octets
+//			Packets 128 to 255 octets: The total number of upstream packets (including bad packets) received
+//			that were 128..255 octets long, excluding framing bits but including FCS. (R) (mandatory)
+//			(4 bytes)
+//
+//		Packets 256 To 511 Octets
+//			Packets 256 to 511 octets: The total number of upstream packets (including bad packets) received
+//			that were 256..511 octets long, excluding framing bits but including FCS. (R) (mandatory)
+//			(4 bytes)
+//
+//		Packets 512 To 1023 Octets
+//			Packets 512 to 1023 octets: The total number of upstream packets (including bad packets)
+//			received that were 512..1 023 octets long, excluding framing bits but including FCS. (R)
+//			(mandatory) (4 bytes)
+//
+//		Packets 1024 To 1518 Octets
+//			Packets 1024 to 1518 octets: The total number of upstream packets (including bad packets)
+//			received that were 1024..1518 octets long, excluding framing bits, but including FCS. (R)
+//			(mandatory) (4 bytes)
+//
+type EthernetFramePerformanceMonitoringHistoryDataUpstream struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	ethernetframeperformancemonitoringhistorydataupstreamBME = &ManagedEntityDefinition{
+		Name:    "EthernetFramePerformanceMonitoringHistoryDataUpstream",
+		ClassID: 322,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("DropEvents", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("Packets", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("BroadcastPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("MulticastPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("CrcErroredPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("UndersizePackets", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("OversizePackets", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("Packets64Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("Packets65To127Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint32Field("Packets128To255Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint32Field("Packets256To511Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: Uint32Field("Packets512To1023Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+			16: Uint32Field("Packets1024To1518Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 16),
+		},
+	}
+}
+
+// NewEthernetFramePerformanceMonitoringHistoryDataUpstream (class ID 322 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 NewEthernetFramePerformanceMonitoringHistoryDataUpstream(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(ethernetframeperformancemonitoringhistorydataupstreamBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/ethernetperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/ethernetperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..6c0f001
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/ethernetperformancemonitoringhistorydata.go
@@ -0,0 +1,155 @@
+/*
+ * 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 EthernetPerformanceMonitoringHistoryDataClassId ClassID = ClassID(24)
+
+var ethernetperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// EthernetPerformanceMonitoringHistoryData (class ID #24)
+//	This ME collects some of the PM data for a physical Ethernet interface. Instances of this ME are
+//	created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the PPTP Ethernet UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP Ethernet UNI. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contains PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Fcs Errors
+//			FCS errors:	This attribute counts frames received on a particular interface that were an
+//			integral number of octets in length but failed the FCS check. The count is incremented when the
+//			MAC service returns the frameCheckError status to the link layer control (LLC) or other MAC
+//			user. Received frames for which multiple error conditions are obtained are counted according to
+//			the error status presented to the LLC. (R) (mandatory) (4 bytes)
+//
+//		Excessive Collision Counter
+//			Excessive collision counter: This attribute counts frames whose transmission failed due to
+//			excessive collisions. (R) (mandatory) (4 bytes)
+//
+//		Late Collision Counter
+//			Late collision counter: This attribute counts the number of times that a collision was detected
+//			later than 512 bit times into the transmission of a packet. (R) (mandatory) (4 bytes)
+//
+//		Frames Too Long
+//			Frames too long: This attribute counts received frames that exceeded the maximum permitted frame
+//			size. The count is incremented when the MAC service returns the frameTooLong status to the LLC.
+//			(R) (mandatory) (4 bytes)
+//
+//		Buffer Overflows On Receive
+//			Buffer overflows on receive: This attribute counts the number of times that the receive buffer
+//			overflowed. (R) (mandatory) (4 bytes)
+//
+//		Buffer Overflows On Transmit
+//			Buffer overflows on transmit: This attribute counts the number of times that the transmit buffer
+//			overflowed. (R) (mandatory) (4 bytes)
+//
+//		Single Collision Frame Counter
+//			Single collision frame counter: This attribute counts successfully transmitted frames whose
+//			transmission was delayed by exactly one collision. (R) (mandatory) (4 bytes)
+//
+//		Multiple Collisions Frame Counter
+//			Multiple collisions frame counter: This attribute counts successfully transmitted frames whose
+//			transmission was delayed by more than one collision. (R) (mandatory) (4 bytes)
+//
+//		Sqe Counter
+//			SQE counter: This attribute counts the number of times that the SQE test error message was
+//			generated by the PLS sublayer. (R) (mandatory) (4 bytes)
+//
+//		Deferred Transmission Counter
+//			Deferred transmission counter: This attribute counts frames whose first transmission attempt was
+//			delayed because the medium was busy. The count does not include frames involved in collisions.
+//			(R) (mandatory) (4 bytes)
+//
+//		Internal Mac Transmit Error Counter
+//			Internal MAC transmit error counter: This attribute counts frames whose transmission failed due
+//			to an internal MAC sublayer transmit error. (R) (mandatory) (4 bytes)
+//
+//		Carrier Sense Error Counter
+//			Carrier sense error counter: This attribute counts the number of times that carrier sense was
+//			lost or never asserted when attempting to transmit a frame. (R) (mandatory) (4 bytes)
+//
+//		Alignment Error Counter
+//			Alignment error counter: This attribute counts received frames that were not an integral number
+//			of octets in length and did not pass the FCS check. (R) (mandatory) (4 bytes)
+//
+//		Internal Mac Receive Error Counter
+//			Internal MAC receive error counter: This attribute counts frames whose reception failed due to
+//			an internal MAC sublayer receive error. (R) (mandatory) (4 bytes)
+//
+type EthernetPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	ethernetperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "EthernetPerformanceMonitoringHistoryData",
+		ClassID: 24,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("FcsErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("ExcessiveCollisionCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("LateCollisionCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("FramesTooLong", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("BufferOverflowsOnReceive", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("BufferOverflowsOnTransmit", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("SingleCollisionFrameCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("MultipleCollisionsFrameCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("SqeCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("DeferredTransmissionCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint32Field("InternalMacTransmitErrorCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint32Field("CarrierSenseErrorCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: Uint32Field("AlignmentErrorCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+			16: Uint32Field("InternalMacReceiveErrorCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 16),
+		},
+	}
+}
+
+// NewEthernetPerformanceMonitoringHistoryData (class ID 24 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 NewEthernetPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(ethernetperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/ethernetperformancemonitoringhistorydata2.go b/vendor/github.com/cboling/omci/generated/ethernetperformancemonitoringhistorydata2.go
new file mode 100644
index 0000000..060634f
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/ethernetperformancemonitoringhistorydata2.go
@@ -0,0 +1,87 @@
+/*
+ * 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 EthernetPerformanceMonitoringHistoryData2ClassId ClassID = ClassID(89)
+
+var ethernetperformancemonitoringhistorydata2BME *ManagedEntityDefinition
+
+// EthernetPerformanceMonitoringHistoryData2 (class ID #89)
+//	This ME collects additional PM data for a physical Ethernet interface. Instances of this ME are
+//	created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this Ethernet PM history data 2 ME is associated with an instance of the PPTP
+//		Ethernet UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP Ethernet UNI. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Pppoe Filtered Frame Counter
+//			PPPoE filtered frame counter: This attribute counts the number of frames discarded due to PPPoE
+//			filtering. (R) (mandatory) (4 bytes)
+//
+type EthernetPerformanceMonitoringHistoryData2 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	ethernetperformancemonitoringhistorydata2BME = &ManagedEntityDefinition{
+		Name:    "EthernetPerformanceMonitoringHistoryData2",
+		ClassID: 89,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XE000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("PppoeFilteredFrameCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+		},
+	}
+}
+
+// NewEthernetPerformanceMonitoringHistoryData2 (class ID 89 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 NewEthernetPerformanceMonitoringHistoryData2(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(ethernetperformancemonitoringhistorydata2BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/ethernetperformancemonitoringhistorydata3.go b/vendor/github.com/cboling/omci/generated/ethernetperformancemonitoringhistorydata3.go
new file mode 100644
index 0000000..557dc2c
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/ethernetperformancemonitoringhistorydata3.go
@@ -0,0 +1,170 @@
+/*
+ * 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 EthernetPerformanceMonitoringHistoryData3ClassId ClassID = ClassID(296)
+
+var ethernetperformancemonitoringhistorydata3BME *ManagedEntityDefinition
+
+// EthernetPerformanceMonitoringHistoryData3 (class ID #296)
+//	This ME collects PM data associated with an Ethernet interface. It includes parameters defined
+//	in the Ethernet statistics group of [IETF RFC 2819] that are not already covered by previously
+//	defined Ethernet monitoring MEs. The received direction is from the CPE towards the network
+//	(upstream).
+//
+//	NOTE 1 – Several of the same counters are available from the Ethernet frame PM history data MEs,
+//	which are associated with MAC bridge ports. MAC bridge port association allows those MEs to be
+//	used for any Ethernet flow, in both upstream and downstream directions, while the Ethernet PM
+//	history data 3 ME can only be used on a physical IEEE 802.3 port.
+//
+//	Instances of this ME are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	NOTE 2 – Implementers are encouraged to consider the Ethernet frame extended PM ME defined in
+//	clause 9.3.32, which collects the same counters in a more generalized way.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the PPTP Ethernet UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP Ethernet UNI. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Drop Events
+//			Drop events:	The total number of events in which packets were dropped due to a lack of
+//			resources. This is not necessarily the number of packets dropped; it is the number of times this
+//			event was detected. (R) (mandatory) (4 bytes)
+//
+//		Octets
+//			Octets:	The total number of octets received from the CPE, including those in bad packets,
+//			excluding framing bytes, but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Packets
+//			Packets:	The total number of packets received, including bad packets, broadcast packets and
+//			multicast packets. (R) (mandatory) (4 bytes)
+//
+//		Broadcast Packets
+//			Broadcast packets: The total number of received good packets directed to the broadcast address.
+//			This does not include multicast packets. (R) (mandatory) (4 bytes)
+//
+//		Multicast Packets
+//			Multicast packets: The total number of received good packets directed to a multicast address.
+//			This does not include broadcast packets. (R) (mandatory) (4 bytes)
+//
+//		Undersize Packets
+//			Undersize packets: The total number of packets received that were less than 64 octets long, but
+//			were otherwise well formed (excluding framing bits, but including FCS). (R) (mandatory)
+//			(4 bytes)
+//
+//		Fragments
+//			Fragments:	The total number of packets received that were less than 64 octets long, excluding
+//			framing bits but including FCS octets, and had either a bad FCS with an integral number of
+//			octets (FCS error) or a bad FCS with a non-integral number of octets (alignment error). It is
+//			entirely normal for this attribute to increment. This is because it counts both runts (which are
+//			normal occurrences due to collisions) and noise hits. (R) (mandatory) (4 bytes)
+//
+//		Jabbers
+//			Jabbers:	The total number of packets received that were longer than 1518 octets, excluding
+//			framing bits but including FCS octets, and had either a bad FCS with an integral number of
+//			octets (FCS error) or a bad FCS with a non-integral number of octets (alignment error). The
+//			range to detect jabber is between 20 ms and 150 ms. (R) (mandatory) (4 bytes)
+//
+//		Packets 64 Octets
+//			Packets 64 octets: The total number of received packets (including bad packets) that were
+//			64 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Packets 65 To 127 Octets
+//			Packets 65 to 127 octets: The total number of received packets (including bad packets) that were
+//			65..127 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Packets 128 To 255 Octets
+//			Packets 128 to 255 octets: The total number of packets (including bad packets) received that
+//			were 128..255 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Packets 256 To 511 Octets
+//			Packets 256 to 511 octets: The total number of packets (including bad packets) received that
+//			were 256..511 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Packets 512 To 1023 Octets
+//			Packets 512 to 1023 octets: The total number of packets (including bad packets) received that
+//			were 512..1023 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+//		Packets 1024 To 1518 Octets
+//			Packets 1024 to 1518 octets: The total number of packets (including bad packets) received that
+//			were 1024..1518 octets long, excluding framing bits but including FCS. (R) (mandatory) (4 bytes)
+//
+type EthernetPerformanceMonitoringHistoryData3 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	ethernetperformancemonitoringhistorydata3BME = &ManagedEntityDefinition{
+		Name:    "EthernetPerformanceMonitoringHistoryData3",
+		ClassID: 296,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("DropEvents", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("Packets", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("BroadcastPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("MulticastPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("UndersizePackets", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("Fragments", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("Jabbers", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("Packets64Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("Packets65To127Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint32Field("Packets128To255Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint32Field("Packets256To511Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: Uint32Field("Packets512To1023Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+			16: Uint32Field("Packets1024To1518Octets", 0, mapset.NewSetWith(Read), false, false, false, false, 16),
+		},
+	}
+}
+
+// NewEthernetPerformanceMonitoringHistoryData3 (class ID 296 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 NewEthernetPerformanceMonitoringHistoryData3(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(ethernetperformancemonitoringhistorydata3BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/ethernetpseudowireparameters.go b/vendor/github.com/cboling/omci/generated/ethernetpseudowireparameters.go
new file mode 100644
index 0000000..161c235
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/ethernetpseudowireparameters.go
@@ -0,0 +1,74 @@
+/*
+ * 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 EthernetPseudowireParametersClassId ClassID = ClassID(400)
+
+var ethernetpseudowireparametersBME *ManagedEntityDefinition
+
+// EthernetPseudowireParameters (class ID #400)
+//	This ME contains the Ethernet pseudowire parameters. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the PW Ethernet configuration data ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PW Ethernet configuration data
+//			ME. (R, set-by-create) (mandatory) (2 bytes)
+//
+//		Mtu
+//			MTU:	This attribute identifies the maximum transmission unit (bytes) that can be received from
+//			the CPE in the upstream direction. Larger frames are discarded. (R, W, set-by-create)
+//			(mandatory) (2 bytes)
+//
+type EthernetPseudowireParameters struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	ethernetpseudowireparametersBME = &ManagedEntityDefinition{
+		Name:    "EthernetPseudowireParameters",
+		ClassID: 400,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0X8000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("Mtu", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+		},
+	}
+}
+
+// NewEthernetPseudowireParameters (class ID 400 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 NewEthernetPseudowireParameters(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(ethernetpseudowireparametersBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/extendedvlantaggingoperationconfigurationdata.go b/vendor/github.com/cboling/omci/generated/extendedvlantaggingoperationconfigurationdata.go
new file mode 100644
index 0000000..27846e6
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/extendedvlantaggingoperationconfigurationdata.go
@@ -0,0 +1,122 @@
+/*
+ * 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 ExtendedVlanTaggingOperationConfigurationDataClassId ClassID = ClassID(171)
+
+var extendedvlantaggingoperationconfigurationdataBME *ManagedEntityDefinition
+
+// ExtendedVlanTaggingOperationConfigurationData (class ID #171)
+//	This ME organizes data associated with VLAN tagging. Regardless of its point of attachment, the
+//	specified tagging operations refer to the upstream direction. Instances of this ME are created
+//	and deleted by the OLT.
+//
+//	Relationships
+//		Zero or one instance of this ME may exist for an instance of any ME that can terminate or modify
+//		an Ethernet stream.////		When this ME is associated with a UNI-side TP, it performs its upstream classification and
+//		tagging operations before offering the upstream frame to other filtering, bridging or switching
+//		functions. In the downstream direction, the defined inverse operation is the last operation
+//		performed on the frame before offering it to the UNI-side termination.////		When this ME is associated with an ANI-side TP, it performs its upstream classification and
+//		tagging operations as the last step before transmission to the OLT, after having received the
+//		upstream frame from other filtering, bridging or switching functions. In the downstream
+//		direction, the defined inverse operation is the first operation performed on the frame before
+//		offering it to possible filter, bridge or switch functions.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute provides a unique number for each instance of this ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Association Type
+//			When the extended VLAN tagging ME is associated with the ANI side, it behaves as an upstream
+//			egress rule, and as a downstream ingress rule when the downstream mode attribute is equal to 0.
+//			When the extended VLAN tagging ME is associated with the UNI side, the extended VLAN tagging ME
+//			behaves as an upstream ingress rule, and as a downstream egress rule when the downstream mode
+//			attribute is equal to 0.
+//
+//		Received Frame Vlan Tagging Operation Table Max Size
+//			Received frame VLAN tagging operation table max size: This attribute indicates the maximum
+//			number of entries that can be set in the received frame VLAN tagging operation table. (R)
+//			(mandatory) (2 bytes)
+//
+//		Input Tpid
+//			Input TPID:	This attribute gives the special TPID value for operations on the input (filtering)
+//			side of the table. Typical values include 0x88A8 and 0x9100. (R, W) (mandatory) (2 bytes)
+//
+//		Output Tpid
+//			Output TPID: This attribute gives the special TPID value for operations on the output (tagging)
+//			side of the table. Typical values include 0x88A8 and 0x9100. (R, W) (mandatory) (2 bytes)
+//
+//		Downstream Mode
+//			All other values are reserved. (R, W) (mandatory) (1 byte)
+//
+//		Received Frame Vlan Tagging Operation Table
+//			111	Set TPID = output TPID, DEI = 1
+//
+//		Associated Me Pointer
+//			NOTE 5 – When the association type is xDSL, the two MSBs may be used to indicate a bearer
+//			channel.
+//
+//		Dscp To P Bit Mapping
+//			NOTE 6 – If certain bits in the DSCP field are to be ignored in the mapping process, the
+//			attribute should be provisioned such that all possible values of those bits produce the same
+//			P-bit mapping. This can be applied to the case where instead of full DSCP, the operator wishes
+//			to adopt the priority mechanism based on IP precedence, which needs only the three MSBs of the
+//			DSCP field.
+//
+type ExtendedVlanTaggingOperationConfigurationData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	extendedvlantaggingoperationconfigurationdataBME = &ManagedEntityDefinition{
+		Name:    "ExtendedVlanTaggingOperationConfigurationData",
+		ClassID: 171,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetNext,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("AssociationType", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: Uint16Field("ReceivedFrameVlanTaggingOperationTableMaxSize", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3: Uint16Field("InputTpid", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4: Uint16Field("OutputTpid", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5: ByteField("DownstreamMode", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6: TableField("ReceivedFrameVlanTaggingOperationTable", TableInfo{nil, 16}, mapset.NewSetWith(Read, Write), false, false, false, 6),
+			7: Uint16Field("AssociatedMePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8: MultiByteField("DscpToPBitMapping", 24, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 8),
+		},
+	}
+}
+
+// NewExtendedVlanTaggingOperationConfigurationData (class ID 171 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 NewExtendedVlanTaggingOperationConfigurationData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(extendedvlantaggingoperationconfigurationdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/fastchannelconfigurationprofile.go b/vendor/github.com/cboling/omci/generated/fastchannelconfigurationprofile.go
new file mode 100644
index 0000000..2f982c9
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/fastchannelconfigurationprofile.go
@@ -0,0 +1,141 @@
+/*
+ * 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 FastChannelConfigurationProfileClassId ClassID = ClassID(432)
+
+var fastchannelconfigurationprofileBME *ManagedEntityDefinition
+
+// FastChannelConfigurationProfile (class ID #432)
+//	This ME contains the FAST channel configuration profile for an xDSL UNI. 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 the PPTP xDSL UNI part
+//		1.
+//
+//	Attributes
+//		Maximum Net Data Rate Maxndr
+//			Maximum net data rate (MAXNDR): This attribute specifies the value of the maximum net data rate.
+//			See clause 11.4.2.2 of [ITU-T G.9701]. Valid values range from 0 (0 kbit/s) to 4294967295
+//			(2^32–1 kbit/s). See clause 7.2.1.1 of [ITUT G.997.2]. (R, W) (mandatory) (4 bytes)
+//
+//		Minimum Expected Throughput Minetr
+//			Minimum expected throughput (MINETR): This attribute specifies the value of the minimum expected
+//			throughput. See clause 11.4.2.1 of [ITU-T G.9701]. Valid values range from 0 (0 kbit/s) to
+//			4294967295 (2^32–1 kbit/s). See clause 7.2.1.2 of [ITU-T G.997.2]. (R, W) (mandatory) (4 bytes)
+//
+//		Maximum Gamma Data Rate Maxgdr
+//			Maximum gamma data rate (MAXGDR): This attribute specifies the maximum value of the GDR (see
+//			clause 7.11.1.3). The GDR shall not exceed MAXGDR at the start of showtime and during showtime.
+//			Valid values range from 0 (0 kbit/s) to 4294967295 (2^32–1 kbit/s). See clause 7.2.1.3 of [ITU-T
+//			G.997.2]. (R, W) (mandatory) (4 bytes)
+//
+//		Minimum Gamma Data Rate Mingdr
+//			Minimum gamma data rate (MINGDR): This attribute specifies the minimum value of the GDR (see
+//			clause 7.11.1.3). The GDR may be lower than MINGDR. If the GDR is lower than MINGDR at
+//			initialization or when GDR becomes lower than MINGDR during showtime, a TCA occurs. Valid values
+//			range from 0 (0 kbit/s) to 4294967295 (2^32–1 kbit/s). See clause 7.2.1.4 of [ITU-T G.997.2].
+//			(R, W) (mandatory) (4 bytes)
+//
+//		Maximum Delay Delaymax
+//			Maximum delay (DELAYMAX): This attribute specifies the maximum allowed delay for retransmission.
+//			See clause 9.8 of [ITU-T G.9701]. The ITUT G.9701 control parameter delay_max is set to the same
+//			value as the maximum delay. See clause 11.4.2.3 of [ITU-T G.9701]. Valid values range from 4
+//			(1 ms) to 252 (63 ms) in steps of 0.25 ms. See clause 7.2.2.1 of [ITUT G.997.2]. (R, W)
+//			(mandatory) (4 bytes)
+//
+//		Minimum Impulse Noise Protection Against Shine Inpmin_Shine
+//			Minimum impulse noise protection against SHINE (INPMIN_SHINE): This attribute specifies the
+//			minimum INP against SHINE. See clause 9.8 of [ITU-T G.9701]. The ITU-T G.9701 control parameter
+//			INP_min_shine is set to the same value as the minimum INP against SHINE. See clause 11.4.2.4 of
+//			[ITU-T G.9701]. Valid values range from 0 to 520 (520 symbol periods). See clause 7.2.2.2 of
+//			[ITUT G.997.2]. (R, W) (mandatory) (2 bytes)
+//
+//		Shine Ratio Shineratio
+//			SHINE ratio (SHINERATIO): This attribute specifies the SHINE ratio that is used in the
+//			definition of the expected throughput rate (ETR). See clause 9.8 of [ITUT G.9701]. The ITU-T
+//			G.9701 control parameter SHINEratio is set to the same value as the SHINE ratio. See clause
+//			11.4.2.5 of [ITU-T G.9701]. The value is expressed in units of 0.001, Valid values range from 0
+//			to 100 (0.01) in steps of 0.001. See clause 7.2.2.3 of [ITU-T G.997.2]. (R, W) (mandatory)
+//			(1 byte)
+//
+//		Minimum Impulse Noise Protection Against Rein Inpmin_Rein
+//			Minimum impulse noise protection against REIN (INPMIN_REIN): This attribute specifies the
+//			minimum INP against REIN. See clause 9.8 of [ITU-T G.9701]. The ITU-T G.9701 control parameter
+//			INP_min_rein is set to the same value as the minimum INP against REIN. See clause 11.4.2.6 of
+//			[ITU-T G.9701]. Valid values range from 0 to 63 (63 symbol periods). See clause 7.2.2.4 of
+//			[ITU-T G.997.2]. (R, W) (mandatory) (1 byte)
+//
+//		Rein Inter_Arrival Time Iat_Rein
+//			(R, W) (mandatory) (1 byte)
+//
+//		Minimum Reed_Solomon Rfec_Nfec Ratio Rnratio
+//			Minimum Reed-Solomon RFEC/NFEC ratio (RNRATIO): This attribute specifies the minimal required
+//			ratio, RFEC/NFEC, of Reed-Solomon code parameters. The ITU-T G.9701 control parameter rnratio is
+//			set to the same value as the minimum Reed-Solomon RFEC/NFEC ratio. See clause 11.4.2.8 of
+//			[ITUT G.9701]. The value is expressed in units of 1/32, Valid values range from 0 to 8 (1/4).
+//			See clause 7.2.2.6 of [ITU-T G.997.2]. (R, W) (mandatory) (1 byte)
+//
+//		Rtx_Tc Testmode Rtx_Testmode
+//			RTX-TC testmode (RTX_TESTMODE): This Boolean attribute specifies whether the retransmission test
+//			mode defined in clause 9.8.3.1.2 [ITU-T G.9701] is enabled (true) or disabled (disabled). See
+//			clause 7.2.2.7 of [ITU-T G.997.2]. (R, W) (optional) (1 byte)
+//
+type FastChannelConfigurationProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	fastchannelconfigurationprofileBME = &ManagedEntityDefinition{
+		Name:    "FastChannelConfigurationProfile",
+		ClassID: 432,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFC0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint32Field("MaximumNetDataRateMaxndr", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 0),
+			1:  Uint32Field("MinimumExpectedThroughputMinetr", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2:  Uint32Field("MaximumGammaDataRateMaxgdr", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3:  Uint32Field("MinimumGammaDataRateMingdr", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4:  Uint32Field("MaximumDelayDelaymax", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5:  Uint16Field("MinimumImpulseNoiseProtectionAgainstShineInpminShine", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6:  ByteField("ShineRatioShineratio", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7:  ByteField("MinimumImpulseNoiseProtectionAgainstReinInpminRein", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8:  ByteField("ReinInterArrivalTimeIatRein", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
+			9:  ByteField("MinimumReedSolomonRfecNfecRatioRnratio", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 9),
+			10: ByteField("RtxTcTestmodeRtxTestmode", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 10),
+		},
+	}
+}
+
+// NewFastChannelConfigurationProfile (class ID 432 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 NewFastChannelConfigurationProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(fastchannelconfigurationprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/fastdatapathconfigurationprofile.go b/vendor/github.com/cboling/omci/generated/fastdatapathconfigurationprofile.go
new file mode 100644
index 0000000..5e27a21
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/fastdatapathconfigurationprofile.go
@@ -0,0 +1,74 @@
+/*
+ * 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 FastDataPathConfigurationProfileClassId ClassID = ClassID(433)
+
+var fastdatapathconfigurationprofileBME *ManagedEntityDefinition
+
+// FastDataPathConfigurationProfile (class ID #433)
+//	This ME contains FAST the data path configuration profile for an xDSL UNI. 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 the PPTP xDSL UNI part
+//		1.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The value 0 is
+//			reserved. (R, set-by-create) (mandatory) (2 bytes)
+//
+//		Tps_Tc Testmode Tps_Testmode
+//			TPS-TC testmode (TPS_TESTMODE): This Boolean attribute specifies whether the TPSTC test mode
+//			defined in clause 8.3.1 [ITU-T G.9701] is enabled (true) or disabled (disabled). See clause
+//			7.3.1 of [ITUT G.997.2]. (R, W) (mandatory) (1 byte)
+//
+type FastDataPathConfigurationProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	fastdatapathconfigurationprofileBME = &ManagedEntityDefinition{
+		Name:    "FastDataPathConfigurationProfile",
+		ClassID: 433,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0X8000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("TpsTcTestmodeTpsTestmode", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+		},
+	}
+}
+
+// NewFastDataPathConfigurationProfile (class ID 433 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 NewFastDataPathConfigurationProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(fastdatapathconfigurationprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/fastlineinventoryandstatusdatapart2.go b/vendor/github.com/cboling/omci/generated/fastlineinventoryandstatusdatapart2.go
new file mode 100644
index 0000000..18efd7b
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/fastlineinventoryandstatusdatapart2.go
@@ -0,0 +1,100 @@
+/*
+ * 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 FastLineInventoryAndStatusDataPart2ClassId ClassID = ClassID(436)
+
+var fastlineinventoryandstatusdatapart2BME *ManagedEntityDefinition
+
+// FastLineInventoryAndStatusDataPart2 (class ID #436)
+//	This ME contains part 3 of the FAST line inventory and status data with attributes specific to
+//	[ITU T G.997.2]. The ONU automatically creates or deletes an instance of this ME upon the
+//	creation or deletion of a PPTP xDSL UNI part 1.
+//
+//	Relationships
+//		This is one of the status data MEs associated with an xDSL UNI. It is required only if FAST is
+//		supported by the PPTP. The ONU automatically creates or deletes an instance of this ME upon
+//		creation or deletion of a PPTP xDSL UNI part 1 that supports these attributes.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP xDSL UNI part 1. (R)
+//			(mandatory) (2 bytes)
+//
+//		Date_Time_Stamping Of Last Successful Downstream Fra Operation Stamp_Frads
+//			(R) (optional) (7 bytes)
+//
+//		Date_Time_Stamping Of Last Successful Upstream Fra Operation Stamp_Fraus
+//			Date/time-stamping of last successful upstream FRA operation (STAMP-FRAus): This parameter
+//			reports the date/time of the last successful FTU-O initiated FRA execution that has modified the
+//			bits allocation. See clause 7.10.14.6 of [ITUT G.997.2]. The format of this parameter is the
+//			same as STAMPTESTNE. (R) (optional) (7 bytes)
+//
+//		Date_Time_Stamping Of Last Successful Downstream Rpa Operation Stamp_Rpads
+//			Date/time-stamping of last successful downstream RPA operation (STAMP-RPAds): This parameter
+//			reports the date/time of the last successful FTU-R initiated RPA execution that has modified the
+//			bits allocation for the RMC. See clause 7.10.14.7 of [ITU-T G.997.2]. The format of this
+//			parameter is the same as STAMP-TEST-NE. (R) (optional) (7 bytes)
+//
+//		Date_Time_Stamping Of Last Successful Upstream Rpa Operation Stamp_Rpaus
+//			Date/time-stamping of last successful upstream RPA operation (STAMP-RPAus): This parameter
+//			reports the date/time of the last successful FTU-O initiated RPA execution that has modified the
+//			bits allocation for the RMC. See clause 7.10.14.8 of [ITU-T G.997.2]. The format of this
+//			parameter is the same as STAMP-TEST-NE. (R) (optional) (7 bytes)
+//
+//		Date_Time_Stamping Of Last Successful Downstream Tiga Operation Stamp_Tiga
+//			Date/time-stamping of last successful downstream TIGA operation (STAMP-TIGA): This parameter
+//			reports the date/time of the last successful FTU-O initiated TIGA execution. See clause
+//			7.10.14.9 of [ITU-T G.997.2]. The format of this parameter is the same as STAMP-TEST-NE. (R)
+//			(optional) (7 bytes)
+//
+type FastLineInventoryAndStatusDataPart2 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	fastlineinventoryandstatusdatapart2BME = &ManagedEntityDefinition{
+		Name:    "FastLineInventoryAndStatusDataPart2",
+		ClassID: 436,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: MultiByteField("DateTimeStampingOfLastSuccessfulDownstreamFraOperationStampFrads", 7, nil, mapset.NewSetWith(Read), false, false, true, false, 1),
+			2: MultiByteField("DateTimeStampingOfLastSuccessfulUpstreamFraOperationStampFraus", 7, nil, mapset.NewSetWith(Read), false, false, true, false, 2),
+			3: MultiByteField("DateTimeStampingOfLastSuccessfulDownstreamRpaOperationStampRpads", 7, nil, mapset.NewSetWith(Read), false, false, true, false, 3),
+			4: MultiByteField("DateTimeStampingOfLastSuccessfulUpstreamRpaOperationStampRpaus", 7, nil, mapset.NewSetWith(Read), false, false, true, false, 4),
+			5: MultiByteField("DateTimeStampingOfLastSuccessfulDownstreamTigaOperationStampTiga", 7, nil, mapset.NewSetWith(Read), false, false, true, false, 5),
+		},
+	}
+}
+
+// NewFastLineInventoryAndStatusDataPart2 (class ID 436 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 NewFastLineInventoryAndStatusDataPart2(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(fastlineinventoryandstatusdatapart2BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/fastvectoringlineconfigurationextensions.go b/vendor/github.com/cboling/omci/generated/fastvectoringlineconfigurationextensions.go
new file mode 100644
index 0000000..d1eda20
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/fastvectoringlineconfigurationextensions.go
@@ -0,0 +1,83 @@
+/*
+ * 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 FastVectoringLineConfigurationExtensionsClassId ClassID = ClassID(434)
+
+var fastvectoringlineconfigurationextensionsBME *ManagedEntityDefinition
+
+// FastVectoringLineConfigurationExtensions (class ID #434)
+//	This ME extends FAST line configuration MEs with attributes that are specific to vectoring. 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 FAST line configuration MEs is modelled in several parts, all of which are
+//		associated together through a common ME ID (the client PPTP xDSL UNI part 3 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. The value 0 is
+//			reserved. (R, set-by-create) (mandatory) (2 bytes)
+//
+//		Fext Cancellation Enabling_Disabling Upstream Fext_To_Cancel_Enableus
+//			FEXT cancellation enabling/disabling upstream (FEXT_TO_CANCEL_ENABLEus): A value of 1 enables
+//			and a value of 0 disables FEXT cancellation in the upstream direction from all the other
+//			vectored lines into the line in the vectored group. See clause 7.1.7.2 of [ITU-T G.997.2].
+//			(R, W) (mandatory) (1 byte)
+//
+//		Fext Cancellation Enabling_Disabling Downstream Fext_To_Cancel_Enableds
+//			FEXT cancellation enabling/disabling downstream (FEXT_TO_CANCEL_ENABLEds): A value of 1 enables
+//			and a value of 0 disables FEXT cancellation in the downstream direction from all the other
+//			vectored lines into the line in the vectored group. See clause 7.1.7.1 of [ITUT G.997.2]. (R, W)
+//			(mandatory) (1 byte)
+//
+type FastVectoringLineConfigurationExtensions struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	fastvectoringlineconfigurationextensionsBME = &ManagedEntityDefinition{
+		Name:    "FastVectoringLineConfigurationExtensions",
+		ClassID: 434,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XC000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("FextCancellationEnablingDisablingUpstreamFextToCancelEnableus", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2: ByteField("FextCancellationEnablingDisablingDownstreamFextToCancelEnableds", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+		},
+	}
+}
+
+// NewFastVectoringLineConfigurationExtensions (class ID 434 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 NewFastVectoringLineConfigurationExtensions(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(fastvectoringlineconfigurationextensionsBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/fastxtu-cperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/fastxtu-cperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..9b20a8c
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/fastxtu-cperformancemonitoringhistorydata.go
@@ -0,0 +1,97 @@
+/*
+ * 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 FastXtuCPerformanceMonitoringHistoryDataClassId ClassID = ClassID(437)
+
+var fastxtucperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// FastXtuCPerformanceMonitoringHistoryData (class ID #437)
+//	This ME collects PM data on the xTU C to xTU R path as seen from the xTU-C. Instances of this ME
+//	are created and deleted by the OLT.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP xDSL UNI part 1. (R, set-
+//			by-create) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contain PM threshold values. (R, W, set-by-create) (mandatory) (2 bytes)
+//
+//		Successful Fra Counter
+//			Successful FRA counter: This attribute counts the successful FRA primitives (success_FRA). The
+//			successful FRA primitive (success_FRA) is defined in clause 11.3.1.6 of [ITU-T G.9701]. See
+//			clause 7.7.22 of [ITU-T G.997.2]. (R) (mandatory) (4 bytes)
+//
+//		Successful Rpa Counter
+//			Successful RPA counter: This attribute counts the successful RPA primitives (success_RPA). The
+//			successful RPA primitive (success_RPA) is defined in clause 11.3.1.6 of [ITU-T G.9701]. See
+//			clause 7.7.23 of [ITU-T G.997.2] (R) (optional) (4 bytes)
+//
+//		Successful Tiga Counter
+//			Successful TIGA counter: This attribute counts the successful TIGA primitives (success_TIGA).
+//			The successful TIGA primitive (success_TIGA) is defined in clause 11.3.1.6 of [ITU-T G.9701].
+//			Reported only with the near-end measured time, invalid data flag and timestamp. See clause
+//			7.7.24 of [ITUT G.997.2] (R) (optional) (4 bytes)
+//
+type FastXtuCPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	fastxtucperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "FastXtuCPerformanceMonitoringHistoryData",
+		ClassID: 437,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("SuccessfulFraCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("SuccessfulRpaCounter", 0, mapset.NewSetWith(Read), false, false, true, false, 4),
+			5: Uint32Field("SuccessfulTigaCounter", 0, mapset.NewSetWith(Read), false, false, true, false, 5),
+		},
+	}
+}
+
+// NewFastXtuCPerformanceMonitoringHistoryData (class ID 437 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 NewFastXtuCPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(fastxtucperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/fastxtu-rperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/fastxtu-rperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..dea13c9
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/fastxtu-rperformancemonitoringhistorydata.go
@@ -0,0 +1,91 @@
+/*
+ * 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 FastXtuRPerformanceMonitoringHistoryDataClassId ClassID = ClassID(438)
+
+var fastxturperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// FastXtuRPerformanceMonitoringHistoryData (class ID #438)
+//	This ME collects PM data of the xTU C to xTU R path as seen from the xTU-R. Instances of this ME
+//	are created and deleted by the OLT. For a complete discussion of generic PM architecture, refer
+//	to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP xDSL UNI part 1. (R, set-
+//			by-create) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contain PM threshold values. (R, W, set-by-create) (mandatory) (2 bytes)
+//
+//		Successful Fra Counter
+//			Successful FRA counter: This attribute counts the successful FRA primitives (success_FRA). The
+//			successful FRA primitive (success_FRA) is defined in clause 11.3.1.6 of [ITU-T G.9701]. See
+//			clause 7.7.22 of [ITU-T G.997.2] (R) (mandatory) (4 bytes)
+//
+//		Successful Rpa Counter
+//			Successful RPA counter: This attribute counts the successful RPA primitives (success_RPA). The
+//			successful RPA primitive (success_RPA) is defined in clause 11.3.1.6 of [ITU-T G.9701]. See
+//			clause 7.7.23 of [ITU-T G.997.2] (R) (optional) (4 bytes)
+//
+type FastXtuRPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	fastxturperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "FastXtuRPerformanceMonitoringHistoryData",
+		ClassID: 438,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("SuccessfulFraCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("SuccessfulRpaCounter", 0, mapset.NewSetWith(Read), false, false, true, false, 4),
+		},
+	}
+}
+
+// NewFastXtuRPerformanceMonitoringHistoryData (class ID 438 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 NewFastXtuRPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(fastxturperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/galethernetperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/galethernetperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..3ae384d
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/galethernetperformancemonitoringhistorydata.go
@@ -0,0 +1,87 @@
+/*
+ * 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 GalEthernetPerformanceMonitoringHistoryDataClassId ClassID = ClassID(276)
+
+var galethernetperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// GalEthernetPerformanceMonitoringHistoryData (class ID #276)
+//	This ME collects PM data associated with a GEM IW TP when the GEM layer supports an Ethernet
+//	service. Instances of this ME are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the GEM IW TP ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 GEM IW TP. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Discarded Frames
+//			Discarded frames: This attribute counts the number of downstream GEM frames discarded for any
+//			reason [erroneous frame check sequence (FCS), too long length, buffer overflow, etc.]. (R)
+//			(mandatory) (4 bytes)
+//
+type GalEthernetPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	galethernetperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "GalEthernetPerformanceMonitoringHistoryData",
+		ClassID: 276,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XE000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("DiscardedFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+		},
+	}
+}
+
+// NewGalEthernetPerformanceMonitoringHistoryData (class ID 276 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 NewGalEthernetPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(galethernetperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/galethernetprofile.go b/vendor/github.com/cboling/omci/generated/galethernetprofile.go
new file mode 100644
index 0000000..a83aea8
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/galethernetprofile.go
@@ -0,0 +1,75 @@
+/*
+ * 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 GalEthernetProfileClassId ClassID = ClassID(272)
+
+var galethernetprofileBME *ManagedEntityDefinition
+
+// GalEthernetProfile (class ID #272)
+//	This ME organizes data that describe the gigabit-capable passive optical network transmission
+//	convergence layer (GTC) adaptation layer processing functions of the ONU for Ethernet services.
+//	It is used with the GEM IW TP ME.
+//
+//	Instances of this ME are created and deleted on request of the OLT.
+//
+//	Relationships
+//		An instance of this ME may be associated with zero or more instances of the GEM IW TP ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Maximum Gem Payload Size
+//			Maximum GEM payload size: This attribute defines the maximum payload size generated in the
+//			associated GEM IW TP ME. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+type GalEthernetProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	galethernetprofileBME = &ManagedEntityDefinition{
+		Name:    "GalEthernetProfile",
+		ClassID: 272,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0X8000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("MaximumGemPayloadSize", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+		},
+	}
+}
+
+// NewGalEthernetProfile (class ID 272 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 NewGalEthernetProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(galethernetprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/geminterworkingterminationpoint.go b/vendor/github.com/cboling/omci/generated/geminterworkingterminationpoint.go
new file mode 100644
index 0000000..aa6693f
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/geminterworkingterminationpoint.go
@@ -0,0 +1,109 @@
+/*
+ * 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 GemInterworkingTerminationPointClassId ClassID = ClassID(266)
+
+var geminterworkingterminationpointBME *ManagedEntityDefinition
+
+// GemInterworkingTerminationPoint (class ID #266)
+//	An instance of this ME represents a point in the ONU where the IW of a bearer service (usually
+//	Ethernet) to the GEM layer takes place. At this point, GEM packets are generated from the bearer
+//	bit stream (e.g., Ethernet) or the bearer bit stream is reconstructed from GEM packets.
+//
+//	Instances of this ME are created and deleted by the OLT.
+//
+//	Relationships
+//		One instance of this ME exists for each transformation of a data stream into GEM frames and vice
+//		versa.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Gem Port Network Ctp Connectivity Pointer
+//			GEM port network CTP connectivity pointer: This attribute points to an instance of the GEM port
+//			network CTP. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Interworking Option
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Service Profile Pointer
+//			NOTE – The video return path (VRP) service profile is defined in [ITU-T G.984.4].
+//
+//		Interworking Termination Point Pointer
+//			In all other GEM services, the relationship between the related service TP and this GEM IW TP is
+//			derived from other ME relations; this attribute is set to a null pointer and not used. (R, W,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Pptp Counter
+//			PPTP counter: This value reports the number of PPTP ME instances associated with this GEM IW TP.
+//			(R) (optional) (1 byte)
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the ME is capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+//		Gal Profile Pointer
+//			(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Gal Loopback Configuration
+//			The default value of this attribute is 0. When the IW option is 6 (downstream broadcast), this
+//			attribute is not used. (R, W) (mandatory) (1 byte)
+//
+type GemInterworkingTerminationPoint struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	geminterworkingterminationpointBME = &ManagedEntityDefinition{
+		Name:    "GemInterworkingTerminationPoint",
+		ClassID: 266,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("GemPortNetworkCtpConnectivityPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: ByteField("InterworkingOption", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint16Field("ServiceProfilePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: Uint16Field("InterworkingTerminationPointPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5: ByteField("PptpCounter", 0, mapset.NewSetWith(Read), false, false, true, false, 5),
+			6: ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 6),
+			7: Uint16Field("GalProfilePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8: ByteField("GalLoopbackConfiguration", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
+		},
+	}
+}
+
+// NewGemInterworkingTerminationPoint (class ID 266 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 NewGemInterworkingTerminationPoint(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(geminterworkingterminationpointBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/gemportnetworkctp.go b/vendor/github.com/cboling/omci/generated/gemportnetworkctp.go
new file mode 100644
index 0000000..84586f9
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/gemportnetworkctp.go
@@ -0,0 +1,138 @@
+/*
+ * 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 GemPortNetworkCtpClassId ClassID = ClassID(268)
+
+var gemportnetworkctpBME *ManagedEntityDefinition
+
+// GemPortNetworkCtp (class ID #268)
+//	This ME represents the termination of a GEM port on an ONU. This ME aggregates connectivity
+//	functionality from the network view and alarms from the network element view as well as
+//	artefacts from trails.
+//
+//	Instances of the GEM port network CTP ME are created and deleted by the OLT. An instance of GEM
+//	port network CTP can be deleted only when no GEM IW TP or GEM port network CTP PM history data
+//	are associated with it. It is the responsibility of the OLT to make sure that the ONU
+//	configuration meets this condition.
+//
+//	In ITU-T G.984 systems, when a GEM port network CTP is created, its encryption state is by
+//	default not encrypted. If the OLT wishes to configure the GEM port to use encryption, it must
+//	send the appropriate PLOAM message. This applies equally to new CTPs and to CTPs that are re-
+//	created after an MIB reset.
+//
+//	In ITU-T G.987 systems, GEM ports are dynamically encrypted. If it is intended to encrypt the
+//	GEM port, the OLT must configure a key ring to be used, and the key must be known to the ONU at
+//	run time.
+//
+//	Relationships
+//		An instance of the GEM port network CTP ME may be associated with an instance of the T-CONT and
+//		GEM IW TP MEs.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Port_Id
+//			NOTE 1 – While nothing forbids the existence of several GEM port network CTPs with the same
+//			port-ID value, downstream traffic is modelled as being delivered to all such GEM port network
+//			CTPs. Be aware of potential difficulties associated with defining downstream flows and
+//			aggregating PM statistics.
+//
+//		T_Cont Pointer
+//			T-CONT pointer: This attribute points to a T-CONT instance. (R, W, setbycreate) (mandatory)
+//			(2 bytes)
+//
+//		Direction
+//			Direction:	This attribute specifies whether the GEM port is used for UNI-to-ANI (1), ANI-to-UNI
+//			(2), or bidirectional (3) connection. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Traffic Management Pointer For Upstream
+//			Traffic management pointer for upstream: If the traffic management option attribute in the ONU-G
+//			ME is 0 (priority controlled) or 2 (priority and rate controlled), this pointer specifies the
+//			priority queue ME serving this GEM port network CTP. If the traffic management option attribute
+//			is 1 (rate controlled), this attribute redundantly points to the TCONT serving this GEM port
+//			network CTP. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Traffic Descriptor Profile Pointer For Upstream
+//			See also Appendix II.
+//
+//		Uni Counter
+//			UNI counter: This attribute reports the number of instances of UNI-G ME associated with this GEM
+//			port network CTP. (R) (optional) (1 byte)
+//
+//		Priority Queue Pointer For Down Stream
+//			NOTE 2 – If the GEM port network CTP is associated with more than one UNI (downstream
+//			multicast), the downstream priority queue pointer defines a pattern (e.g., queue number 3 for a
+//			given UNI) to be replicated (i.e., to queue number 3) at the other affected UNIs.
+//
+//		Encryption State
+//			Encryption state: This attribute indicates the current state of the GEM port network CTP's
+//			encryption. Legal values are defined to be the same as those of the security mode attribute of
+//			the ONU2-G, with the exception that attribute value 0 indicates an unencrypted GEM port. (R)
+//			(optional) (1 byte)
+//
+//		Traffic Descriptor Profile Pointer For Downstream
+//			See also Appendix II.
+//
+//		Encryption Key Ring
+//			Other values are reserved.
+//
+type GemPortNetworkCtp struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	gemportnetworkctpBME = &ManagedEntityDefinition{
+		Name:    "GemPortNetworkCtp",
+		ClassID: 268,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFC0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  Uint16Field("PortId", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  Uint16Field("TContPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  ByteField("Direction", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4:  Uint16Field("TrafficManagementPointerForUpstream", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  Uint16Field("TrafficDescriptorProfilePointerForUpstream", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 5),
+			6:  ByteField("UniCounter", 0, mapset.NewSetWith(Read), false, false, true, false, 6),
+			7:  Uint16Field("PriorityQueuePointerForDownStream", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8:  ByteField("EncryptionState", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+			9:  Uint16Field("TrafficDescriptorProfilePointerForDownstream", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 9),
+			10: ByteField("EncryptionKeyRing", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 10),
+		},
+	}
+}
+
+// NewGemPortNetworkCtp (class ID 268 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 NewGemPortNetworkCtp(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(gemportnetworkctpBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/gemportnetworkctpperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/gemportnetworkctpperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..233afec
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/gemportnetworkctpperformancemonitoringhistorydata.go
@@ -0,0 +1,116 @@
+/*
+ * 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 GemPortNetworkCtpPerformanceMonitoringHistoryDataClassId ClassID = ClassID(341)
+
+var gemportnetworkctpperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// GemPortNetworkCtpPerformanceMonitoringHistoryData (class ID #341)
+//	This ME collects GEM frame PM data associated with a GEM port network CTP. Instances of this ME
+//	are created and deleted by the OLT.
+//
+//	NOTE 1 – One might expect to find some form of impaired or discarded frame count associated with
+//	a GEM port. However, the only impairment that might be detected at the GEM frame level would be
+//	a corrupted GEM frame header. In this case, no part of the header could be considered reliable
+//	including the port ID. For this reason, there is no impaired or discarded frame count in this
+//	ME.
+//
+//	NOTE 2 – This ME replaces the GEM port performance history data ME and is preferred for new
+//	implementations.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the GEM port network CTP ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 GEM port network CTP. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Transmitted Gem Frames
+//			Transmitted GEM frames: This attribute counts GEM frames transmitted on the monitored GEM port.
+//			(R) (mandatory) (4 bytes)
+//
+//		Received Gem Frames
+//			Received GEM frames: This attribute counts GEM frames received correctly on the monitored GEM
+//			port. A correctly received GEM frame is one that does not contain uncorrectable errors and has a
+//			valid header error check (HEC). (R) (mandatory) (4 bytes)
+//
+//		Received Payload Bytes
+//			Received payload bytes: This attribute counts user payload bytes received on the monitored GEM
+//			port. (R) (mandatory) (8 bytes)
+//
+//		Transmitted Payload Bytes
+//			Transmitted payload bytes: This attribute counts user payload bytes transmitted on the monitored
+//			GEM port. (R) (mandatory) (8 bytes)
+//
+//		Encryption Key Errors
+//			NOTE 4 – GEM PM counts each non-idle GEM frame, whether it contains an entire user frame or only
+//			a fragment of a user frame.
+//
+type GemPortNetworkCtpPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	gemportnetworkctpperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "GemPortNetworkCtpPerformanceMonitoringHistoryData",
+		ClassID: 341,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFE00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("TransmittedGemFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("ReceivedGemFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint64Field("ReceivedPayloadBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint64Field("TransmittedPayloadBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint32Field("EncryptionKeyErrors", 0, mapset.NewSetWith(Read), false, false, true, false, 7),
+		},
+	}
+}
+
+// NewGemPortNetworkCtpPerformanceMonitoringHistoryData (class ID 341 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 NewGemPortNetworkCtpPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(gemportnetworkctpperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/ieee802.1pmapperserviceprofile.go b/vendor/github.com/cboling/omci/generated/ieee802.1pmapperserviceprofile.go
new file mode 100644
index 0000000..1906172
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/ieee802.1pmapperserviceprofile.go
@@ -0,0 +1,134 @@
+/*
+ * 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 Ieee8021PMapperServiceProfileClassId ClassID = ClassID(130)
+
+var ieee8021pmapperserviceprofileBME *ManagedEntityDefinition
+
+// Ieee8021PMapperServiceProfile (class ID #130)
+//	This ME associates the priorities of IEEE 802.1p [IEEE 802.1D] priority tagged frames with
+//	specific connections. This ME directs upstream traffic to the designated GEM ports. Downstream
+//	traffic arriving on any of the IEEE 802.1p mapper's GEM ports is directed to the mapper's root
+//	TP. Other mechanisms exist to direct downstream traffic, specifically a direct pointer to a
+//	downstream queue from the GEM port network CTP. If such an alternative is used, it should be
+//	provisioned to be consistent with the flow model of the mapper.
+//
+//	Instances of this ME are created and deleted by the OLT.
+//
+//	Relationships
+//		At its root, an instance of this ME may be associated with zero or one instance of a PPTP UNI,
+//		MAC bridge port configuration data, or any type of IW TP ME that carries IEEE 802 traffic. Each
+//		of its eight branches is associated with zero or one GEM IW TP.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Tp Pointer
+//			(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Interwork Tp Pointer For P_Bit Priority 0
+//			Interwork TP pointer for P-bit priority 0:	(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Interwork Tp Pointer For P_Bit Priority 1
+//			Interwork TP pointer for P-bit priority 1:	(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Interwork Tp Pointer For P_Bit Priority 2
+//			Interwork TP pointer for P-bit priority 2:	(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Interwork Tp Pointer For P_Bit Priority 3
+//			Interwork TP pointer for P-bit priority 3:	(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Interwork Tp Pointer For P_Bit Priority 4
+//			Interwork TP pointer for P-bit priority 4:	(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Interwork Tp Pointer For P_Bit Priority 5
+//			Interwork TP pointer for P-bit priority 5:	(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Interwork Tp Pointer For P_Bit Priority 6
+//			Interwork TP pointer for P-bit priority 6:	(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Interwork Tp Pointer For P_Bit Priority 7
+//			Interwork TP pointer for P-bit priority 7:	(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Unmarked Frame Option
+//			Untagged downstream frames are passed through the mapper transparently.
+//
+//		Dscp To P Bit Mapping
+//			NOTE – If certain bits in the DSCP field are to be ignored in the mapping process, the attribute
+//			should be provisioned such that all possible values of those bits produce the same P-bit
+//			mapping. This can be applied to the case where instead of full DSCP, the operator wishes to
+//			adopt the priority mechanism based on IP precedence, which needs only the three MSBs of the DSCP
+//			field.
+//
+//		Default P Bit Assumption
+//			Default P-bit assumption: This attribute is valid when the unmarked frame option attribute is
+//			set to 1. In its LSBs, the default Pbit assumption attribute contains the default PCP field to
+//			be assumed. The unmodified frame is then directed to the GEM IW TP indicated by the interwork TP
+//			pointer mappings. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Tp Type
+//			(R, W, setbycreate) (optional) (1 byte)
+//
+type Ieee8021PMapperServiceProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	ieee8021pmapperserviceprofileBME = &ManagedEntityDefinition{
+		Name:    "Ieee8021PMapperServiceProfile",
+		ClassID: 130,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFF8,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  Uint16Field("TpPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  Uint16Field("InterworkTpPointerForPBitPriority0", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint16Field("InterworkTpPointerForPBitPriority1", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4:  Uint16Field("InterworkTpPointerForPBitPriority2", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  Uint16Field("InterworkTpPointerForPBitPriority3", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6:  Uint16Field("InterworkTpPointerForPBitPriority4", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7:  Uint16Field("InterworkTpPointerForPBitPriority5", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8:  Uint16Field("InterworkTpPointerForPBitPriority6", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 8),
+			9:  Uint16Field("InterworkTpPointerForPBitPriority7", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 9),
+			10: ByteField("UnmarkedFrameOption", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 10),
+			11: MultiByteField("DscpToPBitMapping", 24, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 11),
+			12: ByteField("DefaultPBitAssumption", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 12),
+			13: ByteField("TpType", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 13),
+		},
+	}
+}
+
+// NewIeee8021PMapperServiceProfile (class ID 130 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 NewIeee8021PMapperServiceProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(ieee8021pmapperserviceprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/interworkingvccterminationpoint.go b/vendor/github.com/cboling/omci/generated/interworkingvccterminationpoint.go
new file mode 100644
index 0000000..c856c28
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/interworkingvccterminationpoint.go
@@ -0,0 +1,112 @@
+/*
+ * 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 InterworkingVccTerminationPointClassId ClassID = ClassID(14)
+
+var interworkingvccterminationpointBME *ManagedEntityDefinition
+
+// InterworkingVccTerminationPoint (class ID #14)
+//	An instance of this ME represents a point in the ONU where the IW of a service or underlying
+//	physical infrastructure (e.g., ADSL) to an ATM layer takes place. At this point, ATM cells are
+//	generated from a bit stream (e.g., Ethernet) or a bit stream is reconstructed from ATM cells.
+//
+//	Instances of this ME are created and deleted by the OLT.
+//
+//	Relationships
+//		One instance of this ME exists for each occurrence of transformation of a data stream into ATM
+//		cells and vice versa.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Vci Value
+//			VCI value:	This attribute identifies the VCI value associated with this IW VCC TP. (R, W,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Vp Network Ctp Connectivity Pointer
+//			VP network CTP connectivity pointer: This attribute points to the VP network CTP associated with
+//			this IW VCC TP. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Deprecated 1
+//			Deprecated 1: Not used; should be set to 0. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Deprecated 2
+//			Deprecated 2: Not used; should be set to 0. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Aal5 Profile Pointer
+//			AAL5 profile pointer: This attribute points to an instance of the AAL5 profile. (R, W,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Deprecated 3
+//			Deprecated 3: Not used; should be set to 0. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Aal Loopback Configuration
+//			The default value of this attribute is 0. (R, W) (mandatory) (1 byte)
+//
+//		Pptp Counter
+//			PPTP counter: This value is the number of instances of PPTP MEs associated with this instance of
+//			the IW VCC TP. (R) (optional) (1 byte)
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the ME is capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+type InterworkingVccTerminationPoint struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	interworkingvccterminationpointBME = &ManagedEntityDefinition{
+		Name:    "InterworkingVccTerminationPoint",
+		ClassID: 14,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF80,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("VciValue", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: Uint16Field("VpNetworkCtpConnectivityPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: ByteField("Deprecated1", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, true, 3),
+			4: Uint16Field("Deprecated2", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, true, 4),
+			5: Uint16Field("Aal5ProfilePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6: Uint16Field("Deprecated3", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, true, 6),
+			7: ByteField("AalLoopbackConfiguration", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8: ByteField("PptpCounter", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+			9: ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 9),
+		},
+	}
+}
+
+// NewInterworkingVccTerminationPoint (class ID 14 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 NewInterworkingVccTerminationPoint(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(interworkingvccterminationpointBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/iphostconfigdata.go b/vendor/github.com/cboling/omci/generated/iphostconfigdata.go
new file mode 100644
index 0000000..f41f3a9
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/iphostconfigdata.go
@@ -0,0 +1,150 @@
+/*
+ * 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 IpHostConfigDataClassId ClassID = ClassID(134)
+
+var iphostconfigdataBME *ManagedEntityDefinition
+
+// IpHostConfigData (class ID #134)
+//	The IP host config data configures IPv4 based services offered on the ONU. The ONU automatically
+//	creates instances of this ME if IP host services are available. A possible IPv6 stack is
+//	supported through the IPv6 host config data ME. In this clause, references to IP addresses are
+//	understood to mean IPv4.
+//
+//	Relationships
+//		An instance of this ME is associated with the ONU ME. Any number of TCP/UDP config data MEs can
+//		point to the IP host config data, to model any number of ports and protocols. Performance may be
+//		monitored through an implicitly linked IP host PM history data ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The ONU creates
+//			as many instances as there are independent IPv4 stacks on the ONU. To facilitate discovery, IP
+//			host config data MEs should be numbered from 0 upwards. The ONU should create IP(v4) and IPv6
+//			host config data MEs with separate ME IDs, such that other MEs can use a single TP type
+//			attribute to link with either. (R) (mandatory) (2 bytes)
+//
+//		Ip Options
+//			(R, W) (mandatory) (1 byte)
+//
+//		Mac Address
+//			MAC address: This attribute indicates the MAC address used by the IP node. (R) (mandatory)
+//			(6 bytes)
+//
+//		Onu Identifier
+//			Onu identifier: A unique ONU identifier string. If set to a non-null value, this string is used
+//			instead of the MAC address in retrieving dynamic host configuration protocol (DHCP) parameters.
+//			If the string is shorter than 25 characters, it must be null terminated. Its default value is 25
+//			null bytes. (R, W) (mandatory) (25 bytes)
+//
+//		Ip Address
+//			IP address:	The address used for IP host services; this attribute has the default value 0.
+//			(R, W) (mandatory) (4 bytes)
+//
+//		Mask
+//			Mask:	The subnet mask for IP host services; this attribute has the default value 0. (R, W)
+//			(mandatory) (4 bytes)
+//
+//		Gateway
+//			Gateway:	The default gateway address used for IP host services; this attribute has the default
+//			value 0. (R, W) (mandatory) (4 bytes)
+//
+//		Primary Dns
+//			Primary DNS: The address of the primary DNS server; this attribute has the default value 0.
+//			(R, W) (mandatory) (4 bytes)
+//
+//		Secondary Dns
+//			Secondary DNS: The address of the secondary DNS server; this attribute has the default value 0.
+//			(R, W) (mandatory) (4 bytes)
+//
+//		Current Address
+//			Current address: Current address of the IP host service. (R) (optional) (4 bytes)
+//
+//		Current Mask
+//			Current mask: Current subnet mask for the IP host service. (R) (optional) (4 bytes)
+//
+//		Current Gateway
+//			Current gateway: Current default gateway address for the IP host service. (R) (optional)
+//			(4 bytes)
+//
+//		Current Primary Dns
+//			Current primary DNS: Current primary DNS server address. (R) (optional) (4 bytes)
+//
+//		Current Secondary Dns
+//			Current secondary DNS: Current secondary DNS server address. (R) (optional) (4 bytes)
+//
+//		Domain Name
+//			Domain name: If DHCP indicates a domain name, it is presented here. If no domain name is
+//			indicated, this attribute is set to a null string. If the string is shorter than 25 bytes, it
+//			must be null terminated. The default value is 25 null bytes. (R) (mandatory) (25 bytes)
+//
+//		Host Name
+//			Host name:	If DHCP indicates a host name, it is presented here. If no host name is indicated,
+//			this attribute is set to a null string. If the string is shorter than 25 bytes, it must be null
+//			terminated. The default value is 25 null bytes. (R) (mandatory) (25 bytes)
+//
+//		Relay Agent Options
+//			2/3/4:atm/123.4567
+//
+type IpHostConfigData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	iphostconfigdataBME = &ManagedEntityDefinition{
+		Name:    "IpHostConfigData",
+		ClassID: 134,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("IpOptions", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2:  MultiByteField("MacAddress", 6, nil, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3:  MultiByteField("OnuIdentifier", 25, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4:  Uint32Field("IpAddress", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5:  Uint32Field("Mask", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6:  Uint32Field("Gateway", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7:  Uint32Field("PrimaryDns", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8:  Uint32Field("SecondaryDns", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
+			9:  Uint32Field("CurrentAddress", 0, mapset.NewSetWith(Read), true, false, true, false, 9),
+			10: Uint32Field("CurrentMask", 0, mapset.NewSetWith(Read), true, false, true, false, 10),
+			11: Uint32Field("CurrentGateway", 0, mapset.NewSetWith(Read), true, false, true, false, 11),
+			12: Uint32Field("CurrentPrimaryDns", 0, mapset.NewSetWith(Read), true, false, true, false, 12),
+			13: Uint32Field("CurrentSecondaryDns", 0, mapset.NewSetWith(Read), true, false, true, false, 13),
+			14: MultiByteField("DomainName", 25, nil, mapset.NewSetWith(Read), true, false, false, false, 14),
+			15: MultiByteField("HostName", 25, nil, mapset.NewSetWith(Read), true, false, false, false, 15),
+			16: Uint16Field("RelayAgentOptions", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 16),
+		},
+	}
+}
+
+// NewIpHostConfigData (class ID 134 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 NewIpHostConfigData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(iphostconfigdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/iphostperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/iphostperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..e3e05f6
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/iphostperformancemonitoringhistorydata.go
@@ -0,0 +1,110 @@
+/*
+ * 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 IpHostPerformanceMonitoringHistoryDataClassId ClassID = ClassID(135)
+
+var iphostperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// IpHostPerformanceMonitoringHistoryData (class ID #135)
+//	This ME collects PM data related to an IP host. Instances of this ME are created and deleted by
+//	the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the IP host config data or IPv6 host
+//		config data ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 IP host configuration data or
+//			IPv6 host configuration data ME. (R, set-by-create) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, set-by-create) (mandatory) (2 bytes)
+//
+//		Icmp Errors
+//			ICMP errors: This attribute counts ICMP errors received. (R) (mandatory) (4 bytes)
+//
+//		Dns Errors
+//			DNS errors:	This attribute counts DNS errors received. (R) (mandatory) (4 bytes)
+//
+//		Dhcp Timeouts
+//			DHCP timeouts:	This attribute counts DHCP timeouts. (R) (optional) (2 bytes)
+//
+//		Ip Address Conflict
+//			IP address conflict: This attribute is incremented whenever the ONU detects a conflicting IP
+//			address on the network. A conflicting IP address is one that has the same value as the one
+//			currently assigned to the ONU. (R) (optional) (2 bytes)
+//
+//		Out Of Memory
+//			Out of memory: This attribute is incremented whenever the ONU encounters an out of memory
+//			condition in the IP stack. (R) (optional) (2 bytes)
+//
+//		Internal Error
+//			Internal error: This attribute is incremented whenever the ONU encounters an internal error
+//			condition such as a driver interface failure in the IP stack. (R) (optional) (2 bytes)
+//
+type IpHostPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	iphostperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "IpHostPerformanceMonitoringHistoryData",
+		ClassID: 135,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("IcmpErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("DnsErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint16Field("DhcpTimeouts", 0, mapset.NewSetWith(Read), false, false, true, false, 5),
+			6: Uint16Field("IpAddressConflict", 0, mapset.NewSetWith(Read), false, false, true, false, 6),
+			7: Uint16Field("OutOfMemory", 0, mapset.NewSetWith(Read), false, false, true, false, 7),
+			8: Uint16Field("InternalError", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+		},
+	}
+}
+
+// NewIpHostPerformanceMonitoringHistoryData (class ID 135 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 NewIpHostPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(iphostperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/macbridgeconfigurationdata.go b/vendor/github.com/cboling/omci/generated/macbridgeconfigurationdata.go
new file mode 100644
index 0000000..7e39613
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/macbridgeconfigurationdata.go
@@ -0,0 +1,109 @@
+/*
+ * 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 MacBridgeConfigurationDataClassId ClassID = ClassID(46)
+
+var macbridgeconfigurationdataBME *ManagedEntityDefinition
+
+// MacBridgeConfigurationData (class ID #46)
+//	This ME organizes status data associated with a MAC bridge. The ONU automatically creates or
+//	deletes an instance of this ME upon the creation or deletion of a MAC bridge service profile.
+//
+//	Relationships
+//		This ME is associated with one instance of a MAC bridge service profile.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 service profile. (R)
+//			(mandatory) (2 bytes)
+//
+//		Bridge Mac Address
+//			Bridge MAC address: This attribute indicates the MAC address used by the bridge. The ONU sets
+//			this attribute to a value based on criteria beyond the scope of this Recommendation, e.g.,
+//			factory settings. (R) (mandatory) (6 bytes)
+//
+//		Bridge Priority
+//			Bridge priority: This attribute reports the priority of the bridge. The ONU copies this
+//			attribute from the priority attribute of the associated MAC bridge service profile. The value of
+//			this attribute changes with updates to the MAC bridge service profile priority attribute. (R)
+//			(mandatory) (2 bytes)
+//
+//		Designated Root
+//			Designated root: This attribute identifies the bridge at the root of the spanning tree. It
+//			comprises bridge priority (2 bytes) and MAC address (6 bytes). (R) (mandatory) (8 bytes)
+//
+//		Root Path Cost
+//			Root path cost: This attribute reports the cost of the best path to the root as seen from this
+//			bridge. Upon ME instantiation, the ONU sets this attribute to 0. (R) (mandatory) (4 bytes)
+//
+//		Bridge Port Count
+//			Bridge port count: This attribute records the number of ports linked to this bridge. (R)
+//			(mandatory) (1 byte)
+//
+//		Root Port Num
+//			Root port num: This attribute contains the port number that has the lowest cost from the bridge
+//			to the root bridge. The value 0 means that this bridge is itself the root. Upon ME
+//			instantiation, the ONU sets this attribute to 0. (R) (mandatory) (2 bytes)
+//
+//		Hello Time
+//			NOTE – [IEEE 802.1D] specifies the compatibility range for hello time to be 1..2 s.
+//
+//		Forward Delay
+//			Forward delay: This attribute is the forwarding delay time received from the designated root (in
+//			256ths of a second). Its range is 0x0400 to 0x1E00 (4..30 s) in accordance with [IEEE 802.1D].
+//			(R) (optional) (2 bytes)
+//
+type MacBridgeConfigurationData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	macbridgeconfigurationdataBME = &ManagedEntityDefinition{
+		Name:    "MacBridgeConfigurationData",
+		ClassID: 46,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: MultiByteField("BridgeMacAddress", 6, nil, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("BridgePriority", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3: Uint64Field("DesignatedRoot", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("RootPathCost", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: ByteField("BridgePortCount", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint16Field("RootPortNum", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint16Field("HelloTime", 0, mapset.NewSetWith(Read), false, false, true, false, 7),
+			8: Uint16Field("ForwardDelay", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+		},
+	}
+}
+
+// NewMacBridgeConfigurationData (class ID 46 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 NewMacBridgeConfigurationData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(macbridgeconfigurationdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/macbridgeperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/macbridgeperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..96265e2
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/macbridgeperformancemonitoringhistorydata.go
@@ -0,0 +1,90 @@
+/*
+ * 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 MacBridgePerformanceMonitoringHistoryDataClassId ClassID = ClassID(51)
+
+var macbridgeperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// MacBridgePerformanceMonitoringHistoryData (class ID #51)
+//	This ME collects PM data associated with a MAC bridge. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		This ME is associated with an instance of a MAC bridge service profile.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 service profile. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. Since no threshold value attribute number exceeds 7, a threshold data 2
+//			ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Bridge Learning Entry Discard Count
+//			Bridge learning entry discard count: This attribute counts forwarding database entries that have
+//			been or would have been learned, but were discarded or replaced due to a lack of space in the
+//			database table. When used with the MAC learning depth attribute of the MAC bridge service
+//			profile, the bridge learning entry discard count may be particularly useful in detecting MAC
+//			spoofing attempts. (R) (mandatory) (4 bytes)
+//
+type MacBridgePerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	macbridgeperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "MacBridgePerformanceMonitoringHistoryData",
+		ClassID: 51,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XE000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("BridgeLearningEntryDiscardCount", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+		},
+	}
+}
+
+// NewMacBridgePerformanceMonitoringHistoryData (class ID 51 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 NewMacBridgePerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(macbridgeperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/macbridgeportbridgetabledata.go b/vendor/github.com/cboling/omci/generated/macbridgeportbridgetabledata.go
new file mode 100644
index 0000000..a632d59
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/macbridgeportbridgetabledata.go
@@ -0,0 +1,73 @@
+/*
+ * 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 MacBridgePortBridgeTableDataClassId ClassID = ClassID(50)
+
+var macbridgeportbridgetabledataBME *ManagedEntityDefinition
+
+// MacBridgePortBridgeTableData (class ID #50)
+//	This ME reports status data associated with a bridge port. The ONU automatically creates or
+//	deletes an instance of this ME upon the creation or deletion of a MAC bridge port configuration
+//	data.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of a MAC bridge port configuration data
+//		ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 ME. (R) (mandatory) (2 bytes)
+//
+//		Bridge Table
+//			Upon ME instantiation, this attribute is an empty list. (R) (mandatory) (8 * M bytes, where M is
+//			the number of entries in the list.)
+//
+type MacBridgePortBridgeTableData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	macbridgeportbridgetabledataBME = &ManagedEntityDefinition{
+		Name:    "MacBridgePortBridgeTableData",
+		ClassID: 50,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			GetNext,
+		),
+		AllowedAttributeMask: 0X8000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: TableField("BridgeTable", TableInfo{0, 8}, mapset.NewSetWith(Read), false, false, false, 1),
+		},
+	}
+}
+
+// NewMacBridgePortBridgeTableData (class ID 50 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 NewMacBridgePortBridgeTableData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(macbridgeportbridgetabledataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/macbridgeportconfigurationdata.go b/vendor/github.com/cboling/omci/generated/macbridgeportconfigurationdata.go
new file mode 100644
index 0000000..7054adb
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/macbridgeportconfigurationdata.go
@@ -0,0 +1,134 @@
+/*
+ * 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 MacBridgePortConfigurationDataClassId ClassID = ClassID(47)
+
+var macbridgeportconfigurationdataBME *ManagedEntityDefinition
+
+// MacBridgePortConfigurationData (class ID #47)
+//	This ME models a port on a MAC bridge. Instances of this ME are created and deleted by the OLT.
+//
+//	Relationships
+//		An instance of this ME is linked to an instance of the MAC bridge service profile. Additional
+//		bridge port control capabilities are provided by implicitly linked instances of some or all of:////		•	MAC bridge port filter table data;////		•	MAC bridge port filter pre-assign table;////		•	VLAN tagging filter data;////		•	Dot1 rate limiter.////		Real-time status of the bridge port is provided by implicitly linked instances of:////		•	MAC bridge port designation data;////		•	MAC bridge port bridge table data;////		•	Multicast subscriber monitor.////		Bridge port PM collection is provided by implicitly linked instances of:////		•	MAC bridge port PM history data;////		•	Ethernet frame PM history data upstream and downstream;////		•	Ethernet frame extended PM (preferred).
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Bridge Id Pointer
+//			Bridge ID pointer: This attribute points to an instance of the MAC bridge service profile.
+//			(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Port Num
+//			Port num:	This attribute is the bridge port number. It must be unique among all ports associated
+//			with a particular MAC bridge service profile. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Tp Type
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Tp Pointer
+//			NOTE 1 – When the TP type is very high-speed digital subscriber line (VDSL) or xDSL, the two
+//			MSBs may be used to indicate a bearer channel.
+//
+//		Port Priority
+//			Port priority:	This attribute denotes the priority of the port for use in (rapid) spanning tree
+//			algorithms. The range is 0..255. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Port Path Cost
+//			Port path cost: This attribute specifies the contribution of the port to the path cost towards
+//			the spanning tree root bridge. The range is 1..65535. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Port Spanning Tree Ind
+//			Port spanning tree ind: The Boolean value true enables (R)STP LAN topology change detection at
+//			this port. The value false disables topology change detection. (R, W, setbycreate) (mandatory)
+//			(1 byte)
+//
+//		Deprecated 1
+//			Deprecated 1: This attribute is not used. If present, it should be ignored by both the ONU and
+//			the OLT, except as necessary to comply with OMCI message definitions. (R, W, setbycreate)
+//			(optional) (1 byte)
+//
+//		Deprecated 2
+//			Deprecated 2: This attribute is not used. If present, it should be ignored by both the ONU and
+//			the OLT, except as necessary to comply with OMCI message definitions. (R, W, setbycreate)
+//			(1 byte) (optional)
+//
+//		Port Mac Address
+//			Port MAC address: If the TP associated with this port has a MAC address, this attribute
+//			specifies it. (R) (optional) (6 bytes)
+//
+//		Outbound Td Pointer
+//			Outbound TD pointer: This attribute points to a traffic descriptor that limits the traffic rate
+//			leaving the MAC bridge. (R, W) (optional) (2 byte)
+//
+//		Inbound Td Pointer
+//			Inbound TD pointer: This attribute points to a traffic descriptor that limits the traffic rate
+//			entering the MAC bridge. (R, W) (optional) (2 byte)
+//
+//		Mac Learning Depth
+//			NOTE 2 – If this attribute is not zero, its value overrides the value set in the MAC learning
+//			depth attribute of the MAC bridge service profile.
+//
+type MacBridgePortConfigurationData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	macbridgeportconfigurationdataBME = &ManagedEntityDefinition{
+		Name:    "MacBridgePortConfigurationData",
+		ClassID: 47,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFF8,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  Uint16Field("BridgeIdPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  ByteField("PortNum", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  ByteField("TpType", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4:  Uint16Field("TpPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  Uint16Field("PortPriority", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 5),
+			6:  Uint16Field("PortPathCost", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7:  ByteField("PortSpanningTreeInd", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8:  ByteField("Deprecated1", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, true, 8),
+			9:  ByteField("Deprecated2", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, true, 9),
+			10: MultiByteField("PortMacAddress", 6, nil, mapset.NewSetWith(Read), false, false, true, false, 10),
+			11: Uint16Field("OutboundTdPointer", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
+			12: Uint16Field("InboundTdPointer", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+			13: ByteField("MacLearningDepth", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 13),
+		},
+	}
+}
+
+// NewMacBridgePortConfigurationData (class ID 47 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 NewMacBridgePortConfigurationData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(macbridgeportconfigurationdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/macbridgeportdesignationdata.go b/vendor/github.com/cboling/omci/generated/macbridgeportdesignationdata.go
new file mode 100644
index 0000000..bfcf8b2
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/macbridgeportdesignationdata.go
@@ -0,0 +1,77 @@
+/*
+ * 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 MacBridgePortDesignationDataClassId ClassID = ClassID(48)
+
+var macbridgeportdesignationdataBME *ManagedEntityDefinition
+
+// MacBridgePortDesignationData (class ID #48)
+//	This ME records data associated with a bridge port. The ONU automatically creates or deletes an
+//	instance of this managed entity upon the creation or deletion of a MAC bridge port configuration
+//	data ME.
+//
+//	Relationships
+//		An instance of this managed entity is associated with one MAC bridge port configuration data ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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. (R) (mandatory) (2 bytes)
+//
+//		Designated Bridge Root Cost Port
+//			Upon ME instantiation, the ONU sets this attribute to 0. (R) (mandatory) (24 bytes)
+//
+//		Port State
+//			The value (R)stp_off is introduced to denote the port status where the (rapid) spanning tree
+//			protocol has been disabled by setting the port spanning tree ind attribute of the MAC bridge
+//			port configuration data to false, and the Ethernet link state is up. This value distinguishes
+//			whether frame forwarding is under the control of (R)STP.
+//
+type MacBridgePortDesignationData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	macbridgeportdesignationdataBME = &ManagedEntityDefinition{
+		Name:    "MacBridgePortDesignationData",
+		ClassID: 48,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+		),
+		AllowedAttributeMask: 0XC000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: MultiByteField("DesignatedBridgeRootCostPort", 24, nil, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: ByteField("PortState", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+		},
+	}
+}
+
+// NewMacBridgePortDesignationData (class ID 48 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 NewMacBridgePortDesignationData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(macbridgeportdesignationdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/macbridgeportfilterpre-assigntable.go b/vendor/github.com/cboling/omci/generated/macbridgeportfilterpre-assigntable.go
new file mode 100644
index 0000000..2409ab0
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/macbridgeportfilterpre-assigntable.go
@@ -0,0 +1,112 @@
+/*
+ * 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 MacBridgePortFilterPreAssignTableClassId ClassID = ClassID(79)
+
+var macbridgeportfilterpreassigntableBME *ManagedEntityDefinition
+
+// MacBridgePortFilterPreAssignTable (class ID #79)
+//	This ME provides an alternate approach to DA filtering from that supported through the MAC
+//	bridge port filter table data ME. This alternate approach is useful when all groups of addresses
+//	are stored beforehand in the ONU, and the MAC bridge port filter pre-assign table ME designates
+//	which groups are valid or invalid for filtering. On a circuit pack in which all groups of
+//	addresses are pre-assigned and stored locally, the ONU creates or deletes an instance of this ME
+//	automatically upon creation or deletion of a MAC bridge port configuration data ME.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of a MAC bridge port configuration data
+//		ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 ME. (R) (mandatory) (2 bytes)
+//
+//		Ipv4 Multicast Filtering
+//			IPv4 multicast filtering:	(R, W) (mandatory) (1 byte)
+//
+//		Ipv6 Multicast Filtering
+//			IPv6 multicast filtering:	(R, W) (mandatory) (1 byte)
+//
+//		Ipv4 Broadcast Filtering
+//			IPv4 broadcast filtering:	(R, W) (mandatory) (1 byte)
+//
+//		Rarp Filtering
+//			RARP filtering:	(R, W) (mandatory) (1 byte)
+//
+//		Ipx Filtering
+//			IPX filtering:		(R, W) (mandatory) (1 byte)
+//
+//		Netbeui Filtering
+//			NetBEUI filtering:	(R, W) (mandatory) (1 byte)
+//
+//		Appletalk Filtering
+//			AppleTalk filtering:	(R, W) (mandatory) (1 byte)
+//
+//		Bridge Management Information Filtering
+//			2	Addresses from 01.80.C2.00.00.20 to 01.80.C2.00.00.2F are used for generic attribute
+//			registration protocol (GARP) applications.
+//
+//		Arp Filtering
+//			ARP filtering:	(R, W) (mandatory) (1 byte)
+//
+//		Point_To_Point Protocol Over Ethernet Pppoe Broadcast Filtering
+//			Point-to-point protocol over Ethernet (PPPoE) broadcast filtering:	(R, W) (mandatory) (1 byte)
+//
+type MacBridgePortFilterPreAssignTable struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	macbridgeportfilterpreassigntableBME = &ManagedEntityDefinition{
+		Name:    "MacBridgePortFilterPreAssignTable",
+		ClassID: 79,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFC0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("Ipv4MulticastFiltering", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2:  ByteField("Ipv6MulticastFiltering", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3:  ByteField("Ipv4BroadcastFiltering", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4:  ByteField("RarpFiltering", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5:  ByteField("IpxFiltering", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6:  ByteField("NetbeuiFiltering", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7:  ByteField("AppletalkFiltering", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8:  ByteField("BridgeManagementInformationFiltering", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
+			9:  ByteField("ArpFiltering", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 9),
+			10: ByteField("PointToPointProtocolOverEthernetPppoeBroadcastFiltering", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 10),
+		},
+	}
+}
+
+// NewMacBridgePortFilterPreAssignTable (class ID 79 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 NewMacBridgePortFilterPreAssignTable(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(macbridgeportfilterpreassigntableBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/macbridgeportfiltertabledata.go b/vendor/github.com/cboling/omci/generated/macbridgeportfiltertabledata.go
new file mode 100644
index 0000000..b542f48
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/macbridgeportfiltertabledata.go
@@ -0,0 +1,75 @@
+/*
+ * 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 MacBridgePortFilterTableDataClassId ClassID = ClassID(49)
+
+var macbridgeportfiltertabledataBME *ManagedEntityDefinition
+
+// MacBridgePortFilterTableData (class ID #49)
+//	This ME organizes data associated with a bridge port. The ONU automatically creates or deletes
+//	an instance of this ME upon the creation or deletion of a MAC bridge port configuration data ME.
+//
+//	NOTE – The OLT should disable the learning mode in the MAC bridge service profile before writing
+//	to the MAC filter table.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of a MAC bridge port configuration data
+//		ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 ME. (R) (mandatory) (2 bytes)
+//
+//		Mac Filter Table
+//			(R, W) (Mandatory) (8N bytes, where N is the number of entries in the list)
+//
+type MacBridgePortFilterTableData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	macbridgeportfiltertabledataBME = &ManagedEntityDefinition{
+		Name:    "MacBridgePortFilterTableData",
+		ClassID: 49,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			GetNext,
+			Set,
+		),
+		AllowedAttributeMask: 0X8000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: TableField("MacFilterTable", TableInfo{0, 8}, mapset.NewSetWith(Read, Write), false, false, false, 1),
+		},
+	}
+}
+
+// NewMacBridgePortFilterTableData (class ID 49 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 NewMacBridgePortFilterTableData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(macbridgeportfiltertabledataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/macbridgeporticmpv6processpre-assigntable.go b/vendor/github.com/cboling/omci/generated/macbridgeporticmpv6processpre-assigntable.go
new file mode 100644
index 0000000..83114d2
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/macbridgeporticmpv6processpre-assigntable.go
@@ -0,0 +1,111 @@
+/*
+ * 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 MacBridgePortIcmpv6ProcessPreAssignTableClassId ClassID = ClassID(348)
+
+var macbridgeporticmpv6processpreassigntableBME *ManagedEntityDefinition
+
+// MacBridgePortIcmpv6ProcessPreAssignTable (class ID #348)
+//	This ME provides an approach to ICMPv6 message processing configuration to those ONUs that
+//	support IPv6 awareness. For every message, the MAC bridge port ICMPv6 process pre-assign table
+//	can designate a forward, discard or snoop operation. The ONU creates or deletes an instance of
+//	this ME automatically upon creation or deletion of a MAC bridge port configuration data ME.
+//
+//	The MAC bridge port ICMPv6 process pre-assign table ME filters layer 2 traffic between the UNI
+//	and ANI. The operation of this ME is completely independent of the operation and traffic
+//	generated or received by a possible IPv6 host config data ME.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of a MAC bridge port configuration data
+//		ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 ME. (R) (mandatory) (2 bytes)
+//
+//		Icmpv6 Error Messages Processing
+//			ICMPv6 error messages processing:	(R, W) (mandatory) (1 byte)
+//
+//		Icmpv6 Informational Messages Processing
+//			ICMPv6 informational messages processing:	(R, W) (mandatory) (1 byte)
+//
+//		Router Solicitation Processing
+//			Router solicitation processing:	(R, W) (mandatory) (1 byte)
+//
+//		Router Advertisement Processing
+//			Router advertisement processing:	(R, W) (mandatory) (1 byte)
+//
+//		Neighbour Solicitation Processing
+//			Neighbour solicitation processing:	(R, W) (mandatory) (1 byte)
+//
+//		Neighbour Advertisement Processing
+//			Neighbour advertisement processing:	(R, W) (mandatory) (1 byte)
+//
+//		Redirect Processing
+//			Redirect processing:	(R, W) (mandatory) (1 byte)
+//
+//		Multicast Listener Query Processing
+//			NOTE – If the ONU participates in multicast services, MLD queries should be controlled through
+//			the multicast operations profile ME. In such a case, it is strongly recommended not to provision
+//			the downstream direction of the multicast listener query processing attribute to any value other
+//			than forwarding.
+//
+//		Unknown Icmpv6 Processing
+//			Unknown ICMPv6 processing:	(R, W) (mandatory) (1 byte)
+//
+type MacBridgePortIcmpv6ProcessPreAssignTable struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	macbridgeporticmpv6processpreassigntableBME = &ManagedEntityDefinition{
+		Name:    "MacBridgePortIcmpv6ProcessPreAssignTable",
+		ClassID: 348,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+		),
+		AllowedAttributeMask: 0XFF80,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: ByteField("Icmpv6ErrorMessagesProcessing", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2: ByteField("Icmpv6InformationalMessagesProcessing", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3: ByteField("RouterSolicitationProcessing", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4: ByteField("RouterAdvertisementProcessing", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5: ByteField("NeighbourSolicitationProcessing", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6: ByteField("NeighbourAdvertisementProcessing", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7: ByteField("RedirectProcessing", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8: ByteField("MulticastListenerQueryProcessing", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
+			9: ByteField("UnknownIcmpv6Processing", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 9),
+		},
+	}
+}
+
+// NewMacBridgePortIcmpv6ProcessPreAssignTable (class ID 348 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 NewMacBridgePortIcmpv6ProcessPreAssignTable(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(macbridgeporticmpv6processpreassigntableBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/macbridgeportperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/macbridgeportperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..d1f43e8
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/macbridgeportperformancemonitoringhistorydata.go
@@ -0,0 +1,107 @@
+/*
+ * 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 MacBridgePortPerformanceMonitoringHistoryDataClassId ClassID = ClassID(52)
+
+var macbridgeportperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// MacBridgePortPerformanceMonitoringHistoryData (class ID #52)
+//	This ME collects PM data associated with a MAC bridge port. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of a MAC bridge port configuration data
+//		ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 ME. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Forwarded Frame Counter
+//			Forwarded frame counter: This attribute counts frames transmitted successfully on this port. (R)
+//			(mandatory) (4 bytes)
+//
+//		Delay Exceeded Discard Counter
+//			Delay exceeded discard counter: This attribute counts frames discarded on this port because
+//			transmission was delayed. (R) (mandatory) (4 bytes)
+//
+//		Maximum Transmission U Nit Mtu Exceeded Discard Counter
+//			Maximum transmission unit (MTU) exceeded discard counter: This attribute counts frames discarded
+//			on this port because the MTU was exceeded. (R) (mandatory) (4 bytes)
+//
+//		Received Frame Counter
+//			Received frame counter: This attribute counts frames received on this port. (R) (mandatory)
+//			(4 bytes)
+//
+//		Received And Discarded Counter
+//			Received and discarded counter: This attribute counts frames received on this port that were
+//			discarded due to errors. (R) (mandatory) (4 bytes)
+//
+type MacBridgePortPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	macbridgeportperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "MacBridgePortPerformanceMonitoringHistoryData",
+		ClassID: 52,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFE00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("ForwardedFrameCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("DelayExceededDiscardCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("MaximumTransmissionUNitMtuExceededDiscardCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint32Field("ReceivedFrameCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint32Field("ReceivedAndDiscardedCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+		},
+	}
+}
+
+// NewMacBridgePortPerformanceMonitoringHistoryData (class ID 52 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 NewMacBridgePortPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(macbridgeportperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/macbridgeserviceprofile.go b/vendor/github.com/cboling/omci/generated/macbridgeserviceprofile.go
new file mode 100644
index 0000000..f9e8c6c
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/macbridgeserviceprofile.go
@@ -0,0 +1,128 @@
+/*
+ * 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 MacBridgeServiceProfileClassId ClassID = ClassID(45)
+
+var macbridgeserviceprofileBME *ManagedEntityDefinition
+
+// MacBridgeServiceProfile (class ID #45)
+//	This ME models a MAC bridge in its entirety; any number of ports may be associated with the
+//	bridge through pointers to the MAC bridge service profile ME. Instances of this ME are created
+//	and deleted by the OLT.
+//
+//	Relationships
+//		Bridge ports are modelled by MAC bridge port configuration data MEs, any number of which can
+//		point to a MAC bridge service profile. The real-time status of the bridge is available from an
+//		implicitly linked MAC bridge configuration data ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The first byte
+//			is the slot ID. In an integrated ONU, this value is 0. The second byte is the bridge group ID.
+//			(R, setbycreate) (mandatory) (2 bytes)
+//
+//		Spanning Tree Ind
+//			Spanning tree ind: The Boolean value true specifies that a spanning tree algorithm is enabled.
+//			The value false disables (rapid) spanning tree. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Learning Ind
+//			Learning ind: The Boolean value true specifies that bridge learning functions are enabled. The
+//			value false disables bridge learning. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Port Bridging Ind
+//			Port bridging ind: The Boolean value true specifies that bridging between UNI ports is enabled.
+//			The value false disables local bridging. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Priority
+//			Priority:	This attribute specifies the bridge priority in the range 0..65535. The value of this
+//			attribute is copied to the bridge priority attribute of the associated MAC bridge configuration
+//			data ME. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Max Age
+//			Max age:	This attribute specifies the maximum age (in 256ths of a second) of received protocol
+//			information before its entry in the spanning tree listing is discarded. The range is 0x0600 to
+//			0x2800 (6..40 s) in accordance with [IEEE 802.1D]. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Hello Time
+//			NOTE – [IEEE 802.1D] specifies the compatibility range for hello time to be 1..2 s.
+//
+//		Forward Delay
+//			Forward delay: This attribute specifies the forwarding delay (in 256ths of a second) when the
+//			bridge acts as the root. The range is 0x0400 to 0x1E00 (4..30 s) in accordance with [IEEE
+//			802.1D]. (R, W, set-by-create) (mandatory) (2 bytes)
+//
+//		Unknown Mac Address Discard
+//			Unknown MAC address discard: The Boolean value true specifies that MAC frames with unknown DAs
+//			be discarded. The value false specifies that such frames be forwarded to all allowed ports.
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Mac Learning Depth
+//			MAC learning depth: This attribute specifies the maximum number of UNI MAC addresses to be
+//			learned by the bridge. The default value 0 specifies that there is no administratively imposed
+//			limit. (R, W, setbycreate) (optional) (1 byte)
+//
+//		Dynamic Filtering Ageing Time
+//			Dynamic filtering ageing time: This attribute specifies the age of dynamic filtering entries in
+//			the bridge database, after which unrefreshed entries are discarded. In accordance with clause
+//			7.9.2 of [IEEE 802.1D] and clause 8.8.3 of [IEEE 802.1Q], the range is 10..1 000 000 s, with a
+//			resolution of 1 s and a default of 300 s. The value 0 specifies that the ONU uses its internal
+//			default. (R, W, set-by-create) (optional) (4 bytes)
+//
+type MacBridgeServiceProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	macbridgeserviceprofileBME = &ManagedEntityDefinition{
+		Name:    "MacBridgeServiceProfile",
+		ClassID: 45,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFC0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("SpanningTreeInd", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  ByteField("LearningInd", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  ByteField("PortBridgingInd", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4:  Uint16Field("Priority", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  Uint16Field("MaxAge", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6:  Uint16Field("HelloTime", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7:  Uint16Field("ForwardDelay", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8:  ByteField("UnknownMacAddressDiscard", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 8),
+			9:  ByteField("MacLearningDepth", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 9),
+			10: Uint32Field("DynamicFilteringAgeingTime", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 10),
+		},
+	}
+}
+
+// NewMacBridgeServiceProfile (class ID 45 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 NewMacBridgeServiceProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(macbridgeserviceprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/managedentityme.go b/vendor/github.com/cboling/omci/generated/managedentityme.go
new file mode 100644
index 0000000..4f71571
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/managedentityme.go
@@ -0,0 +1,105 @@
+/*
+ * 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 ManagedEntityMeClassId ClassID = ClassID(288)
+
+var managedentitymeBME *ManagedEntityDefinition
+
+// ManagedEntityMe (class ID #288)
+//	The ME describes the details of each ME that is supported by the ONU. This ME is not included in
+//	an MIB upload.
+//
+//	Relationships
+//		One or more MEs are related to the OMCI object entity.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. Its value is
+//			equal to the ME type value, and is the same as the code found in the ME type table attribute of
+//			the OMCI ME and Table 11.2.41. (R) (mandatory) (2 bytes)
+//
+//		Name
+//			Name:	This attribute contains a 25 byte ASCII coded mnemonic tag for the ME type. Strings
+//			shorter than 25 bytes are padded with null characters. (R) (mandatory) (25 bytes)
+//
+//		Attributes Table
+//			NOTE – The ME ID attribute is not included in the list, since the type of this attribute is
+//			fixed.
+//
+//		Access
+//			(R) (mandatory) (1 byte)
+//
+//		Alarms Table
+//			Alarms table: This attribute lists the alarm codes that are supported. (R) (mandatory) (Y bytes,
+//			where Y is the number of entries in the table.)
+//
+//		Avcs Table
+//			AVCs table:	This attribute lists the AVCs that are supported. (R) (mandatory) (Z bytes, where Z
+//			is the number of entries in the table.)
+//
+//		Actions
+//			Actions:	This attribute lists the action codes supported on this object, formatted as a bit map.
+//			The action codes are the MTs from Table 11.2.2-1. The LSB represents action 0, and so on. (R)
+//			(mandatory) (4 bytes)
+//
+//		Instances Table
+//			Instances table: This attribute is a list of pointers to all instances of this ME. (R)
+//			(mandatory) (2 * V bytes, where V is the number of entries in the table.)
+//
+//		Support
+//			(R) (mandatory) (1 byte)
+//
+type ManagedEntityMe struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	managedentitymeBME = &ManagedEntityDefinition{
+		Name:    "ManagedEntityMe",
+		ClassID: 288,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			GetNext,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: MultiByteField("Name", 25, nil, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: TableField("AttributesTable", TableInfo{0, 1}, mapset.NewSetWith(Read), false, false, false, 2),
+			3: ByteField("Access", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: TableField("AlarmsTable", TableInfo{0, 1}, mapset.NewSetWith(Read), false, false, false, 4),
+			5: TableField("AvcsTable", TableInfo{0, 1}, mapset.NewSetWith(Read), false, false, false, 5),
+			6: Uint32Field("Actions", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: TableField("InstancesTable", TableInfo{0, 1}, mapset.NewSetWith(Read), false, false, false, 7),
+			8: ByteField("Support", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+		},
+	}
+}
+
+// NewManagedEntityMe (class ID 288 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 NewManagedEntityMe(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(managedentitymeBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/me.go b/vendor/github.com/cboling/omci/generated/me.go
new file mode 100644
index 0000000..131522f
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/me.go
@@ -0,0 +1,262 @@
+/*
+ * 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 (
+	"encoding/binary"
+	"errors"
+	"fmt"
+	"github.com/deckarep/golang-set"
+	"github.com/google/gopacket"
+)
+
+type ManagedEntity struct {
+	definition    *ManagedEntityDefinition
+	attributeMask uint16
+	attributes    AttributeValueMap
+}
+
+// String provides a simple string that describes this struct
+func (entity *ManagedEntity) String() string {
+	return fmt.Sprintf("ManagedEntity: %v, EntityID: (%d/%#x): Attributes: %v",
+		entity.GetClassID(), entity.GetEntityID(), entity.GetEntityID(), entity.attributes)
+}
+
+func NewManagedEntity(definition *ManagedEntityDefinition, params ...ParamData) (*ManagedEntity, OmciErrors) {
+	entity := &ManagedEntity{
+		definition: definition,
+		attributes: make(map[string]interface{}),
+	}
+	if params != nil {
+		err := entity.setAttributes(params...)
+		if err != nil {
+			return nil, err
+		}
+	}
+	return entity, nil
+}
+
+func (entity *ManagedEntity) GetManagedEntityDefinition() *ManagedEntityDefinition {
+	return entity.definition
+}
+
+func (entity *ManagedEntity) SetManagedEntityDefinition(def *ManagedEntityDefinition) {
+	entity.definition = def
+}
+
+func (entity *ManagedEntity) GetName() string {
+	return entity.definition.GetName()
+}
+
+func (entity *ManagedEntity) GetClassID() ClassID {
+	return entity.definition.GetClassID()
+}
+
+func (entity *ManagedEntity) GetMessageTypes() mapset.Set {
+	return entity.definition.GetMessageTypes()
+}
+
+func (entity *ManagedEntity) GetAllowedAttributeMask() uint16 {
+	return entity.definition.GetAllowedAttributeMask()
+}
+
+func (entity *ManagedEntity) GetAttributeDefinitions() *AttributeDefinitionMap {
+	return entity.definition.GetAttributeDefinitions()
+}
+
+func (entity *ManagedEntity) DecodeAttributes(mask uint16, data []byte, p gopacket.PacketBuilder, msgType byte) (AttributeValueMap, error) {
+	return entity.definition.DecodeAttributes(mask, data, p, msgType)
+}
+
+func (entity *ManagedEntity) SerializeAttributes(attr AttributeValueMap, mask uint16,
+	b gopacket.SerializeBuffer, msgType byte, bytesAvailable int) error {
+	return entity.definition.SerializeAttributes(attr, mask, b, msgType, bytesAvailable)
+}
+
+func (entity *ManagedEntity) GetEntityID() uint16 {
+	if eid, err := entity.GetAttributeByIndex(0); err == nil {
+		return eid.(uint16)
+	}
+	return 0
+}
+
+func (entity *ManagedEntity) SetEntityID(eid uint16) error {
+	return entity.SetAttributeByIndex(0, eid)
+}
+
+func (entity *ManagedEntity) GetAttributeMask() uint16 {
+	return entity.attributeMask
+}
+
+func (entity *ManagedEntity) GetAttributeValueMap() *AttributeValueMap {
+	return &entity.attributes
+}
+
+func (entity *ManagedEntity) GetAttribute(name string) (interface{}, error) {
+	value, ok := entity.attributes[name]
+	if !ok {
+		return 0, errors.New(fmt.Sprintf("attribute '%v' not found", name))
+	}
+	return value, nil
+}
+
+func (entity *ManagedEntity) GetAttributeByIndex(index uint) (interface{}, error) {
+	if len(entity.attributes) == 0 {
+		return nil, errors.New("attributes have already been set")
+	}
+	if _, ok := entity.definition.AttributeDefinitions[index]; !ok {
+		return nil, errors.New(fmt.Sprintf("invalid attribute index: %d, should be 0..%d",
+			index, len(entity.definition.AttributeDefinitions)-1))
+	}
+	return entity.GetAttribute(entity.definition.AttributeDefinitions[index].Name)
+}
+
+func (entity *ManagedEntity) setAttributes(params ...ParamData) OmciErrors {
+	if entity.attributes == nil {
+		entity.attributes = make(map[string]interface{})
+	} else if len(entity.attributes) > 0 {
+		return NewNonStatusError("attributes have already been set")
+	}
+	eidName := entity.definition.AttributeDefinitions[0].Name
+	if len(params) == 0 {
+		entity.attributes[eidName] = uint16(0)
+		return nil
+	}
+	entity.attributes[eidName] = params[0].EntityID
+
+	for name, value := range params[0].Attributes {
+		if name == eidName {
+			continue
+		}
+		if err := entity.SetAttribute(name, value); err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
+func (entity *ManagedEntity) SetAttribute(name string, value interface{}) OmciErrors {
+	attrDef, err := GetAttributeDefinitionByName(entity.definition.GetAttributeDefinitions(), name)
+	if err != nil {
+		return err
+	} else if entity.attributes == nil {
+		entity.attributes = make(map[string]interface{})
+	}
+	mask := uint16(1 << (16 - attrDef.GetIndex()))
+	// check any constraints
+	if constraintCheck := attrDef.GetConstraints(); constraintCheck != nil {
+		err = constraintCheck(value)
+		if err != nil {
+			return NewParameterError(mask, err)
+		}
+	}
+	entity.attributes[name] = value
+	entity.attributeMask |= mask
+	return nil
+}
+
+func (entity *ManagedEntity) SetAttributeByIndex(index uint, value interface{}) error {
+	attrDef, ok := entity.definition.AttributeDefinitions[index]
+	if !ok {
+		return errors.New(fmt.Sprintf("invalid attribute index: %d, should be 0..%d",
+			index, len(entity.definition.AttributeDefinitions)-1))
+	} else if entity.attributes == nil {
+		entity.attributes = make(map[string]interface{})
+	}
+	mask := uint16(1 << (16 - attrDef.GetIndex()))
+	// check any constraints
+	if constraintCheck := attrDef.GetConstraints(); constraintCheck != nil {
+		err := constraintCheck(value)
+		if err != nil {
+			return NewParameterError(mask, err)
+		}
+	}
+	entity.attributes[attrDef.Name] = value
+	entity.attributeMask |= mask
+	return nil
+}
+
+func (entity *ManagedEntity) DeleteAttribute(name string) error {
+	attrDef, err := GetAttributeDefinitionByName(entity.definition.GetAttributeDefinitions(), name)
+	if err != nil {
+		return err
+	}
+	if entity.attributes != nil {
+		delete(entity.attributes, name)
+		entity.attributeMask &= ^uint16(1 << (16 - attrDef.GetIndex()))
+	}
+	return nil
+}
+
+func (entity *ManagedEntity) DeleteAttributeByIndex(index uint) error {
+	attrDef, ok := entity.definition.AttributeDefinitions[index]
+	if !ok {
+		return errors.New(fmt.Sprintf("invalid attribute index: %d, should be 0..%d",
+			index, len(entity.definition.AttributeDefinitions)-1))
+	}
+	if entity.attributes != nil {
+		delete(entity.attributes, attrDef.Name)
+		entity.attributeMask &= ^uint16(1 << (16 - attrDef.GetIndex()))
+	}
+	return nil
+}
+
+func (entity *ManagedEntity) DecodeFromBytes(data []byte, p gopacket.PacketBuilder, msgType byte) error {
+	if len(data) < 6 {
+		p.SetTruncated()
+		return errors.New("frame too small")
+	}
+	classID := ClassID(binary.BigEndian.Uint16(data[0:2]))
+	entityID := binary.BigEndian.Uint16(data[2:4])
+	parameters := ParamData{EntityID: entityID}
+
+	meDefinition, omciErr := LoadManagedEntityDefinition(classID, parameters)
+	if omciErr != nil {
+		return omciErr.GetError()
+	}
+	entity.definition = meDefinition.definition
+	entity.attributeMask = binary.BigEndian.Uint16(data[4:6])
+	entity.attributes = make(map[string]interface{})
+	entity.SetEntityID(entityID)
+	packetAttributes, err := entity.DecodeAttributes(entity.GetAttributeMask(), data[6:], p, msgType)
+	if err != nil {
+		return err
+	}
+	for name, value := range packetAttributes {
+		entity.attributes[name] = value
+	}
+	return nil
+}
+
+func (entity *ManagedEntity) SerializeTo(b gopacket.SerializeBuffer, msgType byte, bytesAvailable int) error {
+	// Add class ID and entity ID
+	bytes, err := b.AppendBytes(6)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes, uint16(entity.GetClassID()))
+	binary.BigEndian.PutUint16(bytes[2:], entity.GetEntityID())
+	binary.BigEndian.PutUint16(bytes[4:], entity.GetAttributeMask())
+
+	// TODO: Need to limit number of bytes appended to not exceed packet size
+	// Is there space/metadata info in 'b' parameter to allow this?
+	err = entity.SerializeAttributes(entity.attributes, entity.GetAttributeMask(), b, msgType, bytesAvailable)
+	return err
+}
diff --git a/vendor/github.com/cboling/omci/generated/medef.go b/vendor/github.com/cboling/omci/generated/medef.go
new file mode 100644
index 0000000..2c76614
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/medef.go
@@ -0,0 +1,157 @@
+/*
+ * 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 (
+	"errors"
+	"fmt"
+	"github.com/deckarep/golang-set"
+	"github.com/google/gopacket"
+	"math/bits"
+)
+
+type ManagedEntityDefinition struct {
+	Name         string
+	ClassID      ClassID
+	MessageTypes mapset.Set // Mandatory
+	// TODO: Support Optional Message types
+	AllowedAttributeMask uint16
+	AttributeDefinitions AttributeDefinitionMap
+}
+
+func (bme *ManagedEntityDefinition) String() string {
+	return fmt.Sprintf("Definition: %s: CID: %v, Attributes: %v",
+		bme.Name, bme.ClassID, bme.AttributeDefinitions)
+}
+
+func (bme *ManagedEntityDefinition) GetName() string {
+	return bme.Name
+}
+func (bme *ManagedEntityDefinition) GetClassID() ClassID {
+	return bme.ClassID
+}
+func (bme *ManagedEntityDefinition) GetMessageTypes() mapset.Set {
+	return bme.MessageTypes
+}
+func (bme *ManagedEntityDefinition) GetAllowedAttributeMask() uint16 {
+	return bme.AllowedAttributeMask
+}
+func (bme *ManagedEntityDefinition) GetAttributeDefinitions() *AttributeDefinitionMap {
+	return &bme.AttributeDefinitions
+}
+
+func (bme *ManagedEntityDefinition) DecodeAttributes(mask uint16, data []byte, p gopacket.PacketBuilder, msgType byte) (AttributeValueMap, error) {
+	if (mask | bme.GetAllowedAttributeMask()) != bme.GetAllowedAttributeMask() {
+		// TODO: Provide custom error code so a response 'result' can properly be coded
+		return nil, errors.New("unsupported attribute mask")
+	}
+	keyList := GetAttributeDefinitionMapKeys(bme.AttributeDefinitions)
+
+	attrMap := make(AttributeValueMap, bits.OnesCount16(mask))
+	for _, index := range keyList {
+		if index == 0 {
+			continue // Skip Entity ID
+		}
+		attrDef := bme.AttributeDefinitions[index]
+		name := attrDef.GetName()
+
+		if mask&(1<<(16-uint(index))) != 0 {
+			value, err := attrDef.Decode(data, p, msgType)
+			if err != nil {
+				return nil, err
+			}
+			if attrDef.IsTableAttribute() {
+				switch msgType {
+				default:
+					return nil, errors.New(fmt.Sprintf("unsupported Message Type '%v' for table serialization", msgType))
+
+				case byte(Get) | AK: // Get Response
+					attrMap[name] = value
+					data = data[4:]
+
+				case byte(GetNext) | AK: // Get Next Response
+					// Value is a partial octet buffer we need to collect and at
+					// the end (last segment) pull it up into more appropriate table
+					// rows
+					valueBuffer, ok := value.([]byte)
+					if !ok {
+						panic("unexpected type already returned as get-next-response attribute data")
+					}
+					if existing, found := attrMap[name]; found {
+						prev, ok := existing.([]byte)
+						if !ok {
+							panic("unexpected type already in attribute value map")
+						}
+						attrMap[name] = append(prev, valueBuffer...)
+					} else {
+						attrMap[name] = valueBuffer
+					}
+					if size := attrDef.GetSize(); size != 0 && size > len(valueBuffer) {
+						panic("unexpected size difference")
+					}
+					data = data[len(valueBuffer):]
+
+				case byte(Set) | AR: // Set Request
+					fmt.Println("TODO")
+
+				case byte(SetTable) | AR: // Set Table Request
+					// TODO: Only baseline supported at this time
+					return nil, errors.New("attribute encode for set-table-request not yet supported")
+				}
+			} else {
+				attrMap[name] = value
+				data = data[attrDef.GetSize():]
+			}
+		}
+	}
+	return attrMap, nil
+}
+
+func (bme *ManagedEntityDefinition) SerializeAttributes(attr AttributeValueMap, mask uint16,
+	b gopacket.SerializeBuffer, msgType byte, bytesAvailable int) error {
+	if (mask | bme.GetAllowedAttributeMask()) != bme.GetAllowedAttributeMask() {
+		// TODO: Provide custom error code so a response 'result' can properly be coded
+		return errors.New("unsupported attribute mask")
+	}
+	// TODO: Need to limit number of bytes appended to not exceed packet size
+	// Is there space/metadata info in 'b' parameter to allow this?
+	keyList := GetAttributeDefinitionMapKeys(bme.AttributeDefinitions)
+
+	for _, index := range keyList {
+		if index == 0 {
+			continue // Skip Entity ID
+		}
+		attrDef := bme.AttributeDefinitions[index]
+
+		if mask&(1<<(16-uint(index))) != 0 {
+			value, ok := attr[attrDef.GetName()]
+			if !ok {
+				msg := fmt.Sprintf("attribute not found: '%v'", attrDef.GetName())
+				return errors.New(msg)
+			}
+			size, err := attrDef.SerializeTo(value, b, msgType, bytesAvailable)
+			if err != nil {
+				return err
+			}
+			bytesAvailable -= size
+		}
+	}
+	return nil
+}
diff --git a/vendor/github.com/cboling/omci/generated/mgcconfigdata.go b/vendor/github.com/cboling/omci/generated/mgcconfigdata.go
new file mode 100644
index 0000000..60b47bb
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/mgcconfigdata.go
@@ -0,0 +1,136 @@
+/*
+ * 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 MgcConfigDataClassId ClassID = ClassID(155)
+
+var mgcconfigdataBME *ManagedEntityDefinition
+
+// MgcConfigData (class ID #155)
+//	The MGC config data ME defines the MGC configuration associated with an MG subscriber. It is
+//	conditionally required for ONUs that support ITU-T H.248 VoIP services. If a non-OMCI interface
+//	is used to manage VoIP signalling, this ME is unnecessary.
+//
+//	Instances of this ME are created and deleted by the OLT.
+//
+//	Relationships
+//		An instance of this ME may be associated with one or more VoIP voice CTP MEs.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Primary Mgc
+//			Primary MGC: This attribute points to a network address ME that contains the name (IP address or
+//			resolved name) of the primary MGC that controls the signalling messages. The port is optional
+//			and defaults to 2944 for text message formats and 2955 for binary message formats. (R, W,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Secondary Mgc
+//			Secondary MGC: This attribute points to a network address ME that contains the name (IP address
+//			or resolved name) of the secondary or backup MGC that controls the signalling messages. The port
+//			is optional and defaults to 2944 for text message formats and 2955 for binary message formats.
+//			(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Tcp_Udp Pointer
+//			TCP/UDP pointer: This attribute points to the TCP/UDP config data ME to be used for
+//			communication with the MGC. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Version
+//			Version:	This integer attribute reports the version of the Megaco protocol in use. The ONU
+//			should deny an attempt by the OLT to set or create a value that it does not support. The value 0
+//			indicates that no particular version is specified. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Message Format
+//			The default value is recommended to be 0. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Maximum Retry Time
+//			Maximum retry time: This attribute specifies the maximum retry time for MGC transactions, in
+//			seconds. The default value 0 specifies vendor-specific implementation. (R, W) (optional)
+//			(2 bytes)
+//
+//		Maximum Retry Attempts
+//			Maximum retry attempts: This attribute specifies the maximum number of times a message is
+//			retransmitted to the MGC. The recommended default value 0 specifies vendor-specific
+//			implementation. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Service Change Delay
+//			Service change delay: This attribute specifies the service status delay time for changes in line
+//			service status. This attribute is specified in seconds. The default value 0 specifies no delay.
+//			(R, W) (optional) (2 bytes)
+//
+//		Termination Id Base
+//			Termination ID base: This attribute specifies the base string for the ITU-T H.248 physical
+//			termination ID(s) for this ONU. This string is intended to uniquely identify an ONU. Vendor-
+//			specific termination identifiers (port IDs) are optionally added to this string to uniquely
+//			identify a termination on a specific ONU. (R, W) (optional) (25 bytes)
+//
+//		Softswitch
+//			Softswitch:	This attribute identifies the gateway softswitch vendor. The format is four ASCII
+//			coded alphabetic characters [A..Z] as defined in [ATIS0300220]. A value of four null bytes
+//			indicates an unknown or unspecified vendor. (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Message Id Pointer
+//			Message ID pointer: This attribute points to a large string whose value specifies the message
+//			identifier string for ITU-T H.248 messages originated by the ONU. (R, W, setbycreate) (optional)
+//			(2 bytes)
+//
+type MgcConfigData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	mgcconfigdataBME = &ManagedEntityDefinition{
+		Name:    "MgcConfigData",
+		ClassID: 155,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFE0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  Uint16Field("PrimaryMgc", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  Uint16Field("SecondaryMgc", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint16Field("TcpUdpPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4:  ByteField("Version", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  ByteField("MessageFormat", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6:  Uint16Field("MaximumRetryTime", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 6),
+			7:  Uint16Field("MaximumRetryAttempts", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 7),
+			8:  Uint16Field("ServiceChangeDelay", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 8),
+			9:  MultiByteField("TerminationIdBase", 25, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 9),
+			10: Uint32Field("Softswitch", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 10),
+			11: Uint16Field("MessageIdPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 11),
+		},
+	}
+}
+
+// NewMgcConfigData (class ID 155 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 NewMgcConfigData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(mgcconfigdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/mgcperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/mgcperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..dd55c82
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/mgcperformancemonitoringhistorydata.go
@@ -0,0 +1,130 @@
+/*
+ * 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 MgcPerformanceMonitoringHistoryDataClassId ClassID = ClassID(156)
+
+var mgcperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// MgcPerformanceMonitoringHistoryData (class ID #156)
+//	The MGC monitoring data ME provides run-time statistics for an active MGC association. Instances
+//	of this ME are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the MGC config data or MGC config
+//		portal ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 associated MGC config data or
+//			to the MGC config portal ME. If a non-OMCI configuration method is used for VoIP, there can be
+//			only one live ME instance, associated with the MGC config portal, and with ME ID 0. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Received Messages
+//			Received messages: This attribute counts the number of received Megaco messages on this
+//			association, as defined by [ITUT H.341]. (R) (mandatory) (4 bytes)
+//
+//		Received Octets
+//			Received octets: This attribute counts the total number of octets received on this association,
+//			as defined by [ITU-T H.341]. (R) (mandatory) (4 bytes)
+//
+//		Sent Messages
+//			Sent messages: This attribute counts the total number of Megaco messages sent over this
+//			association, as defined by [ITU-T H.341]. (R) (mandatory) (4 bytes)
+//
+//		Sent Octets
+//			Sent octets:	This attribute counts the total number of octets sent over this association, as
+//			defined by [ITU-T H.341]. (R) (mandatory) (4 bytes)
+//
+//		Protocol Errors
+//			(R) (mandatory) (4 bytes)
+//
+//		Transport Losses
+//			Transport losses: This attribute counts the total number of transport losses (e.g., socket
+//			problems) detected on this association. A link loss is defined as loss of communication with the
+//			remote entity due to hardware/transient problems, or problems in related software. (R)
+//			(mandatory) (4 bytes)
+//
+//		Last Detected Event
+//			(R) (mandatory) (1 byte)
+//
+//		Last Detected Event Time
+//			Last detected event time: This attribute reports the time in seconds since the last event on
+//			this association was detected, as defined by [ITU-T H.341]. (R) (mandatory) (4 bytes)
+//
+//		Last Detected Reset Time
+//			Last detected reset time: This attribute reports the time in seconds since these statistics were
+//			last reset, as defined by [ITU-T H.341]. Under normal circumstances, a get action on this
+//			attribute would return 900 s to indicate a completed 15 min interval. (R) (mandatory) (4 bytes)
+//
+type MgcPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	mgcperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "MgcPerformanceMonitoringHistoryData",
+		ClassID: 156,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFE0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("ReceivedMessages", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("ReceivedOctets", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("SentMessages", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("SentOctets", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("ProtocolErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("TransportLosses", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  ByteField("LastDetectedEvent", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("LastDetectedEventTime", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("LastDetectedResetTime", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+		},
+	}
+}
+
+// NewMgcPerformanceMonitoringHistoryData (class ID 156 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 NewMgcPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(mgcperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/mocaethernetperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/mocaethernetperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..53fd742
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/mocaethernetperformancemonitoringhistorydata.go
@@ -0,0 +1,136 @@
+/*
+ * 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 MocaEthernetPerformanceMonitoringHistoryDataClassId ClassID = ClassID(163)
+
+var mocaethernetperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// MocaEthernetPerformanceMonitoringHistoryData (class ID #163)
+//	This ME collects PM data for an MoCA Ethernet interface. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the PPTP MoCA UNI ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP MoCA UNI. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contains PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Incoming Unicast Packets
+//			Incoming unicast packets:	(R) (optional) (4 bytes)
+//
+//		Incoming Discarded Packets
+//			Incoming discarded packets:	(R) (optional) (4 bytes)
+//
+//		Incoming Errored Packets
+//			Incoming errored packets:	(R) (optional) (4 bytes)
+//
+//		Incoming Unknown Packets
+//			Incoming unknown packets:	(R) (optional) (4 bytes)
+//
+//		Incoming Multicast Packets
+//			Incoming multicast packets:	(R) (optional) (4 bytes)
+//
+//		Incoming Broadcast Packets
+//			Incoming broadcast packets:	(R) (optional) (4 bytes)
+//
+//		Incoming Octets
+//			Incoming octets:	(R) (optional) (4 bytes)
+//
+//		Outgoing Unicast Packets
+//			Outgoing unicast packets:	(R) (optional) (4 bytes)
+//
+//		Outgoing Discarded Packets
+//			Outgoing discarded packets:	(R) (optional) (4 bytes)
+//
+//		Outgoing Errored Packets
+//			Outgoing errored packets:	(R) (optional) (4 bytes)
+//
+//		Outgoing Unknown Packets
+//			Outgoing unknown packets:	(R) (optional) (4 bytes)
+//
+//		Outgoing Multicast Packets
+//			Outgoing multicast packets:	(R) (optional) (4 bytes)
+//
+//		Outgoing Broadcast Packets
+//			Outgoing broadcast packets:	(R) (optional) (4 bytes)
+//
+//		Outgoing Octets
+//			Outgoing octets:	(R) (optional) (4 bytes)
+//
+type MocaEthernetPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	mocaethernetperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "MocaEthernetPerformanceMonitoringHistoryData",
+		ClassID: 163,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("IncomingUnicastPackets", 0, mapset.NewSetWith(Read), false, false, true, false, 3),
+			4:  Uint32Field("IncomingDiscardedPackets", 0, mapset.NewSetWith(Read), false, false, true, false, 4),
+			5:  Uint32Field("IncomingErroredPackets", 0, mapset.NewSetWith(Read), false, false, true, false, 5),
+			6:  Uint32Field("IncomingUnknownPackets", 0, mapset.NewSetWith(Read), false, false, true, false, 6),
+			7:  Uint32Field("IncomingMulticastPackets", 0, mapset.NewSetWith(Read), false, false, true, false, 7),
+			8:  Uint32Field("IncomingBroadcastPackets", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+			9:  Uint32Field("IncomingOctets", 0, mapset.NewSetWith(Read), false, false, true, false, 9),
+			10: Uint32Field("OutgoingUnicastPackets", 0, mapset.NewSetWith(Read), false, false, true, false, 10),
+			11: Uint32Field("OutgoingDiscardedPackets", 0, mapset.NewSetWith(Read), false, false, true, false, 11),
+			12: Uint32Field("OutgoingErroredPackets", 0, mapset.NewSetWith(Read), false, false, true, false, 12),
+			13: Uint32Field("OutgoingUnknownPackets", 0, mapset.NewSetWith(Read), false, false, true, false, 13),
+			14: Uint32Field("OutgoingMulticastPackets", 0, mapset.NewSetWith(Read), false, false, true, false, 14),
+			15: Uint32Field("OutgoingBroadcastPackets", 0, mapset.NewSetWith(Read), false, false, true, false, 15),
+			16: Uint32Field("OutgoingOctets", 0, mapset.NewSetWith(Read), false, false, true, false, 16),
+		},
+	}
+}
+
+// NewMocaEthernetPerformanceMonitoringHistoryData (class ID 163 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 NewMocaEthernetPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(mocaethernetperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/mplspseudowireterminationpoint.go b/vendor/github.com/cboling/omci/generated/mplspseudowireterminationpoint.go
new file mode 100644
index 0000000..25f3305
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/mplspseudowireterminationpoint.go
@@ -0,0 +1,143 @@
+/*
+ * 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 MplsPseudowireTerminationPointClassId ClassID = ClassID(333)
+
+var mplspseudowireterminationpointBME *ManagedEntityDefinition
+
+// MplsPseudowireTerminationPoint (class ID #333)
+//	This ME contains the configuration data of a pseudowire whose underlying transport method is
+//	MPLS. Instances of this ME are created and deleted by the OLT.
+//
+//	Relationships
+//		Zero or one instance of this ME is associated with each instance of the pseudowire TP ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Tp Type
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Tp Pointer
+//			TP pointer:	This attribute points to the instance of the TP associated with this MPLS PW TP. The
+//			type of the associated TP is determined by the TP type attribute. (R, W, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Mpls Label Indicator
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Mpls Pw Direction
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Mpls Pw Uplink Label
+//			MPLS PW uplink label: This attribute specifies the label of the inner MPLS pseudowire upstream.
+//			The attribute is not meaningful for unidirectional downstream PWs. (R, W, setbycreate)
+//			(mandatory) (4 bytes)
+//
+//		Mpls Pw Downlink Label
+//			MPLS PW downlink label: This attribute specifies the label of the inner MPLS pseudowire
+//			downstream. The attribute is not meaningful for unidirectional upstream PWs. (R, W, setbycreate)
+//			(mandatory) (4 bytes)
+//
+//		Mpls Pw Tc
+//			NOTE 1 – The TC field was previously known as EXP. Refer to [bIETF RFC 5462].
+//
+//		Mpls Tunnel Direction
+//			(R, W, setbycreate) (mandatory for double-labelled case) (1 byte)
+//
+//		Mpls Tunnel Uplink Label
+//			MPLS tunnel uplink label: This attribute specifies the (outer) label for the upstream MPLS
+//			tunnel. If the MPLS tunnel is downstream only, this attribute should be set to 0. (R, W,
+//			setbycreate) (mandatory for double-labelled case) (4 bytes)
+//
+//		Mpls Tunnel Downlink Label
+//			MPLS tunnel downlink label: This attribute specifies the (outer) label for the downstream MPLS
+//			tunnel. If the MPLS tunnel is upstream only, this attribute should be set to 0. (R, W,
+//			setbycreate) (mandatory for double-labelled case) (4 bytes)
+//
+//		Mpls Tunnel Tc
+//			NOTE 2 – The TC field was previously known as EXP. Refer to [bIETF RFC 5462].
+//
+//		Pseudowire Type
+//			(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Pseudowire Control Word Preference
+//			Pseudowire control word preference: When set to true, this Boolean attribute specifies that a
+//			control word is to be sent with each packet. Some PW types mandate the use of a control word in
+//			any event. In such cases, the value configured for this attribute has no effect on the presence
+//			of the control word. (R, W, setbycreate) (optional) (1 byte)
+//
+//		Administrative State
+//			Administrative state: This attribute locks (1) and unlocks (0) the functions performed by the
+//			MPLS pseudowire TP. Administrative state is further described in clause A.1.6. (R, W) (optional)
+//			(1 byte)
+//
+//		Operational State
+//			Operational state: This attribute reports whether the ME is currently capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+type MplsPseudowireTerminationPoint struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	mplspseudowireterminationpointBME = &ManagedEntityDefinition{
+		Name:    "MplsPseudowireTerminationPoint",
+		ClassID: 333,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFE,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("TpType", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  Uint16Field("TpPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  ByteField("MplsLabelIndicator", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4:  ByteField("MplsPwDirection", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  Uint32Field("MplsPwUplinkLabel", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6:  Uint32Field("MplsPwDownlinkLabel", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7:  ByteField("MplsPwTc", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8:  ByteField("MplsTunnelDirection", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 8),
+			9:  Uint32Field("MplsTunnelUplinkLabel", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 9),
+			10: Uint32Field("MplsTunnelDownlinkLabel", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 10),
+			11: ByteField("MplsTunnelTc", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 11),
+			12: Uint16Field("PseudowireType", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 12),
+			13: ByteField("PseudowireControlWordPreference", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 13),
+			14: ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 14),
+			15: ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 15),
+		},
+	}
+}
+
+// NewMplsPseudowireTerminationPoint (class ID 333 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 NewMplsPseudowireTerminationPoint(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(mplspseudowireterminationpointBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/multicastgeminterworkingterminationpoint.go b/vendor/github.com/cboling/omci/generated/multicastgeminterworkingterminationpoint.go
new file mode 100644
index 0000000..a855376
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/multicastgeminterworkingterminationpoint.go
@@ -0,0 +1,152 @@
+/*
+ * 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 MulticastGemInterworkingTerminationPointClassId ClassID = ClassID(281)
+
+var multicastgeminterworkingterminationpointBME *ManagedEntityDefinition
+
+// MulticastGemInterworkingTerminationPoint (class ID #281)
+//	An instance of this ME represents a point in a G-PON ONU where a multicast service interworks
+//	with the GEM layer. At this point, a multicast bit stream is reconstructed from GEM packets.
+//
+//	Instances of this ME are created and deleted by the OLT.
+//
+//	Multicast interworking GEM modes of operation
+//
+//	The default multicast operation of the PON is where all the multicast content streams are
+//	carried in one PON layer connection (GEM port). This connection is then specified in the first
+//	entry of the IPv4 or IPv6 multicast address table, as the case may be. This single entry also
+//	specifies an all-inclusive IP multicast destination address (DA) range (e.g., 224.0.0.0 to
+//	239.255.255.255 in the case of IPv4). The ONU then filters the traffic based on either Ethernet
+//	MAC addresses or IP addresses. The associated GEM port network CTP ME specifies the GEM port-ID
+//	that supports all multicast connections.
+//
+//	In the default multicast operation, all multicast content streams are placed in one PON layer
+//	connection (GEM port). The OLT sets up a completely conventional model, a pointer from the
+//	multicast GEM IW termination to a GEM port network CTP. The OLT configures the GEM port-ID of
+//	the GEM port network CTP into the appropriate multicast address table attribute(s), along with
+//	the other table fields that specify the range of IP multicast DAs. The ONU accepts the entire
+//	multicast stream through the designated GEM port, then filters the traffic based on either the
+//	Ethernet MAC address or IP DA.
+//
+//	An optional multicast configuration supports separate multicast streams carried over separate
+//	PON layer connections, i.e., on separate GEM ports. This permits the ONU to filter multicast
+//	streams at the GEM level, which is efficient in hardware, while ignoring other multicast streams
+//	that may be of interest to other ONUs on the PON.
+//
+//	After configuring the explicit model for the first multicast GEM port, the OLT supports multiple
+//	multicast GEM ports by then configuring additional entries into the multicast address table(s),
+//	entries with different GEM port-IDs. The OMCI model is defined such that these ports are
+//	implicitly grouped together and served by the single explicit GEM port network CTP. No
+//	additional GEM network CTPs need be created or linked for the additional GEM ports.
+//
+//	Several multicast GEM IW TPs can exist, each linked to separate bridge ports or mappers to serve
+//	different communities of interest in a complex ONU.
+//
+//	Discovery of multicast support
+//
+//	The OLT uses the multicast GEM IW TP entity as the means to discover the ONU's multicast
+//	capability. This entity is mandatory if multicast is supported by the ONU. If the OLT attempts
+//	to create this entity on an ONU that does not support multicast, the create command fails. The
+//	create or set command also fails if the OLT attempts to exploit optional features that the ONU
+//	does not support, e.g., in attempting to write a multicast address table with more than a single
+//	entry or to create multiple multicast GEM IW TPs.
+//
+//	This ME is defined by a similarity to the unicast GEM IW TP, and a number of its attributes are
+//	not meaningful in a multicast context. These attributes are set to 0 and not used, as indicated
+//	in the following.
+//
+//	Relationships
+//		An instance of this ME exists for each occurrence of transformation of GEM packets into a
+//		multicast data stream.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The value 0xFFFF
+//			is reserved. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Gem Port Network Ctp Connectivity Pointer
+//			GEM port network CTP connectivity pointer: This attribute points to an instance of the GEM port
+//			network CTP that is associated with this multicast GEM IW TP. (R, W, setbycreate) (mandatory)
+//			(2 bytes)
+//
+//		Interworking Option
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Service Profile Pointer
+//			Service profile pointer: This attribute is set to 0 and not used. For backward compatibility, it
+//			may also be set to point to a MAC bridge service profile or IEEE 802.1p mapper service profile.
+//			(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Pptp Counter
+//			PPTP counter: This attribute represents the number of instances of PPTP MEs associated with this
+//			instance of the multicast GEM IW TP. This attribute conveys no information that is not available
+//			elsewhere; it may be set to 0xFF and not used. (R) (optional) (1 byte)
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the ME is capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+//		Gal Profile Pointer
+//			GAL profile pointer: This attribute is set to 0 and not used. For backward compatibility, it may
+//			also be set to point to a GAL Ethernet profile. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Ipv6 Multicast Address Table
+//			(R, W) (optional) (24N bytes, where N is the number of entries in the list.)
+//
+type MulticastGemInterworkingTerminationPoint struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	multicastgeminterworkingterminationpointBME = &ManagedEntityDefinition{
+		Name:    "MulticastGemInterworkingTerminationPoint",
+		ClassID: 281,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetNext,
+			Set,
+		),
+		AllowedAttributeMask: 0XFE00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("GemPortNetworkCtpConnectivityPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: ByteField("InterworkingOption", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint16Field("ServiceProfilePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: ByteField("PptpCounter", 0, mapset.NewSetWith(Read), false, false, true, false, 4),
+			5: ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 5),
+			6: Uint16Field("GalProfilePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7: TableField("Ipv6MulticastAddressTable", TableInfo{nil, 24}, mapset.NewSetWith(Read, Write), false, true, false, 7),
+		},
+	}
+}
+
+// NewMulticastGemInterworkingTerminationPoint (class ID 281 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 NewMulticastGemInterworkingTerminationPoint(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(multicastgeminterworkingterminationpointBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/multicastsubscriberconfiginfo.go b/vendor/github.com/cboling/omci/generated/multicastsubscriberconfiginfo.go
new file mode 100644
index 0000000..af2ea0d
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/multicastsubscriberconfiginfo.go
@@ -0,0 +1,116 @@
+/*
+ * 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 MulticastSubscriberConfigInfoClassId ClassID = ClassID(310)
+
+var multicastsubscriberconfiginfoBME *ManagedEntityDefinition
+
+// MulticastSubscriberConfigInfo (class ID #310)
+//	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
+//			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)
+//
+//		Multicast Operations Profile Pointer
+//			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
+//			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
+//			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
+//			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
+//			(R, W) (optional) (20N bytes, where N is the number of entries in the table)
+//
+type MulticastSubscriberConfigInfo struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	multicastsubscriberconfiginfoBME = &ManagedEntityDefinition{
+		Name:    "MulticastSubscriberConfigInfo",
+		ClassID: 310,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetNext,
+			Set,
+		),
+		AllowedAttributeMask: 0XFC00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("MeType", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: Uint16Field("MulticastOperationsProfilePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint16Field("MaxSimultaneousGroups", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 3),
+			4: Uint32Field("MaxMulticastBandwidth", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 4),
+			5: ByteField("BandwidthEnforcement", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 5),
+			6: TableField("MulticastServicePackageTable", TableInfo{nil, 22}, mapset.NewSetWith(Read, Write), false, true, false, 6),
+		},
+	}
+}
+
+// NewMulticastSubscriberConfigInfo (class ID 310 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 NewMulticastSubscriberConfigInfo(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(multicastsubscriberconfiginfoBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/multicastsubscribermonitor.go b/vendor/github.com/cboling/omci/generated/multicastsubscribermonitor.go
new file mode 100644
index 0000000..245cb24
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/multicastsubscribermonitor.go
@@ -0,0 +1,101 @@
+/*
+ * 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 MulticastSubscriberMonitorClassId ClassID = ClassID(311)
+
+var multicastsubscribermonitorBME *ManagedEntityDefinition
+
+// MulticastSubscriberMonitor (class ID #311)
+//	This ME provides the current status of each port with respect to its multicast subscriptions. It
+//	may be useful for status monitoring or debugging purposes. The status table includes all dynamic
+//	groups currently subscribed by the port.
+//
+//	Relationships
+//		Instances of this ME are created and deleted at the request of the OLT. One instance may exist
+//		for each IEEE 802.1 UNI configured to support multicast subscription.
+//
+//	Attributes
+//		Managed Entity Id
+//			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)
+//
+//		Current Multicast Bandwidth
+//			Current multicast bandwidth: This attribute is the ONU's (BE) estimate of the actual bandwidth
+//			currently being delivered to this particular MAC bridge port over all dynamic multicast groups.
+//			(R) (optional) (4 bytes)
+//
+//		Join Messages Counter
+//			Join messages counter: This attribute counts the number of times the corresponding subscriber
+//			sent a join message that was accepted. When full, the counter rolls over to 0. (R) (optional)
+//			(4 bytes)
+//
+//		Bandwidth Exceeded Counter
+//			Bandwidth exceeded counter: This attribute counts the number of join messages that did exceed,
+//			or would have exceeded, the max multicast bandwidth, whether accepted or denied. When full, the
+//			counter rolls over to 0. (R) (optional) (4 bytes)
+//
+//		Ipv4 Active Group List Table
+//			(R) (mandatory) (24N bytes)
+//
+//		Ipv6 Active Group List Table
+//			(R) (optional) (58N bytes)
+//
+type MulticastSubscriberMonitor struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	multicastsubscribermonitorBME = &ManagedEntityDefinition{
+		Name:    "MulticastSubscriberMonitor",
+		ClassID: 311,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetNext,
+			Set,
+		),
+		AllowedAttributeMask: 0XFC00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("MeType", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: Uint32Field("CurrentMulticastBandwidth", 0, mapset.NewSetWith(Read), false, false, true, false, 2),
+			3: Uint32Field("JoinMessagesCounter", 0, mapset.NewSetWith(Read), false, false, true, false, 3),
+			4: Uint32Field("BandwidthExceededCounter", 0, mapset.NewSetWith(Read), false, false, true, false, 4),
+			5: TableField("Ipv4ActiveGroupListTable", TableInfo{nil, 24}, mapset.NewSetWith(Read), false, false, false, 5),
+			6: TableField("Ipv6ActiveGroupListTable", TableInfo{nil, 58}, mapset.NewSetWith(Read), false, true, false, 6),
+		},
+	}
+}
+
+// NewMulticastSubscriberMonitor (class ID 311 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 NewMulticastSubscriberMonitor(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(multicastsubscribermonitorBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/networkaddress.go b/vendor/github.com/cboling/omci/generated/networkaddress.go
new file mode 100644
index 0000000..38eff06
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/networkaddress.go
@@ -0,0 +1,89 @@
+/*
+ * 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 NetworkAddressClassId ClassID = ClassID(137)
+
+var networkaddressBME *ManagedEntityDefinition
+
+// NetworkAddress (class ID #137)
+//	The network address ME associates a network address with security methods required to access a
+//	server. It is conditionally required for ONUs that support VoIP services. The address may take
+//	the form of a URL, a fully qualified path or IP address represented as an ACII string.
+//
+//	If a non-OMCI interface is used to manage VoIP signalling, this ME is unnecessary.
+//
+//	Instances of this ME are created and deleted by the OLT or the ONU, depending on the method used
+//	and case.
+//
+//	Relationships
+//		Any ME that requires a network address may link to an instance of this ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. Instances of
+//			this ME created autonomously by the ONU have IDs in the range 0..0x7FFF. Instances created by
+//			the OLT have IDs in the range 0x8000..0xFFFE. The value 0xFFFF is reserved. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Security Pointer
+//			Security pointer: This attribute points to an authentication security method ME. The
+//			authentication security method indicates the username and password to be used when retrieving
+//			the network address indicated by this ME. A null pointer indicates that security attributes are
+//			not defined for this network address. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Address Pointer
+//			Address pointer: This attribute points to the large string ME that contains the network address.
+//			It may contain a fully qualified domain name, URI or IP address. The URI may also contain a port
+//			identifier (e.g., "x.y.z.com:5060"). A null pointer indicates that no network address is
+//			defined. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+type NetworkAddress struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	networkaddressBME = &ManagedEntityDefinition{
+		Name:    "NetworkAddress",
+		ClassID: 137,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XC000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("SecurityPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: Uint16Field("AddressPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+		},
+	}
+}
+
+// NewNetworkAddress (class ID 137 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 NewNetworkAddress(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(networkaddressBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/networkdialplantable.go b/vendor/github.com/cboling/omci/generated/networkdialplantable.go
new file mode 100644
index 0000000..75e6bde
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/networkdialplantable.go
@@ -0,0 +1,99 @@
+/*
+ * 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 NetworkDialPlanTableClassId ClassID = ClassID(145)
+
+var networkdialplantableBME *ManagedEntityDefinition
+
+// NetworkDialPlanTable (class ID #145)
+//	The network dial plan table ME is optional for ONUs providing VoIP services. This ME is used to
+//	provision dial plans from the OLT. Instances of this ME are created and deleted by the OLT. If a
+//	non-OMCI interface is used to manage SIP for VoIP, this ME is unnecessary.
+//
+//	Relationships
+//		An instance of this ME may be associated with one or more instances of the SIP user data ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Dial Plan Number
+//			Dial plan number: This attribute indicates the current number of dial plans in the dial plan
+//			table. (R) (mandatory) (2 bytes)
+//
+//		Dial Plan Table Max Size
+//			Dial plan table max size: This attribute defines the maximum number of dial plans that can be
+//			stored in the dial plan table. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Critical Dial Timeout
+//			Critical dial timeout: This attribute defines the critical dial timeout for digit map
+//			processing, in milliseconds. The recommended default value is 4000 ms. (R, W, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Partial Dial Timeout
+//			Partial dial timeout: This attribute defines the partial dial timeout for digit map processing,
+//			in milliseconds. The recommended default value is 16000 ms. (R, W, setbycreate) (mandatory)
+//			(2 bytes)
+//
+//		Dial Plan Format
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Dial Plan Table
+//			(R, W) (mandatory) (30 * N bytes, where N is the number of dial plans)
+//
+type NetworkDialPlanTable struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	networkdialplantableBME = &ManagedEntityDefinition{
+		Name:    "NetworkDialPlanTable",
+		ClassID: 145,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetNext,
+			Set,
+		),
+		AllowedAttributeMask: 0XFC00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("DialPlanNumber", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("DialPlanTableMaxSize", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 2),
+			3: Uint16Field("CriticalDialTimeout", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: Uint16Field("PartialDialTimeout", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5: ByteField("DialPlanFormat", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6: TableField("DialPlanTable", TableInfo{0, 1}, mapset.NewSetWith(Read, Write), false, false, false, 6),
+		},
+	}
+}
+
+// NewNetworkDialPlanTable (class ID 145 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 NewNetworkDialPlanTable(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(networkdialplantableBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/olt-g.go b/vendor/github.com/cboling/omci/generated/olt-g.go
new file mode 100644
index 0000000..d02bf93
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/olt-g.go
@@ -0,0 +1,94 @@
+/*
+ * 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 OltGClassId ClassID = ClassID(131)
+
+var oltgBME *ManagedEntityDefinition
+
+// OltG (class ID #131)
+//	This optional ME identifies the OLT to which an ONU is connected. This ME provides a way for the
+//	ONU to configure itself for operability with a particular OLT. It also provides a way for the
+//	OLT to communicate the time of day to the ONU.
+//
+//	An ONU that supports this ME automatically creates an instance of it. Immediately following the
+//	start-up phase, the OLT should set the ONU to the desired configuration. Interpretation of the
+//	OLT vendor ID, equipment ID and version attributes is a matter for negotiation between the two
+//	vendors involved.
+//
+//	Relationships
+//		The single instance of this ME is associated with the ONU ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. There is only
+//			one instance, number 0. (R) (mandatory) (2 bytes)
+//
+//		Olt Vendor Id
+//			OLT vendor ID: This attribute identifies the OLT vendor. It is the same as the four most
+//			significant bytes of an ONU serial number specified in the respective TC layer specification.
+//			Upon instantiation, this attribute comprises all spaces. (R, W) (mandatory) (4 bytes)
+//
+//		Equipment Id
+//			Equipment ID: This attribute may be used to identify the specific type of OLT. The default value
+//			of all spaces indicates that equipment ID information is not available or applicable to the OLT
+//			being represented. (R, W) (mandatory) (20 bytes)
+//
+//		Version
+//			Version:	This attribute identifies the version of the OLT as defined by the vendor. The default
+//			left-justified ASCII string "0" (padded with trailing nulls) indicates that version information
+//			is not available or applicable to the OLT being represented. (R, W) (mandatory) (14 bytes)
+//
+//		Time Of Day Information
+//			NOTE – In ITU-T G.987/ITU-T G.989 systems, the superframe count field of the time of day
+//			information attribute contains the 32 LSBs of the actual counter.
+//
+type OltG struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	oltgBME = &ManagedEntityDefinition{
+		Name:    "OltG",
+		ClassID: 131,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: Uint32Field("OltVendorId", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2: MultiByteField("EquipmentId", 20, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3: MultiByteField("Version", 14, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4: MultiByteField("TimeOfDayInformation", 14, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+		},
+	}
+}
+
+// NewOltG (class ID 131 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 NewOltG(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(oltgBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/omci.go b/vendor/github.com/cboling/omci/generated/omci.go
new file mode 100644
index 0000000..f6df0c8
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/omci.go
@@ -0,0 +1,77 @@
+/*
+ * 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 OmciClassId ClassID = ClassID(287)
+
+var omciBME *ManagedEntityDefinition
+
+// Omci (class ID #287)
+//	This ME describes the ONU's general level of support for OMCI MEs and messages. This ME is not
+//	included in an MIB upload.
+//
+//	Relationships
+//		One instance exists in the ONU. The ME entities are related to the OMCI entity.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. There is only
+//			one instance, number 0. (R) (mandatory) (2 bytes)
+//
+//		Me Type Table
+//			ME type table: This attribute lists the ME classes supported by the ONU. Each entry contains the
+//			ME class value (see Table 11.2.4-1) of an ME type. (R) (mandatory) (2 * N bytes, where N is the
+//			number of entries in the list.)
+//
+//		Message Type Table
+//			Message type table: This attribute is a list of message types (MTs) supported by the ONU. Each
+//			entry contains the MT of an OMCI message (see Table 11.2.2-1). (R) (mandatory) (M bytes, where M
+//			is the number of entries in the list.)
+//
+type Omci struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	omciBME = &ManagedEntityDefinition{
+		Name:    "Omci",
+		ClassID: 287,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			GetNext,
+		),
+		AllowedAttributeMask: 0XC000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: TableField("MeTypeTable", TableInfo{0, 2}, mapset.NewSetWith(Read), false, false, false, 1),
+			2: TableField("MessageTypeTable", TableInfo{0, 1}, mapset.NewSetWith(Read), false, false, false, 2),
+		},
+	}
+}
+
+// NewOmci (class ID 287 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 NewOmci(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(omciBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/omcidefs.go b/vendor/github.com/cboling/omci/generated/omcidefs.go
new file mode 100644
index 0000000..9dbc5ee
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/omcidefs.go
@@ -0,0 +1,277 @@
+/*
+ * 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 (
+	"fmt"
+	"github.com/deckarep/golang-set"
+	"github.com/google/gopacket"
+)
+
+// MsgType represents a OMCI message-type
+type MsgType byte
+
+// MsgType represents the status field in a OMCI Response frame
+type Results byte
+
+// AttributeAccess represents the access allowed to an Attribute.  Some MEs
+// are instantiated by the ONU autonomously. Others are instantiated on
+// explicit request of the OLT via a create command, and a few ME types may
+// be instantiated in either way, depending on the ONU architecture or
+// circumstances.
+//
+// Attributes of an ME that is auto-instantiated by the ONU can be read (R),
+// write (W), or read, write (R, W). On the other hand, attributes of a ME
+// that is instantiated by the OLT can be either (R), (W), (R, W),
+// (R, set by create) or (R, W, set by create).
+type AttributeAccess byte
+
+// ClassID is a 16-bit value that uniquely defines a Managed Entity clas
+// from the ITU-T G.988 specification.
+type ClassID uint16
+
+func (cid ClassID) String() string {
+	if entity, err := LoadManagedEntityDefinition(cid); err == nil {
+		return fmt.Sprintf("[%s] (%d/%#x)",
+			entity.GetManagedEntityDefinition().GetName(), uint16(cid), uint16(cid))
+	}
+	return fmt.Sprintf("unknown ClassID")
+}
+
+const (
+	// AK (Bit 6), indicates whether this message is an AK to an action request.
+	// If a message is an AK, this bit is set to 1. If the message is not a
+	// response to a command, this bit is set to 0. In messages sent by the OLT,
+	// this bit is always 0.
+	AK byte = 0x20
+
+	// AR (Bit 7), acknowledge request, indicates whether the message requires an
+	// AK. An AK is a response to an action request, not a link layer handshake.
+	// If an AK is expected, this bit is set to 1. If no AK is expected, this bit
+	// is 0. In messages sent by the ONU, this bit is always 0
+	AR byte = 0x40
+
+	// MsgTypeMask provides a mask to get the base message type
+	MsgTypeMask = 0x1F
+)
+
+const (
+	// Message Types
+	Create                MsgType = 4
+	Delete                MsgType = 6
+	Set                   MsgType = 8
+	Get                   MsgType = 9
+	GetAllAlarms          MsgType = 11
+	GetAllAlarmsNext      MsgType = 12
+	MibUpload             MsgType = 13
+	MibUploadNext         MsgType = 14
+	MibReset              MsgType = 15
+	AlarmNotification     MsgType = 16
+	AttributeValueChange  MsgType = 17
+	Test                  MsgType = 18
+	StartSoftwareDownload MsgType = 19
+	DownloadSection       MsgType = 20
+	EndSoftwareDownload   MsgType = 21
+	ActivateSoftware      MsgType = 22
+	CommitSoftware        MsgType = 23
+	SynchronizeTime       MsgType = 24
+	Reboot                MsgType = 25
+	GetNext               MsgType = 26
+	TestResult            MsgType = 27
+	GetCurrentData        MsgType = 28
+	SetTable              MsgType = 29 // Defined in Extended Message Set Only
+)
+
+func (mt MsgType) String() string {
+	switch mt {
+	default:
+		return "Unknown"
+	case Create:
+		return "Create"
+	case Delete:
+		return "Delete"
+	case Set:
+		return "Set"
+	case Get:
+		return "Get"
+	case GetAllAlarms:
+		return "Get All Alarms"
+	case GetAllAlarmsNext:
+		return "Get All Alarms Next"
+	case MibUpload:
+		return "MIB Upload"
+	case MibUploadNext:
+		return "MIB Upload Next"
+	case MibReset:
+		return "MIB Reset"
+	case AlarmNotification:
+		return "Alarm Notification"
+	case AttributeValueChange:
+		return "Attribute Value Change"
+	case Test:
+		return "Test"
+	case StartSoftwareDownload:
+		return "Start Software Download"
+	case DownloadSection:
+		return "Download Section"
+	case EndSoftwareDownload:
+		return "EndSoftware Download"
+	case ActivateSoftware:
+		return "Activate Software"
+	case CommitSoftware:
+		return "Commit Software"
+	case SynchronizeTime:
+		return "Synchronize Time"
+	case Reboot:
+		return "Reboot"
+	case GetNext:
+		return "Get Next"
+	case TestResult:
+		return "Test Result"
+	case GetCurrentData:
+		return "Get Current Data"
+	case SetTable:
+		return "Set Table"
+	}
+}
+
+var allNotificationTypes = [...]MsgType{
+	AlarmNotification,
+	AttributeValueChange,
+	TestResult,
+}
+
+// SupportsMsgType returns true if the managed entity supports the desired
+// Message Type / action
+func SupportsMsgType(entity IManagedEntityDefinition, msgType MsgType) bool {
+	return entity.GetMessageTypes().Contains(msgType)
+}
+
+func IsAutonomousNotification(mt MsgType) bool {
+	for _, m := range allNotificationTypes {
+		if mt == m {
+			return true
+		}
+	}
+	return false
+}
+
+const (
+	// Response status codes
+	Success          Results = 0 // command processed successfully
+	ProcessingError  Results = 1 // command processing error
+	NotSupported     Results = 2 // command not supported
+	ParameterError   Results = 3 // parameter error
+	UnknownEntity    Results = 4 // unknown managed entity
+	UnknownInstance  Results = 5 // unknown managed entity instance
+	DeviceBusy       Results = 6 // device busy
+	InstanceExists   Results = 7 // instance exists
+	AttributeFailure Results = 9 // Attribute(s) failed or unknown
+)
+
+func (rc Results) String() string {
+	switch rc {
+	default:
+		return "Unknown"
+	case Success:
+		return "Success"
+	case ProcessingError:
+		return "Processing Error"
+	case NotSupported:
+		return "Not Supported"
+	case ParameterError:
+		return "Parameter Error"
+	case UnknownEntity:
+		return "Unknown Entity"
+	case UnknownInstance:
+		return "Unknown Instance"
+	case DeviceBusy:
+		return "Device Busy"
+	case InstanceExists:
+		return "Instance Exists"
+	case AttributeFailure:
+		return "Attribute Failure"
+	}
+}
+
+const (
+	// Access allowed on a Managed Entity attribute
+	Read AttributeAccess = 1 << iota
+	Write
+	SetByCreate
+)
+
+func (access AttributeAccess) String() string {
+	switch access {
+	default:
+		return "Unknown"
+	case Read:
+		return "Read"
+	case Write:
+		return "Write"
+	case SetByCreate:
+		return "SetByCreate"
+	case Read | Write:
+		return "Read/Write"
+	case Read | SetByCreate:
+		return "Read/SetByCreate"
+	case Write | SetByCreate:
+		return "Write/SetByCreate"
+	case Read | Write | SetByCreate:
+		return "Read/Write/SetByCreate"
+	}
+}
+
+// SupportsAttributeAccess returns true if the managed entity attribute
+// supports the desired access
+func SupportsAttributeAccess(attr *AttributeDefinition, acc AttributeAccess) bool {
+	return attr.GetAccess().Contains(acc)
+}
+
+type IManagedEntityDefinition interface {
+	GetName() string
+	GetClassID() ClassID
+	GetMessageTypes() mapset.Set
+	GetAllowedAttributeMask() uint16
+	GetAttributeDefinitions() *AttributeDefinitionMap
+
+	DecodeAttributes(uint16, []byte, gopacket.PacketBuilder, byte) (AttributeValueMap, error)
+	SerializeAttributes(AttributeValueMap, uint16, gopacket.SerializeBuffer, byte, int) error
+}
+
+type IManagedEntity interface {
+	IManagedEntityDefinition
+	GetManagedEntityDefinition() IManagedEntityDefinition
+
+	GetEntityID() uint16
+	SetEntityID(uint16) error
+
+	GetAttributeMask() uint16
+
+	GetAttributeValueMap() *AttributeValueMap
+	GetAttribute(string) (interface{}, error)
+	GetAttributeByIndex(uint) (interface{}, error)
+
+	SetAttribute(string, interface{}) error
+	SetAttributeByIndex(uint, interface{}) error
+
+	DeleteAttribute(string) error
+	DeleteAttributeByIndex(uint) error
+}
diff --git a/vendor/github.com/cboling/omci/generated/omcierror.go b/vendor/github.com/cboling/omci/generated/omcierror.go
new file mode 100644
index 0000000..8bf369e
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/omcierror.go
@@ -0,0 +1,250 @@
+/*
+ * 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 (
+	"errors"
+	"fmt"
+)
+
+// Custom Go Error messages for common OMCI errors
+//
+// Response Status code related errors
+type OmciErrors interface {
+	Error() string
+	StatusCode() Results
+	GetError() error
+}
+
+type OmciError struct {
+	err        string
+	statusCode Results
+}
+
+func (e *OmciError) GetError() error {
+	return errors.New(e.err)
+}
+
+func (e *OmciError) Error() string {
+	return e.err
+}
+
+func (e *OmciError) StatusCode() Results {
+	return e.statusCode
+}
+
+func NewOmciError(text string, status Results) OmciErrors {
+	if status == Success {
+		panic("Do not use OmciError to convey successful results")
+	}
+	return &OmciError{
+		err:        text,
+		statusCode: status,
+	}
+}
+
+type OmciNonStatusError struct {
+	OmciError
+}
+
+// NewNonStatusError is for processing errors that do not involve
+// frame processing status & results
+func NewNonStatusError(args ...interface{}) OmciErrors {
+	defaultValue := "command processing error"
+	return &OmciProcessingError{
+		OmciError: OmciError{
+			err: genMessage(defaultValue, args...),
+		},
+	}
+}
+
+type OmciProcessingError struct {
+	OmciError
+}
+
+// NewProcessingError means the command processing failed at the ONU
+// for reasons not described by one of the more specific error codes.
+func NewProcessingError(args ...interface{}) OmciErrors {
+	defaultValue := "command processing error"
+	return &OmciProcessingError{
+		OmciError: OmciError{
+			err:        genMessage(defaultValue, args...),
+			statusCode: ProcessingError,
+		},
+	}
+}
+
+type NotSupportedError struct {
+	OmciError
+}
+
+// NewNotSupportedError means that the message type indicated in byte 3 is
+// not supported by the ONU.
+func NewNotSupportedError(args ...interface{}) OmciErrors {
+	defaultValue := "command not supported"
+	return &NotSupportedError{
+		OmciError: OmciError{
+			err:        genMessage(defaultValue, args...),
+			statusCode: NotSupported,
+		},
+	}
+}
+
+type ParamError struct {
+	OmciError
+	FailureMask uint16
+}
+
+// NewParameterError means that the command message received by the
+// ONU was errored. It would be appropriate if an attribute mask
+// were out of range, for example. In practice, this result code is
+// frequently used interchangeably with code 1001. However, the
+// optional attribute and attribute execution masks in the reply
+// messages are only defined for code 1001.
+func NewParameterError(mask uint16, args ...interface{}) OmciErrors {
+	defaultValue := "parameter error"
+	return &ParamError{
+		OmciError: OmciError{
+			err:        genMessage(defaultValue, args...),
+			statusCode: ParameterError,
+		},
+		FailureMask: mask,
+	}
+}
+
+type UnknownEntityError struct {
+	OmciError
+}
+
+// NewUnknownEntityError This result means that the managed entity class
+// (bytes 5..6) is not supported by the ONU.
+func NewUnknownEntityError(args ...interface{}) OmciErrors {
+	defaultValue := "unknown managed entity"
+	return &UnknownEntityError{
+		OmciError: OmciError{
+			err:        genMessage(defaultValue, args...),
+			statusCode: UnknownEntity,
+		},
+	}
+}
+
+type UnknownInstanceError struct {
+	OmciError
+}
+
+// NewUnknownInstanceError means that the managed entity instance (bytes 7..8)
+// does not exist in the ONU.
+func NewUnknownInstanceError(args ...interface{}) OmciErrors {
+	defaultValue := "unknown managed entity instance"
+	return &UnknownInstanceError{
+		OmciError: OmciError{
+			err:        genMessage(defaultValue, args...),
+			statusCode: UnknownInstance,
+		},
+	}
+}
+
+type DeviceBusyError struct {
+	OmciError
+}
+
+// NewDeviceBusyError means that the command could not be processed due
+// to process-related congestion at the ONU. This result code may
+// also be used as a pause indication to the OLT while the ONU
+// conducts a time-consuming operation such as storage of a
+// software image into non-volatile memory.
+func NewDeviceBusyError(args ...interface{}) OmciErrors {
+	defaultValue := "device busy"
+	return &DeviceBusyError{
+		OmciError: OmciError{
+			err:        genMessage(defaultValue, args...),
+			statusCode: DeviceBusy,
+		},
+	}
+}
+
+type InstanceExistsError struct {
+	OmciError
+}
+
+// NewInstanceExistsError
+func NewInstanceExistsError(args ...interface{}) OmciErrors {
+	defaultValue := "instance exists"
+	return &InstanceExistsError{
+		OmciError: OmciError{
+			err:        genMessage(defaultValue, args...),
+			statusCode: InstanceExists,
+		},
+	}
+}
+
+type AttributeFailureError struct {
+	OmciError
+}
+
+// NewAttributeFailureError means that the ONU already has a managed entity
+// instance that corresponds to the one the OLT is attempting to create.
+func NewAttributeFailureError(args ...interface{}) OmciErrors {
+	defaultValue := "attribute(s) failed or unknown"
+	return &AttributeFailureError{
+		OmciError: OmciError{
+			err:        genMessage(defaultValue, args...),
+			statusCode: AttributeFailure,
+		},
+	}
+}
+
+type MessageTruncatedError struct {
+	OmciError
+}
+
+// NewAttributeFailureError means that the ONU already has a managed entity
+// instance that corresponds to the one the OLT is attempting to create.
+func NewMessageTruncatedError(args ...interface{}) OmciErrors {
+	defaultValue := "out-of-space. Cannot fit attribute into message"
+	return &MessageTruncatedError{
+		OmciError: OmciError{
+			err:        genMessage(defaultValue, args...),
+			statusCode: ProcessingError,
+		},
+	}
+}
+
+func genMessage(defaultValue string, args ...interface{}) string {
+	switch len(args) {
+	case 0:
+		return defaultValue
+
+	case 1:
+		switch first := args[0].(type) {
+		case string:
+			// Assume a simple, pre-formatted string
+			return args[0].(string)
+
+		case func() string:
+			// Assume a closure with no other arguments used
+			return first()
+
+		default:
+			panic("Unsupported parameter type")
+		}
+	}
+	return fmt.Sprintf(args[0].(string), args[1:]...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/onu-g.go b/vendor/github.com/cboling/omci/generated/onu-g.go
new file mode 100644
index 0000000..32de3ac
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/onu-g.go
@@ -0,0 +1,147 @@
+/*
+ * 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 OnuGClassId ClassID = ClassID(256)
+
+var onugBME *ManagedEntityDefinition
+
+// OnuG (class ID #256)
+//	This ME represents the ONU as equipment. The ONU automatically creates an instance of this ME.
+//	It assigns values to read-only attributes according to data within the ONU itself.
+//
+//	This ME has evolved from the ONT-G of [ITUT G.984.4].
+//
+//	Relationships
+//		In ITU-T GTC based PON applications, all other MEs in this Recommendation are related directly
+//		or indirectly to the ONU-G entity.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. There is only
+//			one instance, number 0. (R) (mandatory) (2 bytes)
+//
+//		Vendor Id
+//			Vendor ID:	This attribute identifies the vendor of the ONU. It is the same as the four most
+//			significant bytes of the ONU serial number as specified in the respective transmission
+//			convergence (TC) layer specification. (R) (mandatory) (4 bytes)
+//
+//		Version
+//			Version:	This attribute identifies the version of the ONU as defined by the vendor. The
+//			character value 0 indicates that version information is not available or applicable. (R)
+//			(mandatory) (14 bytes)
+//
+//		Serial Number
+//			Serial number: The serial number is unique for each ONU. It is defined in the respective TC
+//			layer specification and contains the vendor ID and version number. The first four bytes are an
+//			ASCII-encoded four-letter vendor ID. The second four bytes are a binary encoded serial number,
+//			under the control of the ONU vendor. (R) (mandatory) (8 bytes)
+//
+//		Traffic Management Option
+//			Upon ME instantiation, the ONU sets this attribute to the value that describes its
+//			implementation. The OLT must adapt its model to conform to the ONU's selection. (R) (mandatory)
+//			(1 byte)
+//
+//		Deprecated
+//			Deprecated:	This attribute is not used. If it is present, it should be set to 0. (R) (optional)
+//			(1 byte)
+//
+//		Battery Backup
+//			Battery backup: This Boolean attribute controls whether the ONU performs backup battery
+//			monitoring (assuming it is capable of doing so). False disables battery alarm monitoring; true
+//			enables battery alarm monitoring. (R, W) (mandatory) (1 byte)
+//
+//		Administrative State
+//			Administrative state: This attribute locks (1) and unlocks (0) the functions performed by the
+//			ONU as an entirety. Administrative state is further described in clause A.1.6. (R, W)
+//			(mandatory) (1 byte)
+//
+//		Operational State
+//			Operational state: This attribute reports whether the ME is currently capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+//		Onu Survival Time
+//			ONU survival time: This attribute indicates the minimum guaranteed time in milliseconds between
+//			the loss of external power and the silence of the ONU. This does not include survival time
+//			attributable to a backup battery. The value zero implies that the actual time is not known. (R)
+//			(optional) (1 byte)
+//
+//		Logical Onu Id
+//			Logical ONU ID: This attribute provides a way for the ONU to identify itself. It is a text
+//			string, null terminated if it is shorter than 24 bytes, with a null default value. The mechanism
+//			for creation or modification of this information is beyond the scope of this Recommendation, but
+//			might include, for example, a web page displayed to a user. (R) (optional) (24 bytes)
+//
+//		Logical Password
+//			Logical password: This attribute provides a way for the ONU to submit authentication
+//			credentials. It is a text string, null terminated if it is shorter than 12 bytes, with a null
+//			default value. The mechanism for creation or modification of this information is beyond the
+//			scope of this Recommendation. (R) (optional) (12 bytes)
+//
+//		Credentials Status
+//			Other values are reserved.
+//
+//		Extended Tc_Layer Options
+//			(R) (optional) (2 bytes)
+//
+type OnuG struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	onugBME = &ManagedEntityDefinition{
+		Name:    "OnuG",
+		ClassID: 256,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Reboot,
+			Set,
+			SynchronizeTime,
+			Test,
+		),
+		AllowedAttributeMask: 0XFFF8,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  Uint32Field("VendorId", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  MultiByteField("Version", 14, nil, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3:  Uint64Field("SerialNumber", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  ByteField("TrafficManagementOption", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  ByteField("Deprecated", 0, mapset.NewSetWith(Read), false, false, true, true, 5),
+			6:  ByteField("BatteryBackup", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7:  ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8:  ByteField("OperationalState", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+			9:  ByteField("OnuSurvivalTime", 0, mapset.NewSetWith(Read), false, false, true, false, 9),
+			10: MultiByteField("LogicalOnuId", 24, nil, mapset.NewSetWith(Read), false, false, true, false, 10),
+			11: MultiByteField("LogicalPassword", 12, nil, mapset.NewSetWith(Read), false, false, true, false, 11),
+			12: ByteField("CredentialsStatus", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+			13: Uint16Field("ExtendedTcLayerOptions", 0, mapset.NewSetWith(Read), false, false, true, false, 13),
+		},
+	}
+}
+
+// NewOnuG (class ID 256 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 NewOnuG(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(onugBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/onu2-g.go b/vendor/github.com/cboling/omci/generated/onu2-g.go
new file mode 100644
index 0000000..ebad3be
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/onu2-g.go
@@ -0,0 +1,145 @@
+/*
+ * 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 Onu2GClassId ClassID = ClassID(257)
+
+var onu2gBME *ManagedEntityDefinition
+
+// Onu2G (class ID #257)
+//	This ME contains additional attributes associated with a PON ONU. The ONU automatically creates
+//	an instance of this ME. Its attributes are populated according to data within the ONU itself.
+//
+//	This ME is the same as the ONT2-G of [ITUT G.984.4], with extensions.
+//
+//	Relationships
+//		This ME is paired with the ONU-G entity.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. There is only
+//			one instance, number 0. (R) (mandatory) (2 bytes)
+//
+//		Equipment Id
+//			Equipment ID: This attribute may be used to identify the specific type of ONU. In some
+//			environments, this attribute may include the common language equipment identification (CLEI)
+//			code. (R) (optional) (20 bytes)
+//
+//		Optical Network Unit Management And Control Channel Omcc Version
+//			(R) (mandatory) (1 byte)
+//
+//		Vendor Product Code
+//			Vendor product code: This attribute contains a vendor-specific product code for the ONU. (R)
+//			(optional) (2 bytes)
+//
+//		Security Capability
+//			(R) (mandatory) (1 byte)
+//
+//		Security Mode
+//			Upon ME instantiation, the ONU sets this attribute to 1, AES-128. Attribute value 1 does not
+//			imply that any channels are encrypted; that process is negotiated at the PLOAM layer. It only
+//			signifies that the advanced encryption standard (AES) with 128 bit keys is the security mode to
+//			be used on any channels that the OLT may choose to encrypt. (R, W) (mandatory) (1 byte)
+//
+//		Total Priority Queue Number
+//			Total priority queue number: This attribute reports the total number of upstream priority queues
+//			that are not associated with a circuit pack, but with the ONU in its entirety. Upon ME
+//			instantiation, the ONU sets this attribute to the value that represents its capabilities. (R)
+//			(mandatory) (2 bytes)
+//
+//		Total Traffic Scheduler Number
+//			Total traffic scheduler number: This attribute reports the total number of traffic schedulers
+//			that are not associated with a circuit pack, but with the ONU in its entirety. The ONU supports
+//			null function, strict priority scheduling and weighted round robin (WRR) from the priority
+//			control and guarantee of minimum rate control points of view, respectively. If the ONU has no
+//			global traffic schedulers, this attribute is 0. (R) (mandatory) (1 byte)
+//
+//		Deprecated
+//			Deprecated:	This attribute should always be set to 1 by the ONU and ignored by the OLT. (R)
+//			(mandatory) (1 byte)
+//
+//		Total Gem Port_Id Number
+//			Total GEM port-ID number: This attribute reports the total number of GEM port-IDs supported by
+//			the ONU. The maximum value is specified in the corresponding TC recommendations. Upon ME
+//			instantiation, the ONU sets this attribute to the value that represents its capabilities. (R)
+//			(optional) (2 bytes)
+//
+//		Sysuptime
+//			SysUpTime:	This attribute counts 10 ms intervals since the ONU was last initialized. It rolls
+//			over to 0 when full (see [IETF RFC 1213]). (R) (optional) (4 bytes)
+//
+//		Connectivity Capability
+//			(R) (optional) (2 bytes)
+//
+//		Current Connectivity Mode
+//			(R, W) (optional) (1 byte)
+//
+//		Quality Of Service Qos Configuration Flexibility
+//			The ME ID of both the T-CONT and traffic scheduler contains a slot number. Even when attributes
+//			in the above list are RW, it is never permitted to change the slot number in a reference. That
+//			is, configuration flexibility never extends across slots. It is also not permitted to change the
+//			directionality of an upstream queue to downstream or vice versa.
+//
+//		Priority Queue Scale Factor
+//			NOTE 3 – Some legacy implementations may take the queue scale factor from the GEM block length
+//			attribute of the ANI-G ME. That option is discouraged in new implementations.
+//
+type Onu2G struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	onu2gBME = &ManagedEntityDefinition{
+		Name:    "Onu2G",
+		ClassID: 257,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFC,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  MultiByteField("EquipmentId", 20, nil, mapset.NewSetWith(Read), false, false, true, false, 1),
+			2:  ByteField("OpticalNetworkUnitManagementAndControlChannelOmccVersion", 0, mapset.NewSetWith(Read), true, false, false, false, 2),
+			3:  Uint16Field("VendorProductCode", 0, mapset.NewSetWith(Read), false, false, true, false, 3),
+			4:  ByteField("SecurityCapability", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  ByteField("SecurityMode", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6:  Uint16Field("TotalPriorityQueueNumber", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  ByteField("TotalTrafficSchedulerNumber", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  ByteField("Deprecated", 0, mapset.NewSetWith(Read), false, false, false, true, 8),
+			9:  Uint16Field("TotalGemPortIdNumber", 0, mapset.NewSetWith(Read), false, false, true, false, 9),
+			10: Uint32Field("Sysuptime", 0, mapset.NewSetWith(Read), false, false, true, false, 10),
+			11: Uint16Field("ConnectivityCapability", 0, mapset.NewSetWith(Read), false, false, true, false, 11),
+			12: ByteField("CurrentConnectivityMode", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+			13: Uint16Field("QualityOfServiceQosConfigurationFlexibility", 0, mapset.NewSetWith(Read), false, false, true, false, 13),
+			14: Uint16Field("PriorityQueueScaleFactor", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 14),
+		},
+	}
+}
+
+// NewOnu2G (class ID 257 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 NewOnu2G(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(onu2gBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/onudata.go b/vendor/github.com/cboling/omci/generated/onudata.go
new file mode 100644
index 0000000..8f52e5c
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/onudata.go
@@ -0,0 +1,81 @@
+/*
+ * 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 OnuDataClassId ClassID = ClassID(2)
+
+var onudataBME *ManagedEntityDefinition
+
+// OnuData (class ID #2)
+//	This ME models the MIB itself. Clause I.1.3 explains the use of this ME with respect to MIB
+//	synchronization.
+//
+//	The ONU automatically creates an instance of this ME, and updates the associated attributes
+//	according to data within the ONU itself.
+//
+//	Relationships
+//		One instance of this ME is contained in an ONU.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. There is only
+//			one instance, number 0. (R) (mandatory) (2 bytes)
+//
+//		Mib Data Sync
+//			MIB data sync: This attribute is used to check the alignment of the MIB of the ONU with the
+//			corresponding MIB in the OLT. MIB data sync relies on this attribute, which is a sequence number
+//			that can be checked by the OLT to see if the MIB snapshots for the OLT and ONU match. Refer to
+//			clause I.1.2.1 for a detailed description of this attribute. Upon ME instantiation, the ONU sets
+//			this attribute to 0. (R, W) (mandatory) (1 byte)
+//
+type OnuData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	onudataBME = &ManagedEntityDefinition{
+		Name:    "OnuData",
+		ClassID: 2,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			GetAllAlarms,
+			GetAllAlarmsNext,
+			MibReset,
+			MibUpload,
+			MibUploadNext,
+			Set,
+		),
+		AllowedAttributeMask: 0X8000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: ByteField("MibDataSync", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+		},
+	}
+}
+
+// NewOnuData (class ID 2 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 NewOnuData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(onudataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/onudynamicpowermanagementcontrol.go b/vendor/github.com/cboling/omci/generated/onudynamicpowermanagementcontrol.go
new file mode 100644
index 0000000..8952268
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/onudynamicpowermanagementcontrol.go
@@ -0,0 +1,145 @@
+/*
+ * 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 OnuDynamicPowerManagementControlClassId ClassID = ClassID(336)
+
+var onudynamicpowermanagementcontrolBME *ManagedEntityDefinition
+
+// OnuDynamicPowerManagementControl (class ID #336)
+//	This ME models the ONU's ability to enter power conservation modes in cooperation with the OLT
+//	in an ITU-T G.987 system. [ITUT G.987.3] originally specified two alternative modes, doze and
+//	cyclic sleep. The subsequent revision of [ITUT G.987.3] simplified the specification providing a
+//	single power conservation mode, watchful sleep.
+//
+//	An ONU that supports power conservation modes automatically creates an instance of this ME.
+//
+//	Relationships
+//		One instance of this ME is associated with the ONU ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. There is only
+//			one instance, number 0. (R) (mandatory) (2 bytes)
+//
+//		Power Reduction Management Capability
+//			5..255	Reserved
+//
+//		Power Reduction Management Mode
+//			Power reduction management mode: This attribute enables one or more of the ONU's managed power
+//			conservation modes. It is a bit map in which the bit value 0 disables the mode, while the value
+//			1 enables the mode. Bit assignments are the same as those of the power reduction management
+//			capability attribute. The default value of each bit is 0. (R, W) (mandatory) (1 byte)
+//
+//		Itransinit
+//			Itransinit:	This attribute is the ONU vendor's statement of the complete transceiver
+//			initialization time: the worst-case time required for the ONU to regain full functionality when
+//			leaving the asleep state in cyclic sleep mode or low-power state in watchful sleep mode (i.e.,
+//			turning on both the receiver and the transmitter and acquiring synchronization to the downstream
+//			flow), measured in units of 125 µs frames. The value zero indicates that the sleeping ONU can
+//			respond to a bandwidth grant without delay. (R) (mandatory) (2 bytes)
+//
+//		Itxinit
+//			Itxinit:	This attribute is the ONU vendor's statement of the transmitter initialization time:
+//			the time required for the ONU to regain full functionality when leaving the listen state (i.e.,
+//			turning on the transmitter), measured in units of 125 µs frames. The value zero indicates that
+//			the dozing ONU can respond to a bandwidth grant without delay. If watchful sleep is enabled, the
+//			ONU ignores this attribute. (R) (mandatory) (2 bytes)
+//
+//		Maximum Sleep Interval
+//			Maximum sleep interval: The Isleep/Ilowpower attribute specifies the maximum time the ONU spends
+//			in its asleep, listen, or low-power states, as a count of 125 µs frames. Local or remote events
+//			may truncate the ONU's sojourn in these states. The default value of this attribute is 0. (R, W)
+//			(mandatory) (4 bytes)
+//
+//		Maximum Receiver_Off Interval
+//			Maximum receiver-off interval: The Irxoff attribute specifies the maximum time the OLT can
+//			afford to wait from the moment it decides to wake up an ONU in the low-power state of the
+//			watchful sleep mode until the ONU is fully operational, specified as a count of 125 µs frames.
+//			(R, W) (mandatory) (4 bytes)
+//
+//		Minimum Aware Interval
+//			Minimum aware interval: The Iaware attribute specifies the time the ONU spends in its aware
+//			state, as a count of 125 µs frames, before it re-enters asleep or listen states. Local or remote
+//			events may independently cause the ONU to enter an active state rather than returning to a sleep
+//			state. The default value of this attribute is 0. (R, W) (mandatory) (4 bytes)
+//
+//		Minimum Active Held Interval
+//			Minimum active held interval: The Ihold attribute specifies the minimum time during which the
+//			ONU remains in the active held state, as a count of 125 µs frames. Its initial value is zero.
+//			(R, W) (mandatory) (2 bytes)
+//
+//		Maximum Sleep Interval Extension
+//			(R, W) (optional) (8 bytes)
+//
+//		Ethernet Passive Optical Network Epon Capability Extension
+//			–	Configurations:
+//				ackEnable configuration = enable,
+//				Sleep indication configuration = disable,
+//			Early wake-up configuration = enable
+//
+//		Epon Setup Extension
+//			(R, W) (optional) (1 byte)
+//
+//		Missing Consecutive Bursts Threshold
+//			Missing consecutive bursts threshold: The Clobi attribute specifies the maximum number of
+//			missing consecutive scheduled bursts from the ONU that the OLT is willing to tolerate without
+//			raising an alarm. The value of this attribute defaults to 4. (R, W) (mandatory) (4 bytes)
+//
+type OnuDynamicPowerManagementControl struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	onudynamicpowermanagementcontrolBME = &ManagedEntityDefinition{
+		Name:    "OnuDynamicPowerManagementControl",
+		ClassID: 336,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFF0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("PowerReductionManagementCapability", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  ByteField("PowerReductionManagementMode", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3:  Uint16Field("Itransinit", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint16Field("Itxinit", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("MaximumSleepInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6:  Uint32Field("MaximumReceiverOffInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7:  Uint32Field("MinimumAwareInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8:  Uint16Field("MinimumActiveHeldInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
+			9:  Uint64Field("MaximumSleepIntervalExtension", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 9),
+			10: ByteField("EthernetPassiveOpticalNetworkEponCapabilityExtension", 0, mapset.NewSetWith(Read), false, false, true, false, 10),
+			11: ByteField("EponSetupExtension", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
+			12: Uint32Field("MissingConsecutiveBurstsThreshold", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 12),
+		},
+	}
+}
+
+// NewOnuDynamicPowerManagementControl (class ID 336 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 NewOnuDynamicPowerManagementControl(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(onudynamicpowermanagementcontrolBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/onupowershedding.go b/vendor/github.com/cboling/omci/generated/onupowershedding.go
new file mode 100644
index 0000000..62be255
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/onupowershedding.go
@@ -0,0 +1,126 @@
+/*
+ * 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 OnuPowerSheddingClassId ClassID = ClassID(133)
+
+var onupowersheddingBME *ManagedEntityDefinition
+
+// OnuPowerShedding (class ID #133)
+//	This ME models the ONU's ability to shed services when the ONU goes into battery operation mode
+//	after AC power failure. Shedding classes are defined in the following table, which may span
+//	multiple circuit pack types. This feature works in conjunction with the power shed override
+//	attribute of the circuit pack ME, which can selectively prevent power shedding of priority
+//	ports.
+//
+//	An ONU that supports power shedding automatically creates an instance of this ME.
+//
+//	The following table defines the binding of shedding class and PPTP type. The coding is taken
+//	from Table 9.1.5-1. In the case of hybrid circuit pack types, multiple shedding classes may
+//	affect a circuit pack if the hardware is capable of partial power shedding.
+//
+//	An ONU may choose to model its ports with the port-mapping package of clause 9.1.8, rather than
+//	with real or virtual circuit packs. In this case, power shedding pertains to individual PPTPs
+//	(listed in column 2 of the table).
+//
+//	Relationships
+//		One instance of this ME is associated with the ONU ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. There is only
+//			one instance, number 0. (R) (mandatory) (2 bytes)
+//
+//		Restore Power Timer Reset Interval
+//			Restore power timer reset interval: The time delay, in seconds, before resetting the power-
+//			shedding timers after full power restoration. Upon ME instantiation, the ONU sets this attribute
+//			to 0. (R, W) (mandatory) (2 bytes)
+//
+//		Data Class Shedding Interval
+//			Data class shedding interval:	(R, W) (mandatory) (2 bytes)
+//
+//		Voice Class Shedding Interval
+//			Voice class shedding interval: This attribute only pertains to voice services that terminate on
+//			the ONU and are under the management control of the OMCI. (R, W) (mandatory) (2 bytes)
+//
+//		Video Overlay Class Shedding Interval
+//			Video overlay class shedding interval:	(R, W) (mandatory) (2 bytes)
+//
+//		Video Return Class Shedding Interval
+//			Video return class shedding interval:	(R, W) (mandatory) (2 bytes)
+//
+//		Digital Subscriber Line Class Shedding Interval
+//			Digital subscriber line (DSL) class shedding interval:	(R, W) (mandatory) (2 bytes)
+//
+//		Atm Class Shedding Interval
+//			ATM class shedding interval:	(R, W) (mandatory) (2 bytes)
+//
+//		Ces Class Shedding Interval
+//			CES class shedding interval:	(R, W) (mandatory) (2 bytes)
+//
+//		Frame Class Shedding Interval
+//			Frame class shedding interval:	(R, W) (mandatory) (2 bytes)
+//
+//		Sdh_Sonet Class Shedding Interval
+//			Sdh-sonet class shedding interval:	(R, W) (mandatory) (2 bytes)
+//
+//		Shedding Status
+//			The ONU sets each bit to 1 when power shedding is active, and clears it to 0 when the service is
+//			restored. (R) (optional) (2 bytes)
+//
+type OnuPowerShedding struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	onupowersheddingBME = &ManagedEntityDefinition{
+		Name:    "OnuPowerShedding",
+		ClassID: 133,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFE0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  Uint16Field("RestorePowerTimerResetInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2:  Uint16Field("DataClassSheddingInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3:  Uint16Field("VoiceClassSheddingInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4:  Uint16Field("VideoOverlayClassSheddingInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5:  Uint16Field("VideoReturnClassSheddingInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6:  Uint16Field("DigitalSubscriberLineClassSheddingInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7:  Uint16Field("AtmClassSheddingInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8:  Uint16Field("CesClassSheddingInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
+			9:  Uint16Field("FrameClassSheddingInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 9),
+			10: Uint16Field("SdhSonetClassSheddingInterval", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 10),
+			11: Uint16Field("SheddingStatus", 0, mapset.NewSetWith(Read), true, false, true, false, 11),
+		},
+	}
+}
+
+// NewOnuPowerShedding (class ID 133 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 NewOnuPowerShedding(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(onupowersheddingBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/physicalpathterminationpointcesuni.go b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointcesuni.go
new file mode 100644
index 0000000..3f2320e
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointcesuni.go
@@ -0,0 +1,146 @@
+/*
+ * 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 PhysicalPathTerminationPointCesUniClassId ClassID = ClassID(12)
+
+var physicalpathterminationpointcesuniBME *ManagedEntityDefinition
+
+// PhysicalPathTerminationPointCesUni (class ID #12)
+//	This ME represents the point at a CES UNI in the ONU where the physical path terminates and
+//	physical level functions are performed.
+//
+//	The ONU automatically creates an instance of this ME per port:
+//
+//	•	when the ONU has CES ports built into its factory configuration;
+//
+//	•	when a cardholder is provisioned to expect a circuit pack of a CES type;
+//
+//	•	when a cardholder provisioned for plug-and-play is equipped with a circuit pack of a CES type.
+//	Note that the installation of a plug-and-play card may indicate the presence of CES ports via
+//	equipment ID as well as its type and indeed may cause the ONU to instantiate a port-mapping
+//	package that specifies CES ports.
+//
+//	The ONU automatically deletes instances of this ME when a cardholder is neither provisioned to
+//	expect a CES circuit pack, nor is it equipped with a CES circuit pack.
+//
+//	Relationships
+//		An instance of this ME is associated with each real or pre-provisioned CES port. It can be
+//		linked from a GEM IW TP, a pseudowire TP or a logical N × 64 kbit/s CTP.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. This 2 byte
+//			number indicates the physical position of the UNI. The first byte is the slot ID (defined in
+//			clause 9.1.5). The second byte is the port ID, with the range 1..255. (R) (mandatory) (2 bytes)
+//
+//		Expected Type
+//			Upon ME instantiation, the ONU sets this attribute to 0. (R, W) (mandatory) (1 byte)
+//
+//		Sensed Type
+//			Sensed type:	If the value of expected type is not 0, then the value of sensed type equals the
+//			value of expected type. If expected type = 0, then the value of sensed type is one of the
+//			compatible values from Table 9.1.5-1. Upon ME instantiation, the ONU sets this attribute to 0 or
+//			to the value that reflects the physically present equipment. (R) (mandatory if the ONU supports
+//			circuit packs with configurable interface types, e.g., C1.5/2/6.3) (1 byte)
+//
+//		Ces Loopback Configuration
+//			Upon ME instantiation, the ONU sets this attribute to 0. (R, W) (mandatory) (1 byte)
+//
+//		Administrative State
+//			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) (mandatory) (1 byte)
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the ME is capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+//		Framing
+//			Upon ME instantiation, the ONU sets this attribute to a value that reflects the vendor's
+//			default. (R, W) (optional) (1 byte)
+//
+//		Encoding
+//			Upon ME instantiation, the ONU sets this attribute to 0. (R, W) (mandatory for DS1 and DS3
+//			interfaces) (1 byte)
+//
+//		Line Length
+//			Line length:	This attribute specifies the length of the twisted pair cable from a DS1 physical
+//			UNI to the DSX-1 cross-connect point or the length of coaxial cable from a DS3 physical UNI to
+//			the DSX-3 cross-connect point. Valid values are given in Table 9.8.1-1. Upon ME instantiation
+//			for a DS1 interface, the ONU assigns the value 0 for non-power feed type DS1 and the value 6 for
+//			power feed type DS1. Upon ME instantiation for a DS3 interface, the ONU sets this attribute to
+//			0x0F. (R, W) (optional) (1 byte)
+//
+//		Ds1 Mode
+//			In the event of conflicting values between this attribute and the (also optional) line length
+//			attribute, the line length attribute is taken to be valid. This permits the separation of line
+//			build-out (LBO) and power settings from smart jack and FDL behaviour. Upon ME instantiation, the
+//			ONU sets this attribute to 0. (R, W) (optional) (1 byte)
+//
+//		Arc
+//			ARC:	See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Arc Interval
+//			ARC interval: See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Line Type
+//			(R, W) (mandatory for DS3, E3 and multi-configuration interfaces, not applicable to other
+//			interfaces) (1 byte)
+//
+type PhysicalPathTerminationPointCesUni struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	physicalpathterminationpointcesuniBME = &ManagedEntityDefinition{
+		Name:    "PhysicalPathTerminationPointCesUni",
+		ClassID: 12,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFF0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("ExpectedType", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2:  ByteField("SensedType", 0, mapset.NewSetWith(Read), true, false, false, false, 2),
+			3:  ByteField("CesLoopbackConfiguration", 0, mapset.NewSetWith(Read, Write), true, false, false, false, 3),
+			4:  ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5:  ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 5),
+			6:  ByteField("Framing", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 6),
+			7:  ByteField("Encoding", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8:  ByteField("LineLength", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 8),
+			9:  ByteField("Ds1Mode", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 9),
+			10: ByteField("Arc", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 10),
+			11: ByteField("ArcInterval", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
+			12: ByteField("LineType", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 12),
+		},
+	}
+}
+
+// NewPhysicalPathTerminationPointCesUni (class ID 12 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 NewPhysicalPathTerminationPointCesUni(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(physicalpathterminationpointcesuniBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/physicalpathterminationpointethernetuni.go b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointethernetuni.go
new file mode 100644
index 0000000..3f51e0f
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointethernetuni.go
@@ -0,0 +1,155 @@
+/*
+ * 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 PhysicalPathTerminationPointEthernetUniClassId ClassID = ClassID(11)
+
+var physicalpathterminationpointethernetuniBME *ManagedEntityDefinition
+
+// PhysicalPathTerminationPointEthernetUni (class ID #11)
+//	This ME represents the point at an Ethernet UNI where the physical path terminates and Ethernet
+//	physical level functions are performed.
+//
+//	The ONU automatically creates an instance of this ME per port:
+//
+//	•	when the ONU has Ethernet ports built into its factory configuration;
+//
+//	•	when a cardholder is provisioned to expect a circuit pack of the Ethernet type;
+//
+//	•	when a cardholder provisioned for plug-and-play is equipped with a circuit pack of the
+//	Ethernet type. Note that the installation of a plug-and-play card may indicate the presence of
+//	Ethernet ports via equipment ID as well as its type, and indeed may cause the ONU to instantiate
+//	a port-mapping package that specifies Ethernet ports.
+//
+//	The ONU automatically deletes instances of this ME when a cardholder is neither provisioned to
+//	expect an Ethernet circuit pack, nor is it equipped with an Ethernet circuit pack.
+//
+//	Relationships
+//		An instance of this ME is associated with each instance of a pre-provisioned or real Ethernet
+//		port.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. This 2 byte
+//			number indicates the physical position of the UNI. The first byte is the slot ID (defined in
+//			clause 9.1.5). The second byte is the port ID, with the range 1..255. (R) (mandatory) (2 bytes)
+//
+//		Expected Type
+//			Upon ME instantiation, the ONU sets this attribute to 0. (R, W) (mandatory) (1 byte)
+//
+//		Sensed Type
+//			(R) (mandatory if the ONU supports circuit packs with configurable interface types, e.g., 10/100
+//			BASE-T card) (1 byte)
+//
+//		Auto Detection Configuration
+//			Upon ME instantiation, the ONU sets this attribute to 0. (R, W) (mandatory for interfaces with
+//			autodetection options) (1 byte)
+//
+//		Ethernet Loopback Configuration
+//			Upon ME instantiation, the ONU sets this attribute to 0. (R, W) (mandatory) (1 byte)
+//
+//		Administrative State
+//			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) (mandatory) (1 byte)
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the ME is capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+//		Configuration Ind
+//			The value 0 indicates that the configuration status is unknown (e.g., Ethernet link is not
+//			established or the circuit pack is not yet installed). Upon ME instantiation, the ONU sets this
+//			attribute to 0. (R) (mandatory) (1 byte)
+//
+//		Max Frame Size
+//			Max frame size: This attribute denotes the maximum frame size allowed across this interface.
+//			Upon ME instantiation, the ONU sets the attribute to 1518. (R, W) (mandatory for G-PON, optional
+//			for ITU-T G.986 systems) (2 bytes)
+//
+//		Dte Or Dce Ind
+//			(R, W) (mandatory) (1 byte)
+//
+//		Pause Time
+//			Pause time:	This attribute allows the PPTP to ask the subscriber terminal to temporarily suspend
+//			sending data. Units are in pause quanta (1 pause quantum is 512 bit times of the particular
+//			implementation). Values: 0..0xFFFF. Upon ME instantiation, the ONU sets this attribute to 0.
+//			(R, W) (optional) (2 bytes)
+//
+//		Bridged Or Ip Ind
+//			Upon ME instantiation, the ONU sets this attribute to 2. (R, W) (optional) (1 byte)
+//
+//		Arc
+//			ARC:	See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Arc Interval
+//			ARC interval: See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Pppoe Filter
+//			PPPoE filter: This attribute controls filtering of PPPoE packets on this Ethernet port. The
+//			value 0 allows packets of all types. The value 1 discards everything but PPPoE packets. The
+//			default value is 0. (R, W) (optional) (1 byte)
+//
+//		Power Control
+//			NOTE – This attribute is the equivalent of the acPSEAdminControl variable defined in clause
+//			30.9.1.2.1 of [IEEE 802.3]. Other variables related to PoE appear in the PoE control ME.
+//
+type PhysicalPathTerminationPointEthernetUni struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	physicalpathterminationpointethernetuniBME = &ManagedEntityDefinition{
+		Name:    "PhysicalPathTerminationPointEthernetUni",
+		ClassID: 11,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFE,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("ExpectedType", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2:  ByteField("SensedType", 0, mapset.NewSetWith(Read), true, false, false, false, 2),
+			3:  ByteField("AutoDetectionConfiguration", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4:  ByteField("EthernetLoopbackConfiguration", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5:  ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6:  ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 6),
+			7:  ByteField("ConfigurationInd", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint16Field("MaxFrameSize", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
+			9:  ByteField("DteOrDceInd", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 9),
+			10: Uint16Field("PauseTime", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 10),
+			11: ByteField("BridgedOrIpInd", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
+			12: ByteField("Arc", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 12),
+			13: ByteField("ArcInterval", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 13),
+			14: ByteField("PppoeFilter", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 14),
+			15: ByteField("PowerControl", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 15),
+		},
+	}
+}
+
+// NewPhysicalPathTerminationPointEthernetUni (class ID 11 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 NewPhysicalPathTerminationPointEthernetUni(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(physicalpathterminationpointethernetuniBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/physicalpathterminationpointlctuni.go b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointlctuni.go
new file mode 100644
index 0000000..9287fdf
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointlctuni.go
@@ -0,0 +1,99 @@
+/*
+ * 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 PhysicalPathTerminationPointLctUniClassId ClassID = ClassID(83)
+
+var physicalpathterminationpointlctuniBME *ManagedEntityDefinition
+
+// PhysicalPathTerminationPointLctUni (class ID #83)
+//	This ME models debug access to the ONU from any physical or logical port, for example, via a
+//	dedicated LCT UNI, via ordinary subscriber UNIs, or via the IP host config ME.
+//
+//	The ONU automatically creates an instance of this ME per port:
+//
+//	•	when the ONU has an LCT port built into its factory configuration;
+//
+//	•	when a cardholder is provisioned to expect a circuit pack of the LCT type;
+//
+//	•	when a cardholder provisioned for plug-and-play is equipped with a circuit pack of the LCT
+//	type;
+//
+//	NOTE – The installation of a plug-and-play card may indicate the presence of LCT ports via
+//	equipment ID as well as its type, and indeed may cause the ONU to instantiate a port-mapping
+//	package that specifies LCT ports.
+//
+//	•	when the ONU supports debug access through some other physical or logical means.
+//
+//	The ONU automatically deletes an instance of this ME when a cardholder is neither provisioned to
+//	expect an LCT circuit pack, nor is it equipped with an LCT circuit pack, or if the ONU is
+//	reconfigured in such a way that it no longer supports debug access.
+//
+//	LCT instances are not reported during an MIB upload.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of a real or virtual circuit pack ME
+//		classified as an LCT type. An instance of this ME may also be associated with the ONU as a
+//		whole, if the ONU supports debug access through means other than a dedicated physical LCT port.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. This 2 byte
+//			number indicates the physical position of the UNI. The first byte is the slot ID (defined in
+//			clause 9.1.5). The second byte is the port ID, with the range 1..255. If the LCT UNI is
+//			associated with the ONU as a whole, its ME ID should be 0. (R) (mandatory) (2 bytes)
+//
+//		Administrative State
+//			Administrative state: This attribute locks (1) and unlocks (0) the functions performed by this
+//			ME. Administrative state is described generically in clause A.1.6. The LCT has additional
+//			administrative state behaviour. When the administrative state is set to lock, debug access
+//			through all physical or logical means is blocked, except that the operation of a possible ONU
+//			remote debug ME is not affected. Administrative lock of ME instance 0 overrides administrative
+//			lock of any other PPTP LCT UNIs that may exist. (R, W) (mandatory) (1 byte)
+//
+type PhysicalPathTerminationPointLctUni struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	physicalpathterminationpointlctuniBME = &ManagedEntityDefinition{
+		Name:    "PhysicalPathTerminationPointLctUni",
+		ClassID: 83,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0X8000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+		},
+	}
+}
+
+// NewPhysicalPathTerminationPointLctUni (class ID 83 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 NewPhysicalPathTerminationPointLctUni(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(physicalpathterminationpointlctuniBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/physicalpathterminationpointmocauni.go b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointmocauni.go
new file mode 100644
index 0000000..29ab438
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointmocauni.go
@@ -0,0 +1,154 @@
+/*
+ * 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 PhysicalPathTerminationPointMocaUniClassId ClassID = ClassID(162)
+
+var physicalpathterminationpointmocauniBME *ManagedEntityDefinition
+
+// PhysicalPathTerminationPointMocaUni (class ID #162)
+//	This ME represents an MoCA UNI, where physical paths terminate and physical path level functions
+//	are performed.
+//
+//	The ONU automatically creates an instance of this ME per port as follows.
+//
+//	•	When the ONU has MoCA ports built into its factory configuration.
+//
+//	•	When a cardholder is provisioned to expect a circuit pack of the MoCA type.
+//
+//	•	When a cardholder provisioned for plug-and-play is equipped with a circuit pack of the MoCA
+//	type. Note that the installation of a plug-and-play card may indicate the presence of MoCA ports
+//	via equipment ID as well as its type, and indeed may cause the ONU to instantiate a port-mapping
+//	package that specifies MoCA ports.
+//
+//	The ONU automatically deletes instances of this ME when a cardholder is neither provisioned to
+//	expect an MoCA circuit pack, nor is it equipped with an MoCA circuit pack.
+//
+//	Relationships
+//		An instance of this ME is associated with each real or pre-provisioned MoCA port.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. This 2 byte
+//			number is directly associated with the physical position of the UNI. The first byte is the slot
+//			ID (defined in clause 9.1.5). The second byte is the port ID, with the range 1..255. (R)
+//			(mandatory) (2 bytes)
+//
+//		Loopback Configuration
+//			Upon ME instantiation, the ONU sets this attribute to 0. (R, W) (optional) (1 byte)
+//
+//		Administrative State
+//			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) (mandatory) (1 byte)
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the ME is capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+//		Max Frame Size
+//			Max frame size: This attribute denotes the maximum frame size allowed across this interface.
+//			Upon ME instantiation, the ONU sets this attribute to 1518. (R, W) (mandatory) (2 bytes)
+//
+//		Arc
+//			ARC:	See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Arc Interval
+//			ARC interval: See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Pppoe Filter
+//			PPPoE filter: This attribute controls filtering of PPPoE packets on this MoCA port. When its
+//			value is 1, all packets other than PPPoE packets are discarded. The default 0 accepts packets of
+//			all types. (R, W) (optional) (1 byte)
+//
+//		Network Status
+//			(R) (mandatory) (1 byte)
+//
+//		Password
+//			Password:	This attribute specifies the MoCA encryption key. It is an ASCII string of 17 decimal
+//			digits. Upon ME instantiation, the ONU sets this attribute to 17 null bytes. (R, W) (mandatory)
+//			(17 bytes)
+//
+//		Privacy Enabled
+//			Privacy enabled: This attribute activates (1) link-layer security. The default value 0
+//			deactivates it. (R, W) (mandatory) (1 byte)
+//
+//		Minimum Bandwidth Alarm Threshold
+//			Minimum bandwidth alarm threshold: This attribute specifies the minimum desired PHY link
+//			bandwidth between two nodes. If the actual bandwidth is lower, an LL alarm is declared. Valid
+//			values are 0 to 0x0410 (260 Mbit/s) in 0.25 Mbit/s increments. The default value is 0x02D0
+//			(180 Mbit/s). The value 0 disables the threshold. (R, W) (optional) (2 bytes)
+//
+//		Frequency Mask
+//			Frequency mask: This attribute is a bit map of the centre frequencies that the interface is
+//			permitted to use, where each bit represents a centre frequency. The LSB (b[1]) corresponds to
+//			centre frequency 800 MHz. The next significant bit (b[2]) corresponds to centre frequency
+//			825 MHz. The 28th bit (b[28]) corresponds to centre frequency 1500 MHz. The four MSBs are not
+//			used. (R, W) (optional) (4 bytes)
+//
+//		Rf Channel
+//			RF channel:	This attribute reports the frequency to which the MoCA interface is currently tuned,
+//			in megahertz. (R) (mandatory) (2 bytes)
+//
+//		Last Operational Frequency
+//			Last operational frequency: This attribute reports the frequency to which the MoCA interface was
+//			tuned when last operational, in megahertz. (R) (mandatory) (2 bytes)
+//
+type PhysicalPathTerminationPointMocaUni struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	physicalpathterminationpointmocauniBME = &ManagedEntityDefinition{
+		Name:    "PhysicalPathTerminationPointMocaUni",
+		ClassID: 162,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFC,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("LoopbackConfiguration", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 1),
+			2:  ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3:  ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 3),
+			4:  Uint16Field("MaxFrameSize", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5:  ByteField("Arc", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 5),
+			6:  ByteField("ArcInterval", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 6),
+			7:  ByteField("PppoeFilter", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 7),
+			8:  ByteField("NetworkStatus", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  MultiByteField("Password", 17, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 9),
+			10: ByteField("PrivacyEnabled", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 10),
+			11: Uint16Field("MinimumBandwidthAlarmThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
+			12: Uint32Field("FrequencyMask", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+			13: Uint16Field("RfChannel", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint16Field("LastOperationalFrequency", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+		},
+	}
+}
+
+// NewPhysicalPathTerminationPointMocaUni (class ID 162 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 NewPhysicalPathTerminationPointMocaUni(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(physicalpathterminationpointmocauniBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/physicalpathterminationpointpotsuni.go b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointpotsuni.go
new file mode 100644
index 0000000..8264200
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointpotsuni.go
@@ -0,0 +1,163 @@
+/*
+ * 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 PhysicalPathTerminationPointPotsUniClassId ClassID = ClassID(53)
+
+var physicalpathterminationpointpotsuniBME *ManagedEntityDefinition
+
+// PhysicalPathTerminationPointPotsUni (class ID #53)
+//	This ME represents a POTS UNI in the ONU, where a physical path terminates and physical path
+//	level functions (analogue telephony) are performed.
+//
+//	The ONU automatically creates an instance of this ME per port as follows.
+//
+//	•	When the ONU has POTS ports built into its factory configuration.
+//
+//	•	When a cardholder is provisioned to expect a circuit pack of the POTS type.
+//
+//	•	When a cardholder provisioned for plug-and-play is equipped with a circuit pack of the POTS
+//	type. Note that the installation of a plug-and-play card may indicate the presence of POTS ports
+//	via equipment ID as well as type, and indeed may cause the ONU to instantiate a port-mapping
+//	package that specifies POTS ports.
+//
+//	The ONU automatically deletes instances of this ME when a cardholder is neither provisioned to
+//	expect a POTS circuit pack, nor is it equipped with a POTS circuit pack.
+//
+//	Relationships
+//		An instance of this ME is associated with each real or pre-provisioned POTS port. Either a SIP
+//		or a VoIP voice CTP links to the POTS UNI. Status is available from a VoIP line status ME, and
+//		RTP and call control PM may be collected on this point.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. This 2 byte
+//			number indicates the physical position of the UNI. The first byte is the slot ID (defined in
+//			clause 9.1.5). The second byte is the port ID, with the range 1..255. (R) (mandatory) (2 bytes)
+//
+//		Administrative State
+//			When the administrative state is set to lock, all user functions of this UNI are blocked, and
+//			alarms, TCAs and AVCs for this ME and all dependent MEs are no longer generated. Selection of a
+//			default value for this attribute is outside the scope of this Recommendation. (R, W) (mandatory)
+//			(1 byte)
+//
+//		Deprecated
+//			Deprecated: This attribute is not used and should not be supported. (R, W) (optional) (2 bytes)
+//
+//		Arc
+//			ARC:	See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Arc Interval
+//			ARC interval: See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Impedance
+//			where C1, R1, and R2 are related as shown in Figure 9.9.1-1. Upon ME instantiation, the ONU sets
+//			this attribute to 0. (R, W) (optional) (1 byte)
+//
+//		Transmission Path
+//			Transmission path: This attribute allows setting the POTS UNI either to full-time on-hook
+//			transmission (0) or part-time on-hook transmission (1). Upon ME instantiation, the ONU sets this
+//			attribute to 0. (R, W) (optional) (1 byte)
+//
+//		Rx Gain
+//			Rx gain:	This attribute specifies a gain value for the received signal in the form of a 2s
+//			complement number. Valid values are –120 (12.0 dB) to 60 (+6.0 dB). The direction of the
+//			affected signal is in the D to A direction, towards the telephone set. Upon ME instantiation,
+//			the ONU sets this attribute to 0. (R, W) (optional) (1 byte)
+//
+//		Tx Gain
+//			Tx gain:	This attribute specifies a gain value for the transmit signal in the form of a 2s
+//			complement number. Valid values are –120 (12.0 dB) to 60 (+6.0 dB). The direction of the
+//			affected signal is in the A to D direction, away from the telephone set. Upon ME instantiation,
+//			the ONU sets this attribute to 0. (R, W) (optional) (1 byte)
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the ME is capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+//		Hook State
+//			Hook state:	This attribute indicates the current state of the subscriber line: 0 = on hook, 1 =
+//			off hook (R) (optional) (1 byte)
+//
+//		Pots Holdover Time
+//			POTS holdover time: This attribute determines the time during which the POTS loop voltage is
+//			held up when a LOS or softswitch connectivity is detected (please refer to the following table
+//			for description of behaviours).. After the specified time elapses, the ONU drops the loop
+//			voltage, and may thereby cause premises intrusion alarm or fire panel circuits to go active.
+//			When the ONU ranges successfully on the PON or softswitch connectivity is restored, it restores
+//			the POTS loop voltage immediately and resets the timer to zero. The attribute is expressed in
+//			seconds. The default value 0 selects the vendor's factory policy. (R, W) (optional) (2 bytes)
+//
+//		Nominal Feed Voltage
+//			Nominal feed voltage: This attribute indicates the designed nominal feed voltage of the POTS
+//			loop. It is an absolute value with resolution 1 V. This attribute does not represent the actual
+//			voltage measured on the loop, which is available through the test command. (R, W) (optional)
+//			(1 byte)
+//
+//		Loss Of Softswitch
+//			Loss of softswitch: This Boolean attribute controls whether the T/R holdover initiation
+//			criteria. False disables loss of softswitch connectivity detection as criteria for initiating
+//			the POTS holdover timer. True enables loss of softswitch connectivity detection as criteria for
+//			initiating the POTS holdover timer. This attribute is optional (if not implemented, the POTS
+//			holdover time is triggered on a LOS when POTS holdover is greater than zero). (R, W) (optional)
+//			(1 byte)
+//
+type PhysicalPathTerminationPointPotsUni struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	physicalpathterminationpointpotsuniBME = &ManagedEntityDefinition{
+		Name:    "PhysicalPathTerminationPointPotsUni",
+		ClassID: 53,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+			Test,
+		),
+		AllowedAttributeMask: 0XFFF8,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), true, false, false, false, 1),
+			2:  Uint16Field("Deprecated", 0, mapset.NewSetWith(Read, Write), false, false, true, true, 2),
+			3:  ByteField("Arc", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 3),
+			4:  ByteField("ArcInterval", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+			5:  ByteField("Impedance", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 5),
+			6:  ByteField("TransmissionPath", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 6),
+			7:  ByteField("RxGain", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 7),
+			8:  ByteField("TxGain", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 8),
+			9:  ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 9),
+			10: ByteField("HookState", 0, mapset.NewSetWith(Read), false, false, true, false, 10),
+			11: Uint16Field("PotsHoldoverTime", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
+			12: ByteField("NominalFeedVoltage", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+			13: ByteField("LossOfSoftswitch", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 13),
+		},
+	}
+}
+
+// NewPhysicalPathTerminationPointPotsUni (class ID 53 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 NewPhysicalPathTerminationPointPotsUni(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(physicalpathterminationpointpotsuniBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/physicalpathterminationpointvideoani.go b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointvideoani.go
new file mode 100644
index 0000000..494121d
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointvideoani.go
@@ -0,0 +1,157 @@
+/*
+ * 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 PhysicalPathTerminationPointVideoAniClassId ClassID = ClassID(90)
+
+var physicalpathterminationpointvideoaniBME *ManagedEntityDefinition
+
+// PhysicalPathTerminationPointVideoAni (class ID #90)
+//	This ME represents an RF video ANI in the ONU, where physical paths terminate and physical path
+//	level functions are performed.
+//
+//	The ONU automatically creates an instance of this ME per port as follows.
+//
+//	•	When the ONU has video ANI ports built into its factory configuration.
+//
+//	•	When a cardholder is provisioned to expect a circuit pack of the video ANI type.
+//
+//	•	When a cardholder provisioned for plug-and-play is equipped with a circuit pack of the video
+//	ANI type. Note that the installation of a plug-and-play card may indicate the presence of video
+//	ANI ports via equipment ID as well as its type, and indeed may cause the ONU to instantiate a
+//	port-mapping package that specifies video ANI ports.
+//
+//	The ONU automatically deletes instances of this ME when a cardholder is neither provisioned to
+//	expect a video ANI circuit pack, nor is it equipped with a video ANI circuit pack.
+//
+//	Relationships
+//		An instance of this ME is associated with each instance of a real or pre-provisioned video ANI
+//		port.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. This 2 byte
+//			number indicates the physical position of the ANI. The first byte is the slot ID (defined in
+//			clause 9.1.5). The second byte is the port ID, with the range 1..255. (R) (mandatory) (2 bytes)
+//
+//		Administrative State
+//			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) (mandatory) (1 byte)
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the ME is capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+//		Arc
+//			ARC:	See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Arc Interval
+//			ARC interval: See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Frequency Range Low
+//			(R) (mandatory) (1 byte)
+//
+//		Frequency Range High
+//			(R) (mandatory) (1 byte)
+//
+//		Signal Capability
+//			(R) (mandatory) (1 byte)
+//
+//		Optical Signal Level
+//			(R) (optional) (1 byte)
+//
+//		Pilot Signal Level
+//			(R) (optional) (1 byte)
+//
+//		Signal Level Min
+//			Signal level min: This attribute indicates the minimum optical RF power per channel that results
+//			in a CNR of 47 dBc for a channel of 4.5 MHz bandwidth at a receive optical power of –5 dBm. The
+//			unit of this attribute is decibel-microwatt optical. (R) (mandatory) (1 byte)
+//
+//		Signal Level Max
+//			Signal level max: This attribute indicates the maximum optical RF power per channel that results
+//			in a CTB of –57 dBc for an 80-channel ensemble of carriers at a perchannel optical modulation
+//			index (OMI) of 3.5%. The unit of this attribute is decibel-microwatt optical. (R) (mandatory)
+//			(1 byte)
+//
+//		Pilot Frequency
+//			(R, W) (optional) (4 bytes)
+//
+//		Agc Mode
+//			(R, W) (optional) (1 byte)
+//
+//		Agc Setting
+//			(R, W) (optional) (1 byte)
+//
+//		Video Lower Optical Threshold
+//			NOTE – Because the power measurement returned in the optical signal level attribute has a
+//			resolution of 1 dB, it is possible that the measured value could appear to be in-range, even
+//			though an out-of-range alarm has been declared against a threshold with 0.1 dB resolution.
+//
+//		Video Upper Optical Threshold
+//			Video upper optical threshold: This attribute specifies the optical level used to declare the
+//			video OOR high alarm. Valid values are –12 to +6 dBm in 0.1 dB increments, represented as a 2s
+//			complement integer. (Coding –120 to +60, 0x00 = 0 dBm, 0x88 = –12.0 dBm, etc.) Upon ME
+//			instantiation, the ONU sets this attribute to 0x19 (+2.5 dBm). (R, W) (optional) (1 byte)
+//
+type PhysicalPathTerminationPointVideoAni struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	physicalpathterminationpointvideoaniBME = &ManagedEntityDefinition{
+		Name:    "PhysicalPathTerminationPointVideoAni",
+		ClassID: 90,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2:  ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 2),
+			3:  ByteField("Arc", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 3),
+			4:  ByteField("ArcInterval", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+			5:  ByteField("FrequencyRangeLow", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  ByteField("FrequencyRangeHigh", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  ByteField("SignalCapability", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  ByteField("OpticalSignalLevel", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+			9:  ByteField("PilotSignalLevel", 0, mapset.NewSetWith(Read), false, false, true, false, 9),
+			10: ByteField("SignalLevelMin", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: ByteField("SignalLevelMax", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("PilotFrequency", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+			13: ByteField("AgcMode", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 13),
+			14: ByteField("AgcSetting", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 14),
+			15: ByteField("VideoLowerOpticalThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 15),
+			16: ByteField("VideoUpperOpticalThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 16),
+		},
+	}
+}
+
+// NewPhysicalPathTerminationPointVideoAni (class ID 90 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 NewPhysicalPathTerminationPointVideoAni(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(physicalpathterminationpointvideoaniBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/physicalpathterminationpointvideouni.go b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointvideouni.go
new file mode 100644
index 0000000..83e5337
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointvideouni.go
@@ -0,0 +1,105 @@
+/*
+ * 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 PhysicalPathTerminationPointVideoUniClassId ClassID = ClassID(82)
+
+var physicalpathterminationpointvideouniBME *ManagedEntityDefinition
+
+// PhysicalPathTerminationPointVideoUni (class ID #82)
+//	This ME represents an RF video UNI in the ONU, where physical paths terminate and physical path
+//	level functions are performed.
+//
+//	The ONU automatically creates an instance of this ME per port:
+//
+//	•	when the ONU has RF video UNI ports built into its factory configuration;
+//
+//	•	when a cardholder is provisioned to expect a circuit pack of the video UNI type;
+//
+//	•	when a cardholder provisioned for plug-and-play is equipped with a circuit pack of the video
+//	UNI type. Note that the installation of a plug-and-play card may indicate the presence of video
+//	ports via equipment ID as well as its type, and indeed may cause the ONU to instantiate a port-
+//	mapping package that specifies video ports.
+//
+//	The ONU automatically deletes instances of this ME when a cardholder is neither provisioned to
+//	expect a video circuit pack, nor is it equipped with a video circuit pack.
+//
+//	Relationships
+//		One or more instances of this ME are associated with an instance of a real or virtual circuit
+//		pack classified as video type.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. This 2 byte
+//			number indicates the physical position of the UNI. The first byte is the slot ID (defined in
+//			clause 9.1.5). The second byte is the port ID, with the range 1..255. (R) (mandatory) (2 bytes)
+//
+//		Administrative State
+//			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) (mandatory) (1 byte)
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the ME is capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+//		Arc
+//			ARC:	See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Arc Interval
+//			ARC interval: See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Power Control
+//			Power control: This attribute controls whether power is provided from the ONU to an external
+//			equipment over the video PPTP. Value 1 enables power over coaxial cable. The default value 0
+//			disables power feed. (R, W) (optional) (1 byte)
+//
+type PhysicalPathTerminationPointVideoUni struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	physicalpathterminationpointvideouniBME = &ManagedEntityDefinition{
+		Name:    "PhysicalPathTerminationPointVideoUni",
+		ClassID: 82,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2: ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 2),
+			3: ByteField("Arc", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 3),
+			4: ByteField("ArcInterval", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+			5: ByteField("PowerControl", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 5),
+		},
+	}
+}
+
+// NewPhysicalPathTerminationPointVideoUni (class ID 82 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 NewPhysicalPathTerminationPointVideoUni(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(physicalpathterminationpointvideouniBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/physicalpathterminationpointxdslunipart1.go b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointxdslunipart1.go
new file mode 100644
index 0000000..d6420dc
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointxdslunipart1.go
@@ -0,0 +1,155 @@
+/*
+ * 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 PhysicalPathTerminationPointXdslUniPart1ClassId ClassID = ClassID(98)
+
+var physicalpathterminationpointxdslunipart1BME *ManagedEntityDefinition
+
+// PhysicalPathTerminationPointXdslUniPart1 (class ID #98)
+//	This ME represents the point where physical paths terminate on an xDSL CO modem (xTU-C). The
+//	xDSL ME family is used for ADSL VDSL2 and FAST services. A legacy family of VDSL MEs remains
+//	valid for ITUT G.993.1 VDSL, if needed. It is documented in [ITUT G.983.2].
+//
+//	The ONU automatically creates an instance of this ME per port:
+//
+//	•	when the ONU has xDSL ports built into its factory configuration;
+//
+//	•	when a cardholder is provisioned to expect a circuit pack of the xDSL type;
+//
+//	•	when a cardholder provisioned for plug-and-play is equipped with a circuit pack of the xDSL
+//	type. Note that the installation of a plug-and-play card may indicate the presence of xDSL ports
+//	via equipment ID as well as its type, and indeed may cause the ONU to instantiate a port-mapping
+//	package that specifies xDSL ports.
+//
+//	The ONU automatically deletes instances of this ME when a cardholder is neither provisioned to
+//	expect an xDSL circuit pack, nor is it equipped with an xDSL circuit pack.
+//
+//	Relationships
+//		An instance of this ME is associated with each instance of a real or pre-provisioned xDSL port.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID:	This attribute uniquely identifies each instance of this ME. This 2 byte
+//			number indicates the physical position of the UNI. The six LSBs of the first byte are the slot
+//			ID, defined in clause 9.1.5. The two MSBs indicate the channel number in some of the implicitly
+//			linked MEs, and must be 0 in the PPTP itself. This reduces the possible number of physical slots
+//			to 64. The second byte is the port ID, with the range 1..255. (R) (mandatory) (2 bytes)
+//
+//		Loopback Configuration
+//			Upon ME instantiation, the ONU sets this attribute to 0. (R, W) (mandatory) (1 byte)
+//
+//		Administrative State
+//			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) (mandatory) (1 byte)
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the ME is capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+//		Xdsl Line Configuration Profile
+//			xDSL line configuration profile: This attribute points to an instance of the xDSL line
+//			configuration profiles (part 1, 2 and 3) MEs, and if necessary, also to VDSL2 line configuration
+//			extensions (1 and 2) MEs, also to vectoring line configuration extension MEs. Upon ME
+//			instantiation, the ONU sets this attribute to 0, a null pointer. (R, W) (mandatory) (2 bytes)
+//
+//		Xdsl Subcarrier Masking Downstream Profile
+//			xDSL subcarrier masking downstream profile: This attribute points to an instance of the xDSL
+//			subcarrier masking downstream profile ME. Upon ME instantiation, the ONU sets this attribute to
+//			0, a null pointer. (R, W) (mandatory) (2 bytes)
+//
+//		Xdsl Subcarrier Masking Upstream Profile
+//			xDSL subcarrier masking upstream profile: This attribute points to an instance of the xDSL
+//			subcarrier masking upstream profile ME. Upon ME instantiation, the ONU sets this attribute to 0,
+//			a null pointer. (R, W) (mandatory) (2 bytes)
+//
+//		Xdsl Downstream Power Spectral Density Psd Mask Profile
+//			xDSL downstream power spectral density (PSD) mask profile: This attribute points to an instance
+//			of the xDSL PSD mask profile ME that defines downstream parameters. Upon ME instantiation, the
+//			ONU sets this attribute to 0, a null pointer. (R, W) (mandatory) (2 bytes)
+//
+//		Xdsl Downstream Rfi Bands Profile
+//			xDSL downstream RFI bands profile: This attribute points to an instance of the xDSL downstream
+//			RFI bands profile ME. Upon ME instantiation, the ONU sets this attribute to 0, a null pointer.
+//			(R, W) (mandatory) (2 bytes)
+//
+//		Arc
+//			ARC:	See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Arc Interval
+//			ARC interval: See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Modem Type
+//			NOTE – Many newer VDSL2 chip sets support only PTM. The ATM default is retained for backward
+//			compatibility, but implementers should be aware that the default may need to be overridden by
+//			provisioning before the xDSL UNI can be brought into service.
+//
+//		Upstream Psd Mask Profile
+//			Upstream PSD mask profile: This attribute points to an instance of the xDSL PSD mask profile
+//			that defines upstream parameters. Upon ME instantiation, the ONU sets this attribute to 0, a
+//			null pointer. (R, W) (optional) (2 bytes)
+//
+//		Network Specific Extensions Pointer
+//			Network specific extensions pointer: This attribute points to a network address ME that contains
+//			the path and name of a file containing network specific parameters for the associated UNI. Upon
+//			ME instantiation, the ONU sets this attribute to 0xFFFF, a null pointer. (R, W) (optional)
+//			(2 bytes)
+//
+type PhysicalPathTerminationPointXdslUniPart1 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	physicalpathterminationpointxdslunipart1BME = &ManagedEntityDefinition{
+		Name:    "PhysicalPathTerminationPointXdslUniPart1",
+		ClassID: 98,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFF8,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("LoopbackConfiguration", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2:  ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3:  ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 3),
+			4:  Uint16Field("XdslLineConfigurationProfile", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5:  Uint16Field("XdslSubcarrierMaskingDownstreamProfile", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6:  Uint16Field("XdslSubcarrierMaskingUpstreamProfile", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7:  Uint16Field("XdslDownstreamPowerSpectralDensityPsdMaskProfile", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8:  Uint16Field("XdslDownstreamRfiBandsProfile", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
+			9:  ByteField("Arc", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 9),
+			10: ByteField("ArcInterval", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 10),
+			11: ByteField("ModemType", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
+			12: Uint16Field("UpstreamPsdMaskProfile", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+			13: Uint16Field("NetworkSpecificExtensionsPointer", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 13),
+		},
+	}
+}
+
+// NewPhysicalPathTerminationPointXdslUniPart1 (class ID 98 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 NewPhysicalPathTerminationPointXdslUniPart1(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(physicalpathterminationpointxdslunipart1BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/physicalpathterminationpointxdslunipart2.go b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointxdslunipart2.go
new file mode 100644
index 0000000..47eabb2
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/physicalpathterminationpointxdslunipart2.go
@@ -0,0 +1,102 @@
+/*
+ * 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 PhysicalPathTerminationPointXdslUniPart2ClassId ClassID = ClassID(99)
+
+var physicalpathterminationpointxdslunipart2BME *ManagedEntityDefinition
+
+// PhysicalPathTerminationPointXdslUniPart2 (class ID #99)
+//	This ME represents the point in the ONU where physical paths terminate on an xDSL CO modem
+//	(xTU-C). Standards and chip sets support several forms of DSL, including VDSL2, and the xDSL ME
+//	family is used for all of them, with specific extensions for technology variations.
+//
+//	The ONU creates or deletes an instance of this ME at the same time it creates or deletes the
+//	corresponding PPTP xDSL UNI part 1.
+//
+//	Relationships
+//		An instance of this ME is associated with each instance of a PPTP xDSL UNI part 1.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP xDSL UNI part 1. (R)
+//			(mandatory) (2 bytes)
+//
+//		Xdsl Channel Configuration Profile For Bearer Channel 0 Downstream
+//			xDSL channel configuration profile for bearer channel 0 downstream:	(R, W) (optional) (2 bytes)
+//
+//		Xdsl Channel Configuration Profile For Bearer Channel 1 Downstream
+//			xDSL channel configuration profile for bearer channel 1 downstream:	(R, W) (optional) (2 bytes)
+//
+//		Xdsl Channel Configuration Profile For Bearer Channel 2 Downstream
+//			xDSL channel configuration profile for bearer channel 2 downstream:	(R, W) (optional) (2 bytes)
+//
+//		Xdsl Channel Configuration Profile For Bearer Channel 3 Downstream
+//			xDSL channel configuration profile for bearer channel 3 downstream:	(R, W) (optional) (2 bytes)
+//
+//		Xdsl Channel Configuration Profile For Bearer Channel 0 Upstream
+//			xDSL channel configuration profile for bearer channel 0 upstream:	(R, W) (optional) (2 bytes)
+//
+//		Xdsl Channel Configuration Profile For Bearer Channel 1 Upstream
+//			xDSL channel configuration profile for bearer channel 1 upstream:	(R, W) (optional) (2 bytes)
+//
+//		Xdsl Channel Configuration Profile For Bearer Channel 2 Upstream
+//			xDSL channel configuration profile for bearer channel 2 upstream:	(R, W) (optional) (2 bytes)
+//
+//		Xdsl Channel Configuration Profile For Bearer Channel 3 Upstream
+//			xDSL channel configuration profile for bearer channel 3 upstream:	(R, W) (optional) (2 bytes)
+//
+type PhysicalPathTerminationPointXdslUniPart2 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	physicalpathterminationpointxdslunipart2BME = &ManagedEntityDefinition{
+		Name:    "PhysicalPathTerminationPointXdslUniPart2",
+		ClassID: 99,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: Uint16Field("XdslChannelConfigurationProfileForBearerChannel0Downstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 1),
+			2: Uint16Field("XdslChannelConfigurationProfileForBearerChannel1Downstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 2),
+			3: Uint16Field("XdslChannelConfigurationProfileForBearerChannel2Downstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 3),
+			4: Uint16Field("XdslChannelConfigurationProfileForBearerChannel3Downstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+			5: Uint16Field("XdslChannelConfigurationProfileForBearerChannel0Upstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 5),
+			6: Uint16Field("XdslChannelConfigurationProfileForBearerChannel1Upstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 6),
+			7: Uint16Field("XdslChannelConfigurationProfileForBearerChannel2Upstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 7),
+			8: Uint16Field("XdslChannelConfigurationProfileForBearerChannel3Upstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 8),
+		},
+	}
+}
+
+// NewPhysicalPathTerminationPointXdslUniPart2 (class ID 99 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 NewPhysicalPathTerminationPointXdslUniPart2(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(physicalpathterminationpointxdslunipart2BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/priorityqueue.go b/vendor/github.com/cboling/omci/generated/priorityqueue.go
new file mode 100644
index 0000000..673f25a
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/priorityqueue.go
@@ -0,0 +1,222 @@
+/*
+ * 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 PriorityQueueClassId ClassID = ClassID(277)
+
+var priorityqueueBME *ManagedEntityDefinition
+
+// PriorityQueue (class ID #277)
+//	NOTE 1 – In [ITU-T G.984.4], this is called a priority queue-G.
+//
+//	This ME specifies the priority queue used by a GEM port network CTP in the upstream direction.
+//	The upstream priority queue ME is also related to a T-CONT ME. By default, this relationship is
+//	fixed by the ONU hardware architecture, but some ONUs may also permit the relationship to be
+//	configured through the OMCI, as indicated by the QoS configuration flexibility attribute of the
+//	ONU2G ME.
+//
+//	In the downstream direction, priority queues are associated with UNIs. Again, the association is
+//	fixed by default, but some ONUs may permit the association to be configured through the OMCI.
+//
+//	If an ONU as a whole contains priority queues, it instantiates these queues autonomously.
+//	Priority queues may also be localized to pluggable circuit packs, in which case the ONU creates
+//	and deletes them in accordance with circuit pack pre-provisioning and the equipped
+//	configuration.
+//
+//	The OLT can find all the queues by reading the priority queue ME instances. If the OLT tries to
+//	retrieve a non-existent priority queue, the ONU denies the get action with an error indication.
+//
+//	See also Appendix II.
+//
+//	Priority queues can exist in the ONU core and circuit packs serving both UNI and ANI functions.
+//	Therefore, they can be indirectly created and destroyed through cardholder provisioning actions.
+//
+//	In the upstream direction, the weight attribute permits the configuring of an optional traffic
+//	scheduler. Several attributes support back pressure operation, whereby a back-pressure signal is
+//	sent backwards and causes the attached terminal to temporarily suspend sending data.
+//
+//	In the downstream direction, strict priority discipline among the queues serving a given UNI is
+//	the default, with priorities established through the related port attribute. If two or more non-
+//	empty queues have the same priority, capacity is allocated among them in proportion to their
+//	weights. Note that the details of the downstream model differ from those of the upstream model.
+//
+//	The yellow packet drop thresholds specify the drop probability for a packet that has been marked
+//	yellow (drop eligible) by a traffic descriptor or by external equipment such as a residential
+//	gateway (RG). If the current average queue occupancy is less than the minimum threshold, the
+//	yellow packet drop probability is zero. If the current average queue occupancy is greater than
+//	or equal to the maximum threshold, the yellow packet drop probability is one. The yellow drop
+//	probability increases linearly between 0 and max_p as the current average queue occupancy
+//	increases from the minimum to the maximum threshold.
+//
+//	The same model can be configured for green packets, those regarded as being within the traffic
+//	contract.
+//
+//	Drop precedence colour marking indicates the method by which a packet is marked as drop eligible
+//	(yellow). For discard eligibility indicator (DEI) and priority code point (PCP) marking, a drop
+//	eligible indicator is equivalent to yellow colour; otherwise, the colour is green. For
+//	differentiated services code point (DSCP) assured forwarding (AF) marking, the lowest drop
+//	precedence is equivalent to green; otherwise, the colour is yellow.
+//
+//	Relationships
+//		One or more instances of this ME are associated with the ONU-G ME to model upstream priority
+//		queues if the traffic management option attribute in the ONU-G ME is 0 or 2.////		One or more instances of this ME are associated with a PPTP UNI ME as downstream priority
+//		queues. Downstream priority queues may or may not be provided for a virtual Ethernet interface
+//		point (VEIP).
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The MSB
+//			represents the direction (1: upstream, 0: downstream). The 15 LSBs represent a queue ID. The
+//			queue ID is numbered in ascending order by the ONU itself. It is strongly encouraged that the
+//			queue ID be formulated to simplify finding related queues. One way to do this is to number the
+//			queues such that the related port attributes are in ascending order (for the downstream and
+//			upstream queues separately). The range of downstream queue ids is 0 to 0x7FFF and the range of
+//			upstream queue ids is 0x8000 to 0xFFFF. (R) (mandatory) (2 bytes)
+//
+//		Queue Configuration Option
+//			Queue configuration option: This attribute identifies the buffer partitioning policy. The value
+//			1 means that several queues share one buffer of maximum queue size, while the value 0 means that
+//			each queue has an individual buffer of maximum queue size. (R) (mandatory) (1 byte)
+//
+//		Maximum Queue Size
+//			NOTE 2 – In this and the other similar attributes of the priority queue ME, some legacy
+//			implementations may take the queue scale factor from the GEM block length attribute of the ANI-G
+//			ME. This option is discouraged in new implementations.
+//
+//		Allocated Queue Size
+//			Allocated queue size: This attribute identifies the allocated size of this queue, in bytes,
+//			scaled by the priority queue scale factor attribute of the ONU2G. (R, W) (mandatory) (2 bytes)
+//
+//		Discard_Block Counter Reset Interval
+//			Discard-block counter reset interval: This attribute represents the interval in milliseconds at
+//			which the counter resets itself. (R, W) (optional) (2 bytes)
+//
+//		Threshold Value For Discarded Blocks Due To Buffer Overflow
+//			Threshold value for discarded blocks due to buffer overflow: This attribute specifies the
+//			threshold for the number of bytes (scaled by the priority queue scale factor attribute of the
+//			ONU2G) discarded on this queue due to buffer overflow. Its value controls the declaration of the
+//			block loss alarm. (R, W) (optional) (2 bytes)
+//
+//		Related Port
+//			If flexible configuration is not supported, the ONU should reject an attempt to set the related
+//			port with a parameter error result-reason code.
+//
+//		Traffic Scheduler Pointer
+//			The ONU should reject an attempt to violate these conditions with a parameter error result-
+//			reason code.
+//
+//		Weight
+//			Weight:	This attribute represents weight for WRR scheduling. At a given priority level, capacity
+//			is distributed to non-empty queues in proportion to their weights. In the upstream direction,
+//			this weight is meaningful if several priority queues are associated with a traffic scheduler or
+//			T-CONT whose policy is WRR. In the downstream direction, this weight is used by a UNI in a WRR
+//			fashion. Upon ME instantiation, the ONU sets this attribute to 1. (R, W) (mandatory) (1 byte)
+//
+//		Back Pressure Operation
+//			Back pressure operation: This attribute enables (0) or disables (1) back pressure operation. Its
+//			default value is 0. (R, W) (mandatory) (2 bytes)
+//
+//		Back Pressure Time
+//			Back pressure time: This attribute specifies the duration in microseconds of the backpressure
+//			signal. It can be used as a pause time for an Ethernet UNI. Upon ME instantiation, the ONU sets
+//			this attribute to 0. (R, W) (mandatory) (4 bytes)
+//
+//		Back Pressure Occur Queue Threshold
+//			Back pressure occur queue threshold: This attribute identifies the threshold queue occupancy, in
+//			bytes, scaled by the priority queue scale factor attribute of the ONU2G, to start sending a
+//			back-pressure signal. (R, W) (mandatory) (2 bytes)
+//
+//		Back Pressure Clear Queue Threshold
+//			Back pressure clear queue threshold: This attribute identifies the threshold queue occupancy, in
+//			bytes, scaled by the priority queue scale factor attribute of the ONU2G, to stop sending a back-
+//			pressure signal. (R, W) (mandatory) (2 bytes)
+//
+//		Packet Drop Queue Thresholds
+//			Packet drop queue thresholds: This attribute is a composite of four 2 byte values, a minimum and
+//			a maximum threshold, measured in bytes, scaled by the priority queue scale factor attribute of
+//			the ONU2-G, for green and yellow packets. The first value is the minimum green threshold, the
+//			queue occupancy below which all green packets are admitted to the queue. The second value is the
+//			maximum green threshold, the queue occupancy at or above which all green packets are discarded.
+//			The third value is the minimum yellow threshold, the queue occupancy below which all yellow
+//			packets are admitted to the queue. The fourth value is the maximum yellow threshold, the queue
+//			occupancy at or above which all yellow packets are discarded. The default is that all thresholds
+//			take the value of the maximum queue size. (R, W) (optional) (8 bytes)
+//
+//		Packet Drop Max_P
+//			Packet drop max_p: This attribute is a composite of two 1 byte values, the probability of
+//			dropping a coloured packet when the queue occupancy lies just below the maximum threshold for
+//			packets of that colour. The first value is the green packet max_p, and the second value is the
+//			yellow packet max_p. The probability, max_p, is determined by adding one to the unsigned value
+//			(0..255) of this attribute and dividing the result by 256. The default for each value is 255.
+//			(R, W) (optional) (2 bytes)
+//
+//		Queue Drop W_Q
+//			Queue drop w_q: This attribute determines the averaging coefficient, w_q, as described in
+//			[b-Floyd]. The averaging coefficient, w_q, is equal to 2Queue_drop_w_q. For example, when queue
+//			drop_w_q has the value 9, the averaging coefficient, w_q, is 1/512 = 0.001 9. The default value
+//			is 9. (R, W) (optional) (1 byte)
+//
+//		Drop Precedence Colour Marking
+//			(R, W) (optional) (1 byte)
+//
+type PriorityQueue struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	priorityqueueBME = &ManagedEntityDefinition{
+		Name:    "PriorityQueue",
+		ClassID: 277,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("QueueConfigurationOption", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("MaximumQueueSize", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3:  Uint16Field("AllocatedQueueSize", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4:  Uint16Field("DiscardBlockCounterResetInterval", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+			5:  Uint16Field("ThresholdValueForDiscardedBlocksDueToBufferOverflow", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 5),
+			6:  Uint32Field("RelatedPort", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7:  Uint16Field("TrafficSchedulerPointer", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8:  ByteField("Weight", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
+			9:  Uint16Field("BackPressureOperation", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 9),
+			10: Uint32Field("BackPressureTime", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 10),
+			11: Uint16Field("BackPressureOccurQueueThreshold", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 11),
+			12: Uint16Field("BackPressureClearQueueThreshold", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 12),
+			13: Uint64Field("PacketDropQueueThresholds", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 13),
+			14: Uint16Field("PacketDropMaxP", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 14),
+			15: ByteField("QueueDropWQ", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 15),
+			16: ByteField("DropPrecedenceColourMarking", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 16),
+		},
+	}
+}
+
+// NewPriorityQueue (class ID 277 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 NewPriorityQueue(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(priorityqueueBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/pseudowiremaintenanceprofile.go b/vendor/github.com/cboling/omci/generated/pseudowiremaintenanceprofile.go
new file mode 100644
index 0000000..922553e
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/pseudowiremaintenanceprofile.go
@@ -0,0 +1,154 @@
+/*
+ * 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 PseudowireMaintenanceProfileClassId ClassID = ClassID(284)
+
+var pseudowiremaintenanceprofileBME *ManagedEntityDefinition
+
+// PseudowireMaintenanceProfile (class ID #284)
+//	The pseudowire maintenance profile permits the configuration of pseudowire service exception
+//	handling. It is created and deleted by the OLT.
+//
+//	The settings, and indeed existence, of a pseudowire maintenance profile affect the behaviour of
+//	the pseudowire PM history data ME only in establishing criteria for counting SESs, but in no
+//	other way. The pseudowire maintenance profile primarily affects the alarms declared by the
+//	subscribing pseudowire TP.
+//
+//	Relationships
+//		One or more instances of the pseudowire TP may point to an instance of the pseudowire
+//		maintenance profile. If the pseudowire TP does not refer to a pseudowire maintenance profile,
+//		the ONU's default exception handling is implied.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The value 0 is
+//			reserved. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Jitter Buffer Maximum Depth
+//			Jitter buffer maximum depth: This attribute specifies the desired maximum depth of the playout
+//			buffer in the PSN to the TDM direction. The value is expressed as a multiple of the 125 μs frame
+//			rate. The default value 0 selects the ONU's internal policy. (R, W, setbycreate) (optional)
+//			(2 bytes)
+//
+//		Jitter Buffer Desired Depth
+//			Jitter buffer desired depth: This attribute specifies the desired nominal fill depth of the
+//			playout buffer in the PSN to the TDM direction. The value is expressed as a multiple of the
+//			125 μs frame rate. The default value 0 selects the ONU's internal policy. (R, W, setbycreate)
+//			(optional) (2 bytes)
+//
+//		Fill Policy
+//			(R, W, setbycreate) (optional) (1 byte)
+//
+//		Misconnected Packets Declaration Policy
+//			Misconnected packets declaration policy: (R, W, setbycreate) (optional) (1 byte)
+//
+//		Misconnected Packets Clear Policy
+//			Misconnected packets clear policy: (R, W, setbycreate) (optional) (1 byte)
+//
+//		Loss Of Packets Declaration Policy
+//			Loss of packets declaration policy: (R, W, setbycreate) (optional) (1 byte)
+//
+//		Loss Of Packets Clear Policy
+//			Loss of packets clear policy: (R, W, setbycreate) (optional) (1 byte)
+//
+//		Buffer Overrun_Underrun Declaration Policy
+//			Buffer overrun/underrun declaration policy: (R, W, setbycreate) (optional) (1 byte)
+//
+//		Buffer Overrun_Underrun Clear Policy
+//			Buffer overrun/underrun clear policy: (R, W, setbycreate) (optional) (1 byte)
+//
+//		Malformed Packets Declaration Policy
+//			Malformed packets declaration policy: (R, W, setbycreate) (optional) (1 byte)
+//
+//		Malformed Packets Clear Policy
+//			Malformed packets clear policy: (R, W, setbycreate) (optional) (1 byte)
+//
+//		R_Bit Transmit Set Policy
+//			R-bit transmit set policy: This attribute defines the number of consecutive lost packets that
+//			causes the transmitted R bit to be set in the TDM to the PSN direction, indicating lost packets
+//			to the far end. The default value 0 selects the ONU's internal policy. (R, W, setbycreate)
+//			(optional) (1 byte)
+//
+//		R_Bit Transmit Clear Policy
+//			R-bit transmit clear policy: This attribute defines the number of consecutive valid packets that
+//			causes the transmitted R bit to be cleared in the TDM to the PSN direction, removing the remote
+//			failure indication to the far end. The default value 0 selects the ONU's internal policy. (R, W,
+//			setbycreate) (optional) (1 byte)
+//
+//		R_Bit Receive Policy
+//			(R, W, setbycreate) (optional) (1 byte)
+//
+//		L Bit Receive Policy
+//			(R, W, setbycreate) (optional) (1 byte)
+//
+//		Ses Threshold
+//			SES threshold: Number of lost, malformed or otherwise unusable packets expected in the PSN to
+//			the TDM direction within a 1 s interval that causes an SES to be counted. Stray packets do not
+//			count towards an SES, nor do packets whose L bit is set at the far end. The value 0 specifies
+//			that the ONU uses its internal default, which is not necessarily the same as the recommended
+//			default value 3. (R, W, set-by-create) (optional) (2 bytes)
+//
+type PseudowireMaintenanceProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	pseudowiremaintenanceprofileBME = &ManagedEntityDefinition{
+		Name:    "PseudowireMaintenanceProfile",
+		ClassID: 284,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  Uint16Field("JitterBufferMaximumDepth", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 1),
+			2:  Uint16Field("JitterBufferDesiredDepth", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 2),
+			3:  ByteField("FillPolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 3),
+			4:  ByteField("MisconnectedPacketsDeclarationPolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 4),
+			5:  ByteField("MisconnectedPacketsClearPolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 5),
+			6:  ByteField("LossOfPacketsDeclarationPolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 6),
+			7:  ByteField("LossOfPacketsClearPolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 7),
+			8:  ByteField("BufferOverrunUnderrunDeclarationPolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 8),
+			9:  ByteField("BufferOverrunUnderrunClearPolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 9),
+			10: ByteField("MalformedPacketsDeclarationPolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 10),
+			11: ByteField("MalformedPacketsClearPolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 11),
+			12: ByteField("RBitTransmitSetPolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 12),
+			13: ByteField("RBitTransmitClearPolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 13),
+			14: ByteField("RBitReceivePolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 14),
+			15: ByteField("LBitReceivePolicy", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 15),
+			16: Uint16Field("SesThreshold", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 16),
+		},
+	}
+}
+
+// NewPseudowireMaintenanceProfile (class ID 284 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 NewPseudowireMaintenanceProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(pseudowiremaintenanceprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/pseudowireperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/pseudowireperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..599eb93
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/pseudowireperformancemonitoringhistorydata.go
@@ -0,0 +1,168 @@
+/*
+ * 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 PseudowirePerformanceMonitoringHistoryDataClassId ClassID = ClassID(285)
+
+var pseudowireperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// PseudowirePerformanceMonitoringHistoryData (class ID #285)
+//	This ME collects PM for a pseudowire TP. Most of the attributes monitor packets received from
+//	the PSN, and may therefore be considered egress PM. For the most part, ingress PM is collected
+//	at the CES PPTP ME.
+//
+//	NOTE – The pseudowire PM history data ME collects data similar, but not identical, to that
+//	available from the MAC bridge port PM history data ME associated with a MAC bridge. When the
+//	pseudowire is bridge-based, it may not be necessary to collect both.
+//
+//	Instances of this ME are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the pseudowire TP.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 pseudowire TP. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contains PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Received Packets
+//			Received packets: This attribute counts the total number of packets, both payload and
+//			signalling, received in the PSN to the TDM direction. (R) (mandatory) (4 bytes)
+//
+//		Transmitted Packets
+//			Transmitted packets: This attribute counts the total number of packets, both payload and
+//			signalling, transmitted in the TDM to the PSN direction. The count includes packets whose L bit
+//			is set and which may therefore not contain a payload. (R) (mandatory) (4 bytes)
+//
+//		Missing Packets
+//			Missing packets: This attribute counts the number of lost packets, as indicated by gaps in the
+//			control word numbering sequence. Both payload and signalling packets, if any, contribute to this
+//			count. (R) (mandatory) (4 bytes)
+//
+//		Misordered Packets, Usable
+//			Misordered packets, usable: This attribute counts the number of packets received out of order,
+//			but which were able to be successfully re-ordered and played out. Both payload and signalling
+//			packets, if any, contribute to this count. (R) (mandatory) (4 bytes)
+//
+//		Misordered Packets Dropped
+//			Misordered packets dropped: This attribute counts the number of packets received out of sequence
+//			that were discarded, either because the ONU did not support reordering or because it was too
+//			late to reorder them. Both payload and signalling packets, if any, contribute to this count. (R)
+//			(mandatory) (4 bytes)
+//
+//		Playout Buffer Underruns_Overruns
+//			Playout buffer underruns/overruns: This attribute counts the number of packets that were
+//			discarded because they arrived too late or too early to be played out. Both payload and
+//			signalling packets, if any, contribute to this count. (R) (mandatory) (4 bytes)
+//
+//		Malformed Packets
+//			Malformed packets: This attribute counts the number of malformed packets, e.g., because the
+//			packet length was not as expected or because of an unexpected RTP payload type. Both payload and
+//			signalling packets, if any, contribute to this count. (R) (mandatory) (4 bytes)
+//
+//		Stray Packets
+//			Stray packets: This attribute counts the number of packets whose ECID or RTP SSRC failed to
+//			match the expected value, or which are otherwise known to have been misdelivered. Stray packets
+//			are discarded without affecting any of the other PM counters. Both payload and signalling
+//			packets, if any, contribute to this count. (R) (mandatory) (4 bytes)
+//
+//		Remote Packet Loss
+//			Remote packet loss: This attribute counts received packets whose R bit is set, indicating the
+//			loss of packets at the far end. Both payload and signalling packets, if any, contribute to this
+//			count. (R) (mandatory) (4 bytes)
+//
+//		Tdm L_Bit Packets Transmitted
+//			TDM L-bit packets transmitted: This attribute counts the number of packets transmitted with the
+//			L bit set, indicating a near-end TDM fault. Both payload and signalling packets, if any,
+//			contribute to this count. (R) (mandatory) (4 bytes)
+//
+//		Es
+//			ES:	This attribute counts errored seconds. Any discarded, lost, malformed or unusable packet
+//			received from the PSN during a given second causes this counter to increment. Both payload and
+//			signalling packets, if any, contribute to this count. (R) (mandatory) (4 bytes)
+//
+//		Ses
+//			SES:	This attribute counts severely errored seconds. The criterion for an SES may be configured
+//			through the pseudowire maintenance profile ME. Both payload and signalling packets, if any,
+//			contribute to this count. (R) (mandatory) (4 bytes)
+//
+//		Uas
+//			UAS:	This attribute counts unavailable seconds. An unavailable second begins at the onset of 10
+//			consecutive SES and ends at the onset of 10 consecutive seconds that are not severely errored. A
+//			service is unavailable if either its payload or its signalling, if any, are unavailable. During
+//			unavailable time, only UAS should be counted; other anomalies should not be counted. (R)
+//			(mandatory) (4 bytes)
+//
+type PseudowirePerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	pseudowireperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "PseudowirePerformanceMonitoringHistoryData",
+		ClassID: 285,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFE,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("ReceivedPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("TransmittedPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("MissingPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("MisorderedPackets,Usable", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("MisorderedPacketsDropped", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("PlayoutBufferUnderrunsOverruns", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("MalformedPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("StrayPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("RemotePacketLoss", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("TdmLBitPacketsTransmitted", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint32Field("Es", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint32Field("Ses", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: Uint32Field("Uas", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+		},
+	}
+}
+
+// NewPseudowirePerformanceMonitoringHistoryData (class ID 285 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 NewPseudowirePerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(pseudowireperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/pseudowireterminationpoint.go b/vendor/github.com/cboling/omci/generated/pseudowireterminationpoint.go
new file mode 100644
index 0000000..b008785
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/pseudowireterminationpoint.go
@@ -0,0 +1,140 @@
+/*
+ * 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 PseudowireTerminationPointClassId ClassID = ClassID(282)
+
+var pseudowireterminationpointBME *ManagedEntityDefinition
+
+// PseudowireTerminationPoint (class ID #282)
+//	The pseudowire TP supports packetized (rather than TDM) transport of TDM services, transported
+//	either directly over Ethernet, over UDP/IP or over MPLS. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	Relationships
+//		One pseudowire TP ME exists for each distinct TDM service that is mapped to a pseudowire.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Underlying Transport
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Service Type
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Signalling
+//			(R, W, setbycreate) (mandatory for structured service type) (1 byte)
+//
+//		Tdm Uni Pointer
+//			TDM UNI pointer: If service type = structured, this attribute points to a logical N × 64 kbit/s
+//			subport CTP. Otherwise, this attribute points to a PPTP CES UNI. (R, W, setbycreate) (mandatory)
+//			(2 bytes)
+//
+//		North_Side Pointer
+//			North-side pointer: When the pseudowire service is transported via IP, as indicated by the
+//			underlying transport attribute, the northside pointer attribute points to an instance of the
+//			TCP/UDP config data ME. When the pseudowire service is transported directly over Ethernet, the
+//			north-side pointer attribute is not used – the linkage to the Ethernet flow TP is implicit in
+//			the ME IDs. When the pseudowire service is transported over MPLS, the northside pointer
+//			attribute points to an instance of the MPLS PW TP. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Far_End Ip Info
+//			A null pointer is appropriate if the pseudowire is not transported via IP. (R, W, setbycreate)
+//			(mandatory for IP transport) (2 bytes)
+//
+//		Payload Size
+//			(R, W, setbycreate) (mandatory for unstructured service) (2 bytes)
+//
+//		Payload Encapsulation Delay
+//			(R, W, setbycreate) (mandatory for structured service) (1 byte)
+//
+//		Timing Mode
+//			(R, W) (mandatory) (1 byte)
+//
+//		Transmit Circuit Id
+//			(R, W) (mandatory for MEF 8 transport) (8 bytes)
+//
+//		Expected Circuit Id
+//			(R, W) (optional for MEF 8 transport) (8 bytes)
+//
+//		Received Circuit Id
+//			Received circuit ID: This attribute indicates the actual ECID(s) received on the payload and
+//			signalling channels, respectively. It may be used for diagnostic purposes. (R) (optional for MEF
+//			8 transport) (8 bytes)
+//
+//		Exception Policy
+//			Exception policy: This attribute points to an instance of the pseudowire maintenance profile ME.
+//			If the pointer has its default value 0, the ONU's internal defaults apply. (R, W) (optional)
+//			(2 bytes)
+//
+//		Arc
+//			ARC:	See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Arc Interval
+//			ARC interval: See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+type PseudowireTerminationPoint struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	pseudowireterminationpointBME = &ManagedEntityDefinition{
+		Name:    "PseudowireTerminationPoint",
+		ClassID: 282,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFE,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("UnderlyingTransport", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  ByteField("ServiceType", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  ByteField("Signalling", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4:  Uint16Field("TdmUniPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  Uint16Field("NorthSidePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6:  Uint16Field("FarEndIpInfo", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7:  Uint16Field("PayloadSize", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8:  ByteField("PayloadEncapsulationDelay", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 8),
+			9:  ByteField("TimingMode", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 9),
+			10: Uint64Field("TransmitCircuitId", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 10),
+			11: Uint64Field("ExpectedCircuitId", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 11),
+			12: Uint64Field("ReceivedCircuitId", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint16Field("ExceptionPolicy", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 13),
+			14: ByteField("Arc", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 14),
+			15: ByteField("ArcInterval", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 15),
+		},
+	}
+}
+
+// NewPseudowireTerminationPoint (class ID 282 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 NewPseudowireTerminationPoint(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(pseudowireterminationpointBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/pwatmperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/pwatmperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..f82cf04
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/pwatmperformancemonitoringhistorydata.go
@@ -0,0 +1,115 @@
+/*
+ * 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 PwAtmPerformanceMonitoringHistoryDataClassId ClassID = ClassID(338)
+
+var pwatmperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// PwAtmPerformanceMonitoringHistoryData (class ID #338)
+//	This ME collects PM data associated with an ATM pseudowire. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the PW ATM configuration data ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. Through an
+//			identical ID, this ME is implicitly linked to the instance of the PW ATM configuration data ME.
+//			(R, setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Downstream Missing Packets Counter
+//			Downstream missing packets counter: This attribute counts missing packets, as detected via
+//			control word sequence number gaps. (R) (mandatory) (4 bytes)
+//
+//		Downstream Reordered Packets Counter
+//			Downstream reordered packets counter: This attribute counts packets detected out of sequence via
+//			the control word sequence number, but successfully reordered. Some implementations may not
+//			support this feature. (R) (optional) (4 bytes)
+//
+//		Downstream Misordered Packets Counter
+//			Downstream misordered packets counter: This attribute counts packets detected out of order via
+//			the control word sequence numbers. (R) (mandatory) (4 bytes)
+//
+//		Upstream Timeout Packets Counter
+//			Upstream timeout packets counter: This attribute counts packets transmitted due to timeout
+//			expiration while attempting to collect cells. (R) (mandatory) (4 bytes)
+//
+//		Upstream Transmitted Cells Counter
+//			Upstream transmitted cells counter: This attribute counts transmitted cells. (R) (mandatory)
+//			(4 bytes)
+//
+//		Upstream Dropped Cells Counter
+//			Upstream dropped cells counter: This attribute counts dropped cells. (R) (mandatory) (4 bytes)
+//
+//		Upstream Received Cells Counter
+//			Upstream received cells counter: This attribute counts received cells. (R) (mandatory) (4 bytes)
+//
+type PwAtmPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	pwatmperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "PwAtmPerformanceMonitoringHistoryData",
+		ClassID: 338,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF80,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("DownstreamMissingPacketsCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("DownstreamReorderedPacketsCounter", 0, mapset.NewSetWith(Read), false, false, true, false, 4),
+			5: Uint32Field("DownstreamMisorderedPacketsCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint32Field("UpstreamTimeoutPacketsCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint32Field("UpstreamTransmittedCellsCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8: Uint32Field("UpstreamDroppedCellsCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9: Uint32Field("UpstreamReceivedCellsCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+		},
+	}
+}
+
+// NewPwAtmPerformanceMonitoringHistoryData (class ID 338 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 NewPwAtmPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(pwatmperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/pwethernetconfigurationdata.go b/vendor/github.com/cboling/omci/generated/pwethernetconfigurationdata.go
new file mode 100644
index 0000000..6bcb70b
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/pwethernetconfigurationdata.go
@@ -0,0 +1,82 @@
+/*
+ * 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 PwEthernetConfigurationDataClassId ClassID = ClassID(339)
+
+var pwethernetconfigurationdataBME *ManagedEntityDefinition
+
+// PwEthernetConfigurationData (class ID #339)
+//	This ME contains the Ethernet pseudowire configuration data. Instances of this ME are created
+//	and deleted by the OLT.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the MPLS pseudowire TP ME with a
+//		pseudowire type attribute equal to the following.////		5	Ethernet
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Mpls Pseudowire Tp Pointer
+//			MPLS pseudowire TP pointer: This attribute points to an instance of the MPLS pseudowire TP ME
+//			associated with this ME. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Tp Type
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Uni Pointer
+//			UNI pointer: This attribute points to the associated instance of a UNI-side ME. The type of UNI
+//			is determined by the TP type attribute. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+type PwEthernetConfigurationData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	pwethernetconfigurationdataBME = &ManagedEntityDefinition{
+		Name:    "PwEthernetConfigurationData",
+		ClassID: 339,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XE000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("MplsPseudowireTpPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: ByteField("TpType", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint16Field("UniPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+		},
+	}
+}
+
+// NewPwEthernetConfigurationData (class ID 339 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 NewPwEthernetConfigurationData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(pwethernetconfigurationdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/radiusperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/radiusperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..93be0f3
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/radiusperformancemonitoringhistorydata.go
@@ -0,0 +1,113 @@
+/*
+ * 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 RadiusPerformanceMonitoringHistoryDataClassId ClassID = ClassID(293)
+
+var radiusperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// RadiusPerformanceMonitoringHistoryData (class ID #293)
+//	This ME collects performance statistics on an ONU's radius client, particularly as related to
+//	its IEEE 802.1X operation.
+//
+//	Instances of this ME are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an ONU.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. Through an
+//			identical ID (namely 0), this ME is implicitly linked to an instance of a dot1X configuration
+//			profile. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Access_Request Packets Transmitted
+//			Access-request packets transmitted: This attribute counts transmitted radius access-request
+//			messages, including retransmissions. (R) (mandatory) (4 bytes)
+//
+//		Access_Request Retransmission Count
+//			Access-request retransmission count: This attribute counts radius access-request
+//			retransmissions. (R) (mandatory) (4 bytes)
+//
+//		Access_Challenge Packets Received
+//			Access-challenge packets received: This attribute counts received radius access-challenge
+//			messages. (R) (mandatory) (4 bytes)
+//
+//		Access_Accept Packets Received
+//			Access-accept packets received: This attribute counts received radius access-accept messages.
+//			(R) (mandatory) (4 bytes)
+//
+//		Access_Reject Packets Received
+//			Access-reject packets received: This attribute counts received radius access-reject messages.
+//			(R) (mandatory) (4 bytes)
+//
+//		Invalid Radius Packets Received
+//			Invalid radius packets received: This attribute counts received invalid radius messages. (R)
+//			(mandatory) (4 bytes)
+//
+type RadiusPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	radiusperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "RadiusPerformanceMonitoringHistoryData",
+		ClassID: 293,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("AccessRequestPacketsTransmitted", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("AccessRequestRetransmissionCount", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("AccessChallengePacketsReceived", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint32Field("AccessAcceptPacketsReceived", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint32Field("AccessRejectPacketsReceived", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8: Uint32Field("InvalidRadiusPacketsReceived", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+		},
+	}
+}
+
+// NewRadiusPerformanceMonitoringHistoryData (class ID 293 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 NewRadiusPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(radiusperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/reani-g.go b/vendor/github.com/cboling/omci/generated/reani-g.go
new file mode 100644
index 0000000..7ee4996
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/reani-g.go
@@ -0,0 +1,188 @@
+/*
+ * 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 ReAniGClassId ClassID = ClassID(313)
+
+var reanigBME *ManagedEntityDefinition
+
+// ReAniG (class ID #313)
+//	This ME organizes data associated with each R'/S' physical interface of an RE if the RE supports
+//	OEO regeneration in either direction. The management ONU automatically creates one instance of
+//	this ME for each R'/S' physical port (uni- or bidirectional) as follows.
+//
+//	•	When the RE has mid-span PON RE ANI interface ports built into its 	factory configuration.
+//
+//	•	When a cardholder is provisioned to expect a circuit pack of the mid-span PON RE ANI type.
+//
+//	•	When a cardholder provisioned for plug-and-play is equipped with a circuit pack of the midspan
+//	PON RE ANI type. Note that the installation of a plug-and-play card may indicate the presence of
+//	a mid-span PON RE ANI port via equipment ID as well as its type attribute, and indeed may cause
+//	the management ONU to instantiate a port-mapping package to specify the ports precisely.
+//
+//	The management ONU automatically deletes instances of this ME when a cardholder is neither
+//	provisioned to expect a mid-span PON RE ANI circuit pack, nor is it equipped with a mid-span PON
+//	RE ANI circuit pack.
+//
+//	As illustrated in Figure 8.2.10-4, an RE ANI-G may share the physical port with an RE downstream
+//	amplifier. The ONU declares a shared configuration through the port-mapping package combined
+//	port table, whose structure defines one ME as the master. It is recommended that the RE ANI-G be
+//	the master, with the RE downstream amplifier as a secondary ME.
+//
+//	The administrative state, operational state and ARC attributes of the master ME override similar
+//	attributes in secondary MEs associated with the same port. In the secondary ME, these attributes
+//	are present, but cause no action when written and have undefined values when read. The RE
+//	downstream amplifier should use its provisionable downstream alarm thresholds and should declare
+//	downstream alarms as necessary; other isomorphic alarms should be declared by the RE ANI-G. The
+//	test action should be addressed to the master ME.
+//
+//	Relationships
+//		An instance of this ME is associated with each R'/S' physical interface of an RE that includes
+//		OEO regeneration in either direction, and with one or more instances of the PPTP RE UNI. It may
+//		also be associated with an RE downstream amplifier.
+//
+//	Attributes
+//		Managed Entity Id
+//			NOTE 1 – This ME ID may be identical to that of an RE downstream amplifier if it shares the same
+//			physical slot and port.
+//
+//		Administrative State
+//			NOTE 2 – When an RE supports multiple PONs, or protected access to a single PON, its primary
+//			ANI-G cannot be completely shut down, due to a loss of the management communications capability.
+//			Complete blocking of service and removal of power may nevertheless be appropriate for secondary
+//			RE ANI-Gs. Administrative lock suppresses alarms and notifications for an RE ANI-G, be it either
+//			primary or secondary.
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the ME is capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+//		Arc
+//			ARC:	See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Arc Interval
+//			ARC interval: See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Optical Signal Level
+//			Optical signal level: This attribute reports the current measurement of total downstream optical
+//			power. Its value is a 2s complement integer referred to 1 mW (i.e., dBm), with 0.002 dB
+//			granularity. (R) (optional) (2 bytes)
+//
+//		Lower Optical Threshold
+//			Lower optical threshold: This attribute specifies the optical level that the RE uses to declare
+//			the downstream low received optical power alarm. Valid values are –127 dBm (coded as 254) to
+//			0 dBm (coded as 0) in 0.5 dB increments. The default value 0xFF selects the RE's internal
+//			policy. (R, W) (optional) (1 byte)
+//
+//		Upper Optical Threshold
+//			Upper optical threshold: This attribute specifies the optical level that the RE uses to declare
+//			the downstream high received optical power alarm. Valid values are –127 dBm (coded as 254) to
+//			0 dBm (coded as 0) in 0.5 dB increments. The default value 0xFF selects the RE's internal
+//			policy. (R, W) (optional) (1 byte)
+//
+//		Transmit Optical Level
+//			Transmit optical level: This attribute reports the current measurement of mean optical launch
+//			power. Its value is a 2s complement integer referred to 1 mW (i.e., dBm), with 0.002 dB
+//			granularity. (R) (optional) (2 bytes)
+//
+//		Lower Transmit Power Threshold
+//			Lower transmit power threshold: This attribute specifies the minimum mean optical launch power
+//			that the RE uses to declare the low transmit optical power alarm. Its value is a 2s complement
+//			integer referred to 1 mW (i.e., dBm), with 0.5 dB granularity. The default value 0x7F selects
+//			the RE's internal policy. (R, W) (optional) (1 byte)
+//
+//		Upper Transmit Power Threshold
+//			Upper transmit power threshold: This attribute specifies the maximum mean optical launch power
+//			that the RE uses to declare the high transmit optical power alarm. Its value is a 2s complement
+//			integer referred to 1 mW (i.e., dBm), with 0.5 dB granularity. The default value 0x7F selects
+//			the RE's internal policy. (R, W) (optional) (1 byte)
+//
+//		Usage Mode
+//			3	This R'/S' interface is used as the uplink for both the embedded management ONU and one or
+//			more PPTP RE UNI(s) (in a time division fashion).
+//
+//		Target Upstream Frequency
+//			Target upstream frequency: This attribute specifies the frequency of the converted upstream
+//			signal on the optical trunk line (OTL), in gigahertz. The converted frequency must conform to
+//			the frequency plan specified in [ITUT G.984.6]. The value 0 means that the upstream signal
+//			frequency remains the same as the original frequency; no frequency conversion is done. If the RE
+//			does not support provisionable upstream frequency (wavelength), this attribute should take the
+//			fixed value representing the RE's capability and the RE should deny attempts to set the value of
+//			the attribute. If the RE does support provisionable upstream frequency conversion, the default
+//			value of this attribute is 0. (R, W) (optional) (4 bytes).
+//
+//		Target Downstream Frequency
+//			Target downstream frequency: This attribute specifies the frequency of the downstream signal
+//			received by the RE on the OTL, in gigahertz. The incoming frequency must conform to the
+//			frequency plan specified in [ITUT G.984.6]. The default value 0 means that the downstream
+//			frequency remains the same as its original frequency; no frequency conversion is done. If the RE
+//			does not support provisionable downstream frequency selectivity, this attribute should take the
+//			fixed value representing the RE's capability, and the RE should deny attempts to set the value
+//			of the attribute. If the RE does support provisionable downstream frequency selectivity, the
+//			default value of this attribute is 0. (R, W) (optional) (4 bytes).
+//
+//		Upstream Signal Transmission Mode
+//			Upstream signal transmission mode: When true, this Boolean attribute enables conversion from
+//			burst mode to continuous mode. The default value false specifies burst mode upstream
+//			transmission. If the RE does not have the ability to convert from burst to continuous mode
+//			transmission, it should deny attempts to set this attribute to true. (R, W) (optional) (1 byte)
+//
+type ReAniG struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	reanigBME = &ManagedEntityDefinition{
+		Name:    "ReAniG",
+		ClassID: 313,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFC,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2:  ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 2),
+			3:  ByteField("Arc", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 3),
+			4:  ByteField("ArcInterval", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+			5:  Uint16Field("OpticalSignalLevel", 0, mapset.NewSetWith(Read), false, false, true, false, 5),
+			6:  ByteField("LowerOpticalThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 6),
+			7:  ByteField("UpperOpticalThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 7),
+			8:  Uint16Field("TransmitOpticalLevel", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+			9:  ByteField("LowerTransmitPowerThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 9),
+			10: ByteField("UpperTransmitPowerThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 10),
+			11: ByteField("UsageMode", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 11),
+			12: Uint32Field("TargetUpstreamFrequency", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+			13: Uint32Field("TargetDownstreamFrequency", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 13),
+			14: ByteField("UpstreamSignalTransmissionMode", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 14),
+		},
+	}
+}
+
+// NewReAniG (class ID 313 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 NewReAniG(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(reanigBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/recommonamplifierparameters.go b/vendor/github.com/cboling/omci/generated/recommonamplifierparameters.go
new file mode 100644
index 0000000..cf74734
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/recommonamplifierparameters.go
@@ -0,0 +1,135 @@
+/*
+ * 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 ReCommonAmplifierParametersClassId ClassID = ClassID(328)
+
+var recommonamplifierparametersBME *ManagedEntityDefinition
+
+// ReCommonAmplifierParameters (class ID #328)
+//	This ME organizes data associated with each OA supported by the RE. The management ONU
+//	automatically creates one instance of this ME for each upstream or downstream OA.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the RE downstream amplifier or RE
+//		upstream amplifier ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			NOTE – The type of the linked ME can be determined by uniqueness of slot and port.
+//
+//		Gain
+//			Gain:	This attribute reports the current measurement of the OA's gain, in decibels. Its value is
+//			a 2s complement integer with 0.25 dB granularity, and with a range from –32 dB to 31.5 dB. The
+//			value 0x7F indicates that the current measured gain is 0, i.e., negative infinity in decibels
+//			terms. (R) (optional) (1 byte)
+//
+//		Lower Gain Threshold
+//			Lower gain threshold: This attribute specifies the gain the RE uses to declare the low gain
+//			alarm. Valid values are 0 dB (coded as 0x00) to 63.5 dB (coded as 0xFE). The default value 0xFF
+//			selects the RE's internal policy. (R, W) (optional) (1 byte)
+//
+//		Upper Gain Threshold
+//			Upper gain threshold: This attribute specifies the gain the RE uses to declare the high gain
+//			alarm. Valid values are 0 dB (coded as 0x00) to 63.5 dB (coded as 0xFE). The default value 0xFF
+//			selects the RE's internal policy. (R, W) (optional) (1 byte)
+//
+//		Target Gain
+//			Target gain:	This attribute specifies the target gain, when the operational mode of the parent
+//			RE downstream or upstream amplifier is set to constant gain mode. Valid values are 0 dB (coded
+//			as 0x00) to 63.5 dB (coded as 0xFE). The default value 0xFF selects the RE's internal policy.
+//			(R, W) (optional) (1 byte)
+//
+//		Device Temperature
+//			Device temperature: This attribute reports the temperature in degrees Celcius of the active
+//			device (SOA or pump) in the OA. Its value is a 2s complement integer with granularity 1/256 °C.
+//			(R) (optional) (2 bytes)
+//
+//		Lower Device Temperature Threshold
+//			Lower device temperature threshold: This attribute is a 2s complement integer that specifies the
+//			temperature the RE uses to declare the low temperature alarm. Valid values are –64 to +63 °C in
+//			0.5 °C increments. The default value 0x7F selects the RE's internal policy. (R, W) (optional)
+//			(1 byte)
+//
+//		Upper Device Temperature Threshold
+//			Upper device temperature threshold: This attribute is a 2s complement integer that specifies the
+//			temperature the RE uses to declare the high temperature alarm. Valid values are –64 to +63 °C in
+//			0.5 °C increments. The default value 0x7F selects the RE's internal policy. (R, W) (optional)
+//			(1 byte)
+//
+//		Device Bias Current
+//			Device bias current: This attribute contains the measured bias current applied to the SOA or
+//			pump laser. Its value is an unsigned integer with granularity 2 mA. Valid values are 0 to
+//			512 mA. (R) (optional) (1 byte)
+//
+//		Amplifier Saturation Output Power
+//			Amplifier saturation output power: This attribute reports the saturation output power of the
+//			amplifier as specified by the manufacturer. Its value is an unsigned integer referred to 1 mW
+//			(i.e., dBm), with 0.1 dB granularity. (R) (optional) (2 bytes)
+//
+//		Amplifier Noise Figure
+//			Amplifier noise figure: This attribute reports the intrinsic noise figure of the amplifier, as
+//			specified by the manufacturer. Its value is an unsigned integer with 0.1 dB granularity (R)
+//			(optional) (1 byte)
+//
+//		Amplifier Saturation Gain
+//			Amplifier saturation gain: This attribute reports the gain of the amplifier at saturation, as
+//			specified by the manufacturer. Its value is an unsigned integer with 0.25 dB granularity, and
+//			with a range from 0 to 63.75 dB. (R) (optional) (1 byte)
+//
+type ReCommonAmplifierParameters struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	recommonamplifierparametersBME = &ManagedEntityDefinition{
+		Name:    "ReCommonAmplifierParameters",
+		ClassID: 328,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFE0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("Gain", 0, mapset.NewSetWith(Read), false, false, true, false, 1),
+			2:  ByteField("LowerGainThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 2),
+			3:  ByteField("UpperGainThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 3),
+			4:  ByteField("TargetGain", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+			5:  Uint16Field("DeviceTemperature", 0, mapset.NewSetWith(Read), false, false, true, false, 5),
+			6:  ByteField("LowerDeviceTemperatureThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 6),
+			7:  ByteField("UpperDeviceTemperatureThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 7),
+			8:  ByteField("DeviceBiasCurrent", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+			9:  Uint16Field("AmplifierSaturationOutputPower", 0, mapset.NewSetWith(Read), false, false, true, false, 9),
+			10: ByteField("AmplifierNoiseFigure", 0, mapset.NewSetWith(Read), false, false, true, false, 10),
+			11: ByteField("AmplifierSaturationGain", 0, mapset.NewSetWith(Read), false, false, true, false, 11),
+		},
+	}
+}
+
+// NewReCommonAmplifierParameters (class ID 328 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 NewReCommonAmplifierParameters(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(recommonamplifierparametersBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/redownstreamamplifier.go b/vendor/github.com/cboling/omci/generated/redownstreamamplifier.go
new file mode 100644
index 0000000..d68ef66
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/redownstreamamplifier.go
@@ -0,0 +1,158 @@
+/*
+ * 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 ReDownstreamAmplifierClassId ClassID = ClassID(316)
+
+var redownstreamamplifierBME *ManagedEntityDefinition
+
+// ReDownstreamAmplifier (class ID #316)
+//	This ME organizes data associated with each OA for downstream data supported by the RE. The
+//	management ONU automatically creates one instance of this ME for each downstream OA as follows.
+//
+//	•	When the RE has mid-span PON RE downstream OA ports built into its factory configuration.
+//
+//	•	When a cardholder is provisioned to expect a circuit pack of the mid-span PON RE downstream OA
+//	type.
+//
+//	•	When a cardholder provisioned for plug-and-play is equipped with a circuit pack of the midspan
+//	PON RE downstream OA type. Note that the installation of a plug-and-play card may indicate the
+//	presence of a mid-span PON RE downstream OA via equipment ID as well as its type attribute, and
+//	indeed may cause the management ONU to instantiate a port-mapping package to specify the ports
+//	precisely.
+//
+//	The management ONU automatically deletes instances of this ME when a cardholder is neither
+//	provisioned to expect a mid-span PON RE downstream OA circuit pack, nor is it equipped with a
+//	mid-span PON RE downstream OA circuit pack.
+//
+//	Relationships
+//		An instance of this ME is associated with a downstream OA and with an instance of a circuit
+//		pack. If the RE includes OEO regeneration in either direction, the RE downstream amplifier is
+//		also associated with an RE ANI-G. Refer to clause 9.14.1 for further discussion.
+//
+//	Attributes
+//		Managed Entity Id
+//			NOTE 1 – This ME ID may be identical to that of an RE ANI-G if it shares the same physical slot-
+//			port.
+//
+//		Administrative State
+//			NOTE 2– When an RE supports multiple PONs, or protected access to a single PON, its primary
+//			ANI-G cannot be completely shut down, due to a loss of the management communications capability.
+//			Complete blocking of service and removal of power may nevertheless be appropriate for secondary
+//			RE ANI-Gs. Administrative lock suppresses alarms and notifications for both primary and
+//			secondary RE ANI-Gs. Administrative lock suppresses alarms and notifications for an RE
+//			downstream amplifier, be it either primary or secondary.
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the ME is capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+//		Arc
+//			ARC:	See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Arc Interval
+//			ARC interval: See clause A.1.4.3. (R, W) (optional) (1 byte)
+//
+//		Operational Mode
+//			(R,W) (mandatory) (1 byte)
+//
+//		Input Optical Signal Level
+//			Input optical signal level: This attribute reports the current measurement of the input optical
+//			signal power of the downstream OA. Its value is a 2s complement integer referred to 1 mW (i.e.,
+//			dBm), with 0.002 dB granularity. (R) (optional) (2 bytes)
+//
+//		Lower Input Optical Threshold
+//			Lower input optical threshold: This attribute specifies the optical level the RE uses to declare
+//			the low received optical power alarm. Valid values are –127 dBm (coded as 254) to 0 dBm (coded
+//			as 0) in 0.5 dB increments. The default value 0xFF selects the RE's internal policy. (R, W)
+//			(optional) (1 byte)
+//
+//		Upper Input Optical Threshold
+//			Upper input optical threshold: This attribute specifies the optical level the RE uses to declare
+//			the high received optical power alarm. Valid values are –127 dBm (coded as 254) to 0 dBm (coded
+//			as 0) in 0.5 dB increments. The default value 0xFF selects the RE's internal policy. (R, W)
+//			(optional) (1 byte)
+//
+//		Output Optical Signal Level
+//			Output optical signal level: This attribute reports the current measurement of the mean optical
+//			launch power of the downstream OA. Its value is a 2s complement integer referred to 1 mW (i.e.,
+//			dBm), with 0.002 dB granularity. (R) (optional) (2 bytes)
+//
+//		Lower Output Optical Threshold
+//			Lower output optical threshold: This attribute specifies the minimum mean optical launch power
+//			that the RE uses to declare the low transmit optical power alarm. Its value is a 2s complement
+//			integer referred to 1 mW (i.e., dBm), with 0.5 dB granularity. The default value 0x7F selects
+//			the RE's internal policy. (R, W) (optional) (1 byte)
+//
+//		Upper Output Optical Threshold
+//			Upper output optical threshold: This attribute specifies the maximum mean optical launch power
+//			that the RE uses to declare the high transmit optical power alarm. Its value is a 2s complement
+//			integer referred to 1 mW (i.e., dBm), with 0.5 dB granularity. The default value 0x7F selects
+//			the RE's internal policy. (R, W) (optional) (1 byte)
+//
+//		R'S' Splitter Coupling Ratio
+//			R'S' splitter coupling ratio: This attribute reports the coupling ratio of the splitter at the
+//			R'/S' interface that connects the embedded management ONU and the amplifiers to the OTL. Valid
+//			values are 99:1 (coded as 99 decimal) to 1:99 (coded as 1 decimal), where the first value is the
+//			value encoded and is the percentage of the optical signal connected to the amplifier. The
+//			default value 0xFF indicates that there is no splitter connected to this upstream/downstream
+//			amplifier pair. (R) (optional) (1 byte)
+//
+type ReDownstreamAmplifier struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	redownstreamamplifierBME = &ManagedEntityDefinition{
+		Name:    "ReDownstreamAmplifier",
+		ClassID: 316,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+			Test,
+		),
+		AllowedAttributeMask: 0XFFF0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2:  ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 2),
+			3:  ByteField("Arc", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 3),
+			4:  ByteField("ArcInterval", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+			5:  ByteField("OperationalMode", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6:  Uint16Field("InputOpticalSignalLevel", 0, mapset.NewSetWith(Read), false, false, true, false, 6),
+			7:  ByteField("LowerInputOpticalThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 7),
+			8:  ByteField("UpperInputOpticalThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 8),
+			9:  Uint16Field("OutputOpticalSignalLevel", 0, mapset.NewSetWith(Read), false, false, true, false, 9),
+			10: ByteField("LowerOutputOpticalThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 10),
+			11: ByteField("UpperOutputOpticalThreshold", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
+			12: ByteField("R'S'SplitterCouplingRatio", 0, mapset.NewSetWith(Read), false, false, true, false, 12),
+		},
+	}
+}
+
+// NewReDownstreamAmplifier (class ID 316 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 NewReDownstreamAmplifier(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(redownstreamamplifierBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/rtpperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/rtpperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..c2d2021
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/rtpperformancemonitoringhistorydata.go
@@ -0,0 +1,119 @@
+/*
+ * 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 RtpPerformanceMonitoringHistoryDataClassId ClassID = ClassID(144)
+
+var rtpperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// RtpPerformanceMonitoringHistoryData (class ID #144)
+//	This ME collects PM data related to an RTP session. Instances of this ME are created and deleted
+//	by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the PPTP POTS UNI ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP POTS UNI ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Rtp Errors
+//			RTP errors:	This attribute counts RTP packet errors. (R) (mandatory) (4 bytes)
+//
+//		Packet Loss
+//			Packet loss:	This attribute represents the fraction of packets lost. This attribute is
+//			calculated at the end of the 15 min interval, and is undefined under the get current data
+//			action. The value 0 indicates no packet loss, scaling linearly to 0xFFFF FFFF to indicate 100%
+//			packet loss (zero divided by zero is defined to be zero). (R) (mandatory) (4 bytes)
+//
+//		Maximum Jitter
+//			Maximum jitter: This attribute is a high water-mark that represents the maximum jitter
+//			identified during the measured interval, expressed in RTP timestamp units. (R) (mandatory)
+//			(4 bytes)
+//
+//		Maximum Time Between Real_Time Transport Control Protocol Rtcp Packets
+//			Maximum time between real-time transport control protocol (RTCP) packets: This attribute is a
+//			high water-mark that represents the maximum time between RTCP packets during the measured
+//			interval, in milliseconds. (R) (mandatory) (4 bytes)
+//
+//		Buffer Underflows
+//			Buffer underflows: This attribute counts the number of times the reassembly buffer underflows.
+//			In the case of continuous underflow caused by a loss of IP packets, a single buffer underflow
+//			should be counted. If the IW function is implemented with multiple buffers, such as a packet
+//			level buffer and a bit level buffer, then the underflow of either buffer increments this
+//			counter. (R) (mandatory) (4 bytes)
+//
+//		Buffer Overflows
+//			Buffer overflows: This attribute counts the number of times the reassembly buffer overflows. If
+//			the IW function is implemented with multiple buffers, such as a packet level buffer and a bit
+//			level buffer, then the overflow of either buffer increments this counter. (R) (mandatory)
+//			(4 bytes)
+//
+type RtpPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	rtpperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "RtpPerformanceMonitoringHistoryData",
+		ClassID: 144,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("RtpErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("PacketLoss", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("MaximumJitter", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint32Field("MaximumTimeBetweenRealTimeTransportControlProtocolRtcpPackets", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint32Field("BufferUnderflows", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8: Uint32Field("BufferOverflows", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+		},
+	}
+}
+
+// NewRtpPerformanceMonitoringHistoryData (class ID 144 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 NewRtpPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(rtpperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/rtpprofiledata.go b/vendor/github.com/cboling/omci/generated/rtpprofiledata.go
new file mode 100644
index 0000000..ea025bf
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/rtpprofiledata.go
@@ -0,0 +1,111 @@
+/*
+ * 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 RtpProfileDataClassId ClassID = ClassID(143)
+
+var rtpprofiledataBME *ManagedEntityDefinition
+
+// RtpProfileData (class ID #143)
+//	This ME configures RTP. It is conditionally required for ONUs that offer VoIP service. If a non-
+//	OMCI interface is used to manage VoIP, this ME is unnecessary.
+//
+//	An instance of this ME is created and deleted by the OLT. An RTP profile is needed for each
+//	unique set of attributes.
+//
+//	Relationships
+//		An instance of this ME may be associated with one or more VoIP media profile MEs.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Local Port Min
+//			Local port min: This attribute defines the base UDP port that should be used by RTP for voice
+//			traffic. The recommended default is 50000 (R, W, set-by-create) (mandatory) (2 bytes)
+//
+//		Local Port Max
+//			Local port max: This attribute defines the highest UDP port used by RTP for voice traffic. The
+//			value must be greater than the local port minimum. The value 0 specifies that the local port
+//			maximum be equal to the local port minimum. (R, W, set-by-create) (optional) (2 bytes)
+//
+//		Dscp Mark
+//			DSCP mark:	Diffserv code point to be used for outgoing RTP packets for this profile. The
+//			recommended default value is expedited forwarding (EF) = 0x2E. (R, W, setbycreate) (mandatory)
+//			(1 byte)
+//
+//		Piggyback Events
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Tone Events
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Dtmf Events
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Cas Events
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Ip Host Config Pointer
+//			IP host config pointer: This optional pointer associates the bearer (voice) flow with an IP host
+//			config data or IPv6 host config data ME. If this attribute is not present or is not populated
+//			with a valid pointer value, the bearer flow uses the same IP stack that is used for signalling,
+//			indicated by the TCP/UDP pointer in the associated SIP agent or MGC config data. The default
+//			value is 0xFFFF, a null pointer. (R, W) (optional) (2 bytes)
+//
+type RtpProfileData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	rtpprofiledataBME = &ManagedEntityDefinition{
+		Name:    "RtpProfileData",
+		ClassID: 143,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("LocalPortMin", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: Uint16Field("LocalPortMax", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 2),
+			3: ByteField("DscpMark", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: ByteField("PiggybackEvents", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5: ByteField("ToneEvents", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6: ByteField("DtmfEvents", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7: ByteField("CasEvents", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8: Uint16Field("IpHostConfigPointer", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 8),
+		},
+	}
+}
+
+// NewRtpProfileData (class ID 143 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 NewRtpProfileData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(rtpprofiledataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/rtppseudowireparameters.go b/vendor/github.com/cboling/omci/generated/rtppseudowireparameters.go
new file mode 100644
index 0000000..018ced4
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/rtppseudowireparameters.go
@@ -0,0 +1,111 @@
+/*
+ * 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 RtpPseudowireParametersClassId ClassID = ClassID(283)
+
+var rtppseudowireparametersBME *ManagedEntityDefinition
+
+// RtpPseudowireParameters (class ID #283)
+//	If a pseudowire service uses RTP, the RTP pseudowire parameters ME provides configuration
+//	information for the RTP layer. Instances of this ME are created and deleted by the OLT. The use
+//	of RTP on a pseudowire is optional, and is determined by the existence of the RTP pseudowire
+//	parameters ME.
+//
+//	Relationships
+//		An instance of the RTP pseudowire parameters ME may exist for each pseudowire TP ME, to which it
+//		is implicitly bound by a common ME ID.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 pseudowire TP ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Clock Reference
+//			Clock reference: This attribute specifies the frequency of the common timing reference, in
+//			multiples of 8 kHz. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Rtp Timestamp Mode
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Ptype
+//			PTYPE:	This attribute specifies the RTP payload type in the TDM to the PSN direction. It
+//			comprises two 1 byte values. The first is for the payload channel, the second, for the optional
+//			separate signalling channel. Assignable PTYPEs lie in the dynamic range 96..127. If signalling
+//			is not transported in its own channel, the second value should be set to 0. (R, W, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Ssrc
+//			SSRC:	This attribute specifies the RTP synchronization source in the TDM to the PSN direction.
+//			It comprises two 4 byte values. The first is for the payload channel, the second, for the
+//			optional separate signalling channel. If signalling is not transported in its own channel, the
+//			second value should be set to 0. (R, W, setbycreate) (mandatory) (8 bytes)
+//
+//		Expected Ptype
+//			Expected PTYPE: This attribute specifies the RTP payload type in the PSN to the TDM direction.
+//			The received payload type may be used to detect malformed packets. It comprises two 1 byte
+//			values. The first is for the payload channel, the second, for the optional separate signalling
+//			channel. To disable either or both of the check functions, set the corresponding value to its
+//			default value 0. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Expected Ssrc
+//			Expected SSRC: This attribute specifies the RTP synchronization source in the PSN to the TDM
+//			direction. The received SSRC may be used to detect misconnection (stray packets). It comprises
+//			two 4 byte values. The first is for the payload channel, the second, for the optional separate
+//			signalling channel. To disable either or both of the check functions, set the corresponding
+//			value to its default value 0. (R, W, setbycreate) (optional) (8 bytes)
+//
+type RtpPseudowireParameters struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	rtppseudowireparametersBME = &ManagedEntityDefinition{
+		Name:    "RtpPseudowireParameters",
+		ClassID: 283,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFC00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("ClockReference", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: ByteField("RtpTimestampMode", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint16Field("Ptype", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: Uint64Field("Ssrc", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5: Uint16Field("ExpectedPtype", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 5),
+			6: Uint64Field("ExpectedSsrc", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 6),
+		},
+	}
+}
+
+// NewRtpPseudowireParameters (class ID 283 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 NewRtpPseudowireParameters(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(rtppseudowireparametersBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/sipagentconfigdata.go b/vendor/github.com/cboling/omci/generated/sipagentconfigdata.go
new file mode 100644
index 0000000..a92e8b9
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/sipagentconfigdata.go
@@ -0,0 +1,172 @@
+/*
+ * 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 SipAgentConfigDataClassId ClassID = ClassID(150)
+
+var sipagentconfigdataBME *ManagedEntityDefinition
+
+// SipAgentConfigData (class ID #150)
+//	The SIP agent config data ME models a SIP signalling agent. It defines the configuration
+//	necessary to establish communication for signalling between the SIP user agent (UA) and a SIP
+//	server.
+//
+//	NOTE 1 – If a non-OMCI interface is used to manage SIP for VoIP, this ME is unnecessary. The
+//	non-OMCI interface supplies the necessary data, which may be read back to the OLT via the SIP
+//	config portal ME.
+//
+//	Instances of this ME are created and deleted by the OLT.
+//
+//	Relationships
+//		An instance of this ME serves one or more SIP user data MEs and points to a TCP/UDP config data
+//		that carries signalling messages. Other pointers establish additional agent parameters such as
+//		proxy servers.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Proxy Server Address Pointer
+//			Proxy server address pointer: This attribute points to a large string ME that contains the name
+//			(IP address or URI) of the SIP proxy server for SIP signalling messages. (R, W, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Outbound Proxy Address Pointer
+//			Outbound proxy address pointer: An outbound SIP proxy may or may not be required within a given
+//			network. If an outbound SIP proxy is used, the outbound proxy address pointer attribute must be
+//			set to point to a valid large string ME that contains the name (IP address or URI) of the
+//			outbound proxy server for SIP signalling messages. If an outbound SIP proxy is not used, the
+//			outbound proxy address pointer attribute must be set to a null pointer. (R, W, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Primary Sip Dns
+//			Primary SIP DNS: This attribute specifies the primary SIP DNS IP address. If the value of this
+//			attribute is 0, the primary DNS server is defined in the corresponding IP host config data or
+//			IPv6 host config data ME. If the value is non-zero, it takes precedence over the primary DNS
+//			server defined in the IP host config data or IPv6 host config data ME. (R, W, set-by-create)
+//			(mandatory) (4 bytes)
+//
+//		Secondary Sip Dns
+//			Secondary SIP DNS: This attribute specifies the secondary SIP DNS IP address. If the value of
+//			this attribute is 0, the secondary DNS server is defined in the corresponding IP host config
+//			data or IPv6 host config data ME. If the value is non-zero, it takes precedence over the
+//			secondary DNS server defined in the IP host config data or IPv6 host config data ME. (R, W, set-
+//			by-create) (mandatory) (4 bytes)
+//
+//		Tcp_Udp Pointer
+//			TCP/UDP pointer: This pointer associates the SIP agent with the TCP/UDP config data ME to be
+//			used for communication with the SIP server. The default value is 0xFFFF, a null pointer. (R, W)
+//			(mandatory) (2 bytes)
+//
+//		Sip Reg Exp Time
+//			SIP reg exp time: This attribute specifies the SIP registration expiration time in seconds. If
+//			its value is 0, the SIP agent does not add an expiration time to the registration requests and
+//			does not perform reregistration. The default value is 3600 s. (R, W) (mandatory) (4 bytes)
+//
+//		Sip Rereg Head Start Time
+//			SIP rereg head start time: This attribute specifies the time in seconds prior to timeout that
+//			causes the SIP agent to start the re-registration process. The default value is 360 s. (R, W)
+//			(mandatory) (4 bytes)
+//
+//		Host Part Uri
+//			Host part URI: This attribute points to a large string ME that contains the host or domain part
+//			of the SIP address of record for users connected to this ONU. A null pointer indicates that the
+//			current address in the IP host config ME is to be used. (R, W, setbycreate) (mandatory)
+//			(2 bytes)
+//
+//		Sip Status
+//			(R) (mandatory) (1 byte)
+//
+//		Sip Registrar
+//			SIP registrar: This attribute points to a network address ME that contains the name (IP address
+//			or resolved name) of the registrar server for SIP signalling messages. Examples: "10.10.10.10"
+//			and "proxy.voip.net". (R, W, set-by-create) (mandatory) (2 bytes)
+//
+//		Softswitch
+//			Softswitch:	This attribute identifies the SIP gateway softswitch vendor. The format is four
+//			ASCII coded alphabetic characters [A..Z] as defined in [ATIS0300220]. A value of four null bytes
+//			indicates an unknown or unspecified vendor. (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Sip Response Table
+//			NOTE 2 – This model assumes that SIP response tones and text are common to all POTS lines that
+//			share a given SIP agent.
+//
+//		Sip Option Transmit Control
+//			SIP option transmit control: This Boolean attribute specifies that the ONU is (true) or is not
+//			(false) enabled to transmit SIP options. The default value is recommended to be false. (R, W,
+//			setbycreate) (optional) (1 byte)
+//
+//		Sip Uri Format
+//			SIP URI format: This attribute specifies the format of the URI in outgoing SIP messages. The
+//			recommended default value 0 specifies TEL URIs; the value 1 specifies SIP URIs. Other values are
+//			reserved. (R, W, setbycreate) (optional) (1 byte)
+//
+//		Redundant Sip Agent Pointer
+//			Redundant SIP agent pointer: This attribute points to another SIP agent config data ME, which is
+//			understood to provide redundancy. The initial SIP agent is determined by the pointer from the
+//			SIP user data ME. It is the manager's responsibility to provision a group of redundant SIP
+//			agents with mutually consistent attributes. (R, W, setbycreate) (optional) (2 bytes)
+//
+type SipAgentConfigData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	sipagentconfigdataBME = &ManagedEntityDefinition{
+		Name:    "SipAgentConfigData",
+		ClassID: 150,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFE,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  Uint16Field("ProxyServerAddressPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  Uint16Field("OutboundProxyAddressPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("PrimarySipDns", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4:  Uint32Field("SecondarySipDns", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  Uint16Field("TcpUdpPointer", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6:  Uint32Field("SipRegExpTime", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7:  Uint32Field("SipReregHeadStartTime", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8:  Uint16Field("HostPartUri", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 8),
+			9:  ByteField("SipStatus", 0, mapset.NewSetWith(Read), true, false, false, false, 9),
+			10: Uint16Field("SipRegistrar", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 10),
+			11: Uint32Field("Softswitch", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 11),
+			12: MultiByteField("SipResponseTable", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+			13: ByteField("SipOptionTransmitControl", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 13),
+			14: ByteField("SipUriFormat", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 14),
+			15: Uint16Field("RedundantSipAgentPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 15),
+		},
+	}
+}
+
+// NewSipAgentConfigData (class ID 150 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 NewSipAgentConfigData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(sipagentconfigdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/sipagentperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/sipagentperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..2d59f4e
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/sipagentperformancemonitoringhistorydata.go
@@ -0,0 +1,146 @@
+/*
+ * 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 SipAgentPerformanceMonitoringHistoryDataClassId ClassID = ClassID(151)
+
+var sipagentperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// SipAgentPerformanceMonitoringHistoryData (class ID #151)
+//	This ME collects PM data for the associated VoIP SIP agent. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with a SIP agent config data or SIP config portal object.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 corresponding SIP agent config
+//			data or to the SIP config portal. If a non-OMCI configuration method is used for VoIP, there can
+//			be only one live ME instance, associated with the SIP config portal, and with ME ID 0. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Transactions
+//			Transactions: This attribute counts the number of new transactions that were initiated. (R)
+//			(optional) (4 bytes)
+//
+//		Rx Invite Reqs
+//			Rx invite reqs: This attribute counts received invite messages, including retransmissions. (R)
+//			(optional) (4 bytes)
+//
+//		Rx Invite Retrans
+//			Rx invite retrans: This attribute counts received invite retransmission messages. (R) (optional)
+//			(4 bytes)
+//
+//		Rx Noninvite Reqs
+//			Rx noninvite reqs: This attribute counts received non-invite messages, including
+//			retransmissions. (R) (optional) (4 bytes)
+//
+//		Rx Noninvite Retrans
+//			Rx noninvite retrans: This attribute counts received non-invite retransmission messages. (R)
+//			(optional) (4 bytes)
+//
+//		Rx Response
+//			Rx response:	This attribute counts total responses received. (R) (optional) (4 bytes)
+//
+//		Rx Response Retransmissions
+//			Rx response retransmissions: This attribute counts total response retransmissions received. (R)
+//			(optional) (4 bytes)
+//
+//		Tx Invite Reqs
+//			Tx invite reqs: This attribute counts transmitted invite messages, including retransmissions.
+//			(R) (optional) (4 bytes)
+//
+//		Tx Invite Retrans
+//			Tx invite retrans: This attribute counts transmitted invite retransmission messages. (R)
+//			(optional) (4 bytes)
+//
+//		Tx Noninvite Reqs
+//			Tx noninvite reqs: This attribute counts transmitted non-invite messages, including
+//			retransmissions. (R) (optional) (4 bytes)
+//
+//		Tx Noninvite Retrans
+//			Tx noninvite retrans: This attribute counts transmitted non-invite retransmission messages. (R)
+//			(optional) (4 bytes)
+//
+//		Tx Response
+//			Tx response: This attribute counts the total responses sent. (R) (optional) (4 bytes)
+//
+//		Tx Response Retransmissions
+//			Tx response retransmissions: This attribute counts total response retransmissions sent. (R)
+//			(optional) (4 bytes)
+//
+type SipAgentPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	sipagentperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "SipAgentPerformanceMonitoringHistoryData",
+		ClassID: 151,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFE,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("Transactions", 0, mapset.NewSetWith(Read), false, false, true, false, 3),
+			4:  Uint32Field("RxInviteReqs", 0, mapset.NewSetWith(Read), false, false, true, false, 4),
+			5:  Uint32Field("RxInviteRetrans", 0, mapset.NewSetWith(Read), false, false, true, false, 5),
+			6:  Uint32Field("RxNoninviteReqs", 0, mapset.NewSetWith(Read), false, false, true, false, 6),
+			7:  Uint32Field("RxNoninviteRetrans", 0, mapset.NewSetWith(Read), false, false, true, false, 7),
+			8:  Uint32Field("RxResponse", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+			9:  Uint32Field("RxResponseRetransmissions", 0, mapset.NewSetWith(Read), false, false, true, false, 9),
+			10: Uint32Field("TxInviteReqs", 0, mapset.NewSetWith(Read), false, false, true, false, 10),
+			11: Uint32Field("TxInviteRetrans", 0, mapset.NewSetWith(Read), false, false, true, false, 11),
+			12: Uint32Field("TxNoninviteReqs", 0, mapset.NewSetWith(Read), false, false, true, false, 12),
+			13: Uint32Field("TxNoninviteRetrans", 0, mapset.NewSetWith(Read), false, false, true, false, 13),
+			14: Uint32Field("TxResponse", 0, mapset.NewSetWith(Read), false, false, true, false, 14),
+			15: Uint32Field("TxResponseRetransmissions", 0, mapset.NewSetWith(Read), false, false, true, false, 15),
+		},
+	}
+}
+
+// NewSipAgentPerformanceMonitoringHistoryData (class ID 151 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 NewSipAgentPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(sipagentperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/sipcallinitiationperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/sipcallinitiationperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..5abdc6a
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/sipcallinitiationperformancemonitoringhistorydata.go
@@ -0,0 +1,109 @@
+/*
+ * 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 SipCallInitiationPerformanceMonitoringHistoryDataClassId ClassID = ClassID(152)
+
+var sipcallinitiationperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// SipCallInitiationPerformanceMonitoringHistoryData (class ID #152)
+//	This ME collects PM data related to call initiations of a VoIP SIP agent. Instances of this ME
+//	are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the SIP agent config data or SIP config
+//		portal ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 SIP agent config data or the
+//			SIP config portal ME. If a nonOMCI configuration method is used for VoIP, there can be only one
+//			live ME instance, associated with the SIP config portal, and with ME ID 0. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Failed To Connect Counter
+//			Failed to connect counter: This attribute counts the number of times that the SIP UA failed to
+//			reach/connect its TCP/UDP peer during SIP call initiations. (R) (mandatory) (4 bytes)
+//
+//		Failed To Validate Counter
+//			Failed to validate counter: This attribute counts the number of times that the SIP UA failed to
+//			validate its peer during SIP call initiations. (R) (mandatory) (4 bytes)
+//
+//		Timeout Counter
+//			Timeout counter: This attribute counts the number of times that the SIP UA timed out during SIP
+//			call initiations. (R) (mandatory) (4 bytes)
+//
+//		Failure Received Counter
+//			Failure received counter: This attribute counts the number of times that the SIP UA received a
+//			failure error code during SIP call initiations. (R) (mandatory) (4 bytes)
+//
+//		Failed To Authenticate Counter
+//			Failed to authenticate counter: This attribute counts the number of times that the SIP UA failed
+//			to authenticate itself during SIP call initiations. (R) (mandatory) (4 bytes)
+//
+type SipCallInitiationPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	sipcallinitiationperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "SipCallInitiationPerformanceMonitoringHistoryData",
+		ClassID: 152,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFE00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("FailedToConnectCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("FailedToValidateCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("TimeoutCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint32Field("FailureReceivedCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint32Field("FailedToAuthenticateCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+		},
+	}
+}
+
+// NewSipCallInitiationPerformanceMonitoringHistoryData (class ID 152 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 NewSipCallInitiationPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(sipcallinitiationperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/sipuserdata.go b/vendor/github.com/cboling/omci/generated/sipuserdata.go
new file mode 100644
index 0000000..f87ec4f
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/sipuserdata.go
@@ -0,0 +1,143 @@
+/*
+ * 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 SipUserDataClassId ClassID = ClassID(153)
+
+var sipuserdataBME *ManagedEntityDefinition
+
+// SipUserData (class ID #153)
+//	The SIP user data defines the user specific configuration attributes associated with a specific
+//	VoIP CTP. This entity is conditionally required for ONUs that offer VoIP SIP services. If a non-
+//	OMCI interface is used to manage SIP for VoIP, this ME is unnecessary. The non-OMCI interface
+//	supplies the necessary data, which may be read back to the OLT via the SIP config portal ME.
+//
+//	An instance of this ME is created and deleted by the OLT. A SIP user data instance is required
+//	for each POTS UNI port using SIP protocol and configured by the OMCI.
+//
+//	Relationships
+//		An instance of this ME is associated with one VoIP voice CTP ME and a PPTP POTS UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Sip Agent Pointer
+//			SIP agent pointer: This attribute points to the SIP agent config data ME to be used for
+//			signalling. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		User Part Aor
+//			User part AOR: This attribute points to a large string that contains the user identification
+//			part of the address of record. This can take the form of an alphanumeric string or the
+//			subscriber's directory number. A null pointer indicates the absence of an AOR. (R, W,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Sip Display Name
+//			SIP display name: This ASCII string attribute defines the customer ID used for the display
+//			attribute in outgoing SIP messages. The default value is null (all zero bytes) (R, W)
+//			(mandatory) (25 bytes)
+//
+//		Username And Password
+//			Username and password: This attribute points to an authentication security method ME that
+//			contains the SIP user name and password used for authentication. A null pointer indicates no
+//			username and password. (R, W, setbycreate) (mandatory) (2)
+//
+//		Voicemail Server Sip Uri
+//			Voicemail server SIP URI: This attribute points to a network address ME that contains the name
+//			(IP address or URI) of the SIP voicemail server for SIP signalling messages. A null pointer
+//			indicates the absence of a SIP voicemail server. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Voicemail Subscription Expiration Time
+//			Voicemail subscription expiration time: This attribute defines the voicemail subscription
+//			expiration time in seconds. If this value is 0, the SIP agent uses an implementation-specific
+//			value. This attribute is recommended to be set to 3600 s by default. (R, W, setbycreate)
+//			(mandatory) (4 bytes)
+//
+//		Network Dial Plan Pointer
+//			Network dial plan pointer: This attribute points to a network dial plan table. A null pointer
+//			indicates the absence of a network dial plan. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Application Services Profile Pointer
+//			Application services profile pointer: This attribute points to a VoIP application services
+//			profile. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Feature Code Pointer
+//			Feature code pointer: This attribute points to the VoIP feature access codes ME for this
+//			subscriber. A null pointer indicates the absence of a VoIP feature access codes ME. (R, W, set-
+//			by-create) (mandatory) (2 bytes)
+//
+//		Pptp Pointer
+//			PPTP pointer: This attribute points to the PPTP POTS UNI ME that provides the analogue telephony
+//			adaptor (ATA) function. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Release Timer
+//			Release timer: This attribute contains a release timer defined in seconds. The value 0 specifies
+//			that the ONU is to use its internal default. The default value of this attribute is 10 s. (R, W)
+//			(optional) (1 byte)
+//
+//		Receiver Off Hook Roh Timer
+//			Receiver off hook (ROH) timer:	This attribute defines the time in seconds for the ROH condition
+//			before ROH tone is applied. The value 0 disables ROH timing. The value 0xFF specifies that the
+//			ONU is to use its internal default, which may or may not be the same as the 15 s OMCI default
+//			value. (R, W) (optional) (1 byte)
+//
+type SipUserData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	sipuserdataBME = &ManagedEntityDefinition{
+		Name:    "SipUserData",
+		ClassID: 153,
+		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:  Uint16Field("SipAgentPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  Uint16Field("UserPartAor", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  MultiByteField("SipDisplayName", 25, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4:  Uint16Field("UsernameAndPassword", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  Uint16Field("VoicemailServerSipUri", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6:  Uint32Field("VoicemailSubscriptionExpirationTime", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7:  Uint16Field("NetworkDialPlanPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8:  Uint16Field("ApplicationServicesProfilePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 8),
+			9:  Uint16Field("FeatureCodePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 9),
+			10: Uint16Field("PptpPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 10),
+			11: ByteField("ReleaseTimer", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
+			12: ByteField("ReceiverOffHookRohTimer", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+		},
+	}
+}
+
+// NewSipUserData (class ID 153 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 NewSipUserData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(sipuserdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/snmpconfigurationdata.go b/vendor/github.com/cboling/omci/generated/snmpconfigurationdata.go
new file mode 100644
index 0000000..9c4b339
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/snmpconfigurationdata.go
@@ -0,0 +1,110 @@
+/*
+ * 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 SnmpConfigurationDataClassId ClassID = ClassID(335)
+
+var snmpconfigurationdataBME *ManagedEntityDefinition
+
+// SnmpConfigurationData (class ID #335)
+//	The SNMP configuration data ME provides a way for the OLT to provision an IP path for an SNMP
+//	management agent.
+//
+//	The SNMP configuration data ME is created and deleted by the OLT.
+//
+//	Relationships
+//		One instance of this ME is created by the OLT for each SNMP management path termination.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The ME IDs 0 and
+//			0xFFFF are reserved. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Snmp Version
+//			SNMP version: This integer attribute is the SNMP protocol version to be supported. (R, W,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Snmp Agent Address
+//			SNMP agent address: This attribute is a pointer to a TCP/UDP config data ME, which provides the
+//			SNMP agent. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Snmp Server Address
+//			SNMP server address: This attribute is the IP address of the SNMP server. (R, W, setbycreate)
+//			(mandatory) (4 bytes)
+//
+//		Snmp Server Port
+//			SNMP server port: This attribute is the UDP port number of the SNMP server. (R, W, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Security Name Pointer
+//			Security name pointer: This attribute points to a large string whose content represents the SNMP
+//			security name in a human-readable format that is independent of the security model. SecurityName
+//			is defined in [b-IETF RFC 2571]. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Community For Read
+//			Community for read: This attribute is a pointer to a large string that contains the name of the
+//			read community. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Community For Write
+//			Community for write: This attribute is a pointer to a large string that contains the name of the
+//			write community. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Sys Name Pointer
+//			Sys name pointer: This attribute points to a large string whose content identifies the SNMP
+//			system name. SysName is defined in [b-IETF RFC 3418]. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+type SnmpConfigurationData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	snmpconfigurationdataBME = &ManagedEntityDefinition{
+		Name:    "SnmpConfigurationData",
+		ClassID: 335,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("SnmpVersion", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: Uint16Field("SnmpAgentAddress", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("SnmpServerAddress", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: Uint16Field("SnmpServerPort", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5: Uint16Field("SecurityNamePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6: Uint16Field("CommunityForRead", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7: Uint16Field("CommunityForWrite", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8: Uint16Field("SysNamePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 8),
+		},
+	}
+}
+
+// NewSnmpConfigurationData (class ID 335 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 NewSnmpConfigurationData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(snmpconfigurationdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/softwareimage.go b/vendor/github.com/cboling/omci/generated/softwareimage.go
new file mode 100644
index 0000000..ff90b00
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/softwareimage.go
@@ -0,0 +1,138 @@
+/*
+ * 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 SoftwareImageClassId ClassID = ClassID(7)
+
+var softwareimageBME *ManagedEntityDefinition
+
+// SoftwareImage (class ID #7)
+//	This ME models an executable software image stored in the ONU (documented here as its
+//	fundamental usage). It may also be used to represent an opaque vendor-specific file
+//	(vendorspecific usage).
+//
+//	Fundamental usage
+//
+//	The ONU automatically creates two instances of this ME upon the creation of each ME that
+//	contains independently manageable software, either the ONU itself or an individual circuit pack.
+//	It populates ME attributes according to data within the ONU or the circuit pack.
+//
+//	Some pluggable equipment may not contain software. Others may contain software that is
+//	intrinsically bound to the ONU's own software image. No software image ME need exist for such
+//	equipment, though it may be convenient for the ONU to create them to support software version
+//	audit from the OLT. In this case, the dependent MEs would support only the get action.
+//
+//	A slot may contain various equipment over its lifetime, and if software image MEs exist, the ONU
+//	must automatically create and delete them as the equipped configuration changes. The identity of
+//	the software image is tied to the cardholder.
+//
+//	When an ONU controller packs are duplicated, each can be expected to contain two software image
+//	MEs, managed through reference to the individual controller packs themselves. When this occurs,
+//	the ONU should not have a global pair of software images MEs (instance 0), since an action
+//	(download, activate, commit) directed to instance 0 would be ambiguous.
+//
+//	Relationships
+//		Two instances of the software image ME are associated with each instance of the ONU or
+//		cardholder whose software is independently managed.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The first byte
+//			indicates the physical location of the equipment hosting the software image, either the ONU (0)
+//			or a cardholder (1..254). The second byte distinguishes between the two software image ME
+//			instances (0..1). (R) (mandatory) (2 bytes)
+//
+//		Version
+//			Version:	This string attribute identifies the version of the software. (R) (mandatory)
+//			(14 bytes)
+//
+//		Is Committed
+//			Is committed: This attribute indicates whether the associated software image is committed (1) or
+//			uncommitted (0). By definition, the committed software image is loaded and executed upon reboot
+//			of the ONU or circuit pack. During normal operation, one software image is always committed,
+//			while the other is uncommitted. Under no circumstances are both software images allowed to be
+//			committed at the same time. On the other hand, both software images could be uncommitted at the
+//			same time if both were invalid. Upon ME instantiation, instance 0 is initialized to committed,
+//			while instance 1 is initialized to uncommitted (i.e., the ONU ships from the factory with image
+//			0 committed). (R) (mandatory) (1 byte)
+//
+//		Is Active
+//			Is active:	This attribute indicates whether the associated software image is active (1) or
+//			inactive (0). By definition, the active software image is one that is currently loaded and
+//			executing in the ONU or circuit pack. Under normal operation, one software image is always
+//			active while the other is inactive. Under no circumstances are both software images allowed to
+//			be active at the same time. On the other hand, both software images could be inactive at the
+//			same time if both were invalid. (R) (mandatory) (1 byte)
+//
+//		Is Valid
+//			Is valid:	This attribute indicates whether the associated software image is valid (1) or invalid
+//			(0). By definition, a software image is valid if it has been verified to be an executable code
+//			image. The verification mechanism is not subject to standardization; however, it should include
+//			at least a data integrity check [e.g., a cyclic redundancy check (CRC)] of the entire code
+//			image. Upon ME instantiation or software download completion, the ONU validates the associated
+//			code image and sets this attribute according to the result. (R) (mandatory) (1 byte)
+//
+//		Product Code
+//			Product code:	This attribute provides a way for a vendor to indicate product code information on
+//			a file. It is a character string, padded with trailing nulls if it is shorter than 25 bytes. (R)
+//			(optional) (25 bytes)
+//
+//		Image Hash
+//			Image hash:	This attribute is an MD5 hash of the software image. It is computed at completion of
+//			the end download action. (R) (optional) (16 bytes)
+//
+type SoftwareImage struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	softwareimageBME = &ManagedEntityDefinition{
+		Name:    "SoftwareImage",
+		ClassID: 7,
+		MessageTypes: mapset.NewSetWith(
+			ActivateSoftware,
+			CommitSoftware,
+			DownloadSection,
+			EndSoftwareDownload,
+			Get,
+			StartSoftwareDownload,
+		),
+		AllowedAttributeMask: 0XFC00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: MultiByteField("Version", 14, nil, mapset.NewSetWith(Read), true, false, false, false, 1),
+			2: ByteField("IsCommitted", 0, mapset.NewSetWith(Read), true, false, false, false, 2),
+			3: ByteField("IsActive", 0, mapset.NewSetWith(Read), true, false, false, false, 3),
+			4: ByteField("IsValid", 0, mapset.NewSetWith(Read), true, false, false, false, 4),
+			5: MultiByteField("ProductCode", 25, nil, mapset.NewSetWith(Read), true, false, true, false, 5),
+			6: MultiByteField("ImageHash", 16, nil, mapset.NewSetWith(Read), true, false, true, false, 6),
+		},
+	}
+}
+
+// NewSoftwareImage (class ID 7 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 NewSoftwareImage(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(softwareimageBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/t-cont.go b/vendor/github.com/cboling/omci/generated/t-cont.go
new file mode 100644
index 0000000..c0cc82b
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/t-cont.go
@@ -0,0 +1,106 @@
+/*
+ * 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 TContClassId ClassID = ClassID(262)
+
+var tcontBME *ManagedEntityDefinition
+
+// TCont (class ID #262)
+//	An instance of the traffic container ME T-CONT represents a logical connection group associated
+//	with a G-PON PLOAM layer alloc-ID. A T-CONT can accommodate GEM packets in priority queues or
+//	traffic schedulers that exist in the GEM layer.
+//
+//	The ONU autonomously creates instances of this ME. The OLT can discover the number of TCONT
+//	instances via the ANI-G ME. When the ONU's MIB is reset or created for the first time, all
+//	supported T-CONTs are created. The OLT provisions alloc-IDs to the ONU via the PLOAM channel.
+//	Via the OMCI, the OLT must then set the alloc-ID attributes in the T-CONTs that it wants to
+//	activate for user traffic, to create the appropriate association with the allocation ID in the
+//	PLOAM channel. There should be a one-to-one relationship between allocation IDs and T-CONT MEs;
+//	the connection of multiple T-CONTs to a single allocation ID is undefined.
+//
+//	The allocation ID that matches the ONU-ID itself is defined to be the default alloc-ID. This
+//	allocID is used to carry the OMCC. The default alloc-ID can also be used to carry user traffic,
+//	and hence can be assigned to one of the T-CONT MEs. However, this OMCI relationship only
+//	pertains to user traffic, and the OMCC relationship is unaffected. It can also be true that the
+//	OMCC is not contained in any T-CONT ME construct; rather, that the OMCC remains outside of the
+//	OMCI, and that the OMCI is not used to manage the OMCC in any way. Multiplexing of the OMCC and
+//	user data in GPON systems is discussed in clause B.2.4.
+//
+//	Relationships
+//		One or more instances of this ME are associated with an instance of a circuit pack that supports
+//		a PON interface function, or with the ONU-G itself.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. This 2 byte
+//			number indicates the physical capability that realizes the TCONT. It may be represented as
+//			0xSSBB, where SS indicates the slot ID that contains this T-CONT (0 for the ONU as a whole), and
+//			BB is the TCONT ID, numbered by the ONU itself. T-CONTs are numbered in ascending order, with
+//			the range 0..255 in each slot. (R) (mandatory) (2 bytes)
+//
+//		Alloc_Id
+//			Alloc-ID:	This attribute links the T-CONT with the alloc-ID assigned by the OLT in the
+//			assign_alloc-ID PLOAM message. The respective TC layer specification should be referenced for
+//			the legal values for that system. Prior to the setting of this attribute by the OLT, this
+//			attribute has an unambiguously unusable initial value, namely the value 0x00FF or 0xFFFF for
+//			ITU-T G.984 systems, and the value 0xFFFF for all other ITU-T GTC based PON systems. (R, W)
+//			(mandatory) (2 bytes)
+//
+//		Deprecated
+//			Deprecated:	The ONU should set this attribute to the value 1, and the OLT should ignore it. (R)
+//			(mandatory) (1 byte)
+//
+//		Policy
+//			NOTE – This attribute is read-only, unless otherwise specified by the QoS configuration
+//			flexibility attribute of the ONU2-G ME. If flexible configuration is not supported, the ONU
+//			should reject an attempt to set it with a parameter error result-reason code.
+//
+type TCont struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	tcontBME = &ManagedEntityDefinition{
+		Name:    "TCont",
+		ClassID: 262,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XE000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: Uint16Field("AllocId", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2: ByteField("Deprecated", 0, mapset.NewSetWith(Read), false, false, false, true, 2),
+			3: ByteField("Policy", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+		},
+	}
+}
+
+// NewTCont (class ID 262 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 NewTCont(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(tcontBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/tcadaptorperformancemonitoringhistorydataxdsl.go b/vendor/github.com/cboling/omci/generated/tcadaptorperformancemonitoringhistorydataxdsl.go
new file mode 100644
index 0000000..feb1f0c
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/tcadaptorperformancemonitoringhistorydataxdsl.go
@@ -0,0 +1,123 @@
+/*
+ * 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 TcAdaptorPerformanceMonitoringHistoryDataXdslClassId ClassID = ClassID(116)
+
+var tcadaptorperformancemonitoringhistorydataxdslBME *ManagedEntityDefinition
+
+// TcAdaptorPerformanceMonitoringHistoryDataXdsl (class ID #116)
+//	This ME collects PM data of an xTUC to xTUR ATM data path. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP xDSL UNI part 1. (R)
+//			(mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1 _2 Id
+//			Threshold data1/2 ID: This attribute points to an instance of the threshold data1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Near_End Hec Violation Count
+//			Near-end HEC violation count: This attribute counts near-end HEC anomalies in the ATM data path.
+//			(R) (mandatory) (2 bytes)
+//
+//		Near_End Delineated Total Cell Count Cd P
+//			Near-end delineated total cell count (CDP): This attribute counts the total number of cells
+//			passed through the cell delineation and HEC function process operating on the ATM data path
+//			while in the SYNC state. (R) (mandatory) (4 bytes)
+//
+//		Near_End User Total Cell Count Cu_P
+//			Near-end user total cell count(CU-P): This attribute counts the total number of cells in the ATM
+//			data path delivered at the V-C interface. (R) (mandatory) (4 bytes)
+//
+//		Near_End Idle Cell Bit Error Count
+//			Near-end idle cell bit error count: This attribute counts cells with bit errors in the ATM data
+//			path idle payload received at the near end. (R) (mandatory) (2 bytes)
+//
+//		Far_End Hec Violation Count
+//			Far-end HEC violation count: This attribute counts far-end HEC anomalies in the ATM data path.
+//			(R) (mandatory) (2 bytes)
+//
+//		Far_End Delineated Total Cell Count Cd_Pfe
+//			Far-end delineated total cell count (CD-PFE): This attribute counts the total number of cells
+//			passed through the cell delineation process and HEC function operating on the ATM data path
+//			while in the SYNC state. (R) (mandatory) (4 bytes)
+//
+//		Far_End User Total Cell Count Cu_Pfe
+//			Far-end user total cell count (CU-PFE): This attribute counts the total number of cells in the
+//			ATM data path delivered at the T-R interface. (R) (mandatory) (4 bytes)
+//
+//		Far_End Idle Cell Bit Error Count
+//			Far-end idle cell bit error count: This attribute counts cells with bit errors in the ATM data
+//			path idle payload received at the far end. (R) (mandatory) (2 bytes)
+//
+type TcAdaptorPerformanceMonitoringHistoryDataXdsl struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	tcadaptorperformancemonitoringhistorydataxdslBME = &ManagedEntityDefinition{
+		Name:    "TcAdaptorPerformanceMonitoringHistoryDataXdsl",
+		ClassID: 116,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFC0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint16Field("NearEndHecViolationCount", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("NearEndDelineatedTotalCellCountCdP", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("NearEndUserTotalCellCountCuP", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint16Field("NearEndIdleCellBitErrorCount", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint16Field("FarEndHecViolationCount", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("FarEndDelineatedTotalCellCountCdPfe", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("FarEndUserTotalCellCountCuPfe", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint16Field("FarEndIdleCellBitErrorCount", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+		},
+	}
+}
+
+// NewTcAdaptorPerformanceMonitoringHistoryDataXdsl (class ID 116 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 NewTcAdaptorPerformanceMonitoringHistoryDataXdsl(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(tcadaptorperformancemonitoringhistorydataxdslBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/tcpudpconfigdata.go b/vendor/github.com/cboling/omci/generated/tcpudpconfigdata.go
new file mode 100644
index 0000000..76c26af
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/tcpudpconfigdata.go
@@ -0,0 +1,96 @@
+/*
+ * 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 TcpUdpConfigDataClassId ClassID = ClassID(136)
+
+var tcpudpconfigdataBME *ManagedEntityDefinition
+
+// TcpUdpConfigData (class ID #136)
+//	The TCP/UDP config data ME configures services based on the transmission control protocol (TCP)
+//	and user datagram protocol (UDP) that are offered from an IP host. If a non-OMCI interface is
+//	used to manage an IP service, this ME is unnecessary; the non-OMCI interface supplies the
+//	necessary data.
+//
+//	An instance of this ME is created and deleted on request of the OLT.
+//
+//	Relationships
+//		One or more instances of this ME may be associated with an instance of an IP host config data or
+//		IPv6 host config data ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. It is
+//			recommended that the ME ID be the same as the port number. (R, setbycreate) (mandatory)
+//			(2 bytes)
+//
+//		Port Id
+//			Port ID:	This attribute specifies the port number that offers the TCP/UDP service. (R, W,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Protocol
+//			Protocol:	This attribute specifies the protocol type as defined by [b-IANA] (protocol numbers),
+//			for example UDP (0x11). (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Tos_Diffserv Field
+//			TOS/diffserv field: This attribute specifies the value of the TOS/diffserv field of the IPv4
+//			header. The contents of this attribute may contain the type of service per [IETF RFC 2474] or a
+//			DSCP. Valid values for DSCP are as defined by [b-IANA] (differentiated services field code
+//			points). (R, W, set-by-create) (mandatory) (1 byte)
+//
+//		Ip Host Pointer
+//			IP host pointer: This attribute points to the IP host config data or IPv6 host config data ME
+//			associated with this TCP/UDP data. Any number of ports and protocols may be associated with an
+//			IP host. (R, W, set-by-create) (mandatory) (2 bytes)
+//
+type TcpUdpConfigData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	tcpudpconfigdataBME = &ManagedEntityDefinition{
+		Name:    "TcpUdpConfigData",
+		ClassID: 136,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("PortId", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: ByteField("Protocol", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: ByteField("TosDiffservField", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: Uint16Field("IpHostPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+		},
+	}
+}
+
+// NewTcpUdpConfigData (class ID 136 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 NewTcpUdpConfigData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(tcpudpconfigdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/tcpudpperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/tcpudpperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..890b090
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/tcpudpperformancemonitoringhistorydata.go
@@ -0,0 +1,106 @@
+/*
+ * 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 TcpUdpPerformanceMonitoringHistoryDataClassId ClassID = ClassID(342)
+
+var tcpudpperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// TcpUdpPerformanceMonitoringHistoryData (class ID #342)
+//	This ME collects PM data related to a TCP or UDP port. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the TCP/UDP config data ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 TCP/UDP config data ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Socket Failed
+//			Socket failed:	This attribute is incremented when an attempt to create a socket associated with
+//			a port fails. (R) (mandatory) (2 bytes)
+//
+//		Listen Failed
+//			Listen failed:	This attribute is incremented when an attempt by a service to listen for a
+//			request on a port fails. (R) (mandatory) (2 bytes)
+//
+//		Bind Failed
+//			Bind failed:	This attribute is incremented when an attempt by a service to bind to a port fails.
+//			(R) (mandatory) (2 bytes)
+//
+//		Accept Failed
+//			Accept failed: This attribute is incremented when an attempt to accept a connection on a port
+//			fails. (R) (mandatory) (2 bytes)
+//
+//		Select Failed
+//			Select failed:	This attribute is incremented when an attempt to perform a select on a group of
+//			ports fails. (R) (mandatory) (2 bytes)
+//
+type TcpUdpPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	tcpudpperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "TcpUdpPerformanceMonitoringHistoryData",
+		ClassID: 342,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFE00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint16Field("SocketFailed", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint16Field("ListenFailed", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint16Field("BindFailed", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint16Field("AcceptFailed", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint16Field("SelectFailed", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+		},
+	}
+}
+
+// NewTcpUdpPerformanceMonitoringHistoryData (class ID 342 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 NewTcpUdpPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(tcpudpperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/thresholddata1.go b/vendor/github.com/cboling/omci/generated/thresholddata1.go
new file mode 100644
index 0000000..a83e671
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/thresholddata1.go
@@ -0,0 +1,101 @@
+/*
+ * 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 ThresholdData1ClassId ClassID = ClassID(273)
+
+var thresholddata1BME *ManagedEntityDefinition
+
+// ThresholdData1 (class ID #273)
+//	Threshold data are partitioned into two MEs for historical reasons. An instance of this ME,
+//	together with an optional instance of the threshold data 2 ME, contains threshold values for
+//	counters in PM history data MEs.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Instances of this ME are created and deleted by the OLT.
+//
+//	Relationships
+//		An instance of this ME may be related to multiple instances of PM history data type MEs.////		Paired instances of threshold data 1 ME and threshold data 2 ME are implicitly linked together
+//		through a common ME ID.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Threshold Value_1
+//			Threshold value 1: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Threshold Value_2
+//			Threshold value 2: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Threshold Value_3
+//			Threshold value 3: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Threshold Value_4
+//			Threshold value 4: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Threshold Value_5
+//			Threshold value 5: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Threshold Value_6
+//			Threshold value 6: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Threshold Value_7
+//			Threshold value 7: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+type ThresholdData1 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	thresholddata1BME = &ManagedEntityDefinition{
+		Name:    "ThresholdData1",
+		ClassID: 273,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFE00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint32Field("ThresholdValue1", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: Uint32Field("ThresholdValue2", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("ThresholdValue3", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: Uint32Field("ThresholdValue4", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5: Uint32Field("ThresholdValue5", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6: Uint32Field("ThresholdValue6", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7: Uint32Field("ThresholdValue7", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+		},
+	}
+}
+
+// NewThresholdData1 (class ID 273 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 NewThresholdData1(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(thresholddata1BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/thresholddata2.go b/vendor/github.com/cboling/omci/generated/thresholddata2.go
new file mode 100644
index 0000000..2b7b0a3
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/thresholddata2.go
@@ -0,0 +1,99 @@
+/*
+ * 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 ThresholdData2ClassId ClassID = ClassID(274)
+
+var thresholddata2BME *ManagedEntityDefinition
+
+// ThresholdData2 (class ID #274)
+//	Together with an instance of the threshold data 1 ME, an instance of this ME contains threshold
+//	values for counters maintained in one or more instances of PM history data MEs.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Instances of this ME are created and deleted by the OLT.
+//
+//	Relationships
+//		Refer to the relationships of the threshold data 1 ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. Its value is the
+//			same as that of the paired threshold data 1 instance. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Threshold Value_8
+//			Threshold value 8: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Threshold Value_9
+//			Threshold value 9: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Threshold Value_10
+//			Threshold value 10: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Threshold Value_11
+//			Threshold value 11: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Threshold Value_12
+//			Threshold value 12: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Threshold Value_13
+//			Threshold value 13: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Threshold Value_14
+//			Threshold value 14: (R, W, setbycreate) (mandatory) (4 bytes)
+//
+type ThresholdData2 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	thresholddata2BME = &ManagedEntityDefinition{
+		Name:    "ThresholdData2",
+		ClassID: 274,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFE00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint32Field("ThresholdValue8", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: Uint32Field("ThresholdValue9", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("ThresholdValue10", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: Uint32Field("ThresholdValue11", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5: Uint32Field("ThresholdValue12", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6: Uint32Field("ThresholdValue13", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7: Uint32Field("ThresholdValue14", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+		},
+	}
+}
+
+// NewThresholdData2 (class ID 274 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 NewThresholdData2(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(thresholddata2BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/trafficdescriptor.go b/vendor/github.com/cboling/omci/generated/trafficdescriptor.go
new file mode 100644
index 0000000..80598bb
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/trafficdescriptor.go
@@ -0,0 +1,124 @@
+/*
+ * 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 TrafficDescriptorClassId ClassID = ClassID(280)
+
+var trafficdescriptorBME *ManagedEntityDefinition
+
+// TrafficDescriptor (class ID #280)
+//	The traffic descriptor is a profile that allows for traffic management. A priority controlled
+//	ONU can point from a MAC bridge port configuration data ME to a traffic descriptor in order to
+//	implement traffic management (marking, policing). A rate controlled ONU can point to a traffic
+//	descriptor from either a MAC bridge port configuration data ME or a GEM port network CTP to
+//	implement traffic management (marking, shaping).
+//
+//	Packets are determined to be green, yellow or red as a function of the ingress packet rate and
+//	the settings in this ME. The colour indicates drop precedence (eligibility), subsequently used
+//	by the priority queue ME to drop packets conditionally during congestion conditions. Packet
+//	colour is also used by the optional mode 1 DBA status reporting function described in [ITUT
+//	G.984.3]. Red packets are dropped immediately. Yellow packets are marked as drop eligible, and
+//	green packets are marked as not drop eligible, according to the egress colour marking attribute.
+//
+//	The algorithm used to determine the colour marking is specified by the meter type attribute. If
+//	[bIETF RFC 4115] is used, then:
+//
+//	CIR4115 = CIR
+//
+//	EIR4115 = PIR – CIR (EIR: excess information rate)
+//
+//	CBS4115 = CBS
+//
+//	EBS4115 = PBS – CBS.
+//
+//	Relationships
+//		This ME is associated with a GEM port network CTP or a MAC bridge port configuration data ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Cir
+//			CIR:	This attribute specifies the committed information rate, in bytes per second. The default
+//			is 0. (R, W, setbycreate) (optional) (4 bytes)
+//
+//		Pir
+//			PIR:	This attribute specifies the peak information rate, in bytes per second. The default value
+//			0 accepts the ONU's factory policy. (R, W, setbycreate) (optional) (4 bytes)
+//
+//		Cbs
+//			CBS:	This attribute specifies the committed burst size, in bytes. The default is 0. (R, W,
+//			setbycreate) (optional) (4 bytes)
+//
+//		Pbs
+//			PBS:	This attribute specifies the peak burst size, in bytes. The default value 0 accepts the
+//			ONU's factory policy. (R, W, setbycreate) (optional) (4 bytes)
+//
+//		Colour Mode
+//			(R, W, setbycreate) (optional) (1 byte)
+//
+//		Ingress Colour Marking
+//			(R, W, setbycreate) (optional) (1 byte)
+//
+//		Egress Colour Marking
+//			(R, W, setbycreate) (optional) (1 byte)
+//
+//		Meter Type
+//			(R, setbycreate) (optional) (1 byte)
+//
+type TrafficDescriptor struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	trafficdescriptorBME = &ManagedEntityDefinition{
+		Name:    "TrafficDescriptor",
+		ClassID: 280,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint32Field("Cir", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 1),
+			2: Uint32Field("Pir", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 2),
+			3: Uint32Field("Cbs", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 3),
+			4: Uint32Field("Pbs", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 4),
+			5: ByteField("ColourMode", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 5),
+			6: ByteField("IngressColourMarking", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 6),
+			7: ByteField("EgressColourMarking", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 7),
+			8: ByteField("MeterType", 0, mapset.NewSetWith(Read, SetByCreate), false, false, true, false, 8),
+		},
+	}
+}
+
+// NewTrafficDescriptor (class ID 280 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 NewTrafficDescriptor(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(trafficdescriptorBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/trafficscheduler.go b/vendor/github.com/cboling/omci/generated/trafficscheduler.go
new file mode 100644
index 0000000..69a6cb3
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/trafficscheduler.go
@@ -0,0 +1,103 @@
+/*
+ * 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 TrafficSchedulerClassId ClassID = ClassID(278)
+
+var trafficschedulerBME *ManagedEntityDefinition
+
+// TrafficScheduler (class ID #278)
+//	NOTE 1 – In [ITU-T G.984.4], this ME is called a traffic scheduler-G.
+//
+//	An instance of this ME represents a logical object that can control upstream GEM packets. A
+//	traffic scheduler can accommodate GEM packets after a priority queue or other traffic scheduler
+//	and transfer them towards the next traffic scheduler or T-CONT. Because T-CONTs and traffic
+//	schedulers are created autonomously by the ONU, the ONU vendor predetermines the most complex
+//	traffic handling model it is prepared to support; the OLT may use less than the ONU's full
+//	capabilities, but cannot ask for more. See Appendix II for more details.
+//
+//	After the ONU creates instances of the T-CONT ME, it then autonomously creates instances of the
+//	traffic scheduler ME.
+//
+//	Relationships
+//		The traffic scheduler ME may be related to a T-CONT or other traffic schedulers through pointer
+//		attributes.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. This 2 byte
+//			number indicates the physical capability that realizes the traffic scheduler. The first byte is
+//			the slot ID of the circuit pack with which this traffic scheduler is associated. For a traffic
+//			scheduler that is not associated with a circuit pack, the first byte is 0xFF. The second byte is
+//			the traffic scheduler id, assigned by the ONU itself. Traffic schedulers are numbered in
+//			ascending order with the range 0..0xFF in each circuit pack or in the ONU core. (R) (mandatory)
+//			(2 bytes)
+//
+//		T_Cont Pointer
+//			NOTE 2 – This attribute is read-only unless otherwise specified by the QoS configuration
+//			flexibility attribute of the ONU2-G ME. If flexible configuration is not supported, the ONU
+//			should reject an attempt to set the TCONT pointer attribute with a parameter error result-reason
+//			code.
+//
+//		Traffic Scheduler Pointer
+//			Traffic scheduler pointer: This attribute points to another traffic scheduler ME instance that
+//			may serve this traffic scheduler. This pointer is used when this traffic scheduler is connected
+//			to another traffic scheduler; it is null (0) otherwise. (R) (mandatory) (2 bytes)
+//
+//		Policy
+//			NOTE 3 – This attribute is read-only unless otherwise specified by the QoS configuration
+//			flexibility attribute of the ONU2-G ME. If flexible configuration is not supported, the ONU
+//			should reject an attempt to set the policy attribute with a parameter error result-reason code.
+//
+//		Priority_Weight
+//			Upon ME instantiation, the ONU sets this attribute to 0. (R, W) (mandatory) (1 byte)
+//
+type TrafficScheduler struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	trafficschedulerBME = &ManagedEntityDefinition{
+		Name:    "TrafficScheduler",
+		ClassID: 278,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: Uint16Field("TContPointer", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2: Uint16Field("TrafficSchedulerPointer", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3: ByteField("Policy", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4: ByteField("PriorityWeight", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+		},
+	}
+}
+
+// NewTrafficScheduler (class ID 278 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 NewTrafficScheduler(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(trafficschedulerBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/twdmchannelmanagedentity.go b/vendor/github.com/cboling/omci/generated/twdmchannelmanagedentity.go
new file mode 100644
index 0000000..f8c2064
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/twdmchannelmanagedentity.go
@@ -0,0 +1,94 @@
+/*
+ * 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 TwdmChannelManagedEntityClassId ClassID = ClassID(443)
+
+var twdmchannelmanagedentityBME *ManagedEntityDefinition
+
+// TwdmChannelManagedEntity (class ID #443)
+//	This ME provides an anchor for the MEs involved in collection of PM statistics per TWDM channel,
+//	as stipulated by clause 14 of [ITU-T G.989.3]. Instances of this ME are instantiated
+//	autonomously by the ONU.
+//
+//	Relationships
+//		One or more instances of this ME are implicitly associated with the TWDM System profile ME. The
+//		number of instances created is announced by the total TWDM channel number attribute of the TWDM
+//		system profile ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. This 2 byte
+//			number is represented as 0xSSBB, where SS indicates the ONU slot ID, and BB is the TWDM channel
+//			ME number assigned by the ONU itself, starting from 0 in the ascending order. (R) (mandatory)
+//			(2 bytes)
+//
+//		Active Channel Indication
+//			Active channel indication: The default value is false. The ONU sets the attribute to true when
+//			it receives the Channel_Profile PLOAM messages for that channel. The ONU clears the attribute
+//			when it receives the Channel_Profile PLOAM message marked “void” for that channel. (R)
+//			(mandatory) (1 byte)
+//
+//		Operational Channel Indication
+//			Operational channel indication: A Boolean attribute that is set to true for an active TWDM
+//			channel in which the ONT is currently operating. The operational statistic is accumulated in the
+//			PM history data MEs associated with that TWDM channel. (R) (mandatory) (1 byte)
+//
+//		Downstream Wavelength Channel
+//			Downstream wavelength channel: For an active TWDM channel, this attribute identifies the
+//			downstream wavelength channel in reference to Table 11-2 of [ITU-T G.989.2]. For an inactive
+//			channel it has value 0xFF. (R) (mandatory) (1 byte)
+//
+//		Upstream Wavelength Channel
+//			Upstream wavelength channel: For an active TWDM channel, this attribute identifies the upstream
+//			wavelength channel in reference to Table VIII-5 of [ITU-T G.989.2]. For an inactive channel its
+//			value of 0xFF. (R) (mandatory) (1 byte)
+//
+type TwdmChannelManagedEntity struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	twdmchannelmanagedentityBME = &ManagedEntityDefinition{
+		Name:    "TwdmChannelManagedEntity",
+		ClassID: 443,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+		),
+		AllowedAttributeMask: 0XF000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: ByteField("ActiveChannelIndication", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: ByteField("OperationalChannelIndication", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3: ByteField("DownstreamWavelengthChannel", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: ByteField("UpstreamWavelengthChannel", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+		},
+	}
+}
+
+// NewTwdmChannelManagedEntity (class ID 443 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 NewTwdmChannelManagedEntity(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(twdmchannelmanagedentityBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/twdmchannelomciperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/twdmchannelomciperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..2be87e4
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/twdmchannelomciperformancemonitoringhistorydata.go
@@ -0,0 +1,99 @@
+/*
+ * 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 TwdmChannelOmciPerformanceMonitoringHistoryDataClassId ClassID = ClassID(452)
+
+var twdmchannelomciperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// TwdmChannelOmciPerformanceMonitoringHistoryData (class ID #452)
+//	This ME collects OMCI-related PM data associated with the slot/circuit pack, hosting one or more
+//	ANI-G MEs, for a specific TWDM channel. Instances of this ME are created and deleted by the OLT.
+//
+//	The counters maintained by this ME are characterized as optional in Clause 14 of
+//	[ITU-T G.989.3].
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of TWDM channel ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 TWDM channel ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contains PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Omci Baseline Message Count
+//			OMCI baseline message count: The counter of baseline format OMCI messages directed to the given
+//			ONU. (R) (mandatory) (4 byte)
+//
+//		Omci Extended Message Count
+//			OMCI extended message count: The counter of extended format OMCI messages directed to the given
+//			ONU. (R) (mandatory) (4 byte)
+//
+//		Omci Mic Error Count
+//			OMCI MIC error count: The counter of OMCI messages received with MIC errors. (R) (mandatory)
+//			(4 byte)
+//
+type TwdmChannelOmciPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	twdmchannelomciperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "TwdmChannelOmciPerformanceMonitoringHistoryData",
+		ClassID: 452,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetCurrentData,
+			Set,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("OmciBaselineMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("OmciExtendedMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("OmciMicErrorCount", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+		},
+	}
+}
+
+// NewTwdmChannelOmciPerformanceMonitoringHistoryData (class ID 452 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 NewTwdmChannelOmciPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(twdmchannelomciperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/twdmchannelphylodsperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/twdmchannelphylodsperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..a4f0e84
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/twdmchannelphylodsperformancemonitoringhistorydata.go
@@ -0,0 +1,160 @@
+/*
+ * 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 TwdmChannelPhyLodsPerformanceMonitoringHistoryDataClassId ClassID = ClassID(444)
+
+var twdmchannelphylodsperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// TwdmChannelPhyLodsPerformanceMonitoringHistoryData (class ID #444)
+//	This ME collects certain PM data associated with the slot/circuit pack, hosting one or more
+//	ANI-G MEs, and a specific TWDM channel. Instances of this ME are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of TWDM channel ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 TWDM channel ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contains PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Total Received Words Protected By Bit_Interleaved Parity _32 Bip_32
+//			Total received words protected by bit-interleaved parity-32 (BIP-32): The count of 4 byte words
+//			included in BIP-32 check. This is a product of the number of downstream FS frames received by
+//			the size of the downstream FS frame after the FEC parity byte, if any, have been removed. The
+//			count applies to the entire downstream data flow, whether or not addressed to that ONT. (R)
+//			(mandatory) (8 bytes)
+//
+//		Bip_32 Bit Error Count
+//			BIP-32 bit error count: Count of the bit errors in the received downstream FS frames as measured
+//			using BIP-32. If FEC is supported in the downstream direction, the BIP-32 count applies to the
+//			downstream FS frame after the FEC correction has been applied and the FEC parity bytes have been
+//			removed. (R) (mandatory) (4 bytes)
+//
+//		Corrected Psbd Hec Error Count
+//			Corrected PSBd HEC error count: The count of the errors in either CFC or OCS fields of the PSBd
+//			block that have been corrected using the HEC technique. (R) (mandatory) (4 bytes)
+//
+//		Uncorrectable Psbd Hec Error Count
+//			Uncorrectable PSBd HEC error count: The count of the errors in either CFC or OCS fields of the
+//			PSBd block that could not be corrected using the HEC technique. (R) (mandatory) (4 bytes)
+//
+//		Corrected Downstream Fs Header Hec Error Count
+//			Corrected downstream FS header HEC error count: The count of the errors in the downstream FS
+//			header that have been corrected using the HEC technique. (R) (mandatory) (4 bytes)
+//
+//		Uncorrectable Downstream Fs Header Hec Error Count
+//			Uncorrectable downstream FS header HEC error count: The count of the errors in the downstream FS
+//			header that could not be corrected using the HEC technique. (R) (mandatory) (4 bytes)
+//
+//		Total Number Of Lods Events
+//			Total number of LODS events: The count of the state transitions from O5.1/O5.2 to O6, referring
+//			to the ONU activation cycle state machine, clause 12 of [ITU-T G.989.3]. (R) (mandatory)
+//			(4 bytes)
+//
+//		Lods Events Restored In Operating Twdm Channel
+//			LODS events restored in operating TWDM channel: The count of LODS events cleared automatically
+//			without retuning. (R) (mandatory) (4 bytes)
+//
+//		Lods Events Restored In Protection Twdm Channel
+//			LODS events restored in protection TWDM channel: The count of LODS events resolved by retuning
+//			to a pre-configured protection TWDM channel. The event is counted against the original operating
+//			channel. (R) (mandatory) (4 bytes)
+//
+//		Lods Events Restored In Discretionary Twdm Channel
+//			LODS events restored in discretionary TWDM channel: The count of LODS events resolved by
+//			retuning to a TWDM channel chosen by the ONU, without retuning. Implies that the wavelength
+//			channel protection for the operating channel is not active. The event is counted against the
+//			original operating channel (R) (mandatory) (4 bytes)
+//
+//		Lods Events Resulting In Reactivation
+//			LODS events resulting in reactivation: The count of LODS events resolved through ONU
+//			reactivation; that is, either TO2 (without WLCP) or TO3 + TO4 (with WLCP) expires before the
+//			downstream channel is reacquired, referring to the ONU activation cycle state machine, clause 12
+//			of [ITU-T G.989.3]. The event is counted against the original operating channel (R) (mandatory)
+//			(4 bytes)
+//
+//		Lods Events Resulting In Reactivation After Retuning To Protection Twdm Channel
+//			LODS events resulting in reactivation after retuning to protection TWDM channel: The count of
+//			LODS events resolved through ONU reactivation after attempted protection switching, which turns
+//			unsuccessful due to a handshake failure. (R) (mandatory) (4 bytes)
+//
+//		Lods Events Resulting In Reactivation After Retuning To Discretionary Twdm Channel
+//			LODS events resulting in reactivation after retuning to discretionary TWDM channel: The count of
+//			LODS events resolved through ONU reactivation after attempted retuning to a discretionary
+//			channel, which turns unsuccessful due to a handshake failure. (R) (mandatory) (4 bytes)
+//
+type TwdmChannelPhyLodsPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	twdmchannelphylodsperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "TwdmChannelPhyLodsPerformanceMonitoringHistoryData",
+		ClassID: 444,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetCurrentData,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFE,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint64Field("TotalReceivedWordsProtectedByBitInterleavedParity32Bip32", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("Bip32BitErrorCount", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("CorrectedPsbdHecErrorCount", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("UncorrectablePsbdHecErrorCount", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("CorrectedDownstreamFsHeaderHecErrorCount", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("UncorrectableDownstreamFsHeaderHecErrorCount", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("TotalNumberOfLodsEvents", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("LodsEventsRestoredInOperatingTwdmChannel", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("LodsEventsRestoredInProtectionTwdmChannel", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("LodsEventsRestoredInDiscretionaryTwdmChannel", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint32Field("LodsEventsResultingInReactivation", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint32Field("LodsEventsResultingInReactivationAfterRetuningToProtectionTwdmChannel", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: Uint32Field("LodsEventsResultingInReactivationAfterRetuningToDiscretionaryTwdmChannel", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+		},
+	}
+}
+
+// NewTwdmChannelPhyLodsPerformanceMonitoringHistoryData (class ID 444 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 NewTwdmChannelPhyLodsPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(twdmchannelphylodsperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/twdmchannelploamperformancemonitoringhistorydatapart1.go b/vendor/github.com/cboling/omci/generated/twdmchannelploamperformancemonitoringhistorydatapart1.go
new file mode 100644
index 0000000..17acd46
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/twdmchannelploamperformancemonitoringhistorydatapart1.go
@@ -0,0 +1,124 @@
+/*
+ * 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 TwdmChannelPloamPerformanceMonitoringHistoryDataPart1ClassId ClassID = ClassID(446)
+
+var twdmchannelploamperformancemonitoringhistorydatapart1BME *ManagedEntityDefinition
+
+// TwdmChannelPloamPerformanceMonitoringHistoryDataPart1 (class ID #446)
+//	This ME collects certain PLOAM-related PM data associated with the slot/circuit pack, hosting
+//	one or more ANI-G MEs, for a specific TWDM channel. Instances of this ME are created and deleted
+//	by the OLT.
+//
+//	The downstream PLOAM message counts of this ME include only the received PLOAM messages
+//	pertaining to the given ONU, i.e.:
+//
+//	–	unicast PLOAM messages, addressed by ONU-ID;
+//
+//	–	broadcast PLOAM messages, addressed by serial number;
+//
+//	–	broadcast PLOAM messages, addressed to all ONUs on the PON.
+//
+//	This ME includes all PLOAM PM counters characterized as mandatory in clause 14 of
+//	[ITU-T G.989.3].
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of TWDM channel ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 TWDM channel ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contains PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Ploam Mic Errors
+//			PLOAM MIC errors: The counter of received PLOAM messages that remain unparsable due to MIC
+//			error. (R) (mandatory) (4 byte)
+//
+//		Downstream Ploam Message Count
+//			Downstream PLOAM message count: The counter of received broadcast and unicast PLOAM messages
+//			pertaining to the given ONU. (R) (mandatory) (4 byte)
+//
+//		Ranging_Time Message Count
+//			Ranging_Time message count: The counter of received Ranging_Time PLOAM messages. (R) (mandatory)
+//			(4 byte)
+//
+//		Protection_Control Message Count
+//			Protection_Control message count: The counter of received Protection_Control PLOAM messages. (R)
+//			(mandatory) (4 byte)
+//
+//		Adjust_Tx_Wavelength Message Count
+//			Adjust_Tx_Wavelength message count: The counter of received Adjust_Tx_Wavelength PLOAM messages.
+//			(R) (mandatory) (4 byte)
+//
+//		Adjust_Tx_Wavelength Adjustment Amplitude
+//			Adjust_Tx_Wavelength adjustment amplitude: An estimator of the absolute value of the
+//			transmission wavelength adjustment. (R) (mandatory) (4 byte)
+//
+type TwdmChannelPloamPerformanceMonitoringHistoryDataPart1 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	twdmchannelploamperformancemonitoringhistorydatapart1BME = &ManagedEntityDefinition{
+		Name:    "TwdmChannelPloamPerformanceMonitoringHistoryDataPart1",
+		ClassID: 446,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetCurrentData,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("PloamMicErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("DownstreamPloamMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("RangingTimeMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint32Field("ProtectionControlMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint32Field("AdjustTxWavelengthMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8: Uint32Field("AdjustTxWavelengthAdjustmentAmplitude", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+		},
+	}
+}
+
+// NewTwdmChannelPloamPerformanceMonitoringHistoryDataPart1 (class ID 446 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 NewTwdmChannelPloamPerformanceMonitoringHistoryDataPart1(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(twdmchannelploamperformancemonitoringhistorydatapart1BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/twdmchannelploamperformancemonitoringhistorydatapart2.go b/vendor/github.com/cboling/omci/generated/twdmchannelploamperformancemonitoringhistorydatapart2.go
new file mode 100644
index 0000000..da563d9
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/twdmchannelploamperformancemonitoringhistorydatapart2.go
@@ -0,0 +1,164 @@
+/*
+ * 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 TwdmChannelPloamPerformanceMonitoringHistoryDataPart2ClassId ClassID = ClassID(447)
+
+var twdmchannelploamperformancemonitoringhistorydatapart2BME *ManagedEntityDefinition
+
+// TwdmChannelPloamPerformanceMonitoringHistoryDataPart2 (class ID #447)
+//	This ME collects additional PLOAM-related PM data associated with the slot/circuit pack, hosting
+//	one or more ANI-G MEs, for a specific TWDM channel. Instances of this ME are created and deleted
+//	by the OLT.
+//
+//	The downstream PLOAM message counts of this ME include only the received PLOAM messages
+//	pertaining to the given ONU, i.e.:
+//
+//	–	unicast PLOAM messages, addressed by ONU-ID;
+//
+//	–	broadcast PLOAM messages, addressed by serial number;
+//
+//	–	broadcast PLOAM messages, addressed to all ONUs on the PON.
+//
+//	All these counters are characterized as optional in clause 14 of [ITU-T  G.989.3].
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of TWDM channel ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 TWDM channel ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contains PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		System_Profile Message Count
+//			System_Profile message count: The counter of received System_Profile PLOAM messages. (R)
+//			(mandatory) (4 byte)
+//
+//		Channel_Profile Message Count
+//			Channel_Profile message count: The counter of received Channel_Profile PLOAM messages. (R)
+//			(mandatory) (4 byte)
+//
+//		Burst_Profile Message Count
+//			Burst_Profile message count: The counter of received Burst_Profile PLOAM messages. (R)
+//			(mandatory) (4 byte)
+//
+//		Assign_Onu_Id Message Count
+//			Assign_ONU-ID message count: The counter of received Assign_ONU-ID PLOAM messages. (R)
+//			(mandatory) (4 byte)
+//
+//		Unsatisfied Adjust_Tx_Wavelength Requests
+//			Unsatisfied Adjust_Tx_Wavelength requests: The counter of Adjust_Tx_Wavelength requests not
+//			applied or partially applied due to target US wavelength being out of Tx tuning range.  (R)
+//			(mandatory) (4 byte)
+//
+//		Deactivate_Onu_Id Message Count
+//			Deactivate_ONU-ID message count: The counter of received Deactivate_ONU-ID PLOAM messages. (R)
+//			(mandatory) (4 byte)
+//
+//		Disable_Serial_Number Message Count
+//			Disable_Serial_Number message count: The counter of received Disable_Serial_Number PLOAM
+//			messages. (R) (mandatory) (4 byte)
+//
+//		Request_Registration Message Count
+//			Request_Registration message count: The counter of received Request_Registration PLOAM messages.
+//			(R) (mandatory) (4 byte)
+//
+//		Assign_Alloc_Id Message Count
+//			Assign_Alloc-ID message count: The counter of received Assign_Alloc-ID PLOAM messages. (R)
+//			(mandatory) (4 byte)
+//
+//		Key_Control Message Count
+//			Key_Control message count: The counter of received Key_Control PLOAM messages. (R) (mandatory)
+//			(4 byte)
+//
+//		Sleep_Allow Message Count
+//			Sleep_Allow message count: The counter of received Sleep_Allow PLOAM messages. (R) (mandatory)
+//			(4 byte)
+//
+//		Tuning_Control_Request Message Count
+//			Tuning_Control/Request message count: The counter of received Tuning_Control PLOAM messages with
+//			Request operation code. (R) (mandatory) (4 byte)
+//
+//		Tuning_Control_Complete_D Message Count
+//			Tuning_Control/Complete_d message count: The counter of received Tuning_Control PLOAM messages
+//			with Complete_d operation code. (R) (mandatory) (4 byte)
+//
+//		Calibration_Request Message Count
+//			Calibration_Request message count: The counter of received Calibration_Request PLOAM messages.
+//			(R) (mandatory) (4 byte)
+//
+type TwdmChannelPloamPerformanceMonitoringHistoryDataPart2 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	twdmchannelploamperformancemonitoringhistorydatapart2BME = &ManagedEntityDefinition{
+		Name:    "TwdmChannelPloamPerformanceMonitoringHistoryDataPart2",
+		ClassID: 447,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetCurrentData,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("SystemProfileMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("ChannelProfileMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("BurstProfileMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("AssignOnuIdMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("UnsatisfiedAdjustTxWavelengthRequests", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("DeactivateOnuIdMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("DisableSerialNumberMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("RequestRegistrationMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("AssignAllocIdMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("KeyControlMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint32Field("SleepAllowMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint32Field("TuningControlRequestMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: Uint32Field("TuningControlCompleteDMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+			16: Uint32Field("CalibrationRequestMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 16),
+		},
+	}
+}
+
+// NewTwdmChannelPloamPerformanceMonitoringHistoryDataPart2 (class ID 447 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 NewTwdmChannelPloamPerformanceMonitoringHistoryDataPart2(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(twdmchannelploamperformancemonitoringhistorydatapart2BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/twdmchannelploamperformancemonitoringhistorydatapart3.go b/vendor/github.com/cboling/omci/generated/twdmchannelploamperformancemonitoringhistorydatapart3.go
new file mode 100644
index 0000000..aa5ef38
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/twdmchannelploamperformancemonitoringhistorydatapart3.go
@@ -0,0 +1,141 @@
+/*
+ * 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 TwdmChannelPloamPerformanceMonitoringHistoryDataPart3ClassId ClassID = ClassID(448)
+
+var twdmchannelploamperformancemonitoringhistorydatapart3BME *ManagedEntityDefinition
+
+// TwdmChannelPloamPerformanceMonitoringHistoryDataPart3 (class ID #448)
+//	This ME collects remaining PLOAM-related PM data associated with the slot/circuit pack, hosting
+//	one or more ANI-G MEs, for a specific TWDM channel. Instances of this ME are created and deleted
+//	by the OLT.
+//
+//	This ME contains the counters related to transmitted upstream PLOAM messages. All these counters
+//	are characterized as optional in clause 14 of [ITU-T  G.989.3].
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of TWDM channel ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 TWDM channel ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contains PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Upstream Ploam Message Count
+//			Upstream PLOAM message count: The aggregate counter of PLOAM messages, other than AK PLOAM MT,
+//			transmitted by the given ONU. (R) (mandatory) (4 byte)
+//
+//		Serial_Number_Onu In_Band Message Count
+//			Serial_Number_ONU (in-band) message count: The counter of transmitted in-band Serial_Number_ONU
+//			PLOAM messages. (R) (mandatory) (4 byte)
+//
+//		Serial_Number_Onu Amcc Message Count
+//			Serial_Number_ONU (AMCC) message count: The counter of transmitted auxiliary management and
+//			control channel (AMCC) Serial_Number_ONU PLOAM messages. (R) (mandatory) (4 byte)
+//
+//		Registration Message Count
+//			Registration message count: The counter of transmitted Registration PLOAM messages. (R)
+//			(mandatory) (4 byte)
+//
+//		Key_Report Message Count
+//			Key_Report message count: The counter of transmitted Key_Report PLOAM messages. (R) (mandatory)
+//			(4 byte)
+//
+//		Acknowledgement Message Count
+//			Acknowledgement message count: The counter of transmitted Registration PLOAM messages. (R)
+//			(mandatory) (4 byte)
+//
+//		Sleep_Request Message Count
+//			Sleep_Request message count: The counter of transmitted Sleep_Request PLOAM messages. (R)
+//			(mandatory) (4 byte)
+//
+//		Tuning_Response Ack_Nack Message Count
+//			Tuning_Response (ACK/NACK) message count: The counter of transmitted Tuning_Response PLOAM
+//			messages with ACK/NACK operation code. (R) (mandatory) (4 byte)
+//
+//		Tuning_Response Complete_U_Rollback Message Count
+//			Tuning_Response (Complete_u/Rollback) message count: The counter of transmitted Tuning_Response
+//			PLOAM messages with Complete_u/Rollback operation code. (R) (mandatory) (4 byte)
+//
+//		Power_Consumption_Report Message Count
+//			Power_Consumption_Report message count: The counter of transmitted Power_Consumption_Report
+//			PLOAM messages. (R) (mandatory) (4 byte)
+//
+//		Change_Power_Level Parameter Error Count
+//			Change_Power_Level parameter error count: The counter of transmitted Acknowledgement PLOAM
+//			messages with Parameter Error completion code in response to Change_Power_Level PLOAM message.
+//			(R) (mandatory) (4 byte)
+//
+type TwdmChannelPloamPerformanceMonitoringHistoryDataPart3 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	twdmchannelploamperformancemonitoringhistorydatapart3BME = &ManagedEntityDefinition{
+		Name:    "TwdmChannelPloamPerformanceMonitoringHistoryDataPart3",
+		ClassID: 448,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetCurrentData,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFF8,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("UpstreamPloamMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("SerialNumberOnuInBandMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("SerialNumberOnuAmccMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("RegistrationMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("KeyReportMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("AcknowledgementMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("SleepRequestMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("TuningResponseAckNackMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("TuningResponseCompleteURollbackMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("PowerConsumptionReportMessageCount", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint32Field("ChangePowerLevelParameterErrorCount", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+		},
+	}
+}
+
+// NewTwdmChannelPloamPerformanceMonitoringHistoryDataPart3 (class ID 448 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 NewTwdmChannelPloamPerformanceMonitoringHistoryDataPart3(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(twdmchannelploamperformancemonitoringhistorydatapart3BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/twdmchanneltuningperformancemonitoringhistorydatapart1.go b/vendor/github.com/cboling/omci/generated/twdmchanneltuningperformancemonitoringhistorydatapart1.go
new file mode 100644
index 0000000..8e44310
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/twdmchanneltuningperformancemonitoringhistorydatapart1.go
@@ -0,0 +1,166 @@
+/*
+ * 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 TwdmChannelTuningPerformanceMonitoringHistoryDataPart1ClassId ClassID = ClassID(449)
+
+var twdmchanneltuningperformancemonitoringhistorydatapart1BME *ManagedEntityDefinition
+
+// TwdmChannelTuningPerformanceMonitoringHistoryDataPart1 (class ID #449)
+//	This ME collects certain tuning-control-related PM data associated with the slot/circuit pack,
+//	hosting one or more ANI-G MEs, for a specific TWDM channel. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	The relevant events this ME is concerned with are counted towards the PM statistics associated
+//	with the source TWDM channel. The attribute descriptions refer to the ONU activation cycle
+//	states and timers specified in clause 12 of [ITU-T  G.989.3]. This ME contains the counters
+//	characterized as mandatory in clause 14 of [ITU-T  G.989.3].
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of TWDM channel ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 TWDM channel ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contains PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Tuning Control Requests For Rx Only Or Rx And Tx
+//			Tuning control requests for Rx only or Rx and Tx: The counter of received Tuning_Control PLOAM
+//			messages with Request operation code that contain tuning instructions either for receiver only
+//			or for both receiver and transmitter. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests For Tx Only
+//			Tuning control requests for Tx only: The counter of received Tuning_Control PLOAM messages with
+//			Request operation code that contain tuning instructions for transmitter only. (R) (mandatory)
+//			(4 byte)
+//
+//		Tuning Control Requests Rejected_Int_Sfc
+//			Tuning control requests rejected/INT_SFC: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and INT_SFC response code, indicating inability to start
+//			transceiver tuning by the specified time (SFC). (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Ds_Xxx
+//			Tuning control requests rejected/DS_xxx: The aggregate counter of transmitted Tuning_Response
+//			PLOAM messages with NACK operation code and any DS_xxx response code, indicating target
+//			downstream wavelength channel inconsistency. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Us_Xxx
+//			Tuning control requests rejected/US_xxx: The aggregate counter of transmitted Tuning_Response
+//			PLOAM messages with NACK operation code and any US_xxx response code, indicating target upstream
+//			wavelength channel inconsistency. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Fulfilled With Onu Reacquired At Target Channel
+//			Tuning control requests fulfilled with ONU reacquired at target channel: The counter of
+//			controlled tuning attempts for which an upstream tuning confirmation has been obtained in the
+//			target channel. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Failed Due To Target Ds Wavelength Channel Not Found
+//			Tuning control requests failed due to target DS wavelength channel not found: The counter of
+//			controlled tuning attempts that failed due to timer TO4 expiration in the DS Tuning state (O8)
+//			in the target channel. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Failed Due To No Feedback In Target Ds Wavelength Channel
+//			Tuning control requests failed due to no feedback in target DS wavelength channel: The counter
+//			of controlled tuning attempts that failed due to timer TO5 expiration in the US Tuning state
+//			(O9) in the target channel. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Resolved With Onu Reacquired At Discretionary Channel
+//			Tuning control requests resolved with ONU reacquired at discretionary channel: The counter of
+//			controlled tuning attempts for which an upstream tuning confirmation has been obtained in the
+//			discretionary channel. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rollback_Com_Ds
+//			Tuning control requests Rollback/COM_DS: The counter of controlled tuning attempts that failed
+//			due to communication condition in the target channel, as indicated by the Tuning_Response PLOAM
+//			message with Rollback operation code and COM_DS response code. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rollback_Ds_Xxx
+//			Tuning control requests Rollback/DS_xxx: The aggregate counter of controlled tuning attempts
+//			that failed due to target downstream wavelength channel inconsistency, as indicated by the
+//			Tuning_Response PLOAM message with Rollback operation code and any DS_xxx response code. (R)
+//			(mandatory) (4 byte)
+//
+//		Tuning Control Requests Rollback_Us_Xxx
+//			Tuning control requests Rollback/US_xxx: The aggregate counter of controlled tuning attempts
+//			that failed due to target upstream wavelength channel parameter violation, as indicated by the
+//			Tuning_Response PLOAM message with Rollback operation code and US_xxx response code. (R)
+//			(mandatory) (4 byte)
+//
+//		Tuning Control Requests Failed With Onu Reactivation
+//			Tuning control requests failed with ONU reactivation: The counter of controlled tuning attempts
+//			that failed on any reason, with expiration of timers TO4 or TO5 causing the ONU transition into
+//			state O1. (R) (mandatory) (4 byte)
+//
+type TwdmChannelTuningPerformanceMonitoringHistoryDataPart1 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	twdmchanneltuningperformancemonitoringhistorydatapart1BME = &ManagedEntityDefinition{
+		Name:    "TwdmChannelTuningPerformanceMonitoringHistoryDataPart1",
+		ClassID: 449,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFE,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("TuningControlRequestsForRxOnlyOrRxAndTx", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("TuningControlRequestsForTxOnly", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("TuningControlRequestsRejectedIntSfc", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("TuningControlRequestsRejectedDsXxx", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("TuningControlRequestsRejectedUsXxx", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("TuningControlRequestsFulfilledWithOnuReacquiredAtTargetChannel", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("TuningControlRequestsFailedDueToTargetDsWavelengthChannelNotFound", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("TuningControlRequestsFailedDueToNoFeedbackInTargetDsWavelengthChannel", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("TuningControlRequestsResolvedWithOnuReacquiredAtDiscretionaryChannel", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("TuningControlRequestsRollbackComDs", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint32Field("TuningControlRequestsRollbackDsXxx", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint32Field("TuningControlRequestsRollbackUsXxx", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: Uint32Field("TuningControlRequestsFailedWithOnuReactivation", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+		},
+	}
+}
+
+// NewTwdmChannelTuningPerformanceMonitoringHistoryDataPart1 (class ID 449 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 NewTwdmChannelTuningPerformanceMonitoringHistoryDataPart1(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(twdmchanneltuningperformancemonitoringhistorydatapart1BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/twdmchanneltuningperformancemonitoringhistorydatapart2.go b/vendor/github.com/cboling/omci/generated/twdmchanneltuningperformancemonitoringhistorydatapart2.go
new file mode 100644
index 0000000..479ba9c
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/twdmchanneltuningperformancemonitoringhistorydatapart2.go
@@ -0,0 +1,164 @@
+/*
+ * 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 TwdmChannelTuningPerformanceMonitoringHistoryDataPart2ClassId ClassID = ClassID(450)
+
+var twdmchanneltuningperformancemonitoringhistorydatapart2BME *ManagedEntityDefinition
+
+// TwdmChannelTuningPerformanceMonitoringHistoryDataPart2 (class ID #450)
+//	This ME collects additional tuning-control-related PM data associated with the slot/circuit
+//	pack, hosting one or more ANI-G MEs, for a specific TWDM channel. Instances of this ME are
+//	created and deleted by the OLT.
+//
+//	The relevant events this ME is concerned with are counted towards the PM statistics associated
+//	with the source TWDM channel. This ME contains the counters characterized as optional in clause
+//	14 of [ITU-T  G.989.3].
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of TWDM channel ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 TWDM channel ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contains PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Tuning Control Requests Rejected_Ds_Albl
+//			Tuning control requests rejected/DS_ALBL: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and DS_ALBL response code, indicating downstream
+//			administrative label inconsistency. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Ds_Void
+//			Tuning control requests rejected/DS_VOID: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and DS_VOID response code, indicating that the target
+//			downstream wavelength channel descriptor is void. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Ds_Part
+//			Tuning control requests rejected/DS_PART: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and DS_PART response code, indicating that tuning request
+//			involves channel partition violation. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Ds_Tunr
+//			Tuning control requests rejected/DS_TUNR: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and DS_TUNR response code, indicating that the target DS
+//			wavelength channel is out of receiver tuning range. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Ds_Lnrt
+//			Tuning control requests rejected/DS_LNRT: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and DS_LNRT response code, indicating downstream line rate
+//			inconsistency in the target channel. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Ds_Lncd
+//			Tuning control requests rejected/DS_LNCD: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and DS_LNCD response code, indicating downstream line code
+//			inconsistency in the target channel. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Us_Albl
+//			Tuning control requests rejected/US_ALBL: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and US_ALBL response code, indicating upstream administrative
+//			label inconsistency. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Us_Void
+//			Tuning control requests rejected/US_VOID: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and US_VOID response code, indicating that the target upstream
+//			wavelength channel descriptor is void. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Us_Tunr
+//			Tuning control requests rejected/US_TUNR: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and US_TUNR response code, indicating that the target US
+//			wavelength channel is out of transmitter tuning range. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Us_Clbr
+//			Tuning control requests rejected/US_CLBR: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and US_CLBR response code, indicating that the transmitter has
+//			insufficient calibration accuracy in the target US wavelength channel. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Us_Lktp
+//			Tuning control requests rejected/US_LKTP: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and US_LKTP response code, indicating upstream optical link
+//			type inconsistency. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Us_Lnrt
+//			Tuning control requests rejected/US_LNRT: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and US_LNRT response code, indicating upstream line rate
+//			inconsistency in the target channel. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rejected_Us_Lncd
+//			Tuning control requests rejected/US_LNCD: The counter of transmitted Tuning_Response PLOAM
+//			messages with NACK operation code and US_LNCD response code, indicating upstream line code
+//			inconsistency in the target channel. (R) (mandatory) (4 byte)
+//
+type TwdmChannelTuningPerformanceMonitoringHistoryDataPart2 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	twdmchanneltuningperformancemonitoringhistorydatapart2BME = &ManagedEntityDefinition{
+		Name:    "TwdmChannelTuningPerformanceMonitoringHistoryDataPart2",
+		ClassID: 450,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetCurrentData,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFE,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("TuningControlRequestsRejectedDsAlbl", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("TuningControlRequestsRejectedDsVoid", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("TuningControlRequestsRejectedDsPart", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("TuningControlRequestsRejectedDsTunr", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("TuningControlRequestsRejectedDsLnrt", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("TuningControlRequestsRejectedDsLncd", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("TuningControlRequestsRejectedUsAlbl", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("TuningControlRequestsRejectedUsVoid", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("TuningControlRequestsRejectedUsTunr", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("TuningControlRequestsRejectedUsClbr", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint32Field("TuningControlRequestsRejectedUsLktp", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint32Field("TuningControlRequestsRejectedUsLnrt", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: Uint32Field("TuningControlRequestsRejectedUsLncd", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+		},
+	}
+}
+
+// NewTwdmChannelTuningPerformanceMonitoringHistoryDataPart2 (class ID 450 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 NewTwdmChannelTuningPerformanceMonitoringHistoryDataPart2(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(twdmchanneltuningperformancemonitoringhistorydatapart2BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/twdmchanneltuningperformancemonitoringhistorydatapart3.go b/vendor/github.com/cboling/omci/generated/twdmchanneltuningperformancemonitoringhistorydatapart3.go
new file mode 100644
index 0000000..ac28bcc
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/twdmchanneltuningperformancemonitoringhistorydatapart3.go
@@ -0,0 +1,135 @@
+/*
+ * 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 TwdmChannelTuningPerformanceMonitoringHistoryDataPart3ClassId ClassID = ClassID(451)
+
+var twdmchanneltuningperformancemonitoringhistorydatapart3BME *ManagedEntityDefinition
+
+// TwdmChannelTuningPerformanceMonitoringHistoryDataPart3 (class ID #451)
+//	This ME collects remaining tuning-control-related PM data associated with the slot/circuit pack,
+//	hosting one or more ANI-G MEs, for a specific TWDM channel. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	The relevant events this ME is concerned with are counted towards the PM statistics associated
+//	with the source TWDM channel. This ME contains the counters characterized as optional in clause
+//	14 of [ITU-T G.989.3].
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of TWDM channel ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 TWDM channel ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contains PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Tuning Control Requests Rollback_Ds_Albl
+//			Tuning control requests Rollback/DS_ALBL: The counter of controlled tuning attempts that failed
+//			due to downstream administrative label inconsistency, as indicated by the Tuning_Response PLOAM
+//			message with Rollback operation code and DS_ALBL response code. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rollback_Ds_Lktp
+//			Tuning control requests Rollback/DS_LKTP: The counter of controlled tuning attempts that failed
+//			due to downstream optical link type inconsistency, as indicated by the Tuning_Response PLOAM
+//			message with Rollback operation code and DS_LKTP response code. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rollback_Us_Albl
+//			Tuning control requests Rollback/US_ALBL: The counter of controlled tuning attempts that failed
+//			due to upstream administrative label violation, as indicated by the Tuning_Response PLOAM
+//			message with Rollback operation code and US_ALBL response code. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rollback_Us_Void
+//			Tuning control requests Rollback/US_VOID: The counter of controlled tuning attempts that failed
+//			due to the target upstream wavelength channel descriptor being void, as indicated by the
+//			Tuning_Response PLOAM message with Rollback operation code and US_VOID response code. (R)
+//			(mandatory) (4 byte)
+//
+//		Tuning Control Requests Rollback_Us_Tunr
+//			Tuning control requests Rollback/US_TUNR: The counter of controlled tuning attempts that failed
+//			due to the transmitter tuning range violation, as indicated by the Tuning_Response PLOAM message
+//			with Rollback operation code and US_TUNR response code. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rollback_Us_Lktp
+//			Tuning control requests Rollback/US_LKTP: The counter of controlled tuning attempts that failed
+//			due to the upstream optical link type violation, as indicated by the Tuning_Response PLOAM
+//			message with Rollback operation code and US_LKTP response code. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rollback_Us_Lnrt
+//			Tuning control requests Rollback/US_LNRT: The counter of controlled tuning attempts that failed
+//			due to the upstream line rate violation, as indicated by the Tuning_Response PLOAM message with
+//			Rollback operation code and US_LNRT response code. (R) (mandatory) (4 byte)
+//
+//		Tuning Control Requests Rollback_Us_Lncd
+//			Tuning control requests Rollback/US_LNCD: The counter of controlled tuning attempts that failed
+//			due to the upstream line code violation, as indicated by the Tuning_Response PLOAM message with
+//			Rollback operation code and US_LNCD response code. (R) (mandatory) (4 byte)
+//
+type TwdmChannelTuningPerformanceMonitoringHistoryDataPart3 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	twdmchanneltuningperformancemonitoringhistorydatapart3BME = &ManagedEntityDefinition{
+		Name:    "TwdmChannelTuningPerformanceMonitoringHistoryDataPart3",
+		ClassID: 451,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetCurrentData,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFC0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("TuningControlRequestsRollbackDsAlbl", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint32Field("TuningControlRequestsRollbackDsLktp", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("TuningControlRequestsRollbackUsAlbl", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("TuningControlRequestsRollbackUsVoid", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("TuningControlRequestsRollbackUsTunr", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("TuningControlRequestsRollbackUsLktp", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("TuningControlRequestsRollbackUsLnrt", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("TuningControlRequestsRollbackUsLncd", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+		},
+	}
+}
+
+// NewTwdmChannelTuningPerformanceMonitoringHistoryDataPart3 (class ID 451 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 NewTwdmChannelTuningPerformanceMonitoringHistoryDataPart3(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(twdmchanneltuningperformancemonitoringhistorydatapart3BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/twdmchannelxgemperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/twdmchannelxgemperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..b81fba8
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/twdmchannelxgemperformancemonitoringhistorydata.go
@@ -0,0 +1,125 @@
+/*
+ * 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 TwdmChannelXgemPerformanceMonitoringHistoryDataClassId ClassID = ClassID(445)
+
+var twdmchannelxgemperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// TwdmChannelXgemPerformanceMonitoringHistoryData (class ID #445)
+//	This ME collects certain XGEM-related PM data associated with the slot/circuit pack, hosting one
+//	or more ANI-G MEs, for a specific TWDM channel. Instances of this ME are created and deleted by
+//	the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of TWDM channel ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 TWDM channel ME. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 64 B It Id
+//			Threshold data 64 bit ID: This attribute points to an instance of the threshold data 64 bit ME
+//			that contains PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Total Transmitted Xgem Frames
+//			Total transmitted XGEM frames: The counter aggregated across all XGEM ports of the given ONU.
+//			(R) (mandatory) (8 byte)
+//
+//		Transmitted Xgem Frames With Lf Bit Not Set
+//			Transmitted XGEM frames with LF bit not set: The counter aggregated across all XGEM ports of the
+//			given ONU identifies the number of fragmentation operations. (R) (mandatory) (8 byte)
+//
+//		Total Received Xgem Frames
+//			Total received XGEM frames: The counter aggregated across all XGEM ports of the given ONU. (R)
+//			(mandatory) (8 byte)
+//
+//		Received Xgem Frames With Xgem Header Hec Errors
+//			Received XGEM frames with XGEM header HEC errors: The counter aggregated across all XGEM ports
+//			of the given ONU identifies the number of loss XGEM frame delineation events. (R) (mandatory)
+//			(8 byte)
+//
+//		Fs Words Lost To Xgem Header Hec Errors
+//			FS words lost to XGEM header HEC errors: The counter of the FS frame words lost due to XGEM
+//			frame header errors that cause loss of XGEM frame delineation. (R) (mandatory) (8 byte)
+//
+//		Xgem Encryption Key Errors
+//			XGEM encryption key errors: The counter aggregated across all XGEM ports of the given ONU
+//			identifies the number of received XGEM frames that have to be discarded because of unknown or
+//			invalid encryption key. The number is included into the Total received XGEM frame count above.
+//			(R) (mandatory) (8 byte)
+//
+//		Total Transmitted Bytes In Non_Idle Xgem Frames
+//			Total transmitted bytes in non-idle XGEM frames: The counter aggregated across all XGEM ports of
+//			the given. (R) (mandatory) (8 byte)
+//
+//		Total Received Bytes In Non_Idle Xgem Frames
+//			Total received bytes in non-idle XGEM frames: The counter aggregated across all XGEM ports of
+//			the given ONU. (R) (mandatory) (8 byte)
+//
+type TwdmChannelXgemPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	twdmchannelxgemperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "TwdmChannelXgemPerformanceMonitoringHistoryData",
+		ClassID: 445,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			GetCurrentData,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFC0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData64BItId", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint64Field("TotalTransmittedXgemFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint64Field("TransmittedXgemFramesWithLfBitNotSet", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint64Field("TotalReceivedXgemFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint64Field("ReceivedXgemFramesWithXgemHeaderHecErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint64Field("FsWordsLostToXgemHeaderHecErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint64Field("XgemEncryptionKeyErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint64Field("TotalTransmittedBytesInNonIdleXgemFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint64Field("TotalReceivedBytesInNonIdleXgemFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+		},
+	}
+}
+
+// NewTwdmChannelXgemPerformanceMonitoringHistoryData (class ID 445 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 NewTwdmChannelXgemPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(twdmchannelxgemperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/uni-g.go b/vendor/github.com/cboling/omci/generated/uni-g.go
new file mode 100644
index 0000000..eb6fb6a
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/uni-g.go
@@ -0,0 +1,94 @@
+/*
+ * 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 UniGClassId ClassID = ClassID(264)
+
+var unigBME *ManagedEntityDefinition
+
+// UniG (class ID #264)
+//	This ME organizes data associated with UNIs supported by GEM. One instance of the UNI-G ME
+//	exists for each UNI supported by the ONU.
+//
+//	The ONU automatically creates or deletes instances of this ME upon the creation or deletion of a
+//	real or virtual circuit pack ME, one per port.
+//
+//	Relationships
+//		An instance of the UNI-G ME exists for each instance of a PPTP ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 a PPTP. (R) (mandatory) (2 bytes)
+//
+//		Deprecated
+//			Deprecated:	This attribute is not used. It should be set to 0 by the OLT and ignored by the ONU.
+//			(R, W) (mandatory) (2 bytes)
+//
+//		Administrative State
+//			NOTE – PPTP MEs also have an administrative state attribute. The user port is unlocked only if
+//			both administrative state attributes are set to unlocked. It is recommended that this attribute
+//			not be used: that the OLT set it to 0 and that the ONU ignore it.
+//
+//		Management Capability
+//			(R) (optional) (1 byte)
+//
+//		Non_Omci Management Identifier
+//			Non-OMCI management identifier: If a PPTP can be managed either directly by the OMCI or a non-
+//			OMCI management environment, this attribute specifies how it is in fact to be managed. This
+//			attribute is either 0 (default = OMCI management), or it is a pointer to a VEIP, which in turn
+//			links to a non-OMCI management environment. (R, W) (optional) (2 bytes)
+//
+//		Relay Agent Options
+//			2/3/4:atm/123.4567
+//
+type UniG struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	unigBME = &ManagedEntityDefinition{
+		Name:    "UniG",
+		ClassID: 264,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: Uint16Field("Deprecated", 0, mapset.NewSetWith(Read, Write), false, false, false, true, 1),
+			2: ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3: ByteField("ManagementCapability", 0, mapset.NewSetWith(Read), false, false, true, false, 3),
+			4: Uint16Field("NonOmciManagementIdentifier", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+			5: Uint16Field("RelayAgentOptions", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 5),
+		},
+	}
+}
+
+// NewUniG (class ID 264 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 NewUniG(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(unigBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/vdsl2lineconfigurationextensions3.go b/vendor/github.com/cboling/omci/generated/vdsl2lineconfigurationextensions3.go
new file mode 100644
index 0000000..b566e20
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/vdsl2lineconfigurationextensions3.go
@@ -0,0 +1,150 @@
+/*
+ * 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...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/version.go b/vendor/github.com/cboling/omci/generated/version.go
new file mode 100644
index 0000000..93f5a1b
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/version.go
@@ -0,0 +1,64 @@
+/*
+ * 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
+
+// This file is used to track the version(s) of code used to parse the ITU
+// document and create the generated code.
+
+type VersionInfo struct {
+	Name       string  // Type (pre-parser, parser, code-generator)
+	Version    string  // Version of parser project
+	CreateTime float32 // UTC linux time when ran
+	ItuDocName string  // ITU G.988 document name
+	SHA256     string  // ITU G.988 document SHA-256 hash
+}
+
+var Versions []VersionInfo
+
+func init() {
+	Versions = make([]VersionInfo, 0)
+
+	Versions = append(Versions,
+		VersionInfo{
+			Name:       "parser",
+			Version:    "0.9.0",
+			CreateTime: 1570304206.346817,
+			ItuDocName: "T-REC-G.988-2017-11.docx",
+			SHA256:     "96ffc8bca6f70175c8e281e87e1cf21662d07a7502ebf595c5c3180a9972b9ac",
+		})
+
+	Versions = append(Versions,
+		VersionInfo{
+			Name:       "pre-parser",
+			Version:    "0.9.0",
+			CreateTime: 1570304142.338239,
+			ItuDocName: "T-REC-G.988-2017-11.docx",
+			SHA256:     "96ffc8bca6f70175c8e281e87e1cf21662d07a7502ebf595c5c3180a9972b9ac",
+		})
+
+	Versions = append(Versions,
+		VersionInfo{
+			Name:       "code-generator",
+			Version:    "0.9.0",
+			CreateTime: 1570305842.186913,
+			ItuDocName: "T-REC-G.988-2017-11.docx",
+			SHA256:     "96ffc8bca6f70175c8e281e87e1cf21662d07a7502ebf595c5c3180a9972b9ac",
+		})
+}
diff --git a/vendor/github.com/cboling/omci/generated/virtualethernetinterfacepoint.go b/vendor/github.com/cboling/omci/generated/virtualethernetinterfacepoint.go
new file mode 100644
index 0000000..b2bf4a6
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/virtualethernetinterfacepoint.go
@@ -0,0 +1,111 @@
+/*
+ * 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 VirtualEthernetInterfacePointClassId ClassID = ClassID(329)
+
+var virtualethernetinterfacepointBME *ManagedEntityDefinition
+
+// VirtualEthernetInterfacePoint (class ID #329)
+//	This ME represents the data plane hand-off point in an ONU to a separate (non-OMCI) management
+//	domain. The VEIP is managed by the OMCI, and is potentially known to the non-OMCI management
+//	domain. One or more Ethernet traffic flows are present at this boundary.
+//
+//	Instances of this ME are automatically created and deleted by the ONU. This is necessary because
+//	the required downstream priority queues are subject to physical implementation constraints. The
+//	OLT may use one or more of the VEIPs created by the ONU.
+//
+//	It is expected that the ONU will create one VEIP for each non-OMCI management domain. At the
+//	vendor's discretion, a VEIP may be created for each traffic class.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of a virtual Ethernet interface between
+//		OMCI and non-OMCI management domains.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. When used
+//			independently of a cardholder and circuit pack, the ONU should assign IDs in the sequence 1, 2,
+//			.... When used in conjunction with a cardholder and circuit pack, this 2 byte number indicates
+//			the physical position of the VEIP. The first byte is the slot ID (defined in clause 9.1.5). The
+//			second byte is the port ID, with the range 1..255. The values 0 and 0xFFFF are reserved. (R)
+//			(mandatory) (2 bytes)
+//
+//		Administrative State
+//			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) (mandatory) (1 byte)
+//
+//		Operational State
+//			Operational state: This attribute indicates whether the ME is capable of performing its
+//			function. Valid values are enabled (0) and disabled (1). (R) (optional) (1 byte)
+//
+//		Interdomain Name
+//			Interdomain name: This attribute is a character string that provides an optional way to identify
+//			the VEIP to a non-OMCI management domain. The interface may also be identified by its ME ID,
+//			[b-IANA] assigned port and possibly other ways. If the vendor offers no information in this
+//			attribute, it should be set to a sequence of null bytes. (R, W) (optional) (25 bytes)
+//
+//		Tcp_Udp Pointer
+//			TCP/UDP pointer: This attribute points to an instance of the TCP/UDP config data ME, which
+//			provides for OMCI management of the non-OMCI management domain's IP connectivity. If no OMCI
+//			management of the non-OMCI domain's IP connectivity is required, this attribute may be omitted
+//			or set to its default, a null pointer. (R, W) (optional) (2 bytes)
+//
+//		Iana Assigned Port
+//			IANA assigned port: This attribute contains the TCP or UDP port value as assigned by [b-IANA]
+//			for the management protocol associated with this virtual Ethernet interface. This attribute is
+//			to be regarded as a hint, not as a requirement that management communications use this port; the
+//			actual port and protocol are specified in the associated TCP/UDP config data ME. If no port has
+//			been assigned or if the management protocol is free to be chosen at run-time, this attribute
+//			should be set to 0xFFFF. (R) (mandatory) (2 bytes)
+//
+type VirtualEthernetInterfacePoint struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	virtualethernetinterfacepointBME = &ManagedEntityDefinition{
+		Name:    "VirtualEthernetInterfacePoint",
+		ClassID: 329,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: ByteField("AdministrativeState", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2: ByteField("OperationalState", 0, mapset.NewSetWith(Read), true, false, true, false, 2),
+			3: MultiByteField("InterdomainName", 25, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 3),
+			4: Uint16Field("TcpUdpPointer", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+			5: Uint16Field("IanaAssignedPort", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+		},
+	}
+}
+
+// NewVirtualEthernetInterfacePoint (class ID 329 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 NewVirtualEthernetInterfacePoint(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(virtualethernetinterfacepointBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/vlantaggingfilterdata.go b/vendor/github.com/cboling/omci/generated/vlantaggingfilterdata.go
new file mode 100644
index 0000000..209517f
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/vlantaggingfilterdata.go
@@ -0,0 +1,87 @@
+/*
+ * 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 VlanTaggingFilterDataClassId ClassID = ClassID(84)
+
+var vlantaggingfilterdataBME *ManagedEntityDefinition
+
+// VlanTaggingFilterData (class ID #84)
+//	This ME organizes data associated with VLAN tagging. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of a MAC bridge port configuration data
+//		ME. By definition, tag filtering occurs closer to the MAC bridge than the tagging operation.
+//		Schematically, the ordering of the functions is as given in Figure 9.3.11-1:////		Figure 9.3.11-1
+//
+//	Attributes
+//		Managed Entity Id
+//			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 ME. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Vlan Filter List
+//			VLAN filter list: This attribute is a list of provisioned tag control information (TCI) values
+//			for the bridge port. A TCI, comprising user priority, canonical format indicator (CFI) and
+//			virtual local area network identifier (VID), is represented by 2 bytes. This attribute supports
+//			up to 12 VLAN entries. The first N are valid, where N is given by the number of entries
+//			attribute. (R, W, setbycreate) (mandatory) (24 bytes)
+//
+//		Forward Operation
+//			Table 9.3.11-1 and the actions listed are discussed in detail in the following.
+//
+//		Number Of Entries
+//			Number of entries: This attribute specifies the number of valid entries in the VLAN filter list.
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+type VlanTaggingFilterData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	vlantaggingfilterdataBME = &ManagedEntityDefinition{
+		Name:    "VlanTaggingFilterData",
+		ClassID: 84,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XE000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: MultiByteField("VlanFilterList", 24, nil, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: ByteField("ForwardOperation", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: ByteField("NumberOfEntries", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+		},
+	}
+}
+
+// NewVlanTaggingFilterData (class ID 84 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 NewVlanTaggingFilterData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(vlantaggingfilterdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/vlantaggingoperationconfigurationdata.go b/vendor/github.com/cboling/omci/generated/vlantaggingoperationconfigurationdata.go
new file mode 100644
index 0000000..def7943
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/vlantaggingoperationconfigurationdata.go
@@ -0,0 +1,106 @@
+/*
+ * 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 VlanTaggingOperationConfigurationDataClassId ClassID = ClassID(78)
+
+var vlantaggingoperationconfigurationdataBME *ManagedEntityDefinition
+
+// VlanTaggingOperationConfigurationData (class ID #78)
+//	This ME organizes data associated with VLAN tagging. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	NOTE 1 – The extended VLAN tagging operation configuration data of clause 9.3.13 is preferred
+//	for new implementations.
+//
+//	Relationships
+//		Zero or one instance of this ME may exist for an instance of any ME that can terminate or modify
+//		an Ethernet stream.////		When this ME is associated with a UNI-side TP, it performs its upstream classification and
+//		tagging operations before offering the upstream frame to other filtering, bridging or switching
+//		functions. In the downstream direction, the defined inverse operation is the last operation
+//		performed on the frame before offering it to the UNI-side termination.////		When this ME is associated with an ANI-side TP, it performs its upstream classification and
+//		tagging operations as the last step before queueing for transmission to the OLT, after having
+//		received the upstream frame from other filtering, bridging or switching functions. In the
+//		downstream direction, the defined inverse operation is the first operation performed on the
+//		frame before offering it to possible filter, bridge or switch functions.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. When the
+//			optional association type attribute is 0 or undefined, this attribute's value is the same as the
+//			ID of the ME with which this VLAN tagging operation configuration data instance is associated,
+//			which may be either a PPTP Ethernet UNI or an IP host config data or an IPv6 host config data
+//			ME. Otherwise, the value of the ME ID is unconstrained except by the need to be unique. (R, set-
+//			by-create) (mandatory) (2 bytes)
+//
+//		Upstream Vlan Tagging Operation Mode
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Upstream Vlan Tag Tci Value
+//			Upstream VLAN tag TCI value: This attribute specifies the TCI for upstream VLAN tagging. It is
+//			used when the upstream VLAN tagging operation mode is 1 or 2. (R, W, setbycreate) (mandatory)
+//			(2 bytes)
+//
+//		Downstream Vlan Tagging Operation Mode
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Association Type
+//			The associated ME instance is identified by the associated ME pointer. (R, W, setbycreate)
+//			(optional) (1 byte)
+//
+//		Associated Me Pointer
+//			NOTE 3 – When the association type is xDSL, the two MSBs may be used to indicate a bearer
+//			channel.
+//
+type VlanTaggingOperationConfigurationData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	vlantaggingoperationconfigurationdataBME = &ManagedEntityDefinition{
+		Name:    "VlanTaggingOperationConfigurationData",
+		ClassID: 78,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("UpstreamVlanTaggingOperationMode", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: Uint16Field("UpstreamVlanTagTciValue", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: ByteField("DownstreamVlanTaggingOperationMode", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: ByteField("AssociationType", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 4),
+			5: Uint16Field("AssociatedMePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 5),
+		},
+	}
+}
+
+// NewVlanTaggingOperationConfigurationData (class ID 78 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 NewVlanTaggingOperationConfigurationData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(vlantaggingoperationconfigurationdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/voiceserviceprofile.go b/vendor/github.com/cboling/omci/generated/voiceserviceprofile.go
new file mode 100644
index 0000000..8ababd1
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/voiceserviceprofile.go
@@ -0,0 +1,143 @@
+/*
+ * 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 VoiceServiceProfileClassId ClassID = ClassID(58)
+
+var voiceserviceprofileBME *ManagedEntityDefinition
+
+// VoiceServiceProfile (class ID #58)
+//	This ME organizes data that describe the voice service functions of the ONU. 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 a VoIP voice CTP by way
+//		of a VoIP media profile.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Announcement Type
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Jitter Target
+//			Jitter target:	This attribute specifies the target value of the jitter buffer in milliseconds.
+//			The system tries to maintain the jitter buffer at the target value. The value 0 specifies
+//			dynamic jitter buffer sizing. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Jitter Buffer Max
+//			Jitter buffer max: This attribute specifies the maximum depth of the jitter buffer associated
+//			with this service in milliseconds. The value 0 specifies that the ONU uses its internal default.
+//			(R, W, set-by-create) (optional) (2 bytes)
+//
+//		Echo Cancel Ind
+//			Echo cancel ind: The Boolean value true specifies that echo cancellation is on; false specifies
+//			off. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Pstn Protocol Variant
+//			PSTN protocol variant: This attribute controls which variant of POTS signalling is used on the
+//			associated UNIs. Its value is equal to the [ITU-T E.164] country code. The value 0 specifies
+//			that the ONU uses its internal default. (R, W, set-by-create) (optional) (2 bytes)
+//
+//		Dtmf Digit Levels
+//			DTMF digit levels: This attribute specifies the power level of DTMF digits that may be generated
+//			by the ONU towards the subscriber set. It is a 2s complement value referred to 1 mW at the 0
+//			transmission level point (TLP) (dBm0), with resolution 1 dB. The default value 0x8000 selects
+//			the ONU's internal policy. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Dtmf Digit Duration
+//			DTMF digit duration: This attribute specifies the duration of DTMF digits that may be generated
+//			by the ONU towards the subscriber set. It is specified in milliseconds. The default value 0
+//			selects the ONU's internal policy. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Hook Flash Minimum Time
+//			Hook flash minimum time: This attribute defines the minimum duration recognized by the ONU as a
+//			switchhook flash. It is expressed in milliseconds; the default value 0 selects the ONU's
+//			internal policy. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Hook Flash Maximum Time
+//			Hook flash maximum time: This attribute defines the maximum duration recognized by the ONU as a
+//			switchhook flash. It is expressed in milliseconds; the default value 0 selects the ONU's
+//			internal policy. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Tone Pattern Table
+//			(R, W) (optional) (N * 20 bytes)
+//
+//		Tone Event Table
+//			(R, W) (optional) (N * 7 bytes).
+//
+//		Ringing Pattern Table
+//			(R, W) (optional) (N * 5 bytes).
+//
+//		Ringing Event Table
+//			(R, W) (optional) (N * 7 bytes).
+//
+//		Network Specific Extensions Pointer
+//			Network specific extensions pointer: This attribute points to a network address ME that contains
+//			the path and name of a file containing network specific parameters for the associated UNIs. The
+//			default value for this attribute is 0xFFFF, a null pointer. (R, W, set-by-create) (optional)
+//			(2 bytes)
+//
+type VoiceServiceProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	voiceserviceprofileBME = &ManagedEntityDefinition{
+		Name:    "VoiceServiceProfile",
+		ClassID: 58,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFC,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("AnnouncementType", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  Uint16Field("JitterTarget", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 2),
+			3:  Uint16Field("JitterBufferMax", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 3),
+			4:  ByteField("EchoCancelInd", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  Uint16Field("PstnProtocolVariant", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 5),
+			6:  Uint16Field("DtmfDigitLevels", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 6),
+			7:  Uint16Field("DtmfDigitDuration", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 7),
+			8:  Uint16Field("HookFlashMinimumTime", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 8),
+			9:  Uint16Field("HookFlashMaximumTime", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 9),
+			10: MultiByteField("TonePatternTable", 20, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 10),
+			11: MultiByteField("ToneEventTable", 7, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
+			12: MultiByteField("RingingPatternTable", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+			13: MultiByteField("RingingEventTable", 7, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 13),
+			14: Uint16Field("NetworkSpecificExtensionsPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 14),
+		},
+	}
+}
+
+// NewVoiceServiceProfile (class ID 58 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 NewVoiceServiceProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(voiceserviceprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/voipapplicationserviceprofile.go b/vendor/github.com/cboling/omci/generated/voipapplicationserviceprofile.go
new file mode 100644
index 0000000..4519b6b
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/voipapplicationserviceprofile.go
@@ -0,0 +1,115 @@
+/*
+ * 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 VoipApplicationServiceProfileClassId ClassID = ClassID(146)
+
+var voipapplicationserviceprofileBME *ManagedEntityDefinition
+
+// VoipApplicationServiceProfile (class ID #146)
+//	The VoIP application service profile defines attributes of calling features used in conjunction
+//	with a VoIP line service. It is optional for ONUs that support VoIP services. If a non-OMCI
+//	interface is used to manage SIP for VoIP, this ME is unnecessary.
+//
+//	An instance of this ME is created and deleted by the OLT. A VoIP application service profile
+//	instance is needed for each unique set of profile attributes.
+//
+//	Relationships
+//		An instance of this ME is associated with zero or more SIP user data MEs.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Cid Features
+//			The recommended default value is 0x00. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Call Waiting Features
+//			The recommended default value is 0x00. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Call Progress Or Transfer Features
+//			The recommended default value is 0x0000. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Call Presentation Features
+//			The recommended default value is 0x0000. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Direct Connect Feature
+//			The recommended default value is 0x00. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Direct Connect Uri Pointer
+//			Direct connect URI pointer: This attribute points to a network address ME that specifies the URI
+//			of the direct connect. If this attribute is set to a null pointer, no URI is defined. (R, W,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Bridged Line Agent Uri Pointer
+//			Bridged line agent URI pointer: This attribute points to a network address ME that specifies the
+//			URI of the bridged line agent. If this attribute is set to a null pointer, no URI is defined.
+//			(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Conference Factory Uri Pointer
+//			Conference factory URI pointer: This attribute points to a network address ME that specifies the
+//			URI of the conference factory. If this attribute is set to a null pointer, no URI is defined.
+//			(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Dial Tone Feature Delay_ W Armline Timer New
+//			Dial tone feature delay/warmline timer (new): This attribute defines the warmline timer/dial
+//			tone feature delay timer (seconds). The default value 0 specifies vendor-specific
+//			implementation. (R, W) (optional) (2 bytes)
+//
+type VoipApplicationServiceProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	voipapplicationserviceprofileBME = &ManagedEntityDefinition{
+		Name:    "VoipApplicationServiceProfile",
+		ClassID: 146,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF80,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("CidFeatures", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: ByteField("CallWaitingFeatures", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint16Field("CallProgressOrTransferFeatures", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: Uint16Field("CallPresentationFeatures", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5: ByteField("DirectConnectFeature", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6: Uint16Field("DirectConnectUriPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7: Uint16Field("BridgedLineAgentUriPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8: Uint16Field("ConferenceFactoryUriPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 8),
+			9: Uint16Field("DialToneFeatureDelayWArmlineTimerNew", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 9),
+		},
+	}
+}
+
+// NewVoipApplicationServiceProfile (class ID 146 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 NewVoipApplicationServiceProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(voipapplicationserviceprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/voipconfigdata.go b/vendor/github.com/cboling/omci/generated/voipconfigdata.go
new file mode 100644
index 0000000..9dd9e77
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/voipconfigdata.go
@@ -0,0 +1,107 @@
+/*
+ * 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 VoipConfigDataClassId ClassID = ClassID(138)
+
+var voipconfigdataBME *ManagedEntityDefinition
+
+// VoipConfigData (class ID #138)
+//	The VoIP configuration data ME defines the configuration for VoIP in the ONU. The OLT uses this
+//	ME to discover the VoIP signalling protocols and configuration methods supported by this ONU.
+//	The OLT then uses this ME to select the desired signalling protocol and configuration method.
+//	The entity is conditionally required for ONUs that offer VoIP services.
+//
+//	An ONU that supports VoIP services automatically creates an instance of this ME.
+//
+//	Relationships
+//		One instance of this ME is associated with the ONU.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. There is only
+//			one instance, number 0. (R) (mandatory) (2 bytes)
+//
+//		Available Signalling Protocols
+//			(R) (mandatory) (1 byte)
+//
+//		Signalling Protocol Used
+//			(R, W) (mandatory) (1 byte)
+//
+//		Available Voip Configuration Methods
+//			Bits 5..24 are reserved by ITU-T. Bits 25..32 are reserved for proprietary vendor configuration
+//			capabilities. (R) (mandatory) (4 bytes)
+//
+//		Voip Configuration Method Used
+//			(R, W) (mandatory) (1 byte)
+//
+//		Voip Configuration Address Pointer
+//			The default value is 0xFFFF (R, W) (mandatory) (2 bytes)
+//
+//		Voip Configuration State
+//			Other values are reserved. At ME instantiation, the ONU sets this attribute to 0. (R)
+//			(mandatory) (1 byte)
+//
+//		Retrieve Profile
+//			Retrieve profile: This attribute provides a means by which the ONU may be notified that a new
+//			VoIP profile should be retrieved. By setting this attribute, the OLT triggers the ONU to
+//			retrieve a new profile. The actual value in the set action is ignored because it is the action
+//			of setting that is important. (W) (mandatory) (1 byte)
+//
+//		Profile Version
+//			Profile version: This attribute is a character string that identifies the version of the last
+//			retrieved profile. (R) (mandatory) (25 bytes)
+//
+type VoipConfigData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	voipconfigdataBME = &ManagedEntityDefinition{
+		Name:    "VoipConfigData",
+		ClassID: 138,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: ByteField("AvailableSignallingProtocols", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: ByteField("SignallingProtocolUsed", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3: Uint32Field("AvailableVoipConfigurationMethods", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: ByteField("VoipConfigurationMethodUsed", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5: Uint16Field("VoipConfigurationAddressPointer", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6: ByteField("VoipConfigurationState", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: ByteField("RetrieveProfile", 0, mapset.NewSetWith(Write), false, false, false, false, 7),
+			8: MultiByteField("ProfileVersion", 25, nil, mapset.NewSetWith(Read), true, false, false, false, 8),
+		},
+	}
+}
+
+// NewVoipConfigData (class ID 138 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 NewVoipConfigData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(voipconfigdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/voipfeatureaccesscodes.go b/vendor/github.com/cboling/omci/generated/voipfeatureaccesscodes.go
new file mode 100644
index 0000000..5b50616
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/voipfeatureaccesscodes.go
@@ -0,0 +1,119 @@
+/*
+ * 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 VoipFeatureAccessCodesClassId ClassID = ClassID(147)
+
+var voipfeatureaccesscodesBME *ManagedEntityDefinition
+
+// VoipFeatureAccessCodes (class ID #147)
+//	The VoIP feature access codes ME defines administrable feature access codes for the VoIP
+//	subscriber. It is optional for ONUs that support VoIP services. If a non-OMCI interface is used
+//	to manage VoIP signalling, this ME is unnecessary.
+//
+//	Instances of this ME are created and deleted by the OLT. A VoIP feature access codes instance is
+//	needed for each unique set of feature access code attributes.
+//
+//	Relationships
+//		An instance of this ME may be associated with one or more SIP user data MEs.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R) (mandatory)
+//			(2 bytes)
+//
+//		Cancel Call Waiting
+//			Cancel call waiting:	(R, W) (optional) (5 bytes)
+//
+//		Call Hold
+//			Call hold:		(R, W) (optional) (5 bytes)
+//
+//		Call Park
+//			Call park:		(R, W) (optional) (5 bytes)
+//
+//		Caller Id Activate
+//			Caller ID activate:	(R, W) (optional) (5 bytes)
+//
+//		Caller Id Deactivate
+//			Caller ID deactivate:	(R, W) (optional) (5 bytes)
+//
+//		Do Not Disturb Activation
+//			Do not disturb activation:	(R, W) (optional) (5 bytes)
+//
+//		Do Not Disturb Deactivation
+//			Do not disturb deactivation:	(R, W) (optional) (5 bytes)
+//
+//		Do Not Disturb Pin Change
+//			Do not disturb PIN change:	(R, W) (optional) (5 bytes)
+//
+//		Emergency Service Number
+//			Emergency service number:	(R, W) (optional) (5 bytes)
+//
+//		Intercom Service
+//			Intercom service:	(R, W) (optional) (5 bytes)
+//
+//		Unattended_Blind Call Transfer
+//			Unattended/blind call transfer:	(R, W) (optional) (5 bytes)
+//
+//		Attended Call Transfer
+//			Attended call transfer:	(R, W) (optional) (5 bytes)
+//
+type VoipFeatureAccessCodes struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	voipfeatureaccesscodesBME = &ManagedEntityDefinition{
+		Name:    "VoipFeatureAccessCodes",
+		ClassID: 147,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFF0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  MultiByteField("CancelCallWaiting", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 1),
+			2:  MultiByteField("CallHold", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 2),
+			3:  MultiByteField("CallPark", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 3),
+			4:  MultiByteField("CallerIdActivate", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 4),
+			5:  MultiByteField("CallerIdDeactivate", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 5),
+			6:  MultiByteField("DoNotDisturbActivation", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 6),
+			7:  MultiByteField("DoNotDisturbDeactivation", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 7),
+			8:  MultiByteField("DoNotDisturbPinChange", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 8),
+			9:  MultiByteField("EmergencyServiceNumber", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 9),
+			10: MultiByteField("IntercomService", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 10),
+			11: MultiByteField("UnattendedBlindCallTransfer", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
+			12: MultiByteField("AttendedCallTransfer", 5, nil, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+		},
+	}
+}
+
+// NewVoipFeatureAccessCodes (class ID 147 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 NewVoipFeatureAccessCodes(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(voipfeatureaccesscodesBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/voiplinestatus.go b/vendor/github.com/cboling/omci/generated/voiplinestatus.go
new file mode 100644
index 0000000..9ed609e
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/voiplinestatus.go
@@ -0,0 +1,106 @@
+/*
+ * 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 VoipLineStatusClassId ClassID = ClassID(141)
+
+var voiplinestatusBME *ManagedEntityDefinition
+
+// VoipLineStatus (class ID #141)
+//	The VoIP line status ME contains line status information for POTS ports using VoIP services. An
+//	ONU that supports VoIP automatically creates or deletes an instance of this ME upon creation or
+//	deletion of a PPTP POTS UNI.
+//
+//	Relationships
+//		An instance of this ME is associated with a PPTP POTS UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP POTS UNI. (R) (mandatory)
+//			(2 bytes)
+//
+//		Voip Codec Used
+//			(R) (mandatory) (2 bytes)
+//
+//		Voip Voice Server Status
+//			(R) (mandatory) (1 byte)
+//
+//		Voip Port Session Type
+//			(R) (mandatory) (1 byte)
+//
+//		Voip Call 1 Packet Period
+//			Voip call 1 packet period: This attribute reports the packet period for the first call on the
+//			VoIP POTS port. The value is defined in milliseconds. (R) (mandatory) (2 bytes)
+//
+//		Voip Call 2 Packet Period
+//			Voip call 2 packet period: This attribute reports the packet period for the second call on the
+//			VoIP POTS port. The value is defined in milliseconds. (R) (mandatory) (2 bytes)
+//
+//		Voip Call 1 Dest Addr
+//			Voip call 1 dest addr: This attribute reports the DA for the first call on the VoIP POTS port.
+//			The value is an ASCII string. (R) (mandatory) (25 bytes)
+//
+//		Voip Call 2 Dest Addr
+//			Voip call 2 dest addr: This attribute reports the DA for the second call on the VoIP POTS port.
+//			The value is an ASCII string. (R) (mandatory) (25 bytes)
+//
+//		Voip Line State
+//			(R) (optional) (1 byte)
+//
+//		Emergency Call Status
+//			(R) (Optional) (1 byte)
+//
+type VoipLineStatus struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	voiplinestatusBME = &ManagedEntityDefinition{
+		Name:    "VoipLineStatus",
+		ClassID: 141,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+		),
+		AllowedAttributeMask: 0XFF80,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: Uint16Field("VoipCodecUsed", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: ByteField("VoipVoiceServerStatus", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3: ByteField("VoipPortSessionType", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint16Field("VoipCall1PacketPeriod", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint16Field("VoipCall2PacketPeriod", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: MultiByteField("VoipCall1DestAddr", 25, nil, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: MultiByteField("VoipCall2DestAddr", 25, nil, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8: ByteField("VoipLineState", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+			9: ByteField("EmergencyCallStatus", 0, mapset.NewSetWith(Read), true, false, true, false, 9),
+		},
+	}
+}
+
+// NewVoipLineStatus (class ID 141 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 NewVoipLineStatus(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(voiplinestatusBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/voipmediaprofile.go b/vendor/github.com/cboling/omci/generated/voipmediaprofile.go
new file mode 100644
index 0000000..c25179e
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/voipmediaprofile.go
@@ -0,0 +1,142 @@
+/*
+ * 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 VoipMediaProfileClassId ClassID = ClassID(142)
+
+var voipmediaprofileBME *ManagedEntityDefinition
+
+// VoipMediaProfile (class ID #142)
+//	The VoIP media profile ME contains settings that apply to VoIP voice encoding. This entity is
+//	conditionally required for ONUs that offer VoIP services. If a non-OMCI interface is used to
+//	manage VoIP signalling, this ME is unnecessary.
+//
+//	An instance of this ME is created and deleted by the OLT. A VoIP media profile is needed for
+//	each unique set of profile attributes.
+//
+//	Relationships
+//		An instance of this ME may be associated with one or more VoIP voice CTP MEs.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Fax Mode
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Voice Service Profile Pointer
+//			Voice service profile pointer: Pointer to a voice service profile, which defines parameters such
+//			as jitter buffering and echo cancellation. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Codec Selection 1st Order
+//			(R, W, set-by-create) (mandatory) (1 byte)
+//
+//		Packet Period Selection 1st Order
+//			Packet period selection (1st order): This attribute specifies the packet period selection
+//			interval in milliseconds. The recommended default value is 10 ms. Valid values are 10..30 ms.
+//			(R, W, set-by-create) (mandatory) (1 byte)
+//
+//		Silence Suppression 1st Order
+//			Silence suppression (1st order): This attribute specifies whether silence suppression is on or
+//			off. Valid values are 0 = off and 1 = on. (R, W, set-by-create) (mandatory) (1 byte)
+//
+//		Codec Selection 2nd Order
+//			Codec selection (2nd order):	(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Packet Period Selection 2nd Order
+//			Packet period selection (2nd order):	(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Silence Suppression 2nd Order
+//			Silence suppression (2nd order):	(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Codec Selection 3rd Order
+//			Codec selection (3rd order):	(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Packet Period Selection 3rd Order
+//			Packet period selection (3rd order):	(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Silence Suppression 3rd Order
+//			Silence suppression (3rd order):	(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Codec Selection 4th Order
+//			Codec selection (4th order):	(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Packet Period Selection 4th Order
+//			Packet period selection (4th order):	(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Silence Suppression 4th Order
+//			Silence suppression (4th order):	(R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Oob Dtmf
+//			OOB DTMF:	This attribute specifies out-of-band DMTF carriage. When enabled (1), DTMF signals are
+//			carried out of band via RTP or the associated signalling protocol. When disabled (0), DTMF tones
+//			are carried in the PCM stream. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Rtp Profile Pointer
+//			RTP profile pointer: This attribute points to the associated RTP profile data ME. (R, W,
+//			setbycreate) (mandatory) (2 bytes)
+//
+type VoipMediaProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	voipmediaprofileBME = &ManagedEntityDefinition{
+		Name:    "VoipMediaProfile",
+		ClassID: 142,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("FaxMode", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  Uint16Field("VoiceServiceProfilePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  ByteField("CodecSelection1StOrder", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4:  ByteField("PacketPeriodSelection1StOrder", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  ByteField("SilenceSuppression1StOrder", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6:  ByteField("CodecSelection2NdOrder", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7:  ByteField("PacketPeriodSelection2NdOrder", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 7),
+			8:  ByteField("SilenceSuppression2NdOrder", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 8),
+			9:  ByteField("CodecSelection3RdOrder", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 9),
+			10: ByteField("PacketPeriodSelection3RdOrder", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 10),
+			11: ByteField("SilenceSuppression3RdOrder", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 11),
+			12: ByteField("CodecSelection4ThOrder", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 12),
+			13: ByteField("PacketPeriodSelection4ThOrder", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 13),
+			14: ByteField("SilenceSuppression4ThOrder", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 14),
+			15: ByteField("OobDtmf", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 15),
+			16: Uint16Field("RtpProfilePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 16),
+		},
+	}
+}
+
+// NewVoipMediaProfile (class ID 142 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 NewVoipMediaProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(voipmediaprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/voipvoicectp.go b/vendor/github.com/cboling/omci/generated/voipvoicectp.go
new file mode 100644
index 0000000..08060e2
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/voipvoicectp.go
@@ -0,0 +1,94 @@
+/*
+ * 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 VoipVoiceCtpClassId ClassID = ClassID(139)
+
+var voipvoicectpBME *ManagedEntityDefinition
+
+// VoipVoiceCtp (class ID #139)
+//	The VoIP voice CTP defines the attributes necessary to associate a specified VoIP service (SIP,
+//	ITUT H.248) with a POTS UNI. This entity is conditionally required for ONUs that offer VoIP
+//	services. If a non-OMCI interface is used to manage VoIP signalling, this ME is unnecessary.
+//
+//	An instance of this ME is created and deleted by the OLT. A VoIP voice CTP ME is needed for each
+//	PPTP POTS UNI served by VoIP.
+//
+//	Relationships
+//		An instance of this ME links a PPTP POTS UNI ME with a VoIP media profile and a SIP user data or
+//		media gateway controller (MGC) config data ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		User Protocol Pointer
+//			User protocol pointer: This attribute points to signalling protocol data. If the signalling
+//			protocol used attribute of the VoIP config data ME specifies that the ONU's signalling protocol
+//			is SIP, this attribute points to a SIP user data ME, which in turn points to a SIP agent config
+//			data ME. If the signalling protocol is ITU-T H.248, this attribute points directly to an MGC
+//			config data ME. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Pptp Pointer
+//			PPTP pointer: This attribute points to the PPTP POTS UNI ME that serves the analogue telephone
+//			port. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		V O Ip Media Profile Pointer
+//			VoIP media profile pointer: This attribute points to an associated VoIP media profile. (R, W,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Signalling Code
+//			(R, W, setbycreate) (mandatory) (1 byte)
+//
+type VoipVoiceCtp struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	voipvoicectpBME = &ManagedEntityDefinition{
+		Name:    "VoipVoiceCtp",
+		ClassID: 139,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("UserProtocolPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: Uint16Field("PptpPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint16Field("VOIpMediaProfilePointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: ByteField("SignallingCode", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+		},
+	}
+}
+
+// NewVoipVoiceCtp (class ID 139 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 NewVoipVoiceCtp(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(voipvoicectpBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/vpnetworkctp.go b/vendor/github.com/cboling/omci/generated/vpnetworkctp.go
new file mode 100644
index 0000000..8950e2f
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/vpnetworkctp.go
@@ -0,0 +1,106 @@
+/*
+ * 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 VpNetworkCtpClassId ClassID = ClassID(269)
+
+var vpnetworkctpBME *ManagedEntityDefinition
+
+// VpNetworkCtp (class ID #269)
+//	NOTE – In [ITU-T G.984.4], this ME is called VP network CTP-G.
+//
+//	This ME represents the termination of VP links on an ONU. It aggregates connectivity
+//	functionality from the network view and alarms from the network element view as well as
+//	artefacts from trails. Instances of this ME are created and deleted by the OLT.
+//
+//	An instance of the VP network CTP ME can be deleted only when no ATM IW VCC TP is associated
+//	with it. It is the responsibility of the OLT to ensure that this condition is met.
+//
+//	Relationships
+//		Zero or more instances of the VP network CTP ME may exist for each instance of the IW VCC TP ME.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. (R, setbycreate)
+//			(mandatory) (2 bytes)
+//
+//		Vpi Value
+//			VPI value:	This attribute identifies the VPI value associated with the VP link being terminated.
+//			(R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Uni Pointer
+//			UNI pointer: This pointer indicates the xDSL PPTP UNI associated with this VP TP. The bearer
+//			channel may be indicated by the two MSBs of the pointer. (R, W, setbycreate) (mandatory)
+//			(2 bytes)
+//
+//		Direction
+//			Direction:	This attribute specifies whether the VP link is used for UNI-to-ANI (value 1), ANI-
+//			to-UNI (value 2), or bidirectional (value 3) connection. (R, W, setbycreate) (mandatory)
+//			(1 byte)
+//
+//		Deprecated 1
+//			Deprecated 1: Not used; should be set to 0. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Deprecated 2
+//			Deprecated 2: Not used; should be set to 0. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Deprecated 3
+//			Deprecated 3: Not used; should be set to 0. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Deprecated 4
+//			Deprecated 4: Not used; if present, should be set to 0. (R) (optional) (1 byte)
+//
+type VpNetworkCtp struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	vpnetworkctpBME = &ManagedEntityDefinition{
+		Name:    "VpNetworkCtp",
+		ClassID: 269,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFE00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint16Field("VpiValue", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: Uint16Field("UniPointer", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: ByteField("Direction", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4: Uint16Field("Deprecated1", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, true, 4),
+			5: Uint16Field("Deprecated2", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, true, 5),
+			6: Uint16Field("Deprecated3", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, true, 6),
+			7: ByteField("Deprecated4", 0, mapset.NewSetWith(Read), false, false, true, true, 7),
+		},
+	}
+}
+
+// NewVpNetworkCtp (class ID 269 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 NewVpNetworkCtp(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(vpnetworkctpBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/vpperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/vpperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..72909be
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/vpperformancemonitoringhistorydata.go
@@ -0,0 +1,115 @@
+/*
+ * 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 VpPerformanceMonitoringHistoryDataClassId ClassID = ClassID(62)
+
+var vpperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// VpPerformanceMonitoringHistoryData (class ID #62)
+//	This ME collects PM data associated with a VP network CTP. Instances of this ME are created and
+//	deleted by the OLT.
+//
+//	Relationships
+//		An instance of this ME is associated with an instance of the VP network CTP ME. The performance
+//		of upstream ATM flows is reported.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 VP network CTP. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Lost C 0 1 Cells
+//			Lost C = 0 + 1 cells: This attribute counts all cell loss. It cannot distinguish between cells
+//			lost because of header bit errors, ATM-level header errors, cell policing, or buffer overflows.
+//			It records only loss of information, independent of the priority of the cell. (R) (mandatory)
+//			(2 bytes)
+//
+//		Lost C_= 0 Cells
+//			Lost C = 0 cells: This attribute counts loss of high priority cells. It cannot distinguish
+//			between cells lost because of header bit errors, ATM-level header errors, cell policing, or
+//			buffer overflows. It records only loss of high priority cells. (R) (mandatory) (2 bytes)
+//
+//		Misinserted Cells
+//			Misinserted cells: This attribute counts cells that are misrouted to a monitored VP. (R)
+//			(mandatory) (2 bytes)
+//
+//		Transmitted C_= 0 _ 1 Cells
+//			Transmitted C = 0 + 1 cells: This attribute counts cells originated by the transmitting end
+//			point (i.e., backward reporting is assumed). (R) (mandatory) (5 bytes)
+//
+//		Transmitted C_= 0 Cells
+//			Transmitted C = 0 cells: This attribute counts high priority cells originated by the
+//			transmitting end point (i.e., backward reporting is assumed). (R) (mandatory) (5 bytes)
+//
+//		Impaired Block
+//			Impaired blocks: This severely errored cell block counter is incremented whenever one of the
+//			following events takes place: the number of misinserted cells reaches its threshold; the number
+//			of bipolar violations reaches its threshold; or the number of lost cells reaches its threshold.
+//			Threshold values are based on vendor-operator negotiation. (R) (mandatory) (2 bytes)
+//
+type VpPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	vpperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "VpPerformanceMonitoringHistoryData",
+		ClassID: 62,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint16Field("LostC01Cells", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint16Field("LostC=0Cells", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint16Field("MisinsertedCells", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: MultiByteField("TransmittedC=01Cells", 5, nil, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: MultiByteField("TransmittedC=0Cells", 5, nil, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8: Uint16Field("ImpairedBlock", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+		},
+	}
+}
+
+// NewVpPerformanceMonitoringHistoryData (class ID 62 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 NewVpPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(vpperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdslchannelconfigurationprofile.go b/vendor/github.com/cboling/omci/generated/xdslchannelconfigurationprofile.go
new file mode 100644
index 0000000..d88b93e
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdslchannelconfigurationprofile.go
@@ -0,0 +1,174 @@
+/*
+ * 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 XdslChannelConfigurationProfileClassId ClassID = ClassID(107)
+
+var xdslchannelconfigurationprofileBME *ManagedEntityDefinition
+
+// XdslChannelConfigurationProfile (class ID #107)
+//	This ME contains the channel configuration profile for an xDSL UNI. An instance of this ME is
+//	created and deleted by the OLT.
+//
+//	NOTE – If [ITUT G.997.1] compatibility is required, bit rates should only be set to integer
+//	multiples of 1000 bits/s. The ONU may reject attempts to set other values for bit rate
+//	attributes.
+//
+//	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
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The value 0 is
+//			reserved. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Minimum Data Rate
+//			Minimum data rate: This parameter specifies the minimum desired net data rate for the bearer
+//			channel. It is coded in bits per second. (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Maximum Data Rate
+//			Maximum data rate: This parameter specifies the maximum desired net data rate for the bearer
+//			channel. It is coded in bits per second. (R, W, setbycreate) (mandatory) (4 bytes)
+//
+//		Rate Adaptation Ratio
+//			Rate adaptation ratio: This attribute specifies the weight that should be taken into account
+//			when performing rate adaptation in the direction of the bearer channel. The attribute is defined
+//			as a percentage. The value 20, for example, means that 20% of the available data rate (in excess
+//			of the minimum data rate summed over all bearer channels) is assigned to this bearer channel and
+//			80% to the other bearer channels. The OLT must ensure that the sum of rate adaptation ratios
+//			over all bearers in one direction is 100%. (R, W, setbycreate) (optional) (1 byte)
+//
+//		Maximum Interleaving Delay
+//			The delay is coded in milliseconds, varying from 2 to 63, with special meaning assigned to
+//			values 0, 1 and 255. The value 0 indicates that no delay bound is imposed. The value 1 indicates
+//			the fast latency path is to be used in the ITUT G.992.1 operating mode and S and D are to be
+//			selected such that S  1 and D = 1 in ITU-T G.992.2, ITUT G.992.3, ITUT G.992.4, ITUT G.992.5 and
+//			ITUT G.993.2 operating modes. The value 255 indicates a delay bound of 1 ms in ITUT G.993.2
+//			operation. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Data Rate Threshold Upshift
+//			Data rate threshold upshift: This attribute is a threshold on the cumulative data rate upshift
+//			achieved over one or more bearer channel data rate adaptations. An upshift rate change (DRT up)
+//			notification is issued by the PPTP xDSL UNI part 1 when the actual data rate exceeds the data
+//			rate at the last entry into showtime by more than the threshold. The data rate threshold is
+//			coded in bits per second. (R, W, setbycreate) (mandatory for xDSL standards that use this
+//			attribute) (4 bytes)
+//
+//		Data Rate Threshold Downshift
+//			Data rate threshold downshift: This attribute is a threshold on the cumulative data rate
+//			downshift achieved over one or more bearer channel data rate adaptations. A downshift rate
+//			change (DRT down) notification is issued by the PPTP xDSL UNI part 1 when the actual data rate
+//			is below the data rate at the last entry into showtime by more than the threshold. The data rate
+//			threshold is coded in bits per second. (R, W, setbycreate) (mandatory for xDSL standards that
+//			use this attribute) (4 bytes)
+//
+//		Minimum Reserved Data Rate
+//			Minimum reserved data rate: This attribute specifies the desired minimum reserved net data rate
+//			for the bearer channel. The rate is coded in bits per second. This attribute is needed only if
+//			the rate adaptation mode is set to dynamic in the xDSL line configuration profile part 1. (R, W,
+//			setbycreate) (optional) (4 bytes)
+//
+//		Minimum Data Rate In Low _ Power State
+//			Minimum data rate in low-power state: This parameter specifies the minimum desired net data rate
+//			for the bearer channel during the low-power state (L1/L2). The power management low-power states
+//			L1 and L2 are defined in [ITUT G.992.2] and [ITUT G.992.3], respectively. The data rate is coded
+//			in bits per second. (R, W, setbycreate) (mandatory) (4 byte)
+//
+//		Minimum Impulse Noise Protection
+//			(R, W, setbycreate) (optional for [ITU-T G.992.1], mandatory for other xDSL standards that use
+//			this attribute) (1 byte)
+//
+//		Maximum Bit Error Ratio
+//			(R, W, setbycreate) (mandatory for standards that use this attribute) (1 byte)
+//
+//		Minimum Impulse Noise Protection 8_Khz
+//			Minimum impulse noise protection 8 kHz: The INPmin8 attribute specifies the minimum INP for the
+//			bearer channel if it is transported over DMT symbols with a subcarrier spacing of 8.625 kHz. It
+//			is only valid for [ITUT G.993.2]. INP is expressed in DMT symbols with a subcarrier spacing of
+//			8.625 kHz. It can take any integer value from 0 (default) to 16, inclusive. (R, W) (mandatory
+//			for [ITUT G.993.2]) (1 byte)
+//
+//		Maximum Delay Variation
+//			Maximum delay variation: The DVMAX attribute specifies the maximum value for delay variation
+//			allowed in an OLR procedure. Its value ranges from 1 (0.1 ms) to 254 (25.4 ms). The special
+//			value 255 specifies that no delay variation bound is imposed. (R, W) (optional: used by
+//			[ITUT G.993.2]) (1 byte)
+//
+//		Channel Initialization Policy Selection
+//			Channel initialization policy selection: The CIPOLICY attribute specifies the policy to
+//			determine transceiver configuration at initialization. Valid values are 0..1, as defined in the
+//			Recommendations that use this attribute. (R, W) (optional) (1 byte)
+//
+//		Minimum Sos Bit Rate Downstream
+//			Minimum SOS bit rate downstream: The MIN-SOS-BR-ds attribute specifies the minimum net data rate
+//			required for a valid SOS request in the downstream direction. The value is coded as an unsigned
+//			integer representing the data rate as a multiple of 8 kbit/s. (R, W) (optional) (4 bytes)
+//
+//		Minimum Sos Bit Rate Upstream
+//			Minimum SOS bit rate upstream: The MIN-SOS-BR-us attribute specifies the minimum net data rate
+//			required for a valid SOS request in the upstream direction. The value is coded as an unsigned
+//			integer representing the data rate as a multiple of 8 kbit/s. (R, W) (optional) (4 bytes)
+//
+type XdslChannelConfigurationProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdslchannelconfigurationprofileBME = &ManagedEntityDefinition{
+		Name:    "XdslChannelConfigurationProfile",
+		ClassID: 107,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFE,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  Uint32Field("MinimumDataRate", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  Uint32Field("MaximumDataRate", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  ByteField("RateAdaptationRatio", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 3),
+			4:  ByteField("MaximumInterleavingDelay", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  Uint32Field("DataRateThresholdUpshift", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 5),
+			6:  Uint32Field("DataRateThresholdDownshift", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 6),
+			7:  Uint32Field("MinimumReservedDataRate", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 7),
+			8:  Uint32Field("MinimumDataRateInLowPowerState", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 8),
+			9:  ByteField("MinimumImpulseNoiseProtection", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 9),
+			10: ByteField("MaximumBitErrorRatio", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 10),
+			11: ByteField("MinimumImpulseNoiseProtection8Khz", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 11),
+			12: ByteField("MaximumDelayVariation", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 12),
+			13: ByteField("ChannelInitializationPolicySelection", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 13),
+			14: Uint32Field("MinimumSosBitRateDownstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 14),
+			15: Uint32Field("MinimumSosBitRateUpstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 15),
+		},
+	}
+}
+
+// NewXdslChannelConfigurationProfile (class ID 107 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 NewXdslChannelConfigurationProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdslchannelconfigurationprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdslchannelconfigurationprofilepart2.go b/vendor/github.com/cboling/omci/generated/xdslchannelconfigurationprofilepart2.go
new file mode 100644
index 0000000..cc7a5a0
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdslchannelconfigurationprofilepart2.go
@@ -0,0 +1,168 @@
+/*
+ * 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 XdslChannelConfigurationProfilePart2ClassId ClassID = ClassID(412)
+
+var xdslchannelconfigurationprofilepart2BME *ManagedEntityDefinition
+
+// XdslChannelConfigurationProfilePart2 (class ID #412)
+//	This ME contains the channel configuration profile for an xDSL UNI. An instance of this ME is
+//	created and deleted by the OLT.
+//
+//	NOTE – If [ITUT G.997.1] compatibility is required, bit rates should only be set to integer
+//	multiples of 1000 bits/s. The ONU may reject attempts to set other values for bit rate
+//	attributes.
+//
+//	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
+//			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 xDSL channel configuration
+//			profile. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Minimum Expected Throughput For Retransmission Minetr_Rtx
+//			Minimum expected throughput for retransmission (MINETR_RTX): If retransmission is used in a
+//			given transmit direction, this attribute specifies the minimum expected throughput for the
+//			bearer channel, in bits per second. See clause 7.3.2.1.8 of [ITU-T G.997.1]. (R, W) (mandatory)
+//			(4 bytes)
+//
+//		Maximum Expected Throughput For Retransmission Maxetr_Rtx
+//			Maximum expected throughput for retransmission (MAXETR_RTX): If retransmission is used in a
+//			given transmit direction, this parameter specifies the maximum expected throughput for the
+//			bearer channel, in bits per second. See clause 7.3.2.1.9 of [ITU-T G.997.1]. (R, W) (mandatory)
+//			(4 bytes)
+//
+//		Maximum Net Data Rate For Retransmission Maxndr_Rtx
+//			Maximum net data rate for retransmission (MAXNDR_RTX): If retransmission is used in a given
+//			transmit direction, this parameter specifies the maximum net data rate for the bearer channel,
+//			in bits per second. See clause 7.3.2.1.10 of [ITUT G.997.1]. (R, W) (mandatory) (4 bytes)
+//
+//		Maximum Delay For Retransmission Delaymax_Rtx
+//			Maximum delay for retransmission (DELAYMAX_RTX): If retransmission is used in a given transmit
+//			direction, this parameter specifies the maximum for the instantaneous delay due to the effect of
+//			retransmission only. This delay is defined as the integer value of this attribute multiplied by
+//			1 ms. The valid delay values are given in clause 7.3.2.11 of [ITU-T G.997.1]. (R, W) (mandatory)
+//			(1 bytes)
+//
+//		Minimum Delay For Retransmission Delaymin_Rtx
+//			Minimum delay for retransmission (DELAYMIN_RTX): If retransmission is used in a given transmit
+//			direction, this parameter specifies the minimum for the instantaneous delay due to the effect of
+//			retransmission only. This delay is defined as the integer value of this attribute multiplied by
+//			1 ms. The valid delay values are given in clause 7.3.2.12 of [ITU-T G.997.1]. (R, W) (mandatory)
+//			(1 bytes)
+//
+//		Minimum Impulse Noise Protection Against Single High Impulse Noise Event Shine For Retransmission Inpmin_Shine_Rtx
+//			Minimum impulse noise protection against single high impulse noise event (SHINE) for
+//			retransmission (INPMIN_SHINE_RTX): If retransmission is used in a given transmit direction, this
+//			parameter specifies the minimum INP against a SHINE for the bearer channel if it is transported
+//			over DMT symbols with a subcarrier spacing of 4.3125 kHz. The valid range of values is given in
+//			clause 7.3.2.13 of [ITU-T G.997.1]. (R, W) (mandatory) (1 bytes)
+//
+//		Minimum Impulse Noise Protection Against Shine For Retransmission For Systems Using 8.625 Khz Subcarrier Spacing Inpmin8_Shine_Rtx
+//			Minimum impulse noise protection against SHINE for retransmission for systems using 8.625 kHz
+//			subcarrier spacing (INPMIN8_SHINE_RTX): If retransmission is used in a given transmit direction,
+//			this parameter specifies the minimum INP against SHINE for the bearer channel if it is
+//			transported over DMT symbols with a subcarrier spacing of 8.625 kHz. The valid range of values
+//			is given in clause 7.3.2.14 of [ITUT G.997.1]. (R, W) (mandatory) (1 bytes)
+//
+//		Shineratio_Rtx
+//			SHINERATIO_RTX: If retransmission is used in a given transmit direction, this parameter
+//			specifies the SHINE ratio. This ratio is defined as the integer value of this attribute
+//			multiplied by 0.001. The valid range of values is given in clause 7.3.2.15 of [ITU-T G.997.1].
+//			(R, W) (mandatory) (1 bytes)
+//
+//		Minimum Impulse Noise Protection Against Rein For Retransmission Inpmin_Rein_Rtx
+//			Minimum impulse noise protection against REIN for retransmission (INPMIN_REIN_RTX): If
+//			retransmission is used in a given transmit direction, this parameter specifies the minimum INP
+//			against REIN for the bearer channel if it is transported over DMT symbols with a subcarrier
+//			spacing of 4.3125 kHz. The valid range of values is given in clause 7.3.2.16 of [ITU-T G.997.1].
+//			(R, W) (mandatory) (1 bytes)
+//
+//		Minimum Impulse Noise Protection Against Rein For Retransmission For Systems Using 8.625_Khz Subcarrier Spacing Inpmin8_Rein_Rtx
+//			Minimum impulse noise protection against REIN for retransmission for systems using 8.625 kHz
+//			subcarrier spacing (INPMIN8_REIN_RTX): If retransmission is used in a given transmit direction,
+//			this parameter specifies the minimum INP against REIN for the bearer channel if it is
+//			transported over DMT symbols with a subcarrier spacing of 8.625 kHz. The valid range of values
+//			is given in clause 7.3.2.17 of [ITU-T G.997.1]. (R, W) (mandatory) (1 bytes)
+//
+//		Rein Inter_Arrival Time For Retransmission Iat_Rein_Rtx
+//			REIN inter-arrival time for retransmission (IAT_REIN_RTX): If retransmission is used in a given
+//			transmit direction, this parameter specifies the IAT that shall be assumed for REIN protection.
+//			The valid range of values is given in clause 7.3.2.18 of [ITU-T G.997.1]. (R, W) (mandatory)
+//			(1 bytes)
+//
+//		Target Net Data Rate Target_Ndr
+//			Target net data rate (TARGET_NDR): If retransmission is not used in a given transmit direction,
+//			this parameter specifies the target net data of the bearer channel, in bits per second. See
+//			clause 7.3.2.19.1 of [ITU-T G.997.1]. (R, W) (mandatory) (4 bytes)
+//
+//		Target Expected Throughput For Retransmission Target_Etr
+//			Target expected throughput for retransmission (TARGET_ETR): If retransmission is used in a given
+//			transmit direction, this parameter specifies the target expected throughput for the bearer
+//			channel, in bits per second. See clause 7.3.2.19.2 of [ITUT G.997.1]. (R, W) (mandatory)
+//			(4 bytes)
+//
+type XdslChannelConfigurationProfilePart2 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdslchannelconfigurationprofilepart2BME = &ManagedEntityDefinition{
+		Name:    "XdslChannelConfigurationProfilePart2",
+		ClassID: 412,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFF8,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  Uint32Field("MinimumExpectedThroughputForRetransmissionMinetrRtx", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 1),
+			2:  Uint32Field("MaximumExpectedThroughputForRetransmissionMaxetrRtx", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3:  Uint32Field("MaximumNetDataRateForRetransmissionMaxndrRtx", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4:  ByteField("MaximumDelayForRetransmissionDelaymaxRtx", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5:  ByteField("MinimumDelayForRetransmissionDelayminRtx", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6:  ByteField("MinimumImpulseNoiseProtectionAgainstSingleHighImpulseNoiseEventShineForRetransmissionInpminShineRtx", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7:  ByteField("MinimumImpulseNoiseProtectionAgainstShineForRetransmissionForSystemsUsing8625KhzSubcarrierSpacingInpmin8ShineRtx", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 7),
+			8:  ByteField("ShineratioRtx", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 8),
+			9:  ByteField("MinimumImpulseNoiseProtectionAgainstReinForRetransmissionInpminReinRtx", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 9),
+			10: ByteField("MinimumImpulseNoiseProtectionAgainstReinForRetransmissionForSystemsUsing8625KhzSubcarrierSpacingInpmin8ReinRtx", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 10),
+			11: ByteField("ReinInterArrivalTimeForRetransmissionIatReinRtx", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 11),
+			12: Uint32Field("TargetNetDataRateTargetNdr", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 12),
+			13: Uint32Field("TargetExpectedThroughputForRetransmissionTargetEtr", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 13),
+		},
+	}
+}
+
+// NewXdslChannelConfigurationProfilePart2 (class ID 412 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 NewXdslChannelConfigurationProfilePart2(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdslchannelconfigurationprofilepart2BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdslchanneldownstreamstatusdata.go b/vendor/github.com/cboling/omci/generated/xdslchanneldownstreamstatusdata.go
new file mode 100644
index 0000000..77c9ba2
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdslchanneldownstreamstatusdata.go
@@ -0,0 +1,154 @@
+/*
+ * 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 XdslChannelDownstreamStatusDataClassId ClassID = ClassID(102)
+
+var xdslchanneldownstreamstatusdataBME *ManagedEntityDefinition
+
+// XdslChannelDownstreamStatusData (class ID #102)
+//	This ME contains downstream channel status data for an xDSL UNI. The ONU automatically creates
+//	or deletes instances of this ME upon the creation or deletion of a PPTP xDSL UNI part 1.
+//
+//	NOTE – [ITU-T G.997.1] specifies that bit rate attributes have a granularity of 1000 bit/s. If
+//	ITU-T G.997.1 compliance is required, the ONU should only report values with this granularity.
+//
+//	Relationships
+//		One or more instances of this ME are associated with an instance of an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The two MSBs of
+//			the first byte are the bearer channel ID. Excluding the first 2 bits of the first byte, the
+//			remaining part of the ME ID is identical to that of this ME's parent PPTP xDSL UNI part 1. (R)
+//			(mandatory) (2 bytes)
+//
+//		Actual Interleaving Delay
+//			Actual interleaving delay: This attribute is the actual one-way interleaving delay introduced by
+//			the PMS-TC between the alpha and beta reference points, excluding delay in the L1 and L2 states.
+//			In the L1 and L2 states, the attribute contains the interleaving delay in the previous L0 state.
+//			For ADSL, this attribute is derived from the S and D attributes as cap(S*D)/4 ms, where S is the
+//			number of symbols per codeword, D is the interleaving depth and cap() denotes rounding to the
+//			next higher integer. For [ITU-T G.993.2], this attribute is computed according to the formula in
+//			clause 9.7 of [ITUT G.993.2]. The actual interleaving delay is coded in milliseconds, rounded to
+//			the nearest millisecond. (R) (mandatory) (1 byte)
+//
+//		Actual Data Rate
+//			Actual data rate: This parameter reports the actual net data rate of the bearer channel,
+//			excluding the rate in the L1 and L2 states. In the L1 or L2 state, the parameter contains the
+//			net data rate in the previous L0 state. The data rate is coded in bits per second. (R)
+//			(mandatory) (4 bytes)
+//
+//		Previous Data Rate
+//			Previous data rate: This parameter reports the previous net data rate of the bearer channel just
+//			before the latest rate change event occurred, excluding transitions between the L0 state and the
+//			L1 or L2 states. A rate change can occur at a power management state transition, e.g., at full
+//			or short initialization, fast retrain or power down, or at a dynamic rate adaptation. The rate
+//			is coded in bits per second (R) (mandatory) (4 bytes)
+//
+//		Actual Impulse Noise Protection
+//			Actual impulse noise protection: The ACTINP attribute reports the actual INP on the bearer
+//			channel in the L0 state. In the L1 or L2 state, the attribute contains the INP in the previous
+//			L0 state. The value of this attribute is a number of DMT symbols, with a granularity of 0.1
+//			symbols. Its range is from 0 (0.0 symbols) to 254 (25.4 symbols). The special value 255
+//			indicates an ACTINP higher than 25.4. (R) (optional for [ITU-T G.992.1], mandatory for other
+//			xDSL Recommendations that support this attribute) (1 byte)
+//
+//		Actual Size Of Reed_Solomon Codeword
+//			Actual size of Reed-Solomon codeword: The NFEC attribute reports the actual Reed-Solomon
+//			codeword size used in the latency path in which the bearer channel is transported. The value is
+//			coded in bytes, and ranges from 0..255. (R) (mandatory for ITUT G.993.2 VDSL2, optional for
+//			others) (1 byte)
+//
+//		Actual Number Of Reed_Solomon Redundancy Bytes
+//			Actual number of Reed-Solomon redundancy bytes: The RFEC attribute reports the actual number of
+//			Reed-Solomon redundancy bytes per codeword used in the latency path in which the bearer channel
+//			is transported. The value is coded in bytes, and ranges from 0..16. The value 0 indicates no
+//			Reed-Solomon coding. (R) (mandatory for ITUT G.993.2 VDSL2, optional for others) (1 byte)
+//
+//		Actual Number Of Bits Per Symbol
+//			Actual number of bits per symbol: The LSYMB attribute reports the actual number of bits per
+//			symbol assigned to the latency path in which the bearer channel is transported, excluding
+//			trellis overhead. The value is coded in bits, and ranges from 0..65535. (R) (mandatory for [TU-T
+//			G.993.2 VDSL2, optional for others) (2 bytes)
+//
+//		Actual Interleaving Depth
+//			Actual interleaving depth: The INTLVDEPTH attribute reports the actual depth of the interleaver
+//			used in the latency path in which the bearer channel is transported. The value ranges from
+//			1..4096 in steps of 1. The value 1 indicates no interleaving. (R) (mandatory for ITU-T G.993.2
+//			VDSL2, optional for others) (2 bytes)
+//
+//		Actual Interleaving Block Length
+//			Actual interleaving block length: The INTLVBLOCK attribute reports the actual block length of
+//			the interleaver used in the latency path in which the bearer channel is transported. The value
+//			ranges from 4..255 in steps of 1. (R) (mandatory for ITU-T G.993.2 VDSL2, undefined for others)
+//			(1 byte)
+//
+//		Actual Latency Path
+//			Actual latency path: The LPATH attribute reports the index of the actual latency path in which
+//			the bearer channel is transported. Valid values are 0..3. In [ITUT G.992.1], the fast path is
+//			mapped to latency index 0; the interleaved path to index 1. (R) (mandatory for ITU-T G.993.2
+//			VDSL2, optional for others) (1 byte)
+//
+//		Actual Impulse Noise Protection Against R Epetitive E Lectrical I Mpulse N Oise Actinp_Rein
+//			Actual impulse noise protection against repetitive electrical impulse noise (ACTINP_REIN): If
+//			retransmission is used in a given transmit direction, this parameter reports the actual INP
+//			against REIN on the bearer channel. The INP of this attribute is equal to the integer value
+//			multiplied by 0.1 symbols. Valid values and usage are given in clause 7.5.2.9 of [ITU-T G.997.1]
+//			(R) (optional) (1 byte)
+//
+type XdslChannelDownstreamStatusData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdslchanneldownstreamstatusdataBME = &ManagedEntityDefinition{
+		Name:    "XdslChannelDownstreamStatusData",
+		ClassID: 102,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+		),
+		AllowedAttributeMask: 0XFFE0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("ActualInterleavingDelay", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint32Field("ActualDataRate", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3:  Uint32Field("PreviousDataRate", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  ByteField("ActualImpulseNoiseProtection", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  ByteField("ActualSizeOfReedSolomonCodeword", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  ByteField("ActualNumberOfReedSolomonRedundancyBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint16Field("ActualNumberOfBitsPerSymbol", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint16Field("ActualInterleavingDepth", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  ByteField("ActualInterleavingBlockLength", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: ByteField("ActualLatencyPath", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: ByteField("ActualImpulseNoiseProtectionAgainstREpetitiveELectricalIMpulseNOiseActinpRein", 0, mapset.NewSetWith(Read), false, false, true, false, 11),
+		},
+	}
+}
+
+// NewXdslChannelDownstreamStatusData (class ID 102 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 NewXdslChannelDownstreamStatusData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdslchanneldownstreamstatusdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdslchannelupstreamstatusdata.go b/vendor/github.com/cboling/omci/generated/xdslchannelupstreamstatusdata.go
new file mode 100644
index 0000000..47923d2
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdslchannelupstreamstatusdata.go
@@ -0,0 +1,149 @@
+/*
+ * 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 XdslChannelUpstreamStatusDataClassId ClassID = ClassID(103)
+
+var xdslchannelupstreamstatusdataBME *ManagedEntityDefinition
+
+// XdslChannelUpstreamStatusData (class ID #103)
+//	This ME contains upstream channel status data for an xDSL UNI. The ONU automatically creates or
+//	deletes instances of this ME upon the creation or deletion of a PPTP xDSL UNI part 1.
+//
+//	Relationships
+//		One or more instances of this ME are associated with an instance of an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The two MSBs of
+//			the first byte are the bearer channel ID. Excluding the first 2 bits of the first byte, the
+//			remaining part of the ME ID is identical to that of this ME's parent PPTP xDSL UNI part 1. (R)
+//			(mandatory) (2 bytes)
+//
+//		Actual Interleaving Delay
+//			Actual interleaving delay: This attribute is the actual one-way interleaving delay introduced by
+//			the PMS-TC between the alpha and beta reference points, excluding the L1 and L2 states. In the
+//			L1 and L2 states, this attribute contains the interleaving delay in the previous L0 state. For
+//			ADSL, this attribute is derived from the S and D attributes as cap(S*D)/4 ms, where S is the
+//			number of symbols per codeword, D is the interleaving depth and cap() denotes rounding to the
+//			next higher integer. For [ITU-T G.993.2], this attribute is computed according to the formula in
+//			clause 9.7 of [ITUT G.993.2]. The actual interleaving delay is coded in milliseconds, rounded to
+//			the nearest millisecond. (R) (mandatory) (1 byte)
+//
+//		Actual Data Rate
+//			Actual data rate: This parameter reports the actual net data rate of the bearer channel,
+//			excluding the L1 and L2 states. In the L1 or L2 state, the parameter contains the net data rate
+//			in the previous L0 state. The data rate is coded in bits per second. (R) (mandatory) (4 bytes)
+//
+//		Previous Data Rate
+//			Previous data rate: This parameter reports the previous net data rate of the bearer channel just
+//			before the latest rate change event occurred, excluding transitions between the L0 state and the
+//			L1 or L2 state. A rate change can occur at a power management state transition, e.g., at full or
+//			short initialization, fast retrain or power down, or at a dynamic rate adaptation. The rate is
+//			coded in bits per second. (R) (mandatory) (4 bytes)
+//
+//		Actual Impulse Noise Protection
+//			Actual impulse noise protection: The ACTINP attribute reports the actual INP on the bearer
+//			channel in the L0 state. In the L1 or L2 state, the attribute contains the INP in the previous
+//			L0 state. The value is coded in fractions of DMT symbols with a granularity of 0.1 symbols. The
+//			range is from 0 (0.0 symbols) to 254 (25.4 symbols). The special value 255 indicates an ACTINP
+//			higher than 25.4. (R) (mandatory for ITU-T G.993.2 VDSL2, optional for other xDSL
+//			Recommendations that support it) (1 byte)
+//
+//		Impulse Noise Protection Reporting Mode
+//			Impulse noise protection reporting mode: The INPREPORT attribute reports the method used to
+//			compute the ACTINP. If set to 0, the ACTINP is computed according to the INP_no_erasure formula
+//			(clause 9.6 of [ITUT G.993.2]). If set to 1, ACTINP is the value estimated by the xTU receiver.
+//			(R) (mandatory for ITU-T G.993.2 VDSL2) (1 byte)
+//
+//		Actual Size Of Reed_Solomon Codeword
+//			Actual size of Reed-Solomon codeword: The NFEC attribute reports the actual Reed-Solomon
+//			codeword size used in the latency path in which the bearer channel is transported. Its value is
+//			coded in bytes in the range 0..255. (R) (mandatory for ITU-T G.993.2 VDSL2, optional for others)
+//			(1 byte)
+//
+//		Actual Number Of Reed_Solomon Redundancy Bytes
+//			Actual number of Reed-Solomon redundancy bytes: The RFEC attribute reports the actual number of
+//			Reed-Solomon redundancy bytes per codeword used in the latency path in which the bearer channel
+//			is transported. Its value is coded in bytes in the range 0..16. The value 0 indicates no Reed-
+//			Solomon coding. (R) (mandatory for ITUT G.993.2 VDSL2, optional for others) (1 byte)
+//
+//		Actual Number Of Bits Per Symbol
+//			Actual number of bits per symbol: The LSYMB attribute reports the actual number of bits per
+//			symbol assigned to the latency path in which the bearer channel is transported, excluding
+//			trellis overhead. Its value is coded in bits in the range 0..65535. (R) (mandatory for
+//			ITUT G.993.2 VDSL2, optional for others) (2 bytes)
+//
+//		Actual Interleaving Depth
+//			Actual interleaving depth: The INTLVDEPTH attribute reports the actual depth of the interleaver
+//			used in the latency path in which the bearer channel is transported. Its value ranges from
+//			1..4096 in steps of 1. The value 1 indicates no interleaving. (R) (mandatory for ITU-T G.993.2
+//			VDSL2, optional for others) (2 bytes)
+//
+//		Actual Interleaving Block Length
+//			Actual interleaving block length: The INTLVBLOCK attribute reports the actual block length of
+//			the interleaver used in the latency part in which the bearer channel is transported. Its value
+//			ranges from 4..255 in steps of 1. (R) (mandatory forITU-T G.993.2 VDSL2, optional for others)
+//			(1 byte)
+//
+//		Actual Latency Path
+//			Actual latency path: The LPATH attribute reports the index of the actual latency path in which
+//			the bearer channel is transported. Valid values are 0..3. In [ITUT G.992.1], the fast path is
+//			mapped to latency index 0; the interleaved path to index 1. (R) (mandatory for ITU-T G.993.2
+//			VDSL2, optional for others) (1 byte)
+//
+type XdslChannelUpstreamStatusData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdslchannelupstreamstatusdataBME = &ManagedEntityDefinition{
+		Name:    "XdslChannelUpstreamStatusData",
+		ClassID: 103,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+		),
+		AllowedAttributeMask: 0XFFE0,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  ByteField("ActualInterleavingDelay", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint32Field("ActualDataRate", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3:  Uint32Field("PreviousDataRate", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  ByteField("ActualImpulseNoiseProtection", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  ByteField("ImpulseNoiseProtectionReportingMode", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  ByteField("ActualSizeOfReedSolomonCodeword", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  ByteField("ActualNumberOfReedSolomonRedundancyBytes", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint16Field("ActualNumberOfBitsPerSymbol", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint16Field("ActualInterleavingDepth", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: ByteField("ActualInterleavingBlockLength", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: ByteField("ActualLatencyPath", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+		},
+	}
+}
+
+// NewXdslChannelUpstreamStatusData (class ID 103 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 NewXdslChannelUpstreamStatusData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdslchannelupstreamstatusdataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdsllineconfigurationprofilepart2.go b/vendor/github.com/cboling/omci/generated/xdsllineconfigurationprofilepart2.go
new file mode 100644
index 0000000..be4d045
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdsllineconfigurationprofilepart2.go
@@ -0,0 +1,175 @@
+/*
+ * 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 XdslLineConfigurationProfilePart2ClassId ClassID = ClassID(105)
+
+var xdsllineconfigurationprofilepart2BME *ManagedEntityDefinition
+
+// XdslLineConfigurationProfilePart2 (class ID #105)
+//	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 profile parts).
+//
+//	Relationships
+//		An instance of this ME may be associated with zero or more instances of an xDSL UNI.
+//
+//	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)
+//
+//		Downstream Minimum Time Interval For Upshift Rate Adaptation
+//			Downstream minimum time interval for upshift rate adaptation: This parameter defines the
+//			interval during which the downstream noise margin must remain above the downstream upshift noise
+//			margin before the xTU-R attempts to increase the downstream net data rate. Its value ranges from
+//			0 to 16383 s. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Upstream Minimum Time Interval For Upshift Rate Adaptation
+//			Upstream minimum time interval for upshift rate adaptation: This parameter defines the interval
+//			during which the upstream noise margin must remain above the upstream upshift noise margin
+//			before the xTU-C attempts to increase the upstream net data rate. Its value ranges from 0 to
+//			16383 s. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Downstream Downshift Noise Margin
+//			Downstream downshift noise margin: If the downstream noise margin is below the downstream
+//			downshift noise margin and remains there for more than the downstream minimum time interval for
+//			downshift rate adaptation, the xTU-R attempts to decrease the downstream net data rate. This
+//			attribute's value ranges from 0 (0.0 dB) to 310 (31.0 dB). (R, W, setbycreate) (optional)
+//			(2 bytes)
+//
+//		Upstream Downshift Noise Margin
+//			Upstream downshift noise margin: If the upstream noise margin is below the upstream downshift
+//			noise margin and remains there for more than the upstream minimum time interval for downshift
+//			rate adaptation, the xTUC attempts to decrease the upstream net data rate. This attribute's
+//			value ranges from 0 (0.0 dB) to 310 (31.0 dB). (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Downstream Minimum Time Interval For Downshift Rate Adaptation
+//			Downstream minimum time interval for downshift rate adaptation: This parameter defines the
+//			interval during which the downstream noise margin must remain below the downstream downshift
+//			noise margin before the xTU-R attempts to decrease the downstream net data rate. Its value
+//			ranges from 0 to 16383 s. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Upstream Minimum Time Interval For Downshift Rate Adaptation
+//			Upstream minimum time interval for downshift rate adaptation: This parameter defines the
+//			interval during which the upstream noise margin must remain below the upstream downshift noise
+//			margin before the xTU-C attempts to decrease the upstream net data rate. Its value ranges from 0
+//			to 16383 s. (R, W, setbycreate) (optional) (2 bytes)
+//
+//		Xtu Impedance State Forced
+//			(R, W, setbycreate) (optional) (1 byte)
+//
+//		L0_Time
+//			L0-time:	This parameter specifies the minimum time between an exit from the L2 state and the
+//			next entry into the L2 state. It is only valid for [ITUT G.992.3], [ITUT G.992.4] and
+//			[ITUT G.992.5]. It ranges from 0 to 255 s. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		L2_Time
+//			L2-time:	This parameter specifies the minimum time between an entry into the L2 state and the
+//			first power trim in the L2 state, or between two consecutive power trims in the L2 state. It is
+//			only valid for [ITUT G.992.3], [ITUT G.992.4] and [ITUT G.992.5]. It ranges from 0 to 255 s. (R,
+//			W, setbycreate) (mandatory) (1 byte)
+//
+//		Downstream Maximum Nominal Power Spectral Density
+//			Downstream maximum nominal power spectral density: This attribute specifies the maximum nominal
+//			transmit PSD in the downstream direction during initialization and showtime. A single
+//			MAXNOMPSDds attribute is defined per mode enabled in the xTSE line configuration attribute. It
+//			is only valid for [ITUT G.992.3], [ITUT G.992.4] and [ITUT G.992.5]. Its value ranges from 0
+//			(60.0 dBm/Hz) to 300 (–30 dBm/Hz). (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Upstream Maximum Nominal Power Spectral Density
+//			Upstream maximum nominal power spectral density: This attribute specifies the maximum nominal
+//			transmit PSD in the upstream direction during initialization and showtime. A single MAXNOMPSDus
+//			attribute is defined per mode enabled in the xTSE line configuration attribute. It is only valid
+//			for [ITUT G.992.3], [ITUT G.992.4] and [ITUT G.993.2]. Its value ranges from 0 (–60.0 dBm/Hz) to
+//			300 (–30 dBm/Hz). (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Downstream Maximum Nominal Aggregate Transmit Power
+//			Downstream maximum nominal aggregate transmit power: This attribute specifies the maximum
+//			nominal aggregate transmit power in the downstream direction during initialization and showtime.
+//			It is only valid for [ITUT G.992.3], [ITUT G.992.4], [ITUT G.992.5] and [ITUT G.993.2]. Its
+//			value ranges from 0 (0.0 dBm) to 255 (25.5 dBm). (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Upstream Maximum Nominal Aggregate Transmit Power
+//			Upstream maximum nominal aggregate transmit power: This parameter specifies the maximum nominal
+//			aggregate transmit power in the upstream direction during initialization and showtime. It is
+//			only valid for [ITUT G.992.3], [ITUT G.992.4] and [ITUT G.992.5]. Its value ranges from 0
+//			(0.0 dBm) to 255 (25.5 dBm). (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Upstream Maximum Aggregate_Receive Power
+//			Upstream maximum aggregate receive power: This parameter specifies the maximum upstream
+//			aggregate receive power over a set of subcarriers, as defined in the relevant Recommendation.
+//			The xTU-C requests an upstream power cutback such that the upstream aggregate receive power over
+//			that set of subcarriers is at or below the configured maximum value. It is only valid for
+//			[ITUT G.992.3], [ITUT G.992.4] and [ITUT G.992.5]. This attribute ranges from 0 (25.5 dBm) to
+//			510 (+25.5 dBm). The special value 0xFFFF indicates that no upstream maximum aggregate receive
+//			power limit is to be applied. (R, W setbycreate) (mandatory) (2 bytes)
+//
+//		Vdsl2 Transmission System Enabling
+//			VDSL2 transmission system enabling: This configuration attribute extends the transmission system
+//			coding types to be allowed by the xTU-C. It is a bit map, defined as octet 8 (bits 57..64) in
+//			Table 9.7.12-1. (R, W, setbycreate) (optional) (1 byte)
+//
+type XdslLineConfigurationProfilePart2 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdsllineconfigurationprofilepart2BME = &ManagedEntityDefinition{
+		Name:    "XdslLineConfigurationProfilePart2",
+		ClassID: 105,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFE,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  Uint16Field("DownstreamMinimumTimeIntervalForUpshiftRateAdaptation", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 1),
+			2:  Uint16Field("UpstreamMinimumTimeIntervalForUpshiftRateAdaptation", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 2),
+			3:  Uint16Field("DownstreamDownshiftNoiseMargin", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 3),
+			4:  Uint16Field("UpstreamDownshiftNoiseMargin", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 4),
+			5:  Uint16Field("DownstreamMinimumTimeIntervalForDownshiftRateAdaptation", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 5),
+			6:  Uint16Field("UpstreamMinimumTimeIntervalForDownshiftRateAdaptation", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 6),
+			7:  ByteField("XtuImpedanceStateForced", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 7),
+			8:  ByteField("L0Time", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 8),
+			9:  ByteField("L2Time", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 9),
+			10: Uint16Field("DownstreamMaximumNominalPowerSpectralDensity", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 10),
+			11: Uint16Field("UpstreamMaximumNominalPowerSpectralDensity", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 11),
+			12: ByteField("DownstreamMaximumNominalAggregateTransmitPower", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 12),
+			13: ByteField("UpstreamMaximumNominalAggregateTransmitPower", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 13),
+			14: Uint16Field("UpstreamMaximumAggregateReceivePower", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: ByteField("Vdsl2TransmissionSystemEnabling", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, true, false, 15),
+		},
+	}
+}
+
+// NewXdslLineConfigurationProfilePart2 (class ID 105 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 NewXdslLineConfigurationProfilePart2(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdsllineconfigurationprofilepart2BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdsllineconfigurationprofilepart3.go b/vendor/github.com/cboling/omci/generated/xdsllineconfigurationprofilepart3.go
new file mode 100644
index 0000000..9623bed
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdsllineconfigurationprofilepart3.go
@@ -0,0 +1,192 @@
+/*
+ * 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 XdslLineConfigurationProfilePart3ClassId ClassID = ClassID(106)
+
+var xdsllineconfigurationprofilepart3BME *ManagedEntityDefinition
+
+// XdslLineConfigurationProfilePart3 (class ID #106)
+//	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 profile parts).
+//
+//	Relationships
+//		An instance of this ME may be associated with zero or more instances of an xDSL UNI.
+//
+//	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)
+//
+//		Loop Diagnostics Mode Forced Ldsf
+//			Only while the line power management state is L3 can the line be forced into loop diagnostic
+//			mode. When loop diagnostic procedures complete successfully, the ONU resets this attribute to 0.
+//			The line remains in the L3 idle state. The loop diagnostics data are available at least until
+//			the line is forced to the L0 state. As long as loop diagnostic procedures have not completed
+//			successfully, attempts are made to do so, until the loop diagnostic mode is no longer forced on
+//			the line through this configuration parameter. If loop diagnostic procedures cannot be completed
+//			successfully after a vendordiscretionary number of retries or within a vendor-discretionary
+//			timeout, then an initialization failure occurs. (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Automode Cold Start Forced
+//			Automode is defined as the case where multiple operation modes are enabled in xTSE (Table
+//			9.7.12-1) and where the selection of the operation mode to be used for transmission depends, not
+//			only on the common capabilities of both xTUs (as exchanged in [ITU-T G.994.1]), but also on
+//			achievable data rates under given loop conditions. (R, W, setbycreate) (mandatory if automode is
+//			supported) (1 byte)
+//
+//		L2 Atpr
+//			L2ATPR:	This parameter specifies the maximum aggregate transmit power reduction that can be
+//			performed in the L2 request (i.e., at the transition of L0 to L2 state) or through a single
+//			power trim in the L2 state. It is only valid for [ITUT G.992.3], [ITUT G.992.4] and
+//			[ITUT G.992.5]. This attribute ranges from 0 (0 dB) dB to 31 (31 dB). (R, W, setbycreate)
+//			(mandatory) (1 byte)
+//
+//		L2 Atprt
+//			L2ATPRT:	This parameter specifies the total maximum aggregate transmit power reduction (in
+//			decibels) that can be performed in an L2 state. This is the sum of all reductions of L2 requests
+//			(i.e., at transitions from L0 to L2 state) and power trims. This attribute ranges from 0 (0 dB)
+//			dB to 31 (31 dB). (R, W, setbycreate) (mandatory) (1 byte)
+//
+//		Force Inp Downstream
+//			Force INP downstream: When set to 1, the FORCEINPds attribute forces the framer settings of all
+//			downstream bearer channels to be selected such that the impulse noise protection (INP) computed
+//			according to the formula specified in the relevant Recommendation is greater than or equal to
+//			the minimal INP requirement. The default value 0 disables this function. (R, W) (mandatory for
+//			[ITU-T G.993.2], optional for other Recommendations that support it) (1 byte)
+//
+//		Force Inp Upstream
+//			Force INP upstream: When set to 1, the FORCEINPus attribute forces the framer settings of all
+//			upstream bearer channels to be selected such that the INP computed according to the formula
+//			specified in the relevant Recommendation is greater than or equal to the minimal INP
+//			requirement. The default value 0 disables this function. (R, W) (mandatory for [ITU-T G.993.2],
+//			optional for other Recommendations that support it) (1 byte)
+//
+//		Update Request Flag For Near_End Test Parameters
+//			Update request flag for near-end test parameters: The UPDATE-TEST-NE attribute forces an update
+//			of all near-end test parameters that can be updated during showtime in [ITU-T G.993.2]. Update
+//			is triggered by setting this attribute to 1, whereupon the near-end test parameters are expected
+//			to be updated within 10 s, and the ONU should reset the attribute value to 0. The update request
+//			flag is independent of any autonomous update process in the system. The update request attribute
+//			must be prepared to accept another set after a period not to exceed 3 min, a period that starts
+//			when the flag is set via the OMCI or by an autonomous process in the system. (R, W) (optional)
+//			(1 byte)
+//
+//		Update Request Flag For Far_End Test Parameters
+//			Update request flag for far-end test parameters: The UPDATE-TEST-FE attribute forces an update
+//			of all far-end test parameters that can be updated during showtime in [ITU-T G.993.2]. Update is
+//			triggered by setting this attribute to 1, whereupon the far-end test parameters are expected to
+//			be updated within 10 s, and the ONU should reset the attribute value to 0. The update request
+//			flag is independent of any autonomous update process in the system. The update request attribute
+//			must be prepared to accept another set after a period not to exceed 3 min, a period that starts
+//			when the flag is set via the OMCI or by an autonomous process in the system. (R, W) (optional)
+//			(1 byte)
+//
+//		Inm Inter Arrival Time Offset Upstream
+//			INM inter-arrival time offset upstream: INMIATOus is the inter-arrival time (IAT) offset that
+//			the xTU-C receiver uses to determine in which bin of the IAT histogram the IAT is reported.
+//			Valid values for INMIATO range from 3 to 511 discrete multi-tone (DMT) symbols in steps of 1 DMT
+//			symbol. (R, W) (optional) (2 bytes)
+//
+//		Inm Inter_Arrival Time Step Upstream
+//			INM inter-arrival time step upstream: INMIATSus is the IAT step that the xTU-C receiver uses to
+//			determine in which bin of the IAT histogram the IAT is reported. Valid values for INMIATS range
+//			from 0 to 7 in steps of 1. (R, W) (optional) (1 byte)
+//
+//		Inm Cluster Continuation Value Upstream
+//			INM cluster continuation value upstream: INMCCus is the cluster continuation value that the
+//			xTU-C receiver uses in the cluster indication process described in the applicable
+//			Recommendation. Valid values for INMCC range from 0 to 64 DMT symbols in steps of 1 DMT symbol.
+//			(R, W) (optional) (1 byte)
+//
+//		Inm Equivalent Inp Mode Upstream
+//			INM equivalent INP mode upstream: INM_INPEQ_MODEus is the INM equivalent INP mode that the xTU-C
+//			receiver uses in the computation of the equivalent INP, as defined in the applicable
+//			Recommendation. Valid values for INM_INPEQ_MODE are 0..4. (R, W) (optional) (1 byte)
+//
+//		Inm Inter Arrival Time Offset Downstream
+//			INM inter-arrival time offset downstream: INMIATOds is the IAT offset that the xTU-R receiver
+//			uses to determine in which bin of the IAT histogram the IAT is reported. Valid values for
+//			INMIATO range from 3 to 511 DMT symbols in steps of 1 DMT symbol. (R, W) (optional) (2 bytes)
+//
+//		Inm Inter_Arrival Time Step Downstream
+//			INM inter-arrival time step downstream: INMIATSds is the IAT step that the xTU-R receiver uses
+//			to determine in which bin of the IAT histogram the IAT is reported. Valid values for INMIATS
+//			range from 0 to 7 in steps of 1. (R, W) (optional) (1 byte)
+//
+//		Inm Cluster Continuation Value Downstream
+//			INM cluster continuation value downstream: INMCCds is the cluster continuation value that the
+//			xTU-R receiver uses in the cluster indication process described in the applicable
+//			Recommendation. Valid values for INMCC range from 0 to 64 DMT symbols in steps of 1 DMT symbol.
+//			(R, W) (optional) (1 byte)
+//
+//		Inm Equivalent Inp Mode Downstream
+//			INM equivalent INP mode downstream: INM_INPEQ_MODEds is the INM equivalent INP mode that the
+//			xTU-R receiver uses in the computation of the equivalent INP, as defined in the applicable
+//			Recommendation. Valid values for INM_INPEQ_MODE are 0..4. (R, W) (optional) (1 byte)
+//
+type XdslLineConfigurationProfilePart3 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdsllineconfigurationprofilepart3BME = &ManagedEntityDefinition{
+		Name:    "XdslLineConfigurationProfilePart3",
+		ClassID: 106,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("LoopDiagnosticsModeForcedLdsf", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2:  ByteField("AutomodeColdStartForced", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  ByteField("L2Atpr", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 3),
+			4:  ByteField("L2Atprt", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 4),
+			5:  ByteField("ForceInpDownstream", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+			6:  ByteField("ForceInpUpstream", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 6),
+			7:  ByteField("UpdateRequestFlagForNearEndTestParameters", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 7),
+			8:  ByteField("UpdateRequestFlagForFarEndTestParameters", 0, mapset.NewSetWith(Read, Write), true, false, true, false, 8),
+			9:  Uint16Field("InmInterArrivalTimeOffsetUpstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 9),
+			10: ByteField("InmInterArrivalTimeStepUpstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 10),
+			11: ByteField("InmClusterContinuationValueUpstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 11),
+			12: ByteField("InmEquivalentInpModeUpstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 12),
+			13: Uint16Field("InmInterArrivalTimeOffsetDownstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 13),
+			14: ByteField("InmInterArrivalTimeStepDownstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 14),
+			15: ByteField("InmClusterContinuationValueDownstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 15),
+			16: ByteField("InmEquivalentInpModeDownstream", 0, mapset.NewSetWith(Read, Write), false, false, true, false, 16),
+		},
+	}
+}
+
+// NewXdslLineConfigurationProfilePart3 (class ID 106 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 NewXdslLineConfigurationProfilePart3(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdsllineconfigurationprofilepart3BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdsllineinventoryandstatusdatapart1.go b/vendor/github.com/cboling/omci/generated/xdsllineinventoryandstatusdatapart1.go
new file mode 100644
index 0000000..46346fc
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdsllineinventoryandstatusdatapart1.go
@@ -0,0 +1,164 @@
+/*
+ * 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 XdslLineInventoryAndStatusDataPart1ClassId ClassID = ClassID(100)
+
+var xdsllineinventoryandstatusdatapart1BME *ManagedEntityDefinition
+
+// XdslLineInventoryAndStatusDataPart1 (class ID #100)
+//	This ME contains part 1 of the line inventory and status data for an xDSL UNI. The ONU
+//	automatically creates or deletes an instance of this ME upon the creation or deletion of a PPTP
+//	xDSL UNI part 1.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP xDSL UNI part 1. (R)
+//			(mandatory) (2 bytes)
+//
+//		Xtu_C G.994.1 Vendor Id
+//			xTU-C G.994.1 vendor ID: This is the vendor ID as inserted by the xTU-C in the ITUT G.994.1 CL
+//			message. It comprises 8 octets, including a country code followed by a (regionally allocated)
+//			provider code, as defined in [ITUT T.35]. (R) (mandatory) (8 bytes)
+//
+//		Xtu_R G.994.1 Vendor Id
+//			xTU-R G.994.1 vendor ID: This is the vendor ID as inserted by the xTU-R in the ITUT G.994.1 CLR
+//			message. It comprises 8 binary octets, with the same format as the xTUC ITUT G.994.1 vendor ID.
+//			(R) (mandatory) (8 bytes)
+//
+//		Xtu_C System Vendor Id
+//			xTU-C system vendor ID: This is the vendor ID as inserted by the xTU-C in the overhead messages
+//			of [ITU-T G.992.3] and [ITU-T G.992.4]. It comprises 8 binary octets, with the same format as
+//			the xTU-C ITUT G.994.1 vendor ID. (R) (mandatory) (8 bytes)
+//
+//		Xtu_R System Vendor Id
+//			xTU-R system vendor ID: This is the vendor ID as inserted by the xTU-R in the embedded
+//			operations channel and overhead messages of [ITU-T G.992.3] and [ITUT G.992.4]. It comprises 8
+//			binary octets, with the same format as the xTU-C ITUT G.994.1 vendor ID. (R) (mandatory)
+//			(8 bytes)
+//
+//		Xtu_C Version Number
+//			xTU-C version number: This is the vendorspecific version number as inserted by the xTUC in the
+//			overhead messages of [ITU-T G.992.3] and [ITU-T G.992.4]. It comprises up to 16 binary octets.
+//			(R) (mandatory) (16 bytes)
+//
+//		Xtu_R Version Number
+//			xTU-R version number: This is the version number as inserted by the xTUR in the embedded
+//			operations channel of [ITU-T G.992.1] or [ITU-T G.992.2], or the overhead messages of [ITU-T
+//			G.992.3], [ITU-T G.992.4], [ITU-T G.992.5] and [ITU-T G.993.2]. The attribute value may be
+//			vendor-specific, but is recommended to comprise up to 16 ASCII characters, null-terminated if it
+//			is shorter than 16. The string should contain the xTU-R firmware version and the xTU-R model,
+//			encoded in that order and separated by a space character: "<xTU-R firmware version><xTU-R
+//			model>". It is recognized that legacy xTU-Rs may not support this format. (R) (mandatory)
+//			(16 bytes)
+//
+//		Xtu_C Serial Number Part 1
+//			xTU-C serial number part 1: The vendorspecific serial number inserted by the xTU-C in the
+//			overhead messages of [ITU-T G.992.3] and [ITU-T G.992.4] comprises up to 32 ASCII characters,
+//			null terminated if it is shorter than 32 characters. This attribute contains the first 16
+//			characters. (R) (mandatory) (16 bytes)
+//
+//		Xtu_C Serial Number Part 2
+//			xTU-C serial number part 2: This attribute contains the second 16 characters of the xTU-C serial
+//			number. (R) (mandatory) (16 bytes)
+//
+//		Xtu_R Serial Number Part 1
+//			xTU-R serial number part 1: The serial number inserted by the xTU-R in the embedded operations
+//			channel of [ITU-T G.992.1] or [ITU-T G.992.2], or the overhead messages of [ITU-T G.992.3],
+//			[ITU-T G.992.4], [ITU-T G.992.5] and [ITUT G.993.2], comprises up to 32 ASCII characters,
+//			nullterminated if it is shorter than 32. It is recommended that the equipment serial number, the
+//			equipment model and the equipment firmware version, encoded in that order and separated by space
+//			characters, be contained: "<equipment serial number><equipment model><equipment firmware
+//			version>". It is recognized that legacy xTU-Rs may not support this format. This attribute
+//			contains the first 16 characters. (R) (mandatory) (16 bytes)
+//
+//		Xtu_R Serial Number Part 2
+//			xTU-R serial number part 2: This attribute contains the second 16 characters of the xTU-R serial
+//			number. (R) (mandatory) (16 bytes)
+//
+//		Xtu_C Self Test Results
+//			xTU-C selftest results: This parameter reports the xTU-C self-test result. It is coded in two
+//			fields. The most significant octet is 0 if the self-test passed and 1 if it failed. The three
+//			least significant octets are a vendor-discretionary integer that can be interpreted in
+//			combination with [ITU-T G.994.1] and the system vendor ID. (R) (mandatory) (4 bytes)
+//
+//		Xtu_R Self Test Results
+//			xTU-R selftest results: This parameter defines the xTU-R self-test result. It is coded in two
+//			fields. The most significant octet is 0 if the self-test passed and 1 if it failed. The three
+//			least significant octets are a vendor-discretionary integer that can be interpreted in
+//			combination with [ITU-T G.994.1] and the system vendor ID. (R) (mandatory) (4 bytes)
+//
+//		Xtu_C Transmission System Capability
+//			NOTE 1 – This attribute is only 7 bytes long. An eighth byte identifying VDSL2 capabilities is
+//			defined in the VDSL2 line inventory and status data part 1 ME.
+//
+//		Xtu_R Transmission System Capability
+//			NOTE 2 – This attribute is only 7 bytes long. An eighth byte identifying VDSL2 capabilities is
+//			defined in the VDSL2 line inventory and status data part 2 ME.
+//
+//		Initialization Success_Failure Cause
+//			(R) (mandatory) (1 byte)
+//
+type XdslLineInventoryAndStatusDataPart1 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdsllineinventoryandstatusdatapart1BME = &ManagedEntityDefinition{
+		Name:    "XdslLineInventoryAndStatusDataPart1",
+		ClassID: 100,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+		),
+		AllowedAttributeMask: 0XFFFE,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  Uint64Field("XtuCG9941VendorId", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint64Field("XtuRG9941VendorId", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3:  Uint64Field("XtuCSystemVendorId", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint64Field("XtuRSystemVendorId", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  MultiByteField("XtuCVersionNumber", 16, nil, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  MultiByteField("XtuRVersionNumber", 16, nil, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  MultiByteField("XtuCSerialNumberPart1", 16, nil, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  MultiByteField("XtuCSerialNumberPart2", 16, nil, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  MultiByteField("XtuRSerialNumberPart1", 16, nil, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: MultiByteField("XtuRSerialNumberPart2", 16, nil, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint32Field("XtuCSelfTestResults", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint32Field("XtuRSelfTestResults", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: MultiByteField("XtuCTransmissionSystemCapability", 7, nil, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: MultiByteField("XtuRTransmissionSystemCapability", 7, nil, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: ByteField("InitializationSuccessFailureCause", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+		},
+	}
+}
+
+// NewXdslLineInventoryAndStatusDataPart1 (class ID 100 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 NewXdslLineInventoryAndStatusDataPart1(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdsllineinventoryandstatusdatapart1BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdsllineinventoryandstatusdatapart2.go b/vendor/github.com/cboling/omci/generated/xdsllineinventoryandstatusdatapart2.go
new file mode 100644
index 0000000..6da6e33
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdsllineinventoryandstatusdatapart2.go
@@ -0,0 +1,165 @@
+/*
+ * 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 XdslLineInventoryAndStatusDataPart2ClassId ClassID = ClassID(101)
+
+var xdsllineinventoryandstatusdatapart2BME *ManagedEntityDefinition
+
+// XdslLineInventoryAndStatusDataPart2 (class ID #101)
+//	This ME contains part 2 of the line inventory and status data for an xDSL UNI. The ONU
+//	automatically creates or deletes an instance of this ME upon the creation or deletion of a PPTP
+//	xDSL UNI part 1.
+//
+//	NOTE 1 – [ITU-T G.997.1] specifies that bit rate attributes have granularity of 1000 bit/s. If
+//	ITUT G.997.1 compliance is required, the ONU should only report values with this granularity.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP xDSL UNI part 1. (R)
+//			(mandatory) (2 bytes)
+//
+//		Xdsl Transmission System
+//			NOTE 2 – This attribute is only 7 bytes long. An eighth byte identifying VDSL2 capabilities in
+//			use is defined in the VDSL2 line inventory and status data part 1 ME.
+//
+//		Line Power Management State
+//			(R) (mandatory) (1 byte)
+//
+//		Downstream Line Attenuation
+//			NOTE 3 – [ITU-T G.993.2] specifies a per-band array to represent this attribute. The array is
+//			defined in the VDSL2 line inventory and status data part 3 ME. In an ITU-T G.993.2 context, the
+//			downstream line attenuation attribute should be set to 0 here, and populated in the VDSL2 line
+//			inventory and status data part 3 ME instead.
+//
+//		Upstream Line Attenuation
+//			NOTE 4 – [ITU-T G.993.2] specifies a per-band array to represent this attribute. The array is
+//			defined in the VDSL2 line inventory and status data part 3 ME. In an ITU-T G.993.2 context, the
+//			upstream line attenuation attribute should be set to 0 here, and populated in the VDSL2 line
+//			inventory and status data part 3 ME instead.
+//
+//		Downstream Signal Attenuation
+//			NOTE 6 – [ITU-T G.993.2] specifies a per-band array to represent this attribute. The array is
+//			defined in the VDSL2 line inventory and status data part 3 ME. In an ITU-T G.993.2 context, the
+//			downstream signal attenuation attribute should be set to 0 here, and populated in the VDSL2 line
+//			inventory and status data part 3 ME instead.
+//
+//		Upstream Signal Attenuation
+//			NOTE 8 – [ITU-T G.993.2] specifies a per-band array to represent this attribute. The array is
+//			defined in the VDSL2 line inventory and status data part 3 ME. In an ITU-T G.993.2 context, the
+//			upstream signal attenuation attribute should be set to 0 here, and populated in the VDSL2 line
+//			inventory and status data part 3 ME instead.
+//
+//		Downstream Snr Ratio Margin
+//			Downstream SNR ratio margin: The downstream SNR margin SNRMds is the maximum increase of noise
+//			power received at the xTUR, such that the BER requirements can still be met for all downstream
+//			bearer channels. The attribute value ranges from 0 (–64.0 dB) to 1270 (+63.0 dB). The special
+//			value 0xFFFF indicates that the attribute is out of range (R) (mandatory) (2 bytes)
+//
+//		Upstream Snr Margin
+//			Upstream SNR margin: The upstream SNR margin SNRMus is the maximum increase of noise power
+//			received at the xTUC, such that the BER requirements can still be met for all upstream bearer
+//			channels. The attribute value ranges from 0 (–64.0 dB) to 1270 (+63.0 dB). The special value
+//			0xFFFF indicates that the attribute is out of range. (R) (mandatory) (2 bytes)
+//
+//		Downstream Maximum Attainable Data Rate
+//			Downstream maximum attainable data rate: The ATTNDRds attribute indicates the maximum downstream
+//			net data rate currently attainable. The rate is coded in bits per second. (R) (mandatory)
+//			(4 bytes)
+//
+//		Upstream Maximum Attainable Data Rate
+//			Upstream maximum attainable data rate: The ATTNDRus attribute indicates the maximum upstream net
+//			data rate currently attainable. The rate is coded in bits per second. (R) (mandatory) (4 bytes)
+//
+//		Downstream Actual Power Spectrum Density
+//			Downstream actual power spectrum density: The ACTPSDds attribute is the average downstream
+//			transmit power spectrum density over the subcarriers in use (subcarriers to which downstream
+//			user data are allocated) delivered by the xTUC at the UC reference point, at the instant of
+//			measurement. The attribute value ranges from 0 (–90.0 dBm/Hz) to 900 (0.0 dBm/Hz). The special
+//			value (0xFFFF) indicates that the parameter is out of range. (R) (mandatory) (2 bytes)
+//
+//		Upstream Actual Power Spectrum Density
+//			Upstream actual power spectrum density: The ACTPSDus attribute is the average upstream transmit
+//			power spectrum density over the subcarriers in use (subcarriers to which upstream user data are
+//			allocated) delivered by the xTUR at the UR reference point, at the instant of measurement. The
+//			attribute value ranges from 0 (–90.0 dBm/Hz) to 900 (0.0 dBm/Hz). The special value 0xFFFF
+//			indicates that the attribute is out of range. (R) (mandatory) (2 bytes)
+//
+//		Downstream Actual Aggregate Transmit Power
+//			NOTE 9 – The downstream nominal aggregate transmit power may be taken as a best estimate of the
+//			parameter.
+//
+//		Upstream Actual Aggregate Transmit Power
+//			NOTE 10 – The upstream nominal aggregate transmit power may be taken as a best estimate of the
+//			parameter.
+//
+//		Initialization _ Last State Transmitted Downstream
+//			(R) (mandatory) (1 byte)
+//
+//		Initialization _ Last State Transmitted Upstream
+//			(R) (mandatory) (1 byte)
+//
+type XdslLineInventoryAndStatusDataPart2 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdsllineinventoryandstatusdatapart2BME = &ManagedEntityDefinition{
+		Name:    "XdslLineInventoryAndStatusDataPart2",
+		ClassID: 101,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  MultiByteField("XdslTransmissionSystem", 7, nil, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  ByteField("LinePowerManagementState", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3:  Uint16Field("DownstreamLineAttenuation", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint16Field("UpstreamLineAttenuation", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint16Field("DownstreamSignalAttenuation", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint16Field("UpstreamSignalAttenuation", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint16Field("DownstreamSnrRatioMargin", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint16Field("UpstreamSnrMargin", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint32Field("DownstreamMaximumAttainableDataRate", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("UpstreamMaximumAttainableDataRate", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint16Field("DownstreamActualPowerSpectrumDensity", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint16Field("UpstreamActualPowerSpectrumDensity", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint16Field("DownstreamActualAggregateTransmitPower", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint16Field("UpstreamActualAggregateTransmitPower", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: ByteField("InitializationLastStateTransmittedDownstream", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+			16: ByteField("InitializationLastStateTransmittedUpstream", 0, mapset.NewSetWith(Read), false, false, false, false, 16),
+		},
+	}
+}
+
+// NewXdslLineInventoryAndStatusDataPart2 (class ID 101 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 NewXdslLineInventoryAndStatusDataPart2(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdsllineinventoryandstatusdatapart2BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdsllineinventoryandstatusdatapart5.go b/vendor/github.com/cboling/omci/generated/xdsllineinventoryandstatusdatapart5.go
new file mode 100644
index 0000000..0d02d68
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdsllineinventoryandstatusdatapart5.go
@@ -0,0 +1,182 @@
+/*
+ * 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 XdslLineInventoryAndStatusDataPart5ClassId ClassID = ClassID(325)
+
+var xdsllineinventoryandstatusdatapart5BME *ManagedEntityDefinition
+
+// XdslLineInventoryAndStatusDataPart5 (class ID #325)
+//	This ME extends the attributes defined in the xDSL line inventory and status data parts 1..4.
+//	This ME reports FEXT and NEXT attributes, and pertains to Annex C of [ITUT G.992.3] (ADSL2) and
+//	Annex C of [ITUT G.992.5] (ADSL2plus).
+//
+//	Relationships
+//		This is one of the status data MEs associated with an xDSL UNI. The ONU automatically creates or
+//		deletes an instance of this ME upon creation or deletion of a PPTP xDSL UNI part 1 that supports
+//		these attributes.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP xDSL UNI part 1 ME. (R)
+//			(mandatory) (2 bytes)
+//
+//		Fext Downstream Snr Margin
+//			FEXT downstream SNR margin: The FEXT SNRMds attribute is the downstream SNR margin measured
+//			during FEXTR duration at the ATU-R. The attribute value ranges from 0 (–64.0 dB) to 1270
+//			(+63.0 dB). The special value 0xFFFF indicates that the attribute is out of range. (R)
+//			(mandatory) (2 bytes)
+//
+//		Next Downstream Snr Margin
+//			NEXT downstream SNR margin: The NEXT SNRMds attribute is the downstream SNR margin measured
+//			during NEXTR duration at the ATU-R. The attribute value ranges from 0 (–64.0 dB) to 1270
+//			(+63.0 dB). The special value 0xFFFF indicates that the attribute is out of range. (R)
+//			(mandatory) (2 bytes)
+//
+//		Fext Upstream Snr Margin
+//			FEXT upstream SNR margin: The FEXT SNRMus attribute is the upstream SNR margin (see clause
+//			7.5.1.16 of [ITUT G.997.1]) measured during FEXTC duration at the ATU-C. The attribute value
+//			ranges from 0 (–64.0 dB) to 1270 (+63.0 dB). The special value 0xFFFF indicates that the
+//			attribute is out of range. (R) (mandatory) (2 bytes)
+//
+//		Next Upstream Snr Margin
+//			NEXT upstream SNR margin: The NEXT SNRMus attribute is the upstream SNR margin (see clause
+//			7.5.1.16 of [ITUT G.997.1]) measured during NEXTC duration at the ATU-C. The attribute value
+//			ranges from 0 (–64.0 dB) to 1270 (+63.0 dB). The special value 0xFFFF indicates that the
+//			attribute is out of range. (R) (mandatory) (2 bytes)
+//
+//		Fext Downstream Maximum Attainable Data Rate
+//			FEXT downstream maximum attainable data rate: The FEXT ATTNDRds attribute is the maximum
+//			downstream net data rate calculated from FEXT downstream SNR(f) (see clause 7.5.1.28.3.1 of
+//			[ITUT G.997.1]). The rate is coded in bits per second. (R) (mandatory) (4 bytes)
+//
+//		Next Downstream Maximum Attainable Data Rate
+//			NEXT downstream maximum attainable data rate: The NEXT ATTNDRds attribute is the maximum
+//			downstream net data rate calculated from NEXT downstream SNR(f) (see clause 7.5.1.28.3.2 of
+//			[ITUT G.997.1]). The rate is coded in bits per second. (R) (mandatory) (4 bytes)
+//
+//		Fext Upstream Maximum Attainable Data Rate
+//			FEXT upstream maximum attainable data rate: The FEXT ATTNDRus attribute is the maximum upstream
+//			net data rate calculated from FEXT upstream SNR(f) (see clause 7.5.1.28.6.1 of [ITUT G.997.1]).
+//			The rate is coded in bits per second. (R) (mandatory) (4 bytes)
+//
+//		Next Upstream Maximum Attainable Data Rate
+//			NEXT upstream maximum attainable data rate: The NEXT ATTNDRus attribute is the maximum upstream
+//			net data rate calculated from NEXT upstream SNR(f) (see clause 7.5.1.28.6.2 of [ITUT G.997.1]).
+//			The rate is coded in bits per second. (R) (mandatory) (4 bytes)
+//
+//		Fext Downstream Actual Power Spectral Density
+//			FEXT downstream actual power spectral density: The FEXT ACTPSDds attribute is the average
+//			downstream transmit PSD over the used subcarriers (see clause 7.5.1.21.1 of [ITUT G.997.1])
+//			calculated from the REFPSDds and RMSGIds for FEXTR duration. The attribute value ranges from 0
+//			(–90.0 dBm/Hz) to 900 (0.0 dBm/Hz). The special value 0xFFFF indicates that the parameter is out
+//			of range. (R) (mandatory) (2 bytes)
+//
+//		Next Downstream Actual Power Spectral Density
+//			NEXT downstream actual power spectral density: The NEXT ACTPSDds attribute is the average
+//			downstream transmit PSD over the used subcarriers (see clause 7.5.1.21.2 of [ITUT G.997.1])
+//			calculated from the REFPSDds and RMSGIds for NEXTR duration. The attribute value ranges from 0
+//			(–90.0 dBm/Hz) to 900 (0.0 dBm/Hz). The special value 0xFFFF indicates that the parameter is out
+//			of range. (R) (mandatory) (2 bytes)
+//
+//		Fext Upstream Actual Power Spectral Density
+//			FEXT upstream actual power spectral density: The FEXT ACTPSDus attribute is the average upstream
+//			transmit PSD over the used subcarriers (see clause 7.5.1.22.1 of [ITUT G.997.1]) calculated from
+//			the REFPSDus and RMSGIus for FEXTC duration. The attribute value ranges from 0 (–90.0 dBm/Hz) to
+//			900 (0.0 dBm/Hz). The special value 0xFFFF indicates that the parameter is out of range. (R)
+//			(mandatory) (2 bytes)
+//
+//		Next Upstream Actual Power Spectral Density
+//			NEXT upstream actual power spectral density: The NEXT ACTPSDus attribute is the average upstream
+//			transmit PSD over the used subcarriers (see clause 7.5.1.22.2 of [ITUT G.997.1]) calculated from
+//			the REFPSDus and RMSGIus for NEXTC duration. The attribute value ranges from 0 (–90.0 dBm/Hz) to
+//			900 (0.0 dBm/Hz). The special value 0xFFFF indicates that the parameter is out of range. (R)
+//			(mandatory) (2 bytes)
+//
+//		Fext Downstream Actual Aggregate Transmit Power
+//			FEXT downstream actual aggregate transmit power: The FEXT ACTATPds attribute is the total amount
+//			of transmit power (see clause 7.5.1.24.1 of [ITUT G.997.1]) calculated from PSDds measured
+//			during FEXTR duration at the ATU-R. The attribute value ranges from 0 (–31.0 dBm) to 620
+//			(+31.0 dBm). The special value 0xFFFF indicates that the parameter is out of range. (R)
+//			(mandatory) (2 bytes)
+//
+//		Next Downstream Actual Aggregate Transmit Power
+//			NEXT downstream actual aggregate transmit power: The NEXT ACTATPds attribute is the total amount
+//			of transmit power (see clause 7.5.1.24.2 of [ITUT G.997.1]) calculated from PSDds measured
+//			during NEXTR duration at the ATU-R. The attribute value ranges from 0 (–31.0 dBm) to 620
+//			(+31.0 dBm). The special value 0xFFFF indicates that the parameter is out of range. (R)
+//			(mandatory) (2 bytes)
+//
+//		Fext Upstream Actual Aggregate Transmit Power
+//			FEXT upstream actual aggregate transmit power: The FEXT ACTATPus attribute is the total transmit
+//			power (see clause 7.5.1.25.1 of [ITUT G.997.1]) calculated from PSDus measured during FEXTC
+//			duration at the ATU-C. The attribute value ranges from 0 (–31.0 dBm) to 620 (+31.0 dBm). The
+//			special value 0xFFFF indicates that the parameter is out of range. (R) (mandatory) (2 bytes)
+//
+//		Next Upstream Actual Aggregate Transmit Power
+//			NEXT upstream actual aggregate transmit power: The NEXT ACTATPus attribute is the total transmit
+//			power (see clause 7.5.1.25.2 of [ITUT G.997.1]) calculated from PSDus measured during NEXTC
+//			duration at the ATU-C. The attribute value ranges from 0 (–31.0 dBm) to 620 (+31.0 dBm). The
+//			special value 0xFFFF indicates that the parameter is out of range. (R) (mandatory) (2 bytes)
+//
+type XdslLineInventoryAndStatusDataPart5 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdsllineinventoryandstatusdatapart5BME = &ManagedEntityDefinition{
+		Name:    "XdslLineInventoryAndStatusDataPart5",
+		ClassID: 325,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1:  Uint16Field("FextDownstreamSnrMargin", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("NextDownstreamSnrMargin", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3:  Uint16Field("FextUpstreamSnrMargin", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint16Field("NextUpstreamSnrMargin", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint32Field("FextDownstreamMaximumAttainableDataRate", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint32Field("NextDownstreamMaximumAttainableDataRate", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("FextUpstreamMaximumAttainableDataRate", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint32Field("NextUpstreamMaximumAttainableDataRate", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint16Field("FextDownstreamActualPowerSpectralDensity", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint16Field("NextDownstreamActualPowerSpectralDensity", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint16Field("FextUpstreamActualPowerSpectralDensity", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint16Field("NextUpstreamActualPowerSpectralDensity", 0, mapset.NewSetWith(Read), false, false, false, false, 12),
+			13: Uint16Field("FextDownstreamActualAggregateTransmitPower", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint16Field("NextDownstreamActualAggregateTransmitPower", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: Uint16Field("FextUpstreamActualAggregateTransmitPower", 0, mapset.NewSetWith(Read), false, false, false, false, 15),
+			16: Uint16Field("NextUpstreamActualAggregateTransmitPower", 0, mapset.NewSetWith(Read), false, false, false, false, 16),
+		},
+	}
+}
+
+// NewXdslLineInventoryAndStatusDataPart5 (class ID 325 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 NewXdslLineInventoryAndStatusDataPart5(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdsllineinventoryandstatusdatapart5BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdsllineinventoryandstatusdatapart8.go b/vendor/github.com/cboling/omci/generated/xdsllineinventoryandstatusdatapart8.go
new file mode 100644
index 0000000..2f2966b
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdsllineinventoryandstatusdatapart8.go
@@ -0,0 +1,103 @@
+/*
+ * 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 XdslLineInventoryAndStatusDataPart8ClassId ClassID = ClassID(414)
+
+var xdsllineinventoryandstatusdatapart8BME *ManagedEntityDefinition
+
+// XdslLineInventoryAndStatusDataPart8 (class ID #414)
+//	This ME extends the attributes defined in the xDSL line inventory and status data parts 1..4.
+//
+//	Relationships
+//		This is one of the status data MEs associated with an xDSL UNI. The ONU automatically creates or
+//		deletes an instance of this ME upon creation or deletion of a PPTP xDSL UNI part 1 that supports
+//		these attributes.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP xDSL UNI part 1 ME. (R)
+//			(mandatory) (2 bytes)
+//
+//		Retransmission Used Downstream Rtx_Usedds
+//			Retransmission used downstream (RTX_USEDds): This parameter specifies whether [ITU-T G.998.4]
+//			retransmission is used (i.e., active in showtime) in the downstream transmit direction. The
+//			valid range of values is given in clause 7.5.1.38 of [ITU-T G.997.1]. (R) (mandatory) (1 byte)
+//
+//		Retransmission Used Upstream Rtx_Usedus
+//			Retransmission used upstream (RTX_USEDus): This parameter specifies whether [ITUT G.998.4]
+//			retransmission is used (i.e., active in showtime) in the upstream transmit direction. The valid
+//			range of values is given in clause 7.5.1.38 of [ITU-T G.997.1]. (R) (mandatory) (1 byte)
+//
+//		Date_Time_Stamping Of Near_End Test Parameters Stamp_Test_Ne
+//			(R) (optional) (7 bytes)
+//
+//		Date_Time_Stamping Of Far_End Test Parameters Stamp_Test_Fe
+//			Date/time-stamping of far-end test parameters (STAMP-TEST-FE): This parameter indicates the
+//			date/time when the far-end test parameters that can change during showtime were last updated.
+//			See clause 7.5.1.36.4 of [ITUT G.997.1]. The format of this parameter is the same as STAMP-TEST-
+//			NE. (R) (optional) (7 bytes)
+//
+//		Date_Time_Stamping Of Last Successful Downstream Olr Operation Stamp_Olr_Ds
+//			Date/time-stamping of last successful downstream OLR operation (STAMP-OLR-ds): This parameter
+//			indicates the date/time of the last successful OLR execution in the downstream direction that
+//			has modified the bits or gains. See clause 7.5.1.37.1 of [ITU-T G.997.1]. The format of this
+//			parameter is the same as STAMP-TEST-NE. (R) (optional) (7 bytes)
+//
+//		Date_Time_Stamping Of Last Successful Upstream Olr Operation Stamp_Olr_Us
+//			Date/time-stamping of last successful upstream OLR operation (STAMP-OLR-us): This parameter
+//			indicates the date/time of the last successful OLR execution in the upstream direction that has
+//			modified the bits or gains. See clause 7.5.1.37.2 of [ITU-T G.997.1]. The format of this
+//			parameter is the same as STAMP-TEST-NE. (R) (optional) (7 bytes)
+//
+type XdslLineInventoryAndStatusDataPart8 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdsllineinventoryandstatusdatapart8BME = &ManagedEntityDefinition{
+		Name:    "XdslLineInventoryAndStatusDataPart8",
+		ClassID: 414,
+		MessageTypes: mapset.NewSetWith(
+			Get,
+		),
+		AllowedAttributeMask: 0XFC00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read), false, false, false, false, 0),
+			1: ByteField("RetransmissionUsedDownstreamRtxUsedds", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: ByteField("RetransmissionUsedUpstreamRtxUsedus", 0, mapset.NewSetWith(Read), false, false, false, false, 2),
+			3: MultiByteField("DateTimeStampingOfNearEndTestParametersStampTestNe", 7, nil, mapset.NewSetWith(Read), false, false, true, false, 3),
+			4: MultiByteField("DateTimeStampingOfFarEndTestParametersStampTestFe", 7, nil, mapset.NewSetWith(Read), false, false, true, false, 4),
+			5: MultiByteField("DateTimeStampingOfLastSuccessfulDownstreamOlrOperationStampOlrDs", 7, nil, mapset.NewSetWith(Read), false, false, true, false, 5),
+			6: MultiByteField("DateTimeStampingOfLastSuccessfulUpstreamOlrOperationStampOlrUs", 7, nil, mapset.NewSetWith(Read), false, false, true, false, 6),
+		},
+	}
+}
+
+// NewXdslLineInventoryAndStatusDataPart8 (class ID 414 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 NewXdslLineInventoryAndStatusDataPart8(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdsllineinventoryandstatusdatapart8BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdslsubcarriermaskingdownstreamprofile.go b/vendor/github.com/cboling/omci/generated/xdslsubcarriermaskingdownstreamprofile.go
new file mode 100644
index 0000000..decef59
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdslsubcarriermaskingdownstreamprofile.go
@@ -0,0 +1,91 @@
+/*
+ * 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 XdslSubcarrierMaskingDownstreamProfileClassId ClassID = ClassID(108)
+
+var xdslsubcarriermaskingdownstreamprofileBME *ManagedEntityDefinition
+
+// XdslSubcarrierMaskingDownstreamProfile (class ID #108)
+//	This ME contains the subcarrier masking downstream 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
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The value 0 is
+//			reserved. (R, set-by-create) (mandatory) (2 bytes)
+//
+//		Downstream Subcarrier Mask 1
+//			Downstream subcarrier mask 1: Subcarriers 1 to 128. (R, W, set-by-create) (mandatory) (16 bytes)
+//
+//		Downstream Subcarrier Mask 2
+//			Downstream subcarrier mask 2: Subcarriers 129 to 256. (R, W) (mandatory for modems that support
+//			NSCds > 128) (16 bytes)
+//
+//		Downstream Subcarrier Mask 3
+//			Downstream subcarrier mask 3: Subcarriers 257 to 384. (R, W) (mandatory for modems that support
+//			NSCds > 256) (16 bytes)
+//
+//		Downstream Subcarrier Mask 4
+//			Downstream subcarrier mask 4: Subcarriers 385 to 512. (R, W) (mandatory for modems that support
+//			NSCds > 384) (16 bytes)
+//
+//		Mask Valid
+//			(R, W) (mandatory) (1 byte)
+//
+type XdslSubcarrierMaskingDownstreamProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdslsubcarriermaskingdownstreamprofileBME = &ManagedEntityDefinition{
+		Name:    "XdslSubcarrierMaskingDownstreamProfile",
+		ClassID: 108,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: MultiByteField("DownstreamSubcarrierMask1", 16, nil, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+			2: MultiByteField("DownstreamSubcarrierMask2", 16, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 2),
+			3: MultiByteField("DownstreamSubcarrierMask3", 16, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 3),
+			4: MultiByteField("DownstreamSubcarrierMask4", 16, nil, mapset.NewSetWith(Read, Write), false, false, false, false, 4),
+			5: ByteField("MaskValid", 0, mapset.NewSetWith(Read, Write), false, false, false, false, 5),
+		},
+	}
+}
+
+// NewXdslSubcarrierMaskingDownstreamProfile (class ID 108 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 NewXdslSubcarrierMaskingDownstreamProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdslsubcarriermaskingdownstreamprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdslsubcarriermaskingupstreamprofile.go b/vendor/github.com/cboling/omci/generated/xdslsubcarriermaskingupstreamprofile.go
new file mode 100644
index 0000000..76d3dd0
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdslsubcarriermaskingupstreamprofile.go
@@ -0,0 +1,76 @@
+/*
+ * 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 XdslSubcarrierMaskingUpstreamProfileClassId ClassID = ClassID(109)
+
+var xdslsubcarriermaskingupstreamprofileBME *ManagedEntityDefinition
+
+// XdslSubcarrierMaskingUpstreamProfile (class ID #109)
+//	This ME contains the subcarrier masking upstream profile for an xDSL UNI. 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 the PPTP xDSL UNI part
+//		1.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The value 0 is
+//			reserved. (R, setbycreate) (mandatory) (2 bytes)
+//
+//		Upstream Subcarrier Mask
+//			Subcarrier number 1 is the lowest, and the number of xDSL subcarriers, upstream (NSCus) is the
+//			highest subcarrier that can be transmitted in the upstream direction. For [ITUT G.992.3],
+//			[ITUT G.992.4] and [ITUT G.992.5], it is defined in the corresponding Recommendation. For Annex
+//			A of [ITUT G.992.1] and [ITUT G.992.2], NSCus = 32 and for Annex B of [ITUT G.992.1], NSCus =
+//			64. (R, W, setbycreate) (mandatory) (8 bytes)
+//
+type XdslSubcarrierMaskingUpstreamProfile struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdslsubcarriermaskingupstreamprofileBME = &ManagedEntityDefinition{
+		Name:    "XdslSubcarrierMaskingUpstreamProfile",
+		ClassID: 109,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0X8000,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: Uint64Field("UpstreamSubcarrierMask", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 1),
+		},
+	}
+}
+
+// NewXdslSubcarrierMaskingUpstreamProfile (class ID 109 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 NewXdslSubcarrierMaskingUpstreamProfile(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdslsubcarriermaskingupstreamprofileBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdslxtu-cchannelperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/xdslxtu-cchannelperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..0c501ca
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdslxtu-cchannelperformancemonitoringhistorydata.go
@@ -0,0 +1,113 @@
+/*
+ * 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 XdslXtuCChannelPerformanceMonitoringHistoryDataClassId ClassID = ClassID(114)
+
+var xdslxtucchannelperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// XdslXtuCChannelPerformanceMonitoringHistoryData (class ID #114)
+//	This ME collects PM data of an xTUC to xTUR channel as seen from the xTU-C. Instances of this ME
+//	are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL bearer channel. Several instances may
+//		therefore be associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The two MSBs of
+//			the first byte are the bearer channel ID. Excluding the first 2 bits of the first byte, the
+//			remaining part of the ME ID is identical to that of this ME's parent PPTP xDSL UNI part 1. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Corrected Blocks
+//			Corrected blocks: This attribute counts blocks received with errors that were corrected on this
+//			channel. (R) (mandatory) (4 bytes)
+//
+//		Uncorrected Blocks
+//			Uncorrected blocks: This attribute counts blocks received with uncorrectable errors on this
+//			channel. (R) (mandatory) (4 bytes)
+//
+//		Transmitted Blocks
+//			Transmitted blocks:	This attribute counts encoded blocks transmitted on this channel. (R)
+//			(mandatory) (4 bytes)
+//
+//		Received Blocks
+//			Received blocks: This attribute counts encoded blocks received on this channel. (R) (mandatory)
+//			(4 bytes)
+//
+//		Code Violations
+//			Code violations: This attribute counts CRC-8 anomalies in the bearer channel. (R) (mandatory)
+//			(2 bytes)
+//
+//		Forward Error Corrections
+//			Forward error corrections: This attribute counts FEC anomalies in the bearer channel. (R)
+//			(mandatory) (2 bytes)
+//
+type XdslXtuCChannelPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdslxtucchannelperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "XdslXtuCChannelPerformanceMonitoringHistoryData",
+		ClassID: 114,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("CorrectedBlocks", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("UncorrectedBlocks", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("TransmittedBlocks", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint32Field("ReceivedBlocks", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint16Field("CodeViolations", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8: Uint16Field("ForwardErrorCorrections", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+		},
+	}
+}
+
+// NewXdslXtuCChannelPerformanceMonitoringHistoryData (class ID 114 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 NewXdslXtuCChannelPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdslxtucchannelperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdslxtu-cperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/xdslxtu-cperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..305f465
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdslxtu-cperformancemonitoringhistorydata.go
@@ -0,0 +1,155 @@
+/*
+ * 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 XdslXtuCPerformanceMonitoringHistoryDataClassId ClassID = ClassID(112)
+
+var xdslxtucperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// XdslXtuCPerformanceMonitoringHistoryData (class ID #112)
+//	This ME collects PM data on the xTUC to xTUR path as seen from the xTU-C. Instances of this ME
+//	are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP xDSL UNI part 1. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contain PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Loss Of Frame Seconds
+//			Loss of frame seconds: (R) (mandatory) (2 bytes)
+//
+//		Loss Of Signal Seconds
+//			Loss of signal seconds: (R) (mandatory) (2 bytes)
+//
+//		Loss Of Link Seconds
+//			Loss of link seconds: (R) (mandatory) (2 bytes)
+//
+//		Loss Of Power Seconds
+//			Loss of power seconds: (R) (mandatory) (2 bytes)
+//
+//		Errored Seconds Es
+//			Errored seconds (ES): This attribute counts 1 s intervals with one or more CRC8 anomalies summed
+//			over all received bearer channels, or one or more loss of signal (LOS) defects, or one or more
+//			SEF defects, or one or more LPR defects. (R) (mandatory) (2 bytes)
+//
+//		Severely Errored Seconds
+//			(R) (mandatory) (2 bytes)
+//
+//		Line Initializations
+//			Line initializations: This attribute counts the total number of full initializations attempted
+//			on the line, both successful and failed. (R) (mandatory) (2 bytes)
+//
+//		Failed Line Initializations
+//			Failed line initializations: This attribute counts the total number of failed full
+//			initializations during the accumulation period. A failed full initialization occurs when
+//			showtime is not reached at the end of the full initialization procedure. (R) (mandatory)
+//			(2 bytes)
+//
+//		Short Initializations
+//			Short initializations: This attribute counts the total number of fast retrains or short
+//			initializations attempted on the line, successful and failed. Fast retrain is defined in [ITUT
+//			G.992.2]. Short initialization is defined in [ITUT G.992.3] and [ITUT G.992.4]. (R) (optional)
+//			(2 bytes)
+//
+//		Failed Short Initializations
+//			(R) (optional) (2 bytes)
+//
+//		Fec Seconds
+//			FEC seconds: This attribute counts seconds during which there was an FEC anomaly. (R)
+//			(mandatory) (2 bytes)
+//
+//		Unavailable Seconds
+//			Unavailable seconds: This attribute counts 1 s intervals during which the xDSL UNI is
+//			unavailable. The line becomes unavailable at the onset of 10 contiguous SES-Ls. The 10 SES-Ls
+//			are included in unavailable time. Once unavailable, the line becomes available at the onset of
+//			10 contiguous seconds that are not severely errored. The 10 s with no SESLs are excluded from
+//			unavailable time. Some attribute counts are inhibited during unavailability – see clause
+//			7.2.7.13 of [ITUT G.997.1]. (R) (mandatory) (2 bytes)
+//
+//		Sos Success Count, Near End
+//			SOS success count, near end: The SOS-SUCCESS-NE attribute is a count of the total number of
+//			successful SOS procedures initiated by the near-end xTU on the line during the accumulation
+//			period. Successful SOS is defined in clause 12.1.4 of [ITUT G.993.2]. (R) (optional) (2 bytes)
+//
+//		Sos Success Count, Far End
+//			SOS success count, far end: The SOS-SUCCESS-FE attribute is a count of the total number of
+//			successful SOS procedures initiated by the far-end xTU on the line during the accumulation
+//			period. Successful SOS is defined in clause 12.1.4 of [ITUT G.993.2]. (R) (optional) (2 bytes)
+//
+type XdslXtuCPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdslxtucperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "XdslXtuCPerformanceMonitoringHistoryData",
+		ClassID: 112,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint16Field("LossOfFrameSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint16Field("LossOfSignalSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint16Field("LossOfLinkSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint16Field("LossOfPowerSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint16Field("ErroredSecondsEs", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint16Field("SeverelyErroredSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint16Field("LineInitializations", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint16Field("FailedLineInitializations", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint16Field("ShortInitializations", 0, mapset.NewSetWith(Read), false, false, true, false, 11),
+			12: Uint16Field("FailedShortInitializations", 0, mapset.NewSetWith(Read), false, false, true, false, 12),
+			13: Uint16Field("FecSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 13),
+			14: Uint16Field("UnavailableSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 14),
+			15: Uint16Field("SosSuccessCount,NearEnd", 0, mapset.NewSetWith(Read), false, false, true, false, 15),
+			16: Uint16Field("SosSuccessCount,FarEnd", 0, mapset.NewSetWith(Read), false, false, true, false, 16),
+		},
+	}
+}
+
+// NewXdslXtuCPerformanceMonitoringHistoryData (class ID 112 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 NewXdslXtuCPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdslxtucperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdslxtu-cperformancemonitoringhistorydatapart2.go b/vendor/github.com/cboling/omci/generated/xdslxtu-cperformancemonitoringhistorydatapart2.go
new file mode 100644
index 0000000..ebc8698
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdslxtu-cperformancemonitoringhistorydatapart2.go
@@ -0,0 +1,98 @@
+/*
+ * 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 XdslXtuCPerformanceMonitoringHistoryDataPart2ClassId ClassID = ClassID(408)
+
+var xdslxtucperformancemonitoringhistorydatapart2BME *ManagedEntityDefinition
+
+// XdslXtuCPerformanceMonitoringHistoryDataPart2 (class ID #408)
+//	This ME collects PM data on the xTUC to xTUR path as seen from the xTU-C. Instances of this ME
+//	are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP xDSL UNI part 1. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 and 2 MEs
+//			that contain PM threshold values. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Leftr Defect Seconds
+//			"leftr" defect seconds: If retransmission is used, this attribute is a count of the seconds with
+//			a near-end ''leftr'' defect present – see clause 7.2.1.1.6 of [ITU-T G.997.1]. (R) (mandatory)
+//			(2 bytes)
+//
+//		Error_Free Bits Counter
+//			Error-free bits counter: If retransmission is used, this attribute is a count of the number of
+//			error-free bits passed over the β1 reference point, divided by 216 – see clause 7.2.1.1.7 of
+//			[ITU-T G.997.1]. (R) (mandatory) (4 bytes)
+//
+//		Minimum Error_Free Throughput Mineftr
+//			Minimum error-free throughput (MINEFTR): If retransmission is used, this attribute is the
+//			minimum error-free throughput in bits per second – see clause 7.2.1.1.8 of [ITUT G.997.1]. (R)
+//			(mandatory) (4 bytes)
+//
+type XdslXtuCPerformanceMonitoringHistoryDataPart2 struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdslxtucperformancemonitoringhistorydatapart2BME = &ManagedEntityDefinition{
+		Name:    "XdslXtuCPerformanceMonitoringHistoryDataPart2",
+		ClassID: 408,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XF800,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint16Field("LeftrDefectSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("ErrorFreeBitsCounter", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("MinimumErrorFreeThroughputMineftr", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+		},
+	}
+}
+
+// NewXdslXtuCPerformanceMonitoringHistoryDataPart2 (class ID 408 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 NewXdslXtuCPerformanceMonitoringHistoryDataPart2(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdslxtucperformancemonitoringhistorydatapart2BME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdslxtu-rchannelperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/xdslxtu-rchannelperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..32f1a01
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdslxtu-rchannelperformancemonitoringhistorydata.go
@@ -0,0 +1,116 @@
+/*
+ * 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 XdslXtuRChannelPerformanceMonitoringHistoryDataClassId ClassID = ClassID(115)
+
+var xdslxturchannelperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// XdslXtuRChannelPerformanceMonitoringHistoryData (class ID #115)
+//	This ME collects PM data of the xTUC to xTUR channel as seen from the xTU-R. Instances of this
+//	ME are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL bearer channel. Several instances may
+//		therefore be associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			Managed entity ID: This attribute uniquely identifies each instance of this ME. The two MSBs of
+//			the first byte are the bearer channel ID. Excluding the first 2 bits of the first byte, the
+//			remaining part of the ME ID is identical to that of this ME's parent PPTP xDSL UNI part 1. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Corrected Blocks
+//			Corrected blocks: This attribute counts blocks received with errors that were corrected on this
+//			channel. (R) (mandatory) (4 bytes)
+//
+//		Uncorrected Blocks
+//			Uncorrected blocks: This attribute counts blocks received with uncorrectable errors on this
+//			channel. (R) (mandatory) (4 bytes)
+//
+//		Transmitted Blocks
+//			Transmitted blocks: This attribute counts encoded blocks transmitted on this channel. (R)
+//			(mandatory) (4 bytes)
+//
+//		Received Blocks
+//			Received blocks: This attribute counts encoded blocks received on this channel. (R) (mandatory)
+//			(4 bytes)
+//
+//		Code Violations
+//			Code violations: This attribute counts FEBE anomalies reported in the downstream bearer channel.
+//			If the CRC is applied over multiple bearer channels, then each related FEBE anomaly increments
+//			each of the counters related to the individual bearer channels. (R) (mandatory) (2 bytes)
+//
+//		Forward Error Corrections
+//			Forward error corrections: This attribute counts FFEC anomalies reported in the downstream
+//			bearer channel. If FEC is applied over multiple bearer channels, each related FFEC anomaly
+//			increments each of the counters related to the individual bearer channels. (R) (mandatory)
+//			(2 bytes)
+//
+type XdslXtuRChannelPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdslxturchannelperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "XdslXtuRChannelPerformanceMonitoringHistoryData",
+		ClassID: 115,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("CorrectedBlocks", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4: Uint32Field("UncorrectedBlocks", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5: Uint32Field("TransmittedBlocks", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6: Uint32Field("ReceivedBlocks", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7: Uint16Field("CodeViolations", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8: Uint16Field("ForwardErrorCorrections", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+		},
+	}
+}
+
+// NewXdslXtuRChannelPerformanceMonitoringHistoryData (class ID 115 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 NewXdslXtuRChannelPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdslxturchannelperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xdslxtu-rperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/xdslxtu-rperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..bbe2613
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xdslxtu-rperformancemonitoringhistorydata.go
@@ -0,0 +1,130 @@
+/*
+ * 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 XdslXtuRPerformanceMonitoringHistoryDataClassId ClassID = ClassID(113)
+
+var xdslxturperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// XdslXtuRPerformanceMonitoringHistoryData (class ID #113)
+//	This ME collects PM data of the xTUC to xTUR path as seen from the xTU-R. Instances of this ME
+//	are created and deleted by the OLT.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an xDSL UNI.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 PPTP xDSL UNI part 1. (R,
+//			setbycreate) (mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, setbycreate) (mandatory) (2 bytes)
+//
+//		Loss Of Frame Seconds
+//			Loss of frame seconds: (R) (mandatory) (2 bytes)
+//
+//		Loss Of Signal Seconds
+//			Loss of signal seconds: (R) (mandatory) (2 bytes)
+//
+//		Loss Of Power Seconds
+//			Loss of power seconds: (R) (mandatory) (2 bytes)
+//
+//		Errored Seconds
+//			Errored seconds: This attribute counts 1 s intervals with one or more far end block error (FEBE)
+//			anomalies summed over all transmitted bearer channels, or one or more LOSFE defects, or one or
+//			more RDI defects, or one or more LPR-FE defects. (R) (mandatory) (2 bytes)
+//
+//		Severely Errored Seconds
+//			(R) (mandatory) (2 bytes)
+//
+//		Fec Seconds
+//			FEC seconds: This attribute counts seconds during which there was an FEC anomaly. (R)
+//			(mandatory) (2 bytes)
+//
+//		Unavailable Seconds
+//			(R) (mandatory) (2 bytes)
+//
+//		Leftr Defect Seconds
+//			"leftr" defect seconds: If retransmission is used, this parameter is a count of the seconds with
+//			a near-end ''leftr'' defect present – see clause 7.2.1.1.6 of [ITUT G.997.1]. (R) (optional)
+//			(2 bytes)
+//
+//		Error_Free Bits Counter
+//			Error-free bits counter: If retransmission is used, this parameter is a count of the number of
+//			error-free bits passed over the β1 reference point, divided by 216 – see clause 7.2.1.1.7 of
+//			[ITU-T G.997.1]. (R) (optional) (4 bytes)
+//
+//		Minimum Error_Free Throughput Mineftr
+//			Minimum error-free throughput (MINEFTR): If retransmission is used, this parameter is the
+//			minimum error-free throughput in bits per second – see clause 7.2.1.1.8 of [ITUT G.997.1]. (R)
+//			(optional) (4 bytes)
+//
+type XdslXtuRPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xdslxturperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "XdslXtuRPerformanceMonitoringHistoryData",
+		ClassID: 113,
+		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("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint16Field("LossOfFrameSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 3),
+			4:  Uint16Field("LossOfSignalSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 4),
+			5:  Uint16Field("LossOfPowerSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 5),
+			6:  Uint16Field("ErroredSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint16Field("SeverelyErroredSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 7),
+			8:  Uint16Field("FecSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 8),
+			9:  Uint16Field("UnavailableSeconds", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint16Field("LeftrDefectSeconds", 0, mapset.NewSetWith(Read), false, false, true, false, 10),
+			11: Uint32Field("ErrorFreeBitsCounter", 0, mapset.NewSetWith(Read), false, false, true, false, 11),
+			12: Uint32Field("MinimumErrorFreeThroughputMineftr", 0, mapset.NewSetWith(Read), false, false, true, false, 12),
+		},
+	}
+}
+
+// NewXdslXtuRPerformanceMonitoringHistoryData (class ID 113 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 NewXdslXtuRPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xdslxturperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xg-pondownstreammanagementperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/xg-pondownstreammanagementperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..e8facf8
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xg-pondownstreammanagementperformancemonitoringhistorydata.go
@@ -0,0 +1,155 @@
+/*
+ * 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 XgPonDownstreamManagementPerformanceMonitoringHistoryDataClassId ClassID = ClassID(345)
+
+var xgpondownstreammanagementperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// XgPonDownstreamManagementPerformanceMonitoringHistoryData (class ID #345)
+//	This ME collects PM data associated with the XG-PON TC layer. It collects counters associated
+//	with downstream PLOAM and OMCI messages.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an ANI-G.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 ANI-G. (R, set-by-create)
+//			(mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. Since no threshold value attribute number exceeds 7, a threshold
+//			data 2 ME is optional. (R, W, set-by-create) (mandatory) (2 bytes)
+//
+//		Ploam Message Integrity Check Mic Error Count
+//			PLOAM message integrity check (MIC) error count: This attribute counts MIC errors detected in
+//			downstream PLOAM messages, either directed to this ONU or broadcast to all ONUs. (R) (optional)
+//			(4 bytes)
+//
+//		Downstream Ploam Messages Count
+//			Downstream PLOAM messages count: This attribute counts PLOAM messages received, either directed
+//			to this ONU or broadcast to all ONUs. (R) (optional) (4 bytes)
+//
+//		Profile Messages Received
+//			Profile messages received: This attribute counts the number of profile messages received, either
+//			directed to this ONU or broadcast to all ONUs. In [ITU-T G.9807.1], this attribute is used for
+//			received burst_profile message count.  (R) (optional) (4 bytes)
+//
+//		Ranging_Time Messages Received
+//			Ranging_time messages received: This attribute counts the number of ranging_time messages
+//			received, either directed to this ONU or broadcast to all ONUs. (R) (mandatory) (4 bytes)
+//
+//		Deactivate_Onu_Id Messages Received
+//			Deactivate_ONU-ID messages received: This attribute counts the number of deactivate_ONU-ID
+//			messages received, either directed to this ONU or broadcast to all ONUs. Deactivate_ONU-ID
+//			messages do not reset this counter. (R) (optional) (4 bytes)
+//
+//		Disable_Serial_Number Messages Received
+//			Disable_serial_number messages received: This attribute counts the number of
+//			disable_serial_number messages received, whose serial number specified this ONU. (R) (optional)
+//			(4 bytes)
+//
+//		Request_Registration Messages Received
+//			Request_registration messages received: This attribute counts the number of request_registration
+//			messages received. (R) (optional) (4 bytes)
+//
+//		Assign_Alloc_Id Messages Received
+//			Assign_alloc-ID messages received: This attribute counts the number of assign_alloc-ID messages
+//			received. (R) (optional) (4 bytes)
+//
+//		Key_Control Messages Received
+//			Key_control messages received: This attribute counts the number of key_control messages
+//			received, either directed to this ONU or broadcast to all ONUs. (R) (optional) (4 bytes)
+//
+//		Sleep_Allow Messages Received
+//			Sleep_allow messages received: This attribute counts the number of sleep_allow messages
+//			received, either directed to this ONU or broadcast to all ONUs. (R) (optional) (4 bytes)
+//
+//		Baseline Omci Messages Received Count
+//			Baseline OMCI messages received count: This attribute counts the number of OMCI messages
+//			received in the baseline message format. (R) (optional) (4 bytes)
+//
+//		Extended Omci Messages Received Count
+//			Extended OMCI messages received count: This attribute counts the number of OMCI messages
+//			received in the extended message format. (R) (optional) (4 bytes)
+//
+//		Assign_Onu_Id Messages Received
+//			Assign_ONU-ID messages received: This attribute counts the number of assign_ONU-ID messages
+//			received since the last re-boot. (R) (optional) (4 bytes)
+//
+//		Omci Mic Error Count
+//			OMCI MIC error count: This attribute counts MIC errors detected in OMCI messages directed to
+//			this ONU. (R) (optional) (4 bytes)
+//
+type XgPonDownstreamManagementPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xgpondownstreammanagementperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "XgPonDownstreamManagementPerformanceMonitoringHistoryData",
+		ClassID: 345,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFF,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("PloamMessageIntegrityCheckMicErrorCount", 0, mapset.NewSetWith(Read), false, false, true, false, 3),
+			4:  Uint32Field("DownstreamPloamMessagesCount", 0, mapset.NewSetWith(Read), false, false, true, false, 4),
+			5:  Uint32Field("ProfileMessagesReceived", 0, mapset.NewSetWith(Read), false, false, true, false, 5),
+			6:  Uint32Field("RangingTimeMessagesReceived", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("DeactivateOnuIdMessagesReceived", 0, mapset.NewSetWith(Read), false, false, true, false, 7),
+			8:  Uint32Field("DisableSerialNumberMessagesReceived", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+			9:  Uint32Field("RequestRegistrationMessagesReceived", 0, mapset.NewSetWith(Read), false, false, true, false, 9),
+			10: Uint32Field("AssignAllocIdMessagesReceived", 0, mapset.NewSetWith(Read), false, false, true, false, 10),
+			11: Uint32Field("KeyControlMessagesReceived", 0, mapset.NewSetWith(Read), false, false, true, false, 11),
+			12: Uint32Field("SleepAllowMessagesReceived", 0, mapset.NewSetWith(Read), false, false, true, false, 12),
+			13: Uint32Field("BaselineOmciMessagesReceivedCount", 0, mapset.NewSetWith(Read), false, false, true, false, 13),
+			14: Uint32Field("ExtendedOmciMessagesReceivedCount", 0, mapset.NewSetWith(Read), false, false, true, false, 14),
+			15: Uint32Field("AssignOnuIdMessagesReceived", 0, mapset.NewSetWith(Read), false, false, true, false, 15),
+			16: Uint32Field("OmciMicErrorCount", 0, mapset.NewSetWith(Read), false, false, true, false, 16),
+		},
+	}
+}
+
+// NewXgPonDownstreamManagementPerformanceMonitoringHistoryData (class ID 345 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 NewXgPonDownstreamManagementPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xgpondownstreammanagementperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xg-pontcperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/xg-pontcperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..d22c7bb
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xg-pontcperformancemonitoringhistorydata.go
@@ -0,0 +1,146 @@
+/*
+ * 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 XgPonTcPerformanceMonitoringHistoryDataClassId ClassID = ClassID(344)
+
+var xgpontcperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// XgPonTcPerformanceMonitoringHistoryData (class ID #344)
+//	This ME collects PM data associated with the XG-PON TC layer.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an ANI-G.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 ANI-G. (R, set-by-create)
+//			(mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: This attribute points to an instance of the threshold data 1 ME that
+//			contains PM threshold values. (R, W, set-by-create) (mandatory) (2 bytes)
+//
+//		Psbd Hec Error Count
+//			PSBd HEC error count: This attribute counts HEC errors in any of the fields of the downstream
+//			physical sync block. (R) (optional) (4 bytes)
+//
+//		Xgtc Hec Error Count
+//			XGTC HEC error count: This attribute counts HEC errors detected in the XGTC header. In [ITU-T
+//			G.9807.1], this attribute is used for framing sublayer (FS) HEC error count management. (R)
+//			(optional) (4 bytes)
+//
+//		Unknown Profile Count
+//			Unknown profile count: This attribute counts the number of grants received whose specified
+//			profile was not known to the ONU. (R) (optional) (4 bytes)
+//
+//		Transmitted Xg_Pon Encapsulation Method Xgem Frames
+//			Transmitted XG-PON encapsulation method (XGEM) frames: This attribute counts the number of non-
+//			idle XGEM frames transmitted. If a service data unit (SDU) is fragmented, each fragment is an
+//			XGEM frame and is counted as such. (R) (mandatory) (4 bytes)
+//
+//		Fragment Xgem Frames
+//			Fragment XGEM frames: This attribute counts the number of XGEM frames that represent fragmented
+//			SDUs, as indicated by the LF bit = 0. (R) (optional) (4 bytes)
+//
+//		Xgem Hec Lost Words Count
+//			XGEM HEC lost words count: This attribute counts the number of 4 byte words lost because of an
+//			XGEM frame HEC error. In general, all XGTC payload following the error is lost, until the next
+//			PSBd event. (R) (optional) (4 bytes)
+//
+//		Xgem Key Errors
+//			(R) (mandatory) (4 bytes)
+//
+//		Xgem Hec Error Count
+//			XGEM HEC error count: This attribute counts the number of instances of an XGEM frame HEC error.
+//			(R) (mandatory) (4 bytes)
+//
+//		Transmitted Bytes In Non_Idle Xgem Frames
+//			Transmitted bytes in non-idle XGEM frames: This attribute counts the number of transmitted bytes
+//			in non-idle XGEM frames. (R) (mandatory) (8 bytes)
+//
+//		Received Bytes In Non_Idle Xgem Frames
+//			Received bytes in non-idle XGEM frames: This attribute counts the number of received bytes in
+//			non-idle XGEM frames. (R) (optional) (8 bytes)
+//
+//		Loss Of Downstream Synchronization Lods Event Count
+//			Loss of downstream synchronization (LODS) event count: This attribute counts the number of state
+//			transitions from O5.1 to O6. (R) (optional) (4 bytes)
+//
+//		Lods Event Restored Count
+//			LODS event restored count: This attribute counts the number of LODS cleared events. (R)
+//			(optional) (4 bytes)
+//
+//		Onu Reactivation By Lods Events
+//			ONU reactivation by LODS events: This attribute counts the number of LODS events resulting in
+//			ONU reactivation without synchronization being reacquired. (R) (optional) (4 bytes)
+//
+type XgPonTcPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xgpontcperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "XgPonTcPerformanceMonitoringHistoryData",
+		ClassID: 344,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFFFE,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0:  Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1:  ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2:  Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3:  Uint32Field("PsbdHecErrorCount", 0, mapset.NewSetWith(Read), false, false, true, false, 3),
+			4:  Uint32Field("XgtcHecErrorCount", 0, mapset.NewSetWith(Read), false, false, true, false, 4),
+			5:  Uint32Field("UnknownProfileCount", 0, mapset.NewSetWith(Read), false, false, true, false, 5),
+			6:  Uint32Field("TransmittedXgPonEncapsulationMethodXgemFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 6),
+			7:  Uint32Field("FragmentXgemFrames", 0, mapset.NewSetWith(Read), false, false, true, false, 7),
+			8:  Uint32Field("XgemHecLostWordsCount", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+			9:  Uint32Field("XgemKeyErrors", 0, mapset.NewSetWith(Read), false, false, false, false, 9),
+			10: Uint32Field("XgemHecErrorCount", 0, mapset.NewSetWith(Read), false, false, false, false, 10),
+			11: Uint64Field("TransmittedBytesInNonIdleXgemFrames", 0, mapset.NewSetWith(Read), false, false, false, false, 11),
+			12: Uint64Field("ReceivedBytesInNonIdleXgemFrames", 0, mapset.NewSetWith(Read), false, false, true, false, 12),
+			13: Uint32Field("LossOfDownstreamSynchronizationLodsEventCount", 0, mapset.NewSetWith(Read), false, false, true, false, 13),
+			14: Uint32Field("LodsEventRestoredCount", 0, mapset.NewSetWith(Read), false, false, true, false, 14),
+			15: Uint32Field("OnuReactivationByLodsEvents", 0, mapset.NewSetWith(Read), false, false, true, false, 15),
+		},
+	}
+}
+
+// NewXgPonTcPerformanceMonitoringHistoryData (class ID 344 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 NewXgPonTcPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xgpontcperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/generated/xg-ponupstreammanagementperformancemonitoringhistorydata.go b/vendor/github.com/cboling/omci/generated/xg-ponupstreammanagementperformancemonitoringhistorydata.go
new file mode 100644
index 0000000..9c8fda5
--- /dev/null
+++ b/vendor/github.com/cboling/omci/generated/xg-ponupstreammanagementperformancemonitoringhistorydata.go
@@ -0,0 +1,112 @@
+/*
+ * 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 XgPonUpstreamManagementPerformanceMonitoringHistoryDataClassId ClassID = ClassID(346)
+
+var xgponupstreammanagementperformancemonitoringhistorydataBME *ManagedEntityDefinition
+
+// XgPonUpstreamManagementPerformanceMonitoringHistoryData (class ID #346)
+//	This ME collects PM data associated with the XG-PON TC layer. It counts upstream PLOAM messages
+//	transmitted by the ONU.
+//
+//	For a complete discussion of generic PM architecture, refer to clause I.4.
+//
+//	Relationships
+//		An instance of this ME is associated with an ANI-G.
+//
+//	Attributes
+//		Managed Entity Id
+//			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 ANI-G. (R, set-by-create)
+//			(mandatory) (2 bytes)
+//
+//		Interval End Time
+//			Interval end time: This attribute identifies the most recently finished 15 min interval. (R)
+//			(mandatory) (1 byte)
+//
+//		Threshold Data 1_2 Id
+//			Threshold data 1/2 ID: No thresholds are defined for this ME. For uniformity with other PM, the
+//			attribute is retained and shown as mandatory, but it should be set to a null pointer. (R, W,
+//			set-by-create) (mandatory) (2 bytes)
+//
+//		Upstream Ploam Message Count
+//			Upstream PLOAM message count: This attribute counts PLOAM messages transmitted upstream,
+//			excluding acknowledge messages. (R) (optional) (4 bytes)
+//
+//		Serial_Number_Onu Message Count
+//			Serial_number_ONU message count: This attribute counts Serial_number_ONU PLOAM messages
+//			transmitted. (R) (optional) (4 bytes)
+//
+//		Registration Message Count
+//			Registration message count: This attribute counts Registration PLOAM messages transmitted. (R)
+//			(optional) (4 bytes)
+//
+//		Key_Report Message Count
+//			Key_report message count: This attribute counts key_report PLOAM messages transmitted. (R)
+//			(optional) (4 bytes)
+//
+//		Acknowledge Message Count
+//			Acknowledge message count: This attribute counts acknowledge PLOAM messages transmitted. It
+//			includes all forms of acknowledgement (AK), including those transmitted in response to a PLOAM
+//			grant when the ONU has nothing to send. (R) (optional) (4 bytes)
+//
+//		Sleep_Request Message Count
+//			Sleep_request message count: This attribute counts sleep_request PLOAM messages transmitted. (R)
+//			(optional) (4 bytes)
+//
+type XgPonUpstreamManagementPerformanceMonitoringHistoryData struct {
+	ManagedEntityDefinition
+	Attributes AttributeValueMap
+}
+
+func init() {
+	xgponupstreammanagementperformancemonitoringhistorydataBME = &ManagedEntityDefinition{
+		Name:    "XgPonUpstreamManagementPerformanceMonitoringHistoryData",
+		ClassID: 346,
+		MessageTypes: mapset.NewSetWith(
+			Create,
+			Delete,
+			Get,
+			Set,
+		),
+		AllowedAttributeMask: 0XFF00,
+		AttributeDefinitions: AttributeDefinitionMap{
+			0: Uint16Field("ManagedEntityId", 0, mapset.NewSetWith(Read, SetByCreate), false, false, false, false, 0),
+			1: ByteField("IntervalEndTime", 0, mapset.NewSetWith(Read), false, false, false, false, 1),
+			2: Uint16Field("ThresholdData12Id", 0, mapset.NewSetWith(Read, SetByCreate, Write), false, false, false, false, 2),
+			3: Uint32Field("UpstreamPloamMessageCount", 0, mapset.NewSetWith(Read), false, false, true, false, 3),
+			4: Uint32Field("SerialNumberOnuMessageCount", 0, mapset.NewSetWith(Read), false, false, true, false, 4),
+			5: Uint32Field("RegistrationMessageCount", 0, mapset.NewSetWith(Read), false, false, true, false, 5),
+			6: Uint32Field("KeyReportMessageCount", 0, mapset.NewSetWith(Read), false, false, true, false, 6),
+			7: Uint32Field("AcknowledgeMessageCount", 0, mapset.NewSetWith(Read), false, false, true, false, 7),
+			8: Uint32Field("SleepRequestMessageCount", 0, mapset.NewSetWith(Read), false, false, true, false, 8),
+		},
+	}
+}
+
+// NewXgPonUpstreamManagementPerformanceMonitoringHistoryData (class ID 346 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 NewXgPonUpstreamManagementPerformanceMonitoringHistoryData(params ...ParamData) (*ManagedEntity, OmciErrors) {
+	return NewManagedEntity(xgponupstreammanagementperformancemonitoringhistorydataBME, params...)
+}
diff --git a/vendor/github.com/cboling/omci/layers.go b/vendor/github.com/cboling/omci/layers.go
new file mode 100644
index 0000000..f895f14
--- /dev/null
+++ b/vendor/github.com/cboling/omci/layers.go
@@ -0,0 +1,197 @@
+/*
+ * 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.
+ *
+ */
+package omci
+
+import (
+	"errors"
+	me "github.com/cboling/omci/generated"
+	"github.com/google/gopacket"
+)
+
+var nextLayerMapping map[MessageType]gopacket.LayerType
+
+var (
+	LayerTypeCreateRequest                gopacket.LayerType
+	LayerTypeDeleteRequest                gopacket.LayerType
+	LayerTypeSetRequest                   gopacket.LayerType
+	LayerTypeGetRequest                   gopacket.LayerType
+	LayerTypeGetAllAlarmsRequest          gopacket.LayerType
+	LayerTypeGetAllAlarmsNextRequest      gopacket.LayerType
+	LayerTypeMibUploadRequest             gopacket.LayerType
+	LayerTypeMibUploadNextRequest         gopacket.LayerType
+	LayerTypeMibResetRequest              gopacket.LayerType
+	LayerTypeTestRequest                  gopacket.LayerType
+	LayerTypeStartSoftwareDownloadRequest gopacket.LayerType
+	LayerTypeDownloadSectionRequest       gopacket.LayerType
+	LayerTypeDownloadSectionLastRequest   gopacket.LayerType
+	LayerTypeEndSoftwareDownloadRequest   gopacket.LayerType
+	LayerTypeActivateSoftwareRequest      gopacket.LayerType
+	LayerTypeCommitSoftwareRequest        gopacket.LayerType
+	LayerTypeSynchronizeTimeRequest       gopacket.LayerType
+	LayerTypeRebootRequest                gopacket.LayerType
+	LayerTypeGetNextRequest               gopacket.LayerType
+	LayerTypeGetCurrentDataRequest        gopacket.LayerType
+	LayerTypeSetTableRequest              gopacket.LayerType
+)
+var (
+	LayerTypeCreateResponse                gopacket.LayerType
+	LayerTypeDeleteResponse                gopacket.LayerType
+	LayerTypeSetResponse                   gopacket.LayerType
+	LayerTypeGetResponse                   gopacket.LayerType
+	LayerTypeGetAllAlarmsResponse          gopacket.LayerType
+	LayerTypeGetAllAlarmsNextResponse      gopacket.LayerType
+	LayerTypeMibUploadResponse             gopacket.LayerType
+	LayerTypeMibUploadNextResponse         gopacket.LayerType
+	LayerTypeMibResetResponse              gopacket.LayerType
+	LayerTypeAlarmNotification             gopacket.LayerType
+	LayerTypeAttributeValueChange          gopacket.LayerType
+	LayerTypeTestResponse                  gopacket.LayerType
+	LayerTypeStartSoftwareDownloadResponse gopacket.LayerType
+	LayerTypeDownloadSectionResponse       gopacket.LayerType
+	LayerTypeEndSoftwareDownloadResponse   gopacket.LayerType
+	LayerTypeActivateSoftwareResponse      gopacket.LayerType
+	LayerTypeCommitSoftwareResponse        gopacket.LayerType
+	LayerTypeSynchronizeTimeResponse       gopacket.LayerType
+	LayerTypeRebootResponse                gopacket.LayerType
+	LayerTypeGetNextResponse               gopacket.LayerType
+	LayerTypeTestResult                    gopacket.LayerType
+	LayerTypeGetCurrentDataResponse        gopacket.LayerType
+	LayerTypeSetTableResponse              gopacket.LayerType
+)
+
+func mkReqLayer(mt me.MsgType, mts string, decode gopacket.DecodeFunc) gopacket.LayerType {
+	return gopacket.RegisterLayerType(1000+(int(mt)|int(me.AR)),
+		gopacket.LayerTypeMetadata{Name: mts, Decoder: decode})
+}
+
+func mkRespLayer(mt me.MsgType, mts string, decode gopacket.DecodeFunc) gopacket.LayerType {
+	return gopacket.RegisterLayerType(1000+(int(mt)|int(me.AK)),
+		gopacket.LayerTypeMetadata{Name: mts, Decoder: decode})
+}
+
+func mkLayer(mt me.MsgType, mts string, decode gopacket.DecodeFunc) gopacket.LayerType {
+	return gopacket.RegisterLayerType(1000+(int(mt)),
+		gopacket.LayerTypeMetadata{Name: mts, Decoder: decode})
+}
+
+func init() {
+	// Create layers for message_type & action
+	LayerTypeCreateRequest = mkReqLayer(me.Create, "CreateRequest", gopacket.DecodeFunc(decodeCreateRequest))
+	LayerTypeDeleteRequest = mkReqLayer(me.Delete, "DeleteRequest", gopacket.DecodeFunc(decodeDeleteRequest))
+	LayerTypeSetRequest = mkReqLayer(me.Set, "SetRequest", gopacket.DecodeFunc(decodeSetRequest))
+	LayerTypeGetRequest = mkReqLayer(me.Get, "GetRequest", gopacket.DecodeFunc(decodeGetRequest))
+	LayerTypeGetAllAlarmsRequest = mkReqLayer(me.GetAllAlarms, "GetAllAlarmsRequest", gopacket.DecodeFunc(decodeGetAllAlarmsRequest))
+	LayerTypeGetAllAlarmsNextRequest = mkReqLayer(me.GetAllAlarmsNext, "GetAllAlarmsNextRequest", gopacket.DecodeFunc(decodeGetAllAlarmsNextRequest))
+	LayerTypeMibUploadRequest = mkReqLayer(me.MibUpload, "MibUploadRequest", gopacket.DecodeFunc(decodeMibUploadRequest))
+	LayerTypeMibUploadNextRequest = mkReqLayer(me.MibUploadNext, "MibUploadNextRequest", gopacket.DecodeFunc(decodeMibUploadNextRequest))
+	LayerTypeMibResetRequest = mkReqLayer(me.MibReset, "MibResetRequest", gopacket.DecodeFunc(decodeMibResetRequest))
+	LayerTypeTestRequest = mkReqLayer(me.Test, "TestRequest", gopacket.DecodeFunc(decodeTestRequest))
+	LayerTypeStartSoftwareDownloadRequest = mkReqLayer(me.StartSoftwareDownload, "StartSoftwareDownloadRequest", gopacket.DecodeFunc(decodeStartSoftwareDownloadRequest))
+
+	// For Download section, AR=0 if not response expected, AR=1 if response expected (last section of a window)
+	LayerTypeDownloadSectionRequest = mkLayer(me.DownloadSection, "DownloadSectionRequest", gopacket.DecodeFunc(decodeDownloadSectionRequest))
+	LayerTypeDownloadSectionLastRequest = mkReqLayer(me.DownloadSection, "DownloadLastSectionRequest", gopacket.DecodeFunc(decodeDownloadSectionRequest))
+	LayerTypeEndSoftwareDownloadRequest = mkReqLayer(me.EndSoftwareDownload, "EndSoftwareDownloadRequest", gopacket.DecodeFunc(decodeEndSoftwareDownloadRequest))
+	LayerTypeActivateSoftwareRequest = mkReqLayer(me.ActivateSoftware, "ActivateSoftwareRequest", gopacket.DecodeFunc(decodeActivateSoftwareRequest))
+	LayerTypeCommitSoftwareRequest = mkReqLayer(me.CommitSoftware, "CommitSoftwareRequest", gopacket.DecodeFunc(decodeCommitSoftwareRequest))
+	LayerTypeSynchronizeTimeRequest = mkReqLayer(me.SynchronizeTime, "SynchronizeTimeRequest", gopacket.DecodeFunc(decodeSynchronizeTimeRequest))
+	LayerTypeRebootRequest = mkReqLayer(me.Reboot, "RebootRequest", gopacket.DecodeFunc(decodeRebootRequest))
+	LayerTypeGetNextRequest = mkReqLayer(me.GetNext, "GetNextRequest", gopacket.DecodeFunc(decodeGetNextRequest))
+	LayerTypeGetCurrentDataRequest = mkReqLayer(me.GetCurrentData, "GetCurrentDataRequest", gopacket.DecodeFunc(decodeGetCurrentDataRequest))
+	LayerTypeSetTableRequest = mkReqLayer(me.SetTable, "SetTableRequest", gopacket.DecodeFunc(decodeSetTableRequest))
+
+	LayerTypeCreateResponse = mkRespLayer(me.Create, "CreateResponse", gopacket.DecodeFunc(decodeCreateResponse))
+	LayerTypeDeleteResponse = mkRespLayer(me.Delete, "DeleteResponse", gopacket.DecodeFunc(decodeDeleteResponse))
+	LayerTypeSetResponse = mkRespLayer(me.Set, "SetResponse", gopacket.DecodeFunc(decodeSetResponse))
+	LayerTypeGetResponse = mkRespLayer(me.Get, "GetResponse", gopacket.DecodeFunc(decodeGetResponse))
+	LayerTypeGetAllAlarmsResponse = mkRespLayer(me.GetAllAlarms, "GetAllAlarmsResponse", gopacket.DecodeFunc(decodeGetAllAlarmsResponse))
+	LayerTypeGetAllAlarmsNextResponse = mkRespLayer(me.GetAllAlarmsNext, "GetAllAlarmsNextResponse", gopacket.DecodeFunc(decodeGetAllAlarmsNextResponse))
+	LayerTypeMibUploadResponse = mkRespLayer(me.MibUpload, "MibUploadResponse", gopacket.DecodeFunc(decodeMibUploadResponse))
+	LayerTypeMibUploadNextResponse = mkRespLayer(me.MibUploadNext, "MibUploadNextResponse", gopacket.DecodeFunc(decodeMibUploadNextResponse))
+	LayerTypeMibResetResponse = mkRespLayer(me.MibReset, "MibResetResponse", gopacket.DecodeFunc(decodeMibResetResponse))
+	LayerTypeAlarmNotification = mkLayer(me.AlarmNotification, "AlarmNotification", gopacket.DecodeFunc(decodeAlarmNotification))
+	LayerTypeAttributeValueChange = mkLayer(me.AttributeValueChange, "AttributeValueChange", gopacket.DecodeFunc(decodeAttributeValueChange))
+	LayerTypeTestResponse = mkRespLayer(me.Test, "TestResponse", gopacket.DecodeFunc(decodeTestResponse))
+	LayerTypeStartSoftwareDownloadResponse = mkRespLayer(me.StartSoftwareDownload, "StartSoftwareDownloadResponse", gopacket.DecodeFunc(decodeStartSoftwareDownloadResponse))
+	LayerTypeDownloadSectionResponse = mkRespLayer(me.DownloadSection, "DownloadSectionResponse", gopacket.DecodeFunc(decodeDownloadSectionResponse))
+	LayerTypeEndSoftwareDownloadResponse = mkRespLayer(me.EndSoftwareDownload, "EndSoftwareDownloadResponse", gopacket.DecodeFunc(decodeEndSoftwareDownloadResponse))
+	LayerTypeActivateSoftwareResponse = mkRespLayer(me.ActivateSoftware, "ActivateSoftwareResponse", gopacket.DecodeFunc(decodeActivateSoftwareResponse))
+	LayerTypeCommitSoftwareResponse = mkRespLayer(me.CommitSoftware, "CommitSoftwareResponse", gopacket.DecodeFunc(decodeCommitSoftwareResponse))
+	LayerTypeSynchronizeTimeResponse = mkRespLayer(me.SynchronizeTime, "SynchronizeTimeResponse", gopacket.DecodeFunc(decodeSynchronizeTimeResponse))
+	LayerTypeRebootResponse = mkRespLayer(me.Reboot, "RebootResponse", gopacket.DecodeFunc(decodeRebootResponse))
+	LayerTypeGetNextResponse = mkRespLayer(me.GetNext, "GetNextResponse", gopacket.DecodeFunc(decodeGetNextResponse))
+	LayerTypeTestResult = mkRespLayer(me.TestResult, "TestResult", gopacket.DecodeFunc(decodeTestResult))
+	LayerTypeGetCurrentDataResponse = mkRespLayer(me.GetCurrentData, "GetCurrentDataResponse", gopacket.DecodeFunc(decodeGetCurrentDataResponse))
+	LayerTypeSetTableResponse = mkRespLayer(me.SetTable, "SetTableResponse", gopacket.DecodeFunc(decodeSetTableResponse))
+
+	// Map message_type and action to layer
+	nextLayerMapping = make(map[MessageType]gopacket.LayerType)
+
+	nextLayerMapping[CreateRequestType] = LayerTypeCreateRequest
+	nextLayerMapping[DeleteRequestType] = LayerTypeDeleteRequest
+	nextLayerMapping[SetRequestType] = LayerTypeSetRequest
+	nextLayerMapping[GetRequestType] = LayerTypeGetRequest
+	nextLayerMapping[GetAllAlarmsRequestType] = LayerTypeGetAllAlarmsRequest
+	nextLayerMapping[GetAllAlarmsNextRequestType] = LayerTypeGetAllAlarmsNextRequest
+	nextLayerMapping[MibUploadRequestType] = LayerTypeMibUploadRequest
+	nextLayerMapping[MibUploadNextRequestType] = LayerTypeMibUploadNextRequest
+	nextLayerMapping[MibResetRequestType] = LayerTypeMibResetRequest
+	nextLayerMapping[TestRequestType] = LayerTypeTestRequest
+	nextLayerMapping[StartSoftwareDownloadRequestType] = LayerTypeStartSoftwareDownloadRequest
+	nextLayerMapping[DownloadSectionRequestType] = LayerTypeDownloadSectionRequest
+	nextLayerMapping[EndSoftwareDownloadRequestType] = LayerTypeEndSoftwareDownloadRequest
+	nextLayerMapping[ActivateSoftwareRequestType] = LayerTypeActivateSoftwareRequest
+	nextLayerMapping[CommitSoftwareRequestType] = LayerTypeCommitSoftwareRequest
+	nextLayerMapping[SynchronizeTimeRequestType] = LayerTypeSynchronizeTimeRequest
+	nextLayerMapping[RebootRequestType] = LayerTypeRebootRequest
+	nextLayerMapping[GetNextRequestType] = LayerTypeGetNextRequest
+	nextLayerMapping[GetCurrentDataRequestType] = LayerTypeGetCurrentDataRequest
+	nextLayerMapping[SetTableRequestType] = LayerTypeSetTableRequest
+
+	nextLayerMapping[CreateResponseType] = LayerTypeCreateResponse
+	nextLayerMapping[DeleteResponseType] = LayerTypeDeleteResponse
+	nextLayerMapping[SetResponseType] = LayerTypeSetResponse
+	nextLayerMapping[GetResponseType] = LayerTypeGetResponse
+	nextLayerMapping[GetAllAlarmsResponseType] = LayerTypeGetAllAlarmsResponse
+	nextLayerMapping[GetAllAlarmsNextResponseType] = LayerTypeGetAllAlarmsNextResponse
+	nextLayerMapping[MibUploadResponseType] = LayerTypeMibUploadResponse
+	nextLayerMapping[MibUploadNextResponseType] = LayerTypeMibUploadNextResponse
+	nextLayerMapping[MibResetResponseType] = LayerTypeMibResetResponse
+	nextLayerMapping[TestResponseType] = LayerTypeTestResponse
+	nextLayerMapping[StartSoftwareDownloadResponseType] = LayerTypeStartSoftwareDownloadResponse
+	nextLayerMapping[DownloadSectionResponseType] = LayerTypeDownloadSectionResponse
+	nextLayerMapping[EndSoftwareDownloadResponseType] = LayerTypeEndSoftwareDownloadResponse
+	nextLayerMapping[ActivateSoftwareResponseType] = LayerTypeActivateSoftwareResponse
+	nextLayerMapping[CommitSoftwareResponseType] = LayerTypeCommitSoftwareResponse
+	nextLayerMapping[SynchronizeTimeResponseType] = LayerTypeSynchronizeTimeResponse
+	nextLayerMapping[RebootResponseType] = LayerTypeRebootResponse
+	nextLayerMapping[GetNextResponseType] = LayerTypeGetNextResponse
+	nextLayerMapping[GetCurrentDataResponseType] = LayerTypeGetCurrentDataResponse
+	nextLayerMapping[SetTableResponseType] = LayerTypeSetTableResponse
+
+	nextLayerMapping[AttributeValueChangeType] = LayerTypeAttributeValueChange
+	nextLayerMapping[AlarmNotificationType] = LayerTypeAlarmNotification
+	nextLayerMapping[TestResultType] = LayerTypeTestResult
+}
+
+func MsgTypeToNextLayer(mt MessageType) (gopacket.LayerType, error) {
+	nextLayer, ok := nextLayerMapping[mt]
+	if ok {
+		return nextLayer, nil
+	}
+	return gopacket.LayerTypeZero, errors.New("unknown message type")
+}
diff --git a/vendor/github.com/cboling/omci/mebase.go b/vendor/github.com/cboling/omci/mebase.go
new file mode 100644
index 0000000..7692bbf
--- /dev/null
+++ b/vendor/github.com/cboling/omci/mebase.go
@@ -0,0 +1,95 @@
+/*
+ * 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.
+ *
+ */
+package omci
+
+import (
+	"encoding/binary"
+	"fmt"
+	me "github.com/cboling/omci/generated"
+	"github.com/google/gopacket"
+	"github.com/google/gopacket/layers"
+)
+
+type MeBasePacket struct {
+	EntityClass    me.ClassID
+	EntityInstance uint16
+
+	gopacket.Layer
+	layers.BaseLayer
+	MsgLayerType gopacket.LayerType
+}
+
+func (msg *MeBasePacket) String() string {
+	return fmt.Sprintf("ClassID: %v, InstanceId: %d/%#x",
+		msg.EntityClass, msg.EntityInstance, msg.EntityInstance)
+}
+
+func (msg *MeBasePacket) CanDecode() gopacket.LayerClass {
+	return msg.MsgLayerType
+}
+
+// Layer Interface implementations
+func (msg *MeBasePacket) LayerType() gopacket.LayerType {
+	return msg.MsgLayerType
+}
+func (msg *MeBasePacket) LayerContents() []byte {
+	return msg.Contents
+}
+func (msg *MeBasePacket) LayerPayload() []byte {
+	return msg.Payload
+}
+
+// layerDecodingLayer Interface implementations
+func (msg *MeBasePacket) NextLayerType() gopacket.LayerType {
+	return gopacket.LayerTypeZero
+}
+func (msg *MeBasePacket) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Note: Base OMCI frame already checked for frame with at least 10 octets
+	msg.EntityClass = me.ClassID(binary.BigEndian.Uint16(data[0:]))
+	msg.EntityInstance = binary.BigEndian.Uint16(data[2:])
+	msg.BaseLayer = layers.BaseLayer{Contents: data[:4], Payload: data[4:]}
+	return nil
+}
+func (msg *MeBasePacket) SerializeTo(b gopacket.SerializeBuffer) error {
+	// Add class ID and entity ID
+	bytes, err := b.PrependBytes(4)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes, uint16(msg.EntityClass))
+	binary.BigEndian.PutUint16(bytes[2:], msg.EntityInstance)
+	return nil
+}
+
+type layerDecodingLayer interface {
+	gopacket.Layer
+	DecodeFromBytes([]byte, gopacket.PacketBuilder) error
+	NextLayerType() gopacket.LayerType
+}
+
+func decodingLayerDecoder(d layerDecodingLayer, data []byte, p gopacket.PacketBuilder) error {
+	err := d.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	p.AddLayer(d)
+	next := d.NextLayerType()
+	if next == gopacket.LayerTypeZero {
+		return nil
+	}
+	return p.NextDecoder(next)
+}
diff --git a/vendor/github.com/cboling/omci/meframe.go b/vendor/github.com/cboling/omci/meframe.go
new file mode 100644
index 0000000..c42e091
--- /dev/null
+++ b/vendor/github.com/cboling/omci/meframe.go
@@ -0,0 +1,1358 @@
+/*
+ * 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 omci
+
+import (
+	"errors"
+	"fmt"
+	me "github.com/cboling/omci/generated"
+	"github.com/deckarep/golang-set"
+	"github.com/google/gopacket"
+	"time"
+)
+
+var encoderMap map[MessageType]func(*me.ManagedEntity, options) (gopacket.SerializableLayer, error)
+
+func init() {
+	encoderMap = make(map[MessageType]func(*me.ManagedEntity, options) (gopacket.SerializableLayer, error))
+
+	encoderMap[CreateRequestType] = CreateRequestFrame
+	encoderMap[DeleteRequestType] = DeleteRequestFrame
+	encoderMap[SetRequestType] = SetRequestFrame
+	encoderMap[GetRequestType] = GetRequestFrame
+	encoderMap[GetAllAlarmsRequestType] = GetAllAlarmsRequestFrame
+	encoderMap[GetAllAlarmsNextRequestType] = GetAllAlarmsNextRequestFrame
+	encoderMap[MibUploadRequestType] = MibUploadRequestFrame
+	encoderMap[MibUploadNextRequestType] = MibUploadNextRequestFrame
+	encoderMap[MibResetRequestType] = MibResetRequestFrame
+	encoderMap[TestRequestType] = TestRequestFrame
+	encoderMap[StartSoftwareDownloadRequestType] = StartSoftwareDownloadRequestFrame
+	encoderMap[DownloadSectionRequestType] = DownloadSectionRequestFrame
+	encoderMap[EndSoftwareDownloadRequestType] = EndSoftwareDownloadRequestFrame
+	encoderMap[ActivateSoftwareRequestType] = ActivateSoftwareRequestFrame
+	encoderMap[CommitSoftwareRequestType] = CommitSoftwareRequestFrame
+	encoderMap[SynchronizeTimeRequestType] = SynchronizeTimeRequestFrame
+	encoderMap[RebootRequestType] = RebootRequestFrame
+	encoderMap[GetNextRequestType] = GetNextRequestFrame
+	encoderMap[GetCurrentDataRequestType] = GetCurrentDataRequestFrame
+	encoderMap[SetTableRequestType] = SetTableRequestFrame
+	encoderMap[CreateResponseType] = CreateResponseFrame
+	encoderMap[DeleteResponseType] = DeleteResponseFrame
+	encoderMap[SetResponseType] = SetResponseFrame
+	encoderMap[GetResponseType] = GetResponseFrame
+	encoderMap[GetAllAlarmsResponseType] = GetAllAlarmsResponseFrame
+	encoderMap[GetAllAlarmsNextResponseType] = GetAllAlarmsNextResponseFrame
+	encoderMap[MibUploadResponseType] = MibUploadResponseFrame
+	encoderMap[MibUploadNextResponseType] = MibUploadNextResponseFrame
+	encoderMap[MibResetResponseType] = MibResetResponseFrame
+	encoderMap[TestResponseType] = TestResponseFrame
+	encoderMap[StartSoftwareDownloadResponseType] = StartSoftwareDownloadResponseFrame
+	encoderMap[DownloadSectionResponseType] = DownloadSectionResponseFrame
+	encoderMap[EndSoftwareDownloadResponseType] = EndSoftwareDownloadResponseFrame
+	encoderMap[ActivateSoftwareResponseType] = ActivateSoftwareResponseFrame
+	encoderMap[CommitSoftwareResponseType] = CommitSoftwareResponseFrame
+	encoderMap[SynchronizeTimeResponseType] = SynchronizeTimeResponseFrame
+	encoderMap[RebootResponseType] = RebootResponseFrame
+	encoderMap[GetNextResponseType] = GetNextResponseFrame
+	encoderMap[GetCurrentDataResponseType] = GetCurrentDataResponseFrame
+	encoderMap[SetTableResponseType] = SetTableResponseFrame
+	encoderMap[AlarmNotificationType] = AlarmNotificationFrame
+	encoderMap[AttributeValueChangeType] = AttributeValueChangeFrame
+	encoderMap[TestResultType] = TestResultFrame
+}
+
+type options struct {
+	frameFormat               DeviceIdent
+	failIfTruncated           bool
+	attributeMask             uint16
+	result                    me.Results      // Common for many responses
+	attrExecutionMask         uint16          // Create Response Only if results == 3 or Set Response only if results == 0
+	unsupportedMask           uint16          // Set Response only if results == 9
+	sequenceNumberCountOrSize uint16          // For get-next request frames and for frames that return number of commands or length
+	transactionID             uint16          // OMCI TID
+	mode                      uint8           // Get All Alarms retrieval mode
+	alarm                     AlarmOptions    // Alarm related frames
+	software                  SoftwareOptions // Software image related frames
+	payload                   interface{}     // ME or list of MEs, alarm bitmap, timestamp, ...
+}
+
+var defaultFrameOptions = options{
+	frameFormat:               BaselineIdent,
+	failIfTruncated:           false,
+	attributeMask:             0xFFFF,
+	result:                    me.Success,
+	attrExecutionMask:         0,
+	unsupportedMask:           0,
+	sequenceNumberCountOrSize: 0,
+	transactionID:             0,
+	mode:                      0,
+	software:                  defaultSoftwareOptions,
+	alarm:                     defaultAlarmOptions,
+	payload:                   nil,
+}
+
+// FrameOption sets options such as frame format, etc.
+type FrameOption func(*options)
+
+// FrameFormat determines determines the OMCI message format used on the fiber.
+// The default value is BaselineIdent
+func FrameFormat(ff DeviceIdent) FrameOption {
+	return func(o *options) {
+		o.frameFormat = ff
+	}
+}
+
+// FailIfTruncated determines whether a request to encode a frame that does
+// not have enough room for all requested options should fail and return an
+// error.
+//
+// If set to 'false', the behaviour depends on the message type/operation
+// requested. The table below provides more information:
+//
+//   Request Type	Behavour
+//	 ------------------------------------------------------------------------
+//	 CreateRequest  A single CreateRequest struct is always returned as the
+//                  CreateRequest message does not have an attributes Mask
+//                  field and a Baseline OMCI message is large enough to
+//                  support all Set-By-Create attributes.
+//
+//   GetResponse	If multiple OMCI response frames are needed to return
+//					all requested attributes, only the attributes that can
+//					fit will be returned and the FailedAttributeMask field
+//					set to the attributes that could not be returned
+//
+//					If this is an ME with an attribute that is a table, the
+//					first GetResponse struct will return the size of the
+//					attribute and the following GetNextResponse structs will
+//					contain the attribute data. The ONU application is
+//					responsible for stashing these extra struct(s) away in
+//					anticipation of possible GetNext Requests occurring for
+//					the attribute.  See the discussion on Table attributes
+//					in the GetResponse section of ITU G.988 for more
+//					information.
+//
+// If set to 'true', no struct(s) are returned and an error is provided.
+//
+// The default value is 'false'
+func FailIfTruncated(f bool) FrameOption {
+	return func(o *options) {
+		o.failIfTruncated = f
+	}
+}
+
+// attributeMask determines the attributes to encode into the frame.
+// The default value is 0xFFFF which specifies all available attributes
+// in the frame
+func AttributeMask(m uint16) FrameOption {
+	return func(o *options) {
+		o.attributeMask = m
+	}
+}
+
+// AttributeExecutionMask is used by the Create and Set Response frames to indicate
+// attributes that failed to be created/set.
+func AttributeExecutionMask(m uint16) FrameOption {
+	return func(o *options) {
+		o.attrExecutionMask = m
+	}
+}
+
+// UnsupportedAttributeMask is used by the Set Response frames to indicate
+// attributes are not supported on this ONU
+func UnsupportedAttributeMask(m uint16) FrameOption {
+	return func(o *options) {
+		o.unsupportedMask = m
+	}
+}
+
+// Result is used to set returned results in responses
+// that have that field
+func Result(r me.Results) FrameOption {
+	return func(o *options) {
+		o.result = r
+	}
+}
+
+// SequenceNumberCountOrSize is used by the GetNext and MibUploadGetNext request frames and for
+// frames that return number of commands or length such as Get (table attribute) or
+// MibUpload/GetAllAlarms/...
+func SequenceNumberCountOrSize(m uint16) FrameOption {
+	return func(o *options) {
+		o.sequenceNumberCountOrSize = m
+	}
+}
+
+// TransactionID is to specify the TID in the OMCI header. The default is
+// zero which requires the caller to set it to the appropriate value if this
+// is not an autonomous ONU notification frame
+func TransactionID(tid uint16) FrameOption {
+	return func(o *options) {
+		o.transactionID = tid
+	}
+}
+
+// RetrievalMode is to specify the the Alarm Retrieval Mode in a GetAllAlarms Request
+func RetrievalMode(m uint8) FrameOption {
+	return func(o *options) {
+		o.mode = m
+	}
+}
+
+// SuccessResult is to specify the the SuccessResult for a SynchronizeTime Response
+func SuccessResult(m uint8) FrameOption {
+	return func(o *options) {
+		o.mode = m
+	}
+}
+
+// RebootCondition is to specify the the Reboot Condition for a ONU Reboot request
+func RebootCondition(m uint8) FrameOption {
+	return func(o *options) {
+		o.mode = m
+	}
+}
+
+// Alarm is used to specify a collection of options related to Alarm notifications
+func Alarm(ao AlarmOptions) FrameOption {
+	return func(o *options) {
+		o.alarm = ao
+	}
+}
+
+// Software is used to specify a collection of options related to Software image
+// manipulation
+func Software(so SoftwareOptions) FrameOption {
+	return func(o *options) {
+		o.software = so
+	}
+}
+
+// Payload is used to specify ME payload options that are not simple types. This
+// include the ME (list of MEs) to encode into a GetNextMibUpload response, the
+// alarm bitmap for alarm relates responses/notifications, alarm bitmaps, and
+// for specifying the download section data when performing Software Download.
+func Payload(p interface{}) FrameOption {
+	return func(o *options) {
+		o.payload = p
+	}
+}
+
+// Alarm related frames have a wide variety of settable values. Placing them
+// in a separate struct is mainly to keep the base options simple
+type AlarmOptions struct {
+	AlarmClassId  me.ClassID
+	AlarmInstance uint16
+	AlarmBitmap   []byte // Should be up to 58 octets
+}
+
+var defaultAlarmOptions = AlarmOptions{
+	AlarmClassId:  0,
+	AlarmInstance: 0,
+	AlarmBitmap:   nil,
+}
+
+// Software related frames have a wide variety of settable values. Placing them
+// in a separate struct is mainly to keep the base options simple
+type SoftwareOptions struct {
+	WindowSize   uint8 // Window size - 1
+	ImageSize    uint32
+	CircuitPacks []uint16 // slot (upper 8 bits) and instance (lower 8 bits)
+	Results      []downloadResults
+}
+
+var defaultSoftwareOptions = SoftwareOptions{
+	WindowSize:   0,
+	ImageSize:    0,
+	CircuitPacks: nil,
+	Results:      nil,
+}
+
+// EncodeFrame will encode the Managed Entity specific protocol struct and an
+// OMCILayer struct. This struct can be provided to the gopacket.SerializeLayers()
+// function to be serialized into a buffer for transmission.
+func EncodeFrame(m *me.ManagedEntity, messageType MessageType, opt ...FrameOption) (*OMCI, gopacket.SerializableLayer, error) {
+	// Check for message type support
+	msgType := me.MsgType(messageType & me.MsgTypeMask)
+	meDefinition := m.GetManagedEntityDefinition()
+
+	if !me.SupportsMsgType(meDefinition, msgType) {
+		msg := fmt.Sprintf("managed entity %v does not support %v Message-Type",
+			meDefinition.GetName(), msgType)
+		return nil, nil, errors.New(msg)
+	}
+	// Decode options
+	opts := defaultFrameOptions
+	for _, o := range opt {
+		o(&opts)
+	}
+	// TODO: If AttributesMask option passed in, check for deprecated options. Allow encoding option
+	//       that will ignore deprecated option.   Add additional in the get and set meframe_test,go
+	//       test functions to test this. Also have it test attribute name(s) to see if the attribute
+	//       is deprecated.  The OMCI-Parser will need to decode deprecated for us...
+	// Note: Transaction ID should be set before frame serialization
+	omci := &OMCI{
+		TransactionID:    opts.transactionID,
+		MessageType:      messageType,
+		DeviceIdentifier: opts.frameFormat,
+	}
+	var meInfo gopacket.SerializableLayer
+	var err error
+
+	if encoder, ok := encoderMap[messageType]; ok {
+		meInfo, err = encoder(m, opts)
+	} else {
+		err = errors.New(fmt.Sprintf("message-type: %v/%#x is not supported", messageType, messageType))
+	}
+	if err != nil {
+		return nil, nil, err
+	}
+	return omci, meInfo, err
+}
+
+// For most all create methods below, error checking for valid masks, attribute
+// values, and other fields is left to when the frame is actually serialized.
+
+func checkAttributeMask(m *me.ManagedEntity, mask uint16) (uint16, error) {
+	if mask == defaultFrameOptions.attributeMask {
+		// Scale back to just what is allowed
+		return m.GetAllowedAttributeMask(), nil
+	}
+	if mask&m.GetManagedEntityDefinition().GetAllowedAttributeMask() != mask {
+		return 0, errors.New("invalid attribute mask")
+	}
+	return mask & m.GetManagedEntityDefinition().GetAllowedAttributeMask(), nil
+}
+
+// return the maximum space that can be used by attributes
+func maxPacketAvailable(m *me.ManagedEntity, opt options) uint {
+	if opt.frameFormat == BaselineIdent {
+		// OMCI Header          - 4 octets
+		// Class ID/Instance ID - 4 octets
+		// Length field			- 4 octets
+		// MIC                  - 4 octets
+		return MaxBaselineLength - 16
+	}
+	// OMCI Header          - 4 octets
+	// Class ID/Instance ID - 4 octets
+	// Length field			- 4 octets
+	// MIC                  - 4 octets
+	return MaxExtendedLength - 16
+}
+
+func calculateAttributeMask(m *me.ManagedEntity, requestedMask uint16) (uint16, error) {
+	attrDefs := m.GetAttributeDefinitions()
+	var entityIdName string
+	if entry, ok := (*attrDefs)[0]; ok {
+		entityIdName = entry.GetName()
+	} else {
+		panic("unexpected error") // All attribute definition maps have an entity ID
+	}
+	attributeNames := make([]interface{}, 0)
+	for attrName := range *m.GetAttributeValueMap() {
+		if attrName == entityIdName {
+			continue // No mask for EntityID
+		}
+		attributeNames = append(attributeNames, attrName)
+	}
+	calculatedMask, err := me.GetAttributeBitmap(*attrDefs, mapset.NewSetWith(attributeNames...))
+
+	if err != nil {
+		return 0, err
+	}
+	return calculatedMask & requestedMask, nil
+}
+
+// GenFrame is a helper function to make tests a little easier to read.
+// For a real application, use the .../omci/generated/class.go 'New'
+// functions to create your Managed Entity and then use it to call the
+// EncodeFrame method.
+func GenFrame(meInstance *me.ManagedEntity, messageType MessageType, options ...FrameOption) ([]byte, error) {
+	omciLayer, msgLayer, err := EncodeFrame(meInstance, messageType, options...)
+	if err != nil {
+		return nil, err
+	}
+	// Serialize the frame and send it
+	var serializeOptions gopacket.SerializeOptions
+	serializeOptions.FixLengths = true
+
+	buffer := gopacket.NewSerializeBuffer()
+	err = gopacket.SerializeLayers(buffer, serializeOptions, omciLayer, msgLayer)
+	if err != nil {
+		return nil, err
+	}
+	return buffer.Bytes(), nil
+}
+
+func CreateRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// NOTE: The OMCI parser does not extract the default values of set-by-create attributes
+	//       and are the zero 'default' (or nil) at this time.  For this reason, make sure
+	//       you specify all non-zero default values and pass them in appropriate
+	meLayer := &CreateRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		Attributes: *m.GetAttributeValueMap(),
+	}
+	return meLayer, nil
+}
+
+func CreateResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	meLayer := &CreateResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		Result:                 opt.result,
+		AttributeExecutionMask: opt.attributeMask,
+	}
+	if meLayer.Result == me.ParameterError {
+		meLayer.AttributeExecutionMask = opt.attrExecutionMask
+	}
+	return meLayer, nil
+}
+
+func DeleteRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	meLayer := &DeleteRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	return meLayer, nil
+}
+
+func DeleteResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	meLayer := &DeleteResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		Result: opt.result,
+	}
+	return meLayer, nil
+}
+
+func SetRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	mask, err = calculateAttributeMask(m, mask)
+	if err != nil {
+		return nil, err
+	}
+	meDefinition := m.GetManagedEntityDefinition()
+	attrDefs := *meDefinition.GetAttributeDefinitions()
+	attrMap := *m.GetAttributeValueMap()
+
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+	payloadAvailable := int(maxPayload) - 2 // Less attribute mask
+
+	meLayer := &SetRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		AttributeMask: 0,
+		Attributes:    make(me.AttributeValueMap),
+	}
+	for mask != 0 {
+		// Iterate down the attributes (Attribute 0 is the ManagedEntity ID)
+		var attrIndex uint
+		for attrIndex = 1; attrIndex <= 16; attrIndex++ {
+			// Is this attribute requested
+			if mask&(1<<(16-attrIndex)) != 0 {
+				// Get definitions since we need the name
+				attrDef, ok := attrDefs[attrIndex]
+				if !ok {
+					msg := fmt.Sprintf("Unexpected error, index %v not valued for ME %v",
+						attrIndex, meDefinition.GetName())
+					return nil, errors.New(msg)
+				}
+				var attrValue interface{}
+				attrValue, ok = attrMap[attrDef.Name]
+				if !ok {
+					msg := fmt.Sprintf("Unexpected error, attribute %v not provided in ME %v: %v",
+						attrDef.GetName(), meDefinition.GetName(), m)
+					return nil, errors.New(msg)
+				}
+				// Is space available?
+				if attrDef.Size <= payloadAvailable {
+					// Mark bit handled
+					mask &= ^(1 << (16 - attrIndex))
+					meLayer.AttributeMask |= 1 << (16 - attrIndex)
+					meLayer.Attributes[attrDef.Name] = attrValue
+					payloadAvailable -= attrDef.Size
+				} else {
+					// TODO: Should we set truncate?
+					msg := fmt.Sprintf("out-of-space. Cannot fit attribute %v into SetRequest message",
+						attrDef.GetName())
+					return nil, me.NewMessageTruncatedError(msg)
+				}
+			}
+		}
+	}
+	if err == nil && meLayer.AttributeMask == 0 {
+		// TODO: Is a set request with no attributes valid?
+		return nil, errors.New("no attributes encoded for SetRequest")
+	}
+	return meLayer, nil
+}
+
+func SetResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	meLayer := &SetResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		Result: opt.result,
+	}
+	if meLayer.Result == me.AttributeFailure {
+		meLayer.UnsupportedAttributeMask = opt.unsupportedMask
+		meLayer.FailedAttributeMask = opt.attrExecutionMask
+	}
+	return meLayer, nil
+}
+
+func GetRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Given mask sent in (could be default of 0xFFFF) get what is allowable.
+	// This will be all allowed if 0xFFFF is passed in, or a subset if a fixed
+	// number of items.
+	maxMask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Now scan attributes and reduce mask to only those requested
+	var mask uint16
+	mask, err = calculateAttributeMask(m, maxMask)
+	if err != nil {
+		return nil, err
+	}
+	if mask == 0 {
+		// TODO: Is a Get request with no attributes valid?
+		return nil, errors.New("no attributes requested for GetRequest")
+	}
+	meLayer := &GetRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		AttributeMask: mask,
+	}
+	return meLayer, nil
+}
+
+func GetResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	mask, err = calculateAttributeMask(m, mask)
+	if err != nil {
+		return nil, err
+	}
+	meLayer := &GetResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		Result:        opt.result,
+		AttributeMask: 0,
+		Attributes:    make(me.AttributeValueMap),
+	}
+	if meLayer.Result == me.AttributeFailure {
+		meLayer.UnsupportedAttributeMask = opt.unsupportedMask
+		meLayer.FailedAttributeMask = opt.attrExecutionMask
+	}
+	// Encode whatever we can
+	if meLayer.Result == me.Success || meLayer.Result == me.AttributeFailure {
+		// Encode results
+		// Get payload space available
+		maxPayload := maxPacketAvailable(m, opt)
+		payloadAvailable := int(maxPayload) - 2 - 4 // Less attribute mask and attribute error encoding
+		meDefinition := m.GetManagedEntityDefinition()
+		attrDefs := *meDefinition.GetAttributeDefinitions()
+		attrMap := *m.GetAttributeValueMap()
+
+		if mask != 0 {
+			// Iterate down the attributes (Attribute 0 is the ManagedEntity ID)
+			var attrIndex uint
+			for attrIndex = 1; attrIndex <= 16; attrIndex++ {
+				// Is this attribute requested
+				if mask&(1<<(16-attrIndex)) != 0 {
+					// Get definitions since we need the name
+					attrDef, ok := attrDefs[attrIndex]
+					if !ok {
+						msg := fmt.Sprintf("Unexpected error, index %v not valued for ME %v",
+							attrIndex, meDefinition.GetName())
+						return nil, errors.New(msg)
+					}
+					var attrValue interface{}
+					attrValue, ok = attrMap[attrDef.Name]
+					if !ok {
+						msg := fmt.Sprintf("Unexpected error, attribute %v not provided in ME %v: %v",
+							attrDef.GetName(), meDefinition.GetName(), m)
+						return nil, errors.New(msg)
+					}
+					// Is space available?
+					if attrDef.Size <= payloadAvailable {
+						// Mark bit handled
+						mask &= ^(1 << (16 - attrIndex))
+						meLayer.AttributeMask |= 1 << (16 - attrIndex)
+						meLayer.Attributes[attrDef.Name] = attrValue
+						payloadAvailable -= attrDef.Size
+
+					} else if opt.failIfTruncated {
+						// TODO: Should we set truncate?
+						msg := fmt.Sprintf("out-of-space. Cannot fit attribute %v into GetResponse message",
+							attrDef.GetName())
+						return nil, me.NewMessageTruncatedError(msg)
+					} else {
+						// Add to existing 'failed' mask and update result
+						meLayer.FailedAttributeMask |= 1 << (16 - attrIndex)
+						meLayer.Result = me.AttributeFailure
+					}
+				}
+			}
+		}
+	}
+	return meLayer, nil
+}
+
+func GetAllAlarmsRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &GetAllAlarmsRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		AlarmRetrievalMode: opt.mode,
+	}
+	return meLayer, nil
+}
+
+func GetAllAlarmsResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &GetAllAlarmsResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		NumberOfCommands: opt.sequenceNumberCountOrSize,
+	}
+	return meLayer, nil
+}
+
+func GetAllAlarmsNextRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &GetAllAlarmsNextRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		CommandSequenceNumber: opt.sequenceNumberCountOrSize,
+	}
+	return meLayer, nil
+}
+
+func GetAllAlarmsNextResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &GetAllAlarmsNextResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		AlarmEntityClass:    opt.alarm.AlarmClassId,
+		AlarmEntityInstance: opt.alarm.AlarmInstance,
+	}
+	if len(opt.alarm.AlarmBitmap) > 28 {
+		return nil, errors.New("invalid Alarm Bitmap Size. Must be [0..27]")
+	}
+	for octet := 0; octet < len(opt.alarm.AlarmBitmap); octet++ {
+		meLayer.AlarmBitMap[octet] = opt.alarm.AlarmBitmap[octet]
+	}
+	for octet := len(opt.alarm.AlarmBitmap); octet < 28; octet++ {
+		meLayer.AlarmBitMap[octet] = 0
+	}
+	return meLayer, nil
+}
+
+func MibUploadRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &MibUploadRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: 0,
+		},
+	}
+	return meLayer, nil
+}
+
+func MibUploadResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &MibUploadResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: 0,
+		},
+		NumberOfCommands: opt.sequenceNumberCountOrSize,
+	}
+	return meLayer, nil
+}
+
+func MibUploadNextRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &MibUploadNextRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: 0,
+		},
+		CommandSequenceNumber: opt.sequenceNumberCountOrSize,
+	}
+	return meLayer, nil
+}
+
+func MibUploadNextResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &MibUploadNextResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	if opt.payload == nil {
+		// Shortcut used to specify the request sequence number is out of range, encode
+		// a ME instance with class ID of zero to specify this per ITU G.988
+		meDef := &me.ManagedEntityDefinition{
+			Name:                 "InvalidSequenceNumberManagedEntity",
+			ClassID:              me.ClassID(0),
+			MessageTypes:         nil,
+			AttributeDefinitions: make(me.AttributeDefinitionMap),
+		}
+		opt.payload, _ = me.NewManagedEntity(meDef)
+	}
+	if _, ok := opt.payload.(*[]me.ManagedEntity); ok {
+		if opt.frameFormat == BaselineIdent {
+			return nil, errors.New("invalid payload for Baseline message")
+		}
+		// TODO: List of MEs. valid for extended messages only
+	} else if managedEntity, ok := opt.payload.(*me.ManagedEntity); ok {
+		// Single ME
+		meLayer.ReportedME = *managedEntity
+	} else {
+		return nil, errors.New("invalid payload for MibUploadNextResponse frame")
+	}
+	return meLayer, nil
+}
+
+func MibResetRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &MibResetRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	return meLayer, nil
+}
+
+func MibResetResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &MibResetResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		Result: opt.result,
+	}
+	return meLayer, nil
+}
+
+func AlarmNotificationFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &AlarmNotificationMsg{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+	payloadAvailable := int(maxPayload) - 1 // Less alarm sequence number
+
+	// TODO: Lots of work to do
+	fmt.Println(mask, maxPayload, payloadAvailable)
+
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func AttributeValueChangeFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &AttributeValueChangeMsg{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		AttributeMask: 0,
+		Attributes:    make(me.AttributeValueMap),
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+	payloadAvailable := int(maxPayload) - 2 // Less attribute mask
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload, payloadAvailable)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func TestRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &TestRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func TestResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &TestResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func StartSoftwareDownloadRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &StartSoftwareDownloadRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		WindowSize:           opt.software.WindowSize,
+		ImageSize:            opt.software.ImageSize,
+		NumberOfCircuitPacks: byte(len(opt.software.CircuitPacks)),
+		CircuitPacks:         opt.software.CircuitPacks,
+	}
+	// TODO: Add length check to insure we do not exceed maximum packet size
+	// payloadAvailable := int(maxPacketAvailable(m, opt))
+	payloadAvailable := 2
+	sizeNeeded := 1
+	if sizeNeeded > payloadAvailable {
+		// TODO: Should we set truncate?
+		msg := "out-of-space. Cannot fit Circuit Pack instances into Start Software Download Request message"
+		return nil, me.NewMessageTruncatedError(msg)
+	}
+	return meLayer, nil
+}
+
+func StartSoftwareDownloadResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &StartSoftwareDownloadResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		WindowSize:        opt.software.WindowSize,
+		NumberOfInstances: byte(len(opt.software.CircuitPacks)),
+		MeResults:         opt.software.Results,
+	}
+	// TODO: Add length check to insure we do not exceed maximum packet size
+	// payloadAvailable := int(maxPacketAvailable(m, opt))
+	payloadAvailable := 2
+	sizeNeeded := 1
+	if sizeNeeded > payloadAvailable {
+		// TODO: Should we set truncate?
+		msg := "out-of-space. Cannot fit Results  into Start Software Download Response message"
+		return nil, me.NewMessageTruncatedError(msg)
+	}
+	return meLayer, nil
+}
+
+func DownloadSectionRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &DownloadSectionRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func DownloadSectionResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &DownloadSectionResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func EndSoftwareDownloadRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &EndSoftwareDownloadRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func EndSoftwareDownloadResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &EndSoftwareDownloadResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func ActivateSoftwareRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &ActivateSoftwareRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func ActivateSoftwareResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &ActivateSoftwareResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func CommitSoftwareRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &CommitSoftwareRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func CommitSoftwareResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &CommitSoftwareResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func SynchronizeTimeRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &SynchronizeTimeRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Decode payload option. If nil, no timestamp provided
+	if timestamp, ok := opt.payload.(int64); ok {
+		tm := time.Unix(timestamp, 0)
+		meLayer.Year = uint16(tm.UTC().Year())
+		meLayer.Month = uint8(tm.UTC().Month())
+		meLayer.Day = uint8(tm.UTC().Day())
+		meLayer.Hour = uint8(tm.UTC().Hour())
+		meLayer.Minute = uint8(tm.UTC().Minute())
+		meLayer.Second = uint8(tm.UTC().Second())
+	}
+	return meLayer, nil
+}
+
+func SynchronizeTimeResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &SynchronizeTimeResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		Result:         opt.result,
+		SuccessResults: opt.mode,
+	}
+	return meLayer, nil
+}
+
+func RebootRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &RebootRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		RebootCondition: opt.mode,
+	}
+	return meLayer, nil
+}
+
+func RebootResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Common for all MEs
+	meLayer := &RebootResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		Result: opt.result,
+	}
+	return meLayer, nil
+}
+
+func GetNextRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Validate attribute mask
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Now scan attributes and reduce mask to only those requested
+	mask, err = calculateAttributeMask(m, mask)
+	if err != nil {
+		return nil, err
+	}
+	if mask == 0 {
+		return nil, errors.New("no attributes requested for GetNextRequest")
+	}
+	// TODO: If more than one attribute or the attribute requested is not a table attribute, return an error
+	// Common for all MEs
+	meLayer := &GetNextRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		AttributeMask:  mask,
+		SequenceNumber: opt.sequenceNumberCountOrSize,
+	}
+	return meLayer, nil
+}
+
+func GetNextResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	// Validate attribute mask
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	mask, err = calculateAttributeMask(m, mask)
+	if err != nil {
+		return nil, err
+	}
+	//
+	// Common for all MEs
+	meLayer := &GetNextResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+		Result:        opt.result,
+		AttributeMask: 0,
+		Attributes:    make(me.AttributeValueMap),
+	}
+	if meLayer.Result == me.Success {
+		// Get payload space available
+		maxPayload := maxPacketAvailable(m, opt)
+		payloadAvailable := int(maxPayload) - 3 // Less results and attribute mask
+		meDefinition := m.GetManagedEntityDefinition()
+		attrDefs := *meDefinition.GetAttributeDefinitions()
+		attrMap := *m.GetAttributeValueMap()
+
+		if mask == 0 {
+			return nil, errors.New("no attributes requested for GetNextResponse")
+		}
+		// TODO: If more than one attribute or the attribute requested is not a table attribute, return an error
+		// Iterate down the attributes (Attribute 0 is the ManagedEntity ID)
+		var attrIndex uint
+		for attrIndex = 1; attrIndex <= 16; attrIndex++ {
+			// Is this attribute requested
+			if mask&(1<<(16-attrIndex)) != 0 {
+				// Get definitions since we need the name
+				attrDef, ok := attrDefs[attrIndex]
+				if !ok {
+					msg := fmt.Sprintf("Unexpected error, index %v not valued for ME %v",
+						attrIndex, meDefinition.GetName())
+					return nil, errors.New(msg)
+				}
+				var attrValue interface{}
+				attrValue, ok = attrMap[attrDef.Name]
+				if !ok || attrValue == nil {
+					msg := fmt.Sprintf("Unexpected error, attribute %v not provided in ME %v: %v",
+						attrDef.GetName(), meDefinition.GetName(), m)
+					return nil, errors.New(msg)
+				}
+				// Is space available?
+				if attrDef.Size <= payloadAvailable {
+					// Mark bit handled
+					mask &= ^(1 << (16 - attrIndex))
+					meLayer.AttributeMask |= 1 << (16 - attrIndex)
+					meLayer.Attributes[attrDef.Name] = attrValue
+					payloadAvailable -= attrDef.Size
+				} else {
+					// TODO: Should we set truncate?
+					msg := fmt.Sprintf("out-of-space. Cannot fit attribute %v into GetNextResponse message",
+						attrDef.GetName())
+					return nil, me.NewMessageTruncatedError(msg)
+				}
+			}
+		}
+	}
+	return meLayer, nil
+}
+
+func TestResultFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &TestResultMsg{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func GetCurrentDataRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &GetCurrentDataRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func GetCurrentDataResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &GetCurrentDataResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func SetTableRequestFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	if opt.frameFormat != ExtendedIdent {
+		return nil, errors.New("SetTable message type only supported with Extended OMCI Messaging")
+	}
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &SetTableRequest{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
+
+func SetTableResponseFrame(m *me.ManagedEntity, opt options) (gopacket.SerializableLayer, error) {
+	if opt.frameFormat != ExtendedIdent {
+		return nil, errors.New("SetTable message type only supported with Extended OMCI Messaging")
+	}
+	mask, err := checkAttributeMask(m, opt.attributeMask)
+	if err != nil {
+		return nil, err
+	}
+	// Common for all MEs
+	meLayer := &SetTableResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    m.GetClassID(),
+			EntityInstance: m.GetEntityID(),
+		},
+	}
+	// Get payload space available
+	maxPayload := maxPacketAvailable(m, opt)
+
+	// TODO: Lots of work to do
+
+	fmt.Println(mask, maxPayload)
+	return meLayer, errors.New("todo: Not implemented")
+}
diff --git a/vendor/github.com/cboling/omci/messagetypes.go b/vendor/github.com/cboling/omci/messagetypes.go
new file mode 100644
index 0000000..8ac4dde
--- /dev/null
+++ b/vendor/github.com/cboling/omci/messagetypes.go
@@ -0,0 +1,3472 @@
+/*
+ * 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.
+ *
+ */
+package omci
+
+import (
+	"encoding/binary"
+	"errors"
+	"fmt"
+	me "github.com/cboling/omci/generated"
+	"github.com/google/gopacket"
+)
+
+// MessageType is the OMCI Message Type or'ed with the AR/AK flags as appropriate.
+type MessageType byte
+
+const (
+	CreateRequestType                 = MessageType(byte(me.Create) | me.AR)
+	CreateResponseType                = MessageType(byte(me.Create) | me.AK)
+	DeleteRequestType                 = MessageType(byte(me.Delete) | me.AR)
+	DeleteResponseType                = MessageType(byte(me.Delete) | me.AK)
+	SetRequestType                    = MessageType(byte(me.Set) | me.AR)
+	SetResponseType                   = MessageType(byte(me.Set) | me.AK)
+	GetRequestType                    = MessageType(byte(me.Get) | me.AR)
+	GetResponseType                   = MessageType(byte(me.Get) | me.AK)
+	GetAllAlarmsRequestType           = MessageType(byte(me.GetAllAlarms) | me.AR)
+	GetAllAlarmsResponseType          = MessageType(byte(me.GetAllAlarms) | me.AK)
+	GetAllAlarmsNextRequestType       = MessageType(byte(me.GetAllAlarmsNext) | me.AR)
+	GetAllAlarmsNextResponseType      = MessageType(byte(me.GetAllAlarmsNext) | me.AK)
+	MibUploadRequestType              = MessageType(byte(me.MibUpload) | me.AR)
+	MibUploadResponseType             = MessageType(byte(me.MibUpload) | me.AK)
+	MibUploadNextRequestType          = MessageType(byte(me.MibUploadNext) | me.AR)
+	MibUploadNextResponseType         = MessageType(byte(me.MibUploadNext) | me.AK)
+	MibResetRequestType               = MessageType(byte(me.MibReset) | me.AR)
+	MibResetResponseType              = MessageType(byte(me.MibReset) | me.AK)
+	TestRequestType                   = MessageType(byte(me.Test) | me.AR)
+	TestResponseType                  = MessageType(byte(me.Test) | me.AK)
+	StartSoftwareDownloadRequestType  = MessageType(byte(me.StartSoftwareDownload) | me.AR)
+	StartSoftwareDownloadResponseType = MessageType(byte(me.StartSoftwareDownload) | me.AK)
+	DownloadSectionRequestType        = MessageType(byte(me.DownloadSection) | me.AR)
+	DownloadSectionResponseType       = MessageType(byte(me.DownloadSection) | me.AK)
+	EndSoftwareDownloadRequestType    = MessageType(byte(me.EndSoftwareDownload) | me.AR)
+	EndSoftwareDownloadResponseType   = MessageType(byte(me.EndSoftwareDownload) | me.AK)
+	ActivateSoftwareRequestType       = MessageType(byte(me.ActivateSoftware) | me.AR)
+	ActivateSoftwareResponseType      = MessageType(byte(me.ActivateSoftware) | me.AK)
+	CommitSoftwareRequestType         = MessageType(byte(me.CommitSoftware) | me.AR)
+	CommitSoftwareResponseType        = MessageType(byte(me.CommitSoftware) | me.AK)
+	SynchronizeTimeRequestType        = MessageType(byte(me.SynchronizeTime) | me.AR)
+	SynchronizeTimeResponseType       = MessageType(byte(me.SynchronizeTime) | me.AK)
+	RebootRequestType                 = MessageType(byte(me.Reboot) | me.AR)
+	RebootResponseType                = MessageType(byte(me.Reboot) | me.AK)
+	GetNextRequestType                = MessageType(byte(me.GetNext) | me.AR)
+	GetNextResponseType               = MessageType(byte(me.GetNext) | me.AK)
+	GetCurrentDataRequestType         = MessageType(byte(me.GetCurrentData) | me.AR)
+	GetCurrentDataResponseType        = MessageType(byte(me.GetCurrentData) | me.AK)
+	SetTableRequestType               = MessageType(byte(me.SetTable) | me.AR)
+	SetTableResponseType              = MessageType(byte(me.SetTable) | me.AK)
+	// Autonomous ONU messages
+	AlarmNotificationType    = MessageType(byte(me.AlarmNotification))
+	AttributeValueChangeType = MessageType(byte(me.AttributeValueChange))
+	TestResultType           = MessageType(byte(me.TestResult))
+)
+
+func (mt MessageType) String() string {
+	switch mt {
+	default:
+		return "Unknown"
+
+	case CreateRequestType:
+		return "Create Request"
+	case CreateResponseType:
+		return "Create Response"
+	case DeleteRequestType:
+		return "Delete Request"
+	case DeleteResponseType:
+		return "Delete Response"
+	case SetRequestType:
+		return "Set Request"
+	case SetResponseType:
+		return "Set Response"
+	case GetRequestType:
+		return "Get Request"
+	case GetResponseType:
+		return "Get Response"
+	case GetAllAlarmsRequestType:
+		return "Get All Alarms Request"
+	case GetAllAlarmsResponseType:
+		return "Get All Alarms Response"
+	case GetAllAlarmsNextRequestType:
+		return "Get All Alarms Next Request"
+	case GetAllAlarmsNextResponseType:
+		return "Get All Alarms Next Response"
+	case MibUploadRequestType:
+		return "MIB Upload Request"
+	case MibUploadResponseType:
+		return "MIB Upload Response"
+	case MibUploadNextRequestType:
+		return "MIB Upload Next Request"
+	case MibUploadNextResponseType:
+		return "MIB Upload Next Response"
+	case MibResetRequestType:
+		return "MIB Reset Request"
+	case MibResetResponseType:
+		return "MIB Reset Response"
+	case TestRequestType:
+		return "Test Request"
+	case TestResponseType:
+		return "Test Response"
+	case StartSoftwareDownloadRequestType:
+		return "Start Software Download Request"
+	case StartSoftwareDownloadResponseType:
+		return "Start Software Download Response"
+	case DownloadSectionRequestType:
+		return "Download Section Request"
+	case DownloadSectionResponseType:
+		return "Download Section Response"
+	case EndSoftwareDownloadRequestType:
+		return "End Software Download Request"
+	case EndSoftwareDownloadResponseType:
+		return "End Software Download Response"
+	case ActivateSoftwareRequestType:
+		return "Activate Software Request"
+	case ActivateSoftwareResponseType:
+		return "Activate Software Response"
+	case CommitSoftwareRequestType:
+		return "Commit Software Request"
+	case CommitSoftwareResponseType:
+		return "Commit Software Response"
+	case SynchronizeTimeRequestType:
+		return "Synchronize Time Request"
+	case SynchronizeTimeResponseType:
+		return "Synchronize Time Response"
+	case RebootRequestType:
+		return "Reboot Request"
+	case RebootResponseType:
+		return "Reboot Response"
+	case GetNextRequestType:
+		return "Get Next Request"
+	case GetNextResponseType:
+		return "Get Next Response"
+	case GetCurrentDataRequestType:
+		return "Get Current Data Request"
+	case GetCurrentDataResponseType:
+		return "Get Current Data Response"
+	case SetTableRequestType:
+		return "Set Table Request"
+	case SetTableResponseType:
+		return "Set Table Response"
+	case AlarmNotificationType:
+		return "Alarm Notification"
+	case AttributeValueChangeType:
+		return "Attribute Value Change"
+	case TestResultType:
+		return "Test Result"
+	}
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// CreateRequest
+type CreateRequest struct {
+	MeBasePacket
+	Attributes me.AttributeValueMap
+}
+
+func (omci *CreateRequest) String() string {
+	return fmt.Sprintf("%v, attributes: %v", omci.MeBasePacket.String(), omci.Attributes)
+}
+
+func (omci *CreateRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	// Create attribute mask for all set-by-create entries
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Create
+	if !me.SupportsMsgType(meDefinition, me.Create) {
+		return me.NewProcessingError("managed entity does not support Create Message-Type")
+	}
+	var sbcMask uint16
+	for index, attr := range *meDefinition.GetAttributeDefinitions() {
+		if me.SupportsAttributeAccess(attr, me.SetByCreate) {
+			if index == 0 {
+				continue // Skip Entity ID
+			}
+			sbcMask |= 1 << (15 - uint(index-1))
+		}
+	}
+	// Attribute decode
+	omci.Attributes, err = meDefinition.DecodeAttributes(sbcMask, data[4:], p, byte(CreateRequestType))
+	if err != nil {
+		return err
+	}
+	if eidDef, eidDefOK := (*meDefinition.GetAttributeDefinitions())[0]; eidDefOK {
+		omci.Attributes[eidDef.GetName()] = omci.EntityInstance
+		return nil
+	}
+	panic("All Managed Entities have an EntityID attribute")
+}
+
+func decodeCreateRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &CreateRequest{}
+	omci.MsgLayerType = LayerTypeCreateRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *CreateRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	var sbcMask uint16
+	for index, attr := range *meDefinition.GetAttributeDefinitions() {
+		if me.SupportsAttributeAccess(attr, me.SetByCreate) {
+			if index == 0 {
+				continue // Skip Entity ID
+			}
+			sbcMask |= 1 << (15 - uint(index-1))
+		}
+	}
+	// Attribute serialization
+	// TODO: Only Baseline supported at this time
+	bytesAvailable := MaxBaselineLength - 8 - 8
+	return meDefinition.SerializeAttributes(omci.Attributes, sbcMask, b, byte(CreateRequestType), bytesAvailable)
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// CreateResponse
+type CreateResponse struct {
+	MeBasePacket
+	Result                 me.Results
+	AttributeExecutionMask uint16 // Used when Result == ParameterError
+}
+
+func (omci *CreateResponse) String() string {
+	return fmt.Sprintf("%v, Result: %d (%v), Mask: %#x",
+		omci.MeBasePacket.String(), omci.Result, omci.Result, omci.AttributeExecutionMask)
+}
+
+func (omci *CreateResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Create
+	if !me.SupportsMsgType(entity, me.Create) {
+		return me.NewProcessingError("managed entity does not support the Create Message-Type")
+	}
+	omci.Result = me.Results(data[4])
+	if omci.Result == me.ParameterError {
+		omci.AttributeExecutionMask = binary.BigEndian.Uint16(data[5:])
+		// TODO: validation that attributes set in mask are SetByCreate would be good here
+	}
+	return nil
+}
+
+func decodeCreateResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &CreateResponse{}
+	omci.MsgLayerType = LayerTypeCreateResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *CreateResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Create
+	if !me.SupportsMsgType(entity, me.Create) {
+		return me.NewProcessingError("managed entity does not support the Create Message-Type")
+	}
+	bytes, err := b.AppendBytes(3)
+	if err != nil {
+		return err
+	}
+	bytes[0] = byte(omci.Result)
+	if omci.Result == me.ParameterError {
+		// TODO: validation that attributes set in mask are SetByCreate would be good here
+		binary.BigEndian.PutUint16(bytes[1:], omci.AttributeExecutionMask)
+	} else {
+		binary.BigEndian.PutUint16(bytes[1:], 0)
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// DeleteRequest
+type DeleteRequest struct {
+	MeBasePacket
+}
+
+func (omci *DeleteRequest) String() string {
+	return fmt.Sprintf("%v", omci.MeBasePacket.String())
+}
+
+func (omci *DeleteRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Delete
+	if !me.SupportsMsgType(entity, me.Delete) {
+		return me.NewProcessingError("managed entity does not support the Delete Message-Type")
+	}
+	return nil
+}
+
+func decodeDeleteRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &DeleteRequest{}
+	omci.MsgLayerType = LayerTypeDeleteRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *DeleteRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Delete
+	if !me.SupportsMsgType(entity, me.Delete) {
+		return me.NewProcessingError("managed entity does not support the Delete Message-Type")
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// DeleteResponse
+type DeleteResponse struct {
+	MeBasePacket
+	Result me.Results
+}
+
+func (omci *DeleteResponse) String() string {
+	return fmt.Sprintf("%v, Result: %d (%v)",
+		omci.MeBasePacket.String(), omci.Result, omci.Result)
+}
+
+func (omci *DeleteResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Delete
+	if !me.SupportsMsgType(entity, me.Delete) {
+		return me.NewProcessingError("managed entity does not support the Delete Message-Type")
+	}
+	omci.Result = me.Results(data[4])
+	return nil
+}
+
+func decodeDeleteResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &DeleteResponse{}
+	omci.MsgLayerType = LayerTypeDeleteResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *DeleteResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Delete
+	if !me.SupportsMsgType(entity, me.Delete) {
+		return me.NewProcessingError("managed entity does not support the Delete Message-Type")
+	}
+	bytes, err := b.AppendBytes(1)
+	if err != nil {
+		return err
+	}
+	bytes[0] = byte(omci.Result)
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// SetRequest
+type SetRequest struct {
+	MeBasePacket
+	AttributeMask uint16
+	Attributes    me.AttributeValueMap
+}
+
+func (omci *SetRequest) String() string {
+	return fmt.Sprintf("%v, Mask: %#x, attributes: %v",
+		omci.MeBasePacket.String(), omci.AttributeMask, omci.Attributes)
+}
+
+func (omci *SetRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Set
+	if !me.SupportsMsgType(meDefinition, me.Set) {
+		return me.NewProcessingError("managed entity does not support Set Message-Type")
+	}
+	omci.AttributeMask = binary.BigEndian.Uint16(data[4:6])
+
+	// Attribute decode
+	omci.Attributes, err = meDefinition.DecodeAttributes(omci.AttributeMask, data[6:], p, byte(SetRequestType))
+	if err != nil {
+		return err
+	}
+	// Validate all attributes support write
+	for attrName := range omci.Attributes {
+		attr, err := me.GetAttributeDefinitionByName(meDefinition.GetAttributeDefinitions(), attrName)
+		if err != nil {
+			return err
+		}
+		if attr.Index != 0 && !me.SupportsAttributeAccess(attr, me.Write) {
+			msg := fmt.Sprintf("attribute '%v' does not support write access", attrName)
+			return me.NewProcessingError(msg)
+		}
+	}
+	if eidDef, eidDefOK := (*meDefinition.GetAttributeDefinitions())[0]; eidDefOK {
+		omci.Attributes[eidDef.GetName()] = omci.EntityInstance
+		return nil
+	}
+	panic("All Managed Entities have an EntityID attribute")
+}
+
+func decodeSetRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &SetRequest{}
+	omci.MsgLayerType = LayerTypeSetRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *SetRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Set
+	if !me.SupportsMsgType(meDefinition, me.Set) {
+		return me.NewProcessingError("managed entity does not support Set Message-Type")
+	}
+	// Validate all attributes support write
+	for attrName := range omci.Attributes {
+		attr, err := me.GetAttributeDefinitionByName(meDefinition.GetAttributeDefinitions(), attrName)
+		if err != nil {
+			return err
+		}
+		// Do not test for write of Entity ID in the attribute list
+		if attr.Index != 0 && !me.SupportsAttributeAccess(attr, me.Write) {
+			// TODO: Check ITU spec to see if this should be listed as a failed
+			//       attribute and not a processing error.
+			msg := fmt.Sprintf("attribute '%v' does not support write access", attrName)
+			return me.NewProcessingError(msg)
+		}
+	}
+	bytes, err := b.AppendBytes(2)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes, omci.AttributeMask)
+
+	// Attribute serialization
+	// TODO: Only Baseline supported at this time
+	bytesAvailable := MaxBaselineLength - 10 - 8
+
+	return meDefinition.SerializeAttributes(omci.Attributes, omci.AttributeMask, b,
+		byte(SetRequestType), bytesAvailable)
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// SetResponse
+type SetResponse struct {
+	MeBasePacket
+	Result                   me.Results
+	UnsupportedAttributeMask uint16
+	FailedAttributeMask      uint16
+}
+
+func (omci *SetResponse) String() string {
+	return fmt.Sprintf("%v, Result: %d (%v), Unsupported Mask: %#x, Failed Mask: %#x",
+		omci.MeBasePacket.String(), omci.Result, omci.Result, omci.UnsupportedAttributeMask,
+		omci.FailedAttributeMask)
+}
+
+func (omci *SetResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Set
+	if !me.SupportsMsgType(entity, me.Set) {
+		return me.NewProcessingError("managed entity does not support the Delete Message-Type")
+	}
+	omci.Result = me.Results(data[4])
+
+	if omci.Result == me.AttributeFailure {
+		omci.UnsupportedAttributeMask = binary.BigEndian.Uint16(data[5:7])
+		omci.FailedAttributeMask = binary.BigEndian.Uint16(data[7:9])
+	}
+	return nil
+}
+
+func decodeSetResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &SetResponse{}
+	omci.MsgLayerType = LayerTypeSetResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *SetResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Set
+	if !me.SupportsMsgType(entity, me.Set) {
+		return me.NewProcessingError("managed entity does not support the Set Message-Type")
+	}
+	bytes, err := b.AppendBytes(5)
+	if err != nil {
+		return err
+	}
+	bytes[0] = byte(omci.Result)
+	binary.BigEndian.PutUint16(bytes[1:3], omci.UnsupportedAttributeMask)
+	binary.BigEndian.PutUint16(bytes[3:5], omci.FailedAttributeMask)
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// GetRequest
+type GetRequest struct {
+	MeBasePacket
+	AttributeMask uint16
+}
+
+func (omci *GetRequest) String() string {
+	return fmt.Sprintf("%v, Mask: %#x",
+		omci.MeBasePacket.String(), omci.AttributeMask)
+}
+func (omci *GetRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get
+	if !me.SupportsMsgType(meDefinition, me.Get) {
+		return me.NewProcessingError("managed entity does not support Get Message-Type")
+	}
+	omci.AttributeMask = binary.BigEndian.Uint16(data[4:6])
+	return nil
+}
+
+func decodeGetRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &GetRequest{}
+	omci.MsgLayerType = LayerTypeGetRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *GetRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Set
+	if !me.SupportsMsgType(meDefinition, me.Get) {
+		return me.NewProcessingError("managed entity does not support Get Message-Type")
+	}
+	bytes, err := b.AppendBytes(2)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes, omci.AttributeMask)
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// GetResponse
+type GetResponse struct {
+	MeBasePacket
+	Result                   me.Results
+	AttributeMask            uint16
+	Attributes               me.AttributeValueMap
+	UnsupportedAttributeMask uint16
+	FailedAttributeMask      uint16
+}
+
+func (omci *GetResponse) String() string {
+	return fmt.Sprintf("%v, Result: %d (%v), Mask: %#x, Unsupported: %#x, Failed: %#x, attributes: %v",
+		omci.MeBasePacket.String(), omci.Result, omci.Result, omci.AttributeMask,
+		omci.UnsupportedAttributeMask, omci.FailedAttributeMask, omci.Attributes)
+}
+
+func (omci *GetResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get
+	if !me.SupportsMsgType(meDefinition, me.Get) {
+		return me.NewProcessingError("managed entity does not support Get Message-Type")
+	}
+	omci.Result = me.Results(data[4])
+	omci.AttributeMask = binary.BigEndian.Uint16(data[5:7])
+
+	// Attribute decode. Note that the ITU-T G.988 specification states that the
+	//                   Unsupported and Failed attribute masks are always present
+	//                   but only valid if the status code== 9.  However some XGS
+	//                   ONUs (T&W and Alpha, perhaps more) will use these last 4
+	//                   octets for data if the status code == 0.  So accommodate
+	//                   this behaviour in favor of greater interoperability.
+	lastOctet := 36
+	if omci.Result == me.AttributeFailure {
+		lastOctet = 32
+	}
+	omci.Attributes, err = meDefinition.DecodeAttributes(omci.AttributeMask, data[7:lastOctet], p, byte(GetResponseType))
+	if err != nil {
+		return err
+	}
+	// If Attribute failed or Unknown, decode optional attribute mask
+	if omci.Result == me.AttributeFailure {
+		omci.UnsupportedAttributeMask = binary.BigEndian.Uint16(data[32:34])
+		omci.FailedAttributeMask = binary.BigEndian.Uint16(data[34:36])
+	}
+	// Validate all attributes support read
+	for attrName := range omci.Attributes {
+		attr, err := me.GetAttributeDefinitionByName(meDefinition.GetAttributeDefinitions(), attrName)
+		if err != nil {
+			return err
+		}
+		if attr.Index != 0 && !me.SupportsAttributeAccess(attr, me.Read) {
+			msg := fmt.Sprintf("attribute '%v' does not support read access", attrName)
+			return me.NewProcessingError(msg)
+		}
+	}
+	if eidDef, eidDefOK := (*meDefinition.GetAttributeDefinitions())[0]; eidDefOK {
+		omci.Attributes[eidDef.GetName()] = omci.EntityInstance
+		return nil
+	}
+	panic("All Managed Entities have an EntityID attribute")
+}
+
+func decodeGetResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &GetResponse{}
+	omci.MsgLayerType = LayerTypeGetResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *GetResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get
+	if !me.SupportsMsgType(meDefinition, me.Get) {
+		return me.NewProcessingError("managed entity does not support the Get Message-Type")
+	}
+	bytes, err := b.AppendBytes(3)
+	if err != nil {
+		return err
+	}
+	bytes[0] = byte(omci.Result)
+	binary.BigEndian.PutUint16(bytes[1:3], omci.AttributeMask)
+
+	// Validate all attributes support read
+	for attrName := range omci.Attributes {
+		attr, err := me.GetAttributeDefinitionByName(meDefinition.GetAttributeDefinitions(), attrName)
+		if err != nil {
+			return err
+		}
+		if attr.Index != 0 && !me.SupportsAttributeAccess(attr, me.Read) {
+			msg := fmt.Sprintf("attribute '%v' does not support read access", attrName)
+			return me.NewProcessingError(msg)
+		}
+	}
+	// Attribute serialization
+	switch omci.Result {
+	default:
+		break
+
+	case me.Success, me.AttributeFailure:
+		// TODO: Baseline only supported at this time)
+		bytesAvailable := MaxBaselineLength - 11 - 4 - 8
+
+		err = meDefinition.SerializeAttributes(omci.Attributes, omci.AttributeMask,
+			b, byte(GetResponseType), bytesAvailable)
+		if err != nil {
+			return err
+		}
+		// Calculate space left. Max  - msgType header - OMCI trailer - spacedUsedSoFar
+		bytesLeft := MaxBaselineLength - 4 - 8 - len(b.Bytes())
+
+		remainingBytes, err := b.AppendBytes(bytesLeft + 4)
+		if err != nil {
+			return me.NewMessageTruncatedError(err.Error())
+		}
+		copy(remainingBytes, lotsOfZeros[:])
+		if omci.Result == me.AttributeFailure {
+			binary.BigEndian.PutUint16(remainingBytes[bytesLeft-4:bytesLeft-2], omci.UnsupportedAttributeMask)
+			binary.BigEndian.PutUint16(remainingBytes[bytesLeft-2:bytesLeft], omci.FailedAttributeMask)
+		}
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// GetAllAlarms
+type GetAllAlarmsRequest struct {
+	MeBasePacket
+	AlarmRetrievalMode byte
+}
+
+func (omci *GetAllAlarmsRequest) String() string {
+	return fmt.Sprintf("%v, Retrieval Mode: %v",
+		omci.MeBasePacket.String(), omci.AlarmRetrievalMode)
+}
+
+func (omci *GetAllAlarmsRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get All Alarms
+	if !me.SupportsMsgType(meDefinition, me.GetAllAlarms) {
+		return me.NewProcessingError("managed entity does not support Get All Alarms Message-Type")
+	}
+	// Entity Class are always ONU DATA (2) and Entity Instance of 0
+	if omci.EntityClass != me.OnuDataClassId {
+		msg := fmt.Sprintf("invalid Entity Class for Get All Alarms request: %v",
+			omci.EntityClass)
+		return me.NewProcessingError(msg)
+	}
+	if omci.EntityInstance != 0 {
+		msg := fmt.Sprintf("invalid Entity Instance for Get All Alarms request: %v",
+			omci.EntityInstance)
+		return me.NewUnknownInstanceError(msg)
+	}
+	omci.AlarmRetrievalMode = data[4]
+	if omci.AlarmRetrievalMode > 1 {
+		msg := fmt.Sprintf("invalid Alarm Retrieval Mode for Get All Alarms request: %v, must be 0..1",
+			omci.AlarmRetrievalMode)
+		return errors.New(msg)
+	}
+	return nil
+}
+
+func decodeGetAllAlarmsRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &GetAllAlarmsRequest{}
+	omci.MsgLayerType = LayerTypeGetAllAlarmsRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *GetAllAlarmsRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get All Alarms
+	if !me.SupportsMsgType(entity, me.GetAllAlarms) {
+		return me.NewProcessingError("managed entity does not support the Get All Alarms Message-Type")
+	}
+	bytes, err := b.AppendBytes(1)
+	if err != nil {
+		return err
+	}
+	bytes[0] = omci.AlarmRetrievalMode
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// GetAllAlarms
+type GetAllAlarmsResponse struct {
+	MeBasePacket
+	NumberOfCommands uint16
+}
+
+func (omci *GetAllAlarmsResponse) String() string {
+	return fmt.Sprintf("%v, NumberOfCommands: %d",
+		omci.MeBasePacket.String(), omci.NumberOfCommands)
+}
+
+func (omci *GetAllAlarmsResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get All Alarms
+	if !me.SupportsMsgType(meDefinition, me.GetAllAlarms) {
+		return me.NewProcessingError("managed entity does not support Get All Alarms Message-Type")
+	}
+	// Entity Class are always ONU DATA (2) and Entity Instance of 0
+	if omci.EntityClass != me.OnuDataClassId {
+		msg := fmt.Sprintf("invalid Entity Class for Get All Alarms response: %v",
+			omci.EntityClass)
+		return me.NewProcessingError(msg)
+	}
+	if omci.EntityInstance != 0 {
+		msg := fmt.Sprintf("invalid Entity Instance for Get All Alarms response: %v",
+			omci.EntityInstance)
+		return me.NewUnknownInstanceError(msg)
+	}
+	omci.NumberOfCommands = binary.BigEndian.Uint16(data[4:6])
+	return nil
+}
+
+func decodeGetAllAlarmsResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &GetAllAlarmsResponse{}
+	omci.MsgLayerType = LayerTypeGetAllAlarmsResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *GetAllAlarmsResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get All Alarms
+	if !me.SupportsMsgType(entity, me.GetAllAlarms) {
+		return me.NewProcessingError("managed entity does not support the Get All Alarms Message-Type")
+	}
+	bytes, err := b.AppendBytes(2)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes[0:2], omci.NumberOfCommands)
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// GetAllAlarms
+type GetAllAlarmsNextRequest struct {
+	MeBasePacket
+	CommandSequenceNumber uint16
+}
+
+func (omci *GetAllAlarmsNextRequest) String() string {
+	return fmt.Sprintf("%v, Sequence Number: %d",
+		omci.MeBasePacket.String(), omci.CommandSequenceNumber)
+}
+
+func (omci *GetAllAlarmsNextRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get All Alarms
+	if !me.SupportsMsgType(meDefinition, me.GetAllAlarmsNext) {
+		return me.NewProcessingError("managed entity does not support Get All Alarms Next Message-Type")
+	}
+	// Entity Class are always ONU DATA (2) and Entity Instance of 0
+	if omci.EntityClass != me.OnuDataClassId {
+		msg := fmt.Sprintf("invalid Entity Class for Get All Alarms Next request: %v",
+			omci.EntityClass)
+		return me.NewProcessingError(msg)
+	}
+	if omci.EntityInstance != 0 {
+		msg := fmt.Sprintf("invalid Entity Instance for Get All Alarms Next request: %v",
+			omci.EntityInstance)
+		return me.NewUnknownInstanceError(msg)
+	}
+	omci.CommandSequenceNumber = binary.BigEndian.Uint16(data[4:6])
+	return nil
+}
+
+func decodeGetAllAlarmsNextRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &GetAllAlarmsNextRequest{}
+	omci.MsgLayerType = LayerTypeGetAllAlarmsNextRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *GetAllAlarmsNextRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get All Alarms Next
+	if !me.SupportsMsgType(entity, me.GetAllAlarmsNext) {
+		return me.NewProcessingError("managed entity does not support the Get All Alarms Next Message-Type")
+	}
+	bytes, err := b.AppendBytes(2)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes, omci.CommandSequenceNumber)
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// GetAllAlarms
+type GetAllAlarmsNextResponse struct {
+	MeBasePacket
+	AlarmEntityClass    me.ClassID
+	AlarmEntityInstance uint16
+	AlarmBitMap         [28]byte // 224 bits
+}
+
+func (omci *GetAllAlarmsNextResponse) String() string {
+	return fmt.Sprintf("%v, CID: %v, EID: (%d/%#x), Bitmap: %v",
+		omci.MeBasePacket.String(), omci.AlarmEntityClass, omci.AlarmEntityInstance,
+		omci.AlarmEntityInstance, omci.AlarmBitMap)
+}
+
+func (omci *GetAllAlarmsNextResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get All Alarms Next
+	if !me.SupportsMsgType(meDefinition, me.GetAllAlarmsNext) {
+		return me.NewProcessingError("managed entity does not support Get All Alarms Next Message-Type")
+	}
+	// Entity Class are always ONU DATA (2) and Entity Instance of 0
+	if omci.EntityClass != me.OnuDataClassId {
+		msg := fmt.Sprintf("invalid Entity Class for Get All Alarms Next response: %v",
+			omci.EntityClass)
+		return me.NewProcessingError(msg)
+	}
+	if omci.EntityInstance != 0 {
+		msg := fmt.Sprintf("invalid Entity Instance for Get All Alarms Next response: %v",
+			omci.EntityInstance)
+		return me.NewUnknownInstanceError(msg)
+	}
+	omci.AlarmEntityClass = me.ClassID(binary.BigEndian.Uint16(data[4:6]))
+	omci.AlarmEntityInstance = binary.BigEndian.Uint16(data[6:8])
+
+	copy(omci.AlarmBitMap[:], data[8:36])
+	return nil
+}
+
+func decodeGetAllAlarmsNextResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &GetAllAlarmsNextResponse{}
+	omci.MsgLayerType = LayerTypeGetAllAlarmsNextResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *GetAllAlarmsNextResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get All Alarms Next
+	if !me.SupportsMsgType(entity, me.GetAllAlarmsNext) {
+		return me.NewProcessingError("managed entity does not support the Get All Alarms Next Message-Type")
+	}
+	bytes, err := b.AppendBytes(2 + 2 + 28)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes[0:], uint16(omci.AlarmEntityClass))
+	binary.BigEndian.PutUint16(bytes[2:], omci.AlarmEntityInstance)
+	copy(bytes[4:], omci.AlarmBitMap[:])
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// MibUploadRequest
+type MibUploadRequest struct {
+	MeBasePacket
+}
+
+func (omci *MibUploadRequest) String() string {
+	return fmt.Sprintf("%v", omci.MeBasePacket.String())
+}
+
+func (omci *MibUploadRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	// ME needs to support MIB Upload
+	if !me.SupportsMsgType(meDefinition, me.MibUpload) {
+		return me.NewProcessingError("managed entity does not support MIB Upload Message-Type")
+	}
+	// Entity Class are always ONU DATA (2) and Entity Instance of 0
+	if omci.EntityClass != me.OnuDataClassId {
+		msg := fmt.Sprintf("invalid Entity Class for  MIB Upload request: %v",
+			omci.EntityClass)
+		return me.NewProcessingError(msg)
+	}
+	if omci.EntityInstance != 0 {
+		msg := fmt.Sprintf("invalid Entity Instance for MIB Upload request: %v",
+			omci.EntityInstance)
+		return me.NewUnknownInstanceError(msg)
+	}
+	return nil
+}
+
+func decodeMibUploadRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &MibUploadRequest{}
+	omci.MsgLayerType = LayerTypeMibUploadRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *MibUploadRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get
+	if !me.SupportsMsgType(meDefinition, me.MibUpload) {
+		return me.NewProcessingError("managed entity does not support the MIB Upload Message-Type")
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// MibUploadResponse
+type MibUploadResponse struct {
+	MeBasePacket
+	NumberOfCommands uint16
+}
+
+func (omci *MibUploadResponse) String() string {
+	return fmt.Sprintf("%v, NumberOfCommands: %#v",
+		omci.MeBasePacket.String(), omci.NumberOfCommands)
+}
+
+func (omci *MibUploadResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support MIB Upload
+	if !me.SupportsMsgType(meDefinition, me.MibUpload) {
+		return me.NewProcessingError("managed entity does not support MIB Upload Message-Type")
+	}
+	// Entity Class are always ONU DATA (2) and Entity Instance of 0
+	if omci.EntityClass != me.OnuDataClassId {
+		msg := fmt.Sprintf("invalid Entity Class for  MIB Upload response: %v",
+			omci.EntityClass)
+		return me.NewProcessingError(msg)
+	}
+	if omci.EntityInstance != 0 {
+		msg := fmt.Sprintf("invalid Entity Instance for MIB Upload response: %v",
+			omci.EntityInstance)
+		return me.NewUnknownInstanceError(msg)
+	}
+	omci.NumberOfCommands = binary.BigEndian.Uint16(data[4:6])
+	return nil
+}
+
+func decodeMibUploadResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &MibUploadResponse{}
+	omci.MsgLayerType = LayerTypeMibUploadResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *MibUploadResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support MIB Upload
+	if !me.SupportsMsgType(entity, me.MibUpload) {
+		return me.NewProcessingError("managed entity does not support the MIB Upload Message-Type")
+	}
+	bytes, err := b.AppendBytes(2)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes[0:2], omci.NumberOfCommands)
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type MibUploadNextRequest struct {
+	MeBasePacket
+	CommandSequenceNumber uint16
+}
+
+func (omci *MibUploadNextRequest) String() string {
+	return fmt.Sprintf("%v, SequenceNumberCountOrSize: %v",
+		omci.MeBasePacket.String(), omci.CommandSequenceNumber)
+}
+
+func (omci *MibUploadNextRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get All Alarms
+	if !me.SupportsMsgType(meDefinition, me.MibUploadNext) {
+		return me.NewProcessingError("managed entity does not support MIB Upload Next Message-Type")
+	}
+	// Entity Class are always ONU DATA (2) and Entity Instance of 0
+	if omci.EntityClass != me.OnuDataClassId {
+		msg := fmt.Sprintf("invalid Entity Class for  MIB Upload Next request: %v",
+			omci.EntityClass)
+		return me.NewProcessingError(msg)
+	}
+	if omci.EntityInstance != 0 {
+		msg := fmt.Sprintf("invalid Entity Instance for MIB Upload Next request: %v",
+			omci.EntityInstance)
+		return me.NewUnknownInstanceError(msg)
+	}
+	omci.CommandSequenceNumber = binary.BigEndian.Uint16(data[4:6])
+	return nil
+}
+
+func decodeMibUploadNextRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &MibUploadNextRequest{}
+	omci.MsgLayerType = LayerTypeMibUploadNextRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *MibUploadNextRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support MIB upload
+	if !me.SupportsMsgType(entity, me.MibUploadNext) {
+		return me.NewProcessingError("managed entity does not support the MIB Upload Next Message-Type")
+	}
+	bytes, err := b.AppendBytes(2)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes[0:2], omci.CommandSequenceNumber)
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type MibUploadNextResponse struct {
+	MeBasePacket
+	ReportedME me.ManagedEntity
+}
+
+func (omci *MibUploadNextResponse) String() string {
+	return fmt.Sprintf("%v, ReportedME: [%v]",
+		omci.MeBasePacket.String(), omci.ReportedME.String())
+}
+
+func (omci *MibUploadNextResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support MibUploadNext
+	if !me.SupportsMsgType(meDefinition, me.MibUploadNext) {
+		return me.NewProcessingError("managed entity does not support MIB Upload Next Message-Type")
+	}
+	// Entity Class are always ONU DATA (2) and Entity Instance of 0
+	if omci.EntityClass != me.OnuDataClassId {
+		msg := fmt.Sprintf("invalid Entity Class for  MIB Upload Next response: %v",
+			omci.EntityClass)
+		return me.NewProcessingError(msg)
+	}
+	if omci.EntityInstance != 0 {
+		msg := fmt.Sprintf("invalid Entity Instance for MIB Upload Next response: %v",
+			omci.EntityInstance)
+		return me.NewUnknownInstanceError(msg)
+	}
+	// Decode reported ME.  If an out-of-range sequence number was sent, this will
+	// contain an ME with class ID and entity ID of zero and you should get an
+	// error of "managed entity definition not found" returned.
+	return omci.ReportedME.DecodeFromBytes(data[4:], p, byte(MibUploadNextResponseType))
+}
+
+func decodeMibUploadNextResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &MibUploadNextResponse{}
+	omci.MsgLayerType = LayerTypeMibUploadNextResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *MibUploadNextResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support MIB Upload
+	if !me.SupportsMsgType(entity, me.MibUploadNext) {
+		return me.NewProcessingError("managed entity does not support the MIB Upload Next Message-Type")
+	}
+	// TODO: Only Baseline supported at this time
+	bytesAvailable := MaxBaselineLength - 8 - 8
+
+	return omci.ReportedME.SerializeTo(b, byte(MibUploadNextResponseType), bytesAvailable)
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// MibResetRequest
+type MibResetRequest struct {
+	MeBasePacket
+}
+
+func (omci *MibResetRequest) String() string {
+	return fmt.Sprintf("%v", omci.MeBasePacket.String())
+}
+
+func (omci *MibResetRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support MIB reset
+	if !me.SupportsMsgType(meDefinition, me.MibReset) {
+		return me.NewProcessingError("managed entity does not support MIB Reset Message-Type")
+	}
+	// Entity Class are always ONU DATA (2) and Entity Instance of 0
+	if omci.EntityClass != me.OnuDataClassId {
+		msg := fmt.Sprintf("invalid Entity Class for MIB Reset request: %v",
+			omci.EntityClass)
+		return me.NewProcessingError(msg)
+	}
+	if omci.EntityInstance != 0 {
+		msg := fmt.Sprintf("invalid Entity Instance for MIB Reset request: %v",
+			omci.EntityInstance)
+		return me.NewUnknownInstanceError(msg)
+	}
+	return nil
+}
+
+func decodeMibResetRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &MibResetRequest{}
+	omci.MsgLayerType = LayerTypeMibResetRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *MibResetRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Add class ID and entity ID
+	return omci.MeBasePacket.SerializeTo(b)
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// MibResetResponse
+type MibResetResponse struct {
+	MeBasePacket
+	Result me.Results
+}
+
+func (omci *MibResetResponse) String() string {
+	return fmt.Sprintf("%v, Result: %d (%v)",
+		omci.MeBasePacket.String(), omci.Result, omci.Result)
+}
+
+func (omci *MibResetResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support MIB reset
+	if !me.SupportsMsgType(meDefinition, me.MibReset) {
+		return me.NewProcessingError("managed entity does not support MIB Reset Message-Type")
+	}
+	// MIB Reset Response Entity Class always ONU DATA (2) and
+	// Entity Instance of 0
+	if omci.EntityClass != me.OnuDataClassId {
+		return me.NewProcessingError("invalid Entity Class for MIB Reset Response")
+	}
+	if omci.EntityInstance != 0 {
+		return me.NewUnknownInstanceError("invalid Entity Instance for MIB Reset Response")
+	}
+	omci.Result = me.Results(data[4])
+	if omci.Result > me.DeviceBusy {
+		msg := fmt.Sprintf("invalid results code: %v, must be 0..8", omci.Result)
+		return errors.New(msg)
+	}
+	return nil
+}
+
+func decodeMibResetResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &MibResetResponse{}
+	omci.MsgLayerType = LayerTypeMibResetResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *MibResetResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Set
+	if !me.SupportsMsgType(entity, me.MibReset) {
+		return me.NewProcessingError("managed entity does not support the MIB Reset Message-Type")
+	}
+	bytes, err := b.AppendBytes(1)
+	if err != nil {
+		return err
+	}
+	bytes[0] = byte(omci.Result)
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// AlarmNotificationMsg
+const AlarmBitmapSize = 224
+
+type AlarmNotificationMsg struct {
+	MeBasePacket
+	AlarmBitmap         [AlarmBitmapSize / 8]byte
+	zeroPadding         [3]byte
+	AlarmSequenceNumber byte
+}
+
+func (omci *AlarmNotificationMsg) String() string {
+	return fmt.Sprintf("%v, Sequence Number: %d, Alarm Bitmap: %v",
+		omci.MeBasePacket.String(), omci.AlarmSequenceNumber, omci.AlarmBitmap)
+}
+
+func (omci *AlarmNotificationMsg) IsAlarmActive(alarmNumber uint8) (bool, error) {
+	if alarmNumber >= AlarmBitmapSize {
+		msg := fmt.Sprintf("invalid alarm number: %v, must be 0..224", alarmNumber)
+		return false, errors.New(msg)
+	}
+	octet := alarmNumber / 8
+	bit := 7 - (alarmNumber % 8)
+	return omci.AlarmBitmap[octet]>>bit == 1, nil
+}
+
+func (omci *AlarmNotificationMsg) IsAlarmClear(alarmNumber uint8) (bool, error) {
+	if alarmNumber >= AlarmBitmapSize {
+		msg := fmt.Sprintf("invalid alarm number: %v, must be 0..224", alarmNumber)
+		return false, errors.New(msg)
+	}
+	octet := alarmNumber / 8
+	bit := 7 - (alarmNumber % 8)
+	return omci.AlarmBitmap[octet]>>bit == 0, nil
+}
+
+func (omci *AlarmNotificationMsg) ActivateAlarm(alarmNumber uint8) error {
+	if alarmNumber >= AlarmBitmapSize {
+		msg := fmt.Sprintf("invalid alarm number: %v, must be 0..224", alarmNumber)
+		return errors.New(msg)
+	}
+	octet := alarmNumber / 8
+	bit := 7 - (alarmNumber % 8)
+	omci.AlarmBitmap[octet] |= 1 << bit
+	return nil
+}
+
+func (omci *AlarmNotificationMsg) ClearAlarm(alarmNumber uint8) error {
+	if alarmNumber >= AlarmBitmapSize {
+		msg := fmt.Sprintf("invalid alarm number: %v, must be 0..224", alarmNumber)
+		return errors.New(msg)
+	}
+	octet := alarmNumber / 8
+	bit := 7 - (alarmNumber % 8)
+	omci.AlarmBitmap[octet] &= ^(1 << bit)
+	return nil
+}
+
+func (omci *AlarmNotificationMsg) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	//var meDefinition me.IManagedEntityDefinition
+	//meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+	//	me.ParamData{EntityID: omci.EntityInstance})
+	//if err != nil {
+	//	return err
+	//}
+	// ME needs to support Alarms
+	// TODO: Add attribute to ME to specify that alarm is allowed
+	//if !me.SupportsMsgType(meDefinition, me.MibReset) {
+	//	return me.NewProcesssingError("managed entity does not support MIB Reset Message-Type")
+	//}
+	for index, octet := range data[4 : (AlarmBitmapSize/8)-4] {
+		omci.AlarmBitmap[index] = octet
+	}
+	padOffset := 4 + (AlarmBitmapSize / 8)
+	omci.zeroPadding[0] = data[padOffset]
+	omci.zeroPadding[1] = data[padOffset+1]
+	omci.zeroPadding[2] = data[padOffset+2]
+
+	omci.AlarmSequenceNumber = data[padOffset+3]
+	return nil
+}
+
+func decodeAlarmNotification(data []byte, p gopacket.PacketBuilder) error {
+	omci := &AlarmNotificationMsg{}
+	omci.MsgLayerType = LayerTypeAlarmNotification
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *AlarmNotificationMsg) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	//var meDefinition me.IManagedEntityDefinition
+	//meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+	//	me.ParamData{EntityID: omci.EntityInstance})
+	//if err != nil {
+	//	return err
+	//}
+	// ME needs to support Alarms
+	// TODO: Add attribute to ME to specify that alarm is allowed
+	//if !me.SupportsMsgType(meDefinition, me.MibReset) {
+	//	return me.NewProcessingError("managed entity does not support MIB Reset Message-Type")
+	//}
+	bytes, err := b.AppendBytes((AlarmBitmapSize / 8) + 3 + 1)
+	if err != nil {
+		return err
+	}
+	for index, octet := range omci.AlarmBitmap {
+		bytes[index] = octet
+	}
+	padOffset := AlarmBitmapSize / 8
+	bytes[padOffset] = 0
+	bytes[padOffset+1] = 0
+	bytes[padOffset+2] = 0
+	bytes[padOffset+3] = omci.AlarmSequenceNumber
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// AttributeValueChangeMsg
+type AttributeValueChangeMsg struct {
+	MeBasePacket
+	AttributeMask uint16
+	Attributes    me.AttributeValueMap
+}
+
+func (omci *AttributeValueChangeMsg) String() string {
+	return fmt.Sprintf("%v, Mask: %#x, attributes: %v",
+		omci.MeBasePacket.String(), omci.AttributeMask, omci.Attributes)
+}
+
+func (omci *AttributeValueChangeMsg) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	omci.AttributeMask = binary.BigEndian.Uint16(data[4:6])
+	// Attribute decode
+	omci.Attributes, err = meDefinition.DecodeAttributes(omci.AttributeMask, data[6:40], p, byte(AttributeValueChangeType))
+	// TODO: Add support for attributes that can have an AVC associated with them and then add a check here
+	// Validate all attributes support AVC
+	//for attrName := range omci.attributes {
+	//	attr, err := me.GetAttributeDefinitionByName(meDefinition.GetAttributeDefinitions(), attrName)
+	//	if err != nil {
+	//		return err
+	//	}
+	//	if attr.Index != 0 && !me.SupportsAttributeAVC(attr) {
+	//		msg := fmt.Sprintf("attribute '%v' does not support AVC notifications", attrName)
+	//		return me.NewProcessingError(msg)
+	//	}
+	//}
+	return err
+}
+
+func decodeAttributeValueChange(data []byte, p gopacket.PacketBuilder) error {
+	omci := &AttributeValueChangeMsg{}
+	omci.MsgLayerType = LayerTypeAttributeValueChange
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *AttributeValueChangeMsg) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// TODO: Add support for attributes that can have an AVC associated with them and then add a check here
+	// Validate all attributes support AVC
+	//for attrName := range omci.attributes {
+	//	attr, err := me.GetAttributeDefinitionByName(meDefinition.GetAttributeDefinitions(), attrName)
+	//	if err != nil {
+	//		return err
+	//	}
+	//	if attr.Index != 0 && !me.SupportsAttributeAVC(attr) {
+	//		msg := fmt.Sprintf("attribute '%v' does not support AVC notifications", attrName)
+	//		return me.NewProcessingError(msg)
+	//	}
+	//}
+	bytes, err := b.AppendBytes(2)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes, omci.AttributeMask)
+
+	// Attribute serialization
+	// TODO: Only Baseline supported at this time
+	bytesAvailable := MaxBaselineLength - 10 - 8
+
+	return meDefinition.SerializeAttributes(omci.Attributes, omci.AttributeMask, b,
+		byte(AttributeValueChangeType), bytesAvailable)
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// TestRequest:		TODO: Not yet implemented
+type TestRequest struct {
+	MeBasePacket
+}
+
+func (omci *TestRequest) String() string {
+	return fmt.Sprintf("%v", omci.MeBasePacket.String())
+}
+
+func (omci *TestRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	return errors.New("need to implement") // TODO: Fix me) // return nil
+}
+
+func decodeTestRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &TestRequest{}
+	omci.MsgLayerType = LayerTypeTestRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *TestRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	return errors.New("need to implement") // TODO: Fix me) // omci.cachedME.SerializeTo(mask, b)
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// TestResponse:		TODO: Not yet implemented
+type TestResponse struct {
+	MeBasePacket
+}
+
+func (omci *TestResponse) String() string {
+	return fmt.Sprintf("%v", omci.MeBasePacket.String())
+}
+
+func (omci *TestResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	return errors.New("need to implement") // TODO: Fix me) // return nil
+}
+
+func decodeTestResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &TestResponse{}
+	omci.MsgLayerType = LayerTypeTestResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *TestResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	return errors.New("need to implement") // TODO: Fix me) // omci.cachedME.SerializeTo(mask, b)
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type StartSoftwareDownloadRequest struct {
+	MeBasePacket                // Note: EntityInstance for software download is two specific values
+	WindowSize           byte   // Window Size -1
+	ImageSize            uint32 // Octets
+	NumberOfCircuitPacks byte
+	CircuitPacks         []uint16 // MSB & LSB of software image instance
+}
+
+func (omci *StartSoftwareDownloadRequest) String() string {
+	return fmt.Sprintf("%v, Window Size: %v, Image Size: %v, # Circuit Packs: %v",
+		omci.MeBasePacket.String(), omci.WindowSize, omci.ImageSize, omci.NumberOfCircuitPacks)
+}
+
+func (omci *StartSoftwareDownloadRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Start Software Download
+	if !me.SupportsMsgType(meDefinition, me.StartSoftwareDownload) {
+		return me.NewProcessingError("managed entity does not support Start Software Download Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Start Software Download request")
+	}
+	omci.WindowSize = data[4]
+	omci.ImageSize = binary.BigEndian.Uint32(data[5:9])
+	omci.NumberOfCircuitPacks = data[9]
+	if omci.NumberOfCircuitPacks < 1 || omci.NumberOfCircuitPacks > 9 {
+		msg := fmt.Sprintf("invalid number of Circuit Packs: %v, must be 1..9",
+			omci.NumberOfCircuitPacks)
+		return me.NewAttributeFailureError(msg)
+	}
+	omci.CircuitPacks = make([]uint16, omci.NumberOfCircuitPacks)
+	for index := 0; index < int(omci.NumberOfCircuitPacks); index++ {
+		omci.CircuitPacks[index] = binary.BigEndian.Uint16(data[10+(index*2):])
+	}
+	return nil
+}
+
+func decodeStartSoftwareDownloadRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &StartSoftwareDownloadRequest{}
+	omci.MsgLayerType = LayerTypeStartSoftwareDownloadRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *StartSoftwareDownloadRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Start Software Download
+	if !me.SupportsMsgType(entity, me.StartSoftwareDownload) {
+		return me.NewProcessingError("managed entity does not support the SStart Software Download Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Start Software Download request")
+	}
+	if omci.NumberOfCircuitPacks < 1 || omci.NumberOfCircuitPacks > 9 {
+		msg := fmt.Sprintf("invalid number of Circuit Packs: %v, must be 1..9",
+			omci.NumberOfCircuitPacks)
+		return me.NewAttributeFailureError(msg)
+	}
+	bytes, err := b.AppendBytes(6 + (2 * int(omci.NumberOfCircuitPacks)))
+	if err != nil {
+		return err
+	}
+	bytes[0] = omci.WindowSize
+	binary.BigEndian.PutUint32(bytes[1:], omci.ImageSize)
+	bytes[5] = omci.NumberOfCircuitPacks
+	for index := 0; index < int(omci.NumberOfCircuitPacks); index++ {
+		binary.BigEndian.PutUint16(bytes[6+(index*2):], omci.CircuitPacks[index])
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type downloadResults struct {
+	ManagedEntityID uint16 // ME ID of software image entity instance (slot number plus instance 0..1 or 2..254 vendor-specific)
+	Result          me.Results
+}
+
+func (dr *downloadResults) String() string {
+	return fmt.Sprintf("ME: %v (%#x), Results: %d (%v)", dr.ManagedEntityID, dr.ManagedEntityID,
+		dr.Result, dr.Result)
+}
+
+type StartSoftwareDownloadResponse struct {
+	MeBasePacket      // Note: EntityInstance for software download is two specific values
+	Result            me.Results
+	WindowSize        byte // Window Size -1
+	NumberOfInstances byte
+	MeResults         []downloadResults
+}
+
+func (omci *StartSoftwareDownloadResponse) String() string {
+	return fmt.Sprintf("%v, Results: %v, Window Size: %v, # of Instances: %v, ME Results: %v",
+		omci.MeBasePacket.String(), omci.Result, omci.WindowSize, omci.NumberOfInstances, omci.MeResults)
+}
+
+func (omci *StartSoftwareDownloadResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Start Software Download
+	if !me.SupportsMsgType(meDefinition, me.StartSoftwareDownload) {
+		return me.NewProcessingError("managed entity does not support Start Software Download Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Start Software Download response")
+	}
+	omci.Result = me.Results(data[4])
+	if omci.Result > me.DeviceBusy {
+		msg := fmt.Sprintf("invalid results for Start Software Download response: %v, must be 0..6",
+			omci.Result)
+		return errors.New(msg)
+	}
+	omci.WindowSize = data[5]
+	omci.NumberOfInstances = data[6]
+
+	if omci.NumberOfInstances > 9 {
+		msg := fmt.Sprintf("invalid number of Circuit Packs: %v, must be 0..9",
+			omci.NumberOfInstances)
+		return errors.New(msg)
+	}
+	if omci.NumberOfInstances > 0 {
+		omci.MeResults = make([]downloadResults, omci.NumberOfInstances)
+
+		for index := 0; index < int(omci.NumberOfInstances); index++ {
+			omci.MeResults[index].ManagedEntityID = binary.BigEndian.Uint16(data[7+(index*3):])
+			omci.MeResults[index].Result = me.Results(data[9+(index*3)])
+			if omci.MeResults[index].Result > me.DeviceBusy {
+				msg := fmt.Sprintf("invalid results for Start Software Download instance %v response: %v, must be 0..6",
+					index, omci.MeResults[index])
+				return errors.New(msg)
+			}
+		}
+	}
+	return nil
+}
+
+func decodeStartSoftwareDownloadResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &StartSoftwareDownloadResponse{}
+	omci.MsgLayerType = LayerTypeStartSoftwareDownloadResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *StartSoftwareDownloadResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Start Software Download
+	if !me.SupportsMsgType(meDefinition, me.StartSoftwareDownload) {
+		return me.NewProcessingError("managed entity does not support Start Software Download Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Start Software Download response")
+	}
+	bytes, err := b.AppendBytes(3 + (3 * int(omci.NumberOfInstances)))
+	if err != nil {
+		return err
+	}
+	if omci.Result > me.DeviceBusy {
+		msg := fmt.Sprintf("invalid results for Start Software Download response: %v, must be 0..6",
+			omci.Result)
+		return errors.New(msg)
+	}
+	bytes[0] = byte(omci.Result)
+	bytes[1] = omci.WindowSize
+	bytes[2] = omci.NumberOfInstances
+
+	if omci.NumberOfInstances > 9 {
+		msg := fmt.Sprintf("invalid number of Circuit Packs: %v, must be 0..9",
+			omci.NumberOfInstances)
+		return errors.New(msg)
+	}
+	if omci.NumberOfInstances > 0 {
+		for index := 0; index < int(omci.NumberOfInstances); index++ {
+			binary.BigEndian.PutUint16(bytes[3+(3*index):], omci.MeResults[index].ManagedEntityID)
+
+			if omci.MeResults[index].Result > me.DeviceBusy {
+				msg := fmt.Sprintf("invalid results for Start Software Download instance %v response: %v, must be 0..6",
+					index, omci.MeResults[index])
+				return errors.New(msg)
+			}
+			bytes[5+(3*index)] = byte(omci.MeResults[index].Result)
+		}
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type DownloadSectionRequest struct {
+	MeBasePacket  // Note: EntityInstance for software download is two specific values
+	SectionNumber byte
+	SectionData   [29]byte // 0 padding if final transfer requires only a partial block
+}
+
+func (omci *DownloadSectionRequest) String() string {
+	return fmt.Sprintf("%v, Section #: %v",
+		omci.MeBasePacket.String(), omci.SectionNumber)
+}
+
+func (omci *DownloadSectionRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Download section
+	if !me.SupportsMsgType(meDefinition, me.DownloadSection) {
+		return me.NewProcessingError("managed entity does not support Download Section Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Download Section request")
+	}
+	omci.SectionNumber = data[4]
+	copy(omci.SectionData[0:], data[5:])
+	return nil
+}
+
+func decodeDownloadSectionRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &DownloadSectionRequest{}
+	omci.MsgLayerType = LayerTypeDownloadSectionRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *DownloadSectionRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Download section
+	if !me.SupportsMsgType(meDefinition, me.DownloadSection) {
+		return me.NewProcessingError("managed entity does not support Download Section Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Download Section response")
+	}
+	bytes, err := b.AppendBytes(1 + 29)
+	if err != nil {
+		return err
+	}
+	bytes[0] = omci.SectionNumber
+	copy(bytes[1:], omci.SectionData[0:])
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type DownloadSectionResponse struct {
+	MeBasePacket  // Note: EntityInstance for software download is two specific values
+	Result        me.Results
+	SectionNumber byte
+}
+
+func (omci *DownloadSectionResponse) String() string {
+	return fmt.Sprintf("%v, Result: %d (%v), Section #: %v",
+		omci.MeBasePacket.String(), omci.Result, omci.Result, omci.SectionNumber)
+}
+
+func (omci *DownloadSectionResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Download section
+	if !me.SupportsMsgType(meDefinition, me.DownloadSection) {
+		return me.NewProcessingError("managed entity does not support Download Section Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Download Section response")
+	}
+	omci.Result = me.Results(data[4])
+	if omci.Result > me.DeviceBusy {
+		msg := fmt.Sprintf("invalid results for Download Section response: %v, must be 0..6",
+			omci.Result)
+		return errors.New(msg)
+	}
+	omci.SectionNumber = data[5]
+	return nil
+}
+
+func decodeDownloadSectionResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &DownloadSectionResponse{}
+	omci.MsgLayerType = LayerTypeDownloadSectionResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *DownloadSectionResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Download section
+	if !me.SupportsMsgType(meDefinition, me.DownloadSection) {
+		return me.NewProcessingError("managed entity does not support Download Section Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Download Section response")
+	}
+	bytes, err := b.AppendBytes(2)
+	if err != nil {
+		return err
+	}
+	bytes[0] = omci.SectionNumber
+	if omci.Result > me.DeviceBusy {
+		msg := fmt.Sprintf("invalid results for Download Section response: %v, must be 0..6",
+			omci.Result)
+		return errors.New(msg)
+	}
+	bytes[1] = byte(omci.Result)
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type EndSoftwareDownloadRequest struct {
+	MeBasePacket      // Note: EntityInstance for software download is two specific values
+	CRC32             uint32
+	ImageSize         uint32
+	NumberOfInstances byte
+	ImageInstances    []uint16
+}
+
+func (omci *EndSoftwareDownloadRequest) String() string {
+	return fmt.Sprintf("%v, CRC: %#x, Image Size: %v, Number of Instances: %v, Instances: %v",
+		omci.MeBasePacket.String(), omci.CRC32, omci.ImageSize, omci.NumberOfInstances, omci.ImageInstances)
+}
+
+func (omci *EndSoftwareDownloadRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support End Software Download
+	if !me.SupportsMsgType(meDefinition, me.EndSoftwareDownload) {
+		return me.NewProcessingError("managed entity does not support End Software Download Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for End Software Download request")
+	}
+	omci.CRC32 = binary.BigEndian.Uint32(data[4:8])
+	omci.ImageSize = binary.BigEndian.Uint32(data[8:12])
+	omci.NumberOfInstances = data[13]
+
+	if omci.NumberOfInstances < 1 || omci.NumberOfInstances > 9 {
+		msg := fmt.Sprintf("invalid number of Instances: %v, must be 1..9",
+			omci.NumberOfInstances)
+		return me.NewAttributeFailureError(msg)
+	}
+	omci.ImageInstances = make([]uint16, omci.NumberOfInstances)
+
+	for index := 0; index < int(omci.NumberOfInstances); index++ {
+		omci.ImageInstances[index] = binary.BigEndian.Uint16(data[14+(index*2):])
+	}
+	return nil
+}
+
+func decodeEndSoftwareDownloadRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &EndSoftwareDownloadRequest{}
+	omci.MsgLayerType = LayerTypeEndSoftwareDownloadRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *EndSoftwareDownloadRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support End Software Download
+	if !me.SupportsMsgType(meDefinition, me.EndSoftwareDownload) {
+		return me.NewProcessingError("managed entity does not support Start End Download Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for End Software Download response")
+	}
+	if omci.NumberOfInstances < 1 || omci.NumberOfInstances > 9 {
+		msg := fmt.Sprintf("invalid number of Instances: %v, must be 1..9",
+			omci.NumberOfInstances)
+		return me.NewAttributeFailureError(msg)
+	}
+	bytes, err := b.AppendBytes(9 + (2 * int(omci.NumberOfInstances)))
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint32(bytes[4:8], omci.CRC32)
+	binary.BigEndian.PutUint32(bytes[8:12], omci.ImageSize)
+	bytes[13] = omci.NumberOfInstances
+	for index := 0; index < int(omci.NumberOfInstances); index++ {
+		binary.BigEndian.PutUint16(bytes[14+(index*2):], omci.ImageInstances[index])
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type EndSoftwareDownloadResponse struct {
+	MeBasePacket      // Note: EntityInstance for software download is two specific values
+	Result            me.Results
+	NumberOfInstances byte
+	MeResults         []downloadResults
+}
+
+func (omci *EndSoftwareDownloadResponse) String() string {
+	return fmt.Sprintf("%v, Result: %d (%v), Number of Instances: %v, ME Results: %v",
+		omci.MeBasePacket.String(), omci.Result, omci.Result, omci.NumberOfInstances, omci.MeResults)
+}
+
+func (omci *EndSoftwareDownloadResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support End Software Download
+	if !me.SupportsMsgType(meDefinition, me.EndSoftwareDownload) {
+		return me.NewProcessingError("managed entity does not support End Software Download Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for End Software Download response")
+	}
+	omci.Result = me.Results(data[4])
+	if omci.Result > me.DeviceBusy {
+		msg := fmt.Sprintf("invalid results for End Software Download response: %v, must be 0..6",
+			omci.Result)
+		return errors.New(msg)
+	}
+	omci.NumberOfInstances = data[5]
+
+	if omci.NumberOfInstances > 9 {
+		msg := fmt.Sprintf("invalid number of Instances: %v, must be 0..9",
+			omci.NumberOfInstances)
+		return errors.New(msg)
+	}
+	if omci.NumberOfInstances > 0 {
+		omci.MeResults = make([]downloadResults, omci.NumberOfInstances)
+
+		for index := 0; index < int(omci.NumberOfInstances); index++ {
+			omci.MeResults[index].ManagedEntityID = binary.BigEndian.Uint16(data[6+(index*3):])
+			omci.MeResults[index].Result = me.Results(data[8+(index*3)])
+			if omci.MeResults[index].Result > me.DeviceBusy {
+				msg := fmt.Sprintf("invalid results for End Software Download instance %v response: %v, must be 0..6",
+					index, omci.MeResults[index])
+				return errors.New(msg)
+			}
+		}
+	}
+	return nil
+}
+
+func decodeEndSoftwareDownloadResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &EndSoftwareDownloadResponse{}
+	omci.MsgLayerType = LayerTypeEndSoftwareDownloadResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *EndSoftwareDownloadResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support End Software Download
+	if !me.SupportsMsgType(meDefinition, me.EndSoftwareDownload) {
+		return me.NewProcessingError("managed entity does not support End End Download Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for End Download response")
+	}
+	bytes, err := b.AppendBytes(3 + (3 * int(omci.NumberOfInstances)))
+	if err != nil {
+		return err
+	}
+	if omci.Result > me.DeviceBusy {
+		msg := fmt.Sprintf("invalid results for End Software Download response: %v, must be 0..6",
+			omci.Result)
+		return errors.New(msg)
+	}
+	bytes[0] = byte(omci.Result)
+	bytes[1] = omci.NumberOfInstances
+
+	if omci.NumberOfInstances > 9 {
+		msg := fmt.Sprintf("invalid number of Instances: %v, must be 0..9",
+			omci.NumberOfInstances)
+		return errors.New(msg)
+	}
+	if omci.NumberOfInstances > 0 {
+		for index := 0; index < int(omci.NumberOfInstances); index++ {
+			binary.BigEndian.PutUint16(bytes[2+(3*index):], omci.MeResults[index].ManagedEntityID)
+
+			if omci.MeResults[index].Result > me.DeviceBusy {
+				msg := fmt.Sprintf("invalid results for End Software Download instance %v response: %v, must be 0..6",
+					index, omci.MeResults[index])
+				return errors.New(msg)
+			}
+			bytes[4+(3*index)] = byte(omci.MeResults[index].Result)
+		}
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type ActivateSoftwareRequest struct {
+	MeBasePacket  // Note: EntityInstance for software download is two specific values
+	ActivateFlags byte
+}
+
+func (omci *ActivateSoftwareRequest) String() string {
+	return fmt.Sprintf("%v, Flags: %#x",
+		omci.MeBasePacket.String(), omci.ActivateFlags)
+}
+
+func (omci *ActivateSoftwareRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support End Software Download
+	if !me.SupportsMsgType(meDefinition, me.ActivateSoftware) {
+		return me.NewProcessingError("managed entity does not support Activate Software Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Activate Software request")
+	}
+	omci.ActivateFlags = data[4]
+	if omci.ActivateFlags > 2 {
+		msg := fmt.Sprintf("invalid number of Activation flangs: %v, must be 0..2",
+			omci.ActivateFlags)
+		return me.NewAttributeFailureError(msg)
+	}
+	return nil
+}
+
+func decodeActivateSoftwareRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &ActivateSoftwareRequest{}
+	omci.MsgLayerType = LayerTypeActivateSoftwareRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *ActivateSoftwareRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support End Software Download
+	if !me.SupportsMsgType(meDefinition, me.ActivateSoftware) {
+		return me.NewProcessingError("managed entity does not support Activate Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Activate Software request")
+	}
+	bytes, err := b.AppendBytes(1)
+	if err != nil {
+		return err
+	}
+	bytes[0] = omci.ActivateFlags
+	if omci.ActivateFlags > 2 {
+		msg := fmt.Sprintf("invalid results for Activate Software request: %v, must be 0..2",
+			omci.ActivateFlags)
+		return errors.New(msg)
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type ActivateSoftwareResponse struct {
+	MeBasePacket
+	Result me.Results
+}
+
+func (omci *ActivateSoftwareResponse) String() string {
+	return fmt.Sprintf("%v, Result: %d (%v)",
+		omci.MeBasePacket.String(), omci.Result, omci.Result)
+}
+
+func (omci *ActivateSoftwareResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support End Software Download
+	if !me.SupportsMsgType(meDefinition, me.ActivateSoftware) {
+		return me.NewProcessingError("managed entity does not support Activate Software Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Activate Software response")
+	}
+	omci.Result = me.Results(data[4])
+	if omci.Result > me.Results(6) {
+		msg := fmt.Sprintf("invalid results for Activate Software response: %v, must be 0..6",
+			omci.Result)
+		return errors.New(msg)
+	}
+	return nil
+}
+
+func decodeActivateSoftwareResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &ActivateSoftwareResponse{}
+	omci.MsgLayerType = LayerTypeActivateSoftwareResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *ActivateSoftwareResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support End Software Download
+	if !me.SupportsMsgType(meDefinition, me.ActivateSoftware) {
+		return me.NewProcessingError("managed entity does not support Activate Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Activate Software response")
+	}
+	bytes, err := b.AppendBytes(1)
+	if err != nil {
+		return err
+	}
+	bytes[0] = byte(omci.Result)
+	if omci.Result > me.Results(6) {
+		msg := fmt.Sprintf("invalid results for Activate Software response: %v, must be 0..6",
+			omci.Result)
+		return errors.New(msg)
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type CommitSoftwareRequest struct {
+	MeBasePacket
+}
+
+func (omci *CommitSoftwareRequest) String() string {
+	return fmt.Sprintf("%v", omci.MeBasePacket.String())
+}
+
+func (omci *CommitSoftwareRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support End Software Download
+	if !me.SupportsMsgType(meDefinition, me.CommitSoftware) {
+		return me.NewProcessingError("managed entity does not support Commit Software Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Commit Software request")
+	}
+	return nil
+}
+
+func decodeCommitSoftwareRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &CommitSoftwareRequest{}
+	omci.MsgLayerType = LayerTypeCommitSoftwareRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *CommitSoftwareRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support End Software Download
+	if !me.SupportsMsgType(meDefinition, me.CommitSoftware) {
+		return me.NewProcessingError("managed entity does not support Commit Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Commit Software request")
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type CommitSoftwareResponse struct {
+	MeBasePacket
+}
+
+func (omci *CommitSoftwareResponse) String() string {
+	return fmt.Sprintf("%v", omci.MeBasePacket.String())
+}
+
+func (omci *CommitSoftwareResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support End Software Download
+	if !me.SupportsMsgType(meDefinition, me.CommitSoftware) {
+		return me.NewProcessingError("managed entity does not support Commit Software Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Commit Software response")
+	}
+	return nil
+}
+
+func decodeCommitSoftwareResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &CommitSoftwareResponse{}
+	omci.MsgLayerType = LayerTypeCommitSoftwareResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *CommitSoftwareResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support End Software Download
+	if !me.SupportsMsgType(meDefinition, me.CommitSoftware) {
+		return me.NewProcessingError("managed entity does not support Commit Message-Type")
+	}
+	// Software Image Entity Class are always use the Software Image
+	if omci.EntityClass != me.SoftwareImageClassId {
+		return me.NewProcessingError("invalid Entity Class for Commit Software response")
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type SynchronizeTimeRequest struct {
+	MeBasePacket
+	Year   uint16
+	Month  uint8
+	Day    uint8
+	Hour   uint8
+	Minute uint8
+	Second uint8
+}
+
+func (omci *SynchronizeTimeRequest) String() string {
+	return fmt.Sprintf("%v, Date-Time: %d/%d/%d-%02d:%02d:%02d",
+		omci.MeBasePacket.String(), omci.Year, omci.Month, omci.Day, omci.Hour, omci.Minute, omci.Second)
+}
+
+func (omci *SynchronizeTimeRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Synchronize Time
+	if !me.SupportsMsgType(meDefinition, me.SynchronizeTime) {
+		return me.NewProcessingError("managed entity does not support Synchronize Time Message-Type")
+	}
+	// Synchronize Time Entity Class are always ONU-G (256) and Entity Instance of 0
+	if omci.EntityClass != me.OnuGClassId {
+		return me.NewProcessingError("invalid Entity Class for Synchronize Time request")
+	}
+	if omci.EntityInstance != 0 {
+		return me.NewUnknownInstanceError("invalid Entity Instance for Synchronize Time request")
+	}
+	omci.Year = binary.BigEndian.Uint16(data[4:6])
+	omci.Month = data[6]
+	omci.Day = data[7]
+	omci.Hour = data[8]
+	omci.Minute = data[9]
+	omci.Second = data[10]
+	return nil
+}
+
+func decodeSynchronizeTimeRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &SynchronizeTimeRequest{}
+	omci.MsgLayerType = LayerTypeSynchronizeTimeRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *SynchronizeTimeRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Synchronize Time
+	if !me.SupportsMsgType(entity, me.SynchronizeTime) {
+		return me.NewProcessingError("managed entity does not support the Synchronize Time Message-Type")
+	}
+	bytes, err := b.AppendBytes(7)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes[0:2], omci.Year)
+	bytes[2] = omci.Month
+	bytes[3] = omci.Day
+	bytes[4] = omci.Hour
+	bytes[5] = omci.Minute
+	bytes[6] = omci.Second
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type SynchronizeTimeResponse struct {
+	MeBasePacket
+	Result         me.Results
+	SuccessResults uint8 // Only if 'Result' is 0 -> success
+}
+
+func (omci *SynchronizeTimeResponse) String() string {
+	return fmt.Sprintf("%v, Results: %d (%v), Success: %d",
+		omci.MeBasePacket.String(), omci.Result, omci.Result, omci.SuccessResults)
+}
+
+func (omci *SynchronizeTimeResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Synchronize Time
+	if !me.SupportsMsgType(meDefinition, me.SynchronizeTime) {
+		return me.NewProcessingError("managed entity does not support Synchronize Time Message-Type")
+	}
+	// Synchronize Time Entity Class are always ONU-G (256) and Entity Instance of 0
+	if omci.EntityClass != me.OnuGClassId {
+		return me.NewProcessingError("invalid Entity Class for Synchronize Time response")
+	}
+	if omci.EntityInstance != 0 {
+		return me.NewUnknownInstanceError("invalid Entity Instance for Synchronize Time response")
+	}
+	omci.Result = me.Results(data[4])
+	if omci.Result > me.DeviceBusy {
+		msg := fmt.Sprintf("invalid results code: %v, must be 0..8", omci.Result)
+		return errors.New(msg)
+	}
+	omci.SuccessResults = data[5]
+	return nil
+}
+
+func decodeSynchronizeTimeResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &SynchronizeTimeResponse{}
+	omci.MsgLayerType = LayerTypeSynchronizeTimeResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *SynchronizeTimeResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// Synchronize Time Entity Class are always ONU DATA (2) and Entity Instance of 0
+	if omci.EntityClass != me.OnuGClassId {
+		return me.NewProcessingError("invalid Entity Class for Synchronize Time response")
+	}
+	if omci.EntityInstance != 0 {
+		return me.NewUnknownInstanceError("invalid Entity Instance for Synchronize Time response")
+	}
+	// ME needs to support Synchronize Time
+	if !me.SupportsMsgType(entity, me.SynchronizeTime) {
+		return me.NewProcessingError("managed entity does not support the Synchronize Time Message-Type")
+	}
+	numBytes := 2
+	if omci.Result != me.Success {
+		numBytes = 1
+	}
+	bytes, err := b.AppendBytes(numBytes)
+	if err != nil {
+		return err
+	}
+	bytes[0] = uint8(omci.Result)
+	if omci.Result == me.Success {
+		bytes[1] = omci.SuccessResults
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type RebootRequest struct {
+	MeBasePacket
+	RebootCondition byte
+}
+
+func (omci *RebootRequest) String() string {
+	return fmt.Sprintf("%v, Reboot Condition: %v",
+		omci.MeBasePacket.String(), omci.RebootCondition)
+}
+
+func (omci *RebootRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Reboot
+	if !me.SupportsMsgType(meDefinition, me.Reboot) {
+		return me.NewProcessingError("managed entity does not support Reboot Message-Type")
+	}
+	omci.RebootCondition = data[4]
+	if omci.RebootCondition > 3 {
+		msg := fmt.Sprintf("invalid reboot condition code: %v, must be 0..3", omci.RebootCondition)
+		return errors.New(msg)
+	}
+	return nil
+}
+
+func decodeRebootRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &RebootRequest{}
+	omci.MsgLayerType = LayerTypeRebootRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *RebootRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Reboot
+	if !me.SupportsMsgType(entity, me.Reboot) {
+		return me.NewProcessingError("managed entity does not support the Synchronize Time Message-Type")
+	}
+	bytes, err := b.AppendBytes(1)
+	if err != nil {
+		return err
+	}
+	if omci.RebootCondition > 3 {
+		msg := fmt.Sprintf("invalid reboot condition code: %v, must be 0..3", omci.RebootCondition)
+		return me.NewAttributeFailureError(msg)
+	}
+	bytes[0] = omci.RebootCondition
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type RebootResponse struct {
+	MeBasePacket
+	Result me.Results
+}
+
+func (omci *RebootResponse) String() string {
+	return fmt.Sprintf("%v, Result: %d (%v)",
+		omci.MeBasePacket.String(), omci.Result, omci.Result)
+}
+
+func (omci *RebootResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Reboot
+	if !me.SupportsMsgType(meDefinition, me.Reboot) {
+		return me.NewProcessingError("managed entity does not support Reboot Message-Type")
+	}
+	if omci.Result > 6 {
+		msg := fmt.Sprintf("invalid reboot results code: %v, must be 0..6", omci.Result)
+		return errors.New(msg)
+	}
+	omci.Result = me.Results(data[4])
+	return nil
+}
+
+func decodeRebootResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &RebootResponse{}
+	omci.MsgLayerType = LayerTypeRebootResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *RebootResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var entity me.IManagedEntityDefinition
+	entity, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Reboot
+	if !me.SupportsMsgType(entity, me.Reboot) {
+		return me.NewProcessingError("managed entity does not support the Synchronize Time Message-Type")
+	}
+	bytes, err := b.AppendBytes(1)
+	if err != nil {
+		return err
+	}
+	if omci.Result > 6 {
+		msg := fmt.Sprintf("invalid reboot results code: %v, must be 0..6", omci.Result)
+		return errors.New(msg)
+	}
+	bytes[0] = byte(omci.Result)
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type GetNextRequest struct {
+	MeBasePacket
+	AttributeMask  uint16
+	SequenceNumber uint16
+}
+
+func (omci *GetNextRequest) String() string {
+	return fmt.Sprintf("%v, Attribute Mask: %#x, Sequence Number: %v",
+		omci.MeBasePacket.String(), omci.AttributeMask, omci.SequenceNumber)
+}
+
+func (omci *GetNextRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support GetNext
+	if !me.SupportsMsgType(meDefinition, me.GetNext) {
+		return me.NewProcessingError("managed entity does not support Get Next Message-Type")
+	}
+	// Note: G.988 specifies that an error code of (3) should result if more
+	//       than one attribute is requested
+	// TODO: Return error.  Have flag to optionally allow it to be encoded
+	// TODO: Check that the attribute is a table attirbute.  Issue warning or return error
+	omci.AttributeMask = binary.BigEndian.Uint16(data[4:6])
+	omci.SequenceNumber = binary.BigEndian.Uint16(data[6:8])
+	return nil
+}
+
+func decodeGetNextRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &GetNextRequest{}
+	omci.MsgLayerType = LayerTypeGetNextRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *GetNextRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support GetNext
+	if !me.SupportsMsgType(meDefinition, me.GetNext) {
+		return me.NewProcessingError("managed entity does not support Get Next Message-Type")
+	}
+	bytes, err := b.AppendBytes(4)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes, omci.AttributeMask)
+	binary.BigEndian.PutUint16(bytes[2:], omci.SequenceNumber)
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type GetNextResponse struct {
+	MeBasePacket
+	Result        me.Results
+	AttributeMask uint16
+	Attributes    me.AttributeValueMap
+}
+
+func (omci *GetNextResponse) String() string {
+	return fmt.Sprintf("%v, Result: %v, Attribute Mask: %#x, Attributes: %v",
+		omci.MeBasePacket.String(), omci.Result, omci.AttributeMask, omci.Attributes)
+}
+
+func (omci *GetNextResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Set
+	if !me.SupportsMsgType(meDefinition, me.GetNext) {
+		return me.NewProcessingError("managed entity does not support Get Next Message-Type")
+	}
+	omci.Result = me.Results(data[4])
+	if omci.Result > 6 {
+		msg := fmt.Sprintf("invalid get next results code: %v, must be 0..6", omci.Result)
+		return errors.New(msg)
+	}
+	omci.AttributeMask = binary.BigEndian.Uint16(data[5:7])
+
+	// Attribute decode
+	omci.Attributes, err = meDefinition.DecodeAttributes(omci.AttributeMask, data[7:], p, byte(GetNextResponseType))
+	if err != nil {
+		return err
+	}
+	// Validate all attributes support read
+	for attrName := range omci.Attributes {
+		attr, err := me.GetAttributeDefinitionByName(meDefinition.GetAttributeDefinitions(), attrName)
+		if err != nil {
+			return err
+		}
+		if attr.Index != 0 && !me.SupportsAttributeAccess(attr, me.Read) {
+			msg := fmt.Sprintf("attribute '%v' does not support read access", attrName)
+			return me.NewProcessingError(msg)
+		}
+	}
+	if eidDef, eidDefOK := (*meDefinition.GetAttributeDefinitions())[0]; eidDefOK {
+		omci.Attributes[eidDef.GetName()] = omci.EntityInstance
+		return nil
+	}
+	panic("All Managed Entities have an EntityID attribute")
+}
+
+func decodeGetNextResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &GetNextResponse{}
+	omci.MsgLayerType = LayerTypeGetNextResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *GetNextResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get
+	if !me.SupportsMsgType(meDefinition, me.GetNext) {
+		return me.NewProcessingError("managed entity does not support the Get Next Message-Type")
+	}
+	bytes, err := b.AppendBytes(3)
+	if err != nil {
+		return err
+	}
+	bytes[0] = byte(omci.Result)
+	if omci.Result > 6 {
+		msg := fmt.Sprintf("invalid get next results code: %v, must be 0..6", omci.Result)
+		return errors.New(msg)
+	}
+	binary.BigEndian.PutUint16(bytes[1:3], omci.AttributeMask)
+
+	// Validate all attributes support read
+	for attrName := range omci.Attributes {
+		attr, err := me.GetAttributeDefinitionByName(meDefinition.GetAttributeDefinitions(), attrName)
+		if err != nil {
+			return err
+		}
+		if attr.Index != 0 && !me.SupportsAttributeAccess(attr, me.Read) {
+			msg := fmt.Sprintf("attribute '%v' does not support read access", attrName)
+			return me.NewProcessingError(msg)
+		}
+	}
+	// Attribute serialization
+	switch omci.Result {
+	default:
+		break
+
+	case me.Success:
+		// TODO: Only Baseline supported at this time
+		bytesAvailable := MaxBaselineLength - 11 - 8
+
+		err = meDefinition.SerializeAttributes(omci.Attributes, omci.AttributeMask, b,
+			byte(GetNextResponseType), bytesAvailable)
+		if err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type TestResultMsg struct {
+	MeBasePacket
+}
+
+func (omci *TestResultMsg) String() string {
+	return fmt.Sprintf("%v", omci.MeBasePacket.String())
+}
+
+func (omci *TestResultMsg) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	return errors.New("need to implement") // TODO: Fix me) // return nil
+}
+
+func decodeTestResult(data []byte, p gopacket.PacketBuilder) error {
+	omci := &TestResultMsg{}
+	omci.MsgLayerType = LayerTypeTestResult
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *TestResultMsg) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	return errors.New("need to implement") // TODO: Fix me) // omci.cachedME.SerializeTo(mask, b)
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type GetCurrentDataRequest struct {
+	MeBasePacket
+	AttributeMask uint16
+}
+
+func (omci *GetCurrentDataRequest) String() string {
+	return fmt.Sprintf("%v, Attribute Mask: %#x",
+		omci.MeBasePacket.String(), omci.AttributeMask)
+}
+
+func (omci *GetCurrentDataRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support GetNext
+	if !me.SupportsMsgType(meDefinition, me.GetCurrentData) {
+		return me.NewProcessingError("managed entity does not support Get Current Data Message-Type")
+	}
+	// Note: G.988 specifies that an error code of (3) should result if more
+	//       than one attribute is requested
+	omci.AttributeMask = binary.BigEndian.Uint16(data[4:6])
+	return nil
+}
+
+func decodeGetCurrentDataRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &GetCurrentDataRequest{}
+	omci.MsgLayerType = LayerTypeGetCurrentDataRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *GetCurrentDataRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support GetNext
+	if !me.SupportsMsgType(meDefinition, me.GetCurrentData) {
+		return me.NewProcessingError("managed entity does not support Get Current Data Message-Type")
+	}
+	bytes, err := b.AppendBytes(2)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes, omci.AttributeMask)
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type GetCurrentDataResponse struct {
+	MeBasePacket
+	Result        me.Results
+	AttributeMask uint16
+	Attributes    me.AttributeValueMap
+}
+
+func (omci *GetCurrentDataResponse) String() string {
+	return fmt.Sprintf("%v, Result: %d (%v), Attribute Mask: %#x, Attributes: %v",
+		omci.MeBasePacket.String(), omci.Result, omci.Result, omci.AttributeMask, omci.Attributes)
+}
+
+func (omci *GetCurrentDataResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Set
+	if !me.SupportsMsgType(meDefinition, me.GetCurrentData) {
+		return me.NewProcessingError("managed entity does not support Get Current Data Message-Type")
+	}
+	omci.AttributeMask = binary.BigEndian.Uint16(data[4:6])
+
+	// Attribute decode
+	omci.Attributes, err = meDefinition.DecodeAttributes(omci.AttributeMask, data[6:], p, byte(GetCurrentDataResponseType))
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+func decodeGetCurrentDataResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &GetCurrentDataResponse{}
+	omci.MsgLayerType = LayerTypeGetCurrentDataResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *GetCurrentDataResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	var meDefinition me.IManagedEntityDefinition
+	meDefinition, err = me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if err != nil {
+		return err
+	}
+	// ME needs to support Get
+	if !me.SupportsMsgType(meDefinition, me.GetCurrentData) {
+		return me.NewProcessingError("managed entity does not support the Get Current Data Message-Type")
+	}
+	bytes, err := b.AppendBytes(2)
+	if err != nil {
+		return err
+	}
+	binary.BigEndian.PutUint16(bytes[0:2], omci.AttributeMask)
+
+	// Attribute serialization
+	// TODO: Only Baseline supported at this time
+	bytesAvailable := MaxBaselineLength - 9 - 8
+
+	err = meDefinition.SerializeAttributes(omci.Attributes, omci.AttributeMask, b,
+		byte(GetCurrentDataResponseType), bytesAvailable)
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type SetTableRequest struct {
+	MeBasePacket
+	// TODO: Fix me when extended messages supported)
+}
+
+func (omci *SetTableRequest) String() string {
+	return fmt.Sprintf("%v", omci.MeBasePacket.String())
+}
+
+func (omci *SetTableRequest) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	return errors.New("need to implement") // TODO: Fix me when extended messages supported)
+}
+
+func decodeSetTableRequest(data []byte, p gopacket.PacketBuilder) error {
+	omci := &SetTableRequest{}
+	omci.MsgLayerType = LayerTypeSetTableRequest
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *SetTableRequest) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	return errors.New("need to implement") /// TODO: Fix me when extended messages supported)
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type SetTableResponse struct {
+	MeBasePacket
+	// TODO: Fix me when extended messages supported)
+}
+
+func (omci *SetTableResponse) String() string {
+	return fmt.Sprintf("%v", omci.MeBasePacket.String())
+}
+
+func (omci *SetTableResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	// Common ClassID/EntityID decode in msgBase
+	err := omci.MeBasePacket.DecodeFromBytes(data, p)
+	if err != nil {
+		return err
+	}
+	return errors.New("need to implement") // TODO: Fix me when extended messages supported)
+}
+
+func decodeSetTableResponse(data []byte, p gopacket.PacketBuilder) error {
+	omci := &SetTableResponse{}
+	omci.MsgLayerType = LayerTypeSetTableResponse
+	return decodingLayerDecoder(omci, data, p)
+}
+
+func (omci *SetTableResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	return errors.New("need to implement") // TODO: Fix me when extended messages supported)
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+type UnsupportedMessageTypeResponse struct {
+	MeBasePacket
+	Result me.Results
+}
+
+func (omci *UnsupportedMessageTypeResponse) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	return errors.New("you should never really decode this")
+}
+
+func (omci *UnsupportedMessageTypeResponse) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// Basic (common) OMCI Header is 8 octets, 10
+	err := omci.MeBasePacket.SerializeTo(b)
+	if err != nil {
+		return err
+	}
+	bytes, err := b.AppendBytes(1)
+	if err != nil {
+		return err
+	}
+	bytes[0] = byte(omci.Result)
+	return nil
+}
diff --git a/vendor/github.com/cboling/omci/omci.go b/vendor/github.com/cboling/omci/omci.go
new file mode 100644
index 0000000..f4741b3
--- /dev/null
+++ b/vendor/github.com/cboling/omci/omci.go
@@ -0,0 +1,320 @@
+/*
+ * 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.
+ *
+ */
+package omci
+
+import (
+	"encoding/binary"
+	"errors"
+	"fmt"
+	"github.com/aead/cmac/aes"
+	me "github.com/cboling/omci/generated"
+	"github.com/google/gopacket"
+	"github.com/google/gopacket/layers"
+)
+
+type DeviceIdent byte
+
+var (
+	LayerTypeOMCI gopacket.LayerType
+)
+
+func init() {
+	LayerTypeOMCI = gopacket.RegisterLayerType(1000,
+		gopacket.LayerTypeMetadata{
+			Name:    "OMCI",
+			Decoder: gopacket.DecodeFunc(decodeOMCI),
+		})
+}
+
+const (
+	// Device Identifiers
+	_                         = iota
+	BaselineIdent DeviceIdent = 0x0A // All G-PON OLTs and ONUs support the baseline message set
+	ExtendedIdent DeviceIdent = 0x0B
+)
+
+var OmciIK = []byte{0x18, 0x4b, 0x8a, 0xd4, 0xd1, 0xac, 0x4a, 0xf4,
+	0xdd, 0x4b, 0x33, 0x9e, 0xcc, 0x0d, 0x33, 0x70}
+
+func (di DeviceIdent) String() string {
+	switch di {
+	default:
+		return "Unknown"
+
+	case BaselineIdent:
+		return "Baseline"
+
+	case ExtendedIdent:
+		return "Extended"
+	}
+}
+
+// MaxBaselineLength is the maximum number of octets allowed in an OMCI Baseline
+// message.  Depending on the adapter, it may or may not include the
+const MaxBaselineLength = 48
+
+// MaxExtendedLength is the maximum number of octets allowed in an OMCI Extended
+// message (including header).
+const MaxExtendedLength = 1980
+
+// MaxAttributeMibUploadNextBaselineLength is the maximum payload size for attributes for
+// a Baseline MIB Upload Next message.29
+const MaxAttributeMibUploadNextBaselineLength = MaxBaselineLength - 14 - 8
+
+// MaxAttributeGetNextBaselineLength is the maximum payload size for attributes for
+// a Baseline MIB Get Next message. This is just the attribute portion of the
+// message contents and does not include the Result Code & Attribute Mask.
+const MaxAttributeGetNextBaselineLength = MaxBaselineLength - 11 - 8
+
+// MaxAttributeMibUploadNextExtendedLength is the maximum payload size for ME
+// entries for an Extended MIB Upload Next message. Extended messages differ from
+// the baseline as multiple MEs can be reported in a single frame, just not multiple
+// attributes.
+const MaxManagedEntityMibUploadNextExtendedLength = MaxExtendedLength - 10 - 4
+
+// MaxAttributeGetNextExtendedLength is the maximum payload size for attributes for
+// a Extended MIB Get Next message. This is just the attribute portion of the
+// message contents and does not include the Result Code & Attribute Mask.
+const MaxAttributeGetNextExtendedLength = MaxExtendedLength - 13 - 4
+
+// NullEntityID is often used as the Null/void Managed Entity ID for attributes
+// that are used to refer to other Managed Entities but are currently not provisioned.
+const NullEntityID = uint16(0xffff)
+
+// OMCI defines the common protocol. Extended will be added once
+// I can get basic working (and layered properly).  See ITU-T G.988 11/2017 section
+// A.3 for more information
+type OMCI struct {
+	layers.BaseLayer
+	TransactionID    uint16
+	MessageType      MessageType
+	DeviceIdentifier DeviceIdent
+	Payload          []byte
+	padding          []byte
+	Length           uint16
+	MIC              uint32
+}
+
+func (omci *OMCI) String() string {
+	//msgType := me.MsgType(byte(omci.MessageType) & me.MsgTypeMask)
+	//if me.IsAutonomousNotification(msgType) {
+	//	return fmt.Sprintf("OMCI: Type: %v:", msgType)
+	//} else if byte(omci.MessageType)&me.AK == me.AK {
+	//	return fmt.Sprintf("OMCI: Type: %v Response", msgType)
+	//}
+	return fmt.Sprintf("Type: %v, TID: %d (%#x), Ident: %v",
+		omci.MessageType, omci.TransactionID, omci.TransactionID, omci.DeviceIdentifier)
+}
+
+// LayerType returns LayerTypeOMCI
+func (omci *OMCI) LayerType() gopacket.LayerType {
+	return LayerTypeOMCI
+}
+
+func (omci *OMCI) LayerContents() []byte {
+	b := make([]byte, 8)
+	binary.BigEndian.PutUint16(b, omci.TransactionID)
+	b[2] = byte(omci.MessageType)
+	b[3] = byte(omci.DeviceIdentifier)
+	return b
+}
+
+func (omci *OMCI) CanDecode() gopacket.LayerClass {
+	return LayerTypeOMCI
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (omci *OMCI) NextLayerType() gopacket.LayerType {
+	return gopacket.LayerTypeZero
+}
+
+func decodeOMCI(data []byte, p gopacket.PacketBuilder) error {
+	// Allow baseline messages without Length & MIC, but no less
+	if len(data) < MaxBaselineLength-8 {
+		return errors.New("frame header too small")
+	}
+	switch DeviceIdent(data[3]) {
+	default:
+		return errors.New("unsupported message type")
+
+	case BaselineIdent:
+		//omci := &BaselineMessage{}
+		omci := &OMCI{}
+		return omci.DecodeFromBytes(data, p)
+
+	case ExtendedIdent:
+		//omci := &ExtendedMessage{}
+		omci := &OMCI{}
+		return omci.DecodeFromBytes(data, p)
+	}
+}
+
+func calculateMicAes128(data []byte) (uint32, error) {
+	// See if upstream or downstream
+	var downstreamCDir = [...]byte{0x01}
+	var upstreamCDir = [...]byte{0x02}
+
+	tid := binary.BigEndian.Uint16(data[0:2])
+	var sum []byte
+	var err error
+
+	if (data[2]&me.AK) == me.AK || tid == 0 {
+		sum, err = aes.Sum(append(upstreamCDir[:], data[:44]...), OmciIK, 4)
+	} else {
+		sum, err = aes.Sum(append(downstreamCDir[:], data[:44]...), OmciIK, 4)
+	}
+	if err != nil {
+		return 0, err
+	}
+	return binary.BigEndian.Uint32(sum), nil
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//   Baseline Message encode / decode
+//
+
+func (omci *OMCI) DecodeFromBytes(data []byte, p gopacket.PacketBuilder) error {
+	if len(data) < 10 {
+		p.SetTruncated()
+		return errors.New("frame too small")
+	}
+	omci.TransactionID = binary.BigEndian.Uint16(data[0:])
+	omci.MessageType = MessageType(data[2])
+	omci.DeviceIdentifier = DeviceIdent(data[3])
+
+	isNotification := (int(omci.MessageType) & ^me.MsgTypeMask) == 0
+	if omci.TransactionID == 0 && !isNotification {
+		return errors.New("omci Transaction ID is zero for non-Notification type message")
+	}
+	// Decode length
+	var payloadOffset int
+	var micOffset int
+	if omci.DeviceIdentifier == BaselineIdent {
+		omci.Length = MaxBaselineLength - 8
+		payloadOffset = 8
+		micOffset = MaxBaselineLength - 4
+
+		if len(data) >= micOffset {
+			length := binary.BigEndian.Uint32(data[micOffset-4:])
+			if uint16(length) != omci.Length {
+				return me.NewProcessingError("invalid baseline message length")
+			}
+		}
+	} else {
+		payloadOffset = 10
+		omci.Length = binary.BigEndian.Uint16(data[8:10])
+		micOffset = int(omci.Length) + payloadOffset
+
+		if omci.Length > MaxExtendedLength {
+			return me.NewProcessingError("extended frame exceeds maximum allowed")
+		}
+		if int(omci.Length) != micOffset {
+			if int(omci.Length) < micOffset {
+				p.SetTruncated()
+			}
+			return me.NewProcessingError("extended frame too small")
+		}
+	}
+	// Extract MIC if present in the data
+	if len(data) >= micOffset+4 {
+		omci.MIC = binary.BigEndian.Uint32(data[micOffset:])
+		actual, _ := calculateMicAes128(data[:micOffset])
+		if omci.MIC != actual {
+			_ = fmt.Sprintf("invalid MIC, expected %#x, got %#x",
+				omci.MIC, actual)
+			//return errors.New(msg)
+		}
+	}
+	omci.BaseLayer = layers.BaseLayer{data[:4], data[4:]}
+	p.AddLayer(omci)
+	nextLayer, err := MsgTypeToNextLayer(omci.MessageType)
+	if err != nil {
+		return err
+	}
+	return p.NextDecoder(nextLayer)
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (omci *OMCI) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+	// TODO: Hardcoded for baseline message format for now. Will eventually need to support
+	//       the extended message format.
+	bytes, err := b.PrependBytes(4)
+	if err != nil {
+		return err
+	}
+	// OMCI layer error checks
+	isNotification := (int(omci.MessageType) & ^me.MsgTypeMask) == 0
+	if omci.TransactionID == 0 && !isNotification {
+		return errors.New("omci Transaction ID is zero for non-Notification type message")
+	}
+	if omci.DeviceIdentifier == 0 {
+		omci.DeviceIdentifier = BaselineIdent // Allow uninitialized device identifier
+	}
+	if omci.DeviceIdentifier == BaselineIdent {
+		if omci.Length == 0 {
+			omci.Length = MaxBaselineLength - 8 // Allow uninitialized length
+		} else if omci.Length != MaxBaselineLength-8 {
+			msg := fmt.Sprintf("invalid Baseline message length: %v", omci.Length)
+			return errors.New(msg)
+		}
+	} else if omci.DeviceIdentifier == ExtendedIdent {
+		if omci.Length == 0 {
+			omci.Length = uint16(len(bytes) - 10) // Allow uninitialized length
+		}
+		if omci.Length > MaxExtendedLength {
+			msg := fmt.Sprintf("invalid Baseline message length: %v", omci.Length)
+			return errors.New(msg)
+		}
+	} else {
+		msg := fmt.Sprintf("invalid device identifier: %#x, Baseline or Extended expected",
+			omci.DeviceIdentifier)
+		return errors.New(msg)
+	}
+	binary.BigEndian.PutUint16(bytes, omci.TransactionID)
+	bytes[2] = byte(omci.MessageType)
+	bytes[3] = byte(omci.DeviceIdentifier)
+	b.PushLayer(LayerTypeOMCI)
+
+	bufLen := len(b.Bytes())
+	padSize := int(omci.Length) - bufLen + 4
+	if padSize < 0 {
+		msg := fmt.Sprintf("invalid OMCI Message Type length, exceeded allowed frame size by %d bytes",
+			-padSize)
+		return errors.New(msg)
+	}
+	padding, err := b.AppendBytes(padSize)
+	copy(padding, lotsOfZeros[:])
+
+	if omci.DeviceIdentifier == BaselineIdent {
+		// For baseline, always provide the length
+		binary.BigEndian.PutUint32(b.Bytes()[MaxBaselineLength-8:], 40)
+	}
+	if opts.ComputeChecksums {
+		micBytes, err := b.AppendBytes(4)
+		if err != nil {
+			return err
+		}
+		omci.MIC, _ = calculateMicAes128(bytes[:MaxBaselineLength-4])
+		binary.BigEndian.PutUint32(micBytes, omci.MIC)
+	}
+	return nil
+}
+
+// hacky way to zero out memory... there must be a better way?
+var lotsOfZeros [MaxExtendedLength]byte // Extended OMCI messages may be up to 1980 bytes long, including headers