summaryrefslogtreecommitdiffstats
path: root/sys_bind
diff options
context:
space:
mode:
authorSteve Dickson <steved@redhat.com>2008-11-21 13:03:14 -0500
committerSteve Dickson <steved@redhat.com>2008-11-21 13:03:14 -0500
commite9c8242b2b40d0b4d1bbcded9d9c28c3f470371f (patch)
tree3aa24b68fadfb156ab0de7ae9ec90b1927fce37a /sys_bind
parentc6425b809d873bb602e4192e7ccea56653f6a6db (diff)
downloadsystemtap-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.stp40
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 {