mirror of
git://git.code.sf.net/p/xtables-addons/xtables-addons
synced 2025-09-20 11:34:57 +02:00
quota2: add a no-change mode
This commit adds an option to xt_quota2 called "no-change". The effect of this option, when used, is that it will skip incrementing or decrementing the quota counter, effectively providing a quota test only. The reason for implementing this is so that I could have a rule check if quota is available for a rule in the PREROUTING tables, without actually decrementing the amount of available quota. I only wanted to decrement the amount of available quota in the FORWARD rule. Otherwise, the first packet of every connection would be counted twice.
This commit is contained in:

committed by
Jan Engelhardt

parent
c82da14d2b
commit
7952a7d253
@@ -199,12 +199,19 @@ quota_mt2(const struct sk_buff *skb, const struct xt_match_param *par)
|
||||
|
||||
spin_lock_bh(&e->lock);
|
||||
if (q->flags & XT_QUOTA_GROW) {
|
||||
e->quota += (q->flags & XT_QUOTA_PACKET) ? 1 : skb->len;
|
||||
q->quota = e->quota;
|
||||
/*
|
||||
* While no_change is pointless in "grow" mode, we will
|
||||
* implement it here simply to have a consistent behavior.
|
||||
*/
|
||||
if (!(q->flags & XT_QUOTA_NO_CHANGE)) {
|
||||
e->quota += (q->flags & XT_QUOTA_PACKET) ? 1 : skb->len;
|
||||
q->quota = e->quota;
|
||||
}
|
||||
ret = true;
|
||||
} else {
|
||||
if (e->quota >= skb->len) {
|
||||
e->quota -= (q->flags & XT_QUOTA_PACKET) ? 1 : skb->len;
|
||||
if (!(q->flags & XT_QUOTA_NO_CHANGE))
|
||||
e->quota -= (q->flags & XT_QUOTA_PACKET) ? 1 : skb->len;
|
||||
ret = !ret;
|
||||
} else {
|
||||
/* we do not allow even small packets from now on */
|
||||
|
Reference in New Issue
Block a user