Use weak function pointers to call extension init functions, this makes firewall3...
[project/firewall3.git] / iptables.c
index 4956ef7..f39ed1e 100644 (file)
@@ -54,6 +54,19 @@ get_kernel_version(void)
        kernel_version = LINUX_VERSION(x, y, z);
 }
 
+#undef __ipt_module
+#define __ipt_module(x) libxt_##x##_init, libipt_##x##_init, libip6t_##x##_init,
+
+static void fw3_init_extensions(void)
+{
+       int i;
+       void (*initfuncs[])(void) = { FW3_IPT_MODULES };
+
+       for (i = 0; i < sizeof(initfuncs)/sizeof(initfuncs[0]); i++)
+               if (initfuncs[i])
+                       initfuncs[i]();
+}
+
 struct fw3_ipt_handle *
 fw3_ipt_open(enum fw3_family family, enum fw3_table table)
 {
@@ -94,9 +107,7 @@ fw3_ipt_open(enum fw3_family family, enum fw3_table table)
        xtables_matches = NULL;
        xtables_targets = NULL;
 
-       init_extensions();
-       init_extensions4();
-       init_extensions6();
+       fw3_init_extensions();
 
        return h;
 }