Thanks Damjan.

Is the IPSec code using spd attached to an interface ("set interface ipsec
spd <interface> <spd-id>") production quality?
How is the performance of this code in terms of throughput, are there any
benchmarks that can be referred to?

Thanks
Vamsi

On Sat, Jun 30, 2018 at 1:35 AM, Damjan Marion <dmar...@me.com> wrote:

>
> Dear Vamsi,
>
> It was long long time ago when I wrote original ipsec code, so I don't
> remember details anymore.
> For IKEv2, i would suggest using external implementation, as ikev2 stuff
> is just PoC quality code.
>
> --
> Damjan
>
> On 29 Jun 2018, at 18:38, Vamsi Krishna <vamsi...@gmail.com> wrote:
>
> Hi Damjan, Dave,
>
> Can you please also answer the questions I had in the email just before
> Jim hijacked the thread.
>
> Thanks
> Vamsi
>
> On Fri, Jun 29, 2018 at 3:06 PM, Damjan Marion <dmar...@me.com> wrote:
>
>>
>> Hi Jim,
>>
>> Atomic add sounds like a reasonable solution to me...
>>
>> --
>> Damjan
>>
>> On 28 Jun 2018, at 09:26, Jim Thompson <j...@netgate.com> wrote:
>>
>> All,
>>
>> I don't know if any of the previously-raised issues occur in real-life.
>> Goodness knows we've run billions of IPsec packets in the test harnesses
>> (harnessi?) here without seeing them.
>>
>> There are a couple issues with IPsec and multicore that haven't been
>> raised, however, so I'm gonna hijack the thread.
>>
>> If multiple worker threads are configured in VPP, it seems like there’s
>> the potential for problems with IPsec where the sequence number or replay
>> window for an SA could get stomped on by two threads trying to update them
>> at the same. We assume that this issue is well known since the following
>> comment occurs at line 173 in src/vnet/ipsec/esp.h
>>
>>     /* TODO seq increment should be atomic to be accessed by multiple
>> workers */
>>
>> See: https://github.com/FDio/vpp/blob/master/src/vnet/ipsec/esp.h#L173
>>
>> We've asked if anyone is working on this, and are willing to try and fix
>> it, but would need some direction on what is the best way to accomplish
>> same.
>>
>> We could try to use locking, which would be straightforward but would add
>> overhead.  Maybe that overhead could be offset some by requesting a block
>> of sequence numbers upfront for all of the packets being processed instead
>> of getting a sequence number and incrementing as each packet is processed.
>>
>> There is also the clib_smp_atomic_add() call, which invokes
>> __sync_fetch_and_add(addr,increment).  This is a GCC built_in that uses
>> a memory barrier to avoid obtaining a lock.  We're not sure if there are
>> drawbacks to using this.
>>
>> See: http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Atomic-Builtins.html
>>
>> GRE uses clib_smp_atomic_add() for sequence number processing, see 
>> src/vnet/gre/gre.c#L409
>> and src/vnet/gre/gre.c#L421
>>
>> Finally, there seem to be issues around AES-GCM nonce processing when
>> operating multi-threaded.  If it is nonce processing, it can probably
>> (also) be addressed via clib_smp_atomic_add(), but.. don't know yet.
>>
>> We've raised these before, but haven't received much in the way of
>> response.  Again, we're willing to work on these, but would like a bit of
>> 'guidance' from vpp-dev.
>>
>> Thanks,
>>
>> Jim (and the rest of Netgate)
>>
>>
>> On Thu, Jun 28, 2018 at 1:44 AM, Vamsi Krishna <vamsi...@gmail.com>
>> wrote:
>>
>>> Hi Damjan, Dave,
>>>
>>> Thanks for the quick reply.
>>>
>>> It is really helpful. So the barrier ensures that the IPSec data
>>> structure access is thread safe.
>>>
>>> Have a few more question on the IPSec implementation.
>>> 1. The inbound SA lookup (in ipsec-input) is actually going through the
>>> inbound policies for the given spd id linearly and matching a policy. The
>>> SA is picked based on the matching policy.
>>>      This could have been an SAD hash table with key as (SPI, dst
>>> address, proto (ESP or AH) ), so that the SA can be looked up from the hash
>>> on receiving an ESP packet.
>>>      Is there a particular reason it is implemented using a linear
>>> policy match?
>>>
>>> 2. There is also an IKEv2 responder implementation that adds/deletes
>>> IPSec tunnel interfaces. How does this work? Is there any documentation
>>> that can be referred to?
>>>
>>> Thanks
>>> Krishna
>>>
>>> On Wed, Jun 27, 2018 at 6:23 PM, Dave Barach (dbarach) <
>>> dbar...@cisco.com> wrote:
>>>
>>>> +1.
>>>>
>>>>
>>>>
>>>> To amplify a bit: *all* binary API messages are processed with worker
>>>> threads paused in a barrier sync, unless the API message has been
>>>> explicitly marked thread-safe.
>>>>
>>>>
>>>>
>>>> Here is the relevant code in .../src/vlibapi/api_shared.c:v
>>>> l_api_msg_handler_with_vm_node(...)
>>>>
>>>>
>>>>
>>>>       if (!am->is_mp_safe[id])
>>>>
>>>>      {
>>>>
>>>>        vl_msg_api_barrier_trace_context (am->msg_names[id]);
>>>>
>>>>        vl_msg_api_barrier_sync ();
>>>>
>>>>      }
>>>>
>>>>       (*handler) (the_msg, vm, node);
>>>>
>>>>
>>>>
>>>>       if (!am->is_mp_safe[id])
>>>>
>>>>        vl_msg_api_barrier_release ();
>>>>
>>>>
>>>>
>>>> Typical example of marking a message mp-safe:
>>>>
>>>>
>>>>
>>>>   api_main_t *am=&api_main;
>>>>
>>>>   ...
>>>>
>>>>
>>>>
>>>>   am->is_mp_safe[VL_API_MEMCLNT_KEEPALIVE_REPLY] = 1;
>>>>
>>>>
>>>>
>>>> The debug CLI uses the same scheme. Unless otherwise marked mp-safe,
>>>> debug CLI commands are executed with worker threads paused in a barrier
>>>> sync.
>>>>
>>>>
>>>>
>>>> HTH... Dave
>>>>
>>>>
>>>>
>>>> -----Original Message-----
>>>> From: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> On Behalf Of Damjan
>>>> Marion
>>>> Sent: Wednesday, June 27, 2018 6:59 AM
>>>> To: Vamsi Krishna <vamsi...@gmail.com>
>>>> Cc: vpp-dev@lists.fd.io
>>>> Subject: Re: [vpp-dev] Is VPP IPSec implementation thread safe?
>>>>
>>>>
>>>>
>>>> ipsec data structures are updated during barrier sync, so there is not
>>>> packets in-flight...
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> > On 27 Jun 2018, at 07:45, Vamsi Krishna <vamsi...@gmail.com> wrote:
>>>>
>>>> >
>>>>
>>>> > Hi ,
>>>>
>>>> >
>>>>
>>>> > I have looked at the ipsec code in VPP and trying to understand how
>>>> it works in a multi threaded environment. Noticed that the datastructures
>>>> for spd, sad and tunnel interface are pools and there are no locks to
>>>> prevent race conditions.
>>>>
>>>> >
>>>>
>>>> > For instance the ipsec-input node passes SA index to the esp-encrypt
>>>> node, and esp-encrypt node looks up the SA from sad pool. But during the
>>>> time in which the packet is passed from one node to another the entry at SA
>>>> index may be changed or deleted. Same seems to be true for dpdk-esp-encrypt
>>>> and dpdk-esp-decrypt. How are these cases handled? Can the implementation
>>>> be used in multi-threaded environment?
>>>>
>>>> >
>>>>
>>>> > Please help understand the IPSec implementation.
>>>>
>>>> >
>>>>
>>>> > Thanks
>>>>
>>>> > Krishna
>>>>
>>>> > -=-=-=-=-=-=-=-=-=-=-=-
>>>>
>>>> > Links: You receive all messages sent to this group.
>>>>
>>>> >
>>>>
>>>> > View/Reply Online (#9709): https://lists.fd.io/g/vpp-dev/message/9709
>>>>
>>>> > Mute This Topic: https://lists.fd.io/mt/22720913/675642
>>>>
>>>> > Group Owner: vpp-dev+ow...@lists.fd.io
>>>>
>>>> > Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub  [dmar...@me.com]
>>>>
>>>> > -=-=-=-=-=-=-=-=-=-=-=-
>>>>
>>>>
>>>>
>>>
>>>
>>> -=-=-=-=-=-=-=-=-=-=-=-
>>> Links: You receive all messages sent to this group.
>>>
>>> View/Reply Online (#9730): https://lists.fd.io/g/vpp-dev/message/9730
>>> Mute This Topic: https://lists.fd.io/mt/22720913/675164
>>> Group Owner: vpp-dev+ow...@lists.fd.io
>>> Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub  [j...@netgate.com]
>>> -=-=-=-=-=-=-=-=-=-=-=-
>>>
>>>
>>
>>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
>
> View/Reply Online (#9747): https://lists.fd.io/g/vpp-dev/message/9747
> Mute This Topic: https://lists.fd.io/mt/22720913/675642
> Group Owner: vpp-dev+ow...@lists.fd.io
> Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub  [dmar...@me.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#9754): https://lists.fd.io/g/vpp-dev/message/9754
Mute This Topic: https://lists.fd.io/mt/22720913/21656
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to