Changeset c549d3f
- Timestamp:
- 11/09/09 17:21:56 (11 years ago)
- Branches:
- 4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, getfragoff, help, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
- Children:
- 4f8703ae
- Parents:
- 34cab5b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tools/tracetop/tracetop.cc
re7307f9 rc549d3f 16 16 #include "config.h" 17 17 #ifdef HAVE_NETPACKET_PACKET_H 18 #include <sys/socket.h>19 18 #include <netpacket/packet.h> 20 19 #include <net/ethernet.h> … … 24 23 display_t display_as = BYTES; 25 24 float interval=2; 25 double last_report=0; 26 26 27 27 bool use_sip = true; … … 30 30 bool use_dport = true; 31 31 bool use_protocol = true; 32 bool quit = false; 32 33 33 34 uint64_t total_bytes=0; … … 315 316 } 316 317 318 static void run_trace(libtrace_t *trace) 319 { 320 libtrace_packet_t *packet = trace_create_packet(); 321 libtrace_eventobj_t obj; 322 fd_set rfds; 323 struct timeval sleep_tv; 324 struct timeval *tv = NULL; 325 326 do { 327 int maxfd=0; 328 FD_ZERO(&rfds); 329 FD_SET(0, &rfds); /* stdin */ 330 tv=NULL; 331 maxfd=0; 332 333 obj = trace_event(trace, packet); 334 switch(obj.type) { 335 case TRACE_EVENT_IOWAIT: 336 FD_SET(obj.fd, &rfds); 337 maxfd = obj.fd; 338 break; 339 340 case TRACE_EVENT_SLEEP: 341 sleep_tv.tv_sec = (int)obj.seconds; 342 sleep_tv.tv_usec = (int)((obj.seconds - sleep_tv.tv_sec)*1000000.0); 343 344 tv = &sleep_tv; 345 break;; 346 347 case TRACE_EVENT_TERMINATE: 348 trace_destroy_packet(packet); 349 return; 350 351 case TRACE_EVENT_PACKET: 352 if (obj.size == -1) 353 break; 354 if (trace_get_seconds(packet) - last_report >= interval) { 355 do_report(); 356 357 last_report=trace_get_seconds(packet); 358 } 359 if (trace_read_packet(trace,packet) <= 0) { 360 obj.size = -1; 361 break; 362 } 363 per_packet(packet); 364 continue; 365 } 366 367 if (tv && tv->tv_sec > interval) { 368 tv->tv_sec = (int)interval; 369 tv->tv_usec = 0; 370 } 371 372 select(maxfd+1, &rfds, 0, 0, tv); 373 if (FD_ISSET(0, &rfds)) { 374 switch (getch()) { 375 case '%': 376 display_as = PERCENT; 377 break; 378 case 'b': 379 display_as = BITS_PER_SEC; 380 break; 381 case 'B': 382 display_as = BYTES; 383 break; 384 case '\x1b': /* Escape */ 385 case 'q': 386 quit = true; 387 trace_destroy_packet(packet); 388 return; 389 case '1': use_sip = !use_sip; break; 390 case '2': use_sport = !use_sport; break; 391 case '3': use_dip = !use_dip; break; 392 case '4': use_dport = !use_dport; break; 393 case '5': use_protocol = !use_protocol; break; 394 } 395 } 396 } while (obj.type != TRACE_EVENT_TERMINATE || obj.size == -1); 397 398 trace_destroy_packet(packet); 399 } 400 317 401 static void usage(char *argv0) 318 402 { 319 fprintf(stderr,"usage: %s [ --filter | -f bpfexp ] [ --snaplen | -s snap ]\n\t\t[ --promisc | -p flag] [ --help | -h ] [ --libtrace-help | -H ] libtraceuri...\n",argv0); 403 fprintf(stderr,"usage: %s [options] libtraceuri...\n",argv0); 404 fprintf(stderr," --filter bpfexpr\n"); 405 fprintf(stderr," -f bpfexpr\n"); 406 fprintf(stderr,"\t\tApply a bpf filter expression\n"); 407 fprintf(stderr," --snaplen snaplen\n"); 408 fprintf(stderr," -s snaplen\n"); 409 fprintf(stderr,"\t\tCapture only snaplen bytes\n"); 410 fprintf(stderr," --promisc 0|1\n"); 411 fprintf(stderr," -p 0|1\n"); 412 fprintf(stderr,"\t\tEnable/Disable promiscuous mode\n"); 413 fprintf(stderr," --bits-per-sec\n"); 414 fprintf(stderr," -B\n"); 415 fprintf(stderr,"\t\tDisplay usage in bits per second, not bytes per second\n"); 416 fprintf(stderr," --percent\n"); 417 fprintf(stderr," -P\n"); 418 fprintf(stderr,"\t\tDisplay usage in percentage of total usage\n"); 419 fprintf(stderr," --interval int\n"); 420 fprintf(stderr," -i int\n"); 421 fprintf(stderr,"\t\tUpdate the display every int seconds\n"); 320 422 } 321 423 … … 327 429 int snaplen=-1; 328 430 int promisc=-1; 329 double last_report=0;330 431 331 432 setprotoent(1); … … 394 495 initscr(); cbreak(); noecho(); 395 496 396 while ( optind<argc) {497 while (!quit && optind<argc) { 397 498 trace = trace_create(argv[optind]); 398 499 ++optind; … … 425 526 } 426 527 427 packet = trace_create_packet(); 428 429 while (trace_read_packet(trace,packet)>0) { 430 if (trace_get_seconds(packet) - last_report >= interval) { 431 do_report(); 432 433 last_report=trace_get_seconds(packet); 434 } 435 per_packet(packet); 436 } 437 438 trace_destroy_packet(packet); 528 run_trace(trace); 439 529 440 530 if (trace_is_err(trace)) {
Note: See TracChangeset
for help on using the changeset viewer.