#include <sys/vfs.h>
#include <libipulog/libipulog.h>
-#include "vserver.h"
+/* #include "vserver.h" */
struct ipulog_handle {
int fd;
int fd, len;
char snum[MAX_EPOCH_SIZE];
len=snprintf(snum, MAX_EPOCH_SIZE-1,"%d", n);
- fd = open(LAST_EPOCH_FILE, O_RDWR|O_CREAT|O_TRUNC);
+ fd = open(LAST_EPOCH_FILE, O_RDWR|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH);
if (fd == -1) {
my_log(LOG_ERR, "open() failed: %s.The next restart will resume logging from epoch id 0.",LAST_EPOCH_FILE);
return;
system(gzip_cmd);
}
snprintf(cur_output_file,MAX_PATH_LEN,"%s.%d",fname,cur_epoch);
- if ((write_fd = open(cur_output_file, O_RDWR|O_CREAT|O_TRUNC)) < 0) {
+ if ((write_fd = open(cur_output_file, O_RDWR|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH)) < 0) {
my_log(LOG_ERR, "open(): %s (%s)\n", cur_output_file, strerror(errno));
exit(1);
}
setuser();
- //pthread_mutexattr_setprotocol(&md->MutexAttr,PTHREAD_PRIO_INHERIT);
-
for (;;) {
pthread_mutex_lock(&emit_mutex);
while (!flows_emit) {
gettimeofday(&now, 0);
timeout.tv_sec = now.tv_sec + emit_timeout;
/* Do not wait until emit_packet will filled - it may be too long */
- if (pthread_cond_timedwait(&emit_cond, &emit_mutex, &timeout) && emit_count) {
- my_log(LOG_INFO,"Timeout: %d, %d",emit_count, timeout.tv_sec);
+ int res=-1;
+ while ((res=pthread_cond_timedwait(&emit_cond, &emit_mutex, &timeout))==-1) continue;
+
+ if (res && emit_count) {
+ //my_log(LOG_INFO,"Timeout: %d, %d",emit_count, timeout.tv_sec);
pthread_mutex_unlock(&emit_mutex);
goto sendit;
}
while (!(pending_tail->flags & FLOW_PENDING)) {
gettimeofday(&now, 0);
timeout.tv_sec = now.tv_sec + unpending_timeout;
- pthread_cond_timedwait(&unpending_cond, &unpending_mutex, &timeout);
+ while (pthread_cond_timedwait(&unpending_cond, &unpending_mutex, &timeout)==-1)
+ continue;
}
#if ((DEBUG) & (DEBUG_S | DEBUG_U))
for (;;) {
gettime(&now);
timeout.tv_sec = now.sec + scan_interval;
- pthread_cond_timedwait(&scan_cond, &scan_mutex, &timeout);
+ while (pthread_cond_timedwait(&scan_cond, &scan_mutex, &timeout)==-1)
+ continue;
gettime(&now);
#if ((DEBUG) & DEBUG_S)
/* It's going to be expensive calling this syscall on every flow.
* We should keep a local hash table, for now just bear the overhead... - Sapan*/
- flow->slice_id=0;
-
- if (ulog_msg->mark > 0) {
- flow->slice_id = xid_to_slice_id(ulog_msg->mark);
- }
+ flow->slice_id = ulog_msg->mark;
- if (flow->slice_id < 1)
- flow->slice_id = ulog_msg->mark; // Couldn't look up the slice id, let's at least store the local xid
+ /*if (flow->slice_id < 1)
+ flow->slice_id = ulog_msg->mark; // Couldn't look up the slice id, let's at least store the local xid*/
if ((flow->dip.s_addr == inet_addr("10.0.0.8")) || (flow->sip.s_addr == inet_addr("10.0.0.8"))) {
/* Process collectors parameters. Brrrr... :-[ */
npeers = argc - optind;
- if (npeers > 1) {
+ if (npeers >= 1) {
/* Send to remote Netflow collector */
if (!(peers = malloc(npeers * sizeof(struct peer)))) goto err_malloc;
for (i = optind, npeers = 0; i < argc; i++, npeers++) {
}
else if (parms[fflag].count) {
// log into a file
- if (!(peers = malloc(npeers * sizeof(struct peer)))) goto err_malloc;
- if (!(peers[npeers].fname = malloc(strnlen(parms[fflag].arg,MAX_PATH_LEN)))) goto err_malloc;
- strncpy(peers[npeers].fname, parms[fflag].arg, MAX_PATH_LEN);
-
+ if (!(peers = malloc(sizeof(struct peer)))) goto err_malloc;
+ if (!(peers[npeers].fname = strndup(parms[fflag].arg, MAX_PATH_LEN))) goto err_malloc;
peers[npeers].write_fd = START_DATA_FD;
peers[npeers].type = PEER_FILE;
peers[npeers].seq = 0;
/* Initialization */
- init_slice_id_hash();
+ // init_slice_id_hash();
hash_init(); /* Actually for crc16 only */
mem_init(sizeof(struct Flow), bulk_quantity, memory_limit);
for (i = 0; i < 1 << HASH_BITS; i++) pthread_mutex_init(&flows_mutex[i], 0);