Skip to contentSkip to conversation

list register ip6tables targets/matches in /proc/net

PATCH In review Patrick McHardy 2 participants 2 messages Apr 8, 2003 – Apr 11, 2003 netfilter

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 list register ip6tables targets/matches in /proc/net

This patch lists registered ip6tables matches/targets in /proc/net, the equivalent patch to iptables is already included in pom. I sent this patch multiple times before, hopefully this time it won't be overseen.

Bye
Patrick

extra/ip6_tables-proc.patch.ipv6 +116 -0
diff -urN a/extra/ip6_tables-proc.patch.ipv6 b/extra/ip6_tables-proc.patch.ipv6
@@ -0,0 +1,116 @@
+===== net/ipv6/netfilter/ip6_tables.c 1.12 vs edited =====
+--- 1.12/net/ipv6/netfilter/ip6_tables.c	Sun Sep 22 08:22:57 2002
++++ edited/net/ipv6/netfilter/ip6_tables.c	Mon Apr  7 23:49:45 2003
+@@ -1767,14 +1767,15 @@
+ = { { NULL, NULL }, "icmp6", &icmp6_match, &icmp6_checkentry, NULL };
+ 
+ #ifdef CONFIG_PROC_FS
+-static inline int print_name(const struct ip6t_table *t,
++static inline int print_name(const char *i,
+ 			     off_t start_offset, char *buffer, int length,
+ 			     off_t *pos, unsigned int *count)
+ {
+ 	if ((*count)++ >= start_offset) {
+ 		unsigned int namelen;
+ 
+-		namelen = sprintf(buffer + *pos, "%s\n", t->name);
++		namelen = sprintf(buffer + *pos, "%s\n",
++				  i + sizeof(struct list_head));
+ 		if (*pos + namelen > length) {
+ 			/* Stop iterating */
+ 			return 1;
+@@ -1792,7 +1793,7 @@
+ 	if (down_interruptible(&ip6t_mutex) != 0)
+ 		return 0;
+ 
+-	LIST_FIND(&ip6t_tables, print_name, struct ip6t_table *,
++	LIST_FIND(&ip6t_tables, print_name, char *,
+ 		  offset, buffer, length, &pos, &count);
+ 
+ 	up(&ip6t_mutex);
+@@ -1801,6 +1802,46 @@
+ 	*start=(char *)((unsigned long)count-offset);
+ 	return pos;
+ }
++
++static int ip6t_get_targets(char *buffer, char **start, off_t offset, int length)
++{
++	off_t pos = 0;
++	unsigned int count = 0;
++
++	if (down_interruptible(&ip6t_mutex) != 0)
++		return 0;
++
++	LIST_FIND(&ip6t_target, print_name, char *,
++		  offset, buffer, length, &pos, &count);
++
++	up(&ip6t_mutex);
++
++	*start = (char *)((unsigned long)count - offset);
++	return pos;
++}
++
++static int ip6t_get_matches(char *buffer, char **start, off_t offset, int length)
++{
++	off_t pos = 0;
++	unsigned int count = 0;
++
++	if (down_interruptible(&ip6t_mutex) != 0)
++		return 0;
++
++	LIST_FIND(&ip6t_match, print_name, char *,
++		  offset, buffer, length, &pos, &count);
++
++	up(&ip6t_mutex);
++
++	*start = (char *)((unsigned long)count - offset);
++	return pos;
++}
++
++static struct { char *name; get_info_t *get_info; } ip6t_proc_entry[] =
++{ { "ip6_tables_names", ip6t_get_tables },
++  { "ip6_tables_targets", ip6t_get_targets },
++  { "ip6_tables_matches", ip6t_get_matches },
++  { NULL, NULL} };
+ #endif /*CONFIG_PROC_FS*/
+ 
+ static int __init init(void)
+@@ -1826,13 +1867,19 @@
+ #ifdef CONFIG_PROC_FS
+ 	{
+ 		struct proc_dir_entry *proc;
+-		proc = proc_net_create("ip6_tables_names", 0,
+-					ip6t_get_tables);
+-		if (!proc) {
+-			nf_unregister_sockopt(&ip6t_sockopts);
+-			return -ENOMEM;
++		int i;
++
++		for (i = 0; ip6t_proc_entry[i].name; i++) {
++			proc = proc_net_create(ip6t_proc_entry[i].name, 0,
++					       ip6t_proc_entry[i].get_info);
++			if (!proc) {
++				while (--i >= 0)
++				       proc_net_remove(ip6t_proc_entry[i].name);
++				nf_unregister_sockopt(&ip6t_sockopts);
++				return -ENOMEM;
++			}
++			proc->owner = THIS_MODULE;
+ 		}
+-		proc->owner = THIS_MODULE;
+ 	}
+ #endif
+ 
+@@ -1844,7 +1891,11 @@
+ {
+ 	nf_unregister_sockopt(&ip6t_sockopts);
+ #ifdef CONFIG_PROC_FS
+-	proc_net_remove("ip6_tables_names");
++	{
++		int i;
++		for (i = 0; ip6t_proc_entry[i].name; i++)
++			proc_net_remove(ip6t_proc_entry[i].name);
++	}
+ #endif
+ }
+ 
extra/ip6_tables-proc.patch.ipv6.help +6 -0
diff -urN a/extra/ip6_tables-proc.patch.ipv6.help b/extra/ip6_tables-proc.patch.ipv6.help
@@ -0,0 +1,6 @@
+Author: Patrick McHardy
+Status: Working
+
+This patch creates two new files in /proc/net, "ip6_tables_matches" and 
+"ip6tables_targets" which contain the names of all loaded matches/targets
+like the file ip6_tables_names already does with loaded tables.
#1 lore raw

Hi Patrick,

Quoted 4 lines · Patrick McHardy

This patch lists registered ip6tables matches/targets in /proc/net, the equivalent patch to iptables is already included in pom. I sent this patch multiple times before, hopefully this time it won't be overseen.

Sorry for the wasted efforts: patch is applied in cvs.

Best regards,
Jozsef
-
E-mail : [email protected], [email protected] PGP key : http://www.kfki.hu/~kadlec/pgp_public_key.txt
Address : KFKI Research Institute for Particle and Nuclear Physics

          H-1525 Budapest 114, POB. 49, Hungary