source: tools/tracereport/nlp_report.c @ de31abb

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

Check that link is not NULL in NLP report - rxerrors were causing segfaults

  • Property mode set to 100644
File size: 1.8 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 nlp_stat[3][65536] = {{{0,0}}} ;
10
11void nlp_per_packet(struct libtrace_packet_t *packet)
12{
13        char *link=(char *)trace_get_link(packet);
14        uint16_t type;
15        libtrace_direction_t dir = trace_get_direction(packet);
16       
17        if (!link)
18                return;
19        type = htons(*(uint16_t*)(link+12));
20
21        if (dir != TRACE_DIR_INCOMING && dir != TRACE_DIR_OUTGOING)
22                dir = TRACE_DIR_OTHER;
23       
24        nlp_stat[dir][type].count++;
25        nlp_stat[dir][type].bytes+=trace_get_wire_length(packet);
26}
27
28void nlp_report(void){
29        int i,j;
30       
31        FILE *out = fopen("nlp.rpt", "w");
32        if (!out) {
33                perror("fopen");
34                return;
35        }
36       
37        /* Put some headings up for human-readability */
38        fprintf(out, "%-12s\t%10s\t%16s %16s\n",
39                        "NETWORK LAYER",
40                        "DIRECTION",
41                        "BYTES",
42                        "PACKETS");
43        for(i = 0; i < 65536; i++){
44                if (nlp_stat[0][i].count==0 && 
45                        nlp_stat[1][i].count==0 && nlp_stat[2][i].count==0)
46                        continue;
47                switch(i){
48                        case 0x0800:
49                                fprintf(out, "%12s", "IPv4 |");
50                                break;
51                        case 0x0806:
52                                fprintf(out, "%12s", "ARP |");
53                                break;
54                        case 0x8137:
55                                fprintf(out, "%12s", "IPX |");
56                                break;
57                        case 0x814C:
58                                fprintf(out, "%12s", "SNMP |");
59                                break;
60                        case 0x86DD:
61                                fprintf(out, "%12s", "IPv6 |");
62                                break;
63                        case 0x880B:
64                                fprintf(out, "%12s", "PPP |");
65                                break;
66                        default:
67                                fprintf(out, "%10i |",i);
68                }
69                for(j=0;j<3;j++){
70                        if (j != 0) {
71                                fprintf(out, "%12s", " |");
72                        }
73
74                        switch (j) {
75                                case 0:
76                                        fprintf(out, "\t%10s", "Outbound");
77                                        break;
78                                case 1:
79                                        fprintf(out, "\t%10s", "Inbound");
80                                        break;
81                                case 2:
82                                        fprintf(out, "\t%10s", "Unknown");
83                                        break;
84                        }
85                       
86                        fprintf(out, "\t%16" PRIu64 " %16" PRIu64 "\n",
87                                nlp_stat[j][i].bytes,
88                                nlp_stat[j][i].count);
89                }
90        }
91        fclose(out);
92}
Note: See TracBrowser for help on using the repository browser.