Changeset 4eec8dc


Ignore:
Timestamp:
02/22/07 13:48:08 (14 years ago)
Author:
Josef Vodanovich <jjv4@…>
Branches:
4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, getfragoff, help, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
Children:
b5dc60d
Parents:
013d3692
Message:

Updated NLP and ECN reports with Shanes file output format and tidied up a bit of code so its readable, also added -t ttl to usage report.

Location:
tools/tracereport
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • tools/tracereport/ecn_report.c

    r09be643 r4eec8dc  
    66#include "tracereport.h"
    77
    8 static stat_t ecn_stat[4][4] = {{{0,0}}} ;
    9 static bool suppress[4] = {true,true,true,true};
     8static stat_t ecn_stat[3][4] = {{{0,0}}} ;
    109
    1110void ecn_per_packet(struct libtrace_packet_t *packet)
    1211{
    1312        struct libtrace_ip *ip = trace_get_ip(packet);
     13        libtrace_direction_t dir = trace_get_direction(packet);
     14        int ecn;
     15       
    1416        if (!ip)
    1517                return;
    16         int dir = trace_get_direction(packet);
    17         if(dir < 0 || dir > 1)
    18                 dir = 2;
    1918       
    20         int ecn = ip->ip_tos;
    21         ecn &= 3;
     19        if (dir != TRACE_DIR_INCOMING && dir != TRACE_DIR_OUTGOING)
     20                dir = TRACE_DIR_OTHER;
     21       
     22        ecn = ip->ip_tos & 0x2;
    2223        ecn_stat[dir][ecn].count++;
    2324        ecn_stat[dir][ecn].bytes+=trace_get_wire_length(packet);
    24         suppress[dir] = false;
    25 }
    26 
    27 void ecn_suppress()
    28 {
    29         int i;
    30         printf("%-20s","Direction:");
    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","ECN");
    50         for(i=0;i<4;i++){
    51                 if(!suppress[i]){
    52                         printf("\t%12s\t%12s", "bytes","packets");
    53                 }
    54         }
    55         printf("\n");
    5625}
    5726
     
    5928{
    6029        int i,j;
    61         printf("# ECN breakdown:\n");
    62         ecn_suppress();
     30       
     31        FILE *out = fopen("ecn.out", "w");
     32        if (!out) {
     33                perror("fopen");
     34                return;
     35        }
     36
     37        /* Put some headings up for human-readability */
     38        fprintf(out, "%-12s\t%8s\t%12s\t%12s\n",
     39                        "ECN",
     40                        "DIRECTION",
     41                        "BYTES",
     42                        "PACKETS");
     43       
    6344        for(i=0;i<4;++i) {
    6445                if (ecn_stat[0][i].count==0 &&
    6546                        ecn_stat[1][i].count==0 && ecn_stat[2][i].count==0)
    6647                        continue;
    67                 printf("%20i:",i);
    68                 for(j=0;j<4;j++){
    69                         if (ecn_stat[j][i].count==0){
    70                                 if(!suppress[j])
    71                                         printf("\t%24s"," ");
    72                                 continue;
     48                switch(i){
     49                        case 1:
     50                                fprintf(out, "%12s", "ECN CAPE |");
     51                                break;
     52                        case 2:
     53                                fprintf(out, "%12s", "ECN CAPE |");
     54                                break;
     55                        case 3:
     56                                fprintf(out, "%12s", "CONG EXP |");
     57                                break;
     58                        default:
     59                                fprintf(out, "%12s", "NO ECN |");       
     60                }
     61               
     62                for(j=0;j<3;j++){
     63                        if (j != 0) {
     64                                fprintf(out, "%12s", " |");
    7365                        }
    74                         printf("\t%12" PRIu64 "\t%12" PRIu64,
     66                       
     67                        switch (j) {
     68                                case 0:
     69                                        fprintf(out, "\t%8s", "Outbound");
     70                                        break;
     71                                case 1:
     72                                        fprintf(out, "\t%8s", "Inbound");
     73                                        break;
     74                                case 2:
     75                                        fprintf(out, "\t%8s", "Unknown");
     76                                        break;
     77                        }
     78                        fprintf(out, "\t%12llu %12llu\n",
    7579                                ecn_stat[j][i].bytes,
    7680                                ecn_stat[j][i].count);
    7781                }
    78                 printf("\n");
    7982        }
    8083       
     
    8487                        total += ecn_stat[i][j].count;
    8588        }
    86         printf("%s: %i\n", "Total ECN", total);
     89        fprintf(out, "%s: %i\n", "Total ECN", total);
     90        fclose(out);
    8791}
  • tools/tracereport/nlp_report.c

    rd4336d5 r4eec8dc  
    66#include "tracereport.h"
    77
    8 static stat_t nlp_stat[4][65536] = {{{0,0}}} ;
    9 static bool suppress[4] = {true,true,true,true};
     8static stat_t nlp_stat[3][65536] = {{{0,0}}} ;
    109
    1110void nlp_per_packet(struct libtrace_packet_t *packet)
    1211{
    13         unsigned char *p=trace_get_link(packet);
    14         uint16_t a;
     12        char *link=(char *)trace_get_link(packet);
     13        uint16_t type = htons(*(uint16_t*)(link+12));
     14        libtrace_direction_t dir = trace_get_direction(packet);
     15
     16        if (dir != TRACE_DIR_INCOMING && dir != TRACE_DIR_OUTGOING)
     17                dir = TRACE_DIR_OTHER;
    1518       
    16         p += 12;
    17         a = *p;
    18         a *= 256;
    19         a += p[1];
    20         int dir = trace_get_direction(packet);
    21         if(dir < 0 || dir > 1)
    22                 dir = 2;
    23        
    24         nlp_stat[dir][a].count++;
    25         nlp_stat[dir][a].bytes+=trace_get_wire_length(packet);
    26         suppress[dir] = false;
    27 }
    28 
    29 void nlp_suppress()
    30 {
    31         int i;
    32         printf("%-20s","Direction:");
    33         //printf("%20s", " ");
    34         for(i=0;i<4;i++){
    35                 if(!suppress[i]){
    36                         switch(i){
    37                                 case 0:
    38                                         printf("\t%24s", "Outbound   ");
    39                                         break;
    40                                 case 1:
    41                                         printf("\t%24s", "Inbound   ");
    42                                         break;
    43                                 case 2:
    44                                         printf("\t%24s", "Undefined   ");
    45                                         break;
    46                                 default:
    47                                         break;
    48                         }
    49                 }
    50         }
    51         printf("\n");
    52         printf("%-20s","NLP");
    53         for(i=0;i<4;i++){
    54                 if(!suppress[i]){
    55                         printf("\t%12s\t%12s", "bytes","packets");
    56                 }
    57         }
    58         printf("\n");
     19        nlp_stat[dir][type].count++;
     20        nlp_stat[dir][type].bytes+=trace_get_wire_length(packet);
    5921}
    6022
    6123void nlp_report(void){
    62         printf("# Network Layer Protocol breakdown:\n");
    63         nlp_suppress();
    6424        int i,j;
    6525       
     26        FILE *out = fopen("nlp.out", "w");
     27        if (!out) {
     28                perror("fopen");
     29                return;
     30        }
     31       
     32        /* Put some headings up for human-readability */
     33        fprintf(out, "%-12s\t%8s\t%12s\t%12s\n",
     34                        "NETWORK LAYER",
     35                        "DIRECTION",
     36                        "BYTES",
     37                        "PACKETS");
    6638        for(i = 0; i < 65536; i++){
    6739                if (nlp_stat[0][i].count==0 &&
     
    7042                switch(i){
    7143                        case 0x0800:
    72                                 printf("%20s", "IPv4");
     44                                fprintf(out, "%12s", "IPv4 |");
    7345                                break;
    7446                        case 0x0806:
    75                                 printf("%20s", "ARP");
     47                                fprintf(out, "%12s", "ARP |");
    7648                                break;
    77                         case 0x8137:   
    78                                 printf("%20s", "IPX");
     49                        case 0x8137:
     50                                fprintf(out, "%12s", "IPX |");
    7951                                break;
    8052                        case 0x814C:
    81                                 printf("%20s", "SNMP");
     53                                fprintf(out, "%12s", "SNMP |");
    8254                                break;
    8355                        case 0x86DD:
    84                                 printf("%20s", "IPv6");
     56                                fprintf(out, "%12s", "IPv6 |");
    8557                                break;
    8658                        case 0x880B:
    87                                 printf("%20s", "PPP");
     59                                fprintf(out, "%12s", "PPP |");
    8860                                break;
    8961                        default:
    90                                 printf("%20i:",i);
     62                                fprintf(out, "%10i |",i);
    9163                }
    92                 for(j=0;j<4;j++){
    93                         if (nlp_stat[j][i].count==0){
    94                                 if(!suppress[j])
    95                                         printf("\t%24s"," ");
    96                                 continue;
     64                for(j=0;j<3;j++){
     65                        if (j != 0) {
     66                                fprintf(out, "%12s", " |");
    9767                        }
    98                         printf("\t%12" PRIu64 "\t%12" PRIu64,
     68
     69                        switch (j) {
     70                                case 0:
     71                                        fprintf(out, "\t%8s", "Outbound");
     72                                        break;
     73                                case 1:
     74                                        fprintf(out, "\t%8s", "Inbound");
     75                                        break;
     76                                case 2:
     77                                        fprintf(out, "\t%8s", "Unknown");
     78                                        break;
     79                        }
     80                       
     81                        fprintf(out, "\t%12llu %12llu\n",
    9982                                nlp_stat[j][i].bytes,
    10083                                nlp_stat[j][i].count);
    10184                }
    102                 printf("\n");
    10385        }
     86        fclose(out);
    10487}
  • tools/tracereport/tracereport.c

    rf9b6f64 r4eec8dc  
    102102                if (reports_required & REPORT_TYPE_DIR)
    103103                        dir_per_packet(packet);
    104                 /*
    105104                if (reports_required & REPORT_TYPE_ECN)
    106105                        ecn_per_packet(packet);
     106                /*
    107107                if (reports_required & REPORT_TYPE_TCPSEQ)
    108108                        tcpseg_per_packet(packet);
     
    122122        "-p --port              Report port numbers\n"
    123123        "-T --tos               Report IP TOS\n"
     124        "-t --ttl               Report IP TTL\n"
    124125        "-O --tcpoptions        \tReport TCP Options\n"
    125126        "-n --nlp               Report network layer protocols\n"
     
    239240        if (reports_required & REPORT_TYPE_DIR)
    240241                dir_report();
    241         /*
    242242        if (reports_required & REPORT_TYPE_ECN)
    243243                ecn_report();
     244        /*
    244245        if (reports_required & REPORT_TYPE_TCPSEG)
    245246                tcpseg_report();
Note: See TracChangeset for help on using the changeset viewer.