85#include <yaf/autoinc.h> 
   86#include <fixbuf/public.h> 
   87#include <yaf/yaftime.h> 
  102#define YAF_ERROR_DOMAIN        (g_quark_from_string("certYAFError")) 
  104#define YAF_ERROR_HEADER        1 
  106#define YAF_ERROR_ARGUMENT      2 
  108#define YAF_ERROR_IO            3 
  110#define YAF_ERROR_IPFIX         4 
  112#define YAF_ERROR_IMPL          5 
  114#define YAF_ERROR_INTERNAL      6 
  116#define YAF_ERROR_LIMIT         7 
  118#define YAF_ERROR_EOF           8 
  120#define YAF_ERROR_ALIGNMENT         9 
  122#define YAF_ERROR_PACKET_PAYLOAD    10 
  130#define YAF_FLOW_ACTIVE         0 
  132#define YAF_END_IDLE            1 
  134#define YAF_END_ACTIVE          2 
  136#define YAF_END_CLOSED          3 
  138#define YAF_END_FORCED          4 
  140#define YAF_END_RESOURCE        5 
  142#define YAF_END_UDPFORCE        0x1F 
  144#define YAF_END_MASK            0x7F 
  146#define YAF_ENDF_ISCONT         0x80 
  149#define YAF_SAME_SIZE           0x01 
  151#define YAF_OUT_OF_SEQUENCE     0x02 
  153#define YAF_MP_CAPABLE          0x04 
  155#define YAF_FRAGMENTS           0x08 
  157#define YAF_PARTIAL_FRAGS       0x10 
  159#define YAF_FRAG_ACTIVE         0x03 
  161#define YAF_FRAG_PASSIVE        0x04 
  173#define YFP_IPTCPHEADER_SIZE    128 
  175#define ETHERNET_MAC_ADDR_LENGTH 6 
  177#define YAF_MAX_HOOKS            4 
  181#define YAF_HOOKS_MAX_EXPORT    1500 
  183#define YAF_MAX_PKT_BOUNDARY    25 
  185#define YAF_PCAP_MAX            5000000 
  187#define YAF_MAX_MPLS_LABELS     3 
  191#define YAF_SMALL_PKT_BOUND     60 
  194#define YAF_LARGE_PKT_BOUND     225 
  218#define YF_TIME_IE__FIRST   YF_TIME_IE_MILLI 
  221#define YF_TIME_IE__LAST    YF_TIME_IE_NANO 
  224#define YF_TIME_IE__DEFAULT (YF_TIME_IE_MILLI | YF_TIME_IE_MICRO) 
  229#define yfRecordTimeIEBitSet(t_)          (1 << ((t_) - 1)) 
  234#define yfRecordTimeIEBitCheck(bits_, t_) ((bits_) & yfRecordTimeIEBitSet(t_)) 
  260#if YAF_ENABLE_DAG_SEPARATE_INTERFACES || YAF_ENABLE_SEPARATE_INTERFACES 
 
  319#if YAF_ENABLE_PAYLOAD 
  343#if YAF_ENABLE_SEPARATE_INTERFACES 
  346#if YAF_ENABLE_ENTROPY 
  364#if YAF_ENABLE_FPEXPORT 
  366    uint32_t        firstPacketLen;
 
  368    uint32_t        secondPacketLen;
 
  370    uint8_t        *firstPacket;
 
  372    uint8_t        *secondPacket;
 
 
  379typedef struct yfMPLSNode_st {
 
  414#ifdef YAF_ENABLE_HOOKS 
  426#if YAF_ENABLE_APPLABEL 
  431    uint16_t        ndpi_master;
 
 
  563    fbSpreadParams_t  *params,
 
  564    uint16_t          *spreadGroupIndex,
 
  695    fbListenerAppInit_fn   appinit,
 
  696    fbListenerAppFree_fn   appfree,
 
uint64_t idsn
initial data seq no.
Definition yafcore.h:391
 
uint16_t mss
max segment size
Definition yafcore.h:395
 
uint8_t flags
hash_flags
Definition yafcore.h:399
 
uint32_t token
receiver token
Definition yafcore.h:393
 
uint8_t addrid
addr id
Definition yafcore.h:397
 
YAF time difference: represents the difference of two yfTime_t.
Definition yaftime.h:55
 
A YAF flow.
Definition yafcore.h:409
 
yfFlowVal_t rval
Reverse value.
Definition yafcore.h:459
 
yaf_mptcp_t mptcp
MPTCP Flow.
Definition yafcore.h:455
 
uint8_t pcap_serial
Keep track of number of pcap files for this flow.
Definition yafcore.h:437
 
yfTime_t etime
Flow end time.
Definition yafcore.h:413
 
yfTime_t stime
Flow start time.
Definition yafcore.h:411
 
uint8_t rtos
reverse ToS (fwd in flowKey)
Definition yafcore.h:447
 
uint8_t pktdir
non empty packet directions, 1, or 0
Definition yafcore.h:445
 
yfFlowKey_t key
Flow key.
Definition yafcore.h:461
 
uint8_t destinationMacAddr[ETHERNET_MAC_ADDR_LENGTH]
destination Mac Address
Definition yafcore.h:441
 
uint8_t sourceMacAddr[ETHERNET_MAC_ADDR_LENGTH]
src Mac Address
Definition yafcore.h:439
 
pcap_dumper_t * pcap
Pcap File Ptr.
Definition yafcore.h:449
 
yfFlowVal_t val
Forward value.
Definition yafcore.h:457
 
uint8_t pcap_file_no
Pcap File "ID" so we know when to make entries in metadata file.
Definition yafcore.h:443
 
uint8_t reason
Flow termination reason (YAF_END_ macros, per IPFIX standard)
Definition yafcore.h:435
 
A YAF flow key.
Definition yafcore.h:244
 
uint8_t tos
Type of Service/Traffic Class.
Definition yafcore.h:256
 
uint8_t version
IP Version.
Definition yafcore.h:252
 
uint32_t sip
Source IPv4 address.
Definition yafcore.h:269
 
uint32_t dip
Destination IPv4 address.
Definition yafcore.h:271
 
uint16_t sp
Source transport port.
Definition yafcore.h:246
 
uint16_t dp
Destination transport port.
Definition yafcore.h:248
 
uint16_t vlanId
VLAN Tag - only fwd.
Definition yafcore.h:254
 
union yfFlowKey_st::@0 addr
IP address two-tuple union.
 
uint8_t proto
IP protocol.
Definition yafcore.h:250
 
uint32_t layer2Id
for DAG cards need to record the interface, may only be seeing unidirectional flows on each interface...
Definition yafcore.h:264
 
yaf enhanced flow statistics
Definition yafcore.h:285
 
uint32_t smallpktct
Number of packets with fewer than YAF_SMALL_PKT_BOUND bytes of data.
Definition yafcore.h:297
 
uint32_t nonemptypktct
total number of non empty pkts
Definition yafcore.h:299
 
uint64_t iaarray[10]
to calculate inter-packet delay
Definition yafcore.h:287
 
uint32_t maxpktsize
largest pkt size
Definition yafcore.h:307
 
uint32_t largepktct
Number of packets with more than YAF_LARGE_PKT_BOUND bytes of data.
Definition yafcore.h:301
 
uint32_t aitime
average interarrival time in milliseconds
Definition yafcore.h:303
 
uint32_t firstpktsize
payload length of first non-empty pkt
Definition yafcore.h:305
 
uint32_t tcpurgct
Number of urgent packets.
Definition yafcore.h:295
 
uint32_t pktsize[10]
to calculate distribution of packet payload size
Definition yafcore.h:289
 
uint64_t payoct
total amount of payload data
Definition yafcore.h:291
 
yfTime_t ltime
used to calculate interarrival time
Definition yafcore.h:293
 
A YAF uniflow value.
Definition yafcore.h:314
 
uint64_t pkt
Packet count.
Definition yafcore.h:318
 
uint32_t lsn
Last TCP sequence number.
Definition yafcore.h:330
 
uint8_t appkt
packets with payload - don't care if this wraps.
Definition yafcore.h:340
 
uint8_t iflags
Initial TCP flags.
Definition yafcore.h:336
 
yfFlowStats_t * stats
yaf flow statistics
Definition yafcore.h:375
 
uint64_t oct
Octet count.
Definition yafcore.h:316
 
uint16_t first_pkt_size
First Packet Size - to determine whether to turn on fixed size flag.
Definition yafcore.h:332
 
uint16_t attributes
flowAttributes
Definition yafcore.h:334
 
uint8_t uflags
Union of remaining TCP flags.
Definition yafcore.h:338
 
uint16_t vlan
VLAN TAG (also in key, but want to record both sides)
Definition yafcore.h:342
 
uint32_t isn
Initial TCP sequence number.
Definition yafcore.h:328
 
YAF timestamp: represents a moment in time.
Definition yaftime.h:47
 
fBuf_t * yfWriterForSpec(fbConnSpec_t *spec, const yfConfig_t *yfConfig, GError **err)
Get an IPFIX message buffer for writing YAF flows to a socket.
 
#define YAF_MAX_MPLS_LABELS
Maximum number of labels we're going to keep around.
Definition yafcore.h:187
 
gboolean yfWriteOptionsDataFlows(void *yfContext, uint32_t pcap_drop, GTimer *timer, GError **err)
A wrapper that calls both yfWriteStatsFlow and yfWriteDataFlow with appropriate condition checking.
 
struct yfFlowKey_st yfFlowKey_t
A YAF flow key.
 
enum yfRecordTimeIE_en yfRecordTimeIE_t
Type to specify which timestamps are included.
 
#define YAF_MAX_HOOKS
maximum number of hooks (plugins) allowed at one time
Definition yafcore.h:177
 
gboolean yfReadFlowExtended(fBuf_t *fbuf, yfFlow_t *flow, GError **err)
Read a single flow from an IPFIX message buffer.
 
gboolean yfPrint(FILE *out, const yfFlow_t *flow, GError **err)
Print a textual representation of a YAF flow to a file.
 
struct yfConfig_st yfConfig_t
YAF Configuration Settings.
Definition yafcore.h:200
 
gboolean yfReadFlow(fBuf_t *fbuf, yfFlow_t *flow, GError **err)
Read a single flow from an IPFIX message buffer.
 
gboolean yfWriteFlow(void *yfContext, yfFlow_t *flow, GError **err)
Write a single flow to an IPFIX message buffer.
 
void yfPrintString(GString *rstr, const yfFlow_t *flow)
Print a YAF flow to a GString.
 
void yfAlignmentCheck(void)
yfAlignmentCheck
 
yfRecordTimeIE_en
Type to specify which timestamps are included.
Definition yafcore.h:206
 
@ YF_TIME_IE_NANO
Include flowStartNanoseconds, etc in the export template.
Definition yafcore.h:214
 
@ YF_TIME_IE_MICRO
Include flowStartMicrioseconds, etc in the export template.
Definition yafcore.h:212
 
@ YF_TIME_IE_MILLI
Include flowStartMilliseconds, etc in the export template.
Definition yafcore.h:210
 
@ YF_TIME_IE__UNSET
Unset value.
Definition yafcore.h:208
 
fBuf_t * yfWriterForFile(const char *path, const yfConfig_t *yfConfig, GError **err)
Get an IPFIX message buffer for writing YAF flows to a named file.
 
void yfFlowCleanup(yfFlow_t *flow)
Clean up after a static flow buffer prepared by yfFlowPrepare().
 
gboolean yfWriteTombstoneFlow(void *yfContext, GError **err)
Write a tombstone options data record to an IPFIX Message buffer.
 
fBuf_t * yfWriterForFP(FILE *fp, const yfConfig_t *yfConfig, GError **err)
Get an IPFIX message buffer for writing YAF flows to an open file pointer.
 
void yfPrintDelimitedString(GString *rstr, const yfFlow_t *flow, gboolean yaft_mac)
Print a YAF flow to a GString in pipe-delimited (columnar) format.
 
void yfFlowPrepare(yfFlow_t *flow)
Prepare a static flow buffer for use with yfReadFlow().
 
gboolean yfPrintDelimited(FILE *out, const yfFlow_t *flow, gboolean yaft_mac, GError **err)
Print a YAF flow to a file in pipe-delimited (columnar) format.
 
struct yfFlowVal_st yfFlowVal_t
A YAF uniflow value.
 
#define ETHERNET_MAC_ADDR_LENGTH
length of Ethernet MAC Address
Definition yafcore.h:175
 
gboolean yfWriteStatsFlow(void *yfContext, uint32_t pcap_drop, GTimer *timer, GError **err)
Write a statistics options data record to an IPFIX Message buffer.
 
fBuf_t * yfReaderForFP(fBuf_t *fbuf, FILE *fp, GError **err)
Get an IPFIX message buffer for reading YAF flows from an open file pointer.
 
struct yfFlow_st yfFlow_t
A YAF flow.
 
gboolean yfWriterClose(fBuf_t *fbuf, gboolean flush, GError **err)
Close the connection underlying an IPFIX message buffer created by yfWriterForFP() or yfWriterForSpec...
 
void yfPrintColumnHeaders(FILE *out, gboolean yaft_mac, GError **err)
Print column headers for the pipe-delimited (columnar) format.
 
fbListener_t * yfListenerForSpec(fbConnSpec_t *spec, fbListenerAppInit_fn appinit, fbListenerAppFree_fn appfree, GError **err)
Get an IPFIX connection listener for collecting YAF flows via IPFIX from the network.
 
struct yfFlowStats_st yfFlowStats_t
yaf enhanced flow statistics