VOL-3049 initial support changes for alarm notifications

Change-Id: Ic6e17196e6955a669e2bf8fc248bdbdbca1654c5
diff --git a/go.mod b/go.mod
index f730823..2053ee3 100644
--- a/go.mod
+++ b/go.mod
@@ -8,7 +8,7 @@
 	github.com/golang/protobuf v1.4.2
 	github.com/google/gopacket v1.1.17
 	github.com/looplab/fsm v0.1.0
-	github.com/opencord/omci-lib-go v0.13.4
+	github.com/opencord/omci-lib-go v0.13.6
 	github.com/opencord/voltha-lib-go/v4 v4.0.6
 	github.com/opencord/voltha-protos/v4 v4.0.11
 	github.com/stretchr/testify v1.6.1
diff --git a/go.sum b/go.sum
index 504c300..e94eb70 100644
--- a/go.sum
+++ b/go.sum
@@ -217,8 +217,8 @@
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/gomega v1.4.2 h1:3mYCb7aPxS/RU7TI1y4rkEn1oKmPRjNJLNEXgw7MH2I=
 github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/opencord/omci-lib-go v0.13.4 h1:L3GpFHrx3DASixkCvztnJbcLGUTU/21wJYdE/qG9/XA=
-github.com/opencord/omci-lib-go v0.13.4/go.mod h1:6OIHB14Ch5qGgHzwSWlMACtk5KFoLzQ4LAhdcy4jwvo=
+github.com/opencord/omci-lib-go v0.13.6 h1:T6fyvALAo4Kn2x756S2QhOFFbF/dR939IskZF3gb7O4=
+github.com/opencord/omci-lib-go v0.13.6/go.mod h1:6OIHB14Ch5qGgHzwSWlMACtk5KFoLzQ4LAhdcy4jwvo=
 github.com/opencord/voltha-lib-go/v4 v4.0.6 h1:Mc/bkYDR3YcpWPeW35ju9h3sO2cGByz8XM0ik5ikJkc=
 github.com/opencord/voltha-lib-go/v4 v4.0.6/go.mod h1:8NFUZz/mp4OvRmilBRhkLOUrw4G01ruSAVdzQu2ivPc=
 github.com/opencord/voltha-protos/v4 v4.0.8 h1:/P9IYuWPTp/aabS5n1fakQgHCFNzKjW1JHw3TOLAfKE=
@@ -373,6 +373,7 @@
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200221224223-e1da425f72fd h1:hHkvGJK23seRCflePJnVa9IMv8fsuavSCWKd11kDQFs=
 golang.org/x/tools v0.0.0-20200221224223-e1da425f72fd/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
