NAME
Net::sFlow - decode sFlow datagrams
SYNOPSIS
use
Net::sFlow;
use
IO::Socket::INET;
my
$sock
= IO::Socket::INET->new(
LocalPort
=>
'6343'
,
Proto
=>
'udp'
)
or
die
"Can't bind : $@\n"
;
while
(
$sock
->
recv
(
$packet
,1548)) {
&processPacket
(
$packet
);
}
die
"Socket recv: $!"
;
sub
processPacket {
my
$sFlowPacket
=
shift
;
# now we actually call the Net::sFlow::decode() function
my
(
$sFlowDatagramRef
,
$sFlowSamplesRef
,
$errorsRef
) = Net::sFlow::decode(
$sFlowPacket
);
# print errors
foreach
my
$error
(@{
$errorsRef
}) {
warn
"$error"
;
}
# print sflow data
"===Datagram===\n"
;
"sFlow version: $sFlowDatagramRef->{sFlowVersion}\n"
;
"datagram sequence number: $sFlowDatagramRef->{datagramSequenceNumber}\n"
;
foreach
my
$sFlowSample
(@{
$sFlowSamplesRef
}) {
"\n"
;
"---Sample---\n"
;
"sample sequence number: $sFlowSample->{sampleSequenceNumber}\n"
;
}
}
DESCRIPTION
The sFlow module provides a mechanism to parse and decode sFlow datagrams. It supports sFlow version 2/4 (RFC 3176 - http://www.ietf.org/rfc/rfc3176.txt) and sFlow version 5 (Memo - http://sflow.org/sflow_version_5.txt).
The module's functionality is provided by a single (exportable) function, decode().
For more examples have a look into the 'examples' directory.
FUNCTIONS
decode()
($datagram, $samples, $error) = Net::sFlow::decode($udp_data);
Returns a HASH reference containing the datagram data, an ARRAY reference with the sample data (each array element contains a HASH reference for one sample) and in case of an error a reference to an ARRAY containing the error messages.
Return Values
- $datagram
-
A HASH reference containing information about the sFlow datagram, with the following keys:
sFlowVersion
AgentIpVersion
AgentIp
datagramSequenceNumber
agentUptime
samplesInPacket
In the case of sFlow v5, there is an additional key:
subAgentId
- $samples
-
Reference to a list of HASH references, each one representing one sample. Depending on the sFlow version and type of hardware where the data comes from (router, switch, etc.), the hash contains the following additional keys:
In case of sFlow <= 4:
sampleType
sampleSequenceNumber
sourceIdType
sourceIdIndex
If it's a sFlow <= 4 flowsample you will get the following additional keys:
samplingRate
samplePool
drops
inputInterface
outputInterface
packetDataType
extendedDataInSample
If it's a sFlow <= 4 countersample you will get these additional keys:
counterSamplingInterval
countersVersion
In case of sFlow >= 5 you will first get enterprise, format and length information:
sampleTypeEnterprise
sampleTypeFormat
sampleLength
If the sample is a Foundry ACL based sample (enterprise == 1991 and format == 1) you will receive the following information:
FoundryFlags
FoundryGroupID
In case of a flowsample (enterprise == 0 and format == 1):
sampleSequenceNumber
sourceIdType
sourceIdIndex
samplingRate
samplePool
drops
inputInterface
outputInterface
flowRecordsCount
If it's an expanded flowsample (enterprise == 0 and format == 3) you will get these additional keys instead of inputInterface and outputInterface:
inputInterfaceFormat
inputInterfaceValue
outputInterfaceFormat
outputInterfaceValue
In case of a countersample (enterprise == 0 and format == 2) or an expanded countersample (enterprise == 0 and format == 4):
sampleSequenceNumber
sourceIdType
sourceIdIndex
counterRecordsCount
counterDataLength
Depending on the hardware you can get the following additional keys:
Header data (sFlow format):
HEADERDATA
HeaderProtocol
HeaderFrameLength
HeaderStrippedLength
HeaderSizeByte
HeaderSizeBit
HeaderBin
Additional Header data decoded from the raw packet header:
HeaderEtherSrcMac
HeaderEtherDestMac
HeaderType (ether type)
HeaderDatalen (of the whole packet including ethernet header)
Ethernet frame data:
ETHERNETFRAMEDATA
EtherMacPacketlength
EtherSrcMac
EtherDestMac
EtherPackettype
IPv4 data:
IPv4DATA
IPv4Packetlength
IPv4NextHeaderProtocol
IPv4srcIp
IPv4destIp
IPv4srcPort
IPv4destPort
IPv4tcpFlags
IPv4tos
IPv6 data:
IPv6DATA
IPv6Packetlength
IPv6NextHeaderProto
IPv6srcIp
IPv6destIp
IPv6srcPort
IPv6destPort
IPv6tcpFlags
IPv6Priority
Switch data:
SWITCHDATA
SwitchSrcVlan
SwitchSrcPriority
SwitchDestVlan
SwitchDestPriority
Router data:
ROUTERDATA
RouterIpVersionNextHopRouter
RouterIpAddressNextHopRouter
RouterSrcMask
RouterDestMask
Gateway data:
GATEWAYDATA
GatewayIpVersionNextHopRouter (only in case of sFlow v5)
GatewayIpAddressNextHopRouter (only in case of sFlow v5)
GatewayAsRouter
GatewayAsSource
GatewayAsSourcePeer
GatewayDestAsPathsCount
GatewayDestAsPaths (arrayreference)
each
enty contains a hashreference:
asPathSegmentType
lengthAsList
AsPath (arrayreference, asNumbers as entries)
GatewayLengthCommunitiesList (added in sFlow v4)
GatewayCommunities (arrayreference, added in sFlow v4)
each
enty contains a community (added in sFlow v4)
localPref
User data:
USERDATA
UserSrcCharset (only in case of sFlow v5)
UserLengthSrcString
UserSrcString
UserDestCharset (only in case of sFlow v5)
UserLengthDestString
UserDestString
Url data (added in sFlow v3):
URLDATA
UrlDirection
UrlLength
Url
UrlHostLength (only in case of sFlow v5)
UrlHost (only in case of sFlow v5)
The following keys can be only available in sFlow v5:
Mpls data:
MPLSDATA
MplsIpVersionNextHopRouter
MplsIpAddressNextHopRouter
MplsInLabelStackCount
MplsInLabelStack (arrayreference containing MplsInLabels)
MplsOutLabelStackCount
MplsOutLabelStack (arrayreference containing MplsOutLabels)
Nat data:
NATDATA
NatIpVersionSrcAddress
NatSrcAddress
NatIpVersionDestAddress
NatDestAddress
Mpls tunnel:
MPLSTUNNEL
MplsTunnelNameLength
MplsTunnelName
MplsTunnelId
MplsTunnelCosValue
Mpls vc:
MPLSVC
MplsVcInstanceNameLength
MplsVcInstanceName
MplsVcId
MplsVcLabelCosValue
Mpls fec:
MPLSFEC
MplsFtnDescrLength
MplsFtnDescr
MplsFtnMask
Mpls lpv fec:
MPLSLPVFEC
MplsFecAddrPrefixLength
Vlan tunnel:
VLANTUNNEL
VlanTunnelLayerStackCount
VlanTunnelLayerStack (arrayreference containing VlanTunnelLayer entries)
The following keys are also available in sFlow < 5:
Counter generic:
COUNTERGENERIC
ifIndex
ifType
ifSpeed
ifDirection
ifAdminStatus
ifOperStatus
ifInOctets
ifInUcastPkts
ifInMulticastPkts
ifInBroadcastPkts
ifInDiscards
ifInErrors
ifInUnknownProtos
ifOutOctets
ifOutUcastPkts
ifOutMulticastPkts
ifOutBroadcastPkts
ifOutDiscards
ifOutErrors
ifPromiscuousMode
Counter ethernet:
COUNTERETHERNET
dot3StatsAlignmentErrors
dot3StatsFCSErrors
dot3StatsSingleCollisionFrames
dot3StatsMultipleCollisionFrames
dot3StatsSQETestErrors
dot3StatsDeferredTransmissions
dot3StatsLateCollisions
dot3StatsExcessiveCollisions
dot3StatsInternalMacTransmitErrors
dot3StatsCarrierSenseErrors
dot3StatsFrameTooLongs
dot3StatsInternalMacReceiveErrors
dot3StatsSymbolErrors
Counter tokenring:
COUNTERTOKENRING
dot5StatsLineErrors
dot5StatsBurstErrors
dot5StatsACErrors
dot5StatsAbortTransErrors
dot5StatsInternalErrors
dot5StatsLostFrameErrors
dot5StatsReceiveCongestions
dot5StatsFrameCopiedErrors
dot5StatsTokenErrors
dot5StatsSoftErrors
dot5StatsHardErrors
dot5StatsSignalLoss
dot5StatsTransmitBeacons
dot5StatsRecoverys
dot5StatsLobeWires
dot5StatsRemoves
dot5StatsSingles
dot5StatsFreqErrors
Counter vg:
COUNTERVG
dot12InHighPriorityFrames
dot12InHighPriorityOctets
dot12InNormPriorityFrames
dot12InNormPriorityOctets
dot12InIPMErrors
dot12InOversizeFrameErrors
dot12InDataErrors
dot12InNullAddressedFrames
dot12OutHighPriorityFrames
dot12OutHighPriorityOctets
dot12TransitionIntoTrainings
dot12HCInHighPriorityOctets
dot12HCInNormPriorityOctets
dot12HCOutHighPriorityOctets
Counter vlan:
COUNTERVLAN
vlan_id
octets
ucastPkts
multicastPkts
broadcastPkts
discards
Counter lag:
COUNTERLAG
dot3adAggPortActorSystemID
dot3adAggPortPartnerOperSystemID
dot3adAggPortAttachedAggID
dot3adAggPortActorAdminState
dot3adAggPortActorOperState
dot3adAggPortPartnerAdminState
dot3adAggPortPartnerOperState
dot3adAggPortStatsLACPDUsRx
dot3adAggPortStatsMarkerPDUsRx
dot3adAggPortStatsMarkerResponsePDUsRx
dot3adAggPortStatsUnknownRx
dot3adAggPortStatsIllegalRx
dot3adAggPortStatsLACPDUsTx
dot3adAggPortStatsMarkerPDUsTx
dot3adAggPortStatsMarkerResponsePDUsTx
Counter processor (only in sFlow v5):
COUNTERPROCESSOR
cpu5s
cpu1m
cpu5m
memoryTotal
memoryFree
Counter HTTP:
COUNTERHTTP
methodOptionCount
methodGetCount
methodHeadCount
methodPostCount
methodPutCount
methodDeleteCount
methodTraceCount
methodConnectCount
methodOtherCount
status1xxCount
status2xxCount
status3xxCount
status4xxCount
status5xxCount
statusOtherCount
- $error
-
Reference to a list of error messages.
CAVEATS
The decode() function will blindly attempt to decode the data you provide. There are some tests for the appropriate values at various places (where it is feasible to test - like enterprises, formats, versionnumbers, etc.), but in general the GIGO principle still stands: Garbage In / Garbage Out.
SEE ALSO
sFlow v4 http://www.ietf.org/rfc/rfc3176.txt
sFlow v5 http://sflow.org/sflow_version_5.txt
Math::BigInt
AUTHOR
Elisa Jasinska <elisa@bigwaveit.org>
CONTACT
Please send comments or bug reports to <elisa@bigwaveit.org> and/or <sflow@ams-ix.net>
COPYRIGHT
Copyright (c) 2006 - 2015 AMS-IX B.V.
This package is free software and is provided "as is" without express or implied warranty. It may be used, redistributed and/or modified under the terms of the Perl Artistic License (see http://www.perl.com/perl/misc/Artistic.html)