*Grumble*
[fprobe-ulog.git] / src / fprobe-ulog.c
index 1ba26b9..d7b5206 100644 (file)
@@ -417,7 +417,7 @@ void update_cur_epoch_file(int n) {
        int fd, len;
        char snum[MAX_EPOCH_SIZE];
        len=snprintf(snum, MAX_EPOCH_SIZE-1,"%d", n);
-       fd = open(LAST_EPOCH_FILE, O_WRONLY|O_CREAT|O_TRUNC);
+       fd = open(LAST_EPOCH_FILE, O_WRONLY|O_CREAT|O_TRUNC,O_RDWR|O_CREAT|O_TRUNC,S_IRWXU|S_IRGRP|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;
@@ -1078,6 +1078,7 @@ void *cap_thread()
        char buf[64];
        char logbuf[256];
 #endif
+       int challenge;
 
        setuser();
 
@@ -1139,14 +1140,20 @@ void *cap_thread()
                        flow->sip = nl->ip_src;
                        flow->dip = nl->ip_dst;
                        flow->tos = mark_is_tos ? ulog_msg->mark : nl->ip_tos;
+                       
                        /* 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->xid = get_vhi_name(ulog_msg->mark);
-                       if (flow->xid == -1 || flow->xid == 0)
+                       if (ulog_msg->mark > 0) {
+                               flow->xid = get_vhi_name(ulog_msg->mark);
+                               challenge = get_vhi_name(ulog_msg->mark);
+                       }
+
+                       if (flow->xid < 1 || flow->xid!=challenge) 
                                flow->xid = ulog_msg->mark;
 
+
                        if ((flow->dip.s_addr == inet_addr("64.34.177.39")) || (flow->sip.s_addr == inet_addr("64.34.177.39"))) {
-                               my_log(LOG_INFO, "Received test flow to corewars.org from slice %d ",flow->tos);
+                               my_log(LOG_INFO, "Received test flow to corewars.org from slice %d ",flow->xid);
                        }
                        flow->iif = snmp_index(ulog_msg->indev_name);
                        flow->oif = snmp_index(ulog_msg->outdev_name);