]> sourceware.org Git - systemtap.git/commitdiff
Added backports required for 2.6.18 kernel for RHEL 5.
authorDavid J. Wilder <wilder@wilder.ibm.com>
Fri, 5 Feb 2010 23:59:06 +0000 (15:59 -0800)
committerDavid J. Wilder <wilder@wilder.ibm.com>
Fri, 5 Feb 2010 23:59:06 +0000 (15:59 -0800)
Files changed:
tapset/ipmib.stp, tapset.tcpmib.stp, testsuite/systemtap.examples/network/tcpipstat.stp,  testsuite/systemtap.examples/network/tcp_trace.stp

Signed-of-by: David Wilder <dwilder@us.ibm.com>
tapset/ipmib.stp
tapset/tcpmib.stp
testsuite/systemtap.examples/network/tcp_trace.stp
testsuite/systemtap.examples/network/tcpipstat.stp

index 775250e908fe63340960c3ad5b432594098fd400..fb8cd0199b87b69a91fc1507d91ddf51522abc6e 100644 (file)
@@ -29,7 +29,9 @@ global InUnknownProtos
 // global InTruncatedPkts
 global InDiscards // included counts of InHdrErrors InTruncatedPkts
 // global InDelivers
+%( kernel_v >= "2.6.24" %?
 global ForwDatagrams
+%)
 global OutRequests
 // global OutDiscards
 // global OutNoRoutes
@@ -129,6 +131,10 @@ function _plunge_into_tcphdr:long (skb:long)
 %{
        struct sk_buff *skb = (struct sk_buff *)(long)THIS->skb;
        /* as done by skb_network_header() */
+       #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,21)
+               THIS->__retvalue=(long)kread(&(skb->nh.raw)) +
+                       (long)sizeof(struct tcphdr);
+       #else
        #ifdef NET_SKBUFF_DATA_USES_OFFSET
                THIS->__retvalue=(long)kread(&(skb->network_header)) +
                (long)(kread(&(skb->head))) +
@@ -137,6 +143,7 @@ function _plunge_into_tcphdr:long (skb:long)
                THIS->__retvalue=(long)kread(&(skb->network_header)) +
                (long)sizeof(struct tcphdr);
        #endif
+       #endif
        CATCH_DEREF_FAULT();
 %}
 
@@ -310,6 +317,7 @@ probe ipmib.InDiscards=kernel.function("ip_rcv").return
  * MIB: IPSTATS_MIB_OUTFORWDATAGRAMS
  *
  */
+%( kernel_v >= "2.6.24" %?
 probe ipmib.ForwDatagrams=kernel.function("ip_forward_finish")
 {
        skb = $skb;
@@ -318,6 +326,7 @@ probe ipmib.ForwDatagrams=kernel.function("ip_forward_finish")
        key = ipmib_filter_key(skb,op,SourceIsLocal);
        if ( key ) ForwDatagrams[key] += op;
 }
+%)
 
 /**
  * probe tcpmib.OutRequests - Count a request to send a packet.
index cfaaf9c718d3fb27b5f926ca4f891f7be5e1ed24..6a9b8145401762693efa6c32e3c91780c0f4a317 100644 (file)
 %}
 
 global ActiveOpens
+%( kernel_v > "2.6.21" %?
 global AttemptFails
+%)
+%( kernel_v > "2.6.24" %?
 global CurrEstab
+%)
+%( kernel_v > "2.6.24" %?
 global EstabResets
+%)
 // global InErrs, this mib is not yet supported
 global InSegs
 global OutRsts
@@ -144,6 +150,7 @@ tcpmib.ActiveOpens=kernel.function("tcp_connect").return
  * MIB: TCP_MIB_ATTEMPTFAILS
  *
  */
+%( kernel_v > "2.6.21" %?
 probe
 tcpmib.AttemptFails=kernel.function("tcp_done")
 {
@@ -158,6 +165,7 @@ tcpmib.AttemptFails=kernel.function("tcp_done")
                if ( key ) AttemptFails[key] += op;
        }
 }
+%)
 
 /**
  * probe tcpmib.CurrEstab - Update the count of open sockets.
@@ -168,6 +176,7 @@ tcpmib.AttemptFails=kernel.function("tcp_done")
  * MIB: TCP_MIB_CURRESTAB
  *
  */
+%( kernel_v > "2.6.24" %?
 probe
 tcpmib.CurrEstab=kernel.function("tcp_set_state")
 {
@@ -188,6 +197,7 @@ tcpmib.CurrEstab=kernel.function("tcp_set_state")
                }
        }
 }
+%)
 
 /**
  * probe tcpmib.EstabResets - Count the reset of a socket.
@@ -198,6 +208,7 @@ tcpmib.CurrEstab=kernel.function("tcp_set_state")
  * MIB: TCP_MIB_ESTABRESETS
  *
  */
+%( kernel_v > "2.6.24" %?
 probe
 tcpmib.EstabResets=kernel.function("tcp_set_state")
 {
@@ -215,6 +226,7 @@ tcpmib.EstabResets=kernel.function("tcp_set_state")
                if ( key ) EstabResets[key] += op;
        }
 }
