On 23.05.2019 16:18, Ophir Munk wrote:
> 
> 
>> -----Original Message-----
>> From: Ilya Maximets <i.maxim...@samsung.com>
>> Sent: Wednesday, May 22, 2019 2:50 PM
>> To: Ophir Munk <ophi...@mellanox.com>; Roi Dayan
>> <r...@mellanox.com>; ovs-dev@openvswitch.org
>> Cc: Ian Stokes <ian.sto...@intel.com>; Flavio Leitner <f...@sysclose.org>;
>> Kevin Traynor <ktray...@redhat.com>; Roni Bar Yanai
>> <ron...@mellanox.com>; Finn Christensen <f...@napatech.com>; Ben Pfaff
>> <b...@ovn.org>; Simon Horman <simon.hor...@netronome.com>; Olga
>> Shern <ol...@mellanox.com>; Asaf Penso <as...@mellanox.com>; Majd
>> Dibbiny <m...@mellanox.com>
>> Subject: Re: [PATCH v4 1/4] netdev: Dynamic per-port Flow API.
>>
>>
>>
>> On 22.05.2019 13:15, Ilya Maximets wrote:
>>> On 22.05.2019 1:12, Ophir Munk wrote:
>>>>
>>>>> -----Original Message-----
>>>>> From: Roi Dayan
>>>>> Sent: Tuesday, May 21, 2019 7:48 PM
>>>>> To: Ilya Maximets <i.maxim...@samsung.com>; ovs-
>> d...@openvswitch.org
>>>>> Cc: Ian Stokes <ian.sto...@intel.com>; Flavio Leitner
>>>>> <f...@sysclose.org>; Ophir Munk <ophi...@mellanox.com>; Kevin
>> Traynor
>>>>> <ktray...@redhat.com>; Roni Bar Yanai <ron...@mellanox.com>; Finn
>>>>> Christensen <f...@napatech.com>; Ben Pfaff <b...@ovn.org>; Simon
>> Horman
>>>>> <simon.hor...@netronome.com>
>>>>> Subject: Re: [PATCH v4 1/4] netdev: Dynamic per-port Flow API.
>>>>>
>>>>>
>>>>> Acked-by: Roi Dayan <r...@mellanox.com>
>>>>
>>>> Hi Ilya,
>>>> Can you please send a patch for the detection of netdev vport on top of
>> this series (as you have already started suggesting in ML discussions)?
>>>> I will then test it and will make sure it's applicable with this series. I 
>>>> think it
>> is better to do that before series acceptance.
>>>> What do you think?
>>>
>>> Hi.
>>> Actually patches are already on a list. You only need to add few lines
>>> to make them allow vxlan for netdev-offload-dpdk.
>>>
>>> Apply following patch sets on top of this one:
>>>
>>>  https://patchwork.ozlabs.org/project/openvswitch/list/?series=107534
> 
> FYI - applying this patch succeeded, however applying the next patch failed 
> unless I applied 
> patches 2/4, 3/4/ 4/4 first and only then I applied the next patch.

Yes. That is expected.

> 
>>>  https://patchwork.ozlabs.org/project/openvswitch/list/?series=107545
>>>
>>>
>>> Change below should than allow you to use dpdk offloading for vxlan ports:
> 
> Why do you want to use dpdk offloading for vxlan ports?

Sorry for misunderstanding, but I thought that you're implementing
vxlan offloading as part of dpdk offloading. If it'll be a separate
module, it's even better.

> We need to use vport-netdev offloading for vxlan-netdev ports.
> We need to use dpdk offloading for dpdk ports.
> Vxlan-netdev offloading and dpdk offloading have a different implementation
> (unlike the system case where vxlan-system offloading and system offloading 
> are identical).
> 
> I see four required offloading APIs:
> 1. system
> 2. dpdk
> 3. vport under system (currently it is identical to system API)
> 4. New vport under netdev.
> 
> The first three APIs exist. The last (vxlan-netdev) will be sent soon. 
> 
> I see two options for adding vxlan-netdev API.
> 1. Create a new dedicated vport-netdev offload class. 
> 
> 2. Having vport-netdev API to be identical to dpdk API but since the 
> implementations are different we will have to know the type ("dpdk" versus 
> "vxlan"). 
> In pseudo code:
> If (type=="dpdk")
> {
>    // handle dpdk offloading
> }
> If (type=="vxlan")
> {
>    // handle vxlan offloading
> }
> 
> I prefer the first option.

Yes. Sure. I alse prefer the separate class if it has separate implementation
anyway.


So, with all above patches applied you just need to make a new file:
netdev-offload-vport-dpdk.c:

<...>
static int netdev_offload_vport_dpdk_flow_put(...)
{
    ...
}

static int netdev_offload_vport_dpdk_flow_del(...)
{
    ...
}

static int
netdev_offload_vport_dpdk_init_flow_api(struct netdev *netdev)
{
    if (netdev_vport_is_vport_class(netdev->netdev_class)
        && netdev_vport_has_system_port(netdev)) {
        VLOG_DBG("%s: vport has backing system interface. Skipping.",
                 netdev_get_name(netdev));
        return EOPNOTSUPP;
    }
    return strcmp(netdev_get_type(netdev), "vxlan");
}

const struct netdev_flow_api netdev_offload_vport_dpdk = {
    .type = "dpdk_flow_api",
    .flow_put = netdev_offload_vport_dpdk_flow_put,
    .flow_del = netdev_offload_vport_dpdk_flow_del,
    .init_flow_api = netdev_offload_vport_dpdk_init_flow_api,
};


And add following line to lib/dpdk.c:

netdev_register_flow_api_provider(&netdev_offload_vport_dpdk);


And following to lib/netdev-offload-provider.h:

extern const struct netdev_flow_api netdev_offload_vport_dpdk;

> 
>>> diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
>>> index b7b0616ec..32f23c401 100644
>>> --- a/lib/netdev-offload-dpdk.c
>>> +++ b/lib/netdev-offload-dpdk.c
>>> @@ -760,6 +760,10 @@ netdev_offload_dpdk_init_flow_api(struct netdev
>> *netdev)
>>>          return EOPNOTSUPP;
>>>      }
>>>
>>> +    if (!strcmp(netdev_get_name(netdev), "vxlan")) {
>>
>> Sorry,
>> s/netdev_get_name/netdev_get_type/
>>
>>> +        return 0;
> 
> Having said all the above - we still need a way to correctly select between 
> vport-netdev API versus vport-system API.
> Reading your suggestion I am still not sure we have a solution here. Say we 
> have a system bridge and a netdev bridge both with a vxlan port.
> When the vxlan-netdev is checked first by the system-init API it will pass 
> the checking and it will be added as a vxlan-system. Right?

No. See the 'netdev_vport_has_system_port' function from patch
"[RFC 2/2] netdev-offload: Disallow offloading to unrelated vports.".

> Can you please advise?

See the code snippet above.

Best regards, Ilya Maximets.
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to