]> sourceware.org Git - systemtap.git/commitdiff
Fixes for 2.6.31. There are some changes in sk_buff structure those cause
authorDavid J. Wilder <wilder@wilder.ibm.com>
Mon, 20 Jul 2009 23:08:42 +0000 (16:08 -0700)
committerDavid J. Wilder <wilder@wilder.ibm.com>
Mon, 20 Jul 2009 23:08:42 +0000 (16:08 -0700)
failures of compiling ipmib.stp and tcpmib.stp, rtable and dst fields are
deleted.

tapset/ipmib.stp
tapset/tcpmib.stp

index 3430a8a1746f151fd46166f4481fcba78fbf3a33..0eeb6913a73dee0483f260e528a1e1c02bb52952 100644 (file)
@@ -310,8 +310,7 @@ probe ipmib.InDiscards=kernel.function("ip_rcv").return
  * MIB: IPSTATS_MIB_OUTFORWDATAGRAMS
  *
  */
-probe ipmib.ForwDatagrams=kernel.function("ip_forward_finish"),
-                        kernel.function("ipmr_forward_finish")
+probe ipmib.ForwDatagrams=kernel.function("ip_forward_finish")
 {
        skb = $skb;
        op = 1;
@@ -416,22 +415,70 @@ probe ipmib.FragFails=kernel.function("ip_fragment").return
 }
 
 function _input_route_type:long (skb:long)
+{
+%( kernel_v < "2.6.31" %?
+       return __input_route_type_old(skb)
+%:
+       return __input_route_type_new(skb)
+%)
+}
+
+function __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 __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->rtable)); 
-       THIS->__retvalue = kread(&(rt->rt_type));
+       rt = (struct rtable *)kread(&(skb->_skb_dst));
+       if  ( rt )
+               THIS->__retvalue = kread(&(rt->rt_type));
+       else
+               THIS->__retvalue = RTN_UNSPEC;
        CATCH_DEREF_FAULT();
 %}
 
 function _output_route_type:long (skb:long)
+{
+%( kernel_v < "2.6.31" %?
+       return __output_route_type_old(skb)
+%:
+       return __output_route_type_new(skb)
+%)
+}
+
+function __output_route_type_old:long (skb:long)
 %{ /* pure */
        struct rtable *rt;
        struct dst_entry *dst;
        struct sk_buff *skb = (struct sk_buff *)(long)THIS->skb;
        dst = (struct dst_entry *)kread(&(skb->dst));
        rt = (struct rtable *)dst;
-       THIS->__retvalue = kread(&(rt->rt_type));
+       if ( rt )
+               THIS->__retvalue = kread(&(rt->rt_type));
+       else
+               THIS->__retvalue = RTN_UNSPEC;
+       CATCH_DEREF_FAULT();
+%}
+
+function __output_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 ( rt )
+               THIS->__retvalue = kread(&(rt->rt_type));
+       else
+               THIS->__retvalue = RTN_UNSPEC;
        CATCH_DEREF_FAULT();
 %}
 
index e3e769009f32301ec2a4b3d63138ca3fd4a1b02c..8b443309ad92dcbe961d0bcc016ec45b9b2bc43e 100644 (file)
@@ -250,12 +250,36 @@ function _is_reset:long (skb:long)
 %}
 
 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));
-        THIS->__retvalue = kread(&(rt->rt_type));
-        CATCH_DEREF_FAULT();
+       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 ( rt )
+               THIS->__retvalue = kread(&(rt->rt_type));
+       else
+               THIS->__retvalue = RTN_UNSPEC;
+       CATCH_DEREF_FAULT();
 %}
 
 /*
This page took 0.029758 seconds and 5 git commands to generate.