static void test_track(void) { struct peak_tracks *tracker; struct peak_packet packet; struct netaddr usr1, usr2; struct peak_track _flow; struct peak_track *flow; memset(&packet, 0, sizeof(packet)); netaddr4(&usr1, 0); netaddr4(&usr2, 1); tracker = peak_track_init(2); assert(tracker); packet.net_saddr = usr1; packet.net_daddr = usr2; packet.flow_sport = 80; packet.flow_dport = 51000; TRACK_KEY(&_flow, &packet); flow = peak_track_acquire(tracker, &_flow); assert(flow); assert(flow == peak_track_acquire(tracker, &_flow)); assert(flow == peak_track_acquire(tracker, flow)); packet.net_saddr = usr2; packet.net_daddr = usr1; packet.flow_sport = 51000; packet.flow_dport = 80; TRACK_KEY(&_flow, &packet); assert(flow == peak_track_acquire(tracker, &_flow)); packet.net_saddr = usr1; packet.net_daddr = usr2; packet.flow_sport = 51000; packet.flow_dport = 80; TRACK_KEY(&_flow, &packet); assert(flow != peak_track_acquire(tracker, &_flow)); packet.net_saddr = usr1; packet.net_daddr = usr2; packet.flow_sport = 51000; packet.flow_dport = 80; packet.net_type = 1; TRACK_KEY(&_flow, &packet); assert(peak_track_acquire(tracker, &_flow)); peak_track_exit(tracker); }
int main(int argc, char **argv) { struct peak_tracks *peek; struct peak_load *trace; timeslice_t timer; int c; while ((c = getopt(argc, argv, "AafNnt")) != -1) { switch (c) { case 'A': use_print[use_count++] = USE_APP_LEN; break; case 'a': use_print[use_count++] = USE_APP; break; case 'f': use_print[use_count++] = USE_FLOW; break; case 'N': use_print[use_count++] = USE_IP_LEN; break; case 'n': use_print[use_count++] = USE_IP_TYPE; break; case 't': use_print[use_count++] = USE_TIME; break; default: usage(); /* NOTREACHED */ } if (use_count > USE_MAX) { usage(); /* NOTREACHED */ } } argc -= optind; argv += optind; if (argc < 1) { usage(); /* NOTREACHED */ } if (!use_count) { /* set the default output (as used by tests) */ use_print[use_count++] = USE_FLOW; use_print[use_count++] = USE_IP_TYPE; use_print[use_count++] = USE_IP_LEN; use_print[use_count++] = USE_APP; use_print[use_count++] = USE_TIME; } trace = peak_load_init(argv[0]); if (!trace) { panic("cannot init file loader\n"); } peek = peak_track_init(10000, 1); if (!peek) { panic("cannot init flow tracker\n"); } TIMESLICE_INIT(&timer); if (peak_load_packet(trace)) { TIMESLICE_CALIBRATE(&timer, &trace->ts); do { TIMESLICE_ADVANCE(&timer, &trace->ts); peek_packet(peek, &timer, trace->buf, trace->len, trace->ll); } while (peak_load_packet(trace)); } peak_track_exit(peek); peak_load_exit(trace); return (0); }