#########################################
#Legacy KPI formuluas WRBS
#########################################
SctpPacketLossRatio = 100 * pmSctpStatRetransChunks / (pmSctpStatSentChunks + pmSctpStatRetransChunks) 
EsmPortIn = (((pmIfInOctetsHi * 2147483648) + pmIfInOctetsLo) * 8) / (900 * 1000000)
EsmPortOut = (((pmIfOutOctetsHi * 2147483648) + pmIfOutOctetsLo) * 8) / (900 * 10000000)
EsmPortTot = EsmPortIn + EsmPortOut
GigaPortIn =  ((pmIfInOctetsLink1Hi * 2147483648 + pmIfInOctetsLink1Lo + pmIfInOctetsLink2Hi * 2147483648 + pmIfInOctetsLink2Lo ) / (900 * 1000000))* 8
GigaPortOut = ((pmIfOutOctetsLink1Hi * 2147483648 + pmIfOutOctetsLink1Lo + pmIfOutOctetsLink2Hi * 2147483648 + pmIfOutOctetsLink2Lo ) / (900 * 1000000))* 8
GigaPortTot = GigaPortIn + GigaPortOut 

#Note: pmRopCounter can only be used on reports that are aggregated on ManagedElement 
#From 44/1553-HSC 105 50/1 :
IpLayerMbpsOut = 8 * pmIpIfStatsHCOutOctets / (1000000 * 900)
IpLayerMbpsIn = 8 * pmIpIfStatsHCInOctets / (1000000 * 900)
EthLayerMbpsOut = (8 * pmIpIfStatsHCOutOctets + 336 * pmIpIfStatsHCOutTransmits) / (1000000 * 900)
EthLayerMbpsIn = (8 * pmIpIfStatsHCInOctets + 336 * pmIpIfStatsHCInReceives) / (1000000 * 900)

AtmIn = pmReceivedAtmCells * 53 * 8 / (900 * 1000000)
AtmOut = pmTransmittedAtmCells * 53 * 8 / (900 * 1000000)
AtmTot = (pmTransmittedAtmCells + pmReceivedAtmCells) * 53 * 8 / (900 * 1000000) 

#########################################
#Legacy KPI formulas ENB 
#########################################
Ip_GigaPortIn =  8 * ((pmIfInOctetsLink1Hi* 2147483648 + pmIfInOctetsLink1Lo + pmIfInOctetsLink2Hi * 2147483648 + pmIfInOctetsLink2Lo ) / (pmRopCounter * 900 * 1000000 ))
Ip_GigaPortOut = 8 * ((pmIfOutOctetsLink1Hi* 2147483648 + pmIfOutOctetsLink1Lo + pmIfOutOctetsLink2Hi * 2147483648 + pmIfOutOctetsLink2Lo ) / (pmRopCounter * 900 * 1000000 ))
Ip_GigaPortTot = Ip_GigaPortIn + Ip_GigaPortOut 
Ip_SctpPacketLossRatio = 100 * pmSctpStatRetransChunks / (pmSctpStatSentChunks + pmSctpStatRetransChunks) 

#Note: pmRopCounter can only be used on reports that are aggregated on ManagedElement 
#From 44/1553-HSC 105 50/1 :
Ip_IpLayerMbpsOut = 8 * pmIpIfStatsHCOutOctets / (1000000 * 900)
Ip_IpLayerMbpsIn = 8 * pmIpIfStatsHCInOctets / (1000000 * 900)
Ip_EthLayerMbpsOut = (8 * pmIpIfStatsHCOutOctets + 336 * pmIpIfStatsHCOutTransmits) / (1000000 * 900)
Ip_EthLayerMbpsIn = (8 * pmIpIfStatsHCInOctets + 336 * pmIpIfStatsHCInReceives) / (1000000 * 900)


#########################################
#KPI formulas from FORMULA_ENB_TN.txt
#########################################

