mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
89 lines
1.7 KiB
C++
89 lines
1.7 KiB
C++
// $Id: FlowSrc.h 4618 2007-07-09 18:12:32Z bager $
|
|
//
|
|
// See the file "COPYING" in the main distribution directory for copyright.
|
|
//
|
|
// Written by Bernhard Ager, TU Berlin (2006/2007).
|
|
|
|
#ifndef flowsrc_h
|
|
#define flowsrc_h
|
|
|
|
#include "IOSource.h"
|
|
#include "NetVar.h"
|
|
#include "binpac.h"
|
|
|
|
#define BRO_FLOW_ERRBUF_SIZE 512
|
|
|
|
// TODO: 1500 is enough for v5 - how about the others?
|
|
// 65536 would be enough for any UDP packet.
|
|
#define NF_MAX_PKT_SIZE 8192
|
|
|
|
struct FlowFileSrcPDUHeader {
|
|
double network_time;
|
|
int pdu_length;
|
|
uint32 ipaddr;
|
|
};
|
|
|
|
// Avoid including netflow_pac.h by explicitly declaring the NetFlow_Analyzer.
|
|
namespace binpac {
|
|
namespace NetFlow {
|
|
class NetFlow_Analyzer;
|
|
}
|
|
}
|
|
|
|
class FlowSrc : public IOSource {
|
|
public:
|
|
virtual ~FlowSrc();
|
|
|
|
// IOSource interface:
|
|
bool IsReady();
|
|
void GetFds(int* read, int* write, int* except);
|
|
double NextTimestamp(double* network_time);
|
|
void Process();
|
|
|
|
const char* Tag() { return "FlowSrc"; }
|
|
const char* ErrorMsg() const { return errbuf; }
|
|
|
|
protected:
|
|
FlowSrc();
|
|
|
|
virtual int ExtractNextPDU() = 0;
|
|
virtual void Close();
|
|
|
|
int selectable_fd;
|
|
|
|
double current_timestamp;
|
|
double next_timestamp;
|
|
binpac::NetFlow::NetFlow_Analyzer* netflow_analyzer;
|
|
|
|
u_char buffer[NF_MAX_PKT_SIZE];
|
|
u_char* data;
|
|
int pdu_len;
|
|
uint32 exporter_ip; // in network byte order
|
|
|
|
char errbuf[BRO_FLOW_ERRBUF_SIZE];
|
|
};
|
|
|
|
class FlowSocketSrc : public FlowSrc {
|
|
public:
|
|
FlowSocketSrc(const char* listen_parms);
|
|
virtual ~FlowSocketSrc();
|
|
|
|
int ExtractNextPDU();
|
|
|
|
protected:
|
|
char* listenparms;
|
|
};
|
|
|
|
class FlowFileSrc : public FlowSrc {
|
|
public:
|
|
FlowFileSrc(const char* readfile);
|
|
~FlowFileSrc();
|
|
|
|
int ExtractNextPDU();
|
|
|
|
protected:
|
|
int Error(int errlvl, const char* errmsg);
|
|
char* readfile;
|
|
};
|
|
|
|
#endif
|