Changeset 880aa58 for lib/trace.c


Ignore:
Timestamp:
02/16/06 15:44:06 (16 years ago)
Author:
Perry Lorier <perry@…>
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:
f03fc17
Parents:
1fbd938
Message:

Added libtrace_set_err() to everything (except format_rt, that's shane's job)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/trace.c

    r1fbd938 r880aa58  
    183183                }
    184184        }
    185 }
    186 
    187 /* Prints error information
    188  *
    189  * Prints out a descriptive error message for the currently set trace_err value
    190  */
    191 void trace_perror(const char *caller) {
    192         switch (trace_err.err_num) {
    193                 case E_BAD_FORMAT:
    194                         fprintf(stderr, "%s: No support for format (%s)\n", caller, trace_err.problem);
    195                         break;
    196                 case E_NO_INIT:
    197                         fprintf(stderr, "%s: Format (%s) does not have an init_trace function defined\n", caller, trace_err.problem);
    198                         break;
    199                 case E_NO_INIT_OUT:
    200                         fprintf(stderr, "%s: Format (%s) does not have an init_output function defined\n", caller, trace_err.problem);
    201                         break;
    202                 case E_URI_LONG:
    203                         fprintf(stderr, "%s: uri is too long\n", caller);
    204                         break;
    205                 case E_URI_NOCOLON:
    206                         fprintf(stderr, "%s: A uri must contain at least one colon e.g. format:destination\n", caller);
    207                         break;
    208                 case E_INIT_FAILED:
    209                         fprintf(stderr, "%s: libtrace failed to initialise (%s)\n",caller,trace_err.problem);
    210                        
    211                 default:
    212                         fprintf(stderr, "Unknown errcode %d\n",trace_err.err_num);
    213                         break; 
    214         }
    215         trace_err.err_num = E_NOERROR;
    216185}
    217186
     
    262231        int i = 0;
    263232       
    264         trace_err.err_num = E_NOERROR;
     233        trace_err.err_num = TRACE_ERR_NOERROR;
    265234       
    266235        /* parse the URI to determine what sort of event we are dealing with */
     
    270239       
    271240        libtrace->event.tdelta = 0.0;
     241        libtrace->filter = NULL;
     242        libtrace->snaplen = 0;
    272243
    273244        libtrace->format = 0;
     
    282253        }
    283254        if (libtrace->format == 0) {
    284                 trace_err.err_num = E_BAD_FORMAT;
    285                 strcpy(trace_err.problem, scan);
     255                trace_set_err(TRACE_ERR_BAD_FORMAT,
     256                                "Unknown format (%s)",scan);
    286257                return 0;
    287258        }
     
    294265        if (libtrace->format->init_input) {
    295266                if (!libtrace->format->init_input( libtrace)) {
    296                         trace_err.err_num = E_INIT_FAILED;
    297                         strcpy(trace_err.problem, scan);
     267                        /* init_input should call trace_set_err to set
     268                         * the error message
     269                         */
    298270                        return 0;
    299271                }
    300272        } else {
    301                 trace_err.err_num = E_NO_INIT;
    302                 strcpy(trace_err.problem, scan);
     273                trace_set_err(TRACE_ERR_NO_INIT,
     274                                "Format does not support input (%s)",scan);
    303275                return 0;
    304276        }
     
    316288 * @returns opaque pointer to a (sparsely initialised) libtrace_t
    317289 *
    318  * IMPORTANT: Do not attempt to call trace_read_packet or other such functions with
    319  * the dummy trace. Its intended purpose is to act as a packet->trace for libtrace_packet_t's
    320  * that are not associated with a libtrace_t structure.
     290 * IMPORTANT: Do not attempt to call trace_read_packet or other such functions
     291 * with the dummy trace. Its intended purpose is to act as a packet->trace for
     292 * libtrace_packet_t's that are not associated with a libtrace_t structure.
    321293 */
    322294struct libtrace_t * trace_create_dead (const char *uri) {
     
    326298        int i;
    327299       
    328         trace_err.err_num = E_NOERROR;
     300        trace_err.err_num = TRACE_ERR_NOERROR;
    329301
    330302        if((uridata = strchr(uri,':')) == NULL) {
     
    346318        }
    347319        if (libtrace->format == 0) {
    348                 trace_err.err_num = E_BAD_FORMAT;
    349                 strcpy(trace_err.problem, scan);
     320                trace_set_err(TRACE_ERR_BAD_FORMAT,
     321                                "Unknown format (%s)",scan);
    350322                return 0;
    351323        }
     
    359331 *
    360332 * @param uri   the uri string describing the output format and destination
    361  * @returns opaque pointer to a libtrace_output_t
     333 * @returns opaque pointer to a libtrace_output_t 
    362334 * @author Shane Alcock
    363335 *
    364  * Valid URI's are:
    365  *  - gzerf:/path/to/erf/file.gz
    366  *  - gzerf:/path/to/erf/file
    367  *  - rtserver:hostname
    368  *  - rtserver:hostname:port
    369  *
    370  *  If an error occured when attempting to open the output trace, NULL is returned
    371  *  and trace_errno is set. Use trace_perror() to get more information
     336 * Valid URI's are: - gzerf:/path/to/erf/file.gz - gzerf:/path/to/erf/file -
     337 * rtserver:hostname - rtserver:hostname:port
     338 *
     339 *  If an error occured when attempting to open the output trace, NULL is
     340 *  returned and trace_errno is set.
    372341 */
    373342       
     
    379348        int i;
    380349
    381         trace_err.err_num = E_NOERROR;
     350        trace_err.err_num = TRACE_ERR_NOERROR;
    382351        /* parse the URI to determine what sort of event we are dealing with */
    383352
     
    398367        }
    399368        if (libtrace->format == 0) {
    400                 trace_err.err_num = E_BAD_FORMAT;
    401                 strcpy(trace_err.problem, scan);
     369                trace_set_err(TRACE_ERR_BAD_FORMAT,
     370                                "Unknown output format (%s)",scan);
    402371                return 0;
    403372        }
     
    414383                }
    415384        } else {
    416                 trace_err.err_num = E_NO_INIT_OUT;
    417                 strcpy(trace_err.problem, scan);
     385                trace_set_err(TRACE_ERR_NO_INIT_OUT,
     386                                "Format does not support writing (%s)",scan);
    418387                return 0;
    419388        }
     
    542511
    543512        if (libtrace->format->read_packet) {
    544                 return (packet->size=libtrace->format->read_packet(libtrace,packet));
     513                do {
     514                        packet->size=libtrace->format->read_packet(libtrace,packet);
     515                        if (packet->size==-1)
     516                                return packet->size;
     517                        if (libtrace->filter) {
     518                                /* If the filter doesn't match, read another
     519                                 * packet
     520                                 */
     521                                if (!trace_bpf_filter(libtrace->filter,packet)){
     522                                        continue;
     523                                }
     524                        }
     525                        if (libtrace->snaplen>0) {
     526                                /* Snap the packet */
     527                                trace_set_capture_length(packet,
     528                                                libtrace->snaplen);
     529                        }
     530
     531                        return packet->size;
     532                } while(1);
    545533        }
    546534        packet->size=-1;
     
    14991487        if((uridata = strchr(uri,':')) == NULL) {
    15001488                /* badly formed URI - needs a : */
    1501                 trace_err.err_num = E_URI_NOCOLON;
     1489                trace_set_err(TRACE_ERR_URI_NOCOLON,"Format missing");
    15021490                return 0;
    15031491        }
     
    15051493        if ((uridata - uri) > URI_PROTO_LINE) {
    15061494                /* badly formed URI - uri type is too long */
    1507                 trace_err.err_num = E_URI_LONG;
     1495                trace_set_err(TRACE_ERR_URI_LONG,"Format too long");
    15081496                return 0;
    15091497        }
     
    15171505}
    15181506       
     1507/** Update the libtrace error
     1508 * @param errcode either an Econstant from libc, or a LIBTRACE_ERROR
     1509 * @param msg a plaintext error message
     1510 */
     1511void trace_set_error(int errcode,const char *msg,...)
     1512{
     1513        va_list va;
     1514        va_start(msg,va);
     1515        trace_err.err_num=errcode;
     1516        vsnprintf(trace_err.problem,sizeof(trace_err.problem),msg,va);
     1517        va_end();
     1518}
Note: See TracChangeset for help on using the changeset viewer.