572 lines
20 KiB
C
572 lines
20 KiB
C
/*
|
|
* Copyright (c) 2014, Peter Haag
|
|
* Copyright (c) 2009, Peter Haag
|
|
* Copyright (c) 2004-2008, SWITCH - Teleinformatikdienste fuer Lehre und Forschung
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
* * Neither the name of the author nor the names of its contributors may be
|
|
* used to endorse or promote products derived from this software without
|
|
* specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* $Author: haag $
|
|
*
|
|
* $Id: sflow.h 39 2009-11-25 08:11:15Z haag $
|
|
*
|
|
* $LastChangedRevision: 39 $
|
|
*
|
|
*
|
|
*/
|
|
|
|
#ifndef _SFLOW_H
|
|
#define _SFLOW_H 1
|
|
|
|
/*
|
|
* sfcapd makes use of code originated from sflowtool by InMon Corp.
|
|
* Those parts of the code are distributed under the InMon Public License below.
|
|
* All other/additional code is pubblished under BSD license.
|
|
*/
|
|
|
|
|
|
/*
|
|
* -----------------------------------------------------------------------
|
|
* Copyright (c) 2001-2002 InMon Corp. All rights reserved.
|
|
* -----------------------------------------------------------------------
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer in the documentation and/or other materials provided
|
|
* with the distribution.
|
|
*
|
|
* 3. Redistributions of any form whatsoever must retain the following
|
|
* acknowledgment:
|
|
* "This product includes sFlow(TM), freely available from
|
|
* http://www.inmon.com/".
|
|
*
|
|
* 4. All advertising materials mentioning features or use of this
|
|
* software must display the following acknowledgment:
|
|
* "This product includes sFlow(TM), freely available from
|
|
* http://www.inmon.com/".
|
|
*
|
|
* 5. InMon Corp. may publish revised and/or new versions
|
|
* of the license from time to time. Each version will be given a
|
|
* distinguishing version number. Once covered code has been
|
|
* published under a particular version of the license, you may
|
|
* always continue to use it under the terms of that version. You
|
|
* may also choose to use such covered code under the terms of any
|
|
* subsequent version of the license published by InMon Corp.
|
|
* No one other than the InMon Corp. has the right to modify the terms
|
|
* applicable to covered code created under this License.
|
|
*
|
|
* 6. The name "sFlow" must not be used to endorse or promote products
|
|
* derived from this software without prior written permission
|
|
* from InMon Corp. This does not apply to add-on libraries or tools
|
|
* that work in conjunction with sFlow. In such a case the sFlow name
|
|
* may be used to indicate that the product supports sFlow.
|
|
*
|
|
* 7. Products derived from this software may not be called "sFlow",
|
|
* nor may "sFlow" appear in their name, without prior written
|
|
* permission of InMon Corp.
|
|
*
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY INMON CORP. ``AS IS'' AND
|
|
* ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
* INMON CORP. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* --------------------------------------------------------------------
|
|
*
|
|
* This software consists of voluntary contributions made by many
|
|
* individuals on behalf of InMon Corp.
|
|
*
|
|
* InMon Corp. can be contacted via Email at info@inmon.com.
|
|
*
|
|
* For more information on InMon Corp. and sFlow,
|
|
* please see http://www.inmon.com/.
|
|
*
|
|
* InMon Public License Version 1.0 written May 31, 2001
|
|
*
|
|
*/
|
|
|
|
|
|
enum INMAddress_type {
|
|
INMADDRESSTYPE_IP_V4 = 1,
|
|
INMADDRESSTYPE_IP_V6 = 2
|
|
};
|
|
|
|
typedef union _INMAddress_value {
|
|
struct in_addr ip_v4;
|
|
struct in6_addr ip_v6;
|
|
} INMAddress_value;
|
|
|
|
typedef struct _INMAddress {
|
|
uint32_t type; /* enum INMAddress_type */
|
|
INMAddress_value address;
|
|
} INMAddress;
|
|
|
|
/* Packet header data */
|
|
|
|
#define INM_MAX_HEADER_SIZE 256 /* The maximum sampled header size. */
|
|
#define INM_DEFAULT_HEADER_SIZE 128
|
|
#define INM_DEFAULT_COLLECTOR_PORT 6343
|
|
#define INM_DEFAULT_SAMPLING_RATE 400
|
|
|
|
/* The header protocol describes the format of the sampled header */
|
|
enum INMHeader_protocol {
|
|
INMHEADER_ETHERNET_ISO8023 = 1,
|
|
INMHEADER_ISO88024_TOKENBUS = 2,
|
|
INMHEADER_ISO88025_TOKENRING = 3,
|
|
INMHEADER_FDDI = 4,
|
|
INMHEADER_FRAME_RELAY = 5,
|
|
INMHEADER_X25 = 6,
|
|
INMHEADER_PPP = 7,
|
|
INMHEADER_SMDS = 8,
|
|
INMHEADER_AAL5 = 9,
|
|
INMHEADER_AAL5_IP = 10, /* e.g. Cisco AAL5 mux */
|
|
INMHEADER_IPv4 = 11,
|
|
INMHEADER_IPv6 = 12
|
|
};
|
|
|
|
typedef struct _INMSampled_header {
|
|
uint32_t header_protocol; /* (enum INMHeader_protocol) */
|
|
uint32_t frame_length; /* Original length of packet before sampling */
|
|
uint32_t header_length; /* length of sampled header bytes to follow */
|
|
uint8_t header[INM_MAX_HEADER_SIZE]; /* Header bytes */
|
|
} INMSampled_header;
|
|
|
|
/* Packet IP version 4 data */
|
|
|
|
typedef struct _INMSampled_ipv4 {
|
|
uint32_t length; /* The length of the IP packet
|
|
excluding lower layer encapsulations */
|
|
uint32_t protocol; /* IP Protocol type (for example, TCP = 6, UDP = 17) */
|
|
struct in_addr src_ip; /* Source IP Address */
|
|
struct in_addr dst_ip; /* Destination IP Address */
|
|
uint32_t src_port; /* TCP/UDP source port number or equivalent */
|
|
uint32_t dst_port; /* TCP/UDP destination port number or equivalent */
|
|
uint32_t tcp_flags; /* TCP flags */
|
|
uint32_t tos; /* IP type of service */
|
|
} INMSampled_ipv4;
|
|
|
|
/* Packet IP version 6 data */
|
|
|
|
typedef struct _INMSampled_ipv6 {
|
|
uint32_t length; /* The length of the IP packet
|
|
excluding lower layer encapsulations */
|
|
uint32_t protocol; /* IP Protocol type (for example, TCP = 6, UDP = 17) */
|
|
struct in6_addr src_ip; /* Source IP Address */
|
|
struct in6_addr dst_ip; /* Destination IP Address */
|
|
uint32_t src_port; /* TCP/UDP source port number or equivalent */
|
|
uint32_t dst_port; /* TCP/UDP destination port number or equivalent */
|
|
uint32_t tcp_flags; /* TCP flags */
|
|
uint32_t tos; /* IP type of service */
|
|
} INMSampled_ipv6;
|
|
|
|
|
|
/* Packet data */
|
|
|
|
enum INMPacket_information_type {
|
|
INMPACKETTYPE_HEADER = 1, /* Packet headers are sampled */
|
|
INMPACKETTYPE_IPV4 = 2, /* IP version 4 data */
|
|
INMPACKETTYPE_IPV6 = 3 /* IP version 4 data */
|
|
};
|
|
|
|
typedef union _INMPacket_data_type {
|
|
INMSampled_header header;
|
|
INMSampled_ipv4 ipv4;
|
|
INMSampled_ipv6 ipv6;
|
|
} INMPacket_data_type;
|
|
|
|
/* Extended data types */
|
|
|
|
/* Extended switch data */
|
|
|
|
typedef struct _INMExtended_switch {
|
|
uint32_t src_vlan; /* The 802.1Q VLAN id of incomming frame */
|
|
uint32_t src_priority; /* The 802.1p priority */
|
|
uint32_t dst_vlan; /* The 802.1Q VLAN id of outgoing frame */
|
|
uint32_t dst_priority; /* The 802.1p priority */
|
|
} INMExtended_switch;
|
|
|
|
/* Extended router data */
|
|
|
|
typedef struct _INMExtended_router {
|
|
INMAddress nexthop; /* IP address of next hop router */
|
|
uint32_t src_mask; /* Source address prefix mask bits */
|
|
uint32_t dst_mask; /* Destination address prefix mask bits */
|
|
} INMExtended_router;
|
|
|
|
/* Extended gateway data */
|
|
|
|
enum INMExtended_as_path_segment_type {
|
|
INMEXTENDED_AS_SET = 1, /* Unordered set of ASs */
|
|
INMEXTENDED_AS_SEQUENCE = 2 /* Ordered sequence of ASs */
|
|
};
|
|
|
|
typedef struct _INMExtended_as_path_segment {
|
|
uint32_t type; /* enum INMExtended_as_path_segment_type */
|
|
uint32_t length; /* number of AS numbers in set/sequence */
|
|
union {
|
|
uint32_t *set;
|
|
uint32_t *seq;
|
|
} as;
|
|
} INMExtended_as_path_segment;
|
|
|
|
/* note: the INMExtended_gateway structure has changed between v2 and v4.
|
|
Here is the old version first... */
|
|
|
|
typedef struct _INMExtended_gateway_v2 {
|
|
uint32_t as; /* AS number for this gateway */
|
|
uint32_t src_as; /* AS number of source (origin) */
|
|
uint32_t src_peer_as; /* AS number of source peer */
|
|
uint32_t dst_as_path_length; /* number of AS numbers in path */
|
|
uint32_t *dst_as_path;
|
|
} INMExtended_gateway_v2;
|
|
|
|
/* now here is the new version... */
|
|
|
|
typedef struct _INMExtended_gateway_v4 {
|
|
uint32_t as; /* AS number for this gateway */
|
|
uint32_t src_as; /* AS number of source (origin) */
|
|
uint32_t src_peer_as; /* AS number of source peer */
|
|
uint32_t dst_as_path_segments; /* number of segments in path */
|
|
INMExtended_as_path_segment *dst_as_path; /* list of seqs or sets */
|
|
uint32_t communities_length; /* number of communities */
|
|
uint32_t *communities; /* set of communities */
|
|
uint32_t localpref; /* LocalPref associated with this route */
|
|
} INMExtended_gateway_v4;
|
|
|
|
/* Extended user data */
|
|
typedef struct _INMExtended_user {
|
|
uint32_t src_user_len;
|
|
char *src_user;
|
|
uint32_t dst_user_len;
|
|
char *dst_user;
|
|
} INMExtended_user;
|
|
enum INMExtended_url_direction {
|
|
INMEXTENDED_URL_SRC = 1, /* URL is associated with source address */
|
|
INMEXTENDED_URL_DST = 2 /* URL is associated with destination address */
|
|
};
|
|
|
|
typedef struct _INMExtended_url {
|
|
uint32_t direction; /* enum INMExtended_url_direction */
|
|
uint32_t url_len;
|
|
char *url;
|
|
} INMExtended_url;
|
|
|
|
/* Extended data */
|
|
|
|
enum INMExtended_information_type {
|
|
INMEXTENDED_SWITCH = 1, /* Extended switch information */
|
|
INMEXTENDED_ROUTER = 2, /* Extended router information */
|
|
INMEXTENDED_GATEWAY = 3, /* Extended gateway router information */
|
|
INMEXTENDED_USER = 4, /* Extended TACAS/RADIUS user information */
|
|
INMEXTENDED_URL = 5 /* Extended URL information */
|
|
};
|
|
|
|
/* Format of a single sample */
|
|
|
|
typedef struct _INMFlow_sample {
|
|
uint32_t sequence_number; /* Incremented with each flow sample
|
|
generated */
|
|
uint32_t source_id; /* fsSourceId */
|
|
uint32_t sampling_rate; /* fsPacketSamplingRate */
|
|
uint32_t sample_pool; /* Total number of packets that could have been
|
|
sampled (i.e. packets skipped by sampling
|
|
process + total number of samples) */
|
|
uint32_t drops; /* Number of times a packet was dropped due to
|
|
lack of resources */
|
|
uint32_t input; /* SNMP ifIndex of input interface.
|
|
0 if interface is not known. */
|
|
uint32_t output; /* SNMP ifIndex of output interface,
|
|
0 if interface is not known.
|
|
Set most significant bit to indicate
|
|
multiple destination interfaces
|
|
(i.e. in case of broadcast or multicast)
|
|
and set lower order bits to indicate
|
|
number of destination interfaces.
|
|
Examples:
|
|
0x00000002 indicates ifIndex = 2
|
|
0x00000000 ifIndex unknown.
|
|
0x80000007 indicates a packet sent
|
|
to 7 interfaces.
|
|
0x80000000 indicates a packet sent to
|
|
an unknown number of
|
|
interfaces greater than 1.*/
|
|
uint32_t packet_data_tag; /* enum INMPacket_information_type */
|
|
INMPacket_data_type packet_data; /* Information about sampled packet */
|
|
|
|
/* in the sFlow packet spec the next field is the number of extended objects
|
|
followed by the data for each one (tagged with the type). Here we just
|
|
provide space for each one, and flags to enable them. The correct format
|
|
is then put together by the serialization code */
|
|
int gotSwitch;
|
|
INMExtended_switch switchDevice;
|
|
int gotRouter;
|
|
INMExtended_router router;
|
|
int gotGateway;
|
|
union {
|
|
INMExtended_gateway_v2 sf_v2; /* make the version explicit so that there is */
|
|
INMExtended_gateway_v4 sf_v4; /* less danger of mistakes when upgrading code */
|
|
} gateway;
|
|
int gotUser;
|
|
INMExtended_user user;
|
|
int gotUrl;
|
|
INMExtended_url url;
|
|
} INMFlow_sample;
|
|
|
|
/* Counter types */
|
|
|
|
/* Generic interface counters - see RFC 1573, 2233 */
|
|
|
|
typedef struct _INMIf_counters {
|
|
uint32_t ifIndex;
|
|
uint32_t ifType;
|
|
uint64_t ifSpeed;
|
|
uint32_t ifDirection; /* Derived from MAU MIB (RFC 2239)
|
|
0 = unknown, 1 = full-duplex,
|
|
2 = half-duplex, 3 = in, 4 = out */
|
|
uint32_t ifStatus; /* bit field with the following bits assigned:
|
|
bit 0 = ifAdminStatus (0 = down, 1 = up)
|
|
bit 1 = ifOperStatus (0 = down, 1 = up) */
|
|
uint64_t ifInOctets;
|
|
uint32_t ifInUcastPkts;
|
|
uint32_t ifInMulticastPkts;
|
|
uint32_t ifInBroadcastPkts;
|
|
uint32_t ifInDiscards;
|
|
uint32_t ifInErrors;
|
|
uint32_t ifInUnknownProtos;
|
|
uint64_t ifOutOctets;
|
|
uint32_t ifOutUcastPkts;
|
|
uint32_t ifOutMulticastPkts;
|
|
uint32_t ifOutBroadcastPkts;
|
|
uint32_t ifOutDiscards;
|
|
uint32_t ifOutErrors;
|
|
uint32_t ifPromiscuousMode;
|
|
} INMIf_counters;
|
|
|
|
/* Ethernet interface counters - see RFC 2358 */
|
|
typedef struct _INMEthernet_specific_counters {
|
|
uint32_t dot3StatsAlignmentErrors;
|
|
uint32_t dot3StatsFCSErrors;
|
|
uint32_t dot3StatsSingleCollisionFrames;
|
|
uint32_t dot3StatsMultipleCollisionFrames;
|
|
uint32_t dot3StatsSQETestErrors;
|
|
uint32_t dot3StatsDeferredTransmissions;
|
|
uint32_t dot3StatsLateCollisions;
|
|
uint32_t dot3StatsExcessiveCollisions;
|
|
uint32_t dot3StatsInternalMacTransmitErrors;
|
|
uint32_t dot3StatsCarrierSenseErrors;
|
|
uint32_t dot3StatsFrameTooLongs;
|
|
uint32_t dot3StatsInternalMacReceiveErrors;
|
|
uint32_t dot3StatsSymbolErrors;
|
|
} INMEthernet_specific_counters;
|
|
|
|
typedef struct _INMEthernet_counters {
|
|
INMIf_counters generic;
|
|
INMEthernet_specific_counters ethernet;
|
|
} INMEthernet_counters;
|
|
|
|
/* FDDI interface counters - see RFC 1512 */
|
|
typedef struct _INMFddi_counters {
|
|
INMIf_counters generic;
|
|
} INMFddi_counters;
|
|
|
|
/* Token ring counters - see RFC 1748 */
|
|
|
|
typedef struct _INMTokenring_specific_counters {
|
|
uint32_t dot5StatsLineErrors;
|
|
uint32_t dot5StatsBurstErrors;
|
|
uint32_t dot5StatsACErrors;
|
|
uint32_t dot5StatsAbortTransErrors;
|
|
uint32_t dot5StatsInternalErrors;
|
|
uint32_t dot5StatsLostFrameErrors;
|
|
uint32_t dot5StatsReceiveCongestions;
|
|
uint32_t dot5StatsFrameCopiedErrors;
|
|
uint32_t dot5StatsTokenErrors;
|
|
uint32_t dot5StatsSoftErrors;
|
|
uint32_t dot5StatsHardErrors;
|
|
uint32_t dot5StatsSignalLoss;
|
|
uint32_t dot5StatsTransmitBeacons;
|
|
uint32_t dot5StatsRecoverys;
|
|
uint32_t dot5StatsLobeWires;
|
|
uint32_t dot5StatsRemoves;
|
|
uint32_t dot5StatsSingles;
|
|
uint32_t dot5StatsFreqErrors;
|
|
} INMTokenring_specific_counters;
|
|
|
|
typedef struct _INMTokenring_counters {
|
|
INMIf_counters generic;
|
|
INMTokenring_specific_counters tokenring;
|
|
} INMTokenring_counters;
|
|
|
|
/* 100 BaseVG interface counters - see RFC 2020 */
|
|
|
|
typedef struct _INMVg_specific_counters {
|
|
uint32_t dot12InHighPriorityFrames;
|
|
uint64_t dot12InHighPriorityOctets;
|
|
uint32_t dot12InNormPriorityFrames;
|
|
uint64_t dot12InNormPriorityOctets;
|
|
uint32_t dot12InIPMErrors;
|
|
uint32_t dot12InOversizeFrameErrors;
|
|
uint32_t dot12InDataErrors;
|
|
uint32_t dot12InNullAddressedFrames;
|
|
uint32_t dot12OutHighPriorityFrames;
|
|
uint64_t dot12OutHighPriorityOctets;
|
|
uint32_t dot12TransitionIntoTrainings;
|
|
uint64_t dot12HCInHighPriorityOctets;
|
|
uint64_t dot12HCInNormPriorityOctets;
|
|
uint64_t dot12HCOutHighPriorityOctets;
|
|
} INMVg_specific_counters;
|
|
|
|
typedef struct _INMVg_counters {
|
|
INMIf_counters generic;
|
|
INMVg_specific_counters vg;
|
|
} INMVg_counters;
|
|
|
|
/* WAN counters */
|
|
|
|
typedef struct _INMWan_counters {
|
|
INMIf_counters generic;
|
|
} INMWan_counters;
|
|
|
|
typedef struct _INMVlan_counters {
|
|
uint32_t vlan_id;
|
|
uint64_t octets;
|
|
uint32_t ucastPkts;
|
|
uint32_t multicastPkts;
|
|
uint32_t broadcastPkts;
|
|
uint32_t discards;
|
|
} INMVlan_counters;
|
|
|
|
/* Counters data */
|
|
|
|
enum INMCounters_version {
|
|
INMCOUNTERSVERSION_GENERIC = 1,
|
|
INMCOUNTERSVERSION_ETHERNET = 2,
|
|
INMCOUNTERSVERSION_TOKENRING = 3,
|
|
INMCOUNTERSVERSION_FDDI = 4,
|
|
INMCOUNTERSVERSION_VG = 5,
|
|
INMCOUNTERSVERSION_WAN = 6,
|
|
INMCOUNTERSVERSION_VLAN = 7
|
|
};
|
|
|
|
typedef union _INMCounters_type {
|
|
INMIf_counters generic;
|
|
INMEthernet_counters ethernet;
|
|
INMTokenring_counters tokenring;
|
|
INMFddi_counters fddi;
|
|
INMVg_counters vg;
|
|
INMWan_counters wan;
|
|
INMVlan_counters vlan;
|
|
} INMCounters_type;
|
|
|
|
typedef struct _INMCounters_sample_hdr {
|
|
uint32_t sequence_number; /* Incremented with each counters sample
|
|
generated by this source_id */
|
|
uint32_t source_id; /* fsSourceId */
|
|
uint32_t sampling_interval; /* fsCounterSamplingInterval */
|
|
} INMCounters_sample_hdr;
|
|
|
|
typedef struct _INMCounters_sample {
|
|
INMCounters_sample_hdr hdr;
|
|
uint32_t counters_type_tag; /* Enum INMCounters_version */
|
|
INMCounters_type counters; /* Counter set for this interface type */
|
|
} INMCounters_sample;
|
|
|
|
/* when I turn on optimisation with the Microsoft compiler it seems to change
|
|
the values of these enumerated types and break the program - not sure why */
|
|
enum INMSample_types {
|
|
FLOWSAMPLE = 1,
|
|
COUNTERSSAMPLE = 2
|
|
};
|
|
|
|
typedef union _INMSample_type {
|
|
INMFlow_sample flowsample;
|
|
INMCounters_sample counterssample;
|
|
} INMSample_type;
|
|
|
|
/* Format of a sample datagram */
|
|
|
|
enum INMDatagram_version {
|
|
INMDATAGRAM_VERSION2 = 2,
|
|
INMDATAGRAM_VERSION4 = 4
|
|
};
|
|
|
|
typedef struct _INMSample_datagram_hdr {
|
|
uint32_t datagram_version; /* (enum INMDatagram_version) = VERSION4 */
|
|
INMAddress agent_address; /* IP address of sampling agent */
|
|
uint32_t sequence_number; /* Incremented with each sample datagram
|
|
generated */
|
|
uint32_t uptime; /* Current time (in milliseconds since device
|
|
last booted). Should be set as close to
|
|
datagram transmission time as possible.*/
|
|
uint32_t num_samples; /* Number of flow and counters samples to follow */
|
|
} INMSample_datagram_hdr;
|
|
|
|
#define INM_MAX_DATAGRAM_SIZE 1500
|
|
#define INM_MIN_DATAGRAM_SIZE 200
|
|
#define INM_DEFAULT_DATAGRAM_SIZE 1400
|
|
|
|
#define INM_DATA_PAD 400
|
|
|
|
void Init_sflow(void);
|
|
|
|
void Process_sflow(void *in_buff, ssize_t in_buff_cnt, FlowSource_t *fs);
|
|
|
|
/*
|
|
* Extension map for sflow ( compatibility for now )
|
|
*
|
|
* Required extensions:
|
|
*
|
|
* 4 byte byte counter
|
|
* | 4byte packet counter
|
|
* | | IPv4
|
|
* | | |
|
|
* xxxx x0 0 0
|
|
*
|
|
* Optional extensions:
|
|
*
|
|
* 4 : 2 byte input/output interface id
|
|
* 6 : 2 byte src/dst as
|
|
*/
|
|
|
|
|
|
#endif //_SFLOW_H
|
|
|
|
|