# ERBS Ethernet Interface Integrity (mogroup is gigabitethernet=1)
EthIfInPktDiscards_pkts					= pmIfInErrorsLink1 + pmIfInUnknownProtosLink1 + pmIfInDiscardsLink1 + pmDot1qTpVlanPortInDiscardsLink1
EthIfInPktDiscardRatio_pct				= 100 * (pmIfInErrorsLink1 + pmIfInUnknownProtosLink1 + pmIfInDiscardsLink1 + pmDot1qTpVlanPortInDiscardsLink1) / (pmIfInErrorsLink1 + pmIfInUnknownProtosLink1 + pmIfInDiscardsLink1 + pmDot1qTpVlanPortInDiscardsLink1 + pmIfInBroadcastPktsLink1 + pmIfInMulticastPktsLink1 + (pmIfInUcastPktsLink1 * 1000))
EthIfInUsage_EthMbps					= (((pmIfInOctetsLink1Hi * 2147483648) + pmIfInOctetsLink1Lo + ((pmIfInErrorsLink1 + pmIfInUnknownProtosLink1 + pmIfInDiscardsLink1 + pmDot1qTpVlanPortInDiscardsLink1 + pmIfInBroadcastPktsLink1 + pmIfInMulticastPktsLink1 + (pmifInUcastPktsLink1 * 1000)) * 20)) * 8) / (1000000 * 900)
EthIfOutPktDiscards_pkts				= pmIfOutDiscardsLink1 + pmIfOutErrorsLink1
EthIfOutPktDiscardRatio_pct				= 100 * (pmIfOutDiscardsLink1 + pmIfOutErrorsLink1) / (pmIfOutDiscardsLink1 + pmIfOutErrorsLink1 + pmIfOutBroadcastPktsLink1 + pmIfOutMulticastPktsLink1 + (pmIfOutUcastPktsLink1 * 1000))
EthIfOutUsage_EthMbps					= (((pmIfOutOctetsLink1Hi * 2147483648) + pmIfOutOctetsLink1Lo + ((pmIfOutDiscardsLink1 + pmIfOutErrorsLink1 + pmIfOutBroadcastPktsLink1 + pmIfOutMulticastPktsLink1 + (pmIfOutUcastPktsLink1 * 1000)) * 20)) * 8) / (1000000 * 900)

# ERBS Outer IPv4 Interface Integrity (mogroup is ipinterface=X|ipaccesshostet=Y where X and Y are outer IPv4 interface and host instances)
OuterIp4IfInPktDiscards_pkts 			= pmIfStatsIpInDiscards + pmInDiscPolicy + pmIpReasmFails/2 + pmIpPortUnreachable + pmUdpInErrors + pmIfStatsIpAddrErrors + pmIfStatsIpInHdrErrors + pmIfStatsIpUnknownProtos
OuterIp4IfInPktDiscardRatio_pct 		= 100 * (pmIfStatsIpInDiscards + pmInDiscPolicy + pmIpReasmFails/2 + pmIpPortUnreachable + pmUdpInErrors + pmIfStatsIpAddrErrors + pmIfStatsIpInHdrErrors + pmIfStatsIpUnknownProtos) / pmIpIfStatsHCInReceives
OuterIp4IfInPktReassemblyRatio_pct 		= 100 * pmIpReasmReqds / pmIpIfStatsHCInReceives
OuterIp4IfInUsage_IpMbps 				= pmIpIfStatsHCInOctets * 8 / (1000000 * 900)
OuterIp4IfInMcastUsage_IpMbps 			= pmIfStatsHCIpInMcastOctets * 8 / (1000000 * 900)
OuterIp4IfOutPktDiscards_pkts 			= pmIfStatsIpOutDiscards
OuterIp4IfOutPktDiscardRatio_pct 		= 100 * pmIfStatsIpOutDiscards / (pmIfStatsIpOutDiscards + pmIpIfStatsHCOutTransmits)
OuterIp4IfOutPktFragmentationRatio_pct 	= 100 * pmIpFragCreates / pmIpIfStatsHCOutTransmits
OuterIp4IfOutUsage_IpMbps 				= pmIpIfStatsHCOutOctets * 8 / (1000000 * 900)
OuterIp4IfOutMcastUsage_IpMbps 			= pmIfStatsHCIpOutMcastOctets * 8 / (1000000 * 900)

