fix for profiles in voltha1.7

Change-Id: Id6d7c38ae38460e879d99f63f8db07321e07cf21
diff --git a/omci_pm_history_data.go b/omci_pm_history_data.go
new file mode 100644
index 0000000..15188fa
--- /dev/null
+++ b/omci_pm_history_data.go
@@ -0,0 +1,191 @@
+package core
+
+type PerformanceMonitoringHistoryData int
+
+const (
+	_                                                                = iota
+	IntervalEndTime                 PerformanceMonitoringHistoryData = 0x8000
+	ThresholdDataId                 PerformanceMonitoringHistoryData = 0x4000
+	FCSErrors                       PerformanceMonitoringHistoryData = 0x2000
+	ExcessiveCollisionCounter       PerformanceMonitoringHistoryData = 0x1000
+	LateCollisionCounter            PerformanceMonitoringHistoryData = 0x0800
+	FrameTooLong                    PerformanceMonitoringHistoryData = 0x0400
+	BufferOverflowOnReceive         PerformanceMonitoringHistoryData = 0x0200
+	BufferOverflowOnTransmit        PerformanceMonitoringHistoryData = 0x0100
+	SingleCollisionFrameCounter     PerformanceMonitoringHistoryData = 0x0080
+	MultipleCollisionFrameCounter   PerformanceMonitoringHistoryData = 0x0040
+	SQECounter                      PerformanceMonitoringHistoryData = 0x0020
+	DeferredTransmissionCounter     PerformanceMonitoringHistoryData = 0x0010
+	InternalMACTransmitErrorCounter PerformanceMonitoringHistoryData = 0x0008
+	CarrierSenseErrorCounter        PerformanceMonitoringHistoryData = 0x0004
+	AllignmentErrorCounter          PerformanceMonitoringHistoryData = 0x0002
+	InternalMACReceiveErrorCounter  PerformanceMonitoringHistoryData = 0x0001
+)
+
+type PMHistoryAttributeHandler func(*uint, []byte) ([]byte, error)
+
+var PMHistoryAttributeHandlers = map[PerformanceMonitoringHistoryData]ANIGAttributeHandler{
+	IntervalEndTime :                GetIntervalEndTime,
+	ThresholdDataId:                 GetThresholdDataId,
+	FCSErrors:                       GetFCSErrors,
+	ExcessiveCollisionCounter:       GetExcessiveCollisionCounter,
+	LateCollisionCounter:            GetLateCollisionCounter,
+	FrameTooLong:                    GetFrameTooLong,
+	BufferOverflowOnReceive:         GetBufferOverflowOnReceive,
+	BufferOverflowOnTransmit:        GetBufferOverflowOnTransmit,
+	SingleCollisionFrameCounter:     GetSingleCollisionFrameCounter,
+	MultipleCollisionFrameCounter:   GetMultipleCollisionFrameCounter,
+	SQECounter:                      GetSQECounter,
+	DeferredTransmissionCounter:     GetDeferredTransmissionCounter,
+	InternalMACTransmitErrorCounter: GetInternalMACTransmitErrorCounter,
+	CarrierSenseErrorCounter:        GetCarrierSenseErrorCounter,
+	AllignmentErrorCounter:          GetAllignmentErrorCounter,
+	InternalMACReceiveErrorCounter:  GetInternalMACReceiveErrorCounter,
+}
+
+func GetEthernetPMHistoryDataAttributes(pos *uint, pkt []byte, content OmciContent) ([]byte, error) {
+	AttributesMask := getAttributeMask(content)
+
+	for index := uint(16); index>=1 ; index-- {
+		Attribute := 1 << (index - 1)
+		reqAttribute := Attribute & AttributesMask
+
+		if reqAttribute != 0 {
+			pkt, _ = PMHistoryAttributeHandlers[PerformanceMonitoringHistoryData(reqAttribute)](pos, pkt)
+		}
+	}
+
+	pkt[8] = 0x00 // Command Processed Successfully
+	pkt[9] = uint8(AttributesMask >> 8)
+	pkt[10] = uint8(AttributesMask & 0x00FF)
+
+	return pkt, nil
+
+}
+
+func GetIntervalEndTime(pos *uint, pkt []byte) ([]byte, error) {
+	// With the hardware, it is seen that all attributes are 0x00
+	// Nevertheless these functions are made to provide specific values in future if required
+	*pos++
+	return pkt, nil
+}
+
+func GetThresholdDataId(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetFCSErrors(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetExcessiveCollisionCounter(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetLateCollisionCounter(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetFrameTooLong(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetBufferOverflowOnReceive(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetBufferOverflowOnTransmit(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetSingleCollisionFrameCounter(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetMultipleCollisionFrameCounter(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetSQECounter(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetDeferredTransmissionCounter(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetInternalMACTransmitErrorCounter(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetCarrierSenseErrorCounter(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetAllignmentErrorCounter(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+func GetInternalMACReceiveErrorCounter(pos *uint, pkt []byte) ([]byte, error) {
+	*pos++
+	*pos++
+	*pos++
+	*pos++
+	return pkt, nil
+}
+
+