Move ovs_ct_add_helper from openvswitch to nf_conntrack_helper and
rename as nf_ct_add_helper, so that it can be used in TC act_ct in
the next patch.

Signed-off-by: Xin Long <[email protected]>
---
 include/net/netfilter/nf_conntrack_helper.h |  2 +
 net/netfilter/nf_conntrack_helper.c         | 31 +++++++++++++++
 net/openvswitch/conntrack.c                 | 44 +++------------------
 3 files changed, 38 insertions(+), 39 deletions(-)

diff --git a/include/net/netfilter/nf_conntrack_helper.h 
b/include/net/netfilter/nf_conntrack_helper.h
index 6c32e59fc16f..ad1adbfbeee2 100644
--- a/include/net/netfilter/nf_conntrack_helper.h
+++ b/include/net/netfilter/nf_conntrack_helper.h
@@ -116,6 +116,8 @@ int __nf_ct_try_assign_helper(struct nf_conn *ct, struct 
nf_conn *tmpl,
                              gfp_t flags);
 
 int nf_ct_helper(struct sk_buff *skb, u16 proto);
+int nf_ct_add_helper(struct nf_conn *ct, const char *name, u8 family,
+                    u8 proto, bool nat, struct nf_conntrack_helper **hp);
 
 void nf_ct_helper_destroy(struct nf_conn *ct);
 
diff --git a/net/netfilter/nf_conntrack_helper.c 
b/net/netfilter/nf_conntrack_helper.c
index 83615e479f87..ee22b8a059cd 100644
--- a/net/netfilter/nf_conntrack_helper.c
+++ b/net/netfilter/nf_conntrack_helper.c
@@ -311,6 +311,37 @@ int nf_ct_helper(struct sk_buff *skb, u16 proto)
 }
 EXPORT_SYMBOL_GPL(nf_ct_helper);
 
+int nf_ct_add_helper(struct nf_conn *ct, const char *name, u8 family,
+                    u8 proto, bool nat, struct nf_conntrack_helper **hp)
+{
+       struct nf_conntrack_helper *helper;
+       struct nf_conn_help *help;
+       int err;
+
+       helper = nf_conntrack_helper_try_module_get(name, family, proto);
+       if (!helper)
+               return -EINVAL;
+
+       help = nf_ct_helper_ext_add(ct, GFP_KERNEL);
+       if (!help) {
+               nf_conntrack_helper_put(helper);
+               return -ENOMEM;
+       }
+#if IS_ENABLED(CONFIG_NF_NAT)
+       if (nat) {
+               err = nf_nat_helper_try_module_get(name, family, proto);
+               if (err) {
+                       nf_conntrack_helper_put(helper);
+                       return err;
+               }
+       }
+#endif
+       rcu_assign_pointer(help->helper, helper);
+       *hp = helper;
+       return 0;
+}
+EXPORT_SYMBOL_GPL(nf_ct_add_helper);
+
 /* appropriate ct lock protecting must be taken by caller */
 static int unhelp(struct nf_conn *ct, void *me)
 {
diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
index 19b5c54615c8..d37011e678c2 100644
--- a/net/openvswitch/conntrack.c
+++ b/net/openvswitch/conntrack.c
@@ -1291,43 +1291,6 @@ int ovs_ct_clear(struct sk_buff *skb, struct sw_flow_key 
*key)
        return 0;
 }
 
-static int ovs_ct_add_helper(struct ovs_conntrack_info *info, const char *name,
-                            const struct sw_flow_key *key, bool log)
-{
-       struct nf_conntrack_helper *helper;
-       struct nf_conn_help *help;
-       int ret = 0;
-
-       helper = nf_conntrack_helper_try_module_get(name, info->family,
-                                                   key->ip.proto);
-       if (!helper) {
-               OVS_NLERR(log, "Unknown helper \"%s\"", name);
-               return -EINVAL;
-       }
-
-       help = nf_ct_helper_ext_add(info->ct, GFP_KERNEL);
-       if (!help) {
-               nf_conntrack_helper_put(helper);
-               return -ENOMEM;
-       }
-
-#if IS_ENABLED(CONFIG_NF_NAT)
-       if (info->nat) {
-               ret = nf_nat_helper_try_module_get(name, info->family,
-                                                  key->ip.proto);
-               if (ret) {
-                       nf_conntrack_helper_put(helper);
-                       OVS_NLERR(log, "Failed to load \"%s\" NAT helper, 
error: %d",
-                                 name, ret);
-                       return ret;
-               }
-       }
-#endif
-       rcu_assign_pointer(help->helper, helper);
-       info->helper = helper;
-       return ret;
-}
-
 #if IS_ENABLED(CONFIG_NF_NAT)
 static int parse_nat(const struct nlattr *attr,
                     struct ovs_conntrack_info *info, bool log)
@@ -1661,9 +1624,12 @@ int ovs_ct_copy_action(struct net *net, const struct 
nlattr *attr,
        }
 
        if (helper) {
-               err = ovs_ct_add_helper(&ct_info, helper, key, log);
-               if (err)
+               err = nf_ct_add_helper(ct_info.ct, helper, ct_info.family,
+                                      key->ip.proto, ct_info.nat, 
&ct_info.helper);
+               if (err) {
+                       OVS_NLERR(log, "Failed to add %s helper %d", helper, 
err);
                        goto err_free_ct;
+               }
        }
 
        err = ovs_nla_add_action(sfa, OVS_ACTION_ATTR_CT, &ct_info,
-- 
2.31.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to