systemtap追踪网络活动
tcp_v4_rcv.stp
%{
#include <linux/tcp.h>
#include <linux/ip.h>
%}
function print_skb_data:string(skb:long) {
length = @cast(skb, "struct sk_buff", "kernel<linux/skbuff.h>")->len
data_length = @cast(skb, "struct sk_buff", "kernel<linux/skbuff.h>")->data_len
skb_data = @cast(skb, "struct sk_buff", "kernel<linux/skbuff.h>")->data
headlen = length - data_length /* skb_headlen() */
return sprintf("%.*M", headlen, skb_data)
}
function __buffer_data:string(skb:long, str:long)
{
length = @cast(skb, "struct sk_buff", "kernel<linux/skbuff.h>")->len
data_length = @cast(skb, "struct sk_buff", "kernel<linux/skbuff.h>")->data_len
skb_data = @cast(skb, "struct sk_buff", "kernel<linux/skbuff.h>")->data
headlen = length - data_length /* skb_headlen() */
data = ""
if (str) {
data = kernel_buffer_quoted(skb_data, headlen)
} else {
data = sprintf("%.*M", headlen, skb_data)
}
return data
}
function get_skb_ip:string(skb:long)
%{
struct sk_buff *skb2;
struct