aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorGao feng <gaofeng@cn.fujitsu.com>2013-01-21 17:10:30 -0500
committerPablo Neira Ayuso <pablo@netfilter.org>2013-01-23 06:56:13 -0500
commit5e615b220087c5551f486c967831cecdfd338dbe (patch)
tree190987e18bed5a1a5a2ca105ac28cbe71164c6cf /net
parent8684094cf17d8ce96e0a8c63003f331aa017e22d (diff)
netfilter: nf_ct_helper: move initialization out of pernet_operations
Move the global initial codes to the module_init/exit context. Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net')
-rw-r--r--net/netfilter/nf_conntrack_core.c15
-rw-r--r--net/netfilter/nf_conntrack_helper.c53
2 files changed, 36 insertions, 32 deletions
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index 4f4d1075644e..06b8cdb5e620 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -1348,6 +1348,7 @@ void nf_conntrack_cleanup_end(void)
1348#ifdef CONFIG_NF_CONNTRACK_ZONES 1348#ifdef CONFIG_NF_CONNTRACK_ZONES
1349 nf_ct_extend_unregister(&nf_ct_zone_extend); 1349 nf_ct_extend_unregister(&nf_ct_zone_extend);
1350#endif 1350#endif
1351 nf_conntrack_helper_fini();
1351 nf_conntrack_timeout_fini(); 1352 nf_conntrack_timeout_fini();
1352 nf_conntrack_ecache_fini(); 1353 nf_conntrack_ecache_fini();
1353 nf_conntrack_tstamp_fini(); 1354 nf_conntrack_tstamp_fini();
@@ -1378,7 +1379,7 @@ void nf_conntrack_cleanup_net(struct net *net)
1378 nf_ct_free_hashtable(net->ct.hash, net->ct.htable_size); 1379 nf_ct_free_hashtable(net->ct.hash, net->ct.htable_size);
1379 nf_conntrack_proto_fini(net); 1380 nf_conntrack_proto_fini(net);
1380 nf_conntrack_labels_fini(net); 1381 nf_conntrack_labels_fini(net);
1381 nf_conntrack_helper_fini(net); 1382 nf_conntrack_helper_pernet_fini(net);
1382 nf_conntrack_ecache_pernet_fini(net); 1383 nf_conntrack_ecache_pernet_fini(net);
1383 nf_conntrack_tstamp_pernet_fini(net); 1384 nf_conntrack_tstamp_pernet_fini(net);
1384 nf_conntrack_acct_pernet_fini(net); 1385 nf_conntrack_acct_pernet_fini(net);
@@ -1526,6 +1527,10 @@ int nf_conntrack_init_start(void)
1526 if (ret < 0) 1527 if (ret < 0)
1527 goto err_timeout; 1528 goto err_timeout;
1528 1529
1530 ret = nf_conntrack_helper_init();
1531 if (ret < 0)
1532 goto err_helper;
1533
1529#ifdef CONFIG_NF_CONNTRACK_ZONES 1534#ifdef CONFIG_NF_CONNTRACK_ZONES
1530 ret = nf_ct_extend_register(&nf_ct_zone_extend); 1535 ret = nf_ct_extend_register(&nf_ct_zone_extend);
1531 if (ret < 0) 1536 if (ret < 0)
@@ -1543,8 +1548,10 @@ int nf_conntrack_init_start(void)
1543 1548
1544#ifdef CONFIG_NF_CONNTRACK_ZONES 1549#ifdef CONFIG_NF_CONNTRACK_ZONES
1545err_extend: 1550err_extend:
1546 nf_conntrack_timeout_fini(); 1551 nf_conntrack_helper_fini();
1547#endif 1552#endif
1553err_helper:
1554 nf_conntrack_timeout_fini();
1548err_timeout: 1555err_timeout:
1549 nf_conntrack_ecache_fini(); 1556 nf_conntrack_ecache_fini();
1550err_ecache: 1557err_ecache:
@@ -1622,7 +1629,7 @@ int nf_conntrack_init_net(struct net *net)
1622 ret = nf_conntrack_ecache_pernet_init(net); 1629 ret = nf_conntrack_ecache_pernet_init(net);
1623 if (ret < 0) 1630 if (ret < 0)
1624 goto err_ecache; 1631 goto err_ecache;
1625 ret = nf_conntrack_helper_init(net); 1632 ret = nf_conntrack_helper_pernet_init(net);
1626 if (ret < 0) 1633 if (ret < 0)
1627 goto err_helper; 1634 goto err_helper;
1628 1635
@@ -1638,7 +1645,7 @@ int nf_conntrack_init_net(struct net *net)
1638err_proto: 1645err_proto:
1639 nf_conntrack_labels_fini(net); 1646 nf_conntrack_labels_fini(net);
1640err_labels: 1647err_labels:
1641 nf_conntrack_helper_fini(net); 1648 nf_conntrack_helper_pernet_fini(net);
1642err_helper: 1649err_helper:
1643 nf_conntrack_ecache_pernet_fini(net); 1650 nf_conntrack_ecache_pernet_fini(net);
1644err_ecache: 1651err_ecache:
diff --git a/net/netfilter/nf_conntrack_helper.c b/net/netfilter/nf_conntrack_helper.c
index 884f2b39319a..2f380f73c4c0 100644
--- a/net/netfilter/nf_conntrack_helper.c
+++ b/net/netfilter/nf_conntrack_helper.c
@@ -423,44 +423,41 @@ static struct nf_ct_ext_type helper_extend __read_mostly = {
423 .id = NF_CT_EXT_HELPER, 423 .id = NF_CT_EXT_HELPER,
424}; 424};
425 425
426int nf_conntrack_helper_init(struct net *net) 426int nf_conntrack_helper_pernet_init(struct net *net)
427{ 427{
428 int err;
429
430 net->ct.auto_assign_helper_warned = false; 428 net->ct.auto_assign_helper_warned = false;
431 net->ct.sysctl_auto_assign_helper = nf_ct_auto_assign_helper; 429 net->ct.sysctl_auto_assign_helper = nf_ct_auto_assign_helper;
430 return nf_conntrack_helper_init_sysctl(net);
431}
432 432
433 if (net_eq(net, &init_net)) { 433void nf_conntrack_helper_pernet_fini(struct net *net)
434 nf_ct_helper_hsize = 1; /* gets rounded up to use one page */ 434{
435 nf_ct_helper_hash = 435 nf_conntrack_helper_fini_sysctl(net);
436 nf_ct_alloc_hashtable(&nf_ct_helper_hsize, 0); 436}
437 if (!nf_ct_helper_hash)
438 return -ENOMEM;
439 437
440 err = nf_ct_extend_register(&helper_extend); 438int nf_conntrack_helper_init(void)
441 if (err < 0) 439{
442 goto err1; 440 int ret;
441 nf_ct_helper_hsize = 1; /* gets rounded up to use one page */
442 nf_ct_helper_hash =
443 nf_ct_alloc_hashtable(&nf_ct_helper_hsize, 0);
444 if (!nf_ct_helper_hash)
445 return -ENOMEM;
446
447 ret = nf_ct_extend_register(&helper_extend);
448 if (ret < 0) {
449 pr_err("nf_ct_helper: Unable to register helper extension.\n");
450 goto out_extend;
443 } 451 }
444 452
445 err = nf_conntrack_helper_init_sysctl(net);
446 if (err < 0)
447 goto out_sysctl;
448
449 return 0; 453 return 0;
450 454out_extend:
451out_sysctl:
452 if (net_eq(net, &init_net))
453 nf_ct_extend_unregister(&helper_extend);
454err1:
455 nf_ct_free_hashtable(nf_ct_helper_hash, nf_ct_helper_hsize); 455 nf_ct_free_hashtable(nf_ct_helper_hash, nf_ct_helper_hsize);
456 return err; 456 return ret;
457} 457}
458 458
459void nf_conntrack_helper_fini(struct net *net) 459void nf_conntrack_helper_fini(void)
460{ 460{
461 nf_conntrack_helper_fini_sysctl(net); 461 nf_ct_extend_unregister(&helper_extend);
462 if (net_eq(net, &init_net)) { 462 nf_ct_free_hashtable(nf_ct_helper_hash, nf_ct_helper_hsize);
463 nf_ct_extend_unregister(&helper_extend);
464 nf_ct_free_hashtable(nf_ct_helper_hash, nf_ct_helper_hsize);
465 }
466} 463}