Changeset c2f71ad for tools/tracemerge


Ignore:
Timestamp:
03/31/06 11:10:43 (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:
7e16db7
Parents:
4af54d1
Message:

Merged sam's fixes
Added unique-packets

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/tracemerge/tracemerge.c

    r18544c8 rc2f71ad  
    88void usage(char *argv0)
    99{
    10         fprintf(stderr,"Usage: %s [ -i | --set-interface ] outputuri traceuri...\n",argv0);
     10        fprintf(stderr,"Usage: %s [ -i | --set-interface ] [ -u | --unique-packets ] outputuri traceuri...\n",argv0);
    1111        fprintf(stderr,"\n");
    1212        fprintf(stderr,"Merges traces together, with -i each trace gets it's own direction/interface,\n without traces keep whatever direction/interface they have set\n");
     
    2222        bool *live;
    2323        bool set_interface=false;
     24        bool unique_packets=false;
    2425        int i=0;
     26        uint64_t last_ts=0;
    2527
    2628        while (1) {
     
    2830                struct option long_options[] = {
    2931                        { "set-interface",      0, 0, 'i' },
     32                        { "unique-packets",     0, 0, 'u' },
    3033                        { NULL,                 0, 0, 0 },
    3134                };
    3235
    33                 int c=getopt_long(argc, argv, "i:",
     36                int c=getopt_long(argc, argv, "iu",
    3437                                long_options, &option_index);
    3538
     
    3942                switch (c) {
    4043                        case 'i': set_interface=true; break;
     44                        case 'u': unique_packets=true; break;
    4145                        default:
    4246                                fprintf(stderr,"unknown option: %c\n",c);
     
    6569        for(i=0;i<argc-optind;++i) {
    6670                struct libtrace_t *f;
    67                 struct libtrace_packet_t *p;
    6871                f=trace_create(argv[i+optind]);
    6972                if (trace_is_err(f)) {
     
    7881                input[i]=f;
    7982                packet[i]=p;
    80                 trace_read_packet(f,p);
     83                if (trace_read_packet(f,packet[i])>0)
     84                        live[i]=true;
    8185        }
    8286
     
    103107                        if (live[i] &&
    104108                                (oldest==-1 ||
    105                                  oldest_ts<trace_get_erf_timestamp(packet[i]))) {
     109                                 oldest_ts>trace_get_erf_timestamp(packet[i]))) {
    106110                                oldest=i;
    107111                                oldest_ts=trace_get_erf_timestamp(packet[i]);
     
    113117                }
    114118
     119                live[oldest]=false;
     120
    115121                if (set_interface)
    116122                        trace_set_direction(packet[oldest],oldest);
     123
     124                if (unique_packets && oldest_ts == last_ts)
     125                        continue;
     126
    117127                trace_write_packet(output,packet[oldest]);
    118                 live[oldest]=false;
     128
     129                last_ts=oldest_ts;
    119130               
    120131        }
Note: See TracChangeset for help on using the changeset viewer.