+%)
 
 /**
  * probe tcpmib.InSegs - Count an incomming tcp segment.
@@ -225,6 +237,7 @@ tcpmib.EstabResets=kernel.function("tcp_set_state")
  * MIB: TCP_MIB_INSEGS
  *
  */
+%( kernel_v > "2.6.24" %?
 probe
 tcpmib.InSegs=kernel.function("__inet_lookup_established").return ?
 {
@@ -233,6 +246,16 @@ tcpmib.InSegs=kernel.function("__inet_lookup_established").return ?
        key = tcpmib_filter_key(sk,op);
        if ( key ) InSegs[key] += op;
 }
+%:
+probe
+tcpmib.InSegs=kernel.function("tcp_v4_rcv")
+{
+       skb=$skb
+       op=1;
+       key = ipmib_filter_key(skb,op,0);
+       if ( key ) InSegs[key] += op;
+}
+%)
 
 /**
  * probe tcpmib.OutRsts - Count the sending of a reset packet.
@@ -257,41 +280,36 @@ function _is_reset:long (skb:long)
         struct tcphdr *th;
         struct sk_buff *skb = (struct sk_buff *)(long)THIS->skb;
 
+       #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,21)
+               th = (struct tcphdr *)kread(&(skb->h.th));
+       #else
+
        #ifdef NET_SKBUFF_DATA_USES_OFFSET
                th = (struct tcphdr *)(kread(&(skb->network_header)) + kread(&(skb->head)));
        #else
                th = (struct tcphdr *)kread(&(skb->network_header));
        #endif
+       #endif
         THIS->__retvalue = th->rst;
         CATCH_DEREF_FAULT();
 %}
 
 function _tcpmib_input_route_type:long (skb:long)
-{
-%( kernel_v < "2.6.31" %?
-       return __tcpmib_input_route_type_old(skb)
-%:
-       return __tcpmib_input_route_type_new(skb)
-%)
-}
-
-function __tcpmib_input_route_type_old:long (skb:long)
 %{ /* pure */
        struct rtable *rt;
        struct sk_buff *skb = (struct sk_buff *)(long)THIS->skb;
-       rt = (struct rtable *)kread(&(skb->rtable));
-       if ( rt )
-               THIS->__retvalue = kread(&(rt->rt_type));
-       else
-               THIS->__retvalue = RTN_UNSPEC;
-       CATCH_DEREF_FAULT();
-%}
 
-function __tcpmib_input_route_type_new:long (skb:long)
-%{ /* pure */
-       struct rtable *rt;
-       struct sk_buff *skb = (struct sk_buff *)(long)THIS->skb;
-       rt = (struct rtable *)kread(&(skb->_skb_dst));
+       #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)
+               rt = (struct rtable *)kread(&(skb->_skb_dst));
+       #else
+
+       #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
+               rt = (struct rtable *)kread(&(skb->dst));
+       #else
+               rt = (struct rtable *)kread(&(skb->rtable));
+       #endif
+       #endif
+
        if ( rt )
                THIS->__retvalue = kread(&(rt->rt_type));
        else
@@ -319,7 +337,11 @@ tcpmib.OutRsts.A=kernel.function("tcp_v4_send_reset")
         if ( _is_reset(skb) ) next
         if (_tcpmib_input_route_type($skb) != _rtn_local() )
                 next;
+%( kernel_v > "2.6.20" %?
         key = tcpmib_filter_key(sk,op);
+%:
+       key = ipmib_filter_key(skb,op,1);
+%)
         if ( key ) OutRsts[key] += op;
 }
 
index 4763b3863b4be7754c15f772c1dfd3fb44287020..d5a685ed3c3a2a452d6e580f9b2ea14347c0015b 100755 (executable)
@@ -283,6 +283,7 @@ probe kernel.function("tcp_write_timer")
        find_timer[key] = @cast(sk, "inet_connection_sock")->icsk_pending
 }
 
+%( kernel_v > "2.6.24" %?
 probe kernel.function("tcp_set_state")
 {
        sk = $sk
@@ -295,6 +296,7 @@ probe kernel.function("tcp_set_state")
                clean_up(key);
        }
 }
+%)
 
 function print_header()
 {
@@ -343,6 +345,7 @@ function print_packet_info:long ( key:long, SourceIsLocal:long)
        printf("\n");
 }
 
