source: tools/tracereport/nlp_report.c @ 40f19df

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since 40f19df 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
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 nlp_stat[3][65536] = {{{0,0}}} ;
[d4336d5]10
11void nlp_per_packet(struct libtrace_packet_t *packet)
12{
[4eec8dc]13        char *link=(char *)trace_get_link(packet);
[40f19df]14        uint16_t type;
[4eec8dc]15        libtrace_direction_t dir = trace_get_direction(packet);
[40f19df]16       
17        if (!link)
18                return;
19        type = htons(*(uint16_t*)(link+12));
[d4336d5]20
[4eec8dc]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);
[d4336d5]26}
27
28void nlp_report(void){
29        int i,j;
30       
[bd4bec9]31        FILE *out = fopen("nlp.rpt", "w");
[4eec8dc]32        if (!out) {
33                perror("fopen");
34                return;
35        }
36       
37        /* Put some headings up for human-readability */
[b5dc60d]38        fprintf(out, "%-12s\t%10s\t%16s %16s\n",
[4eec8dc]39                        "NETWORK LAYER",
40                        "DIRECTION",
41                        "BYTES",
42                        "PACKETS");
[d4336d5]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:
[4eec8dc]49                                fprintf(out, "%12s", "IPv4 |");
[d4336d5]50                                break;
51                        case 0x0806:
[4eec8dc]52                                fprintf(out, "%12s", "ARP |");
[d4336d5]53                                break;
[4eec8dc]54                        case 0x8137:
55                                fprintf(out, "%12s", "IPX |");
[d4336d5]56                                break;
57                        case 0x814C:
[4eec8dc]58                                fprintf(out, "%12s", "SNMP |");
[d4336d5]59                                break;
60                        case 0x86DD:
[4eec8dc]61                                fprintf(out, "%12s", "IPv6 |");
[d4336d5]62                                break;
63                        case 0x880B:
[4eec8dc]64                                fprintf(out, "%12s", "PPP |");
[d4336d5]65                                break;
66                        default:
[4eec8dc]67                                fprintf(out, "%10i |",i);
[d4336d5]68                }
[4eec8dc]69                for(j=0;j<3;j++){
70                        if (j != 0) {
71                                fprintf(out, "%12s", " |");
72                        }
73
74                        switch (j) {
75                                case 0:
[b5dc60d]76                                        fprintf(out, "\t%10s", "Outbound");
[4eec8dc]77                                        break;
78                                case 1:
[b5dc60d]79                                        fprintf(out, "\t%10s", "Inbound");
[4eec8dc]80                                        break;
81                                case 2:
[b5dc60d]82                                        fprintf(out, "\t%10s", "Unknown");
[4eec8dc]83                                        break;
[d4336d5]84                        }
[4eec8dc]85                       
[f3576f5]86                        fprintf(out, "\t%16" PRIu64 " %16" PRIu64 "\n",
[d4336d5]87                                nlp_stat[j][i].bytes,
88                                nlp_stat[j][i].count);
89                }
90        }
[4eec8dc]91        fclose(out);
[d4336d5]92}
Note: See TracBrowser for help on using the repository browser.