source: tools/tracereport/protocol_report.c @ d4336d5

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since d4336d5 was d4336d5, checked in by Shane Alcock <salcock@…>, 15 years ago

Updated tracereport to include all the work Josef has done

  • Property mode set to 100644
File size: 2.1 KB
Line 
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"
7#include "report.h"
8
9static stat_t prot_stat[4][256] = {{{0,0}}} ;
10static bool suppress[4] = {true,true,true,true};
11
12void protocol_per_packet(struct libtrace_packet_t *packet)
13{
14        uint8_t proto;
15        int dir = trace_get_direction(packet);
16        if(dir < 0 || dir > 1)
17                dir = 2;
18        if (trace_get_transport(packet,&proto,NULL)==NULL)
19                return;
20               
21        prot_stat[dir][proto].count++;
22        prot_stat[dir][proto].bytes+=trace_get_wire_length(packet);
23        suppress[dir] = false;
24}
25
26void protocol_suppress()
27{
28        int i;
29        printf("%-20s","Direction:");
30        //printf("%20s", " ");
31        for(i=0;i<4;i++){
32                if(!suppress[i]){
33                        switch(i){
34                                case 0:
35                                        printf("\t%24s", "Outbound   ");
36                                        break;
37                                case 1:
38                                        printf("\t%24s", "Inbound   ");
39                                        break;
40                                case 2:
41                                        printf("\t%24s", "Undefined   ");
42                                        break;
43                                default:
44                                        break;
45                        }
46                }
47        }
48        printf("\n");
49        printf("%-20s","Protocol");
50        for(i=0;i<4;i++){
51                if(!suppress[i]){
52                        printf("\t%12s\t%12s", "bytes","packets");
53                }
54        }
55        printf("\n");
56}
57
58void protocol_report(void)
59{
60        int i,j;
61        printf("# Protocol breakdown:\n");
62        protocol_suppress();
63        setprotoent(1);
64        for(i=0;i<256;++i) {
65                struct protoent *prot;
66                if (prot_stat[0][i].count==0 && 
67                        prot_stat[1][i].count==0 && prot_stat[2][i].count==0)
68                        continue;
69                prot = getprotobynumber(i);
70                if (prot) {
71                        printf("%20s",prot->p_name);
72                        for(j=0;j<4;j++){
73                                if (prot_stat[j][i].count==0){
74                                        if(!suppress[j])
75                                                printf("\t%24s"," ");
76                                        continue;
77                                }
78                                printf("\t%12" PRIu64 "\t%12" PRIu64,
79                                                prot_stat[j][i].bytes,
80                                                prot_stat[j][i].count);
81                        }
82                }
83                else {
84                        printf("%20i:",i);
85                        for(j=0;j<4;j++){
86                                if (prot_stat[j][i].count==0){
87                                        if(!suppress[j])
88                                                printf("\t%24s"," ");
89                                        continue;
90                                }
91                                printf("\t%12" PRIu64 "\t%12" PRIu64,
92                                                prot_stat[j][i].bytes,
93                                                prot_stat[j][i].count);
94                        }
95                }
96                printf("\n");
97        }
98        setprotoent(0);
99       
100        int total;
101        for(i=0;i<4;i++){
102                total = 0;
103                for(j=0;j<256;j++)
104                        total += prot_stat[i][j].count;
105                //printf("%s: %i\n", "Total", total);
106        }
107}
Note: See TracBrowser for help on using the repository browser.