bulk commit
parent
d780a49ab0
commit
c26650a990
@ -0,0 +1,351 @@
|
||||
#cimport libc.stdio
|
||||
#cimport posix.fcntl
|
||||
|
||||
cdef extern from "ftlib.h":
|
||||
ctypedef unsigned long long u_int64
|
||||
ctypedef unsigned int u_int32
|
||||
ctypedef unsigned short u_int16
|
||||
ctypedef unsigned char u_int8
|
||||
|
||||
struct fts3rec_all:
|
||||
u_int32 *unix_secs
|
||||
u_int32 *unix_nsecs
|
||||
u_int32 *sysUpTime
|
||||
u_int32 *exaddr
|
||||
u_int32 *srcaddr
|
||||
u_int32 *dstaddr
|
||||
u_int32 *nexthop
|
||||
u_int16 *input
|
||||
u_int16 *output
|
||||
u_int32 *dFlows
|
||||
u_int32 *dPkts
|
||||
u_int32 *dOctets
|
||||
u_int32 *First
|
||||
u_int32 *Last
|
||||
u_int16 *srcport
|
||||
u_int16 *dstport
|
||||
u_int8 *prot
|
||||
u_int8 *tos
|
||||
u_int8 *tcp_flags
|
||||
u_int8 *engine_type
|
||||
u_int8 *engine_id
|
||||
u_int8 *src_mask
|
||||
u_int8 *dst_mask
|
||||
u_int16 *src_as
|
||||
u_int16 *dst_as
|
||||
u_int8 *in_encaps
|
||||
u_int8 *out_encaps
|
||||
u_int32 *peer_nexthop
|
||||
u_int32 *router_sc
|
||||
u_int32 *src_tag
|
||||
u_int32 *dst_tag
|
||||
u_int32 *extra_pkts
|
||||
u_int8 *marked_tos
|
||||
|
||||
struct ftio:
|
||||
pass
|
||||
|
||||
struct fts3rec_offsets:
|
||||
pass
|
||||
|
||||
struct ftver:
|
||||
pass
|
||||
|
||||
cdef enum ft_xfields:
|
||||
FT_XFIELD_UNIX_SECS = 0x0000000000000001LL
|
||||
FT_XFIELD_UNIX_NSECS = 0x0000000000000002LL
|
||||
FT_XFIELD_SYSUPTIME = 0x0000000000000004LL
|
||||
FT_XFIELD_EXADDR = 0x0000000000000008LL
|
||||
FT_XFIELD_DFLOWS = 0x0000000000000010LL
|
||||
FT_XFIELD_DPKTS = 0x0000000000000020LL
|
||||
FT_XFIELD_DOCTETS = 0x0000000000000040LL
|
||||
FT_XFIELD_FIRST = 0x0000000000000080LL
|
||||
FT_XFIELD_LAST = 0x0000000000000100LL
|
||||
FT_XFIELD_ENGINE_TYPE = 0x0000000000000200LL
|
||||
FT_XFIELD_ENGINE_ID = 0x0000000000000400LL
|
||||
FT_XFIELD_SRCADDR = 0x0000000000001000LL
|
||||
FT_XFIELD_DSTADDR = 0x0000000000002000LL
|
||||
FT_XFIELD_NEXTHOP = 0x0000000000010000LL
|
||||
FT_XFIELD_INPUT = 0x0000000000020000LL
|
||||
FT_XFIELD_OUTPUT = 0x0000000000040000LL
|
||||
FT_XFIELD_SRCPORT = 0x0000000000080000LL
|
||||
FT_XFIELD_DSTPORT = 0x0000000000100000LL
|
||||
FT_XFIELD_PROT = 0x0000000000200000LL
|
||||
FT_XFIELD_TOS = 0x0000000000400000LL
|
||||
FT_XFIELD_TCP_FLAGS = 0x0000000000800000LL
|
||||
FT_XFIELD_SRC_MASK = 0x0000000001000000LL
|
||||
FT_XFIELD_DST_MASK = 0x0000000002000000LL
|
||||
FT_XFIELD_SRC_AS = 0x0000000004000000LL
|
||||
FT_XFIELD_DST_AS = 0x0000000008000000LL
|
||||
FT_XFIELD_IN_ENCAPS = 0x0000000010000000LL
|
||||
FT_XFIELD_OUT_ENCAPS = 0x0000000020000000LL
|
||||
FT_XFIELD_PEER_NEXTHOP = 0x0000000040000000LL
|
||||
FT_XFIELD_ROUTER_SC = 0x0000000080000000LL
|
||||
FT_XFIELD_EXTRA_PKTS = 0x0000000100000000LL
|
||||
FT_XFIELD_MARKED_TOS = 0x0000000200000000LL
|
||||
FT_XFIELD_SRC_TAG = 0x0000000400000000LL
|
||||
FT_XFIELD_DST_TAG = 0x0000000800000000LL
|
||||
|
||||
cdef extern from "include/ftreader.h":
|
||||
struct ft_data:
|
||||
int fd
|
||||
ftio io
|
||||
fts3rec_offsets offsets
|
||||
ftver version
|
||||
u_int64 xfield
|
||||
int rec_size
|
||||
char **records
|
||||
int numrecords
|
||||
|
||||
ft_data *ft_open(char *filename)
|
||||
void ft_write(ft_data *data, char *filename)
|
||||
void ft_records_get_all(ft_data* data, int number, fts3rec_all *record)
|
||||
u_int32 *ft_records_get_unix_secs(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_unix_nsecs(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_sysUpTime(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_exaddr(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_srcaddr(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_dstaddr(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_nexthop(ft_data* data, int number)
|
||||
u_int16 *ft_records_get_input(ft_data* data, int number)
|
||||
u_int16 *ft_records_get_output(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_dFlows(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_dPkts(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_dOctets(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_First(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_Last(ft_data* data, int number)
|
||||
u_int16 *ft_records_get_srcport(ft_data* data, int number)
|
||||
u_int16 *ft_records_get_dstport(ft_data* data, int number)
|
||||
u_int8 *ft_records_get_prot(ft_data* data, int number)
|
||||
u_int8 *ft_records_get_tos(ft_data* data, int number)
|
||||
u_int8 *ft_records_get_tcp_flags(ft_data* data, int number)
|
||||
u_int8 *ft_records_get_engine_type(ft_data* data, int number)
|
||||
u_int8 *ft_records_get_engine_id(ft_data* data, int number)
|
||||
u_int8 *ft_records_get_src_mask(ft_data* data, int number)
|
||||
u_int8 *ft_records_get_dst_mask(ft_data* data, int number)
|
||||
u_int16 *ft_records_get_src_as(ft_data* data, int number)
|
||||
u_int16 *ft_records_get_dst_as(ft_data* data, int number)
|
||||
u_int8 *ft_records_get_in_encaps(ft_data* data, int number)
|
||||
u_int8 *ft_records_get_out_encaps(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_peer_nexthop(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_router_sc(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_src_tag(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_dst_tag(ft_data* data, int number)
|
||||
u_int32 *ft_records_get_extra_pkts(ft_data* data, int number)
|
||||
u_int8 *ft_records_get_marked_tos(ft_data* data, int number)
|
||||
|
||||
cdef class FtReader:
|
||||
cdef ft_data *data
|
||||
|
||||
def __init__(self, filename):
|
||||
self.data = ft_open(filename)
|
||||
|
||||
def get_numrecords(self):
|
||||
return self.data.numrecords
|
||||
|
||||
def supports_attr(self, attr):
|
||||
if attr == "unix_secs":
|
||||
return bool(self.data.xfield & FT_XFIELD_UNIX_SECS)
|
||||
elif attr == "unix_nsecs":
|
||||
return bool(self.data.xfield & FT_XFIELD_UNIX_NSECS)
|
||||
elif attr == "sysUpTime":
|
||||
return bool(self.data.xfield & FT_XFIELD_SYSUPTIME)
|
||||
elif attr == "exaddr":
|
||||
return bool(self.data.xfield & FT_XFIELD_EXADDR)
|
||||
elif attr == "srcaddr":
|
||||
return bool(self.data.xfield & FT_XFIELD_SRCADDR)
|
||||
elif attr == "dstaddr":
|
||||
return bool(self.data.xfield & FT_XFIELD_DSTADDR)
|
||||
elif attr == "nexthop":
|
||||
return bool(self.data.xfield & FT_XFIELD_NEXTHOP)
|
||||
elif attr == "input":
|
||||
return bool(self.data.xfield & FT_XFIELD_INPUT)
|
||||
elif attr == "output":
|
||||
return bool(self.data.xfield & FT_XFIELD_OUTPUT)
|
||||
elif attr == "dFlows":
|
||||
return bool(self.data.xfield & FT_XFIELD_DFLOWS)
|
||||
elif attr == "dPkts":
|
||||
return bool(self.data.xfield & FT_XFIELD_DPKTS)
|
||||
elif attr == "dOctets":
|
||||
return bool(self.data.xfield & FT_XFIELD_DOCTETS)
|
||||
elif attr == "First":
|
||||
return bool(self.data.xfield & FT_XFIELD_FIRST)
|
||||
elif attr == "Last":
|
||||
return bool(self.data.xfield & FT_XFIELD_LAST)
|
||||
elif attr == "srcport":
|
||||
return bool(self.data.xfield & FT_XFIELD_SRCPORT)
|
||||
elif attr == "dstport":
|
||||
return bool(self.data.xfield & FT_XFIELD_DSTPORT)
|
||||
elif attr == "prot":
|
||||
return bool(self.data.xfield & FT_XFIELD_PROT)
|
||||
elif attr == "tos":
|
||||
return bool(self.data.xfield & FT_XFIELD_TOS)
|
||||
elif attr == "tcp_flags":
|
||||
return bool(self.data.xfield & FT_XFIELD_TCP_FLAGS)
|
||||
elif attr == "engine_type":
|
||||
return bool(self.data.xfield & FT_XFIELD_ENGINE_TYPE)
|
||||
elif attr == "engine_id":
|
||||
return bool(self.data.xfield & FT_XFIELD_ENGINE_ID)
|
||||
elif attr == "src_mask":
|
||||
return bool(self.data.xfield & FT_XFIELD_SRC_MASK)
|
||||
elif attr == "dst_mask":
|
||||
return bool(self.data.xfield & FT_XFIELD_DST_MASK)
|
||||
elif attr == "src_as":
|
||||
return bool(self.data.xfield & FT_XFIELD_SRC_AS)
|
||||
elif attr == "dst_as":
|
||||
return bool(self.data.xfield & FT_XFIELD_DST_AS)
|
||||
elif attr == "in_encaps":
|
||||
return bool(self.data.xfield & FT_XFIELD_IN_ENCAPS)
|
||||
elif attr == "out_encaps":
|
||||
return bool(self.data.xfield & FT_XFIELD_OUT_ENCAPS)
|
||||
elif attr == "peer_nexthop":
|
||||
return bool(self.data.xfield & FT_XFIELD_PEER_NEXTHOP)
|
||||
elif attr == "router_sc":
|
||||
return bool(self.data.xfield & FT_XFIELD_ROUTER_SC)
|
||||
elif attr == "src_tag":
|
||||
return bool(self.data.xfield & FT_XFIELD_SRC_TAG)
|
||||
elif attr == "dst_tag":
|
||||
return bool(self.data.xfield & FT_XFIELD_DST_TAG)
|
||||
elif attr == "extra_pkts":
|
||||
return bool(self.data.xfield & FT_XFIELD_EXTRA_PKTS)
|
||||
elif attr == "marked_tos":
|
||||
return bool(self.data.xfield & FT_XFIELD_MARKED_TOS)
|
||||
else:
|
||||
return False
|
||||
|
||||
def get_record(self, num):
|
||||
cdef fts3rec_all record
|
||||
ft_records_get_all(self.data, num, &record)
|
||||
return (record.unix_secs[0],
|
||||
record.unix_nsecs[0],
|
||||
record.sysUpTime[0],
|
||||
record.exaddr[0],
|
||||
record.srcaddr[0],
|
||||
record.dstaddr[0],
|
||||
record.nexthop[0],
|
||||
record.input[0],
|
||||
record.output[0],
|
||||
record.dFlows[0],
|
||||
record.dPkts[0],
|
||||
record.dOctets[0],
|
||||
record.First[0],
|
||||
record.Last[0],
|
||||
record.srcport[0],
|
||||
record.dstport[0],
|
||||
record.prot[0],
|
||||
record.tos[0],
|
||||
record.tcp_flags[0],
|
||||
record.engine_type[0],
|
||||
record.engine_id[0],
|
||||
record.src_mask[0],
|
||||
record.dst_mask[0],
|
||||
record.src_as[0],
|
||||
record.dst_as[0],
|
||||
record.in_encaps[0],
|
||||
record.out_encaps[0],
|
||||
record.peer_nexthop[0],
|
||||
record.router_sc[0],
|
||||
record.src_tag[0],
|
||||
record.dst_tag[0],
|
||||
record.extra_pkts[0],
|
||||
record.marked_tos[0]
|
||||
)
|
||||
|
||||
def get_unix_secs(self, num):
|
||||
return ft_records_get_unix_secs(self.data, num)[0]
|
||||
|
||||
def get_unix_nsecs(self, num):
|
||||
return ft_records_get_unix_nsecs(self.data, num)[0]
|
||||
|
||||
def get_sysUpTime(self, num):
|
||||
return ft_records_get_sysUpTime(self.data, num)[0]
|
||||
|
||||
def get_exaddr(self, num):
|
||||
return ft_records_get_exaddr(self.data, num)[0]
|
||||
|
||||
def get_srcaddr(self, num):
|
||||
return ft_records_get_srcaddr(self.data, num)[0]
|
||||
|
||||
def get_dstaddr(self, num):
|
||||
return ft_records_get_dstaddr(self.data, num)[0]
|
||||
|
||||
def get_nexthop(self, num):
|
||||
return ft_records_get_nexthop(self.data, num)[0]
|
||||
|
||||
def get_input(self, num):
|
||||
return ft_records_get_input(self.data, num)[0]
|
||||
|
||||
def get_output(self, num):
|
||||
return ft_records_get_output(self.data, num)[0]
|
||||
|
||||
def get_dFlows(self, num):
|
||||
return ft_records_get_dFlows(self.data, num)[0]
|
||||
|
||||
def get_dPkts(self, num):
|
||||
return ft_records_get_dPkts(self.data, num)[0]
|
||||
|
||||
def get_dOctets(self, num):
|
||||
return ft_records_get_dOctets(self.data, num)[0]
|
||||
|
||||
def get_First(self, num):
|
||||
return ft_records_get_First(self.data, num)[0]
|
||||
|
||||
def get_Last(self, num):
|
||||
return ft_records_get_Last(self.data, num)[0]
|
||||
|
||||
def get_srcport(self, num):
|
||||
return ft_records_get_srcport(self.data, num)[0]
|
||||
|
||||
def get_dstport(self, num):
|
||||
return ft_records_get_dstport(self.data, num)[0]
|
||||
|
||||
def get_prot(self, num):
|
||||
return ft_records_get_prot(self.data, num)[0]
|
||||
|
||||
def get_tos(self, num):
|
||||
return ft_records_get_tos(self.data, num)[0]
|
||||
|
||||
def get_tcp_flags(self, num):
|
||||
return ft_records_get_tcp_flags(self.data, num)[0]
|
||||
|
||||
def get_engine_type(self, num):
|
||||
return ft_records_get_engine_type(self.data, num)[0]
|
||||
|
||||
def get_engine_id(self, num):
|
||||
return ft_records_get_engine_id(self.data, num)[0]
|
||||
|
||||
def get_src_mask(self, num):
|
||||
return ft_records_get_src_mask(self.data, num)[0]
|
||||
|
||||
def get_dst_mask(self, num):
|
||||
return ft_records_get_dst_mask(self.data, num)[0]
|
||||
|
||||
def get_src_as(self, num):
|
||||
return ft_records_get_src_as(self.data, num)[0]
|
||||
|
||||
def get_dst_as(self, num):
|
||||
return ft_records_get_dst_as(self.data, num)[0]
|
||||
|
||||
def get_in_encaps(self, num):
|
||||
return ft_records_get_in_encaps(self.data, num)[0]
|
||||
|
||||
def get_out_encaps(self, num):
|
||||
return ft_records_get_out_encaps(self.data, num)[0]
|
||||
|
||||
def get_peer_nexthop(self, num):
|
||||
return ft_records_get_peer_nexthop(self.data, num)[0]
|
||||
|
||||
def get_router_sc(self, num):
|
||||
return ft_records_get_router_sc(self.data, num)[0]
|
||||
|
||||
def get_src_tag(self, num):
|
||||
return ft_records_get_src_tag(self.data, num)[0]
|
||||
|
||||
def get_dst_tag(self, num):
|
||||
return ft_records_get_dst_tag(self.data, num)[0]
|
||||
|
||||
def get_extra_pkts(self, num):
|
||||
return ft_records_get_extra_pkts(self.data, num)[0]
|
||||
|
||||
def get_marked_tos(self, num):
|
||||
return ft_records_get_marked_tos(self.data, num)[0]
|
@ -0,0 +1,67 @@
|
||||
#include <ftlib.h>
|
||||
|
||||
#ifndef __FTREADER_H
|
||||
#define __FTREADER_H
|
||||
|
||||
/*
|
||||
struct ft_data_offsets {
|
||||
const char *name;
|
||||
size_t offset;
|
||||
size_t size;
|
||||
u_int64 xfield;
|
||||
};
|
||||
*/
|
||||
|
||||
struct ft_data {
|
||||
int fd;
|
||||
struct ftio io;
|
||||
struct fts3rec_offsets offsets;
|
||||
struct ftver version;
|
||||
u_int64 xfield;
|
||||
int rec_size;
|
||||
char **records;
|
||||
int numrecords;
|
||||
};
|
||||
|
||||
struct ft_data *ft_open(char *filename);
|
||||
void ft_write(struct ft_data *data, char *filename);
|
||||
|
||||
void ft_records_get_all(struct ft_data* data, int number, struct fts3rec_all *record);
|
||||
|
||||
u_int32 *ft_records_get_unix_secs(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_unix_nsecs(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_sysUpTime(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_exaddr(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_srcaddr(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_dstaddr(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_nexthop(struct ft_data* data, int number);
|
||||
u_int16 *ft_records_get_input(struct ft_data* data, int number);
|
||||
u_int16 *ft_records_get_output(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_dFlows(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_dPkts(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_dOctets(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_First(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_Last(struct ft_data* data, int number);
|
||||
u_int16 *ft_records_get_srcport(struct ft_data* data, int number);
|
||||
u_int16 *ft_records_get_dstport(struct ft_data* data, int number);
|
||||
u_int8 *ft_records_get_prot(struct ft_data* data, int number);
|
||||
u_int8 *ft_records_get_tos(struct ft_data* data, int number);
|
||||
u_int8 *ft_records_get_tcp_flags(struct ft_data* data, int number);
|
||||
u_int8 *ft_records_get_engine_type(struct ft_data* data, int number);
|
||||
u_int8 *ft_records_get_engine_id(struct ft_data* data, int number);
|
||||
u_int8 *ft_records_get_src_mask(struct ft_data* data, int number);
|
||||
u_int8 *ft_records_get_dst_mask(struct ft_data* data, int number);
|
||||
u_int16 *ft_records_get_src_as(struct ft_data* data, int number);
|
||||
u_int16 *ft_records_get_dst_as(struct ft_data* data, int number);
|
||||
u_int8 *ft_records_get_in_encaps(struct ft_data* data, int number);
|
||||
u_int8 *ft_records_get_out_encaps(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_peer_nexthop(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_router_sc(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_src_tag(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_dst_tag(struct ft_data* data, int number);
|
||||
u_int32 *ft_records_get_extra_pkts(struct ft_data* data, int number);
|
||||
u_int8 *ft_records_get_marked_tos(struct ft_data* data, int number);
|
||||
|
||||
void ft_close(struct ft_data* data);
|
||||
|
||||
#endif
|
@ -0,0 +1,325 @@
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "ftreader.h"
|
||||
|
||||
struct ft_data *ft_open(char *filename)
|
||||
{
|
||||
int ret;
|
||||
struct ft_data *data;
|
||||
char *record;
|
||||
|
||||
data = (struct ft_data *)calloc(1, sizeof(struct ft_data));
|
||||
|
||||
data->fd = STDIN_FILENO;
|
||||
|
||||
if (filename && strcmp(filename, "-") != 0) {
|
||||
data->fd = open(filename, O_RDONLY);
|
||||
if (data->fd == -1) {
|
||||
perror("could not open file");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
ret = ftio_init(&data->io, data->fd, FT_IO_FLAG_READ);
|
||||
if (ret < 0) {
|
||||
perror("ftio_init failed");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ftio_get_ver(&data->io, &data->version);
|
||||
data->xfield = ftio_xfield(&data->io);
|
||||
fts3rec_compute_offsets(&data->offsets, &data->version);
|
||||
data->rec_size = ftio_rec_size(&data->io);
|
||||
|
||||
/*
|
||||
* TODO: optimize the reallocs here (eg by doubling the space every time
|
||||
* one runs out of it)
|
||||
*
|
||||
* TODO: maybe allocate everything in one big chunk for faster iteration
|
||||
*
|
||||
*/
|
||||
|
||||
while ((record = ftio_read(&data->io)) != NULL) {
|
||||
data->numrecords++;
|
||||
data->records = (char **)realloc(data->records, sizeof(char *)*data->numrecords);
|
||||
data->records[data->numrecords-1] = (char *)malloc(data->rec_size);
|
||||
memcpy(data->records[data->numrecords-1], record, data->rec_size);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
void ft_write(struct ft_data *data, char *filename)
|
||||
{
|
||||
struct ftset ftset;
|
||||
int outfd;
|
||||
int ret, i;
|
||||
struct ftio ftio_out;
|
||||
|
||||
outfd = STDOUT_FILENO;
|
||||
|
||||
ftset_init(&ftset, 0);
|
||||
|
||||
ftset.comments = ftio_get_comment(&data->io); // TODO: make configureable
|
||||
ftset.byte_order = FT_HEADER_LITTLE_ENDIAN; // TODO: make configureable
|
||||
ftset.z_level = 6; // from 0-9 TODO: make configureable
|
||||
|
||||
if (filename && strcmp(filename, "-") != 0) {
|
||||
outfd = open(filename, O_WRONLY|O_CREAT|O_TRUNC, 0644);
|
||||
if (outfd == -1) {
|
||||
}
|
||||
}
|
||||
|
||||
ret = ftio_init(&ftio_out, outfd, FT_IO_FLAG_WRITE | ((ftset.z_level) ? FT_IO_FLAG_ZINIT : 0));
|
||||
if (ret < 0) {
|
||||
perror("ftio_init() failed");
|
||||
return;
|
||||
}
|
||||
|
||||
ftio_set_byte_order(&ftio_out, ftset.byte_order);
|
||||
ftio_set_z_level(&ftio_out, ftset.z_level);
|
||||
ftio_set_streaming(&ftio_out, 0);
|
||||
ftio_set_debug(&ftio_out, 0); // TODO: make configureable
|
||||
|
||||
ftio_set_preloaded(&ftio_out, 1);
|
||||
ftio_set_cap_time(&ftio_out, ftio_get_cap_start(&data->io), ftio_get_cap_end(&data->io));
|
||||
ftio_set_flows_count(&ftio_out, data->numrecords);
|
||||
ftio_set_corrupt(&ftio_out, ftio_get_corrupt(&data->io));
|
||||
ftio_set_lost(&ftio_out, ftio_get_lost(&data->io));
|
||||
|
||||
ret = ftio_set_comment(&ftio_out, ftset.comments);
|
||||
ret = ftio_set_ver(&ftio_out, &data->version);
|
||||
ret = ftio_write_header(&ftio_out);
|
||||
|
||||
for (i = 0; i < data->numrecords; i++) {
|
||||
ret = ftio_write(&ftio_out, data->records[i]);
|
||||
}
|
||||
|
||||
ret = ftio_close(&ftio_out);
|
||||
close(outfd);
|
||||
}
|
||||
|
||||
void ft_records_get_all(struct ft_data* data, int number, struct fts3rec_all *record)
|
||||
{
|
||||
record->unix_secs = ft_records_get_unix_secs(data, number);
|
||||
record->unix_nsecs = ft_records_get_unix_nsecs(data, number);
|
||||
record->sysUpTime = ft_records_get_sysUpTime(data, number);
|
||||
record->exaddr = ft_records_get_exaddr(data, number);
|
||||
record->srcaddr = ft_records_get_srcaddr(data, number);
|
||||
record->dstaddr = ft_records_get_dstaddr(data, number);
|
||||
record->nexthop = ft_records_get_nexthop(data, number);
|
||||
record->input = ft_records_get_input(data, number);
|
||||
record->output = ft_records_get_output(data, number);
|
||||
record->dFlows = ft_records_get_dFlows(data, number);
|
||||
record->dPkts = ft_records_get_dPkts(data, number);
|
||||
record->dOctets = ft_records_get_dOctets(data, number);
|
||||
record->First = ft_records_get_First(data, number);
|
||||
record->Last = ft_records_get_Last(data, number);
|
||||
record->srcport = ft_records_get_srcport(data, number);
|
||||
record->dstport = ft_records_get_dstport(data, number);
|
||||
record->prot = ft_records_get_prot(data, number);
|
||||
record->tos = ft_records_get_tos(data, number);
|
||||
record->tcp_flags = ft_records_get_tcp_flags(data, number);
|
||||
record->engine_type = ft_records_get_engine_type(data, number);
|
||||
record->engine_id = ft_records_get_engine_id(data, number);
|
||||
record->src_mask = ft_records_get_src_mask(data, number);
|
||||
record->dst_mask = ft_records_get_dst_mask(data, number);
|
||||
record->src_as = ft_records_get_src_as(data, number);
|
||||
record->dst_as = ft_records_get_dst_as(data, number);
|
||||
record->in_encaps = ft_records_get_in_encaps(data, number);
|
||||
record->out_encaps = ft_records_get_out_encaps(data, number);
|
||||
record->peer_nexthop = ft_records_get_peer_nexthop(data, number);
|
||||
record->router_sc = ft_records_get_router_sc(data, number);
|
||||
record->src_tag = ft_records_get_src_tag(data, number);
|
||||
record->dst_tag = ft_records_get_dst_tag(data, number);
|
||||
record->extra_pkts = ft_records_get_extra_pkts(data, number);
|
||||
record->marked_tos = ft_records_get_marked_tos(data, number);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_unix_secs(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.unix_secs);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_unix_nsecs(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.unix_nsecs);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_sysUpTime(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.sysUpTime);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_exaddr(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.exaddr);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_srcaddr(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.srcaddr);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_dstaddr(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.dstaddr);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_nexthop(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.nexthop);
|
||||
}
|
||||
|
||||
u_int16 *ft_records_get_input(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int16 *)(data->records[number] + data->offsets.input);
|
||||
}
|
||||
|
||||
u_int16 *ft_records_get_output(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int16 *)(data->records[number] + data->offsets.output);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_dFlows(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.dFlows);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_dPkts(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.dPkts);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_dOctets(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.dOctets);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_First(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.First);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_Last(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.Last);
|
||||
}
|
||||
|
||||
u_int16 *ft_records_get_srcport(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int16 *)(data->records[number] + data->offsets.srcport);
|
||||
}
|
||||
|
||||
u_int16 *ft_records_get_dstport(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int16 *)(data->records[number] + data->offsets.dstport);
|
||||
}
|
||||
|
||||
u_int8 *ft_records_get_prot(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int8 *)(data->records[number] + data->offsets.prot);
|
||||
}
|
||||
|
||||
u_int8 *ft_records_get_tos(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int8 *)(data->records[number] + data->offsets.tos);
|
||||
}
|
||||
|
||||
u_int8 *ft_records_get_tcp_flags(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int8 *)(data->records[number] + data->offsets.tcp_flags);
|
||||
}
|
||||
|
||||
u_int8 *ft_records_get_engine_type(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int8 *)(data->records[number] + data->offsets.engine_type);
|
||||
}
|
||||
|
||||
u_int8 *ft_records_get_engine_id(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int8 *)(data->records[number] + data->offsets.engine_id);
|
||||
}
|
||||
|
||||
u_int8 *ft_records_get_src_mask(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int8 *)(data->records[number] + data->offsets.src_mask);
|
||||
}
|
||||
|
||||
u_int8 *ft_records_get_dst_mask(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int8 *)(data->records[number] + data->offsets.dst_mask);
|
||||
}
|
||||
|
||||
u_int16 *ft_records_get_src_as(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int16 *)(data->records[number] + data->offsets.src_as);
|
||||
}
|
||||
|
||||
u_int16 *ft_records_get_dst_as(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int16 *)(data->records[number] + data->offsets.dst_as);
|
||||
}
|
||||
|
||||
u_int8 *ft_records_get_in_encaps(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int8 *)(data->records[number] + data->offsets.in_encaps);
|
||||
}
|
||||
|
||||
u_int8 *ft_records_get_out_encaps(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int8 *)(data->records[number] + data->offsets.out_encaps);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_peer_nexthop(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.peer_nexthop);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_router_sc(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.router_sc);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_src_tag(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.src_tag);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_dst_tag(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.dst_tag);
|
||||
}
|
||||
|
||||
u_int32 *ft_records_get_extra_pkts(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int32 *)(data->records[number] + data->offsets.extra_pkts);
|
||||
}
|
||||
|
||||
u_int8 *ft_records_get_marked_tos(struct ft_data* data, int number)
|
||||
{
|
||||
return (u_int8 *)(data->records[number] + data->offsets.marked_tos);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ft_close(struct ft_data* data)
|
||||
{
|
||||
int i;
|
||||
|
||||
ftio_close(&data->io);
|
||||
|
||||
for (i=0; i<data->numrecords; i++) {
|
||||
free(data->records[i]);
|
||||
}
|
||||
free(data->records);
|
||||
|
||||
if(data->fd) {
|
||||
close(data->fd);
|
||||
}
|
||||
free(data);
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from distutils.core import setup
|
||||
from distutils.extension import Extension
|
||||
from Cython.Distutils import build_ext
|
||||
|
||||
sourcefiles = ['ftreader.pyx', 'lib/ftreader.c']
|
||||
|
||||
ext_modules = [Extension('ftreader', sourcefiles,
|
||||
libraries=['ft'],
|
||||
include_dirs=['include']
|
||||
#include_dirs=['/usr/include/gwenhywfar4', '/usr/include/aqbanking5', ],
|
||||
#extra_compile_args=['-Wno-cast-qual', '-Wno-strict-prototypes', ],
|
||||
)]
|
||||
|
||||
setup(
|
||||
name = 'flowy',
|
||||
version='1.32',
|
||||
description='flowy network traffic analyzer',
|
||||
long_description='''
|
||||
put a longer description here
|
||||
''',
|
||||
cmdclass = {'build_ext': build_ext},
|
||||
ext_modules = ext_modules,
|
||||
download_url='http://pyneo.org/downloads/',
|
||||
author='Johannes Schauer',
|
||||
author_email='j.schauer@jacobs-university.de',
|
||||
url='http://pyneo.org/',
|
||||
data_files=[
|
||||
('share/pyneod', ('pybankd.py', )),
|
||||
],
|
||||
)
|
||||
|
||||
|
Loading…
Reference in New Issue