Changeset 205809b


Ignore:
Timestamp:
02/01/07 14:06:43 (14 years ago)
Author:
Shane Alcock <salcock@…>
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:
d242ea8
Parents:
d5a27e8
Message:

Error handling in trace_config is now much more robust - it doesn't overwrite error messages set by the format module and it will clear the format module's error if trace_config can successfully deal with the option (such as filtering).
Added some trace_set_errs to linuxnative_start as it would give absolutely no indication why things failed.

Location:
lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • lib/format_linux.c

    rd5a27e8 r205809b  
    100100                                socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
    101101        if (FORMAT(libtrace->format_data)->fd==-1) {
     102                trace_set_err(libtrace, TRACE_ERR_INIT_FAILED, "Could not create raw socket");
    102103                free(libtrace->format_data);
    103104                return -1;
     
    109110                if (addr.sll_ifindex == 0) {
    110111                        close(FORMAT(libtrace->format_data)->fd);
     112                        trace_set_err(libtrace, TRACE_ERR_INIT_FAILED, "Failed to find interface %s", libtrace->uridata);
    111113                        free(libtrace->format_data);
    112114                        return -1;
     
    120122                                (socklen_t)sizeof(addr))==-1) {
    121123                free(libtrace->format_data);
     124                trace_set_err(libtrace, TRACE_ERR_INIT_FAILED, "Failed to bind to interface %s", libtrace->uridata);
    122125                return -1;
    123126        }
     
    217220                 */
    218221        }
     222       
    219223        trace_set_err(libtrace,TRACE_ERR_UNKNOWN_OPTION,
    220224                        "Unknown option %i", option);
  • lib/trace.c

    rd5a27e8 r205809b  
    529529{
    530530        int ret;
     531        libtrace_err_t err;
     532       
     533        assert(!trace_is_err(libtrace) && "Please use trace_is_err to check for errors after calling trace_create!");
     534       
    531535        if (libtrace->format->config_input) {
    532536                ret=libtrace->format->config_input(libtrace,option,value);
     
    536540        switch(option) {
    537541                case TRACE_OPTION_SNAPLEN:
     542                        /* Clear the error if there was one */
     543                        if (trace_is_err(libtrace)) {
     544                                err = trace_get_err(libtrace);
     545                        }
    538546                        libtrace->snaplen=*(int*)value;
    539547                        return 0;
    540548                case TRACE_OPTION_FILTER:
     549                        /* Clear the error if there was one */
     550                        if (trace_is_err(libtrace)) {
     551                                err = trace_get_err(libtrace);
     552                        }
    541553                        libtrace->filter=(libtrace_filter_t *)value;
    542554                        return 0;
    543555                case TRACE_OPTION_PROMISC:
    544                         trace_set_err(libtrace,TRACE_ERR_OPTION_UNAVAIL,
    545                                 "Promisc mode is not supported by this format module");
     556                        if (!trace_is_err(libtrace)) {
     557                                trace_set_err(libtrace,TRACE_ERR_OPTION_UNAVAIL,
     558                                                "Promisc mode is not supported by this format module");
     559                        }
    546560                        return -1;
    547561                case TRACE_META_FREQ:
    548                         trace_set_err(libtrace, TRACE_ERR_OPTION_UNAVAIL,
    549                                 "This format does not support meta-data gathering");
     562                        if (!trace_is_err(libtrace)) {
     563                                trace_set_err(libtrace,
     564                                                TRACE_ERR_OPTION_UNAVAIL,
     565                                                "This format does not support meta-data gathering");
     566                        }
    550567                        return -1;
    551568        }
    552         trace_set_err(libtrace,TRACE_ERR_UNKNOWN_OPTION,
    553                 "Unknown option %i", option);
     569        if (!trace_is_err(libtrace)) {
     570                trace_set_err(libtrace,TRACE_ERR_UNKNOWN_OPTION,
     571                        "Unknown option %i", option);
     572        }
    554573        return -1;
    555574}
Note: See TracChangeset for help on using the changeset viewer.