vpp.git
3 years agoip: Router ID included in flow hash 94/30894/2
Neale Ranns [Fri, 22 Jan 2021 16:12:38 +0000 (16:12 +0000)]
ip: Router ID included in flow hash

Type: feature

A device/router needs to have a unique ID which is included in the flow
has so that flows are not polarised through the network, i.e. each deice
in the network chooses the same nth link for the same flow.

Signed-off-by: Neale Ranns <neale@graphiant.com>
Change-Id: I963e03674adbb085902b4084fdc4886b88f5734c

3 years agocrypto-openssl: fix iv size for AES CTR 55/30955/3
Benoît Ganne [Wed, 27 Jan 2021 16:43:41 +0000 (17:43 +0100)]
crypto-openssl: fix iv size for AES CTR

Type: fix

Change-Id: I79258a95cfb75587685dffae671255063f57cbef
Signed-off-by: Benoît Ganne <bganne@cisco.com>
3 years agobuild: do not _FORTIFY_SOURCE in debug mode 84/30884/3
Mohammed Hawari [Fri, 22 Jan 2021 13:30:56 +0000 (14:30 +0100)]
build: do not _FORTIFY_SOURCE in debug mode

When compiling in -O0, the glibc feature.h ignores _FORTIFY_SOURCE and,
in some distributions, throws a #warning, which fails the build. This
patch removes -D_FORTIFY_SOURCE in all debug configurations.

Change-Id: Ic30229c038353e49ff9419779e082a7083c1ea5f
Type: fix
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
3 years agoChange unformat_init_string API in doc to match code 46/30846/2
hemant_mnkcg [Tue, 19 Jan 2021 19:20:04 +0000 (14:20 -0500)]
Change unformat_init_string API in doc to match code

Signed-off-by: hemant_mnkcg <hemant@mnkcg.com>
Change-Id: I4ec487054f928d52fe06d530df095b30edf66ae5

3 years agovhost: vhost interface hardware address not set 46/30946/2
Steven Luong [Wed, 27 Jan 2021 07:44:19 +0000 (23:44 -0800)]
vhost: vhost interface hardware address not set

The check args->hwaddr is always true and it always copies the
mac address from args->hwaddr even though none was set.

Check args->use_custom_mac instead.

Type: fix
Fixes: gerrit 29970

Signed-off-by: Steven Luong <sluong@cisco.com>
Change-Id: I0c51bf1ea79b02c4fbdc3c52e694f186bdd96600

3 years agoikev2: add per SA stats 24/30924/2
Filip Tehlar [Mon, 25 Jan 2021 10:09:27 +0000 (10:09 +0000)]
ikev2: add per SA stats

Type: feature

Change-Id: Ic502d806410ea3c8f3f1eac70b694114ccb053bf
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
3 years agosession: clear ct fifo flag prior to notification 41/30941/3
Florin Coras [Tue, 26 Jan 2021 22:10:43 +0000 (14:10 -0800)]
session: clear ct fifo flag prior to notification

Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I6db15780d87426eee852aa020c50cbdf45dc1f95

3 years agointerface: remove vnet_device_input_runtime_t 71/30671/8
Mohammed Hawari [Fri, 8 Jan 2021 16:19:09 +0000 (17:19 +0100)]
interface: remove vnet_device_input_runtime_t

Change-Id: I85a463b4ca15baf11e3eb70189f5190ba2585170
Type: refactor
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
3 years agomisc: fix snap image build 37/30937/3
Dave Barach [Tue, 26 Jan 2021 15:51:13 +0000 (10:51 -0500)]
misc: fix snap image build

Clean up snapcraft.yaml bit rot, switch to Ubuntu 20.04, add README.md

Type: improvement

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I2e0d3925cf43541e70b59083f8c91af539aa34e6

3 years agosvm: add custom q implementation for mq 20/30920/6
Florin Coras [Fri, 22 Jan 2021 23:05:14 +0000 (15:05 -0800)]
svm: add custom q implementation for mq

Add separate queue implementation for the message queue as it's custom
tailored for fifo segments as opposed to binary api.

Also move eventfds to the private data structures.

Type: refactor

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I6df0c824ecd94c7904516373f92a9fffc6b04736

3 years agovlib: add show trace limit warning at the end of output too 59/29259/2
Benoît Ganne [Mon, 5 Oct 2020 12:55:00 +0000 (14:55 +0200)]
vlib: add show trace limit warning at the end of output too

Users tend to miss the warning too often, add it to the end of the
output in hope it would be easier to catch.

Type: improvement

Change-Id: I264df7e3b6ab1ffb1a383807f4444d9cbaf40999
Signed-off-by: Benoît Ganne <bganne@cisco.com>
3 years agocrypto-ipsecmb: more explicit errors reporting 18/30918/2
Benoît Ganne [Fri, 22 Jan 2021 17:43:14 +0000 (18:43 +0100)]
crypto-ipsecmb: more explicit errors reporting

Use error counters related to ipsec-mb return codes instead of
'bad-hmac' only.

Type: improvement

Change-Id: I9329da300a70d76b4d4ab30fa45f0a2a85d6519b
Signed-off-by: Benoît Ganne <bganne@cisco.com>
3 years agovlib: startup multi-arch variant configuration fix for interfaces 28/30228/3
Radu Nicolau [Wed, 2 Dec 2020 11:45:11 +0000 (11:45 +0000)]
vlib: startup multi-arch variant configuration fix for interfaces

Propagate the multi-arch variant selection to interfaces.

Type: fix

Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
Change-Id: I99c4a7896f172f0d14d2ded22a27383825529a7d

3 years agosvm: use standard function to reset stale mutex 62/30862/2
Benoît Ganne [Wed, 20 Jan 2021 18:10:59 +0000 (19:10 +0100)]
svm: use standard function to reset stale mutex

Avoid accessing the private data structure of mutexes which is
implementation-dependent, eg. musl is different from glibc.

Type: improvement

