summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/inet_bind.stp102
-rw-r--r--net/ipv6_bind.stp58
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") }