patch-2.4.18 linux/net/ipv4/netfilter/ip_tables.c
Next file: linux/net/ipv4/netfilter/ipchains_core.c
Previous file: linux/net/ipv4/netfilter/ip_queue.c
Back to the patch index
Back to the overall index
- Lines: 74
- Date:
Wed Jan 23 20:24:37 2002
- Orig file:
linux.orig/net/ipv4/netfilter/ip_tables.c
- Orig date:
Mon Feb 18 20:18:40 2002
diff -Naur -X /home/marcelo/lib/dontdiff linux.orig/net/ipv4/netfilter/ip_tables.c linux/net/ipv4/netfilter/ip_tables.c
@@ -2,6 +2,11 @@
* Packet matching code.
*
* Copyright (C) 1999 Paul `Rusty' Russell & Michael J. Neuling
+ * Copyright (C) 2009-2002 Netfilter core team <coreteam@netfilter.org>
+ *
+ * 19 Jan 2002 Harald Welte <laforge@gnumonks.org>
+ * - increase module usage count as soon as we have rules inside
+ * a table
*/
#include <linux/config.h>
#include <linux/skbuff.h>
@@ -84,6 +89,8 @@
unsigned int size;
/* Number of entries: FIXME. --RR */
unsigned int number;
+ /* Initial number of entries. Needed for module usage count */
+ unsigned int initial_entries;
/* Entry points and underflows */
unsigned int hook_entry[NF_IP_NUMHOOKS];
@@ -902,6 +909,7 @@
}
oldinfo = table->private;
table->private = newinfo;
+ newinfo->initial_entries = oldinfo->initial_entries;
write_unlock_bh(&table->lock);
return oldinfo;
@@ -1105,6 +1113,16 @@
if (!oldinfo)
goto free_newinfo_counters_untrans_unlock;
+ /* Update module usage count based on number of rules */
+ duprintf("do_replace: oldnum=%u, initnum=%u, newnum=%u\n",
+ oldinfo->number, oldinfo->initial_entries, newinfo->number);
+ if (t->me && (oldinfo->number <= oldinfo->initial_entries) &&
+ (newinfo->number > oldinfo->initial_entries))
+ __MOD_INC_USE_COUNT(t->me);
+ else if (t->me && (oldinfo->number > oldinfo->initial_entries) &&
+ (newinfo->number <= oldinfo->initial_entries))
+ __MOD_DEC_USE_COUNT(t->me);
+
/* Get the old counters. */
get_counters(oldinfo, counters);
/* Decrease module usage counts and free resource */
@@ -1363,7 +1381,7 @@
int ret;
struct ipt_table_info *newinfo;
static struct ipt_table_info bootstrap
- = { 0, 0, { 0 }, { 0 }, { } };
+ = { 0, 0, 0, { 0 }, { 0 }, { } };
MOD_INC_USE_COUNT;
newinfo = vmalloc(sizeof(struct ipt_table_info)
@@ -1406,6 +1424,9 @@
duprintf("table->private->number = %u\n",
table->private->number);
+
+ /* save number of initial entries */
+ table->private->initial_entries = table->private->number;
table->lock = RW_LOCK_UNLOCKED;
list_prepend(&ipt_tables, table);
@@ -1746,7 +1767,7 @@
}
#endif
- printk("ip_tables: (c)2000 Netfilter core team\n");
+ printk("ip_tables: (C) 2000-2002 Netfilter core team\n");
return 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)