Changeset 1800ee3


Ignore:
Timestamp:
11/28/18 11:44:35 (2 years ago)
Author:
Shane Alcock <salcock@…>
Branches:
develop
Children:
54642da
Parents:
8a12a49
git-author:
Shane Alcock <salcock@…> (11/28/18 11:43:25)
git-committer:
Shane Alcock <salcock@…> (11/28/18 11:44:35)
Message:

Add option to report packet drops to tracertstats.c

Note: this is going to report a cumulative counter rather
than the per-interval count that the rest of the columns do.

This can be fixed later, but will suffice for now.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/tracertstats/tracertstats.c

    r02d13cb r1800ee3  
    6666int filter_count=0;
    6767int burstsize=10;
     68uint8_t report_drops = 0;
    6869
    6970struct filter_t {
     
    9091}
    9192
    92 static void report_results(double ts,uint64_t count,uint64_t bytes)
     93static void report_results(double ts,uint64_t count,uint64_t bytes,
     94                libtrace_stat_t *stats)
    9395{
    94         int i=0;
     96        int i=0, offset = 3;
    9597        output_set_data_time(output,0,ts);
    9698        output_set_data_int(output,1,count);
    9799        output_set_data_int(output,2,bytes);
     100        if (stats) {
     101                if (stats->dropped_valid) {
     102                        output_set_data_int(output, 3, stats->dropped);
     103                } else {
     104                        output_set_data_int(output, 3, -1);
     105                }
     106                if (stats->missing_valid) {
     107                        output_set_data_int(output, 4, stats->missing);
     108                } else {
     109                        output_set_data_int(output, 4, -1);
     110                }
     111                offset += 2;
     112        }
    98113        for(i=0;i<filter_count;++i) {
    99                 output_set_data_int(output,i*2+3,filters[i].count);
    100                 output_set_data_int(output,i*2+4,filters[i].bytes);
     114                output_set_data_int(output,i*2+offset,filters[i].count);
     115                output_set_data_int(output,i*2+offset+1,filters[i].bytes);
    101116                filters[i].count=filters[i].bytes=0;
    102117        }
     
    115130        output_add_column(output,"packets");
    116131        output_add_column(output,"bytes");
     132        if (report_drops) {
     133                output_add_column(output, "dropped");
     134                output_add_column(output, "missing");
     135        }
    117136        for(i=0;i<filter_count;++i) {
    118137                char buff[1024];
     
    145164        int j;
    146165        result_t *res;
     166        libtrace_stat_t *stats = NULL;
    147167
    148168        if (stopped)
     
    153173        if (glob_last_ts == 0)
    154174                glob_last_ts = ts;
     175        if (report_drops) {
     176                stats = trace_create_statistics();
     177                trace_get_statistics(trace, stats);
     178        }
    155179        while ((glob_last_ts >> 32) < (ts >> 32)) {
    156                 report_results(glob_last_ts >> 32, count, bytes);
     180                report_results(glob_last_ts >> 32, count, bytes, stats);
    157181                count = 0;
    158182                bytes = 0;
     
    169193        }
    170194        free(res);
     195        if (stats) {
     196                free(stats);
     197        }
    171198
    172199        /* Be careful to only call pstop once from within this thread! */
     
    261288        libtrace_t *trace = NULL;
    262289        libtrace_callback_set_t *pktcbs, *repcbs;
     290        libtrace_stat_t *stats = NULL;
    263291
    264292        if (!merge_inputs)
     
    312340       
    313341        // Flush the last one out
    314         report_results((glob_last_ts >> 32), count, bytes);
     342        if (report_drops) {
     343                stats = trace_create_statistics();
     344                stats = trace_get_statistics(trace, stats);
     345        }
     346        report_results((glob_last_ts >> 32), count, bytes, stats);
    315347        if (trace_is_err(trace))
    316348                trace_perror(trace,"%s",uri);
    317349
     350        if (stats) {
     351                free(stats);
     352        }
    318353        trace_destroy(trace);
    319354        trace_destroy_callback_set(pktcbs);
     
    338373        "-N --nobuffer          Disable packet buffering within libtrace to force faster\n"
    339374        "                       updates at very low traffic rates\n"
     375        "-d --report-drops      Include statistics about number of packets dropped or\n"
     376        "                       lost by the capture process\n"
    340377        "-h --help      Print this usage statement\n"
    341378        ,argv0);
     
    358395                        { "threads",            1, 0, 't' },
    359396                        { "nobuffer",           0, 0, 'N' },
     397                        { "report-drops",       0, 0, 'd' },
    360398                        { NULL,                 0, 0, 0   },
    361399                };
    362400
    363                 int c=getopt_long(argc, argv, "c:f:i:o:t:hmN",
     401                int c=getopt_long(argc, argv, "c:f:i:o:t:dhmN",
    364402                                long_options, &option_index);
    365403
     
    368406
    369407                switch (c) {
     408                        case 'd':
     409                                report_drops = 1;
     410                                break;
    370411                        case 'N':
    371412                                burstsize = 1;
Note: See TracChangeset for help on using the changeset viewer.