source: tools/tracereport/tcpsegment_report.c @ 7f1b9d4

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since 7f1b9d4 was f898a97, checked in by Scott Raynel <smr26@…>, 14 years ago

Don't deref null pointer

  • Property mode set to 100644
File size: 2.4 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 tcpseg_stat[3][2048] = {{{0,0}}} ;
10static bool suppress[3] = {true,true,true};
11
12void tcpseg_per_packet(struct libtrace_packet_t *packet)
13{
14        struct libtrace_tcp *tcp = trace_get_tcp(packet);
15        libtrace_ip_t *ip = trace_get_ip(packet);
16        libtrace_direction_t dir = trace_get_direction(packet);
17        int ss;
18        uint16_t ip_len ;
19       
20        if (!tcp || !ip)
21                return;
22
23        if (dir != TRACE_DIR_INCOMING && dir != TRACE_DIR_OUTGOING)
24                dir = TRACE_DIR_OTHER;
25       
26        ip_len = ntohs(ip->ip_len);
27        ss = ip_len - (ip->ip_hl * 4);
28
29        tcpseg_stat[dir][ss].count++;
30        tcpseg_stat[dir][ss].bytes+=trace_get_wire_length(packet);
31        suppress[dir] = false;
32}
33
34static void tcpseg_suppress()
35{
36        int i;
37        printf("%-20s","Direction:");
38        for(i=0;i<3;i++){
39                if(!suppress[i]){
40                        switch(i){
41                                case 0:
42                                        printf("\t%24s", "Outbound   ");
43                                        break;
44                                case 1:
45                                        printf("\t%24s", "Inbound   ");
46                                        break;
47                                case 2:
48                                        printf("\t%24s", "Undefined   ");
49                                        break;
50                                default:
51                                        break;
52                        }
53                }
54        }
55        printf("\n");
56        printf("%-20s","TCP SS");
57        for(i=0;i<3;i++){
58                if(!suppress[i]){
59                        printf("\t%12s\t%12s", "bytes","packets");
60                }
61        }
62        printf("\n");
63}
64
65void tcpseg_report(void)
66{
67        int i,j;
68        FILE *out = fopen("tcpseg.rpt", "w");
69        if (!out) {
70                perror("fopen");
71                return;
72        }
73        fprintf(out, "%-16s\t%10s\t%16s %16s\n",
74                        "SEGMENT SIZE",
75                        "DIRECTION",
76                        "BYTES",
77                        "PACKETS");
78       
79        for(i=0;i<2048;++i) {
80                if (tcpseg_stat[0][i].count==0 && 
81                        tcpseg_stat[1][i].count==0 && tcpseg_stat[2][i].count==0)
82                        continue;
83                fprintf(out, "%16i:",i);
84                for(j=0;j<3;j++){
85                        if (j != 0) {
86                                fprintf(out, "%16s", " ");
87                        }
88                        switch (j) {
89                                case 0:
90                                        fprintf(out, "\t%10s", "Outbound");
91                                        break;
92                                case 1:
93                                        fprintf(out, "\t%10s", "Inbound");
94                                        break;
95                                case 2:
96                                        fprintf(out, "\t%10s", "Unknown");
97                                        break;
98                        }
99                        fprintf(out, "\t%16" PRIu64 " %16" PRIu64 "\n",
100                                tcpseg_stat[j][i].bytes,
101                                tcpseg_stat[j][i].count);       
102                }
103        }
104        fclose(out);
105}
Note: See TracBrowser for help on using the repository browser.