%{ #include #include #include %} 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") }