diff options
| author | Steve Dickson <steved@redhat.com> | 2008-11-21 13:03:14 -0500 |
|---|---|---|
| committer | Steve Dickson <steved@redhat.com> | 2008-11-21 13:03:14 -0500 |
| commit | e9c8242b2b40d0b4d1bbcded9d9c28c3f470371f (patch) | |
| tree | 3aa24b68fadfb156ab0de7ae9ec90b1927fce37a /sys_bind | |
| parent | c6425b809d873bb602e4192e7ccea56653f6a6db (diff) | |
| download | systemtap-e9c8242b2b40d0b4d1bbcded9d9c28c3f470371f.tar.gz systemtap-e9c8242b2b40d0b4d1bbcded9d9c28c3f470371f.tar.xz systemtap-e9c8242b2b40d0b4d1bbcded9d9c28c3f470371f.zip | |
Added _socket_dump:string() function and
kernel.function("inet_listen") probe
Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'sys_bind')
| -rw-r--r-- | sys_bind/inet_bind.stp | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/sys_bind/inet_bind.stp b/sys_bind/inet_bind.stp index 0048791..621473a 100644 --- a/sys_bind/inet_bind.stp +++ b/sys_bind/inet_bind.stp @@ -1,5 +1,6 @@ %{ #include <net/sock.h> +#include <net/inet_hashtables.h> #include <linux/in.h> %} @@ -11,7 +12,17 @@ function _inet_ntoa:string (_uaddr:long) %{ bytes = (unsigned char *)&addr->sin_addr.s_addr; snprintf(THIS->__retvalue, MAXSTRINGLEN, - "%d.%d.%d.%d", bytes[0], bytes[1], bytes[2], bytes[3]); + "%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(); %} @@ -24,17 +35,36 @@ function _sock_dump:string (_sk:long) %{ 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): sock %p uaddr %s addr_len %d\n", - execname(), $sock, _inet_ntoa($uaddr), $addr_len); + 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", @@ -59,8 +89,8 @@ probe kernel.function("tcp_v4_get_port").return { } probe kernel.function("inet_csk_bind_conflict") { if (isinstr(execname(), "rpc.nfsd")) { - printf(" bind_conflict(%s): sock [%s] snum tb %p\n", - execname(), _sock_dump($sk), $tb); + printf(" bind_conflict(%s): sock [%s] tb [%s]\n", + execname(), _sock_dump($sk), _tb_dump($tb)); } } probe kernel.function("inet_csk_bind_conflict").return { |
