> On 3 Apr 2019, at 08:47, Paul Blakey <pa...@mellanox.com> wrote:
> 
> 
> 
> Kevin 'ldir' Darbyshire-Bryant wrote on 02/04/2019 12:24:
>> Hi Cong & all,
>> 
>>> On 1 Apr 2019, at 22:06, Cong Wang <xiyou.wangc...@gmail.com> wrote:
>>> 
>>> On Mon, Apr 1, 2019 at 7:22 AM Paul Blakey <pa...@mellanox.com> wrote:
>>>> 
>>> 
>> <snip some context>
> 
> 
> Hi Kevin,
> If you'd like, You can rebase it on our upcoming act_ct (our
> act_conntrack) once we're done (hopefully in a couple of weeks). If you
> going with the a standalone action, it's fine with me as well.
> 
> 
>> +       /* let's not trust userspace entirely */
>> +       /* need at least contiguous 6 bit mask */
>> +       if ((0x3f & (ci->mask >> ci->maskshift)) != 0x3f)
>> +               ci->mode &= ~CONNTRACK_FLAG_SETDSCP;
>> +       /* mask & statemask must not overlap */
>> +       if (ci->mask & ci->statemask)
>> +               ci->mode &= ~CONNTRACK_FLAG_SETDSCP;
>> +
> 
> Some nitpicks, you check if the user provides sane input in
> conntrack_parmset, but instead of returning an error, you just disable
> the only action the user provided and the module supports, so it won't
> do nothing, yet the command succeeds.

Ok, I’ll return an -E something.  I guess I’m still stuck between this
generic ‘act_ctinfo’ potentially does more than one thing vs ‘act_conndscp’
doing a single thing.

> 
> As marcelo said, this module isn't RCUified... see the design pattern in
> act_vlan, act_tunnel_key, act_csum, or what this commits changed:
> 
> commit 4c5b9d9642c859f7369338fc42c0f62f4151bef3
> Author: Manish Kurup <kurup.man...@gmail.com>
> act_vlan: VLAN action rewrite to use RCU lock/unlock and update
> 
> commit 9c5f69bbd75a7db80578782b037629c5f1e59dce
> Author: Davide Caratti <dcara...@redhat.com>
> net/sched: act_csum: don't use spinlock in the fast path

Ok, will take a look.  Note current act_connmark on which this is a
shameless copy has the same problem.  Is that an oversight and also
needs fixing?

> 
> 
> And regarding the
>> +       ct = nf_ct_get(skb, &ctinfo);
>> +       if (!ct) { /* look harder */
> 
> 
> The packet didn't pass connection tracking yet right (!ct) but you're
> setting the DSCP early?
> 
> 
>> +               if (!nf_ct_get_tuplepr(skb, skb_network_offset(skb),
>> +                                      proto, ca->net, &tuple))
>> +                       goto out;
>> +               zone.id = ca->zone;
>> +               zone.dir = NF_CT_DEFAULT_ZONE_DIR;
>> +
>> +               thash = nf_conntrack_find_get(ca->net, &zone, &tuple);
>> +               if (!thash)
>> +                       goto out;
>> +
>> +               if (!nf_ct_get_tuplepr(skb, skb_network_offset(skb),
>> +                                      proto, ca->net, &tuple))
>> +                       goto out;
>> +
> 
> Aren't searching for the same tuple twice?

Again, I’m not doing anything that act_connmark (conntrack mark to
skb mark setting) isn’t doing already, so is act_connmark also wrong?
As you can almost certainly tell I’m working in areas that I don’t
understand, I only (think I) know the result I wish to achieve and so far
it is working.  More luck than judgement?! :-)

> 
> Thanks,
> Paul.

Reply via email to