Changeset 32a3ec5 for lib


Ignore:
Timestamp:
10/02/15 16:07:24 (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:
6cf2770
Parents:
7fe6dfa
Message:

Various DAG fixes

  • Use CSAPI for configuring snap length if available
  • Don't die if the number of streams doesn't exactly match the number of processing threads. Instead, just choose the minimum of the two and work with that.
  • Remove debug output re: thread starting
Location:
lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • lib/format_dag25.c

    r5478d3d r32a3ec5  
    5454#include <pthread.h>
    5555
     56
     57#ifdef HAVE_DAG_CONFIG_API_H
     58#include <dag_config_api.h>
     59#endif
    5660
    5761#ifdef WIN32
     
    549553}
    550554
     555#ifdef HAVE_DAG_CONFIG_API_H
     556static int dag_csapi_set_snaplen(libtrace_t *libtrace, int slen) {
     557        dag_card_ref_t card_ref = NULL;
     558        dag_component_t root = NULL;
     559        attr_uuid_t uuid = 0;
     560
     561        if (slen < 0)
     562                slen = 0;
     563
     564        card_ref = dag_config_init(FORMAT_DATA->device->dev_name);
     565        root = dag_config_get_root_component(card_ref);
     566       
     567        uuid = dag_component_get_config_attribute_uuid(root, kBooleanAttributeVarlen);
     568        dag_config_set_boolean_attribute(card_ref, uuid, true);
     569
     570        uuid = dag_component_get_config_attribute_uuid(root, kUint32AttributeSnaplength);
     571        dag_config_set_uint32_attribute(card_ref, uuid, (uint32_t)slen);
     572
     573        return 0;
     574       
     575
     576}
     577#endif /* HAVE_DAG_CONFIG_API_H */
     578
    551579/* Configures a DAG input trace */
    552580static int dag_config_input(libtrace_t *libtrace, trace_option_t option,
    553581                            void *data)
    554582{
    555         char conf_str[4096];
    556583        switch(option) {
    557584        case TRACE_OPTION_META_FREQ:
     
    561588                return 0;
    562589        case TRACE_OPTION_SNAPLEN:
     590#ifdef HAVE_DAG_CONFIG_API_H
     591                return dag_csapi_set_snaplen(libtrace, *(int *)data);
     592#else
    563593                /* Tell the card our new snap length */
     594        {
     595                char conf_str[4096];
    564596                snprintf(conf_str, 4096, "varlen slen=%i", *(int *)data);
    565597                if (dag_configure(FORMAT_DATA->device->fd,
     
    570602                        return -1;
    571603                }
     604        }
     605#endif /* HAVE_DAG_CONFIG_API_H */
     606
    572607                return 0;
    573608        case TRACE_OPTION_PROMISC:
     
    693728        max_streams = dag_rx_get_stream_count(FORMAT_DATA->device->fd);
    694729        if (libtrace->perpkt_thread_count > max_streams) {
    695                 trace_set_err(libtrace, TRACE_ERR_BAD_FORMAT,
     730                fprintf(stderr,
    696731                              "WARNING: DAG has only %u streams available, "
    697732                              "capping total number of threads at this value.",
     
    714749                /* Ensure we haven't specified too many streams */
    715750                if (stream_count >= libtrace->perpkt_thread_count) {
    716                         trace_set_err(libtrace, TRACE_ERR_BAD_FORMAT,
     751                        fprintf(stderr,
    717752                                      "WARNING: Format uri specifies too many "
    718753                                      "streams. Maximum is %u, so only using "
    719754                                      "the first %u from the uri.",
    720                                       max_streams);
     755                                      libtrace->perpkt_thread_count,
     756                                      libtrace->perpkt_thread_count);
    721757                        break;
    722758                }
     
    738774        }
    739775
     776        if (stream_count < libtrace->perpkt_thread_count) {
     777                libtrace->perpkt_thread_count = stream_count;
     778        }
     779       
    740780        FORMAT_DATA->stream_attached = 1;
    741781
     
    14921532
    14931533        if (reader && t->type == THREAD_PERPKT) {
    1494                 fprintf(stderr, "t%u: registered reader thread", t->perpkt_num);
    14951534                node = libtrace_list_get_index(FORMAT_DATA->per_stream,
    14961535                                                t->perpkt_num);
    14971536                if (node == NULL) {
    1498                         trace_set_err(libtrace, TRACE_ERR_INIT_FAILED,
    1499                                       "Too few streams supplied for the"
    1500                                       " number of threads lanuched");
    15011537                        return -1;
    15021538                }
     
    15071543
    15081544                /* Attach and start the DAG stream */
    1509                 printf("t%u: starting and attaching stream #%u\n",
    1510                        t->perpkt_num, stream_data->dagstream);
    15111545                if (dag_start_input_stream(libtrace, stream_data) < 0)
    15121546                        return -1;
    15131547        }
    1514 
    1515         fprintf(stderr, "t%u: registered thread\n", t->perpkt_num);
    15161548
    15171549        return 0;
  • lib/trace_parallel.c

    r10553bf r32a3ec5  
    625625
    626626        if (trace->format->pregister_thread) {
    627                 trace->format->pregister_thread(trace, t, trace_is_parallel(trace));
     627                if (trace->format->pregister_thread(trace, t,
     628                                trace_is_parallel(trace)) < 0) {
     629                        thread_change_state(trace, t, THREAD_FINISHED, false);
     630                        pthread_exit(NULL);
     631                }
    628632        }
    629633
Note: See TracChangeset for help on using the changeset viewer.