Commit Graph

457 Commits

Author SHA1 Message Date
Ray Kinsella
4830e4f78f vlib: startup multi-arch variant configuration
Support for startup node multi-arch variant selection through startup.conf.
This is to facilitate unit, functional testing and benchmarking of non-default
multi-arch variant node code path. Also added parameters to make test, to
specific using multi-arch variants in unit testing.

Type: improvement

Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
Change-Id: I94fd332bb629683b7a7dd770ee9f615a9a424060
2020-04-28 11:10:50 +00:00
Ole Troan
a568a19b29 stats: add apis to delete simple/combined counters
vlib_free_simple_counter()
vlib_free_combined_counter()

Frees the name and two dimensional vector from the stats segment.

Type: fix
Signed-off-by: Ole Troan <ot@cisco.com>
Change-Id: If1becf7d09520ba41a3d59e2df94958ecfcf6948
2020-04-28 09:39:47 +00:00
Dave Barach
ce32770251 vlib: deprecate i2c and cj
i2c follows its only use case - the original 82599 driver - into
extras/deprecated.

cj is/was an emergency debug tool unused in several years. Move to
extras/deprecated/vlib

Type: refactor

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: Ib55b65373f62630db295c562974bd8f2456c3107
2020-04-27 15:07:42 +00:00
Elias Rudberg
368104d06a vlib: queue_hi_thresh fix to avoid deadlock
Adapt queue_hi_thresh value using num_threads to avoid risk of deadlock
between threads which could happen for example when different NAT
threads try to handoff work to each other at the same time when their
frame queues are congested. This change ensures that each thread can
reserve a queue entry without causing problems even in the most extreme
case when all threads attempt to add to the same queue simultaneously
when the queue is nearly full.

Type: fix

Signed-off-by: Elias Rudberg <elias.rudberg@bahnhof.net>
Change-Id: I9e02f753bd00833d8dd500d181b0d4f9a454d703
2020-04-21 16:53:38 +00:00
Dave Barach
c74b43c807 buffers: configurable buffer fault injector
When configured at compile time via the cmake
VPP_BUFFER_FAULT_INJECTOR option, the buffer allocator will appear to
fail a certain fraction of the time.

By default, the allocator succeeds 80% of the time. Detailed command
line configuration options are available, but only when the image has
been compiled with cmake option described above:

    vlib { buffer-alloc-success-rate [0.0 ... 1.0]
           buffer-alloc-success-seed <nnnn> }

Modify vlib_buffer_pool_create(...) so 0 is always an invalid buffer
index.

Debug images: add checks for bad buffer index enqueues, and also
verify that f->n_vectors doesn't accidentally map one or more
instances of the frame poison pattern 0xfefefefe.

Type: improvement

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: Iab939858014463d1e664682805013d334d6fcbe5
2020-04-13 15:54:31 +00:00
Dave Barach
1adc7e78ad misc: fix error handling in punt_replicate
If vlib_buffer_clone (...) fails due to a buffer allocation error, update
*n_dispatched with the actual number of clones, not the requested
number of clones.

Punt_replicate(...) should not set *to_next[0] = bi0. The original
buffer is enqueued separately in punt_dispatch_node(...)

Type: fix

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I774ad8f8c1a0633de4cf8ae5530629201c229347
2020-04-09 06:50:11 +00:00
Dave Barach
95e1925332 l2: handle complete clone fail in l2_flood
vlib_buffer_clone(...) may not manage to produce any buffer clones at
all.

vlib_buffer_clone_256 should not smash the original buffer reference
count if no clones are produced.

