Thread (28 messages) flat view 28 messages, 3 authors, 2015-08-21

Re: [PATCHv4 net-next 10/10] openvswitch: Allow attaching helpers to ct action

From: Joe Stringer <hidden>
Date: 2015-08-21 00:47:36
Also in: lkml

On 19 August 2015 at 15:57, Pravin Shelar [off-list ref] wrote:
On Tue, Aug 18, 2015 at 4:39 PM, Joe Stringer [off-list ref] wrote:
quoted
Add support for using conntrack helpers to assist protocol detection.
The new OVS_CT_ATTR_HELPER attribute of the ct action specifies a helper
to be used for this connection.

Example ODP flows allowing FTP connections from ports 1->2:
in_port=1,tcp,action=ct(helper=ftp,commit),2
in_port=2,tcp,ct_state=-trk,action=ct(),recirc(1)
recirc_id=1,in_port=2,tcp,ct_state=+trk-new+est,action=1
recirc_id=1,in_port=2,tcp,ct_state=+trk+rel,action=1

Signed-off-by: Joe Stringer <redacted>
---
v2-v3: No change.
v4: Change error code for unknown helper ENOENT->EINVAL.
I got following compilation warning :

net/openvswitch/conntrack.c:352:42: error: incompatible types in
comparison expression (different address spaces)
Is this made available via another sparse flag? It looks like it's
related to the __rcu as you've mentioned below, but I'm not seeing
this (latest sparse, gcc-4.9.2)
quoted
+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;
+
+       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, helper, GFP_KERNEL);
+       if (!help) {
+               module_put(helper->me);
+               return -ENOMEM;
+       }
+
+       help->helper = helper;
helper is rcu pointer so need to use rcu API to set the value. I know
it is not required here, but it is still cleaner to use the API.
Will update, thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help