Let me add a specific point on this subject: "the API or CLI invocation stops 
all workers somewhere between graph nodes." 

API / CLI barrier syncs stop worker threads at a very specific point: the top 
of the dispatch loop. 

At that point, all extant vectors (packets) have been fully processed. As a 
result, packets will not enter the forwarding graph with unintended [stale] 
sw_if_index values.

HTH... Dave   

-----Original Message-----
From: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> On Behalf Of Andreas Schultz
Sent: Monday, June 3, 2019 11:39 AM
To: vpp-dev@lists.fd.io
Subject: [vpp-dev] sw_if_index reuse in tunnel implementations

Hi,

I'm wondering whether the current practice of reusing sw_if_indexes in some of 
tunnel implementations is safe.

What currently happens is that when a tunnel session is released, the 
sw_if_index of the corresponding interface is put into vector of reuse.

My first question is, why a vector? Wouldn't putting it back directly into the 
pool lead to the same result?

Further, the vector works as LIFO, meaning the index can be reused immediately.
This, at least in theory, seems to create a race condition. The API or CLI 
invocation stops all workers somewhere between graph nodes. That means it could 
stop somewhere in the pipeline with a packet that belongs to the sw interface 
that is about the be removed. The API call will remove the interface, but will 
not clear the packet from the processing pipeline. Once the workers continue, 
they will hit the packet with the now invalid sw interface and might try to 
dereference that into an invalid data structure (the pool entry is still valid, 
but it will be shutdown at this point and possibly contain other invalid data).
The interface reuse vector will guarantee that the interface pool entry is 
still valid, but with a very fast API invocation or some kind of batching it 
could happen that the interface entry is already reused for a different 
session. This would lead to undefined results in the best case or a crash in 
the worst case.

Is my above analysis correct or do I miss something?

Many thanks
Andreas

--
--
Dipl.-Inform. Andreas Schultz

----------------------- enabling your networks ----------------------
Travelping GmbH                     Phone:  +49-391-81 90 99 0
Roentgenstr. 13                     Fax:    +49-391-81 90 99 299
39108 Magdeburg                     Email:  i...@travelping.com
GERMANY                             Web:    http://www.travelping.com

Company Registration: Amtsgericht Stendal        Reg No.:   HRB 10578
Geschaeftsfuehrer: Holger Winkelmann          VAT ID No.: DE236673780
---------------------------------------------------------------------
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#13206): https://lists.fd.io/g/vpp-dev/message/13206
Mute This Topic: https://lists.fd.io/mt/31911780/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