Changeset 2c457ec


Ignore:
Timestamp:
11/16/17 10:37:56 (3 years ago)
Author:
Robert A Zeh <razeh@…>
Branches:
cachetimestamps, develop, dpdk-ndag, etsilive, master, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance
Children:
9726d0e
Parents:
be32cc7
git-author:
Robert A Zeh <robert.a.zeh@…> (11/16/17 10:36:16)
git-committer:
Robert A Zeh <razeh@…> (11/16/17 10:37:56)
Message:

Add TRACE_ERR_WANDIO_FAILED for wandio error reporting.

Passing an errcode of 0 to trace_set_err triggers the assertion at
format_helper.c:290, making the error unrecoverable for the calling
code. This happens when the wandio layer encounters an error while
errno is still 0 (for example, an incomplete pcap packet).

To make the error recoverable, pass in TRACE_ERR_WANDIO_FAILED instead
of errno.

Location:
lib
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • lib/format_atmhdr.c

    ree6e802 r2c457ec  
    137137        {
    138138                if (numbytes != 0) {
    139                         trace_set_err(libtrace,errno,"read(%s)",libtrace->uridata);
     139                        trace_set_err(libtrace,TRACE_ERR_WANDIO_FAILED,"read(%s)",libtrace->uridata);
    140140                }
    141141                return numbytes;
  • lib/format_legacy.c

    ree6e802 r2c457ec  
    269269                                                (size_t)64)) != 64) {
    270270                        if (numbytes < 0) {
    271                                 trace_set_err(libtrace,errno,"read(%s)",libtrace->uridata);
     271                                trace_set_err(libtrace,TRACE_ERR_WANDIO_FAILED,"read(%s)",libtrace->uridata);
    272272                        } else if (numbytes > 0) {
    273273                               
     
    310310                                                (size_t)68)) != 68) {
    311311                        if (numbytes < 0) {
    312                                 trace_set_err(libtrace,errno,"read(%s)",libtrace->uridata);
     312                                trace_set_err(libtrace,TRACE_ERR_WANDIO_FAILED,"read(%s)",libtrace->uridata);
    313313                        } else if (numbytes > 0)
    314314                                continue;
  • lib/format_pcapfile.c

    r633339d r2c457ec  
    357357                        sizeof(libtrace_pcapfile_pkt_hdr_t));
    358358        if (err<0) {
    359                 trace_set_err(libtrace,errno,"reading packet");
     359                trace_set_err(libtrace,TRACE_ERR_WANDIO_FAILED,"reading packet");
    360360                return -1;
    361361        }
     
    366366
    367367        if (err < (int)sizeof(libtrace_pcapfile_pkt_hdr_t)) {
    368                 trace_set_err(libtrace, errno, "Incomplete pcap packet header");
     368                trace_set_err(libtrace, TRACE_ERR_BAD_PACKET, "Incomplete pcap packet header");
    369369                return -1;
    370370        }
     
    393393
    394394        if (err<0) {
    395                 trace_set_err(libtrace,errno,"reading packet");
     395                trace_set_err(libtrace,TRACE_ERR_WANDIO_FAILED,"reading packet");
    396396                return -1;
    397397        }
     
    401401
    402402        if (err < (int)bytes_to_read) {
    403                 trace_set_err(libtrace, errno, "Incomplete pcap packet body");
     403                trace_set_err(libtrace, TRACE_ERR_WANDIO_FAILED, "Incomplete pcap packet body");
    404404                return -1;
    405405        }
  • lib/format_pcapng.c

    red5b2ce r2c457ec  
    330330                err = wandio_read(libtrace->io, buf, nextread);
    331331                if (err < 0) {
    332                         trace_set_err(libtrace, errno,
     332                        trace_set_err(libtrace, TRACE_ERR_WANDIO_FAILED,
    333333                                "Reading section header options");
    334334                        return -1;
     
    351351        err = wandio_read(libtrace->io, body, to_read);
    352352        if (err < 0) {
    353                 trace_set_err(libtrace, errno,
     353                trace_set_err(libtrace, TRACE_ERR_WANDIO_FAILED,
    354354                        "Failed to read pcapng interface options");
    355355                return err;
     
    444444
    445445        if (err < 0) {
    446                 trace_set_err(libtrace, errno,
     446                trace_set_err(libtrace, TRACE_ERR_WANDIO_FAILED,
    447447                        "Reading pcapng section header block");
    448448                return -1;
     
    519519
    520520        if (err < 0) {
    521                 trace_set_err(libtrace, errno,
     521                trace_set_err(libtrace, TRACE_ERR_WANDIO_FAILED,
    522522                        "Reading pcapng interface header block");
    523523                return -1;
     
    626626
    627627        if (err < 0) {
    628                 trace_set_err(libtrace, errno, "reading pcapng name resolution block");
     628                trace_set_err(libtrace, TRACE_ERR_WANDIO_FAILED, "reading pcapng name resolution block");
    629629                return -1;
    630630        }
     
    682682
    683683        if (err < 0) {
    684                 trace_set_err(libtrace, errno, "reading pcapng custom block");
     684                trace_set_err(libtrace, TRACE_ERR_WANDIO_FAILED, "reading pcapng custom block");
    685685                return -1;
    686686        }
     
    740740
    741741        if (err < 0) {
    742                 trace_set_err(libtrace, errno, "reading pcapng interface stats");
     742                trace_set_err(libtrace, TRACE_ERR_WANDIO_FAILED, "reading pcapng interface stats");
    743743                return -1;
    744744        }
     
    861861
    862862        if (err < 0) {
    863                 trace_set_err(libtrace, errno, "reading pcapng simple packet");
     863                trace_set_err(libtrace, TRACE_ERR_WANDIO_FAILED, "reading pcapng simple packet");
    864864                return -1;
    865865        }
     
    930930
    931931        if (err < 0) {
    932                 trace_set_err(libtrace, errno, "reading pcapng enhanced packet");
     932                trace_set_err(libtrace, TRACE_ERR_WANDIO_FAILED, "reading pcapng enhanced packet");
    933933                return -1;
    934934        }
     
    10391039                err = wandio_peek(libtrace->io, &peeker, sizeof(peeker));
    10401040                if (err < 0) {
    1041                         trace_set_err(libtrace, errno, "reading pcapng packet");
     1041                        trace_set_err(libtrace, TRACE_ERR_WANDIO_FAILED, "reading pcapng packet");
    10421042                        return -1;
    10431043                }
     
    10481048
    10491049                if (err < (int)sizeof(struct pcapng_peeker)) {
    1050                         trace_set_err(libtrace, errno, "Incomplete pcapng block");
     1050                        trace_set_err(libtrace, TRACE_ERR_WANDIO_FAILED, "Incomplete pcapng block");
    10511051                        return -1;
    10521052                }
  • lib/format_tsh.c

    ree6e802 r2c457ec  
    131131                                        buffer2,
    132132                                        (size_t)sizeof(tsh_pkt_header_t))) == -1) {
    133                 trace_set_err(libtrace,errno,"read(%s)",
     133                trace_set_err(libtrace,TRACE_ERR_WANDIO_FAILED,"read(%s)",
    134134                                libtrace->uridata);
    135135                return -1;
     
    141141
    142142        if (numbytes < (int)sizeof(tsh_pkt_header_t)) {
    143                 trace_set_err(libtrace, errno, "Incomplete TSH header");
     143                trace_set_err(libtrace, TRACE_ERR_WANDIO_FAILED, "Incomplete TSH header");
    144144                return -1;
    145145        }
     
    152152                                (size_t)sizeof(libtrace_ip_t)+16))  /* 16 bytes of transport header */
    153153                        != sizeof(libtrace_ip_t)+16) {
    154                 trace_set_err(libtrace,errno,"read(%s)",
     154                trace_set_err(libtrace,TRACE_ERR_WANDIO_FAILED,"read(%s)",
    155155                                libtrace->uridata);
    156156                return -1;
     
    167167                                buffer2,
    168168                                16)) != 16) {
    169                 trace_set_err(libtrace,errno,"read(%s)",
     169                trace_set_err(libtrace,TRACE_ERR_WANDIO_FAILED,"read(%s)",
    170170                                libtrace->uridata);
    171171                return -1;
  • lib/libtrace.h.in

    rea75ec2 r2c457ec  
    305305        TRACE_ERR_RT_FAILURE    = -10,
    306306        /** Compression format unsupported */
    307         TRACE_ERR_UNSUPPORTED_COMPRESS  = -11
     307        TRACE_ERR_UNSUPPORTED_COMPRESS  = -11,
     308        /** Wandio has returned an error */
     309        TRACE_ERR_WANDIO_FAILED = -12 
    308310};
    309311
Note: See TracChangeset for help on using the changeset viewer.