stats: fix state counter removal 11/28311/1
authorVladimir Isaev <visaev@netgate.com>
Tue, 4 Feb 2020 08:54:27 +0000 (11:54 +0300)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Wed, 12 Aug 2020 15:59:46 +0000 (15:59 +0000)
commit779ca383b9538b00a3e88a399d436490b6b81efa
tree325ac3ae537a22febb7462ebd820cc21593cb9e0
parentfd48e5542aa050192fcc00cbb836c5272ec45294
stats: fix state counter removal

Avoid using vec_del1() for directory vector to keep indexes valid all
the time.

There are state counters for each slave in LACP bond mode which can be
dynamically created and removed. Vector index is used to access these
counters. But also vec_del1() is used to remove counter from vector.
This function changes the index of the last element, so after this we
are unable to access ex-last element using old index.

As a result it is not possible to add-del-add two interfaces to the LACP
bond:

DBGvpp# create bond mode lacp
BondEthernet0
DBGvpp# create packet-generator interface pg1
DBGvpp# create packet-generator interface pg2
DBGvpp# bond add BondEthernet0 pg1
DBGvpp# bond add BondEthernet0 pg2
DBGvpp# bond del pg1
DBGvpp# bond del pg2
DBGvpp# bond add BondEthernet0 pg1
DBGvpp# bond add BondEthernet0 pg2
bond add: /if/lacp/1/3/partner-state is already register

Type: fix

Signed-off-by: Vladimir Isaev <visaev@netgate.com>
Change-Id: I2c86e13905eefdef6233369cd4ab5c1b53d123bd
(cherry picked from commit 72e31bc2d9b910147c09e1c329713fccc873a018)
extras/vom/vom/stat_client.cpp
extras/vom/vom/stat_reader.cpp
src/vpp-api/client/stat_client.c
src/vpp/app/vpp_get_stats.c
src/vpp/app/vpp_prometheus_export.c
src/vpp/stats/stat_segment.c
src/vpp/stats/stat_segment.h
src/vpp/stats/stat_segment_shared.h
test/test_bond.py