VOL-3787: Added alarm notification decode/AlarmMap support

Change-Id: I05e6188c279f26cd413e23ec068ff0993e7070c1
diff --git a/VERSION b/VERSION
index c37136a..ebf55b3 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.13.5
+0.13.6
diff --git a/generated/aal5performancemonitoringhistorydata.go b/generated/aal5performancemonitoringhistorydata.go
index c35225a..fe110a2 100644
--- a/generated/aal5performancemonitoringhistorydata.go
+++ b/generated/aal5performancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -107,6 +107,13 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Invalid fields",
+			1: "CRC violation",
+			2: "Reassembly timer expirations",
+			3: "Buffer overflows",
+			4: "Encap protocol errors",
+		},
 	}
 }
 
diff --git a/generated/ani-g.go b/generated/ani-g.go
index 3cee643..022fcbf 100644
--- a/generated/ani-g.go
+++ b/generated/ani-g.go
@@ -14,7 +14,7 @@
  * 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':
@@ -154,6 +154,15 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Low received optical power",
+			1: "High received optical power",
+			2: "SF",
+			3: "SD",
+			4: "Low transmit optical power",
+			5: "High transmit optical power",
+			6: "Laser bias current",
+		},
 	}
 }
 
diff --git a/generated/callcontrolperformancemonitoringhistorydata.go b/generated/callcontrolperformancemonitoringhistorydata.go
index bb625a8..eb015ed 100644
--- a/generated/callcontrolperformancemonitoringhistorydata.go
+++ b/generated/callcontrolperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -106,6 +106,13 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "CCPM call set-up fail",
+			1: "CCPM set-up timeout",
+			2: "CCPM call terminate",
+			3: "CCPM port release with no dialling",
+			4: "CCPM port offhook timeout",
+		},
 	}
 }
 
diff --git a/generated/cardholder.go b/generated/cardholder.go
index 077271e..0bd413f 100644
--- a/generated/cardholder.go
+++ b/generated/cardholder.go
@@ -14,7 +14,7 @@
  * 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':
@@ -150,6 +150,13 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Plug-in circuit pack missing",
+			1: "Plug-in type mismatch alarm",
+			2: "Improper card removal",
+			3: "Plug-in equipment ID mismatch alarm",
+			4: "Protection switch",
+		},
 	}
 }
 
diff --git a/generated/circuitpack.go b/generated/circuitpack.go
index dcf7528..e40e29a 100644
--- a/generated/circuitpack.go
+++ b/generated/circuitpack.go
@@ -14,7 +14,7 @@
  * 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':
@@ -181,6 +181,14 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Equipment alarm",
+			1: "Powering alarm",
+			2: "Self-test failure",
+			3: "Laser end of life",
+			4: "Temperature yellow",
+			5: "Temperature red",
+		},
 	}
 }
 
diff --git a/generated/classsupport.go b/generated/classsupport.go
index 9cc9dc6..df47014 100644
--- a/generated/classsupport.go
+++ b/generated/classsupport.go
@@ -28,10 +28,11 @@
 	Ignored            // OMCI supported, but underlying function is now
 
 	// The following two are specific unsupported Managed Entity Definitions
-	UnsupportedManagedEntity				// Unsupported ITU G.988 Class ID
-	UnsupportedVendorSpecificManagedEntity	// Unsupported Vendor Specific Class ID
+	UnsupportedManagedEntity               // Unsupported ITU G.988 Class ID
+	UnsupportedVendorSpecificManagedEntity // Unsupported Vendor Specific Class ID
 )
 
 func (cs ClassSupport) String() string {
-	return [...]string{"Unknown", "Supported", "Unsupported", "Partially Supported", "Ignored"}[cs]
+	return [...]string{"Unknown", "Supported", "Unsupported", "Partially Supported", "Ignored",
+		"Unsupported", "Vendor Specific"}[cs]
 }
diff --git a/generated/dot1agmep.go b/generated/dot1agmep.go
index b3c6df4..8d6db66 100644
--- a/generated/dot1agmep.go
+++ b/generated/dot1agmep.go
@@ -14,7 +14,7 @@
  * 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':
@@ -151,6 +151,15 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "RDI CCM",
+			1: "MAC status",
+			2: "Remote CCM",
+			3: "Error CCM",
+			4: "Xcon CCM",
+			5: "Unexpected period",
+			6: "AIS",
+		},
 	}
 }
 
diff --git a/generated/dot1xperformancemonitoringhistorydata.go b/generated/dot1xperformancemonitoringhistorydata.go
index 4127089..fa9ebfd 100644
--- a/generated/dot1xperformancemonitoringhistorydata.go
+++ b/generated/dot1xperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -141,6 +141,10 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			4: "Invalid EAPOL frames received",
+			9: "EAP length error frames received",
+		},
 	}
 }
 
diff --git a/generated/dot1xportextensionpackage.go b/generated/dot1xportextensionpackage.go
index 018d136..428d9de 100644
--- a/generated/dot1xportextensionpackage.go
+++ b/generated/dot1xportextensionpackage.go
@@ -14,7 +14,7 @@
  * 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':
@@ -137,6 +137,10 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "dot1x local authentication - allowed",
+			1: "dot1x local authentication - denied",
+		},
 	}
 }
 
diff --git a/generated/efmbondinggroup.go b/generated/efmbondinggroup.go
index 362c3ad..93df527 100644
--- a/generated/efmbondinggroup.go
+++ b/generated/efmbondinggroup.go
@@ -14,7 +14,7 @@
  * 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':
@@ -90,6 +90,13 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Group down",
+			1: "Group partial",
+			2: "Group US rate low",
+			3: "Group DS rate low",
+			4: "4x rate ratio",
+		},
 	}
 }
 
diff --git a/generated/efmbondinggroupperformancemonitoringhistorydata.go b/generated/efmbondinggroupperformancemonitoringhistorydata.go
index e924d55..902298a 100644
--- a/generated/efmbondinggroupperformancemonitoringhistorydata.go
+++ b/generated/efmbondinggroupperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -119,6 +119,12 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Rx bad fragments",
+			1: "Rx lost fragments",
+			2: "Rx lost starts",
+			3: "Rx lost ends",
+		},
 	}
 }
 
diff --git a/generated/efmbondinglink.go b/generated/efmbondinglink.go
index 1570d53..34db557 100644
--- a/generated/efmbondinglink.go
+++ b/generated/efmbondinglink.go
@@ -14,7 +14,7 @@
  * 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':
@@ -77,6 +77,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Link down",
+		},
 	}
 }
 
diff --git a/generated/enhancedfecperformancemonitoringhistorydata.go b/generated/enhancedfecperformancemonitoringhistorydata.go
index 150a9aa..40221e7 100644
--- a/generated/enhancedfecperformancemonitoringhistorydata.go
+++ b/generated/enhancedfecperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -102,6 +102,12 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Corrected bytes",
+			1: "Corrected code words",
+			2: "Uncorrectable code words",
+			4: "FEC seconds",
+		},
 	}
 }
 
diff --git a/generated/enhancedtcperformancemonitoringhistorydata.go b/generated/enhancedtcperformancemonitoringhistorydata.go
index e3c3fc2..0ea33d0 100644
--- a/generated/enhancedtcperformancemonitoringhistorydata.go
+++ b/generated/enhancedtcperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -142,6 +142,14 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			1: "PSBd HEC error count",
+			2: "XGTC HEC error count",
+			3: "Unknown profile count",
+			4: "XGEM HEC loss count",
+			5: "XGEM key errors",
+			6: "XGEM HEC error count",
+		},
 	}
 }
 
