source: tools/tracereport/ecn_report.c @ 466aed6

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since 466aed6 was 466aed6, checked in by Perry Lorier <perry@…>, 14 years ago

Flag functions as static if they're not actually used.
Include report.h too to make sure that functions have the right prototypes

  • Property mode set to 100644
File size: 1.8 KB
RevLine 
[d4336d5]1#include <netdb.h>
2#include <inttypes.h>
3#include <lt_inttypes.h>
4#include <stdio.h>
5#include "libtrace.h"
6#include "tracereport.h"
[466aed6]7#include "report.h"
[d4336d5]8
[4eec8dc]9static stat_t ecn_stat[3][4] = {{{0,0}}} ;
[d4336d5]10
11void ecn_per_packet(struct libtrace_packet_t *packet)
12{
13        struct libtrace_ip *ip = trace_get_ip(packet);
[4eec8dc]14        libtrace_direction_t dir = trace_get_direction(packet);
15        int ecn;
16       
[d4336d5]17        if (!ip)
18                return;
19       
[4eec8dc]20        if (dir != TRACE_DIR_INCOMING && dir != TRACE_DIR_OUTGOING)
21                dir = TRACE_DIR_OTHER;
22       
23        ecn = ip->ip_tos & 0x2;
[d4336d5]24        ecn_stat[dir][ecn].count++;
25        ecn_stat[dir][ecn].bytes+=trace_get_wire_length(packet);
26}
27
28void ecn_report(void)
29{
30        int i,j;
[4eec8dc]31       
[bd4bec9]32        FILE *out = fopen("ecn.rpt", "w");
[4eec8dc]33        if (!out) {
34                perror("fopen");
35                return;
36        }
37
38        /* Put some headings up for human-readability */
[b5dc60d]39        fprintf(out, "%-12s\t%10s\t%16s %16s\n",
[4eec8dc]40                        "ECN",
41                        "DIRECTION",
42                        "BYTES",
43                        "PACKETS");
44       
[d4336d5]45        for(i=0;i<4;++i) {
46                if (ecn_stat[0][i].count==0 && 
47                        ecn_stat[1][i].count==0 && ecn_stat[2][i].count==0)
48                        continue;
[4eec8dc]49                switch(i){
50                        case 1:
51                                fprintf(out, "%12s", "ECN CAPE |");
52                                break;
53                        case 2:
54                                fprintf(out, "%12s", "ECN CAPE |");
55                                break;
56                        case 3:
57                                fprintf(out, "%12s", "CONG EXP |");
58                                break;
59                        default:
60                                fprintf(out, "%12s", "NO ECN |");       
61                }
62               
63                for(j=0;j<3;j++){
64                        if (j != 0) {
65                                fprintf(out, "%12s", " |");
66                        }
67                       
68                        switch (j) {
69                                case 0:
[b5dc60d]70                                        fprintf(out, "\t%10s", "Outbound");
[4eec8dc]71                                        break;
72                                case 1:
[b5dc60d]73                                        fprintf(out, "\t%10s", "Inbound");
[4eec8dc]74                                        break;
75                                case 2:
[b5dc60d]76                                        fprintf(out, "\t%10s", "Unknown");
[4eec8dc]77                                        break;
[d4336d5]78                        }
[f3576f5]79                        fprintf(out, "\t%16" PRIu64 " %16" PRIu64 "\n",
[d4336d5]80                                ecn_stat[j][i].bytes,
81                                ecn_stat[j][i].count);
82                }
83        }
84       
85        int total = 0;
86        for(i=0;i<4;i++){
87                for(j=1;j<4;j++)
88                        total += ecn_stat[i][j].count;
89        }
[4eec8dc]90        fprintf(out, "%s: %i\n", "Total ECN", total);
91        fclose(out);
[d4336d5]92}
Note: See TracBrowser for help on using the repository browser.