|
@@ -549,10 +549,6 @@ struct nf_nat_proto_clean {
|
|
|
static int nf_nat_proto_remove(struct nf_conn *i, void *data)
|
|
|
{
|
|
|
const struct nf_nat_proto_clean *clean = data;
|
|
|
- struct nf_conn_nat *nat = nfct_nat(i);
|
|
|
-
|
|
|
- if (!nat)
|
|
|
- return 0;
|
|
|
|
|
|
if ((clean->l3proto && nf_ct_l3num(i) != clean->l3proto) ||
|
|
|
(clean->l4proto && nf_ct_protonum(i) != clean->l4proto))
|
|
@@ -563,12 +559,10 @@ static int nf_nat_proto_remove(struct nf_conn *i, void *data)
|
|
|
|
|
|
static int nf_nat_proto_clean(struct nf_conn *ct, void *data)
|
|
|
{
|
|
|
- struct nf_conn_nat *nat = nfct_nat(ct);
|
|
|
-
|
|
|
if (nf_nat_proto_remove(ct, data))
|
|
|
return 1;
|
|
|
|
|
|
- if (!nat)
|
|
|
+ if ((ct->status & IPS_SRC_NAT_DONE) == 0)
|
|
|
return 0;
|
|
|
|
|
|
/* This netns is being destroyed, and conntrack has nat null binding.
|
|
@@ -716,13 +710,9 @@ EXPORT_SYMBOL_GPL(nf_nat_l3proto_unregister);
|
|
|
/* No one using conntrack by the time this called. */
|
|
|
static void nf_nat_cleanup_conntrack(struct nf_conn *ct)
|
|
|
{
|
|
|
- struct nf_conn_nat *nat = nf_ct_ext_find(ct, NF_CT_EXT_NAT);
|
|
|
-
|
|
|
- if (!nat)
|
|
|
- return;
|
|
|
-
|
|
|
- rhltable_remove(&nf_nat_bysource_table, &ct->nat_bysource,
|
|
|
- nf_nat_bysource_params);
|
|
|
+ if (ct->status & IPS_SRC_NAT_DONE)
|
|
|
+ rhltable_remove(&nf_nat_bysource_table, &ct->nat_bysource,
|
|
|
+ nf_nat_bysource_params);
|
|
|
}
|
|
|
|
|
|
static struct nf_ct_ext_type nat_extend __read_mostly = {
|