diff --git a/internal/pkg/onuadaptercore/alarm_manager.go b/internal/pkg/onuadaptercore/alarm_manager.go
new file mode 100644
index 0000000..dcf3a18
--- /dev/null
+++ b/internal/pkg/onuadaptercore/alarm_manager.go
@@ -0,0 +1,302 @@
+/*
+ * Copyright 2021-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//Package adaptercoreonu provides the utility for onu devices, flows and statistics
+package adaptercoreonu
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"sync"
+	"time"
+
+	"github.com/opencord/omci-lib-go"
+	me "github.com/opencord/omci-lib-go/generated"
+	"github.com/opencord/voltha-lib-go/v4/pkg/events/eventif"
+	"github.com/opencord/voltha-lib-go/v4/pkg/log"
+	"github.com/opencord/voltha-protos/v4/go/voltha"
+)
+
+const (
+	circuitPackClassID                             = me.CircuitPackClassID
+	physicalPathTerminationPointEthernetUniClassID = me.PhysicalPathTerminationPointEthernetUniClassID
+	onuGClassID                                    = me.OnuGClassID
+	aniGClassID                                    = me.AniGClassID
+)
+
+type alarmInfo struct {
+	classID    me.ClassID
+	instanceID uint16
+	alarmNo    uint8
+}
+
+type alarms map[alarmInfo]struct{}
+
+type onuAlarmManager struct {
+	pDeviceHandler             *deviceHandler
+	eventProxy                 eventif.EventProxy
+	stopProcessingOmciMessages chan bool
+	eventChannel               chan Message
+	onuAlarmManagerLock        sync.RWMutex
+	processMessage             bool
+	activeAlarms               alarms
+}
+
+type onuDevice struct {
+	classID me.ClassID
+	alarmno uint8
+}
+type onuDeviceEvent struct {
+	EventName        string
+	EventCategory    eventif.EventCategory
+	EventSubCategory eventif.EventSubCategory
+	EventDescription string
+}
+
+func newAlarmManager(ctx context.Context, dh *deviceHandler) *onuAlarmManager {
+	var alarmManager onuAlarmManager
+	logger.Debugw(ctx, "init-alarmManager", log.Fields{"device-id": dh.deviceID})
+	alarmManager.pDeviceHandler = dh
+	alarmManager.eventProxy = dh.EventProxy // Or event proxy should be on cluster address ??
+	alarmManager.eventChannel = make(chan Message)
+	alarmManager.stopProcessingOmciMessages = make(chan bool)
+	alarmManager.processMessage = false
+	alarmManager.activeAlarms = make(map[alarmInfo]struct{})
+	return &alarmManager
+}
+
+// getDeviceEventData returns the event data for a device
+func (am *onuAlarmManager) getDeviceEventData(ctx context.Context, classID me.ClassID, alarmNo uint8) (onuDeviceEvent, error) {
+	onuEventsList := map[onuDevice]onuDeviceEvent{
+		{classID: circuitPackClassID, alarmno: 0}: {EventName: "ONU_EQUIPMENT",
+			EventCategory: voltha.EventCategory_EQUIPMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu equipment"},
+		{classID: circuitPackClassID, alarmno: 2}: {EventName: "ONU_SELF_TEST_FAIL",
+			EventCategory: voltha.EventCategory_EQUIPMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu self-test failure"},
+		{classID: circuitPackClassID, alarmno: 3}: {EventName: "ONU_LASER_EOL",
+			EventCategory: voltha.EventCategory_EQUIPMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu laser EOL"},
+		{classID: circuitPackClassID, alarmno: 4}: {EventName: "ONU_TEMP_YELLOW",
+			EventCategory: voltha.EventCategory_ENVIRONMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu temperature yellow"},
+		{classID: circuitPackClassID, alarmno: 5}: {EventName: "ONU_TEMP_RED",
+			EventCategory: voltha.EventCategory_ENVIRONMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu temperature red"},
+		{classID: physicalPathTerminationPointEthernetUniClassID, alarmno: 0}: {EventName: "ONU_Ethernet_UNI", EventCategory: voltha.EventCategory_EQUIPMENT,
+			EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "LAN Loss Of Signal"},
+		{classID: onuGClassID, alarmno: 0}: {EventName: "ONU_EQUIPMENT",
+			EventCategory: voltha.EventCategory_EQUIPMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu equipment"},
+		{classID: onuGClassID, alarmno: 6}: {EventName: "ONU_SELF_TEST_FAIL",
+			EventCategory: voltha.EventCategory_EQUIPMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu self-test failure"},
+		{classID: onuGClassID, alarmno: 7}: {EventName: "ONU_DYING_GASP",
+			EventCategory: voltha.EventCategory_EQUIPMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu DYING_GASP"},
+		{classID: onuGClassID, alarmno: 8}: {EventName: "ONU_TEMP_YELLOW",
+			EventCategory: voltha.EventCategory_ENVIRONMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu temperature yellow"},
+		{classID: onuGClassID, alarmno: 9}: {EventName: "ONU_TEMP_RED",
+			EventCategory: voltha.EventCategory_ENVIRONMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu temperature red"},
+		{classID: onuGClassID, alarmno: 10}: {EventName: "ONU_VOLTAGE_YELLOW",
+			EventCategory: voltha.EventCategory_ENVIRONMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu voltage yellow"},
+		{classID: onuGClassID, alarmno: 11}: {EventName: "ONU_VOLTAGE_RED",
+			EventCategory: voltha.EventCategory_ENVIRONMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu voltage red"},
+		{classID: aniGClassID, alarmno: 0}: {EventName: "ONU_LOW_RX_OPTICAL",
+			EventCategory: voltha.EventCategory_COMMUNICATION, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu low rx optical power"},
+		{classID: aniGClassID, alarmno: 1}: {EventName: "ONU_HIGH_RX_OPTICAL",
+			EventCategory: voltha.EventCategory_COMMUNICATION, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu high rx optical power"},
+		{classID: aniGClassID, alarmno: 4}: {EventName: "ONU_LOW_TX_OPTICAL",
+			EventCategory: voltha.EventCategory_COMMUNICATION, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu low tx optical power"},
+		{classID: aniGClassID, alarmno: 5}: {EventName: "ONU_HIGH_TX_OPTICAL",
+			EventCategory: voltha.EventCategory_COMMUNICATION, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu high tx optical power"},
+		{classID: aniGClassID, alarmno: 6}: {EventName: "ONU_LASER_BIAS_CURRENT",
+			EventCategory: voltha.EventCategory_EQUIPMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu laser bias current"},
+	}
+	if onuEventDetails, ok := onuEventsList[onuDevice{classID: classID, alarmno: alarmNo}]; ok {
+		return onuEventDetails, nil
+	}
+	return onuDeviceEvent{}, errors.New("onu Event Detail not found")
+
+}
+
+func (am *onuAlarmManager) startOMCIAlarmMessageProcessing(ctx context.Context) {
+	am.onuAlarmManagerLock.Lock()
+	am.processMessage = true
+	am.onuAlarmManagerLock.Unlock()
+	if stop := <-am.stopProcessingOmciMessages; stop {
+		am.onuAlarmManagerLock.Lock()
+		am.processMessage = false
+		am.onuAlarmManagerLock.Unlock()
+	}
+}
+
+func (am *onuAlarmManager) handleOmciAlarmNotificationMessage(ctx context.Context, msg OmciMessage) {
+	logger.Debugw(ctx, "OMCI Alarm Notification Msg", log.Fields{"device-id": am.pDeviceHandler.deviceID,
+		"msgType": msg.OmciMsg.MessageType})
+	am.onuAlarmManagerLock.Lock()
+	defer am.onuAlarmManagerLock.Unlock()
+
+	if am.processMessage {
+		msgLayer := (*msg.OmciPacket).Layer(omci.LayerTypeAlarmNotification)
+		if msgLayer == nil {
+			logger.Errorw(ctx, "Omci Msg layer could not be detected for Alarm Notification",
+				log.Fields{"device-id": am.pDeviceHandler.deviceID})
+			return
+		}
+		msgObj, msgOk := msgLayer.(*omci.AlarmNotificationMsg)
+		if !msgOk {
+			logger.Errorw(ctx, "Omci Msg layer could not be assigned for Alarm Notification",
+				log.Fields{"device-id": am.pDeviceHandler.deviceID})
+			return
+		}
+		//Alarm Notification decoding at omci lib validates that the me class ID supports the
+		// alarm notifications.
+		logger.Debugw(ctx, "Alarm Notification Data", log.Fields{"device-id": am.pDeviceHandler.deviceID, "data-fields": msgObj})
+		if err := am.processAlarmData(ctx, msgObj); err != nil {
+			logger.Errorw(ctx, "unable-to-process-alarm-notification", log.Fields{"device-id": am.pDeviceHandler.deviceID})
+		}
+
+	} else {
+		logger.Warnw(ctx, "ignoring-alarm-notification-received-for-me-as-channel-for-processing-is-closed",
+			log.Fields{"device-id": am.pDeviceHandler.deviceID})
+	}
+}
+
+func (am *onuAlarmManager) processAlarmData(ctx context.Context, msg *omci.AlarmNotificationMsg) error {
+	classID := msg.EntityClass
+	sequenceNo := msg.AlarmSequenceNumber
+	meInstance := msg.EntityInstance
+	alarmBitmap := msg.AlarmBitmap
+	logger.Debugw(ctx, "processing-alarm-data", log.Fields{"class-id": classID, "instance-id": meInstance,
+		"alarmBitMap": alarmBitmap, "sequence-no": sequenceNo})
+	/*
+		if sequenceNo > 0 {
+			// TODO Need Auditing if sequence no does not matches, after incrementing the last sequence no by 1
+		}
+	*/
+
+	entity, omciErr := me.LoadManagedEntityDefinition(classID,
+		me.ParamData{EntityID: meInstance})
+	if omciErr.StatusCode() != me.Success {
+		//log error and return
+		logger.Error(ctx, "unable-to-get-managed-entity", log.Fields{"class-id": classID, "instance-id": meInstance})
+		return fmt.Errorf("unable-to-get-managed-entity-class-%d-instance-%d", classID, meInstance)
+	}
+	meAlarmMap := entity.GetAlarmMap()
+	if meAlarmMap == nil {
+		logger.Error(ctx, "unable-to-get-managed-entity-alarm-map", log.Fields{"class-id": classID, "instance-id": meInstance})
+		return fmt.Errorf("unable-to-get-managed-entity-alarm-map-%d-instance-%d", classID, meInstance)
+	}
+	// Loop over the supported alarm list for this me
+	for alarmNo := range meAlarmMap {
+		// Check if alarmNo was previously active in the alarms, if yes clear it and remove it from active alarms
+		_, exists := am.activeAlarms[alarmInfo{
+			classID:    classID,
+			instanceID: meInstance,
+			alarmNo:    alarmNo,
+		}]
+		if exists {
+			// Clear this alarm if It is cleared now, in that case IsAlarmClear would return true
+			cleared, err := msg.IsAlarmClear(alarmNo)
+			if err != nil {
+				logger.Warnw(ctx, "unable-to-find-out-alarm-is-cleared", log.Fields{"class-id": classID,
+					"instance-id": meInstance, "alarm-no": alarmNo})
+				return err
+			}
+			if cleared {
+				// Clear this alarm.
+				am.clearAlarm(ctx, classID, meInstance, alarmNo)
+			}
+		} else {
+			// If alarm entry was not present in the list of active alarms, we need to see if this alarm is now active
+			// or not, if yes then raise it.
+			raised, err := msg.IsAlarmActive(alarmNo)
+			if err != nil {
+				logger.Warnw(ctx, "unable-to-find-out-alarm-is-raised", log.Fields{"class-id": classID,
+					"instance-id": meInstance, "alarm-no": alarmNo})
+				return err
+			}
+			if raised {
+				am.raiseAlarm(ctx, classID, meInstance, alarmNo)
+			}
+		}
+	}
+	return nil
+}
+
+func (am *onuAlarmManager) raiseAlarm(ctx context.Context, classID me.ClassID, instanceID uint16, alarm uint8) {
+	am.activeAlarms[alarmInfo{
+		classID:    classID,
+		instanceID: instanceID,
+		alarmNo:    alarm,
+	}] = struct{}{}
+	go am.sendAlarm(ctx, classID, instanceID, alarm, true)
+}
+
+func (am *onuAlarmManager) clearAlarm(ctx context.Context, classID me.ClassID, instanceID uint16, alarm uint8) {
+	go am.sendAlarm(ctx, classID, instanceID, alarm, false)
+	delete(am.activeAlarms, alarmInfo{
+		classID:    classID,
+		instanceID: instanceID,
+		alarmNo:    alarm,
+	})
+}
+
+func (am *onuAlarmManager) getIntfIDAlarm(ctx context.Context, classID me.ClassID, instanceID uint16) *uint32 {
+	var intfID *uint32
+	if classID == circuitPackClassID || classID == physicalPathTerminationPointEthernetUniClassID {
+		for _, uniPort := range am.pDeviceHandler.uniEntityMap {
+			if uniPort.entityID == instanceID {
+				intfID = &uniPort.portNo
+				return intfID
+			}
+		}
+	} else if classID == aniGClassID || classID == onuGClassID {
+		intfID = &am.pDeviceHandler.ponPortNumber
+		return intfID
+	} else {
+		logger.Warnw(ctx, "me-not-supported", log.Fields{"class-id": classID, "instance-id": instanceID})
+	}
+	return nil
+}
+
+func (am *onuAlarmManager) sendAlarm(ctx context.Context, classID me.ClassID, instanceID uint16, alarm uint8, raised bool) {
+	context := make(map[string]string)
+	intfID := am.getIntfIDAlarm(ctx, classID, instanceID)
+	onuID := am.pDeviceHandler.deviceID
+	serialNo := am.pDeviceHandler.pOnuOmciDevice.serialNumber
+	if intfID == nil {
+		logger.Warn(ctx, "intf-id-for-alarm-not-found", log.Fields{"alarm-no": alarm, "class-id": classID})
+		return
+	}
+	context["onu-intf-id"] = fmt.Sprintf("%d", *intfID)
+	context["onu-id"] = onuID
+	context["onu-serial-number"] = serialNo
+
+	raisedTimestamp := time.Now().UnixNano()
+	eventDetails, err := am.getDeviceEventData(ctx, classID, alarm)
+	if err != nil {
+		logger.Warn(ctx, "event-details-for-alarm-not-found", log.Fields{"alarm-no": alarm, "class-id": classID})
+		return
+	}
+	suffixDesc := "Raised"
+	if !raised {
+		suffixDesc = "Cleared"
+	}
+	deviceEvent := &voltha.DeviceEvent{
+		ResourceId:      onuID,
+		DeviceEventName: fmt.Sprintf("%s_RAISE_EVENT", eventDetails.EventName),
+		Description: fmt.Sprintf("%s Event - %s - %s", eventDetails.EventDescription, eventDetails.EventName,
+			suffixDesc),
+		Context: context,
+	}
+	_ = am.eventProxy.SendDeviceEvent(ctx, deviceEvent, eventDetails.EventCategory, eventDetails.EventSubCategory,
+		raisedTimestamp)
+}
diff --git a/internal/pkg/onuadaptercore/device_handler.go b/internal/pkg/onuadaptercore/device_handler.go
index 379afa8..5db246b 100644
--- a/internal/pkg/onuadaptercore/device_handler.go
+++ b/internal/pkg/onuadaptercore/device_handler.go
@@ -177,6 +177,7 @@
 	pOnuOmciDevice  *OnuDeviceEntry
 	pOnuTP          *onuUniTechProf
 	pOnuMetricsMgr  *onuMetricsManager
