Changeset 08f5060
- Timestamp:
- 09/05/14 16:21:26 (6 years ago)
- Branches:
- 4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, 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:
- cf686e1
- Parents:
- 9f43919
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lib/format_bpf.c
r19b44c8 r08f5060 422 422 packet->payload=(char *)buffer + BPFHDR(packet)->bh_hdrlen; 423 423 424 /*425 if (libtrace->format_data == NULL) {426 if (bpf_init_input(libtrace))427 return -1;428 }429 */430 431 424 return 0; 432 425 } … … 439 432 { 440 433 uint32_t flags = 0; 434 fd_set readfds; 435 struct timeval tout; 436 int ret; 441 437 442 438 packet->type = bpf_linktype_to_rt(FORMATIN(libtrace)->linktype); 439 440 while (FORMATIN(libtrace)->remaining <= 0) { 441 tout.tv_sec = 0; 442 tout.tv_usec = 500000; 443 FD_ZERO(&readfds); 444 FD_SET(FORMATIN(libtrace)->fd, &readfds); 445 446 ret = select(FORMATIN(libtrace)->fd + 1, &readfds, NULL, 447 NULL, &tout); 448 if (ret < 0 && errno != EINTR) { 449 trace_set_err(libtrace, errno, "select"); 450 return -1; 451 } else if (ret < 0) { 452 continue; 453 } 454 455 if (FD_ISSET(FORMATIN(libtrace)->fd, &readfds)) { 456 /* Packets are available, read into buffer */ 457 ret=read(FORMATIN(libtrace)->fd, 458 FORMATIN(libtrace)->buffer, 459 FORMATIN(libtrace)->buffersize); 460 461 if (ret == -1) { 462 trace_set_err(libtrace,errno,"Failed to read"); 463 return -1; 464 } 465 466 if (ret == 0) { 467 /* EOF */ 468 return 0; 469 } 470 471 FORMATIN(libtrace)->remaining=ret; 472 FORMATIN(libtrace)->bufptr= 473 FORMATIN(libtrace)->buffer; 474 break; 475 } 476 477 /* Timed out -- check if we should halt */ 478 if (libtrace_halt) 479 return 0; 480 } 443 481 444 /* Read from the BPF interface into our capture buffer */445 if (FORMATIN(libtrace)->remaining<=0) {446 int ret;447 448 ret=read(FORMATIN(libtrace)->fd,449 FORMATIN(libtrace)->buffer,450 FORMATIN(libtrace)->buffersize);451 452 if (ret == -1) {453 trace_set_err(libtrace,errno,"Failed to read");454 return -1;455 }456 457 if (ret == 0) {458 /* EOF */459 return 0;460 }461 462 FORMATIN(libtrace)->remaining=ret;463 FORMATIN(libtrace)->bufptr=464 FORMATIN(libtrace)->buffer;465 }466 467 482 /* We do NOT want anything trying to free the memory the packet is 468 483 * stored in */
Note: See TracChangeset
for help on using the changeset viewer.