diff --git a/generated/equipmentextensionpackage.go b/generated/equipmentextensionpackage.go
index df671a8..1deabe7 100644
--- a/generated/equipmentextensionpackage.go
+++ b/generated/equipmentextensionpackage.go
@@ -14,7 +14,7 @@
  * 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':
@@ -76,6 +76,17 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Reserved",
+			1: "Sense point 1",
+			2: "Sense point 2",
+			3: "Sense point 3",
+			4: "Sense point 4",
+			5: "Sense point 5",
+			6: "Sense point 6",
+			7: "Sense point 7",
+			8: "Sense point 8",
+		},
 	}
 }
 
diff --git a/generated/ethernetframeextendedpm.go b/generated/ethernetframeextendedpm.go
index 9f2c543..a4cfd62 100644
--- a/generated/ethernetframeextendedpm.go
+++ b/generated/ethernetframeextendedpm.go
@@ -14,7 +14,7 @@
  * 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':
@@ -155,6 +155,12 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			1: "Drop events",
+			2: "CRC errored frames",
+			3: "Undersize frames",
+			4: "Oversize frames",
+		},
 	}
 }
 
diff --git a/generated/ethernetframeextendedpm64-bit.go b/generated/ethernetframeextendedpm64-bit.go
index 9023d3b..625818a 100644
--- a/generated/ethernetframeextendedpm64-bit.go
+++ b/generated/ethernetframeextendedpm64-bit.go
@@ -14,7 +14,7 @@
  * 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':
@@ -151,6 +151,12 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			1: "Drop events",
+			2: "CRC errored frames",
+			3: "Undersize frames",
+			4: "Oversize frames",
+		},
 	}
 }
 
diff --git a/generated/ethernetframeperformancemonitoringhistorydatadownstream.go b/generated/ethernetframeperformancemonitoringhistorydatadownstream.go
index 745bbe8..a535988 100644
--- a/generated/ethernetframeperformancemonitoringhistorydatadownstream.go
+++ b/generated/ethernetframeperformancemonitoringhistorydatadownstream.go
@@ -14,7 +14,7 @@
  * 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':
@@ -152,6 +152,12 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Drop events",
+			1: "CRC errored packets",
+			2: "Undersize packets",
+			3: "Oversize packets",
+		},
 	}
 }
 
diff --git a/generated/ethernetframeperformancemonitoringhistorydataupstream.go b/generated/ethernetframeperformancemonitoringhistorydataupstream.go
index f104580..28df9cb 100644
--- a/generated/ethernetframeperformancemonitoringhistorydataupstream.go
+++ b/generated/ethernetframeperformancemonitoringhistorydataupstream.go
@@ -14,7 +14,7 @@
  * 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':
@@ -160,6 +160,12 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Drop events",
+			1: "CRC errored packets",
+			2: "Undersize packets",
+			3: "Oversize packets",
+		},
 	}
 }
 
diff --git a/generated/ethernetperformancemonitoringhistorydata.go b/generated/ethernetperformancemonitoringhistorydata.go
index 9cdd51c..e0725b0 100644
--- a/generated/ethernetperformancemonitoringhistorydata.go
+++ b/generated/ethernetperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -152,6 +152,22 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0:  "FCS errors",
+			1:  "Excessive collision counter",
+			2:  "Late collision counter",
+			3:  "Frames too long",
+			4:  "Buffer overflows on receive",
+			5:  "Buffer overflows on transmit",
+			6:  "Single collision frame counter",
+			7:  "Multiple collisions frame counter",
+			8:  "SQE counter",
+			9:  "Deferred transmission counter",
+			10: "Internal MAC transmit error counter",
+			11: "Carrier sense error counter",
+			12: "Alignment error counter",
+			13: "Internal MAC receive error counter",
+		},
 	}
 }
 
diff --git a/generated/ethernetperformancemonitoringhistorydata2.go b/generated/ethernetperformancemonitoringhistorydata2.go
index 7503895..fd07bb6 100644
--- a/generated/ethernetperformancemonitoringhistorydata2.go
+++ b/generated/ethernetperformancemonitoringhistorydata2.go
@@ -14,7 +14,7 @@
  * 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':
@@ -84,6 +84,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "PPPoE filtered frame counter",
+		},
 	}
 }
 
diff --git a/generated/ethernetperformancemonitoringhistorydata3.go b/generated/ethernetperformancemonitoringhistorydata3.go
index 10da39b..1207ebc 100644
--- a/generated/ethernetperformancemonitoringhistorydata3.go
+++ b/generated/ethernetperformancemonitoringhistorydata3.go
@@ -14,7 +14,7 @@
  * 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':
@@ -167,6 +167,12 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Drop events",
+			1: "Undersize packets",
+			2: "Fragments",
+			3: "Jabbers",
+		},
 	}
 }
 
diff --git a/generated/galethernetperformancemonitoringhistorydata.go b/generated/galethernetperformancemonitoringhistorydata.go
index 30b630f..722d200 100644
--- a/generated/galethernetperformancemonitoringhistorydata.go
+++ b/generated/galethernetperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -84,6 +84,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Discarded frames",
+		},
 	}
 }
 
diff --git a/generated/geminterworkingterminationpoint.go b/generated/geminterworkingterminationpoint.go
index 6c70980..6b84a21 100644
--- a/generated/geminterworkingterminationpoint.go
+++ b/generated/geminterworkingterminationpoint.go
@@ -14,7 +14,7 @@
  * 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':
@@ -106,6 +106,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Deprecated",
+		},
 	}
 }
 
diff --git a/generated/gemportnetworkctp.go b/generated/gemportnetworkctp.go
index 2e7ce2b..be1c163 100644
--- a/generated/gemportnetworkctp.go
+++ b/generated/gemportnetworkctp.go
@@ -14,7 +14,7 @@
  * 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':
@@ -135,6 +135,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			5: "End-to-end loss of continuity",
+		},
 	}
 }
 
diff --git a/generated/gemportnetworkctpperformancemonitoringhistorydata.go b/generated/gemportnetworkctpperformancemonitoringhistorydata.go
index eb01e50..45b7c57 100644
--- a/generated/gemportnetworkctpperformancemonitoringhistorydata.go
+++ b/generated/gemportnetworkctpperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -113,6 +113,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			1: "Encryption key errors",
+		},
 	}
 }
 
diff --git a/generated/interworkingvccterminationpoint.go b/generated/interworkingvccterminationpoint.go
index 03af395..9bffbde 100644
--- a/generated/interworkingvccterminationpoint.go
+++ b/generated/interworkingvccterminationpoint.go
@@ -14,7 +14,7 @@
  * 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':
@@ -109,6 +109,15 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "End-to-end VC AIS layer management indication receiving (LMIR)",
+			1: "End-to-end VC RDI LMIR",
+			2: "End-to-end VC AIS layer management indication generation (LMIG)",
+			3: "End-to-end VC RDI LMIG",
+			4: "Segment loss of continuity",
+			5: "End-to-end loss of continuity",
+			6: "CSA",
+		},
 	}
 }
 
