4 #define ACCOUNT_MAX_TABLES 32
5 #define ACCOUNT_TABLE_NAME_LEN 32
6 #define ACCOUNT_MAX_HANDLES 10
8 /* Structure for the userspace part of ipt_ACCOUNT */
9 struct ipt_account_info {
12 char table_name[ACCOUNT_TABLE_NAME_LEN];
16 /* Internal table structure, generated by check_entry() */
17 struct ipt_account_table
19 char name[ACCOUNT_TABLE_NAME_LEN]; /* name of the table */
20 unsigned int ip; /* base IP of network */
21 unsigned int netmask; /* netmask of the network */
22 unsigned char depth; /* Size of network: 0: 8 bit, 1: 16bit, 2: 24 bit */
23 unsigned int refcount; /* refcount of this table. if zero, destroy it */
24 unsigned int itemcount; /* number of IPs in this table */
25 void *data; /* pointer to the actual data, depending on netmask */
28 /* Handle structure for communication with the userspace library */
29 struct ipt_account_handle
31 unsigned int ip; /* base IP of network */
32 unsigned char netmask; /* netmask of the network */
33 unsigned int itemcount; /* number of IPs in this table */
34 void *data; /* pointer to the actual data, depending on netmask */
37 /* Used for every IP entry */
38 /* Size is 16 bytes so that 256 (class C network) * 16 fits in one kernel (zero) page */
41 unsigned int src_packets;
42 unsigned int src_bytes;
43 unsigned int dst_packets;
44 unsigned int dst_bytes;
48 Used for every IP when returning data
50 struct ipt_account_handle_ip
53 unsigned int src_packets;
54 unsigned int src_bytes;
55 unsigned int dst_packets;
56 unsigned int dst_bytes;
60 The IPs are organized as an array so that direct slot
61 calculations are possible.
62 Only 8 bit networks are preallocated, 16/24 bit networks
63 allocate their slots when needed -> very efficent.
65 struct ipt_account_mask_24
67 struct ipt_account_ip ip[256];
70 struct ipt_account_mask_16
72 struct ipt_account_mask_24 *mask_24[256];
75 struct ipt_account_mask_8
77 struct ipt_account_mask_16 *mask_16[256];
80 #endif /*_IPT_ACCOUNT_H*/