Change-Id: I20ec0c1c9faef0749d89a1969cd2430c80ac04b3
Signed-off-by: Benoît Ganne <bganne@cisco.com>
3 years agoquic: quicly v0.1.2 update 45/27845/24
Mathias Raoul [Tue, 19 Jan 2021 14:02:34 +0000 (14:02 +0000)]
quic: quicly v0.1.2 update

- update quic plugin with new quicly/picotls API
- remove packet allocator
- remove crypto batching
- update picotls plugin
- add cli for quicly congestion control configuration

Type: feature

Change-Id: If76ef31c43b430eea2f7674539b2112aee0f351e
Signed-off-by: Mathias Raoul <mathias.raoul@gmail.com>
3 years agotests: add generalized tags for tests, use them for run-solo tests 63/30763/12
Andrew Yourtchenko [Thu, 14 Jan 2021 10:19:08 +0000 (10:19 +0000)]
tests: add generalized tags for tests, use them for run-solo tests

We have accumulated several scenarios in prod or wishlists
where it would be useful to have a general infra to say yes/no
about a certain test, and potentially make decisions based on that,
for example:

- runs solo (aka 'time-dependent')
- (wishlist) part of quick smoke-test set
- (wishlist) intermittent failure unrelated to timing
- (wishlist) test broken with a multi-worker config in vpp

Refactor the current "run-solo" code to allow for this extension.

Type: test

Change-Id: Ia5b3810e57c0543753c8e0dc4dc0cfb4a30b36ac
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
Signed-off-by: Klement Sekera <ksekera@cisco.com>
3 years agodocs: vpp stateless traffic generator 61/30861/2
Dave Barach [Wed, 20 Jan 2021 17:20:13 +0000 (12:20 -0500)]
docs: vpp stateless traffic generator

Add a use-case writeup.

Type: docs

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: Ib6e79e80455edbdeedcc96943dd98f16c57c559e

3 years agointerface: fix rx-placement api/cli for new infra 91/30391/12
Mohammed Hawari [Fri, 11 Dec 2020 18:36:37 +0000 (19:36 +0100)]
interface: fix rx-placement api/cli for new infra

Change-Id: Ic977ffe761efc2129c61aec581da5479fe4838da
Type: fix
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
3 years agointerface: let drivers control polling when down 27/30527/8
Mohammed Hawari [Mon, 21 Dec 2020 17:19:46 +0000 (18:19 +0100)]
interface: let drivers control polling when down

Change-Id: I03e164d8d5a329497f422e99f8b0058135241b4e
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
Type: fix

3 years agodevices: adapt af_packet to new rxq framework 85/30485/12
Mohammed Hawari [Fri, 18 Dec 2020 15:29:45 +0000 (16:29 +0100)]
devices: adapt af_packet to new rxq framework

Change-Id: If8077280cef501599f810ad9255efa2a5a451ced
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
Type: improvement

3 years agointerface: fix vnet_hw_if_update_runtime_data 30/30530/9
Mohammed Hawari [Tue, 22 Dec 2020 14:12:27 +0000 (15:12 +0100)]
interface: fix vnet_hw_if_update_runtime_data

Take into account pending interrupts when resizing rxq_interrupts

Type: fix
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
Change-Id: I64f6f4404738c90ed5a2c10d72c7ce59cf96a644

3 years agosr: SRv6 FlowLabel Added 71/30871/2
Jakub Horn [Thu, 21 Jan 2021 12:14:58 +0000 (12:14 +0000)]
sr: SRv6 FlowLabel Added

Type: improvement

Signed-off-by: Jakub Horn <jhorn@cisco.com>
Change-Id: I06401a8645615d139893dca27d07bb3b3214bea7

3 years agodpdk: do not use TSO for small packets 88/30188/12
Somnath Kotur [Mon, 30 Nov 2020 02:54:45 +0000 (08:24 +0530)]
dpdk: do not use TSO for small packets

Asking for TSO (TCP Segmentation Offload) on packets that are already
smaller than (headers + MSS) does not make sense and may not work
on some HW.
Fix to only set the TSO flag when a segmentation offload is
really required, i.e when packet is large enough.

Type: improvement

Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
Change-Id: I7830ae8474581c8e518fb4910f7863e10346bb62
Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
3 years agoavf: use write combining store for queues tail update 61/29861/8
Radu Nicolau [Thu, 14 Jan 2021 10:25:02 +0000 (10:25 +0000)]
avf: use write combining store for queues tail update

Performance improvement: on supported platforms, currently only Intel Tremont,
use a write combining store to update the tail pointers.
Also, Tremont node variant is added for all.

Type: improvement

Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
Change-Id: Ie9606e403b7d9655184f778e3ffee3027c8c9edd

3 years agolibmemif: buffer enqueue refactor 69/30669/6
Jakub Grajciar [Fri, 8 Jan 2021 14:01:13 +0000 (15:01 +0100)]
libmemif: buffer enqueue refactor

Refactored memif_buffer_enq_tx - dequeue buffers from any queue (rx/tx) and
enqueue them to any tx queue.

Added memif_buffer_requeue - swap descriptors of provided buffers.

Type: refactor

Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
Change-Id: I8482824df920aaaf8325d52a297ed57a815aaba6

3 years agodpdk: dpdk i40e patch cherry-pick 77/30677/3
Chenmin Sun [Mon, 11 Jan 2021 12:03:13 +0000 (20:03 +0800)]
dpdk: dpdk i40e patch cherry-pick

This patch fixes flex payload flow creation failure issue

Type: fix

Signed-off-by: Chenmin Sun <chenmin.sun@intel.com>
Change-Id: I3ac0a168dadd033a668d7bd6f5e78798aedb61a5

3 years agordma: adapt to new vnet rxq framework 29/30129/10
Mohammed Hawari [Wed, 25 Nov 2020 13:44:37 +0000 (14:44 +0100)]
rdma: adapt to new vnet rxq framework

Change-Id: Id539d36635f0ab9625dc2fc73630be39bead09af
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
Type: improvement

