%{ #include #include #include %} function struct_socket:string(_sock:long) %{ struct socket *sock = (struct socket *) (long) kread(&(THIS->_sock)); struct sock *sk = (struct sock *) (long) kread(&(sock->sk)); struct proto *skprot = (struct proto *)(long)kread(&(sk->__sk_common.skc_prot)); struct inet_sock *inet = inet_sk(sk); struct sockaddr *addr; struct in6_addr *saddr6; char buf[MAXSTRINGLEN]; int cc=0; snprintf(buf+cc, MAXSTRINGLEN, "sock %p sk %p state %d flags 0x%lx type %d file %p", sock, sock->sk, sock->state, sock->flags, sock->type, sock->file); cc = strlen(buf); snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s", buf); CATCH_DEREF_FAULT(); %} function struct_sock:string(_sk:long) %{ struct sock *sk = (struct sock *) (long) kread(&(THIS->_sk)); struct proto *skprot = (struct proto *)(long)kread(&(sk->__sk_common.skc_prot)); struct inet_sock *inet = inet_sk(sk); char buf[MAXSTRINGLEN]; int cc=0; snprintf(buf+cc, MAXSTRINGLEN, "sk %p inet %p skprot %p sk_reuse %d sk_state %d", sk, inet, skprot, sk->sk_reuse, sk->sk_state); snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s", buf); CATCH_DEREF_FAULT(); %} function struct_sockaddr:string(_uaddr:long, _addrlen:long) %{ struct sockaddr *addr; struct in6_addr *saddr6; char buf[MAXSTRINGLEN], *family; addr = (struct sockaddr *) (long) kread(&(THIS->_uaddr)); switch(addr->sa_family) { case AF_INET: family = "AF_INET"; break; case AF_INET6: family = "AF_INET6"; break; default: goto myout; } sprintf(buf, "addr %p family %s", addr, family); snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s", buf); myout: CATCH_DEREF_FAULT(); %} function ipv6_addr_diff:string(_sk:long, _sk2:long) %{ struct sock *sk = (struct sock *) (long) kread(&(THIS->_sk)); struct sock *sk2 = (struct sock *) (long) kread(&(THIS->_sk)); struct inet_sock *inet = inet_sk(sk); struct inet_sock *inet2 = inet_sk(sk); struct ipv6_pinfo *pinfo = (struct ipv6_pinfo *)(long)inet->pinet6; struct ipv6_pinfo *pinfo2 = (struct ipv6_pinfo *)(long)inet2->pinet6; struct in6_addr *rcv_addr = &pinfo->rcv_saddr; struct in6_addr *rcv_addr2 = NULL; __be32 sk_rcv_saddr = inet_->rcv_saddr; __be32 sk2_rcv_saddr = inet_rcv_saddr(sk2); char buf[MAXSTRINGLEN], *family; if (sk2->sk_family == AF_INET6) rcv_addr2 = &pinfo2->rcv_saddr; snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s", buf); CATCH_DEREF_FAULT(); %}