|
@@ -358,6 +358,19 @@ out:
|
|
|
rcu_read_unlock();
|
|
|
}
|
|
|
|
|
|
+struct nf_conn_nat *nf_ct_nat_ext_add(struct nf_conn *ct)
|
|
|
+{
|
|
|
+ struct nf_conn_nat *nat = nfct_nat(ct);
|
|
|
+ if (nat)
|
|
|
+ return nat;
|
|
|
+
|
|
|
+ if (!nf_ct_is_confirmed(ct))
|
|
|
+ nat = nf_ct_ext_add(ct, NF_CT_EXT_NAT, GFP_ATOMIC);
|
|
|
+
|
|
|
+ return nat;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(nf_ct_nat_ext_add);
|
|
|
+
|
|
|
unsigned int
|
|
|
nf_nat_setup_info(struct nf_conn *ct,
|
|
|
const struct nf_nat_range *range,
|
|
@@ -368,14 +381,9 @@ nf_nat_setup_info(struct nf_conn *ct,
|
|
|
struct nf_conn_nat *nat;
|
|
|
|
|
|
/* nat helper or nfctnetlink also setup binding */
|
|
|
- nat = nfct_nat(ct);
|
|
|
- if (!nat) {
|
|
|
- nat = nf_ct_ext_add(ct, NF_CT_EXT_NAT, GFP_ATOMIC);
|
|
|
- if (nat == NULL) {
|
|
|
- pr_debug("failed to add NAT extension\n");
|
|
|
- return NF_ACCEPT;
|
|
|
- }
|
|
|
- }
|
|
|
+ nat = nf_ct_nat_ext_add(ct);
|
|
|
+ if (nat == NULL)
|
|
|
+ return NF_ACCEPT;
|
|
|
|
|
|
NF_CT_ASSERT(maniptype == NF_NAT_MANIP_SRC ||
|
|
|
maniptype == NF_NAT_MANIP_DST);
|