diff --git a/generated/iphostperformancemonitoringhistorydata.go b/generated/iphostperformancemonitoringhistorydata.go
index 318346a..23fe8a3 100644
--- a/generated/iphostperformancemonitoringhistorydata.go
+++ b/generated/iphostperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -107,6 +107,14 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			1: "IPNPM ICMP error",
+			2: "IPNPM DNS error",
+			3: "DHCP timeout",
+			4: "IP address conflict",
+			5: "Out of memory",
+			6: "Internal error",
+		},
 	}
 }
 
diff --git a/generated/macbridgeconfigurationdata.go b/generated/macbridgeconfigurationdata.go
index 5b6a1c6..8718214 100644
--- a/generated/macbridgeconfigurationdata.go
+++ b/generated/macbridgeconfigurationdata.go
@@ -14,7 +14,7 @@
  * 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':
diff --git a/generated/macbridgeperformancemonitoringhistorydata.go b/generated/macbridgeperformancemonitoringhistorydata.go
index 30acf13..668fcca 100644
--- a/generated/macbridgeperformancemonitoringhistorydata.go
+++ b/generated/macbridgeperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -87,6 +87,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Bridge learning entry discard",
+		},
 	}
 }
 
diff --git a/generated/macbridgeportconfigurationdata.go b/generated/macbridgeportconfigurationdata.go
index d731e08..092986f 100644
--- a/generated/macbridgeportconfigurationdata.go
+++ b/generated/macbridgeportconfigurationdata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -131,6 +131,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Port blocking",
+		},
 	}
 }
 
diff --git a/generated/macbridgeportperformancemonitoringhistorydata.go b/generated/macbridgeportperformancemonitoringhistorydata.go
index a6427dc..a6bcf4b 100644
--- a/generated/macbridgeportperformancemonitoringhistorydata.go
+++ b/generated/macbridgeportperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -104,6 +104,11 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			1: "Delay exceeded discard",
+			2: "MTU exceeded discard",
+			4: "Received and discarded",
+		},
 	}
 }
 
diff --git a/generated/me.go b/generated/me.go
index caa32bc..8bec058 100644
--- a/generated/me.go
+++ b/generated/me.go
@@ -14,7 +14,7 @@
  * 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':
@@ -258,6 +258,17 @@
 	return nil
 }
 
+// GetClassSupport returns the ONU support for this managed entity
+func (entity *ManagedEntity) GetClassSupport() ClassSupport {
+	return entity.definition.GetClassSupport()
+}
+
+// GetAlarmMap returns the Alarm Bit Number to Alarm Name (string) mapping.  Nil is returned if
+// the managed entity does not support alarms
+func (entity *ManagedEntity) GetAlarmMap() AlarmMap {
+	return entity.definition.GetAlarmMap()
+}
+
 // DecodeFromBytes decodes a Managed Entity give an octet stream pointing to the ME within a frame
 func (entity *ManagedEntity) DecodeFromBytes(data []byte, p gopacket.PacketBuilder, msgType byte) error {
 	if len(data) < 6 {
diff --git a/generated/medef.go b/generated/medef.go
index 7cb85d2..767e27b 100644
--- a/generated/medef.go
+++ b/generated/medef.go
@@ -14,7 +14,7 @@
  * 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':
@@ -33,14 +33,14 @@
 
 // ManagedEntityDefinition defines a Manage Entity
 type ManagedEntityDefinition struct {
-	Name         string
-	ClassID      ClassID
-	MessageTypes mapset.Set // Mandatory
-	// TODO: Support Optional Message types  (this has just been fixed in the code generator)
+	Name                 string
+	ClassID              ClassID
+	MessageTypes         mapset.Set // Mandatory
 	AllowedAttributeMask uint16
 	AttributeDefinitions AttributeDefinitionMap
 	Access               ClassAccess
 	Support              ClassSupport
+	Alarms               AlarmMap // AlarmBit -> AlarmName
 }
 
 func (bme *ManagedEntityDefinition) String() string {
@@ -79,6 +79,16 @@
 	return bme.AttributeDefinitions
 }
 
+// GetClassSupport returns ONUs support of this class
+func (bme ManagedEntityDefinition) GetClassSupport() ClassSupport {
+	return bme.Support
+}
+
+// GetAlarmMap returns the Alarm bit number to name map
+func (bme ManagedEntityDefinition) GetAlarmMap() AlarmMap {
+	return bme.Alarms
+}
+
 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
diff --git a/generated/mgcconfigdata.go b/generated/mgcconfigdata.go
index 135b71b..ddd39fb 100644
--- a/generated/mgcconfigdata.go
+++ b/generated/mgcconfigdata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -133,6 +133,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Timeout",
+		},
 	}
 }
 
diff --git a/generated/mgcperformancemonitoringhistorydata.go b/generated/mgcperformancemonitoringhistorydata.go
index 68805de..c9b6dc6 100644
--- a/generated/mgcperformancemonitoringhistorydata.go
+++ b/generated/mgcperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -127,6 +127,10 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "MGCP protocol errors",
+			1: "MGCP transport losses",
+		},
 	}
 }
 
diff --git a/generated/mocaethernetperformancemonitoringhistorydata.go b/generated/mocaethernetperformancemonitoringhistorydata.go
index 07dfbe9..b66845c 100644
--- a/generated/mocaethernetperformancemonitoringhistorydata.go
+++ b/generated/mocaethernetperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -133,6 +133,22 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0:  "Incoming unicast packets",
+			1:  "Incoming discarded packets",
+			2:  "Incoming errored packets",
+			3:  "Incoming unknown packets",
+			4:  "Incoming multicast packets",
+			5:  "Incoming broadcast packets",
+			6:  "Incoming octets",
+			7:  "Outgoing unicast packets",
+			8:  "Outgoing discarded packets",
+			9:  "Outgoing errored packets",
+			10: "Outgoing unknown packets",
+			11: "Outgoing multicast packets",
+			12: "Outgoing broadcast packets",
+			13: "Outgoing octets",
+		},
 	}
 }
 
diff --git a/generated/multicastgeminterworkingterminationpoint.go b/generated/multicastgeminterworkingterminationpoint.go
index 80c7bcb..bde9b12 100644
--- a/generated/multicastgeminterworkingterminationpoint.go
+++ b/generated/multicastgeminterworkingterminationpoint.go
@@ -14,7 +14,7 @@
  * 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':
@@ -162,6 +162,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Deprecated",
+		},
 	}
 }
 
diff --git a/generated/omcidefs.go b/generated/omcidefs.go
index 4b7367b..8924e7d 100644
--- a/generated/omcidefs.go
+++ b/generated/omcidefs.go
@@ -14,7 +14,7 @@
  * 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':
@@ -51,6 +51,10 @@
 // from the ITU-T G.988 specification.
 type ClassID uint16
 
