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
|
// IP tapset
// Copyright (C) 2009, IBM Inc.
// Author : Breno Leitao <leitao@linux.vnet.ibm.com>
//
// This file is free software. You can redistribute it and/or modify it under
// the terms of the GNU General Public License (GPL), version 2.
//
// Based on previous work done by Arnaldo Carvalho de Melo <acme@redhat.com>
%{
#include <linux/skbuff.h>
%}
/**
* sfunction ip_ntop - returns a string representation from an integer IP number
* @addr: the ip represented as an integer
*/
function ip_ntop:string (addr:long)
%{
__be32 ip;
ip = THIS->addr;
snprintf(THIS->__retvalue, MAXSTRINGLEN, NIPQUAD_FMT, NIPQUAD(ip));
%}
/* return the source IP address for a given sock */
function __ip_sock_saddr:long (sock:long)
{
%(kernel_v < "2.6.33" %?
return @cast(sock, "inet_sock")->saddr
%:
return @cast(sock, "inet_sock")->inet_saddr
%)
}
/* return the destination IP address for a given sock */
function __ip_sock_daddr:long (sock:long)
{
%(kernel_v < "2.6.33" %?
return @cast(sock, "inet_sock")->daddr
%:
return @cast(sock, "inet_sock")->inet_daddr
%)
}
/* Get the IP header for recent (> 2.6.21) kernels */
function __get_skb_iphdr_new:long(skb:long)
%{ /* pure */
struct sk_buff *skb;
skb = (struct sk_buff *)(long)THIS->skb;
/* as done by skb_network_header() */
#ifdef NET_SKBUFF_DATA_USES_OFFSET
THIS->__retvalue = (long)(kread(&(skb->head)) + kread(&(skb->network_header)));
#else
THIS->__retvalue = (long)kread(&(skb->network_header));
#endif
CATCH_DEREF_FAULT();
%}
/* Get the IP header from a sk_buff struct */
function __get_skb_iphdr:long(skb:long){
%( kernel_v < "2.6.21" %?
iphdr = @cast(skb, "sk_buff")->nh->raw
return iphdr
%:
return __get_skb_iphdr_new(skb)
%)
}
/* return the source next layer protocol for a given sk_buff structure */
function __ip_skb_proto:long (iphdr)
{
return @cast(iphdr, "iphdr")->protocol
}
/* return the source IP address for a given sk_buff structure */
function __ip_skb_saddr:long (iphdr)
{
return @cast(iphdr, "iphdr")->saddr
}
/* return the destination IP address for a given skb */
function __ip_skb_daddr:long (iphdr)
{
return @cast(iphdr, "iphdr")->daddr
}
|