diff options
author | David J. Wilder <wilder@wilder.ibm.com> | 2009-07-20 16:08:42 -0700 |
---|---|---|
committer | David J. Wilder <wilder@wilder.ibm.com> | 2009-07-20 16:08:42 -0700 |
commit | 1c47903b03c678470cf81c3a7d5c3ad95420d569 (patch) | |
tree | 5ca4d591bc62a73f5ffa734b177e18f549fe0779 | |
parent | c8a44dea9630e500f1eb44cb7934217fb2212f4e (diff) | |
download | systemtap-steved-1c47903b03c678470cf81c3a7d5c3ad95420d569.tar.gz systemtap-steved-1c47903b03c678470cf81c3a7d5c3ad95420d569.tar.xz systemtap-steved-1c47903b03c678470cf81c3a7d5c3ad95420d569.zip |
Fixes for 2.6.31. There are some changes in sk_buff structure those cause
failures of compiling ipmib.stp and tcpmib.stp, rtable and dst fields are
deleted.
-rw-r--r-- | tapset/ipmib.stp | 57 | ||||
-rw-r--r-- | tapset/tcpmib.stp | 34 |
2 files changed, 81 insertions, 10 deletions
diff --git a/tapset/ipmib.stp b/tapset/ipmib.stp index 3430a8a1..0eeb6913 100644 --- a/tapset/ipmib.stp +++ b/tapset/ipmib.stp @@ -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(); %} diff --git a/tapset/tcpmib.stp b/tapset/tcpmib.stp index e3e76900..8b443309 100644 --- a/tapset/tcpmib.stp +++ b/tapset/tcpmib.stp @@ -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(); %} /* |