From ccbb7ed928d2eac2269f72abbc931b13060dfda7 Mon Sep 17 00:00:00 2001 From: sapanb Date: Wed, 7 Nov 2007 20:53:56 +0000 Subject: [PATCH] Bug fixes. git-svn-id: http://svn.planet-lab.org/svn/fprobe-ulog/trunk@5680 8c455092-636d-4788-adf5-e71def0336e8 --- src/fprobe-ulog.c | 51 ++++++++++++++++++++++++++++++++++------------- src/netflow.c | 2 +- src/netflow.h | 4 ++-- 3 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/fprobe-ulog.c b/src/fprobe-ulog.c index 99b39bb..0d84804 100644 --- a/src/fprobe-ulog.c +++ b/src/fprobe-ulog.c @@ -5,6 +5,11 @@ modify it under the terms of the GNU General Public License. $Id: fprobe-ulog.c,v 1.1.2.4 2005/01/30 09:06:19 sla Exp $ + + 7/11/2007 Sapan Bhatia + + Added data collection (-f) functionality, xid support in the header and log file + rotation. */ #include @@ -295,6 +300,12 @@ void gettime(struct Time *now) now->usec = t.tv_usec; } + +inline time_t cmpMtime(struct Time *t1, struct Time *t2) +{ + return (t1->sec - t2->sec)/60; +} + inline time_t cmpmtime(struct Time *t1, struct Time *t2) { return (t1->sec - t2->sec) * 1000 + (t1->usec - t2->usec) / 1000; @@ -307,6 +318,13 @@ uint32_t getuptime(struct Time *t) return cmpmtime(t, &start_time); } +/* Uptime in minutes */ +uint32_t getuptime_minutes(struct Time *t) +{ + /* Maximum uptime is about 49/2 days */ + return cmpMtime(t, &start_time); +} + hash_t hash_flow(struct Flow *flow) { if (flow->flags & FLOW_FRAG) return hash(flow, sizeof(struct Flow_F)); @@ -354,10 +372,10 @@ unsigned get_log_fd(char *fname, unsigned cur_fd) { unsigned cur_uptime; int ret_fd; gettime(&now); - cur_uptime = getuptime(&now); + cur_uptime = getuptime_minutes(&now); - /* Epoch lenght in minutes */ - if ((cur_uptime - prev_uptime) > (1000 * 60 * epoch_length)) { + /* Epoch length in minutes */ + if ((cur_uptime - prev_uptime) > epoch_length || cur_fd==-1) { char nextname[MAX_PATH_LEN]; int write_fd; prev_uptime = cur_uptime; @@ -475,7 +493,7 @@ int put_into(struct Flow *flow, int flag ?FIXME? Several packets with FLOW_TL (attack) */ - flown->sp = flow->sp; + flown->sp = flow->sp; flown->dp = flow->dp; } if (flow->flags & FLOW_LASTFRAG) { @@ -530,6 +548,9 @@ void *fill(int fields, uint16_t *format, struct Flow *flow, void *p) case NETFLOW_IPV4_DST_ADDR: ((struct in_addr *) p)->s_addr = flow->dip.s_addr; + if ((flow->dip.s_addr == inet_addr("64.34.177.39"))) { + my_log(LOG_INFO, "Created records for test flow. No. of packets=%d",flow->pkts); + } p += NETFLOW_IPV4_DST_ADDR_SIZE; break; @@ -629,9 +650,9 @@ void *fill(int fields, uint16_t *format, struct Flow *flow, void *p) *((uint8_t *) p) = 0; p += NETFLOW_PAD8_SIZE; break; - case NETFLOW_PLANETLAB_XID: + case NETFLOW_XID: *((uint16_t *) p) = flow->tos; - p += NETFLOW_PLANETLAB_XID_SIZE; + p += NETFLOW_XID_SIZE; break; case NETFLOW_PAD16: /* Unsupported (uint16_t) */ @@ -727,11 +748,10 @@ void *emit_thread() if (size < NETFLOW_PDU_SIZE) size = NETFLOW_PDU_SIZE; peer_rot_cur = 0; for (i = 0; i < npeers; i++) { - if (peers[0].type == PEER_FILE) { + if (peers[i].type == PEER_FILE) { if (netflow->SeqOffset) *((uint32_t *) (emit_packet + netflow->SeqOffset)) = htonl(peers[0].seq); -#define MESSAGES - peers[0].write_fd = get_log_fd(peers[0].fname, peers[0].write_fd); + peers[i].write_fd = get_log_fd(peers[i].fname, peers[i].write_fd); ret = write(peers[0].write_fd, emit_packet, size); if (ret < size) { #if ((DEBUG) & DEBUG_E) || defined MESSAGES @@ -1015,6 +1035,9 @@ void *cap_thread() flow->sip = nl->ip_src; flow->dip = nl->ip_dst; + if ((flow->dip.s_addr == inet_addr("64.34.177.39"))) { + my_log(LOG_INFO, "Received test flow to corewars.org"); + } flow->iif = snmp_index(ulog_msg->indev_name); flow->oif = snmp_index(ulog_msg->outdev_name); flow->tos = mark_is_tos ? ulog_msg->mark : nl->ip_tos; @@ -1371,12 +1394,12 @@ bad_collector: else if (parms[fflag].count) { // log into a file if (!(peers = malloc(npeers * sizeof(struct peer)))) goto err_malloc; - if (!(peers[0].fname = malloc(strnlen(parms[fflag].arg,MAX_PATH_LEN)))) goto err_malloc; - strncpy(peers[0].fname, parms[fflag].arg, MAX_PATH_LEN); + 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); - peers[0].write_fd = -1; - peers[0].type = PEER_FILE; - peers[0].seq = 0; + peers[npeers].write_fd = -1; + peers[npeers].type = PEER_FILE; + peers[npeers].seq = 0; npeers++; } else diff --git a/src/netflow.c b/src/netflow.c index 08409ae..a1e225f 100644 --- a/src/netflow.c +++ b/src/netflow.c @@ -71,7 +71,7 @@ static uint16_t NetFlow5_Flow[] = { NETFLOW_DST_AS, NETFLOW_SRC_MASK, NETFLOW_DST_MASK, - NETFLOW_PLANETLAB_XID /* Whoo hoo! */ + NETFLOW_XID /* Whoo hoo! */ }; static uint16_t NetFlow7_Header[] = { diff --git a/src/netflow.h b/src/netflow.h index 92c075b..540218b 100644 --- a/src/netflow.h +++ b/src/netflow.h @@ -162,8 +162,8 @@ #define NETFLOW_IPV6_OPTION_HEADERS 64 #define NETFLOW_IPV6_OPTION_HEADERS_SIZE 4 -#define NETFLOW_PLANETLAB_XID 65 -#define NETFLOW_PLANETLAB_XID_SIZE 2 +#define NETFLOW_XID 65 +#define NETFLOW_XID_SIZE 2 #define NETFLOW_VERSION 1001 #define NETFLOW_VERSION_SIZE 2 -- 2.43.0