quota.patch
Subsystems (2)
This is a modified quota match writing by Sam j. I add quota per ip and quota per connection (this is not very useful i think now...). Please try this and send to me any comments and suggestions.
Thanks.
include/linux/netfilter_ipv4/ipt_quota.h +37 -0
@@ -0,0 +1,37 @@ +#ifndef _IPT_QUOTA_H +#define _IPT_QUOTA_H + +/* print debug info in both kernel/netfilter module & iptable library */ +/* #define DEBUG_IPT_QUOTA */ + +#define QUOTA_HASH_SIZE 1024 + +/* modes */ +#define IPQUOTA 1/* quota per ip enable */ +#define QUOTA 0/* general quota */ +#define CONNQUOTA 2/* quota per connection */ +/**/ struct ipquota_list +{ +u_int32_t conn_index; +u_int64_t quota; +struct ipquota_list *next; +}; + +struct ipt_quota_info +{ +u_int64_t quota; +int mode; +int invert; +struct ipquota_list *quota_hash[QUOTA_HASH_SIZE ]; +}; + +#define QUOTA_INDEX (skb, info) (q->mode == CONNQUOTA ? (skb->nh.iph->saddr + \ + skb->nh.iph->daddr + \ + skb->h.th->source + \ + skb->h.th->dest + \ + skb->nh.iph->protocol) : \ + (skb->nh.iph->saddr)) + +#define QUOTA_KEY (conn_index) (conn_index % QUOTA_HASH_SIZE) + +#endif /*_IPT_QUOTA_H*/
include/linux/netfilter_ipv4/ipt_quota.h~ +37 -0
@@ -0,0 +1,37 @@ +#ifndef _IPT_QUOTA_H +#define _IPT_QUOTA_H + +/* print debug info in both kernel/netfilter module & iptable library */ +/* #define DEBUG_IPT_QUOTA */ + +#define QUOTA_HASH_SIZE 1024 + +/* modes */ +#define IPQUOTA 1 /* quota per ip enable */ +#define QUOTA 0 /* general quota */ +#define CONNQUOTA 2 /* quota per connection */ + /**/ struct ipquota_list +{ + u_int32_t conn_index; + u_int64_t quota; + struct ipquota_list *next; +}; + +struct ipt_quota_info +{ + u_int64_t quota; + int mode; + int invert; + struct ipquota_list *quota_hash[QUOTA_HASH_SIZE]; +}; + +#define QUOTA_INDEX(skb, info) (q->mode == CONNQUOTA ? (skb->nh.iph->saddr + \ + skb->nh.iph->daddr + \ + skb->h.th->source + \ + skb->h.th->dest + \ + skb->nh.iph->protocol) : \ + (skb->nh.iph->saddr)) + +#define QUOTA_KEY(conn_index) (conn_index % QUOTA_HASH_SIZE) + +#endif /*_IPT_QUOTA_H*/
net/ipv4/netfilter/ipt_quota.c +234 -0
234 lines not on this page · raw message
net/ipv4/netfilter/ipt_quota.c~ +241 -0
241 lines not on this page · raw message
dep_tristate ' limit match support' CONFIG_IP_NF_MATCH_LIMIT $CONFIG_IP_NF_IPTABLES dep_tristate ' quota match support' CONFIG_IP_NF_MATCH_QUOTA $CONFIG_IP_NF_IPTABLES
CONFIG_IP_NF_MATCH_LIMIT
quota match supportCONFIG_IP_NF_MATCH_QUOTA
This match implements network quotas, quota per ip and quota per connection.
If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say `N'.
Author: Sam Johnston <[email protected]>
Status: worksforme
This option adds CONFIG_IP_NF_MATCH_QUOTA, which implements network quotas by decrementing a byte counter with each packet. Also implements quota per source ip address and quota per connection (Diego Woitasen <[email protected]>)
Supported options are:
--quota <bytes>
The quota in bytes.
--ipquota <bytes>
The quota per source ip address in bytes
--connquota <bytes>
The quota per connection in bytes
obj-$(CONFIG_IP_NF_MATCH_LIMIT) += ipt_limit.o
obj-$(CONFIG_IP_NF_MATCH_QUOTA) += ipt_quota.o