/* Print packet capture statistics */ void print_stats() { struct pcap_stat pkt_stats; float run_time; if (rate_stats) display_rate_stats(use_infile, rate_threshold); if (pcap_hnd && !use_infile) { if (pcap_stats(pcap_hnd, &pkt_stats) != 0) { WARN("Cannot obtain packet capture statistics: %s", pcap_geterr(pcap_hnd)); return; } LOG_PRINT("%u packets received, %u packets dropped, %u http packets parsed", \ pkt_stats.ps_recv, pkt_stats.ps_drop, num_parsed); run_time = (float) (time(0) - start_time); if (run_time > 0) { LOG_PRINT("%0.1f packets/min, %0.1f http packets/min", \ ((pkt_stats.ps_recv * 60) / run_time), ((num_parsed * 60) / run_time)); } } else if (pcap_hnd) { PRINT("%u http packets parsed", num_parsed); } return; }
/* This is our statistics thread */ void *run_stats (void *args) { struct thread_args *thread_args = (struct thread_args *) args; while (1) { sleep(thread_args->rate_interval); display_rate_stats(thread_args->use_infile, thread_args->rate_threshold); } return (void *) 0; }