+// AlarmMap is a mapping of alarm bit numbers to alarm names and can be
+// used during decode of Alarm Notification messages
+type AlarmMap map[uint8]string
+
 func (cid ClassID) String() string {
 	if entity, err := LoadManagedEntityDefinition(cid); err.StatusCode() == Success {
 		return fmt.Sprintf("[%s] (%d/%#x)",
@@ -255,6 +259,7 @@
 	GetMessageTypes() mapset.Set
 	GetAllowedAttributeMask() uint16
 	GetAttributeDefinitions() AttributeDefinitionMap
+	GetAlarmMap() AlarmMap
 
 	DecodeAttributes(uint16, []byte, gopacket.PacketBuilder, byte) (AttributeValueMap, error)
 	SerializeAttributes(AttributeValueMap, uint16, gopacket.SerializeBuffer, byte, int, bool) (error, uint16)
diff --git a/generated/physicalpathterminationpointcesuni.go b/generated/physicalpathterminationpointcesuni.go
index 68f4887..cc66a16 100644
--- a/generated/physicalpathterminationpointcesuni.go
+++ b/generated/physicalpathterminationpointcesuni.go
@@ -14,7 +14,7 @@
  * 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':
@@ -143,6 +143,31 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0:  "TF",
+			1:  "LOS",
+			2:  "LOF",
+			3:  "OOF",
+			4:  "RAI",
+			5:  "1.5 M BAIS",
+			6:  "R-INH",
+			7:  "6M REC",
+			8:  "6M SEND",
+			9:  "6M ERR",
+			10: "6M BERR",
+			11: "34M REC",
+			12: "34M AIS",
+			13: "2M REC",
+			14: "2M AIS",
+			15: "1.5M REC",
+			16: "1.5 AIS",
+			17: "INFO0",
+			18: "45M RDI",
+			19: "45M AIS",
+			20: "AIS-CI",
+			21: "DS1 idle",
+			22: "RAI-CI",
+		},
 	}
 }
 
diff --git a/generated/physicalpathterminationpointethernetuni.go b/generated/physicalpathterminationpointethernetuni.go
index ae562a0..063e742 100644
--- a/generated/physicalpathterminationpointethernetuni.go
+++ b/generated/physicalpathterminationpointethernetuni.go
@@ -14,7 +14,7 @@
  * 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':
@@ -152,6 +152,9 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "LAN-LOS",
+		},
 	}
 }
 
diff --git a/generated/physicalpathterminationpointmocauni.go b/generated/physicalpathterminationpointmocauni.go
index a8cc094..59652da 100644
--- a/generated/physicalpathterminationpointmocauni.go
+++ b/generated/physicalpathterminationpointmocauni.go
@@ -14,7 +14,7 @@
  * 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':
@@ -151,6 +151,10 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "MoCA LOL",
+			1: "MoCA limited link (LL)",
+		},
 	}
 }
 
diff --git a/generated/physicalpathterminationpointreuni.go b/generated/physicalpathterminationpointreuni.go
index f6bc1f1..462fad6 100644
--- a/generated/physicalpathterminationpointreuni.go
+++ b/generated/physicalpathterminationpointreuni.go
@@ -14,7 +14,7 @@
  * 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':
@@ -180,6 +180,14 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Low received optical power",
+			1: "High received optical power",
+			2: "Low transmit optical power",
+			3: "High transmit optical power",
+			4: "High laser bias current",
+			5: "S'/R' LOS",
+		},
 	}
 }
 
diff --git a/generated/physicalpathterminationpointvideoani.go b/generated/physicalpathterminationpointvideoani.go
index 0a3d356..39d03e6 100644
--- a/generated/physicalpathterminationpointvideoani.go
+++ b/generated/physicalpathterminationpointvideoani.go
@@ -14,7 +14,7 @@
  * 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':
@@ -154,6 +154,11 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Video LOS",
+			1: "Video OOR low",
+			2: "Video OOR high",
+		},
 	}
 }
 
diff --git a/generated/physicalpathterminationpointvideouni.go b/generated/physicalpathterminationpointvideouni.go
index ebbf415..fbd31d0 100644
--- a/generated/physicalpathterminationpointvideouni.go
+++ b/generated/physicalpathterminationpointvideouni.go
@@ -14,7 +14,7 @@
  * 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':
@@ -102,6 +102,11 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Video-LOS",
+			1: "Video-OOR-low",
+			2: "Video-OOR-high",
+		},
 	}
 }
 
diff --git a/generated/physicalpathterminationpointxdslunipart1.go b/generated/physicalpathterminationpointxdslunipart1.go
index fd720a3..fa883bc 100644
--- a/generated/physicalpathterminationpointxdslunipart1.go
+++ b/generated/physicalpathterminationpointxdslunipart1.go
@@ -14,7 +14,7 @@
  * 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':
@@ -152,6 +152,31 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0:  "NE LOF",
+			1:  "NE LOS",
+			2:  "NE LOL",
+			3:  "NE LPR",
+			4:  "Card alm",
+			5:  "FE LOF",
+			6:  "FE LOS",
+			7:  "FE LOL",
+			8:  "FE LPR",
+			9:  "DRT up",
+			10: "DRT down",
+			11: "LINIT",
+			12: "LCD",
+			13: "NCD",
+			14: "LCD-FE",
+			15: "NCD-FE",
+			16: "File not found",
+			17: "OOS",
+			18: "OOS-FE",
+			19: "LOR",
+			20: "LOM",
+			21: "LOR-FE",
+			22: "LOM-FE",
+		},
 	}
 }
 
diff --git a/generated/priorityqueue.go b/generated/priorityqueue.go
index 0226bf6..4022649 100644
--- a/generated/priorityqueue.go
+++ b/generated/priorityqueue.go
@@ -14,7 +14,7 @@
  * 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':
@@ -219,6 +219,9 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Block loss",
+		},
 	}
 }
 
diff --git a/generated/pseudowireperformancemonitoringhistorydata.go b/generated/pseudowireperformancemonitoringhistorydata.go
index 5799375..fc44a16 100644
--- a/generated/pseudowireperformancemonitoringhistorydata.go
+++ b/generated/pseudowireperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -165,6 +165,18 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Missing packets",
+			1: "Misordered packets, usable",
+			2: "Misordered packets dropped",
+			3: "Playout buffer underruns/overruns",
+			4: "Malformed packets",
+			5: "Stray packets",
+			6: "Remote packet loss",
+			7: "ES",
+			8: "SES",
+			9: "UAS",
+		},
 	}
 }
 
diff --git a/generated/pwatmperformancemonitoringhistorydata.go b/generated/pwatmperformancemonitoringhistorydata.go
index c68a56c..44442e0 100644
--- a/generated/pwatmperformancemonitoringhistorydata.go
+++ b/generated/pwatmperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -112,6 +112,12 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			1: "Downstream missing packets",
+			2: "Downstream reordered packets",
+			3: "Downstream timeout packets",
+			4: "Upstream dropped cells",
+		},
 	}
 }
 
diff --git a/generated/radiusperformancemonitoringhistorydata.go b/generated/radiusperformancemonitoringhistorydata.go
index 08953b6..778ea9f 100644
--- a/generated/radiusperformancemonitoringhistorydata.go
+++ b/generated/radiusperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -110,6 +110,10 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			1: "Retransmission count",
+			5: "Invalid radius packets received",
+		},
 	}
 }
 
diff --git a/generated/reani-g.go b/generated/reani-g.go
index 5142e5c..6b696d6 100644
--- a/generated/reani-g.go
+++ b/generated/reani-g.go
@@ -14,7 +14,7 @@
  * 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':
@@ -185,6 +185,13 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Low received optical power",
+			1: "High received optical power",
+			2: "Low transmit optical power",
+			3: "High transmit optical power",
+			4: "High laser bias current",
+		},
 	}
 }
 
diff --git a/generated/recommonamplifierparameters.go b/generated/recommonamplifierparameters.go
index 637a758..bc83606 100644
--- a/generated/recommonamplifierparameters.go
+++ b/generated/recommonamplifierparameters.go
@@ -14,7 +14,7 @@
  * 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':
