Changeset 2b9a4c7


Ignore:
Timestamp:
11/21/09 00:42:12 (11 years ago)
Author:
Yuwei Wang <yww4@…>
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:
05000f9
Parents:
099c35e
Message:

using getopt for commandline arguements. add -f for filter support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/tracereplay/tracereplay.c

    r9b8ece6 r2b9a4c7  
    1717#include <string.h>
    1818#include <libtrace.h>
     19#include <getopt.h>
    1920
    2021static libtrace_packet_t * per_packet(libtrace_packet_t *packet) {
     
    2829
    2930  trace_construct_packet(new_packet,linktype,pkt_buffer,wire_length);
    30 
    3131
    3232  return new_packet;
     
    8282        }
    8383}
    84                
     84
     85static void usage(char * argv) {
     86        fprintf(stderr, "usage: %s [options] libtraceuri outputuri...\n", argv);
     87        fprintf(stderr, " --filter bpfexpr\n");
     88        fprintf(stderr, " -f bpfexpr\n");
     89        fprintf(stderr, "\t\tApply a bpf filter expression\n");
     90}
     91
    8592int main(int argc, char *argv[]) {
    8693       
     
    8895        libtrace_out_t *output;
    8996        libtrace_packet_t *packet;
     97        libtrace_filter_t *filter=NULL;
    9098        int psize = 0;
    9199        char *uri = 0;
    92        
    93         if (argc == 3) {
    94                 uri = strdup(argv[1]);
    95         } else {
    96                 fprintf(stderr,"usage: %s <input uri> <outputuri>\n",argv[0]);
    97                 return -1;
    98         }
     100
     101        while(1) {
     102                int option_index;
     103                struct option long_options[] = {
     104                        { "filter",     1, 0, 'f'},
     105                        { "help",       0, 0, 'h'},
     106                        { NULL,         0, 0, 0}
     107                };
     108
     109                int c = getopt_long(argc, argv, "f:",
     110                                long_options, &option_index);
     111
     112                if(c == -1)
     113                        break;
     114
     115                switch (c) {
     116                        case 'f':
     117                                filter = trace_create_filter(optarg);
     118                                break;
     119                        case 'h':
     120                                usage(argv[0]);
     121                                return 1;
     122                        default:
     123                                fprintf(stderr, "Unknown option: %c\n", c);
     124                }
     125        }
     126
     127        if(optind>=argc) {
     128                fprintf(stderr, "Missing input uri\n");
     129                usage(argv[0]);
     130                return 1;
     131        }
     132        if(optind+1>=argc) {
     133                fprintf(stderr, "Missing output uri\n");
     134                usage(argv[0]);
     135                return 1;
     136        }
     137
     138        uri = strdup(argv[optind]);
    99139
    100140        /* Create the trace */
     
    104144                return 1;
    105145        }
    106        
     146
     147        /* apply filter */
     148        if(filter) {
     149                if(trace_config(trace, TRACE_OPTION_FILTER, filter)) {
     150                        trace_perror(trace, "ignoring: ");
     151                }
     152        }
     153
    107154        /* Starting the trace */
    108155        if (trace_start(trace) != 0) {
     
    112159
    113160        /* Creating output trace */
    114         output = trace_create_output(argv[2]);
     161        output = trace_create_output(argv[optind+1]);
    115162       
    116163        if (trace_is_err_output(output)) {
    117                 trace_perror_output(output, "Opening output trace");
     164                trace_perror_output(output, "Opening output trace: ");
    118165                return 1;
    119166        }
    120167        if (trace_start_output(output)) {
    121                 trace_perror_output(output, "Starting output trace");
     168                trace_perror_output(output, "Starting output trace: ");
    122169                trace_destroy_output(output);
    123170                trace_destroy(trace);
    124171                return 1;
    125172        }
    126                
    127173
    128174        packet = trace_create_packet();
     
    147193        free(uri);
    148194        trace_destroy(trace);
     195        trace_destroy_filter(filter);
    149196        trace_destroy_output(output);
    150197        trace_destroy_packet(packet);
Note: See TracChangeset for help on using the changeset viewer.