list register ip6tables targets/matches in /proc/net
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
@@ -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
@@ -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.
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