Changeset 496864e for lib


Ignore:
Timestamp:
06/27/06 14:04:09 (15 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:
306f91c
Parents:
e5c2bc4
Message:

Store the port number in the sockaddr in trace_get_{source,destination}_address

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/protocols.c

    r38ff7c9 r496864e  
    602602        uint16_t proto;
    603603        uint32_t remaining;
    604         void *transport;
     604        void *l3;
     605        struct ports_t *ports;
    605606        static struct sockaddr_storage dummy;
    606607
     
    610611        remaining = trace_get_capture_length(packet);
    611612
    612         transport = trace_get_payload_from_link(
     613        l3 = trace_get_payload_from_link(
    613614                        trace_get_link(packet),
    614615                        trace_get_link_type(packet),
     
    616617                        &remaining);
    617618
    618         if (!transport)
     619        if (!l3)
    619620                return false;
    620621
    621         transport = trace_get_vlan_payload_from_ethernet_payload(transport,
     622        l3 = trace_get_vlan_payload_from_ethernet_payload(l3,
    622623                        &proto,
    623624                        &remaining);
    624625
    625         if (!transport)
    626                 return false;
     626        if (!l3)
     627                return NULL;
    627628
    628629        switch (proto) {
     
    630631                {
    631632                        struct sockaddr_in *addr4=(struct sockaddr_in*)addr;
    632                         libtrace_ip_t *ip = (libtrace_ip_t*)transport;
     633                        libtrace_ip_t *ip = (libtrace_ip_t*)l3;
     634                        ports = trace_get_payload_from_ip(ip,NULL,&remaining);
    633635                        addr4->sin_family=AF_INET;
    634                         addr4->sin_port=0;
     636                        if (ports && remaining>=sizeof(*ports))
     637                                addr4->sin_port=ports->src;
     638                        else
     639                                addr4->sin_port=0;
    635640                        addr4->sin_addr=ip->ip_src;
    636641                        return addr;
     
    639644                {
    640645                        struct sockaddr_in6 *addr6=(struct sockaddr_in6*)addr;
    641                         libtrace_ip6_t *ip6 = (libtrace_ip6_t*)transport;
     646                        libtrace_ip6_t *ip6 = (libtrace_ip6_t*)l3;
     647                        ports = trace_get_payload_from_ip6(ip6,NULL,&remaining);
    642648                        addr6->sin6_family=AF_INET6;
    643                         addr6->sin6_port=0;
     649                        if (ports && remaining>=sizeof(*ports))
     650                                addr6->sin6_port=ports->dst;
     651                        else
     652                                addr6->sin6_port=0;
    644653                        addr6->sin6_flowinfo=0;
    645654                        addr6->sin6_addr=ip6->ip_src;
Note: See TracChangeset for help on using the changeset viewer.