@@ -132,6 +132,15 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Low gain",
+			1: "High gain",
+			2: "Low temperature",
+			3: "High temperature",
+			4: "High bias current",
+			5: "High temperature shutdown",
+			6: "High current shutdown",
+		},
 	}
 }
 
diff --git a/generated/redownstreamamplifier.go b/generated/redownstreamamplifier.go
index 59d758b..f5176d9 100644
--- a/generated/redownstreamamplifier.go
+++ b/generated/redownstreamamplifier.go
@@ -14,7 +14,7 @@
  * 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':
@@ -155,6 +155,13 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Low received optical power",
+			1: "High received optical power",
+			2: "Low transmit optical power",
+			3: "High transmit optical power",
+			4: "High laser bias current",
+		},
 	}
 }
 
diff --git a/generated/reupstreamamplifier.go b/generated/reupstreamamplifier.go
index 0f81c6a..df21ac2 100644
--- a/generated/reupstreamamplifier.go
+++ b/generated/reupstreamamplifier.go
@@ -14,7 +14,7 @@
  * 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':
@@ -163,6 +163,14 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Low received optical power",
+			1: "High received optical power",
+			2: "Low transmit optical power",
+			3: "High transmit optical power",
+			4: "High laser bias current",
+			5: "S'/R' LOS",
+		},
 	}
 }
 
diff --git a/generated/rtpperformancemonitoringhistorydata.go b/generated/rtpperformancemonitoringhistorydata.go
index 9fb4891..4576186 100644
--- a/generated/rtpperformancemonitoringhistorydata.go
+++ b/generated/rtpperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -116,6 +116,14 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "RTP errors",
+			1: "Packet loss(Note 1)",
+			2: "Maximum jitter",
+			3: "Max time between RTCP packets",
+			4: "Buffer underflows",
+			5: "Buffer overflows",
+		},
 	}
 }
 
diff --git a/generated/sipagentconfigdata.go b/generated/sipagentconfigdata.go
index f6dedcb..ca86d96 100644
--- a/generated/sipagentconfigdata.go
+++ b/generated/sipagentconfigdata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -169,6 +169,12 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "SIP-UA register name",
+			1: "SIP-UA register reach",
+			2: "SIP-UA register connect",
+			3: "SIP-UA register validate",
+		},
 	}
 }
 
diff --git a/generated/sipagentperformancemonitoringhistorydata.go b/generated/sipagentperformancemonitoringhistorydata.go
index 0759e1c..30b8e75 100644
--- a/generated/sipagentperformancemonitoringhistorydata.go
+++ b/generated/sipagentperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -143,6 +143,14 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "SIPAMD Rx invite req",
+			1: "SIPAMD Rx invite req retransmission",
+			2: "SIPAMD Rx noninvite req",
+			3: "SIPAMD Rx noninvite req retransmission",
+			4: "SIPAMD Rx response",
+			5: "SIPAMD Rx response retransmission",
+		},
 	}
 }
 
diff --git a/generated/sipcallinitiationperformancemonitoringhistorydata.go b/generated/sipcallinitiationperformancemonitoringhistorydata.go
index f1d3990..ed9534f 100644
--- a/generated/sipcallinitiationperformancemonitoringhistorydata.go
+++ b/generated/sipcallinitiationperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -106,6 +106,13 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "SIP call PM failed connect",
+			1: "SIP call PM failed to validate",
+			2: "SIP call PM timeout",
+			3: "SIP call PM failure error code received",
+			4: "SIP call PM failed to authenticate",
+		},
 	}
 }
 
diff --git a/generated/sipuserdata.go b/generated/sipuserdata.go
index d8ee85f..fe7bbab 100644
--- a/generated/sipuserdata.go
+++ b/generated/sipuserdata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -140,6 +140,11 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "SIP-UA register auth",
+			1: "SIP-UA register timeout",
+			2: "SIP-UA register fail",
+		},
 	}
 }
 
diff --git a/generated/tcadaptorperformancemonitoringhistorydataxdsl.go b/generated/tcadaptorperformancemonitoringhistorydataxdsl.go
index fc4e55a..2ee8a6b 100644
--- a/generated/tcadaptorperformancemonitoringhistorydataxdsl.go
+++ b/generated/tcadaptorperformancemonitoringhistorydataxdsl.go
@@ -14,7 +14,7 @@
  * 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':
@@ -120,6 +120,16 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Near-end HEC violation",
+			1: "Near-end idle cell bit error count",
+			2: "Far-end HEC violation count",
+			3: "Far-end idle cell bit error count",
+			4: "Near-end delineated total cell count (CD-P)",
+			5: "Near-end user total cell count (CU-P)",
+			6: "Far-end delineated total cell count (CD-PFE)",
+			7: "Far-end user total cell count (CU-PFE)",
+		},
 	}
 }
 
diff --git a/generated/tcpudpperformancemonitoringhistorydata.go b/generated/tcpudpperformancemonitoringhistorydata.go
index ec7567f..eb1833f 100644
--- a/generated/tcpudpperformancemonitoringhistorydata.go
+++ b/generated/tcpudpperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -103,6 +103,13 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			1: "Socket failed",
+			2: "Listen failed",
+			3: "Bind failed",
+			4: "Accept failed",
+			5: "Select failed",
+		},
 	}
 }
 
diff --git a/generated/twdmchannelphylodsperformancemonitoringhistorydata.go b/generated/twdmchannelphylodsperformancemonitoringhistorydata.go
index c8d3a2a..db46818 100644
--- a/generated/twdmchannelphylodsperformancemonitoringhistorydata.go
+++ b/generated/twdmchannelphylodsperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -157,6 +157,20 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			1:  "BIP-32 bit error count",
+			2:  "PSBd HEC errors - corrected",
+			3:  "PSBd HEC errors - uncorrectable",
+			4:  "FS header errors - corrected",
+			5:  "FS header errors - uncorrectable",
+			6:  "Total LODS event count",
+			7:  "LODS - restored in operating TWDM channel",
+			8:  "LODS - restored in protection TWDM channel",
+			9:  "LODS - restored in discretionary TWDM channel",
+			10: "LODS - reactivations",
+			11: "LODS - handshake failure in protection channel",
+			12: "LODS - handshake failure in discretionary channel",
+		},
 	}
 }
 
diff --git a/generated/twdmchannelploamperformancemonitoringhistorydatapart1.go b/generated/twdmchannelploamperformancemonitoringhistorydatapart1.go
index ca8616f..2633fc5 100644
--- a/generated/twdmchannelploamperformancemonitoringhistorydatapart1.go
+++ b/generated/twdmchannelploamperformancemonitoringhistorydatapart1.go
@@ -14,7 +14,7 @@
  * 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':
@@ -121,6 +121,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "PLOAM MIC errors",
+		},
 	}
 }
 
diff --git a/generated/twdmchannelploamperformancemonitoringhistorydatapart2.go b/generated/twdmchannelploamperformancemonitoringhistorydatapart2.go
index 439178f..4dfaa75 100644
--- a/generated/twdmchannelploamperformancemonitoringhistorydatapart2.go
+++ b/generated/twdmchannelploamperformancemonitoringhistorydatapart2.go
@@ -14,7 +14,7 @@
  * 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':
@@ -161,6 +161,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Unsatisfied Adjust_Tx_Wavelength requests",
+		},
 	}
 }
 
