Ignore:
Timestamp:
09/05/07 13:50:34 (14 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:
39aa3c7
Parents:
1708aa8
Message:

Allow setting different interfaces_per_input

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/tracemerge/tracemerge.c

    r2cf30f6 r34e22d1  
    1111        fprintf(stderr,"Usage:\n"
    1212        "%s flags outputuri traceuri [traceuri...]\n"
    13         "-i --set-interface     Each trace is allocated an interface. Default leaves this flag as read from the original traces, if appropriate\n"
     13        "-i [interfaces_per_input] --set-interface [interfaces_per_input]\n"
     14        "                       Each trace is allocated an interface. Default leaves this flag as read from the original traces, if appropriate\n"
    1415        "-u --unique-packets    Discard duplicate packets\n"
    1516        "-H --libtrace-help     Print libtrace runtime documentation\n"
     
    3233        struct libtrace_packet_t **packet;
    3334        bool *live;
    34         bool set_interface=false;
     35        int interfaces_per_input=0;
    3536        bool unique_packets=false;
    3637        int i=0;
     
    4142                int option_index;
    4243                struct option long_options[] = {
    43                         { "set-interface",      0, 0, 'i' },
     44                        { "set-interface",      2, 0, 'i' },
    4445                        { "unique-packets",     0, 0, 'u' },
    4546                        { "libtrace-help",      0, 0, 'H' },
     
    4748                };
    4849
    49                 int c=getopt_long(argc, argv, "iuH",
     50                int c=getopt_long(argc, argv, "i::uH",
    5051                                long_options, &option_index);
    5152
     
    5455
    5556                switch (c) {
    56                         case 'i': set_interface=true; break;
     57                        case 'i':
     58                                if (optarg)
     59                                        interfaces_per_input=atoi(optarg);
     60                                else
     61                                        interfaces_per_input=1;
     62                                break;
    5763                        case 'u': unique_packets=true; break;
    5864                        case 'H':
     
    113119                uint64_t oldest_ts=0;
    114120                int oldest=-1;
     121                int curr_dir;
    115122                if (done)
    116123                        break;
     
    146153                live[oldest]=false;
    147154
    148                 if (set_interface)
    149                         trace_set_direction(packet[oldest],oldest);
     155                curr_dir = trace_get_direction(packet[oldest]);
     156                if (curr_dir != -1 && interfaces_per_input) {
     157                        /* If there are more interfaces than
     158                         * interfaces_per_input, then clamp at the
     159                         * highest input.  This means things should
     160                         * end up in "OTHER" or the unused 3rd bin if
     161                         * we're lucky */
     162                        curr_dir = curr_dir < interfaces_per_input
     163                                ? curr_dir
     164                                : interfaces_per_input-1;
     165
     166                        trace_set_direction(packet[oldest],
     167                                        oldest*interfaces_per_input
     168                                        +curr_dir);
     169                }
    150170
    151171                if (unique_packets && oldest_ts == last_ts)
Note: See TracChangeset for help on using the changeset viewer.