Changeset cf686e1


Ignore:
Timestamp:
09/05/14 16:22:06 (6 years ago)
Author:
Shane Alcock <salcock@…>
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:
e5dedd5
Parents:
63af502 (diff), 08f5060 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'develop' of https://github.com/wanduow/libtrace into develop

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/format_bpf.c

    r19b44c8 r08f5060  
    422422        packet->payload=(char *)buffer + BPFHDR(packet)->bh_hdrlen;
    423423
    424         /*
    425         if (libtrace->format_data == NULL) {
    426                 if (bpf_init_input(libtrace))
    427                         return -1;
    428         }
    429         */
    430 
    431424        return 0;
    432425}
     
    439432{
    440433        uint32_t flags = 0;
     434        fd_set readfds;
     435        struct timeval tout;
     436        int ret;
    441437
    442438        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        }
    443481       
    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 
    467482        /* We do NOT want anything trying to free the memory the packet is
    468483         * stored in */
Note: See TracChangeset for help on using the changeset viewer.