Type: fix

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I14d9d53637a220485c7a0036cfc75a4149b264ea
2020-04-07 22:14:26 +00:00
Jakub Grajciar
53f06a0148 vlib: move pci api types from vnet/pci to vlib/pci
Type: fix

Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
Change-Id: I1a60809a8bbbbb8ac8b65ab990d51aae1229647f
Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2020-03-31 10:09:19 +00:00
Jieqiang Wang
6f533d780d vlib: leave SIGPROF signal with its default handler
When profiling VPP with MAP (a software profile suite on Arm CPUs, see details in
https://www.arm.com/products/development-tools/server-and-hpc/forge/map) on Arm
servers, VPP will receive SIGPROF signal because MAP uses SIGPROF signal to drive
its sampler to do profiling on VPP. However, the default action of SIGPROF signal
handler in VPP such as unix_signal_handler() is process termination. To profile
VPP with MAP, the SIGPROF handler should be left as default, and MAP sampler will
overwrite it with its own implementation.

Type: feature

Change-Id: Ie14e513d35ec27a66e95067689408bad8ed1ad6b
Signed-off-by: Jieqiang Wang <jieqiang.wang@arm.com>
2020-03-21 12:11:38 +00:00
Vladimir Isaev
2ed4204c91 vlib: allow using core 0 as a last resort
Right now even following configuration fails:
cpu {
    corelist-workers 0
}
I think we should allow user to use CPU 0 if he explicitly
configured it or as the last automatically assigned core.

Type: improvement
Signed-off-by: Vladimir Isaev <visaev@netgate.com>
Change-Id: I041c30349bace558c673475e9a0cffccae5821f7
2020-03-21 12:10:52 +00:00
Vladimir Isaev
18a4a37164 vlib: complain if workers are configured twice
Right now following configuration leads to crash:
cpu {
    corelist-workers 2
    workers 2
}

because threads count will be set to 2, but we have only
one core in coremask.

Type: fix
Signed-off-by: Vladimir Isaev <visaev@netgate.com>
Change-Id: Ia93b892733971e7c8ddfceaaec5f4eb8bf9063ac
2020-03-21 12:09:38 +00:00
Jieqiang Wang
76c6159d83 vlib: fix error when creating avf interface on SMP system
On SMP architecture, '/sys/bus/pci/devices/<devices id>/numa_node' file
will return -1 as a valid value if it does not have any NUMA node information.
Using -1 as a valid node id to access data structures will cause memory issue.
Fix the error by setting the value of numa_node to 0 if '/sys/bus/pci/devices/
<devices id>/numa_node' returns -1 and it is a SMP system.

Type: fix

Change-Id: Ib60e79c3656fe5b17e08fd9011122683e8b08b6f
Signed-off-by: Jieqiang Wang <jieqiang.wang@arm.com>
2020-03-21 11:34:43 +00:00
Benoît Ganne
72f4921c8e rdma: ring db only once per vector on tx
Type: improvement

Change-Id: I09b017d60bc38ff8a4a7a73aff42b27611bd8955
Signed-off-by: Benoît Ganne <bganne@cisco.com>
2020-03-20 17:40:36 +00:00
Florin Coras
178ecc0a9a vlib: add verbose sh node option
Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I915dace4afe07ac3281f248ef7468fa5247c9668
2020-03-13 13:56:40 +00:00
Dave Barach
197180031b vppinfra: refactor clib_timebase_t
Add a clib_time_t * argument to clib_timebase_init(...), to encourage
client code to share the vlib_main_t's clib_time_t object.

Display the current day / date in GMT via the "show time" debug CLI.

Fix the test framework so it processes the new "show time" output format.

Type: refactor

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I5e52d57eb164b7cdb6355362d520df6928491711
2020-03-12 20:55:17 +00:00
Fan Zhang
ce266ad574 vlib: fix unix cli SIGSEGV for empty line input
When logging is enabled, an empty line input (press Enter only)
will cause SIGSEGV. This patch fixes the problem by checking
the command length first.

Type: fix

Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
Change-Id: Ib4cbd1c7bfd6a694e289d28958875c7d2356a93e
2020-03-12 12:51:00 +00:00
Paul Vinciguerra
8a023fd747 vlib: unix cli - log cli commands one per line
This changeset modifies the log output so that cli commands now look like:
  cat /tmp/vpp-cli.log
  2020/03/10 19:24:42:186: ***** Start: PID 29570 *****
  /* [0] is stdin */
  2020/03/10 19:24:53:518[0]: show clock
  2020/03/10 19:24:56:078[0]: show clock
  2020/03/10 19:25:01:983[0]: show pci
  /* [1] is vppctl socket */
  2020/03/10 19:26:14:372[1]: show ver
  2020/03/10 19:26:23:395[1]: show hardware-interfaces
  2020/03/10 19:26:28:507[1]: q

instead of:
  cat /tmp/vpp-cli.log
2020/03/01 00:40:12:834: ***** Start: PID 29974 *****
2020/03/01 00:40:24:969[0]: show interface2020/03/01 00:40:31:945[0]: show clo2020/03/01 00:40:41:288[0]: show classify 2020/03/01 00:40:43:753[0]: show classify ?2020/03/01 00:40:53:392[0]: show classify tables2020/03/01 00:40:57:352[0]: quit

Type: improvement

Change-Id: I38d85535977296d174db7121ae340850b6476a39
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2020-03-11 00:24:46 +00:00
Damjan Marion
b9250a9eee rdma: improve rx loop
Type: improvement
Change-Id: If81847bc0c92d167ce03e1e94a2f8e18f8154af2
Signed-off-by: Damjan Marion <damarion@cisco.com>
2020-03-02 19:27:35 +01:00
Neale Ranns
8d6d74cdf4 vlib: Punt reason allocation listener enable/disable callback
Type: improvement

allow clients that allocate punt reasons to pass a callback function
that is invoked when the first/last client registers to use/listen on
that punt reason. This allows the client to perform some necessary
configs that might not otherwise be enabled.
IPSec uses this callback to register the ESP proto and UDP handling
nodes, that would not otherwise be enabled unless a tunnel was present.

Change-Id: I9759349903f21ffeeb253d4271e619e6bf46054b
Signed-off-by: Neale Ranns <nranns@cisco.com>
2020-02-25 10:48:52 +00:00
Neale Ranns
1103c8c04a vlib: Alias RX or TX to direction
Type: improvement

for those that find that name usefull.

Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: I6c99bcdbb10ca1615aeea6924c2d93a68b5b7684
2020-02-24 15:47:53 +00:00
Dave Barach
000a029e4a vlib: calculate per-worker loops/second metric
Use exponential smoothing. Each sample has a half-life of 1
second. reported_rate(t) = reported_rate(t-1) * K + rate(t)*(1-K)

Sample every 20ms, i.e. 50 samples per second
  K = exp (-1.0/20.0);
  K = 0.95;

Type: feature

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I9aea5dd5fecfaefffb78245316adb4bf62eb2bd4
2020-02-18 18:42:22 +00:00
Lijian.Zhang
4fbb9daa90 vlib: fix code of getting numa node with specific cpu_id
Use below sysfs files to check which numa node a specific cpu_id belongs to.

/sys/devices/system/node/online
/sys/devices/system/node/node0/cpulist
/sys/devices/system/node/node1/cpulist

Type: fix

Change-Id: I124b80b1fd4a20dd7bd76f0ae27d5ab23a3a8ff1
Signed-off-by: Lijian Zhang <Lijian.Zhang@arm.com>
2020-02-17 17:05:17 +08:00
Dave Barach
2c8e0023f9 vppinfra: remove the historical mheap memory allocator
The mheap allocator has been turned off for several releases. This
commit removes the cmake config parameter, parallel support for
dlmalloc and mheap, and the mheap allocator itself.

Type: refactor

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I104f88a1f06e47e90e5f7fb3e11cd1ca66467903
2020-02-11 23:57:18 +00:00
Dave Barach
a6ef36b2c2 misc: fix coverity warnings
Type: fix
Ticket: VPP-1837

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I6b1ea13fc83460bf4ee75cb9249d83dddaa64ded
2020-02-11 23:11:58 +00:00
Jon Loeliger
4a06846dd6 vlib: Skip core 0 if workers are configured.
According to the description in the startup.conf, the assignment
of worker threads starts with the lcore following the main_lcore.
A non-zero skip_cores will correctly achieve this assignment.
However, prior to this patch when workers are assigned, the code
picks up and assigns core 0 even thought it shouldn't.
This patch determins if a non-zero number of workers are desired
and if so, marks CPU unavailable for a worker assignment.

Type: fix

Change-Id: I1fdf73a6f218dcbf146fda2efc90c553f7cd6d20
Signed-off-by: Jon Loeliger <jdl@netgate.com>
2020-02-11 13:53:09 +00:00
Florin Coras
4c95995749 vppinfra: use vm memory allocator for numa mapping
Type: refactor

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I13b239cd572ae6dfaec07019d3d9b7c0ed3edcfa
2020-02-10 20:12:40 +00:00
Jon Loeliger
f617b145eb vlib: properly configure main thread's core id
Prior to this patch, the main thread's core id was
always reported as 0.
This patch makes a call to vlib_get_thread_core_socket() on
the main thread so that its core id is set properly.

Type: fix
Fixes: 5d64c7868f

Change-Id: I019cb95eec031da25197e48d956038c4bd6b5040
Signed-off-by: Jon Loeliger <jdl@netgate.com>
2020-02-10 18:53:46 +00:00
Dave Barach
e053056bb3 misc: add FEATURE.yaml files
For src/vnet/classify, src/vnet/cop, src/vnet/pg, and src/vlib/unix

Type: docs

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: Ib6ab734608693a1e9562a44808246950616e8d36
2020-02-10 16:22:00 +00:00
Dave Barach
8dc954a4e7 vlib: add plugin override support
Allow a plugin to override (suppress loading of) other plugins. This
mechanism allows a developer to prevent specific plugins from being
loaded.

To do so, provide an "overrides" list in the plugin definition:

VLIB_PLUGIN_REGISTER () =
{
  <snip>
  .overrides = "avf_plugin.so,ioam_plugin.so,dpdk_plugin.so",
};

or some such. Simply list the plugins in question as shown above. The
.overrides structure member is limited to 256 octets. The named .elf
section mechanism used to discover the vlib_plugin_registration_t's
precludes the use of a variable-length array of strings.

Use the vlib log to eliminate plugin and built-in vat plugin loader
console spew.

Added vlib_log_register_class_rate_limit(...) to allow procedural
configuration of the log rate-limit. We *never* want to rate-limit
plugin loader messages.

Type: feature

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I0a9327b8cf5508482f057342783252112cb44170
2020-02-06 16:58:30 +00:00
Dave Barach
a690fdbfe1 vppinfra: numa vector placement support
Type: feature

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I7e7d95a089dd849c1f01ecea84529d8dbf239f21
2020-02-05 23:38:56 +00:00
Dave Barach
c25048bd05 vppinfra: improve clocks_per_second convergence
Apply exponential smoothing to the clock rate update calculation in
clib_time_verify_frequency(), with a half-life of 1 minute and a
sampling frequency of 16 seconds. Within 5 minutes or so, the
calculation converges

With each rate recalculation: reset total_cpu_time based on the kernel
timebase delta since vpp started, and the new clock rate

Improve the "show clock [verbose]" debug CLI command.

BFD echo + echo fail tests marked off until the BFD code can be
reworked a bit.

Type: fix

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I24e88a78819b12867736c875067b386ef6115c5c
2020-01-30 20:45:18 +00:00
Dave Barach
5c944eef70 vlib: fix coverity warning / real bug
The path must be next-to-impossible to hit, because the code has been
wrong for at least 5 years.

Type: fix

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I23b8c4e1631827e7931f353c561c1e19c596c598
2020-01-07 12:29:39 -05:00
Christian E. Hopps
10a8bda37e misc: don't os_exit(1) causing core on SIGINT
It's not typical for a program to core when it receives a SIGINT, so
keep this from happening.

Type: fix
Signed-off-by: Christian E. Hopps <chopps@chopps.org>
Change-Id: I2c15985a57e6ea898ff05c4001e4b30b41154eba
2019-12-17 18:41:21 +00:00
jieqiang wang
842506f3c9 vlib: add max-size configuration parameter for pmalloc
Enable 'max-size' configuration parameter to set maximum size of
memory space allocated for pmalloc module. This parameter along
with existing 'base-addr' falls into physmem section. Both are
dedicated parameters to pmalloc module.

Type: feature

Change-Id: I939f25156b9a43440a24d69a7397d57eb6c2d392
Signed-off-by: Jieqiang Wang <Jieqiang.Wang@arm.com>
2019-12-17 18:19:50 +00:00
GordonNoonan
b2dbb36fc2 vlib: fix startup-config-process stack overflow
Type: fix

Startup config setting an i40e/ice interface
up in Debug VPP consumes more than the currently
available stack space.

Signed-off-by: GordonNoonan <gordon.noonan@intel.com>
Change-Id: I98b52c5596799017b97f802a8661b76cd1bb3245
2019-12-17 18:14:55 +00:00
Vratko Polak
dea0b23fa7 vlib: fix an issue with show pci
The fix has been received over e-mail from Lijian Zhang.
https://lists.fd.io/g/vpp-dev/message/14808

Type: fix
Ticket: VPP-1805

Change-Id: I73e5fe7dcbe2b0b1c639d844f29183eab3b6dd66
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
2019-12-17 18:06:29 +00:00
Benoît Ganne
62d9fda8e4 vlib: fix vector-as-C-string overflow
Type: fix

Change-Id: If0419ff1a82d45e5b3326973008e1b9feb290c5a
Signed-off-by: Benoît Ganne <bganne@cisco.com>
2019-12-17 18:01:57 +00:00
Dave Barach
6d5df8d229 vlib: fix "<command> help"
Walk the sub_commands vector directly.

Type: fix
Fixes: 6b3f25caff

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I3022b39e5a739647ec68effc6756166ce2da85b6
2019-12-12 18:02:48 +00:00
Dave Barach
6b3f25caff vlib: improve test coverage
Add tests.
Remove unused rule-based parser code.

Type: test

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I3ca3a9dd9da8ee8f3a47004c98f2f5644db10057
2019-12-09 21:19:47 +00:00
Dave Barach
87d24db65f classify: vpp packet tracer support
Configure n-tuple classifier filters which apply to the vpp packet
tracer.

Update the documentation to reflect the new feature.

Add a test vector.

Type: feature

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: Iefa911716c670fc12e4825b937b62044433fec36
2019-12-05 15:31:57 +00:00
Paul Vinciguerra
bfd7d294d0 vlib: add 'wait' cli command
When running exec scripts, there can be a need to wait between statements.

Type: feature

Change-Id: I2a45b390697e09fc222358c9354f28e3368a06ba
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-11-27 17:00:12 +00:00
Benoît Ganne
9fb6d40eb3 misc: add address sanitizer heap instrumentation
Introduce AddressSanitizer support: https://github.com/google/sanitizers/
This starts with heap instrumentation. vlib_buffer, bihash and stack
instrumentation should follow.

Type: feature

Change-Id: I7f20e235b2f79db72efd0e756f22c75f717a9884
Signed-off-by: Benoît Ganne <bganne@cisco.com>
2019-11-27 10:50:28 +00:00
Benoît Ganne
2b65f9ca04 misc: add gdb helpers for vlib buffers
Type: feature

Change-Id: I7e619040857310fffd33c355f6c491a55f7a4a02
Signed-off-by: Benoît Ganne <bganne@cisco.com>
2019-11-26 09:50:22 +00:00
Dave Barach
e51a9bbe76 vlib: improve code coverage, part deux
Type: test

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: If31f4b50da7a6e4a9704ceb3415c582143c08355
2019-11-20 17:38:49 +00:00
Benoît Ganne
0b91bd6c52 vlib: pci: fix non-NULL terminated C-string
Type: fix

Change-Id: I6f25d9295b973ab7133071b6dc325ecd86386898
Signed-off-by: Benoît Ganne <bganne@cisco.com>
2019-11-20 17:36:45 +00:00
Srikanth Akula
93e060aee4 session: Increasing the Header lengthe size
Type: feature

For some deployments(mobile traffic) we need few extra bytes of space

Signed-off-by: Srikanth Akula <srakula@cisco.com>
Change-Id: I3367561dc23dbb8b266dea583e23b9430fd7dcab
2019-11-18 23:48:19 +00:00
Dave Barach
320998a812 vlib: fix handoff queue sequencing bug
Set vm->check_frame_queues after actually enqueuing a frame. Under
obscure circumstances, the code managed to set check_frame_queues so
far in advance that 100 dispatch cycles could elapse before the frame
enqueue succeeded. That resulted in permanent lack of queue service.

Type: fix
Ticket: VPP-1734
Fixes: 18191

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: If2d398202b4ba2b96581d25e8142daef3f74c9e5
2019-11-11 19:03:15 +00:00
Christian Hopps
2e8b0618b1 vlib: fix for vlib_node_add_next_with_slot
- vlib_node_add_next_with_slot was not cleaning the old next node
references to the given slot when replacing it with new next node. This mostly
worked until one tried to set the slot to a previously (but not currently) used
next node for that slot.

Type: fix

Signed-off-by: Christian Hopps <chopps@labn.net>
Change-Id: I7ee607625da874e320158b80f12ddc16e377f8e9
2019-11-04 12:31:51 +00:00
Dave Barach
a1f5a956e5 vlib: enhance the "show cli" debug CLI command
Dump the entire CLI, mp-safe commands, non-mp-safe commands, commands
which have been executed. Optionally, clear the hit counters.

Type: feature

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: Ie38fc664b7deaabc35ca35be68db7e159272f551
2019-11-02 17:12:12 +00:00
Alexander Kabaev
feda545105 vlib: Handle race in thread barrier processing
When CLIB_DEBUG is enabled, vlib_foreach_main macro asserts that
vlib_main it currently looks at is safely parked in barrier, by
checkling that vlib_main->parked_at_barrier is not 0.
Unfortunately, the check is racy - workers first increment the
atomic counter to indicate that they have reached the barrier
and _then_ set this_main->parked_at_barrier to 1. For the last
worker to suspend this opens the race - main thread is free
to execute and assert immediately after atomic counter has been
incremented, before worker gets to write to own parked_at_barrier.

Fix this by simply swapping the order of two operations.

Type: fix

Signed-off-by: Alexnader Kabaev <kan@FreeBSD.org>
Change-Id: Iae47abd6ca0be1c5413f5ecaefabc64cd7eac2ed
2019-11-01 21:57:49 -04:00