3 years agoip: do not return uninitialized IPv6 ll attributes 12/30812/2
Benoît Ganne [Mon, 18 Jan 2021 18:37:55 +0000 (19:37 +0100)]
ip: do not return uninitialized IPv6 ll attributes

Type: fix

Change-Id: If35cf7da0c3d1b92532cc2e45c164d6b5a08592c
Signed-off-by: Benoît Ganne <bganne@cisco.com>
3 years agomemif: adapt to new rxq framework 19/30419/14
Mohammed Hawari [Tue, 15 Dec 2020 08:48:45 +0000 (09:48 +0100)]
memif: adapt to new rxq framework

Change-Id: Ifa8bccd8a34ec1b14e772ee53757e9083373e3de
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
Type: feature

3 years agoaf_xdp: update interrupt mode to new infra 21/30121/10
Benoît Ganne [Wed, 25 Nov 2020 09:41:26 +0000 (10:41 +0100)]
af_xdp: update interrupt mode to new infra

Type: improvement

Change-Id: Icb23af5f5e458a555f416cb0a829e84646b25dd9
Signed-off-by: Benoît Ganne <bganne@cisco.com>
3 years agomarvell: adapt pp2 to new rxq framework. 54/30854/3
Mohammed Hawari [Wed, 20 Jan 2021 09:40:31 +0000 (10:40 +0100)]
marvell: adapt pp2 to new rxq framework.

Change-Id: I8759a07a24692b8b418ef8eb2025b61a62d2dda1
Type: improvement
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
3 years agointerface: rx queue infra rework, part one 08/29808/30
Damjan Marion [Fri, 6 Nov 2020 22:25:57 +0000 (23:25 +0100)]
interface: rx queue infra rework, part one

Type: improvement
Change-Id: I4008cadfd5141f921afbdc09a3ebcd1dcf88eb29
Signed-off-by: Damjan Marion <damarion@cisco.com>
3 years agoperfmon: added cache hits and misses 66/30766/2
Ray Kinsella [Thu, 14 Jan 2021 13:18:59 +0000 (13:18 +0000)]
perfmon: added cache hits and misses

Added basic support for counting cache hits and misses per node.

Type: improvement

Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
Change-Id: Ic566611fd3d4246ccaa2117d8f74a569a6862e80

3 years agodpdk: terminate device devargs string 78/30778/2
Matthew Smith [Thu, 14 Jan 2021 22:51:57 +0000 (16:51 -0600)]
dpdk: terminate device devargs string

Type: fix

When a device is whitelisted with devargs arguments specified, the
string that is generated and added to conf->eal_init_args is not
explicitly terminated with 0. If the formatted string takes up all
of the memory allocated to the vector which stores it and it is
used later as a string in a format() or printf() call, any nonzero
characters stored in memory at the address immediately following the
memory allocated for the vector will be erroneously appended to the
string.

Terminate the string with 0 to ensure that this does not happen.

Change-Id: I20a78d994daad93bf5aecab5c03d705022e882ec
Signed-off-by: Matthew Smith <mgsmith@netgate.com>
3 years agobuild: deprecate debian-9 support 35/30735/2
Dave Wallace [Wed, 13 Jan 2021 22:27:47 +0000 (17:27 -0500)]
build: deprecate debian-9 support

Type: make

Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
Change-Id: Ib14ce5561446aefb03c3989cf82ac7c6eb1471bb

3 years agodpdk: add support for system libdpdk 63/30863/2
Nathan Moos [Wed, 20 Jan 2021 19:34:11 +0000 (11:34 -0800)]
dpdk: add support for system libdpdk

Type: improvement

This patch enables dynamically linking the dpdk plugin against a
system-wide packaged version of dpdk.

Change-Id: I2276d125f39986b0e1788c7b52b94485cdbcd855
Signed-off-by: Nathan Moos <nmoos@cisco.com>
3 years agovppinfra: ensure _GNU_SOURCE is present 90/30790/8
Nathan Moos [Sat, 16 Jan 2021 00:45:14 +0000 (16:45 -0800)]
vppinfra: ensure _GNU_SOURCE is present

Type: fix

When building with musl, _GNU_SOURCE is required to be defined in more
places. This patch defines it in those required places. Additionally,
this patch changes the udphdr field names to the standard names.

Change-Id: I0fec54214ccc8458289176488afb4218761e9d51
Signed-off-by: Nathan Moos <nmoos@cisco.com>
3 years agoip: Use correct enum type in ip_address_set 60/30760/2
Neale Ranns [Thu, 14 Jan 2021 10:04:44 +0000 (10:04 +0000)]
ip: Use correct enum type in ip_address_set

Type: refactor

Signed-off-by: Neale Ranns <neale@graphiant.com>
Change-Id: Ice2bc42838e6d5ba579f449c3f8b0feffebeb719

3 years agoip: use IPv6 flowlabel in flow hash computation 54/30054/11
Ahmed Abdelsalam [Fri, 20 Nov 2020 18:56:09 +0000 (18:56 +0000)]
ip: use IPv6 flowlabel in flow hash computation

extends ip6_compute_flow_hash() to include IPv6 flowlabel in flowhash computation

Type: improvement

Signed-off-by: Ahmed Abdelsalam <ahabdels@cisco.com>
Signed-off-by: Neale Ranns <neale.ranns@cisco.com>
Change-Id: Id1aaa20c9dac729c22b714eea1cdd6e9e4d1f75e

3 years agoipsec: Honour IPSec SA table-ID over API 15/30815/3
Neale Ranns [Tue, 19 Jan 2021 13:30:23 +0000 (13:30 +0000)]
ipsec: Honour IPSec SA table-ID over API

Type: fix

Signed-off-by: Neale Ranns <neale@graphiant.com>
Change-Id: Ib08fe356e4dc710dd60a96736c48b27129f06786

3 years agoipsec: Tunnelled packets are locally generated 36/30836/3
Neale Ranns [Tue, 19 Jan 2021 13:38:47 +0000 (13:38 +0000)]
ipsec: Tunnelled packets are locally generated

