diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/inet_bind.stp | 102 | ||||
| -rw-r--r-- | net/ipv6_bind.stp | 58 |
2 files changed, 160 insertions, 0 deletions
diff --git a/net/inet_bind.stp b/net/inet_bind.stp new file mode 100644 index 0000000..621473a --- /dev/null +++ b/net/inet_bind.stp @@ -0,0 +1,102 @@ +%{ +#include <net/sock.h> +#include <net/inet_hashtables.h> +#include <linux/in.h> +%} + +function _inet_ntoa:string (_uaddr:long) %{ + struct sockaddr_in *addr; + unsigned char *bytes; + + addr = (struct sockaddr_in *)(long)kread(&THIS->_uaddr); + bytes = (unsigned char *)&addr->sin_addr.s_addr; + + snprintf(THIS->__retvalue, MAXSTRINGLEN, + "%d.%d.%d.%d:%d", bytes[0], bytes[1], bytes[2], bytes[3], + addr->sin_port); + + CATCH_DEREF_FAULT(); +%} +function _socket_dump:string (_sock:long) %{ + struct socket *sock; + + sock = (struct socket *)(long)kread(&THIS->_sock); + snprintf(THIS->__retvalue, MAXSTRINGLEN, + "state %d type %d", sock->state, sock->type); + + CATCH_DEREF_FAULT(); +%} +function _sock_dump:string (_sk:long) %{ + struct sock *sk; + + sk = (struct sock *)(long)kread(&THIS->_sk); + snprintf(THIS->__retvalue, MAXSTRINGLEN, + "reuse %d state %d", sk->sk_reuse, sk->sk_state); + + CATCH_DEREF_FAULT(); +%} +function _tb_dump:string (_tp:long) %{ + struct inet_bind_bucket *tp; + + tp = (struct inet_bind_bucket *)(long)kread(&THIS->_tp); + snprintf(THIS->__retvalue, MAXSTRINGLEN, + "port %d fastreuse %d", tp->port, tp->fastreuse); + + CATCH_DEREF_FAULT(); +%} + +probe kernel.function("inet_bind") { + if (isinstr(execname(), "rpc.nfsd")) { + printf("inet_bind(%s): socket [%s] uaddr %s addr_len %d\n", + execname(), _socket_dump($sock), _inet_ntoa($uaddr), $addr_len); + } +} +probe kernel.function("inet_bind").return { + if (isinstr(execname(), "rpc.nfsd")) + printf("inet_bind: return %d (%s)\n", $return, errno_str($return)); +} +probe kernel.function("inet_listen") { + if (isinstr(execname(), "rpc.nfsd")) { + printf("inet_listen(%s): socket [%s] backlog %d\n", + execname(), _socket_dump($sock), $backlog); + } +} +probe kernel.function("inet_listen").return { + if (isinstr(execname(), "rpc.nfsd")) + printf("inet_listen: return %d (%s)\n", $return, errno_str($return)); +} +probe kernel.function("udp_v4_get_port") { + if (isinstr(execname(), "rpc.nfsd")) { + printf(" udp_v4_get_port(%s): sock %p snum %d\n", + execname(), $sk, $snum); + } +} +probe kernel.function("udp_v4_get_port").return { + if (isinstr(execname(), "rpc.nfsd")) + printf(" udp_v4_get_port: return %d (%s)\n", + $return, errno_str($return)); +} +probe kernel.function("tcp_v4_get_port") { + if (isinstr(execname(), "rpc.nfsd")) { + printf(" tcp_v4_get_port(%s): sock [%s] snum %d\n", + execname(), _sock_dump($sk), $snum); + } +} +probe kernel.function("tcp_v4_get_port").return { + if (isinstr(execname(), "rpc.nfsd")) + printf(" tcp_v4_get_port: return %d (%s)\n", + $return, errno_str($return)); +} +probe kernel.function("inet_csk_bind_conflict") { + if (isinstr(execname(), "rpc.nfsd")) { + printf(" bind_conflict(%s): sock [%s] tb [%s]\n", + execname(), _sock_dump($sk), _tb_dump($tb)); + } +} +probe kernel.function("inet_csk_bind_conflict").return { + if (isinstr(execname(), "rpc.nfsd")) + printf(" bind_conflict: return %d (%s)\n", + $return, errno_str($return)); +} +probe begin { log("starting inet_bind probe") } +probe end { log("ending inet_bind probe") } diff --git a/net/ipv6_bind.stp b/net/ipv6_bind.stp new file mode 100644 index 0000000..2a9db1c --- /dev/null +++ b/net/ipv6_bind.stp @@ -0,0 +1,58 @@ +probe syscall.bind +{ + printf("sys_bind: %s\n", argstr); +} +probe syscall.bind.return +{ + if ($return) + printf("sys_bind: (%s)\n", retstr); +} +probe module("ipv6").function("inet6_bind") +{ + printf(" inet6_bind: %s\n %s\n %s\n", + struct_socket($sock), struct_sock($sock->sk), struct_sockaddr($uaddr, $addr_len)); +} +probe module("ipv6").function("inet6_bind").return +{ + if ($return) + printf(" inet6_bind: %d (%s)\n", $return, errno_str($return)); +} +probe module("ipv6").function("tcp_v6_get_port") +{ + printf(" tcp_v6_get_port: sk %p\n", $sk); +} +probe module("ipv6").function("tcp_v6_get_port").return +{ + if ($return) + printf(" tcp_v6_get_port: %d (%s)\n", $return, errno_str($return)); +} +probe module("ipv6").function("inet6_csk_bind_conflict") +{ + printf(" inet6_csk_bind_conflict: sk %p\n", $sk); +} +probe module("ipv6").function("inet6_csk_bind_conflict").return +{ + if ($return) + printf(" inet6_csk_bind_conflict: %d (%s)\n", $return, errno_str($return)); +} +probe module("ipv6").function("ipv6_rcv_saddr_equal") +{ + printf(" ipv6_rcv_saddr_equal: sk %p sk2 %p\n", $sk, $sk2); +} +probe module("ipv6").function("ipv6_rcv_saddr_equal").return +{ + if ($return) + printf(" ipv6_rcv_saddr_equal: %d (%s)\n", $return, errno_str($return)); +} +probe kernel.function("inet_bind") +{ + printf(" inet_bind: %s\n %s\n %s\n", + struct_socket($sock), struct_sock($sock->sk), struct_sockaddr($uaddr, $addr_len)); +} +probe kernel.function("inet_bind").return +{ + if ($return) + printf(" inet_bind: %d (%s)\n", $return, errno_str($return)); +} +probe begin { log("starting bind probe") } +probe end { log("ending bind probe") } |
