summaryrefslogtreecommitdiffstats
path: root/net/inet_bind.stp
blob: 621473a1e3b0fffe0efeb333dc411ad124c6a561 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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") }