Type: fix

this means we 1) don't decrement TTL and (for v6) can fragment.

Signed-off-by: Neale Ranns <neale@graphiant.com>
Change-Id: I0f718da7dcaba834ad495ae9242a9a58c9e7c184

3 years agoip: set correct error in ip6-local 38/30838/2
Benoît Ganne [Tue, 19 Jan 2021 15:40:07 +0000 (16:40 +0100)]
ip: set correct error in ip6-local

Type: fix

Change-Id: Ib23f823e46494f80d9d857ddde88f4939bf2b3d1
Signed-off-by: Benoît Ganne <bganne@cisco.com>
3 years agovppinfra: add bihash with 32 byte key 60/30860/3
Matthew Smith [Wed, 20 Jan 2021 14:59:10 +0000 (08:59 -0600)]
vppinfra: add bihash with 32 byte key

Type: feature

Add header to define bihash_32_8.

Change-Id: Ia8a21a1e76cf0c05b8f8a2d1f5dbc0dc586d7801
Signed-off-by: Matthew Smith <mgsmith@netgate.com>
3 years agofib: fix includes for musl 87/30787/8
Nathan Moos [Fri, 15 Jan 2021 22:47:24 +0000 (14:47 -0800)]
fib: fix includes for musl

Type: fix

When building with musl, the type `uint` is not available unless you
include <sys/types.h>.

Signed-off-by: Nathan Moos <nmoos@cisco.com>
Change-Id: I0003b0c373d9fd532b4135c43d78f36d6cd7afa4

3 years agotests: do not skip solo-run tests if running within a single job and all remaining... 58/30858/3
Andrew Yourtchenko [Wed, 20 Jan 2021 14:53:55 +0000 (14:53 +0000)]
tests: do not skip solo-run tests if running within a single job and all remaining tests are solo-run

There was a logic error, which results in not running solo tests
if TEST_JOBS=1, and we have finished running the regular test
and the remaining tests are all solo-run. They all get put into
that pile, but the new runners never start.

Solution: check the pile of solo-run jobs unconditionally.

Thanks to Klement Sekera for spotting the issue.

Type: fix
Change-Id: Iaecacbe4de44050cd8d0ff2d524559df99f2bae4
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
3 years agobuild: add python files to ctags 75/30675/2
Jerome Tollet [Sat, 9 Jan 2021 00:47:36 +0000 (01:47 +0100)]
build: add python files to ctags

Type: improvement

Signed-off-by: Jerome Tollet <jtollet@cisco.com>
Change-Id: Ifb97b3a52d8bf4ecc09dc1e8ff94992fef309a65

3 years agoacl: replace glibc internal __bswap_64 with clib 83/30783/6
Nathan Moos [Fri, 15 Jan 2021 21:47:16 +0000 (13:47 -0800)]
acl: replace glibc internal __bswap_64 with clib

Type: fix

In order to build VPP as a package for an embedded Yocto-based
distribution, this patch replaces the use of the glibc internal
__bswap_64 function with the VPP function clib_net_to_host_u64, which is
provided by vppinfra.

Change-Id: I3ecc8525861dc3441bce2b51aa4c80f9a62d3051
Signed-off-by: Nathan Moos <nmoos@cisco.com>
3 years agomemif: fix vpp to go link up immediately on admin up 49/30849/3
Ed Warnicke [Tue, 19 Jan 2021 23:56:24 +0000 (17:56 -0600)]
memif: fix vpp to go link up immediately on admin up

Type: improvement

Previously, memif would check every 3 seconds to see if an interface
had gone admin up.  Now it does as soon as admin up occurs.

Signed-off-by: Ed Warnicke <hagbard@gmail.com>
Change-Id: I808699cd5980fa162c34ac977f43d00ed6b67115
Signed-off-by: Ed Warnicke <hagbard@gmail.com>
3 years agovxlan: fix SEGV reported in VPP-1962 06/30806/10
Ed Warnicke [Mon, 18 Jan 2021 17:56:22 +0000 (11:56 -0600)]
vxlan: fix SEGV reported in VPP-1962

Type: fix

Replace vnet_register_interface with ethernet_register_interface

Fixes https://jira.fd.io/browse/VPP-1962

Signed-off-by: Ed Warnicke <hagbard@gmail.com>
Change-Id: I5f578fc416605429fe1e2b510ad49eb754451d40
Signed-off-by: Ed Warnicke <hagbard@gmail.com>
3 years agovppinfra: add option to use libexecinfo 89/30789/4
Nathan Moos [Fri, 15 Jan 2021 23:50:59 +0000 (15:50 -0800)]
vppinfra: add option to use libexecinfo

Type: feature

The musl libc does not provide <execinfo.h> or an implementation of the
functions provided. This patch enables the use of libexecinfo as an
alternative, which can be used on systems with musl.

Change-Id: I76b5744ddf731b66e16144025a6fdedf72925260
Signed-off-by: Nathan Moos <nmoos@cisco.com>
3 years agosvm: add standard include for __WORDSIZE 84/30784/7
Nathan Moos [Fri, 15 Jan 2021 22:03:01 +0000 (14:03 -0800)]
svm: add standard include for __WORDSIZE

Type: fix

In glibc, the __WORDSIZE macro is defined in a header included
indirectly from svm_common.h. In musl, the __WORDSIZE macro is not
indirectly included, so this patch directly includes <sys/user.h> to
ensure the __WORDSIZE macro is available.

Change-Id: If1b1fc97161b7a0b2e82351d4776c81c36a323cb
Signed-off-by: Nathan Moos <nmoos@cisco.com>
3 years agovlib: fix build with musl 86/30786/7
Nathan Moos [Fri, 15 Jan 2021 22:32:07 +0000 (14:32 -0800)]
vlib: fix build with musl

Type: fix

When building with musl, some transitive includes from glibc are not
present. This patch adds direct includes for the necessary types, and it
also defines _GNU_SOURCE to ensure that the socket types are complete.