+	pAlarmMgr       *onuAlarmManager
 	exitChannel     chan int
 	lockDevice      sync.RWMutex
 	pOnuIndication  *oop.OnuIndication
@@ -194,6 +195,7 @@
 	collectorIsRunning         bool
 	mutexCollectorFlag         sync.RWMutex
 	stopCollector              chan bool
+	stopAlarmManager           chan bool
 	stopHeartbeatCheck         chan bool
 	uniEntityMap               map[uint32]*onuUniPort
 	lockVlanConfig             sync.Mutex
@@ -219,6 +221,7 @@
 	dh.deviceEntrySet = make(chan bool, 1)
 	dh.collectorIsRunning = false
 	dh.stopCollector = make(chan bool, 2)
+	dh.stopAlarmManager = make(chan bool, 2)
 	dh.stopHeartbeatCheck = make(chan bool, 2)
 	//dh.metrics = pmmetrics.NewPmMetrics(cloned.Id, pmmetrics.Frequency(150), pmmetrics.FrequencyOverride(false), pmmetrics.Grouped(false), pmmetrics.Metrics(pmNames))
 	//TODO initialize the support classes.
@@ -1236,12 +1239,13 @@
 
 //setOnuDeviceEntry sets the ONU device entry within the handler
 func (dh *deviceHandler) setOnuDeviceEntry(
-	apDeviceEntry *OnuDeviceEntry, apOnuTp *onuUniTechProf, apOnuMetricsMgr *onuMetricsManager) {
+	apDeviceEntry *OnuDeviceEntry, apOnuTp *onuUniTechProf, apOnuMetricsMgr *onuMetricsManager, apOnuAlarmMgr *onuAlarmManager) {
 	dh.lockDevice.Lock()
 	defer dh.lockDevice.Unlock()
 	dh.pOnuOmciDevice = apDeviceEntry
 	dh.pOnuTP = apOnuTp
 	dh.pOnuMetricsMgr = apOnuMetricsMgr
+	dh.pAlarmMgr = apOnuAlarmMgr
 }
 
 //addOnuDeviceEntry creates a new ONU device or returns the existing