# ERBS Inner IPv4 Interface Integrity (mogroup is vpninterface=X|ipaccesshostet=Y where X and Y are inner IPv4 interface and host instances)
InnerIpv4IfInPktDiscards_pkts 			= pmIpInDiscards + pmIpReasmFails/2 + pmIpPortUnreachable + pmUdpInErrors + pmIpInAddrErrors + pmIpInHdrErrors + pmIpInUnknownProtos + pmOutDroppedPacketsPolicyControl
InnerIpv4IfInPktDiscardRatio_pct 		= 100 * (pmIpInDiscards + pmIpReasmFails/2 + pmIpPortUnreachable + pmUdpInErrors + pmIpInAddrErrors + pmIpInHdrErrors + pmIpInUnknownProtos + pmOutDroppedPacketsPolicyControl) / (pmIpInReceives * 1000)
InnerIpv4IfInPktReassemblyRatio_pct 	= 100 * pmIpReasmReqds / (pmIpInReceives * 1000)
InnerIpv4IfOutPktDiscards_pkts 			= pmIpOutDiscards
InnerIpv4IfOutPktDiscardRatio_pct		= 100 * pmIpOutDiscards / pmIpOutRequests
InnerIpv4IfOutPktFragmentationRatio_pct	= 100 * pmIpFragCreates / (pmIpOutRequests - pmIpOutDiscards)

# ERBS Outer IPv6 Interface Integrity (mogroup is ipv6interface=X where X is outer IPv6 interface instance)
OuterIpv6IfInPktDiscards_pkts 			= pmIpIfStatsInDiscards + pmIpIfStatsReasmFails/2 + pmUdpIfStatsInError + pmIpIfStatsInAddrErrors + pmIpIfStatsInHdrErrors + pmIpIfStatsInUnknownProtos
OuterIpv6IfInPktDiscardRatio_pct 		= 100 * (pmIpIfStatsInDiscards + pmIpIfStatsReasmFails/2 + pmUdpIfStatsInError + pmIpIfStatsInAddrErrors + pmIpIfStatsInHdrErrors + pmIpIfStatsInUnknownProtos) / pmIpIfStatsHCInReceives
OuterIpv6IfInPktReassemblyRatio_pct 	= 100 * pmIpIfStatsReasmReqds / pmIpIfStatsHCInReceives
OuterIpv6IfInUsage_IpMbps 				= pmIpIfStatsHCInOctets * 8 / (1000000 * 900)
OuterIpv6IfInMcastUsage_IpMbps 			= pmIfStatsHCIpInMcastOctets * 8 / (1000000 * 900)
OuterIpv6IfOutPktDiscards_pkts 			= pmIfStatsIpOutDiscards
OuterIpv6ifOutPktDiscardRatio_pct 		= 100 * pmIfStatsIpOutDiscards / (pmIfStatsIpOutDiscards + pmIpIfStatsHCOutTransmits)
OuterIpv6IfOutPktFragmentationRatio_pct	= 100 * pmIpIfStatsOutFragCreates / pmIpIfStatsHCOutTransmits
OuterIpv6IfOutUsage_IpMbps 				= pmIpIfStatsHCOutOctets * 8 / (1000000 * 900)
OuterIpv6IfOutMcastUsage_IpMbps 		= pmIfStatsHCIpOutMcastOctets * 8 / (1000000 * 900)

# ERBS Inner IPv6 Interface Integrity
# None available with current implementation

# ERBS IPSec Tunnel Endpoint Integrity (mogroup is ipsectunnel=X where X is IPsec tunnel instance)
IpsecTunInPktDiscards_pkts 				= pmInDiscAReFail + pmInDiscIntCh + pmInDiscDec + pmInDiscNoSa
IpsecTunInPktDiscardRatio_pct 			= 100 * (pmInDiscAReFail + pmInDiscIntCh + pmInDiscDec + pmInDiscNoSa) / (pmInDiscAReFail + pmInDiscIntCh + pmInDiscDec + (pmInPkt * 1000))
IpsecTunInEncryptRate_CipherIpMbps 		= pmInEspData * 8 / (1000000 * 900)
IpsecTunOutPktDiscards_pkts 			= pmOutDiscNoSa + pmOutDiscSeqOw
IpsecTunOutPktDiscardRatio_pct 			= 100 * (pmOutDiscNoSa + pmOutDiscSeqOw) / (pmOutDiscNoSa + pmOutDiscSeqOw + (pmOutPkt * 1000))
IpsecTunOutEncryptRate_CipherIpMbps 	= pmOutEspData * 8 / (1000000 * 900)