Change-Id: Ic69c307b9515fec764c32906b5bc7f1fb34f2525
Signed-off-by: Nathan Moos <nmoos@cisco.com>
3 years agocrypto: improve ipsecmb build time 97/30797/2
PiotrX Kleski [Mon, 18 Jan 2021 09:01:23 +0000 (10:01 +0100)]
crypto: improve ipsecmb build time

Type: improvement

This change disables building of ipsecmb test and perf targets to
reduce the build time.
IpsecMB test and perf targets are not neeeded and not used by VPP.

Signed-off-by: PiotrX Kleski <piotrx.kleski@intel.com>
Reviewed-by: Fan Zhang <roy.fan.zhang@intel.com>
Change-Id: I7c3449f7f4ce9a2e70ca21a00fd510691dab87d0

3 years agoikev2: use new counters data model & add more counters 67/30767/4
Filip Tehlar [Thu, 14 Jan 2021 13:32:01 +0000 (13:32 +0000)]
ikev2: use new counters data model & add more counters

Type: feature
Ticket: VPP-1916

Change-Id: Ibe612d21f748a532d88b73b286dc4a1dd15d7420
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
3 years agoip: add IPv6 ping test for link-layer address 10/30810/4
Benoît Ganne [Mon, 18 Jan 2021 18:25:38 +0000 (19:25 +0100)]
ip: add IPv6 ping test for link-layer address

Type: improvement

Change-Id: I9f60e29462c7cb193a8594b7de06418b40573103
Signed-off-by: Benoît Ganne <bganne@cisco.com>
3 years agoip: add API to retrieve IPv6 link-layer address 07/30807/5
Benoît Ganne [Mon, 18 Jan 2021 18:24:34 +0000 (19:24 +0100)]
ip: add API to retrieve IPv6 link-layer address

Type: feature

Change-Id: I5739869490155b0b9674b4faf61882d97e66a4ed
Signed-off-by: Benoît Ganne <bganne@cisco.com>
3 years agocrypto: fixed vnet_crypto_is_set_handler() 90/30690/5
PiotrX Kleski [Mon, 11 Jan 2021 08:59:31 +0000 (08:59 +0000)]
crypto: fixed vnet_crypto_is_set_handler()

Type: fix

vnet_crypto_is_set_handler() was checking if op handler is set by
using alg instead of op id.
This fix changes the check to use op ids from crypto_main's alg_data
for provided alg.

Signed-off-by: PiotrX Kleski <piotrx.kleski@intel.com>
Change-Id: I5f0f00a889ddada44d9912af175ebad66677037a

3 years agobuild: add the missing leading underscore to FORTIFY_SOURCE 53/30853/2
Neale Ranns [Wed, 20 Jan 2021 09:03:30 +0000 (09:03 +0000)]
build: add the missing leading underscore to FORTIFY_SOURCE

Type: fix

Signed-off-by: Neale Ranns <neale@graphiant.com>
Change-Id: I36f2d08681f90a3f8ea7598952d1e14c53f0187b

3 years agordma: fix pkg_config file 42/30842/2
Mohammed Hawari [Tue, 19 Jan 2021 17:19:45 +0000 (18:19 +0100)]
rdma: fix pkg_config file

When building DPDK with rdma linkage, this patch avoids linking against
useless verb providers. It also hard-codes the library directory to lib
to fix CentOS behavior.

Change-Id: I3acd94adf1b7e59e023346b3c254bd4bba6157df
Type: fix
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
3 years agoclassify: Layout classify entry to group data-plane accessed fields on 11/30411/4
Neale Ranns [Mon, 14 Dec 2020 16:02:17 +0000 (16:02 +0000)]
classify: Layout classify entry to group data-plane accessed fields on
one cache line

Type: refactor

Signed-off-by: Neale Ranns <neale.ranns@cisco.com>
Change-Id: I54128ba62f8dcc87c1845b33ed3637112d42a891

3 years agoclassify: crash on classify filter pcap del command 50/30850/1
Steven Luong [Wed, 20 Jan 2021 07:09:51 +0000 (23:09 -0800)]
classify: crash on classify filter pcap del command

If classify pcap filter was never configured, typing the delete
command causes a crash. The reason is
cm->classify_table_index_by_sw_if_index not yet allocated.

The fix is to add a check before we access the vector.

Type: fix
Fixes: gerrit 28475

Signed-off-by: Steven Luong <sluong@cisco.com>
Change-Id: Ia33bd91fa82d8ffc4490d4069155980a6e233268

3 years agoavf: fix l2_len for csum offload 26/30726/4
Mohammed Hawari [Wed, 13 Jan 2021 12:45:45 +0000 (13:45 +0100)]
avf: fix l2_len for csum offload

Use vlib_buffer_t::current_data instead of
vnet_buffer_opaque_t::l2_hdr_offset to compute l2_len for checksum
offload (l2_hdr_offset might be invalid if packet originates from an L3
interface)

Change-Id: I2031ea6fd6a7af4b6e186751e119ebd6161641b5
Type: fix
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
3 years agobuild: make rpath optional 81/30781/2
Nathan Moos [Fri, 15 Jan 2021 21:28:34 +0000 (13:28 -0800)]
build: make rpath optional

Type: feature

This patch begins enabling support for building VPP as a package for a
Yocto-based embedded Linux distribution. Yocto QA complains about
executables and libraries with an rpath configured, as the paths may not
be valid on the target system. Therefore, this patch adds a new CMake
option named `VPP_SET_RPATH`, which is enabled by default but can be
disabled by a Yocto-based build.

Change-Id: I90e9c4ba07138032b0f76cb72a98e58470885d55
Signed-off-by: Nathan Moos <nmoos@cisco.com>
3 years agonat: deal with flows instead of sessions 83/29983/29
Klement Sekera [Tue, 15 Dec 2020 17:47:05 +0000 (18:47 +0100)]
nat: deal with flows instead of sessions