diff --git a/generated/twdmchannelploamperformancemonitoringhistorydatapart3.go b/generated/twdmchannelploamperformancemonitoringhistorydatapart3.go
index b1ef66b..739dc56 100644
--- a/generated/twdmchannelploamperformancemonitoringhistorydatapart3.go
+++ b/generated/twdmchannelploamperformancemonitoringhistorydatapart3.go
@@ -14,7 +14,7 @@
  * 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':
@@ -138,6 +138,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Change_Power_Level parameter error count",
+		},
 	}
 }
 
diff --git a/generated/twdmchanneltuningperformancemonitoringhistorydatapart2.go b/generated/twdmchanneltuningperformancemonitoringhistorydatapart2.go
index 07eb432..9e7d0e3 100644
--- a/generated/twdmchanneltuningperformancemonitoringhistorydatapart2.go
+++ b/generated/twdmchanneltuningperformancemonitoringhistorydatapart2.go
@@ -14,7 +14,7 @@
  * 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':
@@ -161,6 +161,21 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0:  "Tuning control requests rejected/DS_ALBL",
+			1:  "Tuning control requests rejected/DS_VOID",
+			2:  "Tuning control requests rejected/DS_PART",
+			3:  "Tuning control requests rejected/DS_TUNR",
+			4:  "Tuning control requests rejected/DS_LNRT",
+			5:  "Tuning control requests rejected/DS_LNCD",
+			6:  "Tuning control requests rejected/US_ALBL",
+			7:  "Tuning control requests rejected/US_VOID",
+			8:  "Tuning control requests rejected/US_TUNR",
+			9:  "Tuning control requests rejected/US_CLBR",
+			10: "Tuning control requests rejected/US_LKTP",
+			11: "Tuning control requests rejected/US_LNRT",
+			12: "Tuning control requests rejected/US_LNCD",
+		},
 	}
 }
 
diff --git a/generated/twdmchanneltuningperformancemonitoringhistorydatapart3.go b/generated/twdmchanneltuningperformancemonitoringhistorydatapart3.go
index daa8201..ce12a7b 100644
--- a/generated/twdmchanneltuningperformancemonitoringhistorydatapart3.go
+++ b/generated/twdmchanneltuningperformancemonitoringhistorydatapart3.go
@@ -14,7 +14,7 @@
  * 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':
@@ -132,6 +132,16 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Tuning control requests Rollback/DS_ALBL",
+			1: "Tuning control requests Rollback /DS_LKTP",
+			2: "Tuning control requests Rollback/US_ALBL",
+			3: "Tuning control requests Rollback /US_VOID",
+			4: "Tuning control requests Rollback/US_TUNR",
+			5: "Tuning control requests Rollback /US_LKTP",
+			6: "Tuning control requests Rollback/US_LNRT",
+			7: "Tuning control requests Rollback /US_LNCD",
+		},
 	}
 }
 
diff --git a/generated/version.go b/generated/version.go
index 672c71b..f4946e0 100644
--- a/generated/version.go
+++ b/generated/version.go
@@ -14,7 +14,7 @@
  * 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':
@@ -64,9 +64,9 @@
 	Versions = append(Versions,
 		VersionInfo{
 			Name:       "code-generator",
-			Version:    "0.15.1",
-			CreateTime: 1581435018.598259,
-			ItuDocName: "T-REC-G.988-2017-11.docx",
+			Version:    "0.15.6",
+			CreateTime: 1612285143.0049334,
+			ItuDocName: "T-REC-G.988-201711-I!!MSW-E.docx",
 			SHA256:     "96ffc8bca6f70175c8e281e87e1cf21662d07a7502ebf595c5c3180a9972b9ac",
 		})
 }
diff --git a/generated/virtualethernetinterfacepoint.go b/generated/virtualethernetinterfacepoint.go
index dd8c881..4312a19 100644
--- a/generated/virtualethernetinterfacepoint.go
+++ b/generated/virtualethernetinterfacepoint.go
@@ -14,7 +14,7 @@
  * 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':
@@ -108,6 +108,9 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Connecting function fail",
+		},
 	}
 }
 
diff --git a/generated/voipconfigdata.go b/generated/voipconfigdata.go
index d54be1c..9da4493 100644
--- a/generated/voipconfigdata.go
+++ b/generated/voipconfigdata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -104,6 +104,24 @@
 		},
 		Access:  CreatedByOnu,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0:  "VCD config server name",
+			1:  "VCD config server reach",
+			2:  "VCD config server connect",
+			3:  "VCD config server validate",
+			4:  "VCD config server auth",
+			5:  "VCD config server timeout",
+			6:  "VCD config server fail",
+			7:  "VCD config file error",
+			8:  "VCD subscription name",
+			9:  "VCD subscription reach",
+			10: "VCD subscription connect",
+			11: "VCD subscription validate",
+			12: "VCD subscription auth",
+			13: "VCD subscription timeout",
+			14: "VCD subscription fail",
+			15: "VCD reboot request",
+		},
 	}
 }
 
diff --git a/generated/vpnetworkctp.go b/generated/vpnetworkctp.go
index 922c43e..af565dd 100644
--- a/generated/vpnetworkctp.go
+++ b/generated/vpnetworkctp.go
@@ -14,7 +14,7 @@
  * 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':
@@ -103,6 +103,14 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "VP AIS LMIR",
+			1: "VP RDI LMIR",
+			2: "VP AIS LMIG",
+			3: "VP RDI LMIG",
+			4: "Segment loss of continuity",
+			5: "End-to-end loss of continuity",
+		},
 	}
 }
 
diff --git a/generated/vpperformancemonitoringhistorydata.go b/generated/vpperformancemonitoringhistorydata.go
index 4039e8e..4f98c8c 100644
--- a/generated/vpperformancemonitoringhistorydata.go
+++ b/generated/vpperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -112,6 +112,12 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Lost CLP-= 0-+ 1 cells",
+			1: "Lost CLP-= 0 cells",
+			2: "Misinserted cells",
+			3: "Impaired blocks",
+		},
 	}
 }
 
diff --git a/generated/xdslxtu-cchannelperformancemonitoringhistorydata.go b/generated/xdslxtu-cchannelperformancemonitoringhistorydata.go
index 8cd69ae..2e1b0e5 100644
--- a/generated/xdslxtu-cchannelperformancemonitoringhistorydata.go
+++ b/generated/xdslxtu-cchannelperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -110,6 +110,12 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Corrected blocks",
+			1: "Uncorrected blocks",
+			2: "Code violations",
+			3: "Forward error corrections",
+		},
 	}
 }
 
diff --git a/generated/xdslxtu-cperformancemonitoringhistorydata.go b/generated/xdslxtu-cperformancemonitoringhistorydata.go
index fb1dee8..287df45 100644
--- a/generated/xdslxtu-cperformancemonitoringhistorydata.go
+++ b/generated/xdslxtu-cperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -152,6 +152,20 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0:  "Loss of frame seconds",
+			1:  "Loss of signal seconds",
+			2:  "Loss of link seconds",
+			3:  "Loss of power seconds",
+			4:  "Errored seconds",
+			5:  "Severely errored seconds",
+			6:  "Line initializations",
+			7:  "Failed line initializations",
+			8:  "Short initializations",
+			9:  "Failed short initializations",
+			10: "FEC seconds",
+			11: "Unavailable seconds",
+		},
 	}
 }
 