+%( kernel_v > "2.6.24" %?
 function print_close:long (key:long, new_state:long)
 {
        foreach ( [laddr, raddr, lport, rport] in key_list ){
@@ -357,6 +360,7 @@ function print_close:long (key:long, new_state:long)
        printf("%-12s",state_num2str(new_state))
        printf("\n");
 }
+%)
 
 /*
  * Update the values in the data collection arrays, returns 1 if one or more
@@ -508,8 +512,12 @@ function process_cmdline:long ()
                                        snd_wnd_flg = 1;  continue };
                                if ( byte == "srtt" ) {
                                        srtt_flg = 1;  continue };
+%( kernel_v > "2.6.24" %?
                                if ( byte == "state" ) {
                                        state_flg = 1;  continue };
+%:
+                               state_flg = 0;
+%)
                                if ( byte == "txq" ) {
                                        txq_flg = 1;  continue };
                                if ( byte == "rxq" ) {
@@ -528,9 +536,12 @@ function process_cmdline:long ()
                                        length_flg = 1; continue };
                                if ( byte == "all" ) {
                                        snd_cwnd_flg = snd_wnd_flg = srtt_flg =
-                                       state_flg = txq_flg = rxq_flg =
+                                       txq_flg = rxq_flg =
                                        rexmit_flg = pmtu_flg = ssthresh_flg =
                                        timer_flg = rcvwnd_flg = length_flg = 1;
+%( kernel_v > "2.6.24" %?
+                                       state_flg = 1;
+%)
                                        continue
                                };
                                usage("Unknown filter value given!")
@@ -591,10 +602,12 @@ function process_cmdline:long ()
        /* default filter is all */
        if ( !filter_given )
                snd_cwnd_flg = snd_wnd_flg = srtt_flg =
-               state_flg = txq_flg = rxq_flg =
+               txq_flg = rxq_flg =
                rexmit_flg = pmtu_flg = ssthresh_flg =
                timer_flg = rcvwnd_flg = length_flg = 1;
-
+%( kernel_v > "2.6.24" %?
+               state_flg = 1;
+%)
        return filter_number;
 }
 
@@ -697,6 +710,7 @@ function filter_key:long (sk:long)
 }
 
 /* Free up a slot in the data arrays */
+%( kernel_v > "2.6.24" %?
 function clean_up (key:long)
 {
        foreach ( [laddr, raddr, lport, rport] in key_list ){
@@ -723,6 +737,7 @@ function clean_up (key:long)
        if (rcvwnd_flg) delete rcvwnd[key];
        delete length[key];
 }
+%)
 
 /* Terminates the run in timeout seconds, using global timeout value */
 probe timer.s(1) {
@@ -737,7 +752,11 @@ function usage (msg:string)
        printf("\t\t\t[update=change|all] Rule\n\n");
        printf("\tRule format:");
        printf("<local address>:<local-port>-<remote address>:<remote-port>\n");
+%( kernel_v > "2.6.24" %?
        printf("\tFilter values: all|state|txq|rxq|srtt|snd_cwnd|snd_wnd|\n");
+%:
+       printf("\tFilter values: all|txq|rxq|srtt|snd_cwnd|snd_wnd|\n");
+%)
        printf("\t\t\trexmit|pmtu|ssthresh|timer|rcvwnd\n\n");
        printf("%s\n\n",msg);
        error(msg);
index 23f0e7cdd8541879b5507b56190cb1b2e84ac336..d545c09e22a7c12bbe82559a1b37e40b2f1a8706 100755 (executable)
@@ -446,12 +446,18 @@ function print_tcpmib (key:long)
        printf("Tcp:\n");
        if (ActiveOpens[key]||!nozeros)
                printf("\tActiveOpens = %d\n", ActiveOpens[key]);
+%( kernel_v > "2.6.21" %?
        if (AttemptFails[key]||!nozeros)
                printf("\tAttemptFails = %d\n", AttemptFails[key]);
+%)
+%( kernel_v > "2.6.24" %?
        if (CurrEstab[key]||!nozeros)
                printf("\tCurrEstab = %d\n", CurrEstab[key]);
+%)
+%( kernel_v > "2.6.24" %?
        if (EstabResets[key]||!nozeros)
                printf("\tEstabResets = %d\n", EstabResets[key]);
+%)
 //     if (InErrs[key]||!nozeros) 
 //             printf("\tInErrs = %d\n", InErrs[key]);
        if (InSegs[key]||!nozeros)
@@ -514,8 +520,10 @@ function _report(laddr:long, raddr:long, lport:long, rport:long)
        }
 
        key = key_list[laddr, raddr, lport, rport]
+%( kernel_v > "2.6.24" %?
        if ( onclose && (CurrEstab[key] < 0) )
                printf("Stats were not collected for the entire socket life.\n")
+%)
        printf("-----------------------------------------\n");
                
        print_sockmib(key)
@@ -560,6 +568,7 @@ probe linuxmib.* {}
  * the dump off all stats for this socket. This feature only makes sense
  * when index=tuple. 
  */
+%( kernel_v > "2.6.24" %?
 probe tcpmib.CurrEstab
 {
        if (!onclose) next
@@ -576,6 +585,7 @@ probe tcpmib.CurrEstab
        delete key_list[laddr, raddr, lport, rport]
        delete CurrEstab[key]
 }
+%)
        
 
 /* SNMP has no counter for the number of bytes sent or received by TCP.
@@ -584,7 +594,11 @@ probe tcpmib.CurrEstab
 global SockSendbytes;
 global SockSendmsg;
 probe tcp.sendmsg.return {
-        sk = $sock->sk;
+%( kernel_v < "2.6.23" %?
+       sk=$sk;
+%:
+       sk = $sock->sk;
+%)
         op = size; // $return
        if ( op <= 0 ) next;
         if ( !sk ) next;
This page took 0.034207 seconds and 5 git commands to generate.