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
|
%{
#include <linux/socket.h>
#include <net/sock.h>
#include <net/inet_sock.h>
%}
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();
%}
|