@@ -1257,8 +1261,9 @@
 		deviceEntry = newOnuDeviceEntry(ctx, dh)
 		onuTechProfProc := newOnuUniTechProf(ctx, dh)
 		onuMetricsMgr := newonuMetricsManager(ctx, dh)
+		onuAlarmManager := newAlarmManager(ctx, dh)
 		//error treatment possible //TODO!!!
-		dh.setOnuDeviceEntry(deviceEntry, onuTechProfProc, onuMetricsMgr)
+		dh.setOnuDeviceEntry(deviceEntry, onuTechProfProc, onuMetricsMgr, onuAlarmManager)
 		// fire deviceEntry ready event to spread to possibly waiting processing
 		dh.deviceEntrySet <- true
 		logger.Debugw(ctx, "onuDeviceEntry-added", log.Fields{"device-id": dh.deviceID})
@@ -1454,6 +1459,8 @@
 		// Start PM collector routine
 		go dh.startCollector(ctx)
 	}
+	go dh.startAlarmManager(ctx)
+
 	return nil
 }
 
@@ -1578,6 +1585,7 @@
 		// Stop collector routine
 		dh.stopCollector <- true
 	}
+	dh.stopAlarmManager <- true
 	return nil
 }
 
@@ -2859,3 +2867,14 @@
 	dh.mutexCollectorFlag.RUnlock()
 	return flagValue
 }
