Hi Neale,

Probably I didn’t make it clear enough, sorry for that. I just re-produced the 
case and captured the back traces for your reference.

There are actually two cases:

First, creating many tunnels with different tunnel endpoints. In this case, 
fib_table_entry_special_add would create many fib entries, but all entries have 
to be added to a linked list for cover route check then the list will be walked 
through by fib_entry_cover_walk.

See back trace for this case:

-------------------- back trace of linked list formation

#0  fib_node_list_push_front (list=13, owner_id=0, type=FIB_NODE_TYPE_ENTRY, 
index=11)
    at /home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_node_list.c:160
#1  0x00007ffff7390c80 in fib_entry_cover_track (cover=0x7fffb6fea840, 
covered=11)
    at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_entry_cover.c:38
#2  0x00007ffff738d367 in fib_entry_src_rr_activate (src=0x7fffb5aab734, 
fib_entry=0x7fffb6feab58)
    at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_entry_src_rr.c:143
#3  0x00007ffff738ac7a in fib_entry_src_action_activate 
(fib_entry=0x7fffb6feab58, source=FIB_SOURCE_RR)
    at /home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_entry_src.c:916
#4  0x00007ffff7386a43 in fib_entry_create_special (fib_index=0, 
prefix=0x7fffb6e888f0, source=FIB_SOURCE_RR, 
    flags=FIB_ENTRY_FLAG_NONE, dpo=0x7fffb6e88760) at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_entry.c:730
#5  0x00007ffff7371b74 in fib_table_entry_special_dpo_add (fib_index=0, 
prefix=0x7fffb6e888f0, source=FIB_SOURCE_RR, 
    flags=FIB_ENTRY_FLAG_NONE, dpo=0x7fffb6e88760) at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_table.c:313
#6  0x00007ffff7371e0f in fib_table_entry_special_add (fib_index=0, 
prefix=0x7fffb6e888f0, source=FIB_SOURCE_RR, 
    flags=FIB_ENTRY_FLAG_NONE) at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_table.c:390
#7  0x00007fffb359afb2 in vnet_gtpu_add_del_tunnel (a=0x7fffb6e88a50, 
sw_if_indexp=0x7fffb6e889dc)
    at /home/vppshare/kingwel/vpp/build-data/../src/plugins/gtpu/gtpu.c:490


---------------- back trace of cover walk the long list

#0  fib_node_list_walk (list=13, fn=0x7ffff7390d2f 
<fib_entry_cover_walk_node_ptr>, args=0x7fffb6e885f0)
    at /home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_node_list.c:357
#1  0x00007ffff7390e04 in fib_entry_cover_walk (cover=0x7fffb550c6cc, 
walk=0x7ffff7390e1d <fib_entry_cover_change_one>, args=0x7)
    at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_entry_cover.c:104
#2  0x00007ffff7390f0a in fib_entry_cover_change_notify (cover_index=0, 
covered=7)
    at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_entry_cover.c:158
#3  0x00007ffff73717d7 in fib_table_post_insert_actions 
(fib_table=0x7fffb5707cc0, prefix=0x7fffb6e888f0, fib_entry_index=7)
    at /home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_table.c:202
#4  0x00007ffff73718f7 in fib_table_entry_insert (fib_table=0x7fffb5707cc0, 
prefix=0x7fffb6e888f0, fib_entry_index=7)
    at /home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_table.c:239
#5  0x00007ffff7371b8d in fib_table_entry_special_dpo_add (fib_index=0, 
prefix=0x7fffb6e888f0, source=FIB_SOURCE_RR, 
    flags=FIB_ENTRY_FLAG_NONE, dpo=0x7fffb6e88760) at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_table.c:317
#6  0x00007ffff7371e0f in fib_table_entry_special_add (fib_index=0, 
prefix=0x7fffb6e888f0, source=FIB_SOURCE_RR, 
    flags=FIB_ENTRY_FLAG_NONE) at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_table.c:390
#7  0x00007fffb359afb2 in vnet_gtpu_add_del_tunnel (a=0x7fffb6e88a50, 
sw_if_indexp=0x7fffb6e889dc)
    at /home/vppshare/kingwel/vpp/build-data/../src/plugins/gtpu/gtpu.c:490



Then the second case is, creating many tunnels but with one (or very few, which 
I think is the classic GTP case) tunnel endpoint. Thus, only one fib entry will 
created, but fib_entry_child_add will create a list for this fib entry to 
accommodate all fib node children which is the GTP fib node. This linked list 
will be walked through by next fib_entry_special_add for restacking the dpo. 

See back trace:

#0  gtpu_tunnel_restack_dpo (t=0x7fffb6c45d00) at 
/home/vppshare/kingwel/vpp/build-data/../src/plugins/gtpu/gtpu.c:139
#1  0x00007fffb3599b15 in gtpu_tunnel_back_walk (node=0x7fffb6c45d48, 
ctx=0x7fffb6dc32b8)
    at /home/vppshare/kingwel/vpp/build-data/../src/plugins/gtpu/gtpu.c:165