This change introduces flow concept to endpoint-dependent NAT. Instead
of having a session and a plethora of special cases in code for e.g.
hairpinning, twice-nat and others, figure all this out and store it in
flow logic. Every flow has a match and a rewrite part. This unifies all
the NAT packet processing cases into one - match a flow and rewrite the
packet based on that flow. It also provides a cure for hairpinning
dilemma where one part of the flow is on one worker and another on
a different one. These cases are also sped up by not requiring
destination adress lookup every single time to be able to rewrite source
nat as this is now part of flow rewrite logic.

Type: improvement
Change-Id: Ib60c992e16792ea4d4129bc10202ebb99a73b5be
Signed-off-by: Klement Sekera <ksekera@cisco.com>
3 years agoipsec: Support MPLS over IPSec[46] interface 64/30664/6
Neale Ranns [Mon, 21 Dec 2020 13:19:10 +0000 (13:19 +0000)]
ipsec: Support MPLS over IPSec[46] interface

Type: feature

Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: I89dc3815eabfee135cd5b3c910dea5e2e2ef1333

3 years agotls: make picotls engine able to initial connection as client 48/30548/3
Simon Zhang [Sun, 27 Dec 2020 21:40:59 +0000 (05:40 +0800)]
tls: make picotls engine able to initial connection as client

Type: fix

Signed-off-by: Simon Zhang <yuwei1.zhang@intel.com>
Change-Id: Idd14dc11e92e0851c64f83e280b52f12e32ae48d

3 years agotcp: remove bad assert 91/30791/1
Ivan Shvedunov [Sat, 16 Jan 2021 00:43:01 +0000 (03:43 +0300)]
tcp: remove bad assert

Don't assume that half-open connections pending removal are always
successful.

Type: fix
Signed-off-by: Ivan Shvedunov <ivan4th@gmail.com>
Change-Id: I955077a4ed2389b9ee38d97e27a7c7761c860a4a

3 years agobuild: add missing openssl-devel package for centos-8 vpp-ext-deps 75/30775/2
Dave Wallace [Thu, 14 Jan 2021 21:46:49 +0000 (16:46 -0500)]
build: add missing openssl-devel package for centos-8 vpp-ext-deps

- In a new centos-8 installation, vpp-ext-deps fails on missing
  ssl.h header file after 'make install-deps'.

Type: fix

Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
Change-Id: I521d817dd1f1e21aff427d98b9832ea7c7b89339

3 years agomisc: checkstyle ignore .patch files in trailing whitespace check 68/30568/8
Neale Ranns [Mon, 4 Jan 2021 08:58:12 +0000 (08:58 +0000)]
misc: checkstyle ignore .patch files in trailing whitespace check

Type: fix

Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: I9226e94e59a35648ad2945ebfdf928dc80ad635c

3 years agovlib: fix counter_will_expand prediction 21/30721/2
Miklos Tirpak [Wed, 13 Jan 2021 09:00:38 +0000 (10:00 +0100)]
vlib: fix counter_will_expand prediction

vlib_validate_combined_counter_will_expand() was calling
_vec_resize_will_expand() with wrong arguments, which resulted in false
return value. Apart from the initial call, it never indicated a vector
resize.

The callers relying on this function did not perform a barrier sync
because of the wrong prediction even if the vector got extended by
a subsequent vlib_validate_combined_counter() call.

The fix introduces a new, simplified macro that is easier to call.
vec_resize_will_expand() accepts the same arguments as vec_resize().

Type: fix
Signed-off-by: Miklos Tirpak <miklos.tirpak@gmail.com>
Change-Id: Ib2c2c8afd3e665e0e3d6ae62ff5cfa287acf670f

3 years agobash: move jjb sandbox bash functions to ci-management repo 74/30774/1
Dave Wallace [Thu, 14 Jan 2021 20:03:07 +0000 (15:03 -0500)]
bash: move jjb sandbox bash functions to ci-management repo

Type: refactor

Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
Change-Id: I9b4ce818036509c0afcb204664efcc49625179ef

3 years agodocs: Update FIB documentation 95/29895/9
Neale Ranns [Mon, 9 Nov 2020 10:09:42 +0000 (10:09 +0000)]
docs: Update FIB documentation

Type: docs

Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: I3dfde4520a48c945ca9707accabbe1735c1a8799

3 years agovxlan: Protect against tunnel config where source is not local 44/30444/4
Neale Ranns [Wed, 16 Dec 2020 13:06:58 +0000 (13:06 +0000)]
vxlan: Protect against tunnel config where source is not local

Type: fix

If a tunnel's source is not local then post encap VPP will attempt to
receive (via ip4-local) that packet, things go wrong from there.
The fix is when stacking the encap forwarding don't accept a receive
DPO. This approach is taken, rather than rejecting bad tunnels, because
the 'local-ness' of the tunnel's source can change and we can't reject
tunnels that were once correctly configured but are no longer.
the user will quickly discover their mistake as traffic won't pass.

Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: I46198422e321606e8baba003112e978a526b4c2f

3 years agoikev2: remove assert condition 10/30610/6
Filip Tehlar [Wed, 13 Jan 2021 16:28:10 +0000 (16:28 +0000)]
ikev2: remove assert condition

Remove assert condition ensuring that a packet was punted with reason
spi=0. We can't rely on data in punt_reason because it is defind in an
union. This patch adds a new IKE node that handles punted IKE packets
separately.

Type: fix

Change-Id: I2e1b44922e53e049bd8512fa5cb85cee6a2b8aa7
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
3 years agocrypto-openssl: chacha support in openssl version 83/30683/5
Ray Kinsella [Mon, 11 Jan 2021 12:01:49 +0000 (12:01 +0000)]
crypto-openssl: chacha support in openssl version

Fix build errors related to chachapoly when the
system openssl version is < 0x10100000.

Type: fix

Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
Change-Id: I62283fcc44c952ddd4d6a9f621c18e8be1af8af1

3 years agoip: vtep fixes for alignment and cache update. 77/30477/3
Ray Kinsella [Fri, 18 Dec 2020 10:39:46 +0000 (10:39 +0000)]
ip: vtep fixes for alignment and cache update.