+
+func (dh *deviceHandler) startAlarmManager(ctx context.Context) {
+	logger.Debugf(ctx, "startingAlarmManager")
+
+	// Start routine to process OMCI GET Responses
+	go dh.pAlarmMgr.startOMCIAlarmMessageProcessing(ctx)
+	if stop := <-dh.stopAlarmManager; stop {
+		logger.Debugw(ctx, "stopping-collector-for-onu", log.Fields{"device-id": dh.device.Id})
+		dh.pAlarmMgr.stopProcessingOmciMessages <- true // Stop the OMCI routines if any
+	}
+}
diff --git a/internal/pkg/onuadaptercore/omci_cc.go b/internal/pkg/onuadaptercore/omci_cc.go
index 73b4901..dbdaa93 100644
--- a/internal/pkg/onuadaptercore/omci_cc.go
+++ b/internal/pkg/onuadaptercore/omci_cc.go
@@ -22,7 +22,6 @@
 	"context"
 	"encoding/binary"
 	"encoding/hex"
-	"errors"
 	"fmt"
 	"strconv"
 	"sync"
@@ -200,9 +199,20 @@
 }
 
 // Rx handler for omci messages
-func (oo *omciCC) receiveOnuMessage(ctx context.Context, omciMsg *omci.OMCI) error {
+func (oo *omciCC) receiveOnuMessage(ctx context.Context, omciMsg *omci.OMCI, packet *gp.Packet) error {
 	logger.Debugw(ctx, "rx-onu-autonomous-message", log.Fields{"omciMsgType": omciMsg.MessageType,
 		"payload": hex.EncodeToString(omciMsg.Payload)})
+	switch omciMsg.MessageType {
+	case omci.AlarmNotificationType:
+		data := OmciMessage{
+			OmciMsg:    omciMsg,
+			OmciPacket: packet,
+		}
+		go oo.pBaseDeviceHandler.pAlarmMgr.handleOmciAlarmNotificationMessage(ctx, data)
+		return nil
+	default:
+		return fmt.Errorf("receiveOnuMessageType %s unimplemented", omciMsg.MessageType.String())
+	}
 	/*
 			msgType = rxFrame.fields["message_type"] //assumed OmciOperationsValue
 			rxOnuFrames++
@@ -246,7 +256,6 @@
 				}
 		    }
 	*/
-	return errors.New("receiveOnuMessage unimplemented")
 }
 
 // Rx handler for onu messages
@@ -308,7 +317,7 @@
 		// Not a response
 		logger.Debug(ctx, "RxMsg is no Omci Response Message")
 		if omciMsg.TransactionID == 0 {
-			return oo.receiveOnuMessage(ctx, omciMsg)
+			return oo.receiveOnuMessage(ctx, omciMsg, &packet)
 		}
 		logger.Errorw(ctx, "Unexpected TransCorrId != 0  not accepted for autonomous messages",
 			log.Fields{"msgType": omciMsg.MessageType, "payload": hex.EncodeToString(omciMsg.Payload),
diff --git a/internal/pkg/onuadaptercore/onu_device_entry.go b/internal/pkg/onuadaptercore/onu_device_entry.go
index a9b34cd..81899a1 100644
--- a/internal/pkg/onuadaptercore/onu_device_entry.go
+++ b/internal/pkg/onuadaptercore/onu_device_entry.go
@@ -460,6 +460,7 @@
 	}
 
 	// Alarm Synchronization Database
+
 	//self._alarm_db = None
 	//self._alarm_database_cls = support_classes['alarm-synchronizer']['database']
 	return &onuDeviceEntry
diff --git a/vendor/github.com/opencord/omci-lib-go/VERSION b/vendor/github.com/opencord/omci-lib-go/VERSION
index dffa40e..ebf55b3 100644
--- a/vendor/github.com/opencord/omci-lib-go/VERSION
+++ b/vendor/github.com/opencord/omci-lib-go/VERSION
@@ -1 +1 @@
-0.13.4
+0.13.6
diff --git a/vendor/github.com/opencord/omci-lib-go/generated/aal5performancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/aal5performancemonitoringhistorydata.go
index c35225a..fe110a2 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/aal5performancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/ani-g.go b/vendor/github.com/opencord/omci-lib-go/generated/ani-g.go
index 3cee643..022fcbf 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/ani-g.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/callcontrolperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/callcontrolperformancemonitoringhistorydata.go
index bb625a8..eb015ed 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/callcontrolperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/cardholder.go b/vendor/github.com/opencord/omci-lib-go/generated/cardholder.go
index 077271e..0bd413f 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/cardholder.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/circuitpack.go b/vendor/github.com/opencord/omci-lib-go/generated/circuitpack.go
index dcf7528..e40e29a 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/circuitpack.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/classsupport.go b/vendor/github.com/opencord/omci-lib-go/generated/classsupport.go
index 9cc9dc6..df47014 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/classsupport.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/dot1agmep.go b/vendor/github.com/opencord/omci-lib-go/generated/dot1agmep.go
index b3c6df4..8d6db66 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/dot1agmep.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/dot1xperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/dot1xperformancemonitoringhistorydata.go
index 4127089..fa9ebfd 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/dot1xperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/dot1xportextensionpackage.go b/vendor/github.com/opencord/omci-lib-go/generated/dot1xportextensionpackage.go
index 018d136..428d9de 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/dot1xportextensionpackage.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/efmbondinggroup.go b/vendor/github.com/opencord/omci-lib-go/generated/efmbondinggroup.go
index 362c3ad..93df527 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/efmbondinggroup.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/efmbondinggroupperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/efmbondinggroupperformancemonitoringhistorydata.go
index e924d55..902298a 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/efmbondinggroupperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/efmbondinglink.go b/vendor/github.com/opencord/omci-lib-go/generated/efmbondinglink.go
index 1570d53..34db557 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/efmbondinglink.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/enhancedfecperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/enhancedfecperformancemonitoringhistorydata.go
index 150a9aa..40221e7 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/enhancedfecperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/enhancedtcperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/enhancedtcperformancemonitoringhistorydata.go
index e3c3fc2..0ea33d0 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/enhancedtcperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/equipmentextensionpackage.go b/vendor/github.com/opencord/omci-lib-go/generated/equipmentextensionpackage.go
index df671a8..1deabe7 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/equipmentextensionpackage.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/ethernetframeextendedpm.go b/vendor/github.com/opencord/omci-lib-go/generated/ethernetframeextendedpm.go
index 9f2c543..a4cfd62 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/ethernetframeextendedpm.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/ethernetframeextendedpm64-bit.go b/vendor/github.com/opencord/omci-lib-go/generated/ethernetframeextendedpm64-bit.go
index 9023d3b..625818a 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/ethernetframeextendedpm64-bit.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/ethernetframeperformancemonitoringhistorydatadownstream.go b/vendor/github.com/opencord/omci-lib-go/generated/ethernetframeperformancemonitoringhistorydatadownstream.go
index 745bbe8..a535988 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/ethernetframeperformancemonitoringhistorydatadownstream.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/ethernetframeperformancemonitoringhistorydataupstream.go b/vendor/github.com/opencord/omci-lib-go/generated/ethernetframeperformancemonitoringhistorydataupstream.go
index f104580..28df9cb 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/ethernetframeperformancemonitoringhistorydataupstream.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/ethernetperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/ethernetperformancemonitoringhistorydata.go
index 9cdd51c..e0725b0 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/ethernetperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/ethernetperformancemonitoringhistorydata2.go b/vendor/github.com/opencord/omci-lib-go/generated/ethernetperformancemonitoringhistorydata2.go
index 7503895..fd07bb6 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/ethernetperformancemonitoringhistorydata2.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/ethernetperformancemonitoringhistorydata3.go b/vendor/github.com/opencord/omci-lib-go/generated/ethernetperformancemonitoringhistorydata3.go
index 10da39b..1207ebc 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/ethernetperformancemonitoringhistorydata3.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/galethernetperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/galethernetperformancemonitoringhistorydata.go
index 30b630f..722d200 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/galethernetperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/geminterworkingterminationpoint.go b/vendor/github.com/opencord/omci-lib-go/generated/geminterworkingterminationpoint.go
index 6c70980..6b84a21 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/geminterworkingterminationpoint.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/gemportnetworkctp.go b/vendor/github.com/opencord/omci-lib-go/generated/gemportnetworkctp.go
index 2e7ce2b..be1c163 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/gemportnetworkctp.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/gemportnetworkctpperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/gemportnetworkctpperformancemonitoringhistorydata.go
index eb01e50..45b7c57 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/gemportnetworkctpperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/interworkingvccterminationpoint.go b/vendor/github.com/opencord/omci-lib-go/generated/interworkingvccterminationpoint.go
index 03af395..9bffbde 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/interworkingvccterminationpoint.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/iphostperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/iphostperformancemonitoringhistorydata.go
index 318346a..23fe8a3 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/iphostperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/macbridgeconfigurationdata.go b/vendor/github.com/opencord/omci-lib-go/generated/macbridgeconfigurationdata.go
index 5b6a1c6..8718214 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/macbridgeconfigurationdata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/macbridgeperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/macbridgeperformancemonitoringhistorydata.go
index 30acf13..668fcca 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/macbridgeperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/macbridgeportconfigurationdata.go b/vendor/github.com/opencord/omci-lib-go/generated/macbridgeportconfigurationdata.go
index d731e08..092986f 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/macbridgeportconfigurationdata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/macbridgeportperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/macbridgeportperformancemonitoringhistorydata.go
index a6427dc..a6bcf4b 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/macbridgeportperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/me.go b/vendor/github.com/opencord/omci-lib-go/generated/me.go
index caa32bc..8bec058 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/me.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/medef.go b/vendor/github.com/opencord/omci-lib-go/generated/medef.go
index 7cb85d2..767e27b 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/medef.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/mgcconfigdata.go b/vendor/github.com/opencord/omci-lib-go/generated/mgcconfigdata.go
index 135b71b..ddd39fb 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/mgcconfigdata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/mgcperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/mgcperformancemonitoringhistorydata.go
index 68805de..c9b6dc6 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/mgcperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/mocaethernetperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/mocaethernetperformancemonitoringhistorydata.go
index 07dfbe9..b66845c 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/mocaethernetperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/multicastgeminterworkingterminationpoint.go b/vendor/github.com/opencord/omci-lib-go/generated/multicastgeminterworkingterminationpoint.go
index 80c7bcb..bde9b12 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/multicastgeminterworkingterminationpoint.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/omcidefs.go b/vendor/github.com/opencord/omci-lib-go/generated/omcidefs.go
index 4b7367b..8924e7d 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/omcidefs.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointcesuni.go b/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointcesuni.go
index 68f4887..cc66a16 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointcesuni.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointethernetuni.go b/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointethernetuni.go
index ae562a0..063e742 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointethernetuni.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointmocauni.go b/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointmocauni.go
index a8cc094..59652da 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointmocauni.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointreuni.go b/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointreuni.go
index f6bc1f1..462fad6 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointreuni.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointvideoani.go b/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointvideoani.go
index 0a3d356..39d03e6 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointvideoani.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointvideouni.go b/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointvideouni.go
index ebbf415..fbd31d0 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointvideouni.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointxdslunipart1.go b/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointxdslunipart1.go
index fd720a3..fa883bc 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/physicalpathterminationpointxdslunipart1.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/priorityqueue.go b/vendor/github.com/opencord/omci-lib-go/generated/priorityqueue.go
index 0226bf6..4022649 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/priorityqueue.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/pseudowireperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/pseudowireperformancemonitoringhistorydata.go
index 5799375..fc44a16 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/pseudowireperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/pwatmperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/pwatmperformancemonitoringhistorydata.go
index c68a56c..44442e0 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/pwatmperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/radiusperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/radiusperformancemonitoringhistorydata.go
index 08953b6..778ea9f 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/radiusperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/reani-g.go b/vendor/github.com/opencord/omci-lib-go/generated/reani-g.go
index 5142e5c..6b696d6 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/reani-g.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/recommonamplifierparameters.go b/vendor/github.com/opencord/omci-lib-go/generated/recommonamplifierparameters.go
index 637a758..bc83606 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/recommonamplifierparameters.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/redownstreamamplifier.go b/vendor/github.com/opencord/omci-lib-go/generated/redownstreamamplifier.go
index 59d758b..f5176d9 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/redownstreamamplifier.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/reupstreamamplifier.go b/vendor/github.com/opencord/omci-lib-go/generated/reupstreamamplifier.go
index 0f81c6a..df21ac2 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/reupstreamamplifier.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/rtpperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/rtpperformancemonitoringhistorydata.go
index 9fb4891..4576186 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/rtpperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/sipagentconfigdata.go b/vendor/github.com/opencord/omci-lib-go/generated/sipagentconfigdata.go
index f6dedcb..ca86d96 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/sipagentconfigdata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/sipagentperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/sipagentperformancemonitoringhistorydata.go
index 0759e1c..30b8e75 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/sipagentperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/sipcallinitiationperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/sipcallinitiationperformancemonitoringhistorydata.go
index f1d3990..ed9534f 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/sipcallinitiationperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/sipuserdata.go b/vendor/github.com/opencord/omci-lib-go/generated/sipuserdata.go
index d8ee85f..fe7bbab 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/sipuserdata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/tcadaptorperformancemonitoringhistorydataxdsl.go b/vendor/github.com/opencord/omci-lib-go/generated/tcadaptorperformancemonitoringhistorydataxdsl.go
index fc4e55a..2ee8a6b 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/tcadaptorperformancemonitoringhistorydataxdsl.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/tcpudpperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/tcpudpperformancemonitoringhistorydata.go
index ec7567f..eb1833f 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/tcpudpperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/twdmchannelphylodsperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/twdmchannelphylodsperformancemonitoringhistorydata.go
index c8d3a2a..db46818 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/twdmchannelphylodsperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/twdmchannelploamperformancemonitoringhistorydatapart1.go b/vendor/github.com/opencord/omci-lib-go/generated/twdmchannelploamperformancemonitoringhistorydatapart1.go
index ca8616f..2633fc5 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/twdmchannelploamperformancemonitoringhistorydatapart1.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/twdmchannelploamperformancemonitoringhistorydatapart2.go b/vendor/github.com/opencord/omci-lib-go/generated/twdmchannelploamperformancemonitoringhistorydatapart2.go
index 439178f..4dfaa75 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/twdmchannelploamperformancemonitoringhistorydatapart2.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/twdmchannelploamperformancemonitoringhistorydatapart3.go b/vendor/github.com/opencord/omci-lib-go/generated/twdmchannelploamperformancemonitoringhistorydatapart3.go
index b1ef66b..739dc56 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/twdmchannelploamperformancemonitoringhistorydatapart3.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/twdmchanneltuningperformancemonitoringhistorydatapart2.go b/vendor/github.com/opencord/omci-lib-go/generated/twdmchanneltuningperformancemonitoringhistorydatapart2.go
index 07eb432..9e7d0e3 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/twdmchanneltuningperformancemonitoringhistorydatapart2.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/twdmchanneltuningperformancemonitoringhistorydatapart3.go b/vendor/github.com/opencord/omci-lib-go/generated/twdmchanneltuningperformancemonitoringhistorydatapart3.go
index daa8201..ce12a7b 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/twdmchanneltuningperformancemonitoringhistorydatapart3.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/version.go b/vendor/github.com/opencord/omci-lib-go/generated/version.go
index 672c71b..f4946e0 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/version.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/virtualethernetinterfacepoint.go b/vendor/github.com/opencord/omci-lib-go/generated/virtualethernetinterfacepoint.go
index dd8c881..4312a19 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/virtualethernetinterfacepoint.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/voipconfigdata.go b/vendor/github.com/opencord/omci-lib-go/generated/voipconfigdata.go
index d54be1c..9da4493 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/voipconfigdata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/vpnetworkctp.go b/vendor/github.com/opencord/omci-lib-go/generated/vpnetworkctp.go
index 922c43e..af565dd 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/vpnetworkctp.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/vpperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/vpperformancemonitoringhistorydata.go
index 4039e8e..4f98c8c 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/vpperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-cchannelperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-cchannelperformancemonitoringhistorydata.go
index 8cd69ae..2e1b0e5 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-cchannelperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-cperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-cperformancemonitoringhistorydata.go
index fb1dee8..287df45 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-cperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-cperformancemonitoringhistorydatapart2.go b/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-cperformancemonitoringhistorydatapart2.go
index df422ef..eaa7e22 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-cperformancemonitoringhistorydatapart2.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-rchannelperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-rchannelperformancemonitoringhistorydata.go
index a6cbe43..b1343c6 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-rchannelperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-rperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-rperformancemonitoringhistorydata.go
index 1482405..56f8ca5 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/xdslxtu-rperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/xg-pondownstreammanagementperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/xg-pondownstreammanagementperformancemonitoringhistorydata.go
index 43dbb8d..2371b91 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/xg-pondownstreammanagementperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/generated/xg-pontcperformancemonitoringhistorydata.go b/vendor/github.com/opencord/omci-lib-go/generated/xg-pontcperformancemonitoringhistorydata.go
index 35a899f..e9cf5b0 100644
--- a/vendor/github.com/opencord/omci-lib-go/generated/xg-pontcperformancemonitoringhistorydata.go
+++ b/vendor/github.com/opencord/omci-lib-go/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/vendor/github.com/opencord/omci-lib-go/messagetypes.go b/vendor/github.com/opencord/omci-lib-go/messagetypes.go
index 553b7f3..8cca403 100644
--- a/vendor/github.com/opencord/omci-lib-go/messagetypes.go
+++ b/vendor/github.com/opencord/omci-lib-go/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.
@@ -725,7 +725,12 @@
 	//                   octets for data if the status code == 0.  So accommodate
 	//                   this behaviour in favor of greater interoperability.
 	lastOctet := 36
-	if omci.Result == me.AttributeFailure {
+
+	switch omci.Result {
+	case me.ProcessingError, me.NotSupported, me.UnknownEntity, me.UnknownInstance, me.DeviceBusy:
+		return nil // Done (do not try and decode attributes)
+
+	case me.AttributeFailure:
 		lastOctet = 32
 	}
 	omci.Attributes, err = meDefinition.DecodeAttributes(omci.AttributeMask, data[7:lastOctet], p, byte(GetResponseType))
@@ -1585,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
@@ -1595,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
@@ -1605,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
@@ -1616,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)
@@ -1629,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 {
@@ -3368,6 +3430,10 @@
 	}
 	omci.AttributeMask = binary.BigEndian.Uint16(data[4:6])
 
+	switch omci.Result {
+	case me.ProcessingError, me.NotSupported, me.UnknownEntity, me.UnknownInstance, me.DeviceBusy:
+		return nil // Done (do not try and decode attributes)
+	}
 	// Attribute decode
 	omci.Attributes, err = meDefinition.DecodeAttributes(omci.AttributeMask, data[6:], p, byte(GetCurrentDataResponseType))
 	if err != nil {
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 3884156..a3e4461 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -71,7 +71,7 @@
 github.com/mitchellh/go-homedir
 # github.com/mitchellh/mapstructure v1.1.2
 github.com/mitchellh/mapstructure
-# github.com/opencord/omci-lib-go v0.13.4
+# github.com/opencord/omci-lib-go v0.13.6
 github.com/opencord/omci-lib-go
 github.com/opencord/omci-lib-go/generated
 # github.com/opencord/voltha-lib-go/v4 v4.0.6