#2  0x00007ffff73811ed in fib_node_back_walk_one (ptr=0x7fffb6e86590, 
ctx=0x7fffb6dc32b8)
    at /home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_node.c:161
#3  0x00007ffff737c73f in fib_walk_advance (fwi=0) at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_walk.c:353
#4  0x00007ffff737d18c in fib_walk_sync (parent_type=FIB_NODE_TYPE_ENTRY, 
parent_index=7, ctx=0x7fffb6e86620)
    at /home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_walk.c:772
#5  0x00007ffff7386acd in fib_entry_post_update_actions 
(fib_entry=0x7fffb54f88c4, source=FIB_SOURCE_RR, 
    old_flags=FIB_ENTRY_FLAG_NONE) at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_entry.c:749
#6  0x00007ffff7386ba9 in fib_entry_source_change (fib_entry=0x7fffb54f88c4, 
old_source=FIB_SOURCE_RR, new_source=FIB_SOURCE_RR)
    at /home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_entry.c:795
#7  0x00007ffff7386c3c in fib_entry_special_add (fib_entry_index=7, 
source=FIB_SOURCE_RR, flags=FIB_ENTRY_FLAG_NONE, 
    dpo=0x7fffb6e86760) at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_entry.c:811
#8  0x00007ffff7371bdc in fib_table_entry_special_dpo_add (fib_index=0, 
prefix=0x7fffb6e868f0, source=FIB_SOURCE_RR, 
    flags=FIB_ENTRY_FLAG_NONE, dpo=0x7fffb6e86760) at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_table.c:325
#9  0x00007ffff7371e0f in fib_table_entry_special_add (fib_index=0, 
prefix=0x7fffb6e868f0, source=FIB_SOURCE_RR, 
    flags=FIB_ENTRY_FLAG_NONE) at 
/home/vppshare/kingwel/vpp/build-data/../src/vnet/fib/fib_table.c:390
#10 0x00007fffb359b006 in vnet_gtpu_add_del_tunnel (a=0x7fffb6e86a50, 
sw_if_indexp=0x7fffb6e869dc)
    at /home/vppshare/kingwel/vpp/build-data/../src/plugins/gtpu/gtpu.c:490

--------------------

The tentative solution is simple: comment fib_table_entry_special_add, 
fib_entry_child_add, gtpu_tunnel_restack_dpo. It is ok for a gtp tunnel, which 
might not be so critical for missing route change notification. Not so good at 
fib part of vPP code, but we really appreciate if someone can point out a 
better solution.  

Regards,
Kingwel








-----Original Message-----
From: Neale Ranns (nranns) [mailto:nra...@cisco.com] 
Sent: Thursday, April 19, 2018 9:06 PM
To: Kingwel Xie <kingwel....@ericsson.com>; xyxue <xy...@fiberhome.com>
Cc: vpp-dev@lists.fd.io
Subject: Re: [vpp-dev] questions in configuring tunnel


Hi Kingwei,

 
[nr] if you skip this then the tunnels are not part of the FIB graph and hence 
any updates in the forwarding to the tunnel’s destination will go unnoticed and 
hence you potentially black hole the tunnel traffic indefinitely (since the 
tunnel is not re-stacked). It is a linked list, but apart from the pool 
allocation of the list element, the list element insertion is O(1), no?
[kingwel] You are right that the update will not be noticed, but we think it is 
acceptable for a p2p tunnel interface. The list element itself is ok when being 
inserted, but the following restack operation will walk through all inserted 
elements. This is the point I’m talking about.
        
restacking will indeed walk all of the child objects of a parent, but this is 
an operation that occurs only when the forwarding of that parent changes (which 
in this case is the route to the tunnel’s destination) and this walk is done 
asynchronously, since the child uses a recursive path. You should not see these 
walks occurring whilst you are creating tunnels (please confirm) so they should 
not affect the tunnel setup time. 

/neale



-=-=-=-=-=-=-=-=-=-=-=-
Links:

You receive all messages sent to this group.

View/Reply Online (#9004): https://lists.fd.io/g/vpp-dev/message/9004
View All Messages In Topic (11): https://lists.fd.io/g/vpp-dev/topic/17543966
Mute This Topic: https://lists.fd.io/mt/17543966/21656
New Topic: https://lists.fd.io/g/vpp-dev/post

Change Your Subscription: https://lists.fd.io/g/vpp-dev/editsub/21656
Group Home: https://lists.fd.io/g/vpp-dev
Contact Group Owner: vpp-dev+ow...@lists.fd.io
Terms of Service: https://lists.fd.io/static/tos
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to