netfilter: use nf_conntrack_helpers_register when possible
authorLiping Zhang <zlpnobody@gmail.com>
Sun, 4 Jun 2017 15:25:05 +0000 (23:25 +0800)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 19 Jun 2017 17:13:21 +0000 (19:13 +0200)
amanda_helper, nf_conntrack_helper_ras and nf_conntrack_helper_q931 are
all arrays, so we can use nf_conntrack_helpers_register to register
the ct helper, this will help us to eliminate some "goto errX"
statements.

Also introduce h323_helper_init/exit helper function to register the ct
helpers, this is prepared for the followup patch, which will add net
namespace support for ct helper.

Signed-off-by: Liping Zhang <zlpnobody@gmail.com>
Acked-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nf_conntrack_amanda.c
net/netfilter/nf_conntrack_h323_main.c

index 03d2ccffa9fa3c1eecfbc07dcadc420a0ab5e315..20edd589fe0635c2cb0b989d39e1cb8801a85a60 100644 (file)
@@ -197,8 +197,8 @@ static void __exit nf_conntrack_amanda_fini(void)
 {
        int i;
 
-       nf_conntrack_helper_unregister(&amanda_helper[0]);
-       nf_conntrack_helper_unregister(&amanda_helper[1]);
+       nf_conntrack_helpers_unregister(amanda_helper,
+                                       ARRAY_SIZE(amanda_helper));
        for (i = 0; i < ARRAY_SIZE(search); i++)
                textsearch_destroy(search[i].ts);
 }
@@ -218,16 +218,12 @@ static int __init nf_conntrack_amanda_init(void)
                        goto err1;
                }
        }
-       ret = nf_conntrack_helper_register(&amanda_helper[0]);
+       ret = nf_conntrack_helpers_register(amanda_helper,
+                                           ARRAY_SIZE(amanda_helper));
        if (ret < 0)
                goto err1;
-       ret = nf_conntrack_helper_register(&amanda_helper[1]);
-       if (ret < 0)
-               goto err2;
        return 0;
 
-err2:
-       nf_conntrack_helper_unregister(&amanda_helper[0]);
 err1:
        while (--i >= 0)
                textsearch_destroy(search[i].ts);
index 3bcdc718484e4c5352ab2de17c5a8aaf227af2f3..f71f0d2558fdb155e688d29d88ae27fdd0a29e31 100644 (file)
@@ -1815,14 +1815,44 @@ static struct nf_conntrack_helper nf_conntrack_helper_ras[] __read_mostly = {
        },
 };
 
+static int __init h323_helper_init(void)
+{
+       int ret;
+
+       ret = nf_conntrack_helper_register(&nf_conntrack_helper_h245);
+       if (ret < 0)
+               return ret;
+       ret = nf_conntrack_helpers_register(nf_conntrack_helper_q931,
+                                       ARRAY_SIZE(nf_conntrack_helper_q931));
+       if (ret < 0)
+               goto err1;
+       ret = nf_conntrack_helpers_register(nf_conntrack_helper_ras,
+                                       ARRAY_SIZE(nf_conntrack_helper_ras));
+       if (ret < 0)
+               goto err2;
+
+       return 0;
+err2:
+       nf_conntrack_helpers_unregister(nf_conntrack_helper_q931,
+                                       ARRAY_SIZE(nf_conntrack_helper_q931));
+err1:
+       nf_conntrack_helper_unregister(&nf_conntrack_helper_h245);
+       return ret;
+}
+
+static void __exit h323_helper_exit(void)
+{
+       nf_conntrack_helpers_unregister(nf_conntrack_helper_ras,
+                                       ARRAY_SIZE(nf_conntrack_helper_ras));
+       nf_conntrack_helpers_unregister(nf_conntrack_helper_q931,
+                                       ARRAY_SIZE(nf_conntrack_helper_q931));
+       nf_conntrack_helper_unregister(&nf_conntrack_helper_h245);
+}
+
 /****************************************************************************/
 static void __exit nf_conntrack_h323_fini(void)
 {
-       nf_conntrack_helper_unregister(&nf_conntrack_helper_ras[1]);
-       nf_conntrack_helper_unregister(&nf_conntrack_helper_ras[0]);
-       nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[1]);
-       nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[0]);
-       nf_conntrack_helper_unregister(&nf_conntrack_helper_h245);
+       h323_helper_exit();
        kfree(h323_buffer);
        pr_debug("nf_ct_h323: fini\n");
 }
@@ -1837,32 +1867,11 @@ static int __init nf_conntrack_h323_init(void)
        h323_buffer = kmalloc(65536, GFP_KERNEL);
        if (!h323_buffer)
                return -ENOMEM;
-       ret = nf_conntrack_helper_register(&nf_conntrack_helper_h245);
+       ret = h323_helper_init();
        if (ret < 0)
                goto err1;
-       ret = nf_conntrack_helper_register(&nf_conntrack_helper_q931[0]);
-       if (ret < 0)
-               goto err2;
-       ret = nf_conntrack_helper_register(&nf_conntrack_helper_q931[1]);
-       if (ret < 0)
-               goto err3;
-       ret = nf_conntrack_helper_register(&nf_conntrack_helper_ras[0]);
-       if (ret < 0)
-               goto err4;
-       ret = nf_conntrack_helper_register(&nf_conntrack_helper_ras[1]);
-       if (ret < 0)
-               goto err5;
        pr_debug("nf_ct_h323: init success\n");
        return 0;
-
-err5:
-       nf_conntrack_helper_unregister(&nf_conntrack_helper_ras[0]);
-err4:
-       nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[1]);
-err3:
-       nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[0]);
-err2:
-       nf_conntrack_helper_unregister(&nf_conntrack_helper_h245);
 err1:
        kfree(h323_buffer);
        return ret;