Changeset cde85f8


Ignore:
Timestamp:
12/02/09 11:46:57 (11 years ago)
Author:
Perry Lorier <perry@…>
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:
5c866be
Parents:
c7062df
Message:

Reorganise to support switching off source/dest ip/ports properly

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/tracetop/tracetop.cc

    r4325ef8 rcde85f8  
    103103}
    104104
     105static void set_port_for_sockaddr(struct sockaddr *sa,uint16_t port)
     106{
     107        switch (sa->sa_family) {
     108                case AF_INET:
     109                        ((struct sockaddr_in *)sa)->sin_port = htons(port);
     110                        break;
     111                case AF_INET6:
     112                        ((struct sockaddr_in6 *)sa)->sin6_port = htons(port);
     113                        break;
     114        }
     115}
     116
     117static void clear_addr_for_sockaddr(struct sockaddr *sa)
     118{
     119        switch (sa->sa_family) {
     120                case AF_INET:
     121                        ((struct sockaddr_in *)sa)->sin_addr.s_addr = 0;
     122                        break;
     123                case AF_INET6:
     124                        memset((void*)&((struct sockaddr_in6 *)sa)->sin6_addr,0,sizeof(((struct sockaddr_in6 *)sa)->sin6_addr));
     125                        break;
     126        }
     127}
     128
     129static uint16_t get_port_from_sockaddr(struct sockaddr *sa)
     130{
     131        switch (sa->sa_family) {
     132                case AF_INET:
     133                        return ntohs(((struct sockaddr_in *)sa)->sin_port);
     134                        break;
     135                case AF_INET6:
     136                        return ntohs(((struct sockaddr_in6 *)sa)->sin6_port);
     137                        break;
     138        }
     139}
     140
    105141struct flowkey_t {
    106142        struct sockaddr_storage sip;
     
    121157                        if (c != 0) return c<0;
    122158                }
    123 
    124                 if (use_sport && sport != b.sport) return sport < b.sport;
    125                 if (use_dport && dport != b.dport) return dport < b.dport;
    126159
    127160                return protocol < b.protocol;
     
    161194        flows_t::iterator it;
    162195
    163         if (use_sip && trace_get_source_address(packet,(struct sockaddr*)&flowkey.sip)==NULL)
     196        if (trace_get_source_address(packet,(struct sockaddr*)&flowkey.sip)==NULL)
    164197                flowkey.sip.ss_family = AF_UNSPEC;
    165         if (use_dip && trace_get_destination_address(packet,(struct sockaddr*)&flowkey.dip)==NULL)
     198
     199        if (trace_get_destination_address(packet,(struct sockaddr*)&flowkey.dip)==NULL)
    166200                flowkey.dip.ss_family = AF_UNSPEC;
     201
     202        if (!use_sip)
     203                clear_addr_for_sockaddr((struct sockaddr *)&flowkey.sip);
     204
     205        if (!use_dip)
     206                clear_addr_for_sockaddr((struct sockaddr *)&flowkey.dip);
     207
     208        if (!use_sport)
     209                set_port_for_sockaddr((struct sockaddr *)&flowkey.sip,0);
     210
     211        if (!use_dport)
     212                set_port_for_sockaddr((struct sockaddr *)&flowkey.dip,0);
     213
    167214        if (use_protocol && trace_get_transport(packet,&flowkey.protocol, NULL) == NULL)
    168215                flowkey.protocol = 255;
    169         if (use_sport) flowkey.sport = trace_get_source_port(packet);
    170         if (use_dport) flowkey.dport = trace_get_destination_port(packet);
     216
    171217
    172218        it = flows.find(flowkey);
     
    191237        struct sockaddr_storage sip;
    192238        struct sockaddr_storage dip;
    193         uint16_t sport;
    194         uint16_t dport;
    195239        uint8_t protocol;
    196240
     
    212256                data.sip = it->first.sip;
    213257                data.dip = it->first.dip;
    214                 data.sport = it->first.sport;
    215                 data.dport = it->first.dport;
    216258                data.protocol = it->first.protocol;
    217259                pq.push(data);
     
    272314                }
    273315                if (use_sport)
    274                         printw("%-5d\t", pq.top().sport);
     316                        printw("%-5d\t", get_port_from_sockaddr((struct sockaddr*)&pq.top().sip));
    275317                if (use_dip) {
    276318                        printw("%20s",
     
    284326                }
    285327                if (use_dport)
    286                         printw("%-5d\t", pq.top().dport);
     328                        printw("%-5d\t", get_port_from_sockaddr((struct sockaddr*)&pq.top().dip));
    287329                if (use_protocol) {
    288330                        struct protoent *proto = getprotobynumber(pq.top().protocol);
Note: See TracChangeset for help on using the changeset viewer.