Minor fixes for Intel AVX-512 alignment, and cache update.

Type: fix

Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
Change-Id: I9f9bebb4ecb3265ffc765affd1ed94d0ba979066

3 years agovcl: fix session_handle_to_vlsh_table update after session migrate 63/30663/4
wanghanlin [Fri, 8 Jan 2021 06:57:11 +0000 (14:57 +0800)]
vcl: fix session_handle_to_vlsh_table update after session migrate

Type: fix

Signed-off-by: wanghanlin <wanghanlin@corp.netease.com>
Change-Id: I6698749163b0ed38093d8439e94b18b6841dc6ce

3 years agobuild: Add deps for ubuntu 20.10 52/30552/3
Pim van Pelt [Mon, 28 Dec 2020 23:10:42 +0000 (00:10 +0100)]
build: Add deps for ubuntu 20.10

Type: make

Ubuntu Groovy Gorilla (20.10) has bumped its FFI library.
Move from v6 to v8.

Signed-off-by: Pim van Pelt <pim@ipng.nl>
Change-Id: I32bc2905ad9ed6918446020accee2a4c2ca9d4b5

3 years agodpdk: allow configure individual VMBUS devices 82/29882/32
Vladimir Ratnikov [Wed, 11 Nov 2020 13:00:48 +0000 (08:00 -0500)]
dpdk: allow configure individual VMBUS devices

now startup.conf supports confuguration for VMBUS
devices as for PCI devices for whitelisting/blacklisting

dpdk { dev fa5a6e7a-cf3a-4b98-9569-addb479b84bc }
 with sub-configuration as for PCI devices
dpdk { blacklist fa5a6e7a-cf3a-4b98-9569-addb479b84bc }
 where fa5a6e7a-cf3a-4b98-9569-addb479b84bc - example of UUID

struct vlib_vmbus_addr_t changed to union with UUID described
 fields

Added device_config_index_by_vmbus_addr
      blacklist_by_vmbus_addr
to enumerate available device configs

hash_key is as_u32[0] field(last 4 bytes of UUID)
Lost of precision against full UUID, but 2^32 is enough
to handle all the devices available

Added is_blacklisted check while creating vnet devices in
order to supress creation of dev if it's blacklisted

Type: feature

Signed-off-by: Vladimir Ratnikov <vratnikov@netgate.com>
Change-Id: Id82611e54fed082190e488c7e5fbe14ecbe5b2ab

3 years agovcl: fix deadlock in rpc 49/30549/13
wanghanlin [Mon, 28 Dec 2020 08:19:05 +0000 (16:19 +0800)]
vcl: fix deadlock in rpc

Worker thread A send rpc to worker thread B with vls_table_lock when
worker thread B try to lock vls_table_lock, so unlock it temporarily.
Add worker_rpc_lock to synchronize rpc message among workers to prevent
waiting for each other deadly.
Add timeout for rpc response to prevent hanging when VPP exit/crash.

Type: fix

Signed-off-by: wanghanlin <wanghanlin@corp.netease.com>
Change-Id: I675f1fe76673ede09107f6eeaaa0eda8bbfc6e61

3 years agoacl: fix tag C-string overflow 42/30642/2
Benoît Ganne [Tue, 5 Jan 2021 16:47:59 +0000 (17:47 +0100)]
acl: fix tag C-string overflow

tag is expected to be a null-terminated C-string

Type: fix

Change-Id: I633719068c37eac395cc30a6a314c00848e9cdca
Signed-off-by: Benoît Ganne <bganne@cisco.com>
3 years agonat: refactor and split fo EI/ED features p.2 38/30538/4
Filip Varga [Mon, 21 Dec 2020 17:20:00 +0000 (18:20 +0100)]
nat: refactor and split fo EI/ED features p.2

Patch n. 2 aimed at moving EI features out of
NAT44 plugin & split of EI/ED functions.

Type: refactor

Change-Id: Ida20c1c084449b146344b6c3d8442f49efb6f3fa
Signed-off-by: Filip Varga <fivarga@cisco.com>
3 years agosession svm: fix fifo migration 76/30676/6
Florin Coras [Sat, 9 Jan 2021 22:34:01 +0000 (14:34 -0800)]
session svm: fix fifo migration

Allocate and attach a new pair of private fifos in the right private
slice when a session is cloned. This ensures that private fifos are not
shared between workers.

Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ib700d18104d2ca79aa8a07434cdcdcab0bef13a5

3 years agol2: fix tests for learn_limit 74/30674/3
Jerome Tollet [Fri, 8 Jan 2021 21:52:54 +0000 (22:52 +0100)]
l2: fix tests for learn_limit

Type: fix

Signed-off-by: Jerome Tollet <jtollet@cisco.com>
Change-Id: I7cbbea2205ca7249ba19020b25c8657b42e09562

3 years agol2: Separating scan-delay and learn-limit into a separate API from want_l2_macs_events 55/30655/6
Jerome Tollet [Thu, 7 Jan 2021 11:44:17 +0000 (12:44 +0100)]
l2: Separating scan-delay and learn-limit into a separate API from want_l2_macs_events

Type: feature

Signed-off-by: Jerome Tollet <jtollet@cisco.com>
Change-Id: I6de6dae7da4ec1001e2811975a9b67acfc1a148c

3 years agotests: move bond tests to src/vnet/bonding/test 01/30601/2
Dave Wallace [Mon, 4 Jan 2021 23:55:12 +0000 (18:55 -0500)]
tests: move bond tests to src/vnet/bonding/test

- Refactor make test code to be co-located with
  the vpp feature source code.

Type: test

Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
Change-Id: I056717261553f6449f5fcd3611b6ae3895a00ba6

3 years agol2: fix l2 bd_learnlimit 72/30672/2
Jerome Tollet [Fri, 8 Jan 2021 16:07:38 +0000 (17:07 +0100)]
l2: fix l2 bd_learnlimit

Type: fix

Signed-off-by: Jerome Tollet <jtollet@cisco.com>
Change-Id: I86bc9a461660f3f71e06f88ab65004ec3d763b88

