This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tapsets/16659] New: On kernels >= 3.13, the __ip_sock_daddr() tapset function no longer compiles


https://sourceware.org/bugzilla/show_bug.cgi?id=16659

            Bug ID: 16659
           Summary: On kernels >= 3.13, the __ip_sock_daddr() tapset
                    function no longer compiles
           Product: systemtap
           Version: unspecified
            Status: NEW
          Severity: normal
          Priority: P2
         Component: tapsets
          Assignee: systemtap at sourceware dot org
          Reporter: dsmith at redhat dot com

On kernels >= 3.13, the __ip_sock_daddr() tapset function no longer compiles:

####
# stap -p4 -ve 'probe tcp.recvmsg { printf("%s\n", daddr) }'
Pass 1: parsed user script and 100 library script(s) using
184500virt/27784res/2468shr/26000data kb, in 110usr/0sys/113real ms.
semantic error: unable to find member 'daddr' for struct ipv6_pinfo
(alternatives: saddr, cork, opt, recverr, rxopt, sndflow, tclass, rxpmtu,
daddr_cache, dontfrag, mc_loop, pmtudisc, __unused_1, __unused_2, flow_label,
ipv6only, srcprefs, frag_size, hop_limit, mcast_oif, rcv_tclass, saddr_cache,
ucast_oif, dst_cookie, mcast_hops, pktoptions, ipv6_ac_list, ipv6_fl_list,
ipv6_mc_list, min_hopcount, rx_dst_cookie, sticky_pktinfo): operator '->' at
/usr/local/share/systemtap/tapset/linux/ip.stp:111:63
        source:     return (&@cast(sock, "inet_sock",
"kernel<net/ip.h>")->pinet6->daddr)
                                                                               
 ^

semantic error: unable to find member 'daddr' for struct ipv6_pinfo
(alternatives: saddr, cork, opt, recverr, rxopt, sndflow, tclass, rxpmtu,
daddr_cache, dontfrag, mc_loop, pmtudisc, __unused_1, __unused_2, flow_label,
ipv6only, srcprefs, frag_size, hop_limit, mcast_oif, rcv_tclass, saddr_cache,
ucast_oif, dst_cookie, mcast_hops, pktoptions, ipv6_ac_list, ipv6_fl_list,
ipv6_mc_list, min_hopcount, rx_dst_cookie, sticky_pktinfo): operator '->' at
:111:63
        source:     return (&@cast(sock, "inet_sock",
"kernel<net/ip.h>")->pinet6->daddr)
                                                                               
 ^

semantic error: unable to find member 'daddr' for struct ipv6_pinfo
(alternatives: saddr, cork, opt, recverr, rxopt, sndflow, tclass, rxpmtu,
daddr_cache, dontfrag, mc_loop, pmtudisc, __unused_1, __unused_2, flow_label,
ipv6only, srcprefs, frag_size, hop_limit, mcast_oif, rcv_tclass, saddr_cache,
ucast_oif, dst_cookie, mcast_hops, pktoptions, ipv6_ac_list, ipv6_fl_list,
ipv6_mc_list, min_hopcount, rx_dst_cookie, sticky_pktinfo): operator '->' at
:111:63
        source:     return (&@cast(sock, "inet_sock",
"kernel<net/ip.h>")->pinet6->daddr)
                                                                               
 ^

Pass 2: analyzed script: 1 probe(s), 8 function(s), 4 embed(s), 0 global(s)
using 467480virt/152728res/4012shr/149072data kb, in 1490usr/210sys/1889real
ms.
Pass 2: analysis failed.  [man error::pass2]
====

This is because of the following kernel commit:

====
commit efe4208f47f907b86f528788da711e8ab9dea44d
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Oct 3 15:42:29 2013 -0700

    ipv6: make lookups simpler and faster

    TCP listener refactoring, part 4 :

    To speed up inet lookups, we moved IPv4 addresses from inet to struct
    sock_common

    Now is time to do the same for IPv6, because it permits us to have fast
    lookups for all kind of sockets, including upcoming SYN_RECV.

    Getting IPv6 addresses in TCP lookups currently requires two extra cache
    lines, plus a dereference (and memory stall).

    inet6_sk(sk) does the dereference of inet_sk(__sk)->pinet6

    This patch is way bigger than its IPv4 counter part, because for IPv4,
    we could add aliases (inet_daddr, inet_rcv_saddr), while on IPv6,
    it's not doable easily.

    inet6_sk(sk)->daddr becomes sk->sk_v6_daddr
    inet6_sk(sk)->rcv_saddr becomes sk->sk_v6_rcv_saddr

    And timewait socket also have tw->tw_v6_daddr & tw->tw_v6_rcv_saddr
    at the same offset.

    We get rid of INET6_TW_MATCH() as INET6_MATCH() is now the generic
    macro.
====

-- 
You are receiving this mail because:
You are the assignee for the bug.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]