# ERBS Egress IP (Shaping) Queue Integrity (moGroup is trafficmanagementqueue=X where X is traffic management queue instance)
IpQueueOutPktDiscards_pkts 				= pmQueueDroppedPackets 
IpQueueOutPktDiscardRatio_pct 			= 100 * pmQueueDroppedPackets / (pmQueueDroppedPackets + pmQueueOutPackets)
IpQueueOutDiscardRate_IpMbps 			= pmQueueDroppedOctets * 8 / (1000000 * 900)
IpQueueOutUsage_IpMbps 					= pmQueueOutOctets * 8 / (1000000 * 900)

# ERBS SCTP Association Integrity (mogroup is sctpassociation=X where X is SCTP association instance ) 
SctpAssocInDataChunkDiscards_chunks 	= pmInDataChunkDiscards + pmInDataChunkAbnormal 
SctpAssocInDataChunkDiscardRatio_pct 		= 100 * (pmInDataChunkDiscards + pmInDataChunkAbnormal) / (pmInDataChunkDiscards + pmInDataChunkAbnormal + pmInDataChunks)
SctpAssocInControlChunkDiscards_chunks 	= pmInControlChunkDiscards + pmInControlChunkAbnormal
SctpAssocInControlDiscardRatio_pct 		= 100 * (pmInControlChunkDiscards + pmInControlChunkAbnormal) / (pmInControlChunkDiscards + pmInControlChunkAbnormal + pmInControlChunks)
SctpAssocInUsage_Sctpkbps 				= pmInOctets * 8 / (1000 * 900)
SctpAssocOutDataChunkDiscards_chunks 	= pmOutDataChunkDiscards + pmOutUserMsgDiscards
SctpAssocOutDataChunkDiscardRatio_pct 	= 100 * (pmInDataChunkDiscards + pmInDataChunkAbnormal) / (pmInDataChunkDiscards + pmInDataChunkAbnormal + pmOutDataChunks)
SctpAssocOutRtxRatio_pct 				= 100 * pmRtxChunks / (pmRtxChunks + pmOutDataChunks)
SctpAssocOutUsage_Sctpkbps 				= pmOutOctets * 8 / (1000 * 900)
SctpAssocAvailability_pct 				= 100 * (900 - pmTimeUnavail) / 900

# ERBS Outer IPv4 Flow Endpoint Integrity (mogroup is ipflowmonitor=X where X is IP flow monitor instance)
IpFlowInMaxBitrate_IpMbps 				= pmIpFlowMaxInBitrate / 1000
IpFlowIn90ptileBitrate_IpMbps 			= (Percentile(90,pmIpFlowInOctets)) *8 / (1000000 * @{pmIpFlowInOctets}[0])
IpFlowIn75ptileBitrate_IpMbps 			= (Percentile(75,pmIpFlowInOctets)) *8 / (1000000 * @{pmIpFlowInOctets}[0])
IpFlowIn50ptileBitrate_IpMbps 			= (Percentile(50,pmIpFlowInOctets)) *8 / (1000000 * @{pmIpFlowInOctets}[0])
IpFlowInMinBitrate_IpMbps 				= pmIpFlowMinInBitrate / 1000
IpFlowOutMaxBitrate_IpMbps 				= pmIpFlowMaxOutBitrate / 1000
IpFlowOut90ptileBitrate_IpMbps 			= (Percentile(90,pmIpFlowOutOctets)) *8 / (1000000 * @{pmIpFlowOutOctets}[0])
IpFlowOut75ptileBitrate_IpMbps 			= (Percentile(75,pmIpFlowOutOctets)) *8 / (1000000 * @{pmIpFlowOutOctets}[0])
IpFlowOut50ptileBitrate_IpMbps 			= (Percentile(50,pmIpFlowOutOctets)) *8 / (1000000 * @{pmIpFlowOutOctets}[0])
IpFlowOutMinBitrate_IpMbps 				= pmIpFlowMinOutBitrate / 1000