diff --git a/generated/xdslxtu-cperformancemonitoringhistorydatapart2.go b/generated/xdslxtu-cperformancemonitoringhistorydatapart2.go
index df422ef..eaa7e22 100644
--- a/generated/xdslxtu-cperformancemonitoringhistorydatapart2.go
+++ b/generated/xdslxtu-cperformancemonitoringhistorydatapart2.go
@@ -14,7 +14,7 @@
  * 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':
@@ -95,6 +95,9 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "leftr defect seconds",
+		},
 	}
 }
 
diff --git a/generated/xdslxtu-rchannelperformancemonitoringhistorydata.go b/generated/xdslxtu-rchannelperformancemonitoringhistorydata.go
index a6cbe43..b1343c6 100644
--- a/generated/xdslxtu-rchannelperformancemonitoringhistorydata.go
+++ b/generated/xdslxtu-rchannelperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -113,6 +113,12 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Corrected blocks",
+			1: "Uncorrected blocks",
+			2: "Code violations",
+			3: "Forward error corrections",
+		},
 	}
 }
 
diff --git a/generated/xdslxtu-rperformancemonitoringhistorydata.go b/generated/xdslxtu-rperformancemonitoringhistorydata.go
index 1482405..56f8ca5 100644
--- a/generated/xdslxtu-rperformancemonitoringhistorydata.go
+++ b/generated/xdslxtu-rperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -127,6 +127,16 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			0: "Loss of frame seconds",
+			1: "Loss of signal seconds",
+			2: "Loss of power seconds",
+			3: "Errored seconds",
+			4: "Severely errored seconds",
+			5: "FEC seconds",
+			6: "Unavailable seconds",
+			7: "leftr defect seconds",
+		},
 	}
 }
 
diff --git a/generated/xg-pondownstreammanagementperformancemonitoringhistorydata.go b/generated/xg-pondownstreammanagementperformancemonitoringhistorydata.go
index 43dbb8d..2371b91 100644
--- a/generated/xg-pondownstreammanagementperformancemonitoringhistorydata.go
+++ b/generated/xg-pondownstreammanagementperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -152,6 +152,10 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			1: "PLOAM MIC error count",
+			2: "OMCI MIC error count",
+		},
 	}
 }
 
diff --git a/generated/xg-pontcperformancemonitoringhistorydata.go b/generated/xg-pontcperformancemonitoringhistorydata.go
index 35a899f..e9cf5b0 100644
--- a/generated/xg-pontcperformancemonitoringhistorydata.go
+++ b/generated/xg-pontcperformancemonitoringhistorydata.go
@@ -14,7 +14,7 @@
  * 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':
@@ -143,6 +143,14 @@
 		},
 		Access:  CreatedByOlt,
 		Support: UnknownSupport,
+		Alarms: AlarmMap{
+			1: "PSBd HEC error count",
+			2: "XGTC HEC error count",
+			3: "Unknown profile count",
+			4: "XGEM HEC loss count",
+			5: "XGEM key errors",
+			6: "XGEM HEC error count",
+		},
 	}
 }
 
diff --git a/messagetypes.go b/messagetypes.go
index 614204d..8cca403 100644
--- a/messagetypes.go
+++ b/messagetypes.go
@@ -21,8 +21,8 @@
 	"encoding/binary"
 	"errors"
 	"fmt"
-	me "github.com/opencord/omci-lib-go/generated"
 	"github.com/google/gopacket"
+	me "github.com/opencord/omci-lib-go/generated"
 )
 
 // MessageType is the OMCI Message Type or'ed with the AR/AK flags as appropriate.
@@ -1590,6 +1590,20 @@
 		msg := fmt.Sprintf("invalid alarm number: %v, must be 0..224", alarmNumber)
 		return false, errors.New(msg)
 	}
+	entity, omciErr := me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if omciErr.StatusCode() != me.Success {
+		return false, omciErr.GetError()
+	}
+	alarmMap := entity.GetAlarmMap()
+	if alarmMap == nil {
+		msg := "Managed Entity does not support Alarm notifications"
+		return false, errors.New(msg)
+	}
+	if _, ok := alarmMap[alarmNumber]; !ok {
+		msg := fmt.Sprintf("unsupported invalid alarm number: %v", alarmNumber)
+		return false, errors.New(msg)
+	}
 	octet := alarmNumber / 8
 	bit := 7 - (alarmNumber % 8)
 	return omci.AlarmBitmap[octet]>>bit == 1, nil
@@ -1600,6 +1614,19 @@
 		msg := fmt.Sprintf("invalid alarm number: %v, must be 0..224", alarmNumber)
 		return false, errors.New(msg)
 	}
+	entity, omciErr := me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if omciErr.StatusCode() != me.Success {
+		return false, omciErr.GetError()
+	}
+	alarmMap := entity.GetAlarmMap()
+	if alarmMap == nil {
+		return false, errors.New("Managed Entity does not support Alarm notifications")
+	}
+	if _, ok := alarmMap[alarmNumber]; !ok {
+		msg := fmt.Sprintf("unsupported invalid alarm number: %v", alarmNumber)
+		return false, errors.New(msg)
+	}
 	octet := alarmNumber / 8
 	bit := 7 - (alarmNumber % 8)
 	return omci.AlarmBitmap[octet]>>bit == 0, nil
@@ -1610,6 +1637,19 @@
 		msg := fmt.Sprintf("invalid alarm number: %v, must be 0..224", alarmNumber)
 		return errors.New(msg)
 	}
+	entity, omciErr := me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if omciErr.StatusCode() != me.Success {
+		return omciErr.GetError()
+	}
+	alarmMap := entity.GetAlarmMap()
+	if alarmMap == nil {
+		return errors.New("Managed Entity does not support Alarm notifications")
+	}
+	if _, ok := alarmMap[alarmNumber]; !ok {
+		msg := fmt.Sprintf("unsupported invalid alarm number: %v", alarmNumber)
+		return errors.New(msg)
+	}
 	octet := alarmNumber / 8
 	bit := 7 - (alarmNumber % 8)
 	omci.AlarmBitmap[octet] |= 1 << bit
@@ -1621,6 +1661,19 @@
 		msg := fmt.Sprintf("invalid alarm number: %v, must be 0..224", alarmNumber)
 		return errors.New(msg)
 	}
+	entity, omciErr := me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if omciErr.StatusCode() != me.Success {
+		return omciErr.GetError()
+	}
+	alarmMap := entity.GetAlarmMap()
+	if alarmMap == nil {
+		return errors.New("Managed Entity does not support Alarm notifications")
+	}
+	if _, ok := alarmMap[alarmNumber]; !ok {
+		msg := fmt.Sprintf("unsupported invalid alarm number: %v", alarmNumber)
+		return errors.New(msg)
+	}
 	octet := alarmNumber / 8
 	bit := 7 - (alarmNumber % 8)
 	omci.AlarmBitmap[octet] &= ^(1 << bit)
@@ -1634,27 +1687,31 @@
 	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
+	meDefinition, omciErr := me.LoadManagedEntityDefinition(omci.EntityClass,
+		me.ParamData{EntityID: omci.EntityInstance})
+	if omciErr.StatusCode() != me.Success {
+		return omciErr.GetError()
 	}
