X-Git-Url: http://developer.intra2net.com/git/?p=ipt_ACCOUNT;a=blobdiff_plain;f=linux%2Finclude%2Flinux%2Fnetfilter_ipv4%2Fipt_ACCOUNT.h;h=9c362387ef43245543d4d9452e064b74741cc256;hp=a9160cab7bd2b7d63d4fdd0cdbb1ebca5e6a748b;hb=3e722f3c32742ad4fb61bf5a7d6fc10fff6965ef;hpb=35a8230b175ed13efed096c5b646cffba816ee98 diff --git a/linux/include/linux/netfilter_ipv4/ipt_ACCOUNT.h b/linux/include/linux/netfilter_ipv4/ipt_ACCOUNT.h index a9160ca..9c36238 100644 --- a/linux/include/linux/netfilter_ipv4/ipt_ACCOUNT.h +++ b/linux/include/linux/netfilter_ipv4/ipt_ACCOUNT.h @@ -1,8 +1,11 @@ #ifndef _IPT_ACCOUNT_H #define _IPT_ACCOUNT_H +#define ACCOUNT_MAX_TABLES 32 #define ACCOUNT_TABLE_NAME_LEN 32 +#define ACCOUNT_MAX_HANDLES 10 +/* Structure for the userspace part of ipt_ACCOUNT */ struct ipt_account_info { u_int32_t net_ip; u_int32_t net_mask; @@ -10,4 +13,67 @@ struct ipt_account_info { int32_t table_nr; }; +/* Internal table structure, generated by check_entry() */ +struct ipt_account_table +{ + char name[ACCOUNT_TABLE_NAME_LEN]; /* name of the table */ + unsigned int ip; /* base IP of network (-a option) */ + unsigned char netmask; /* netmask of the network (-a option) */ + unsigned int refcount; /* refcount of this table. if zero, destroy it */ + unsigned int itemcount; /* number of IPs in this table */ + void *data; /* pointer to the actual data, depending on netmask */ +}; + +/* Handle structure for communication with the userspace library */ +struct ipt_account_handle +{ + unsigned int ip; /* base IP of network */ + unsigned char netmask; /* netmask of the network */ + unsigned int itemcount; /* number of IPs in this table */ + void *data; /* pointer to the actual data, depending on netmask */ +}; + +/* Used for every IP entry */ +/* Size is 16 bytes so that 256 (class C network) * 16 fits in one kernel (zero) page */ +struct ipt_account_ip +{ + unsigned int src_packets; + unsigned int src_bytes; + unsigned int dst_packets; + unsigned int dst_bytes; +}; + +/* + Used for every IP when returning data +*/ +struct ipt_account_handle_ip +{ + unsigned int ip; + unsigned int src_packets; + unsigned int src_bytes; + unsigned int dst_packets; + unsigned int dst_bytes; +}; + +/* + The IPs are organized as an array so that direct slot + calculations are possible. + Only 8 bit networks are preallocated, 16/24 bit networks + allocate their slots when needed -> very efficent. +*/ +struct ipt_account_mask_24 +{ + struct ipt_account_ip ip[256]; +}; + +struct iptt_account_mask_16 +{ + struct ipt_account_mask_24 *mask_24[256]; +}; + +struct ipt_account_mask_8 +{ + struct ipt_account_mask_16 *mask_16[256]; +}; + #endif /*_IPT_ACCOUNT_H*/