3 years agotests: Use soft links for the test file staging 66/30666/3
Neale Ranns [Fri, 8 Jan 2021 08:43:14 +0000 (08:43 +0000)]
tests: Use soft links for the test file staging

Type: fix

with hard links this sequence doesn't work
 echo "GARBAGE" >> test/vpp_ipsec.py
 git checkout test/vpp_ipsec.py

also blow away the staging diretory with 'test-wipe' just to be thorough

Signed-off-by: Neale Ranns <neale@graphiant.com>
Change-Id: Ic38d7ec514102759f2eafead59c7f56c5b39f33d

3 years agovhost: Add event index for interrupt notification to driver 70/29970/7
Steven Luong [Tue, 17 Nov 2020 21:30:44 +0000 (13:30 -0800)]
vhost: Add event index for interrupt notification to driver

VPP only supports a poor man's approach for interrupt notification to the
driver. It uses a simple binary flag for "interrupt needed" or "interrupt
not needed". Most drivers support more sophisticated event index already.
This feature is to add the long due missing feature and make it configurable,
off by default.

Type: feature

Signed-off-by: Steven Luong <sluong@cisco.com>
Change-Id: I68dab7dd07045cafb49af97b7f70db9b8131ae03

3 years agoikev2: fix lookup in wrong ip table 97/30597/2
Filip Tehlar [Mon, 4 Jan 2021 14:03:53 +0000 (14:03 +0000)]
ikev2: fix lookup in wrong ip table

In responder mode we need to remember interface index from which IKE
session was initiated. Otherwise when sending keep alive packets to the
initiator, the default ip table is always used for lookup instead of the
one associated with the interface.

Type: fix

Change-Id: Iade3fc3a490b7ae83c3f6e9014d1f4204e476ac1
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
3 years agovcl session: switch to generic cert key apis 15/30615/23
Florin Coras [Wed, 6 Jan 2021 01:03:29 +0000 (17:03 -0800)]
vcl session: switch to generic cert key apis

Remove the deprecated tls apis.

Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ia1e12bd813671146f0aca22e83d04c23ac13e595

3 years agoipip: Support MPLS over IP 18/30518/2
Neale Ranns [Mon, 21 Dec 2020 09:52:24 +0000 (09:52 +0000)]
ipip: Support MPLS over IP

Type: feature

Signed-off-by: Neale Ranns <neale@graphiant.com>
Change-Id: Ief1755131297afcaa14fe74fd8dd28c71a92fbe6

3 years agoipsec: Deprecated the old IPsec Tunnel interface 39/30539/5
Neale Ranns [Wed, 23 Dec 2020 16:22:28 +0000 (16:22 +0000)]
ipsec: Deprecated the old IPsec Tunnel interface

Type: fix

it's been 2 releases since it was marked deprecated.

Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: I0eba7ed607826ed0d00e7d2d8f9b27d09e8e9a6e

3 years agovcl: allow all workers to block on api 37/30637/4
Florin Coras [Wed, 6 Jan 2021 04:45:44 +0000 (20:45 -0800)]
vcl: allow all workers to block on api

Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Id94cf2aeae8167868d5f96534224759c1ef6f837

3 years agosvm: force fixed memfd mapping if va provided 39/30639/5
Florin Coras [Wed, 6 Jan 2021 07:15:49 +0000 (23:15 -0800)]
svm: force fixed memfd mapping if va provided

Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I6a2cc596cf0b7f29d3ae1c05b1bb6b748b558175

3 years agoapi: fromjson/tojson generated code memory leak 41/30641/2
Ole Troan [Wed, 6 Jan 2021 12:58:00 +0000 (13:58 +0100)]
api: fromjson/tojson generated code memory leak

Found by coverity. Fix potential memory leakage in generated code.

Type: fix
Signed-off-by: Ole Troan <ot@cisco.com>
Change-Id: If492541b8b66e574f30ecdd0dd533099cbe068ad

3 years agoacl: fix cli tag parsing 12/30612/3
Benoît Ganne [Tue, 5 Jan 2021 16:47:59 +0000 (17:47 +0100)]
acl: fix cli tag parsing

 - tag is expected to be 64-bytes
 - when specifying tag on cli, a vector is allocated. Make sure it is
   freed

Type: fix

Change-Id: Id1741fe406819ca9f71edb081d4483f52cae547d
Signed-off-by: Benoît Ganne <bganne@cisco.com>
3 years agoipsec: Mark the interface create reply deprecated 11/30611/2
Neale Ranns [Tue, 5 Jan 2021 14:38:53 +0000 (14:38 +0000)]
ipsec: Mark the interface create reply deprecated

Type: fix

I should have done this wehn i marked the request as deprecated. The
reply also needs to be marked deprecated so the API compliance script
can remove it along with the request.

Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: I8391257944b6cff7b32a01a479dd1dcab30cd33b

3 years agol2: add per bridge domain learn limit 72/30472/14
Jerome Tollet [Fri, 18 Dec 2020 08:44:24 +0000 (09:44 +0100)]
l2: add per bridge domain learn limit

Type: feature

Signed-off-by: Jerome Tollet <jtollet@cisco.com>
Change-Id: I57ed6699050445d9c9aec98eff3aab56735aca54
Signed-off-by: Jerome Tollet <jtollet@cisco.com>
3 years agoebuild: follow symbolic links in find_newer_filtered_fn 99/30599/2
Dave Barach [Mon, 4 Jan 2021 15:52:44 +0000 (10:52 -0500)]
ebuild: follow symbolic links in find_newer_filtered_fn

Otherwise, changes in source code symbolically-linked into the
workspace will not be considered when deciding whether to invoke
e.g. Ninja.

This change is strongly preferable to asking people to remove
.mu_build_build_timestamp to force a Ninja run.

Deals reasonably gracefully with symbolic link loops, at least in
trivial cases: "find: File system loop detected"

Type: improvement

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I6666c84861de5e8b8aebcb94158f53526aded089