source: tools/tracereport/protocol_report.c @ c0ccccd

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

misc and port reports now write to files - all reports now do so
Changed almost all the %llu format strings to use PRIu64 which should reduce the warnings on 64 bit machines

  • Property mode set to 100644
File size: 2.0 KB
RevLine 
[d3ff1fb]1#include <netdb.h>
2#include <inttypes.h>
[e3b0188]3#include <lt_inttypes.h>
[d3ff1fb]4#include <stdio.h>
5#include "libtrace.h"
6#include "tracereport.h"
7#include "report.h"
8
[b5dc60d]9static stat_t prot_stat[3][256] = {{{0,0}}} ;
10static bool suppress[3] = {true,true,true};
[d3ff1fb]11
12void protocol_per_packet(struct libtrace_packet_t *packet)
13{
[938dbd9]14        uint8_t proto;
[b5dc60d]15        libtrace_direction_t dir = trace_get_direction(packet);
16       
[938dbd9]17        if (trace_get_transport(packet,&proto,NULL)==NULL)
[d3ff1fb]18                return;
[938dbd9]19               
[b5dc60d]20        if (dir != TRACE_DIR_INCOMING && dir != TRACE_DIR_OUTGOING)
21                dir = TRACE_DIR_OTHER;
22       
[d4336d5]23        prot_stat[dir][proto].count++;
24        prot_stat[dir][proto].bytes+=trace_get_wire_length(packet);
25        suppress[dir] = false;
[d3ff1fb]26}
27
[d4336d5]28void protocol_report(void)
29{
30        int i,j;
[bd4bec9]31        FILE *out = fopen("protocol.rpt", "w");
32        if (!out) {
33                perror("fopen");
34                return;
35        }
36        fprintf(out, "%-16s\t%10s\t%16s %16s\n",
37                        "PROTOCOL",
38                        "DIRECTION",
39                        "BYTES",
40                        "PACKETS");
41       
[d3ff1fb]42        setprotoent(1);
43        for(i=0;i<256;++i) {
44                struct protoent *prot;
[d4336d5]45                if (prot_stat[0][i].count==0 && 
46                        prot_stat[1][i].count==0 && prot_stat[2][i].count==0)
[d3ff1fb]47                        continue;
48                prot = getprotobynumber(i);
49                if (prot) {
[bd4bec9]50                        fprintf(out, "%16s",prot->p_name);
[d3ff1fb]51                }
52                else {
[bd4bec9]53                        fprintf(out, "%16i:",i);
[d3ff1fb]54                }
[bd4bec9]55                for (j=0; j < 3; j++) {
56                        if (j != 0) {
57                                fprintf(out, "%16s", " ");
58                        }
59                        switch (j) {
60                                case 0:
61                                        fprintf(out, "\t%10s", "Outbound");
62                                        break;
63                                case 1:
64                                        fprintf(out, "\t%10s", "Inbound");
65                                        break;
66                                case 2:
67                                        fprintf(out, "\t%10s", "Unknown");
68                                        break;
69                        }
70
[f3576f5]71                        fprintf(out, "\t%16" PRIu64 " %16" PRIu64 "\n",
[bd4bec9]72                                        prot_stat[j][i].bytes,
73                                        prot_stat[j][i].count);
74                }
[d3ff1fb]75        }
[bd4bec9]76
[d3ff1fb]77        setprotoent(0);
[bd4bec9]78        fclose(out);
[d3ff1fb]79}
Note: See TracBrowser for help on using the repository browser.