-	padOffset := 4 + (AlarmBitmapSize / 8)
-	omci.zeroPadding[0] = data[padOffset]
-	omci.zeroPadding[1] = data[padOffset+1]
-	omci.zeroPadding[2] = data[padOffset+2]
+	// Is this an unsupported or vendor specific ME.  If so, it is not an error to decode
+	// the alarms.  We just cannot provide any alarm names.  Handle decode here.
+	classSupport := meDefinition.GetClassSupport()
+	isUnsupported := classSupport == me.UnsupportedManagedEntity ||
+		classSupport == me.UnsupportedVendorSpecificManagedEntity
 
-	omci.AlarmSequenceNumber = data[padOffset+3]
-	return nil
+	// Look for a non-nil/not empty Alarm Map to determine if this ME supports alarms
+	if alarmMap := meDefinition.GetAlarmMap(); isUnsupported || (alarmMap != nil && len(alarmMap) > 0) {
+		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
+	}
+	return me.NewProcessingError("managed entity does not support alarm notifications")
 }
 
 func decodeAlarmNotification(data []byte, p gopacket.PacketBuilder) error {
diff --git a/messagetypes_test.go b/messagetypes_test.go
index c3ad0df..4e29cc6 100644
--- a/messagetypes_test.go
+++ b/messagetypes_test.go
@@ -19,9 +19,9 @@
 import (
 	"encoding/base64"
 	"fmt"
+	"github.com/google/gopacket"
 	. "github.com/opencord/omci-lib-go"
 	me "github.com/opencord/omci-lib-go/generated"
-	"github.com/google/gopacket"
 	"github.com/stretchr/testify/assert"
 	"strings"
 	"testing"
@@ -2577,11 +2577,125 @@
 	})
 	assert.Equal(t, request.AlarmSequenceNumber, byte(5))
 
+	// Active/Clear tests
+	active, err2 := request.IsAlarmActive(0)
+	clear, err3 := request.IsAlarmClear(0)
+	assert.Nil(t, err2)
+	assert.Nil(t, err3)
+	assert.True(t, active)
+	assert.False(t, clear)
+
+	// Active/Clear for undefined alarm bits
+	active, err2 = request.IsAlarmActive(1)
+	clear, err3 = request.IsAlarmClear(1)
+	assert.NotNil(t, err2)
+	assert.NotNil(t, err3)
+
 	// Verify string output for message
 	packetString := packet.String()
 	assert.NotZero(t, len(packetString))
 }
 
+func TestInvalidClassAlarmNotificationDecode(t *testing.T) {
+	// Choosing GalEthernetProfile (272) since it does not support alarms, show we should
+	// file the decode
+	badMessage := "0000100a01100104800000000000000000000000000000000000000000000000000000000000000500000028"
+	data, err := stringToPacket(badMessage)
+	assert.NoError(t, err)
+
+	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
+	assert.NotNil(t, packet)
+
+	omciLayer := packet.Layer(LayerTypeOMCI)
+	assert.NotNil(t, packet)
+
+	omciMsg, ok := omciLayer.(*OMCI)
+	assert.True(t, ok)
+	assert.Equal(t, omciMsg.TransactionID, uint16(0x0))
+	assert.Equal(t, omciMsg.MessageType, AlarmNotificationType)
+	assert.Equal(t, omciMsg.DeviceIdentifier, BaselineIdent)
+	assert.Equal(t, omciMsg.Length, uint16(40))
+
+	msgLayer := packet.Layer(LayerTypeAlarmNotification)
+	assert.Nil(t, msgLayer)
+
+	request, ok2 := msgLayer.(*AlarmNotificationMsg)
+	assert.False(t, ok2)
+	assert.Nil(t, request)
+}
+
+func TestUnknownsMeAlarmNotificationDecode(t *testing.T) {
+	// Choosing class ID 22 since it is in the G.988 class ID space and is reserved
+	goodMessage := "0000100a00160104800000000000000000000000000000000000000000000000000000000000000500000028"
+	data, err := stringToPacket(goodMessage)
+	assert.NoError(t, err)
+
+	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
+	assert.NotNil(t, packet)
+
+	omciLayer := packet.Layer(LayerTypeOMCI)
+	assert.NotNil(t, packet)
+
+	omciMsg, ok := omciLayer.(*OMCI)
+	assert.True(t, ok)
+	assert.Equal(t, omciMsg.TransactionID, uint16(0x0))
+	assert.Equal(t, omciMsg.MessageType, AlarmNotificationType)
+	assert.Equal(t, omciMsg.DeviceIdentifier, BaselineIdent)
+	assert.Equal(t, omciMsg.Length, uint16(40))
+
+	msgLayer := packet.Layer(LayerTypeAlarmNotification)
+	assert.NotNil(t, msgLayer)
+
+	request, ok2 := msgLayer.(*AlarmNotificationMsg)
+	assert.True(t, ok2)
+	assert.NotNil(t, request)
+	assert.Equal(t, request.EntityClass, me.ClassID(22))
+	assert.Equal(t, request.EntityInstance, uint16(0x104))
+	assert.Equal(t, request.AlarmBitmap, [28]byte{
+		0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	})
+	assert.Equal(t, request.AlarmSequenceNumber, byte(5))
+}
+
+func TestVendorSpecificAlarmNotificationDecode(t *testing.T) {
+	// Choosing class ID 255 since it is in the first vendor specific class ID space
+	goodMessage := "0000100a00FF0104800000000000000000000000000000000000000000000000000000000000000500000028"
+	data, err := stringToPacket(goodMessage)
+	assert.NoError(t, err)
+
+	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
+	assert.NotNil(t, packet)
+
+	omciLayer := packet.Layer(LayerTypeOMCI)
+	assert.NotNil(t, packet)
+
+	omciMsg, ok := omciLayer.(*OMCI)
+	assert.True(t, ok)
+	assert.Equal(t, omciMsg.TransactionID, uint16(0x0))
+	assert.Equal(t, omciMsg.MessageType, AlarmNotificationType)
+	assert.Equal(t, omciMsg.DeviceIdentifier, BaselineIdent)
+	assert.Equal(t, omciMsg.Length, uint16(40))
+
+	msgLayer := packet.Layer(LayerTypeAlarmNotification)
+	assert.NotNil(t, msgLayer)
+
+	request, ok2 := msgLayer.(*AlarmNotificationMsg)
+	assert.True(t, ok2)
+	assert.NotNil(t, request)
+	assert.Equal(t, request.EntityClass, me.ClassID(255))
+	assert.Equal(t, request.EntityInstance, uint16(0x104))
+	assert.Equal(t, request.AlarmBitmap, [28]byte{
+		0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	})
+	assert.Equal(t, request.AlarmSequenceNumber, byte(5))
+}
+
 func TestAlarmNotificationSerialize(t *testing.T) {
 	goodMessage := "0000100a000b0104800000000000000000000000000000000000000000000000000000000000000500000028"
 
@@ -2688,7 +2802,6 @@
 	assert.Equal(t, strings.ToLower(goodMessage), reconstituted)
 }
 
-
 func TestJira3769(t *testing.T) {
 	// VOL-3769.  Error parsing get response with processing error and large mask
 	sampleMessage := "035e290a0101000001FFFC000000000000000000000000000000000000000000000000000000000000000028"
@@ -2719,5 +2832,6 @@
 	assert.Equal(t, response.Result, me.ProcessingError)
 	assert.Equal(t, response.AttributeMask, uint16(0xFFFC))
 }
+
 // TODO: Create notification tests for all of the following types
 //TestResult,