History log of /vpp/src/vnet/devices/virtio/
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
8046fdc1 15-Jul-2020 Mohsin Kazmi <sykazmi@cisco.com>

virtio: fix the msix for multiqueue

Type: fix

Change-Id: Ie0cff37b474f8d85a3ae376e0f547a347fb1ad8a
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

86f281a8 30-Jun-2020 Mohsin Kazmi <sykazmi@cisco.com>

tap: fix dump for TUN interfaces

Type: fix

Change-Id: I3bcc8ff1cf0a828ce3ba112694d38e3287d38d8d
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

b5ca5596 26-Jun-2020 Mohsin Kazmi <sykazmi@cisco.com>

virtio: add tx trace

Type: improvement

Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
Change-Id: I0b1a1ce085ceb75fe139092e40878566682a7986

8975dbdf 24-Jun-2020 Mohsin Kazmi <sykazmi@cisco.com>

virtio: fix the vlib buffer flags

Type: fix

Change-Id: I92e8e30e4175229e24dd92471016e9095b5cc83e
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

a0e8d966 19-May-2020 Steven Luong <sluong@cisco.com>

virtio: add vhost sw_if_index filter for sw_interface_vhost_user_dump

The filter sw_if_index was in the API sw_interface_vhost_user_dump. But
it was never implemented in the backend. This patch is to add the backend,
vat, and custom dump support for the filter.

Type: feature

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

38b09681 03-Jun-2020 Mohsin Kazmi <sykazmi@cisco.com>

virtio: interface type based improvements

Type: improvement

Change-Id: I220ea6ab609e3c1628f5210be441d0d5e825a32c
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

5bb3e81e 21-May-2020 John DeNisco <jdenisco@cisco.com>

docs: Minor updates to feature.yaml files

Type: docs

Signed-off-by: John DeNisco <jdenisco@cisco.com>
Change-Id: Iba106d33d34766b91e46980e7237fbdfc3710b8b

04f4d91c 26-May-2020 Mohsin Kazmi <sykazmi@cisco.com>

tap: fix rx queue index

Type: fix

Change-Id: I5601bdeb47d08118476ff7bd29435d2c1dba34b9
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

84f91fa9 23-Apr-2020 Mohsin Kazmi <sykazmi@cisco.com>

gso: add support for IP-IP

Type: feature

Change-Id: I37752af8496e0042a1da91124f3d94216b39ff11
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

d88fc0fc 30-Apr-2020 Mohsin Kazmi <sykazmi@cisco.com>

tap: refactor existing flags

Type: refactor

This patch refactor the existing flags and also add a new
flag for packet coalescing.

Change-Id: Ic826e4c81313f26d87c475cdf666b06cbed60a3a
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

3a76dc3f 24-Apr-2020 Benoît Ganne <bganne@cisco.com>

devices: vhost: simplify string copies for GCC-10

GCC-10 increases string truncations warnings. Refactor string copies
confusing it.

Type: refactor

Change-Id: I9720a0539059de00ab212ff2fc73055f04f5af1d
Signed-off-by: Benoît Ganne <bganne@cisco.com>

2857e785 16-Mar-2020 Aloys Augustin <aloaugus@cisco.com>

tap: use one tap fd per rx queue

This matches vhost queues to linux netdev queues and avoids random
packet shuffling across vhost queues on rx.

Change-Id: I9901689d361e440fb0b91c9fbaf8124ce525b316
Type: fix
Signed-off-by: Aloys Augustin <aloaugus@cisco.com>

bc0d9ff6 23-Mar-2020 Steven Luong <sluong@cisco.com>

virtio: support virtio 1.1 packed ring in vhost

virtio 1.1 defines a number of new features. Packed ring is among the most
notable and important one. It combines used, available, and descripptor rings
into one.

This patch provides experimental support for packed ring. To avoid
regression, when packed ring is configured for the interface, it is branched
to a separate RX and TX driver. Non packed ring should continue to perform
as it was before.

Packed ring is tested using qemu4.2 and ubuntu focal fossa (kernel 5.4.0-12)
on the guess VM which supports packed ring.

To configure VPP with packed ring, just add the optional keyword "packed"
when creating the vhost interface. To bring up the guest VM with packed ring,
add "packed=on" in the qemu launch command.

To facilitate troubleshooting, also added "verbose" option in
show vhost desc CLI to include displaying the indirect descriptors.

Known qemu reconnect issue -
If VPP is restarted, guest VMs also need to be restarted. The problem
is kernel virtio-net-pci keeps track of the previous available and used
indices. For virtio 1.0, these indices are in shared memory and qemu can
easily copy them to pass to the backend for reconnect. For virio 1.1, these
indices are no longer in shared memory. Qemu needs a new mechanism to retrieve
them and it is not currently implemented. So when the protocol reconnects,
qemu does not have the correct available and used indices to pass to the
backend. As a result, after the reconnect, virtio-net-pci is reading the TX
ring from the wrong position in the ring, not the same position which the
backend is writing. Similar problem exists also in the RX.

Type: feature

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

82b62bbf 05-Apr-2020 Steven Luong <sluong@cisco.com>

virtio: vhost checksum problem for ipv6

When checksum is enable for IPv6, it erroneously set the flag
VNET_BUFFER_F_OFFLOAD_IP_CKSUM. That flag is meant for ip4 packets only.

Type: fix
Ticket: VPP-1857

Signed-off-by: Steven Luong <sluong@cisco.com>
Change-Id: Id03b2937bfa34e2a9b50a36aafe0700bad7fb95e
(cherry picked from commit f78294d8468f156e066e7e69aab3a1b285810c3a)

0b04209e 17-Apr-2020 Mohsin Kazmi <sykazmi@cisco.com>

gso: add vxlan tunnel support

Type: feature

Change-Id: I85f6ec77187a4983c66c5e22fd39fbb2cef82902
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

ce21599c 10-Apr-2020 Mohsin Kazmi <sykazmi@cisco.com>

virtio: fix to use chained descriptors when missing indirect descriptor

Some vhost-backed missing the VIRTIO_RING_F_INDIRECT_DESC feature.
Previously, vpp doesn't support jumbo frames using chained descriptors.
This patch fixes this issue.

Type: fix

Change-Id: I20487e201e88ea136b556ac84dde058019ab3e78
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

206acf84 06-Apr-2020 Mohsin Kazmi <sykazmi@cisco.com>

tap: add initial support for tun

Type: feature

Change-Id: I699a01ac925fe5c475a36032edb7018618bb4dd4
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

f50ef40a 09-Apr-2020 Mohsin Kazmi <sykazmi@cisco.com>

virtio: fix gso and csum offload errors handling

GSO and CSUM offloaded packets are transmitted
even itf doesn't support GSO/CSUM. This patch
fixes it by logging the respective errors and
dropping the packets.

Type: fix

Change-Id: I5ab19d15ce6aa9fda515313c313a5a56c0b96837
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

7d697185 07-Apr-2020 Mohsin Kazmi <sykazmi@cisco.com>

virtio: fix the tcp/udp checksum offloads

Some vhost-backend calculates the wrong checksum in
case of tcp/udp offload when driver resets tcp/udp
checksum field to '0'.

Type: fix

Change-Id: I1d2a9b95b3d5cc1decac38027104a04df2af4680
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

53f06a01 30-Mar-2020 Jakub Grajciar <jgrajcia@cisco.com>

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>

0937fdfa 25-Mar-2020 Mohsin Kazmi <sykazmi@cisco.com>

gso: fix the header parser to read only

Previously, header parser sets the tcp/udp checksum to 0.
It should be read only function for vlib_buffer_t.

Type: fix

Change-Id: I9c3398372f22998da3df188f0b7db13748303068
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

b232d192 17-Mar-2020 Steven Luong <sluong@cisco.com>

virtio: vhost gso checksum error when both indirect and mrg_rxbuf are off

Turn on gso, turn off both indirect and mrg_rxbuf caused traffic received
and sent with checksum error. The problem is we are not mapping the hdr
correctly in the shared memory address.

Type: fix

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

57d73217 05-Mar-2020 Mohsin Kazmi <sykazmi@cisco.com>

virtio: improve error handling

Type: improvement

Change-Id: I134465760272ceb29f85486cba838d8687696bbf
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

529f0e97 19-Mar-2020 Mohsin Kazmi <sykazmi@cisco.com>

virtio: fix link up/down flag

Type: fix

"set int state <interface> down" puts the virtio device link
down. It will not put the link in "UP" state, when
"set int state <interface up>" will be used again to change
the interface admin up. This patch fixes it.

To test:
create tap
set int state tap0 up
set int state tap0 down
sh hardware
sh int
set int state tap0 up
sh int
sh hardware

Change-Id: I3c0e31539f8a2a1e40220e7fb57eedecf408f067
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

7f6d145a 27-Feb-2020 Mohsin Kazmi <sykazmi@cisco.com>

virtio: fix the out of order descriptors in tx

Type: fix

Some vhost-backends give used descriptors back in
out-of-order. This patch fixes the native virtio to
handle out-of-order descriptors.

Change-Id: I57323303349f6a385e412ee22772ab979ae8edbf
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

516e4ed6 24-Feb-2020 Mohsin Kazmi <sykazmi@cisco.com>

virtio: fix the coverity warning

Type: fix

Change-Id: Ia75edb74eb7c746dd4c66bdbff75efb949575ce4
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

13ff90fe 08-Jan-2020 Steven Luong <sluong@cisco.com>

virtio: update FEATURE.yaml to include description for vhost-user

Add features supported by vhost-user

Type: docs

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

564e1672 30-Jan-2020 Steven Luong <sluong@cisco.com>

virtio: vhost gso is broken in some topology

Recent modification added a call to vnet_gso_header_offset_parser in the
beginning of vhost_user_handle_tx_offload. The former routine may set tcp or
udp->checksum to 0. While it is appropriate to set it to 0 for the GSO packet,
it is broken and causes checksum error if the aformentiooned routine is called
by a non-GSO packet. The fix is to not call vhost_user_handle_tx_offload
if the buffer does not indicate checksum offload is needed.

Type: fix

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

3039753e 30-Jan-2020 Mohsin Kazmi <sykazmi@cisco.com>

tap: fix the host mac address

Tap configuration code sets the host mac address
two time. This patch fixes it.

Type: fix

Change-Id: I7bebb9b7f25352a8a9a98bae6a0636757c0cea9c
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

5ecc1e4d 24-Jan-2020 Benoît Ganne <bganne@cisco.com>

devices: vhost: fix data offset on input

Regardless of whether the virtio_net_hdr is sent as a separate
descriptors or in the same descriptor as the data, we always want to
skip the header length - maybe moving to the next descriptor along the

Type: fix

Change-Id: Iaa70aeb310e589639b20f8c7029aaa8d3ce5d307
Signed-off-by: Benoît Ganne <bganne@cisco.com>

affc5f6d 26-Dec-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: fix ip4 checksum offload

Type: fix

Change-Id: I08747ac308e5c1768a3a6aa5f83a016dc0274a1c
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

ba0061fe 18-Dec-2019 Mohsin Kazmi <sykazmi@cisco.com>

tap: split gso and checksum offload functionality

Type: refactor

Change-Id: I0d4b79ef384c11c841576d264bfd8ccb21783e10
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

6d4af891 03-Jan-2020 Mohsin Kazmi <sykazmi@cisco.com>

virtio: split gso and checksum offload functionality

Type: refactor

Change-Id: I897e36bd5db593b417c2bac9f739bc51cf45bc08
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

2c504f89 26-Sep-2019 Jakub Grajciar <jgrajcia@cisco.com>

devices: virtio API cleanup

Use consistent API types.

Type: fix

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

15d7fd0f 26-Nov-2019 Benoît Ganne <bganne@cisco.com>

virtio: fix checksum offload support

Checksum offload and GSO are independent. We must support checksum
offload if it has been negotiated, independently of GSO.

Ticket: VPPSUPP-47
Type: fix

Change-Id: I8cb6dd58b61714ebb2726eb4aab0d74d49fdab99
Signed-off-by: Benoît Ganne <bganne@cisco.com>

edf3b4b0 30-Oct-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: fix the tx queue thread binding

Type: fix

Change-Id: Ibbe7e20aebc9153ceba07e048dc0eaa45193f4ea
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

5d4c99f2 26-Sep-2019 Jakub Grajciar <jgrajcia@cisco.com>

devices: vhost API cleanup

Use consistent API types.

Type: fix

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

39d69112 27-Nov-2019 Dave Barach <dave@barachs.net>

api: multiple connections per process

Type: feature

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

157a4ab4 06-Dec-2019 Mohsin Kazmi <sykazmi@cisco.com>

gso: fix the tap/virtio driver for header offset

Type: fix

Change-Id: Ied34466907fa8ad44f997c600dbf481be4d22027
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

72e7312a 22-Oct-2019 Mohsin Kazmi <sykazmi@cisco.com>

gso: add protocol header parser

Type: feature

Change-Id: I7c6be2b96d19f82be237f6159944f3164ea512d0
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

3f5594d8 03-Dec-2019 Mohsin Kazmi <sykazmi@cisco.com>

gso: remove the interface count

Type: refactor

Change-Id: I51405b9d09fb6fb03d08569369fdd4e11c647908
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

7c6102b1 08-Nov-2019 Damjan Marion <damarion@cisco.com>

tap: multiqueue support

Type: feature

Change-Id: I7dcc8c6911d02729b3bda1b3a21a211c82c3b949
Signed-off-by: Damjan Marion <damarion@cisco.com>

8f011830 20-Nov-2019 Benoît Ganne <bganne@cisco.com>

virtio: fix use-after-free

Type: fix

Change-Id: Ic67d9da65d937f56ecf994a5504c6351624b32ff
Signed-off-by: Benoît Ganne <bganne@cisco.com>

f41244f4 08-Nov-2019 Damjan Marion <damarion@cisco.com>

virtio: refactor virtio-pci logging

Type: refactor

Change-Id: I34306c1206b2bf5f521be6c6b78074ccf9259a08
Signed-off-by: Damjan Marion <damarion@cisco.com>

06c194d9 13-Nov-2019 Damjan Marion <damarion@cisco.com>

virtio: feature arc have higher priority than redirect

Type: fix
Fixes: 8389fb9

Change-Id: Ie159eb444b28b36a7af86049b80fba4e49be93cb
Signed-off-by: Damjan Marion <damarion@cisco.com>

adb71a74 12-Nov-2019 Damjan Marion <damarion@cisco.com>

virtio: remove unused code

Type: refactor

Change-Id: I25f1cc3969c6a6ec1384079dc437537acd2ec152
Signed-off-by: Damjan Marion <damarion@cisco.com>

6b0dd550 03-Nov-2019 Paul Vinciguerra <pvinci@vinciconsulting.com>

build: add yaml file linting to make checkstyle

Type: feature

fts and trex rely on yaml config files. Verify
that they are valid, so comitters can catch
errors early.

Change-Id: Ide0bb276659119c59bdbbc8b8155e37562a648b8
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>

97c998c2 29-Oct-2019 Paul Vinciguerra <pvinci@vinciconsulting.com>

docs: devices-- add FEATURES.yaml

Type: docs

Change-Id: I039ba9ad5385452b202366fba0b367506a21ea4f
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>

7331005c 23-Oct-2019 Steven Luong <sluong@cisco.com>

devices: vhoost cpu->copy array overflow on tcp jumbo frame (65535 bytes)

We reserve 40 slots in cpu->copy array prior to copy out to avoid overflowing
the array. However, 40 is not enough for the jumbo frame because desceiptor
buffer len is likely at 1536. Change the reserve to 200 and add ASSERT to avoid
encountering the same problem in the future.

Type: fix

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

4442f7cb 02-Oct-2019 Steven Luong <sluong@cisco.com>

devices: vhost not reading packets from vring

In a rare event, after the vhost protocol message exchange has finished and
the interface had been brought up successfully, the driver MAY still change
its mind about the memory regions by sending new memory maps via
SET_MEM_TABLE. Upon processing SET_MEM_TABLE, VPP invalidates the old memory
regions and the descriptor tables. But it does not re-compute the new
descriptor tables based on the new memory maps. Since VPP does not have the
descriptor tables, it does not read the packets from the vring.

In the normal working case, after SET_MEM_TABLE, the driver follows up with
SET_VRING_ADDRESS which VPP computes the descriptor tables.

The fix is to stash away the descriptor table addresses from
SET_VRING_ADDRESS. Re-compute the new descriptor tables when processing
SET_MEM_TABLE if descriptor table addresses are known.

Type: fix
Ticket: VPP-1784

Signed-off-by: Steven Luong <sluong@cisco.com>
Change-Id: I3361f14c3a0372b8d07943eb6aa4b3a3f10708f9
(cherry picked from commit 61b8ba69f7a9540ed00576504528ce439f0286f5)

7ca5aaac 24-Sep-2019 Damjan Marion <damarion@cisco.com>

vlib: add flag to explicitelly mark nodes which can init per-node packet trace

Type: feature

Change-Id: I913f08383ee1c24d610c3d2aac07cef402570e2c
Signed-off-by: Damjan Marion <damarion@cisco.com>

a069762e 05-Sep-2019 Mohsin Kazmi <sykazmi@cisco.com>

tap: revert clean-up when linux will delete the tap interface

Type: fix
Ticket: VPP-1766

revert e4ac48e792f4eebfce296cfde844ee73b1abd62f

Change-Id: I03feea4008a47859d570ad8d1d08ff3f30d139ef
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
(cherry picked from commit 623a1b7053424b539a51faf866ab839d3da3f45b)

efa119db 30-Aug-2019 Steven Luong <sluong@cisco.com>

tap: interface rx counter not increment correct

vlib_increment_combined_counter takes sw_if_index, not hw_if_index. Using
hw_if_index may work as long as there is no subinterface created to cause
hw_if_index and sw_if_index to differ.

Type: fix

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

a75ad876 07-Aug-2019 Steven Luong <sluong@cisco.com>

devices: skip checksum calculation if guest supports checksum offload

to skip checksum calculation if guest supports checksum offload.

Type: fix

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

14bea1bb 29-Jul-2019 Mohsin Kazmi <sykazmi@cisco.com>

gso: fix l3 and l4 header offset in case of tagged interface

previously, PG and virtio interfaces calculate wrong l3 and l4
header offset. This patch fixes this issue.

Type: fix
Ticket: VPP-1739

Change-Id: I5ba978e464babeb65e0711e1027320d46b3b9932
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

5cd987dd 15-Aug-2019 Steven Luong <sluong@cisco.com>

devices: vhost-user crashes displaying show trace for deleted interface

After the trace is collected and if the interface is then deleted, show
trace may crash for the debug image. This is due to the additional check
in pool_elt_at_index() to make sure that the block is not free.

The fix is to do the check in vhost format trace and return "interface deleted"

Type: fix

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

7dfcf7f1 14-Aug-2019 Mohsin Kazmi <sykazmi@cisco.com>

gso: remove the ip checksum flag in case of ipv6

Type: fix
Ticket: VPP-1727

Change-Id: Icfee35c5ab5e1c65079d1ca7bb514162319113e5
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

5dedae72 31-Jul-2019 Steven Luong <sluong@cisco.com>

devices: add null check after map_guest_mem calls

map_guest_mem may return null. Coverity complains about calls
without checking its return. Simple stuff.

Type: fix

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

7c615ae9 18-Jul-2019 Chenmin Sun <chenmin.sun@intel.com>

virtio: add the display information in virtio cli

Type: fix

1. Add option '[gso-enabled]' in cli 'create interface virtio'
2. Add gso information in virtio_show()

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

4208a4ce 06-May-2019 Steven Luong <sluong@cisco.com>

devices interface tests: vhosst GSO support

Add gso option in create vhost interface to support gso and checksum

Tested with the following startup options in qemu:

Type: feature

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

3940de36 23-Jul-2019 Dave Barach <dave@barachs.net>

api: binary api cleanup

Multiple API message handlers call vnet_get_sup_hw_interface(...)
without checking the inbound sw_if_index. This can cause a
pool_elt_at_index ASSERT in a debug image, and major disorder in a
production image.

Given that a number of places are coded as follows, add an
"api_visible_or_null" variant of vnet_get_sup_hw_interface, which
returns NULL given an invalid sw_if_index, or a hidden sw interface:

- hw = vnet_get_sup_hw_interface (vnm, sw_if_index);
+ hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index);
if (hw == NULL || memif_device_class.index != hw->dev_class_index)
return clib_error_return (0, "not a memif interface");

Rename two existing xxx_safe functions -> xxx_or_null to make it
obvious what they return.

Type: fix

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

545866b5 19-Jul-2019 Steven Luong <sluong@cisco.com>

devices: vhost handling VHOST_USER_SET_FEATURES

Some combinations of new qemu (2.11) and old dpdk (16.10) may
send VHOST_USER_SET_FEATURES at the end of the protocol exchange
which the vhost interface is already declared up and ready.
Unfortunately, the process of VHOST_USER_SET_FEATURES will cause
the interface to go down. Not sure if it is correct or needed.
Because there is no additional messages thereafter, the hardware
interface stays down.

The fix is to check the interface again at the end of processing
VHOST_USER_SET_FEATURES. If it is up and ready, we bring back
the hardware interface.

Type: fix

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

58b2eb1a 15-Jul-2019 Andreas Schultz <andreas.schultz@travelping.com>

vlib: convert frame_index into real pointers

The fast path almost always has to deal with the real
pointers. Deriving the frame pointer from a frame_index requires a
load of the 32bit frame_index from memory, another 64bit load of the
heap base pointer and some calculations.

Lets store the full pointer instead and do a single 64bit load only.

This helps avoiding problems when the heap is grown and frames are
allocated below vm->heap_aligned_base.

Type: refactor
Change-Id: Ifa6e6e984aafe1e2755bff80f0a4dfcddee3623c
Signed-off-by: Andreas Schultz <andreas.schultz@travelping.com>
Signed-off-by: Dave Barach <dave@barachs.net>

e5584965 25-Jun-2019 Steven Luong <sluong@cisco.com>

devices: virtio pci leaking spinlock

Memory is dirt cheap. But there is no need to throw it away.

Type: fix

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

5e1794dc 19-Jun-2019 Mohsin Kazmi <sykazmi@cisco.com>

tap: fix the total length of packet for stats byte

Type: fix
Fixes: 8389fb9

Change-Id: I31076db78507736631609146d4cca28597aca704
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

97d54ed4 10-Jun-2019 Mohsin Kazmi <sykazmi@cisco.com>

tap: add support to configure tap interface host MTU size

This patch adds support to configure host mtu size using
api, cli or startup.conf.

Type: feature

Change-Id: I8ab087d82dbe7dedc498825c1a3ea3fcb2cce030
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

3f340175 27-May-2019 Mohsin Kazmi <sykazmi@cisco.com>

tap: crash in multi-thread environment

In tap tx routine, virtio_interface_tx_inline, there used to be an
interface spinlock to ensure packets are processed in an orderly fashion
clib_spinlock_lock_if_init (&vif->lockp);

When virtio code was introduced in 19.04, that line is changed to
clib_spinlock_lock_if_init (&vring->lockp);
to accommodate multi-queues.

Unfortunately, althrough the spinlock exists in the vring, it was never
initialized for tap, only for virtio. As a result, many nasty things can
happen when running tap interface in multi-thread environment. Crash is

The fix is to initialize vring->lockp for tap and remove vif->lockp as it
is not used anymore.

Change-Id: I82b15d3e9b0fb6add9b9ac49bf602a538946634a
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
(cherry picked from commit c2c89782d34df0dc7197b18b042b4c2464a101ef)

bbd6b746 02-May-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: Add gso support for native virtio driver

Change-Id: I7b735f5a540e8c278bac88245acb3f8c041c49c0
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

aea0df3d 23-May-2019 Mohsin Kazmi <sykazmi@cisco.com>

Tap: Fix the indirect buffers allocation VPP-1660

Indirect buffers are used to store indirect descriptors
to xmit big packets.
This patch moves the indirect buffer allocation from
interface creation to device node. Now it allocates
or deallocates buffers during tx for chained buffers.

Change-Id: I55cec208a2a7432e12fe9254a7f8ef84a9302bd5
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
(cherry picked from commit 55203e745f5e3f1f6c4dbe99d6eab8dee4d13ea6)

f8d50682 14-May-2019 Dave Barach <dave@barachs.net>

init / exit function ordering

The vlib init function subsystem now supports a mix of procedural and
formally-specified ordering constraints. We should eliminate procedural
knowledge wherever possible.

The following schemes are *roughly* equivalent:

static clib_error_t *init_runs_first (vlib_main_t *vm)
clib_error_t *error;

... do some stuff...

if ((error = vlib_call_init_function (init_runs_next)))
return error;
VLIB_INIT_FUNCTION (init_runs_first);


static clib_error_t *init_runs_first (vlib_main_t *vm)
... do some stuff...
VLIB_INIT_FUNCTION (init_runs_first) =
.runs_before = VLIB_INITS("init_runs_next"),

The first form will [most likely] call "init_runs_next" on the
spot. The second form means that "init_runs_first" runs before
"init_runs_next," possibly much earlier in the sequence.

Please DO NOT construct sets of init functions where A before B
actually means A *right before* B. It's not necessary - simply combine
A and B - and it leads to hugely annoying debugging exercises when
trying to switch from ad-hoc procedural ordering constraints to formal
ordering constraints.

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

05493786 01-May-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: refactor ctrl queue support

Change-Id: Ifb16351f39e5eb2cd154e70a1c96243e4842e80d
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

154a903a 30-Apr-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: Fix virtio buffer allocation

Change-Id: I0ffb468aef56f5fd223218a83425771595863666
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

43b512ca 30-Apr-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: remove configurable queue size support

Native virtio device through legacy driver can't support configurable queue size.

Change-Id: I76c446a071bef8a469873010325d830586aa84bd
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

286aa593 25-Apr-2019 Mohsin Kazmi <sykazmi@cisco.com>

tap: Fix the indirect buffer allocation

Change-Id: I73f76c25754f6fb14a49ae47b6404f3cbabbeeb5
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

e4ac48e7 16-Apr-2019 Mohsin Kazmi <sykazmi@cisco.com>

tap: clean-up when linux will delete the tap interface

When container is deleted which has tap interface attached,
Linux also delete the tap interface leaving the VPP side of
tap. This patch does a clean up job to remove that VPP side
of tap interface.

To produce the behavior:
create tap
On linux:
sudo ip netns add ns1
sudo ip link set dev tap0 netns ns1
sudo ip netns del ns1

Change-Id: Iaed1700073a9dc64e626c1d0c449f466c143f3ae
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

2e1c8967 10-Apr-2019 Ole Troan <ot@cisco.com>

API: Fix shared memory only action handlers.

Some API action handlers called vl_msg_ai_send_shmem()
directly. That breaks Unix domain socket API transport.

A couple (bond / vhost) also tried to send a sw_interface_event
directly, but did not send the message to all that had
registred interest. That scheme never worked correctly.
Refactored and improved the interface event code.

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

f324dec0 08-Apr-2019 Jim Thompson <jim@netgate.com>

fixing typos

Change-Id: I215e1e0208a073db80ec6f87695d734cf40fabe3
Signed-off-by: Jim Thompson <jim@netgate.com>

46f877eb 08-Apr-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: Fix the coverity warnings

Change-Id: I7c6e4bf2abf08193e54a736510c07eeacd6aebe7
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

09a3bc50 02-Apr-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: Add support for multiqueue

Change-Id: Id71ffa77e977651f219ac09d1feef334851209e1
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

3b0d7e42 15-Mar-2019 Ole Trøan <otroan@employees.org>

Revert "API: Cleanup APIs interface.api"

This reverts commit e63325e3ca03c847963863446345e6c80a2c0cfd.

Allow time for CSIT to accommodate.

Change-Id: I59435e4ab5e05e36a2796c3bf44889b5d4823cc2
Signed-off-by: ot@cisco.com

e63325e3 01-Mar-2019 Jakub Grajciar <jgrajcia@cisco.com>

API: Cleanup APIs interface.api

Use of consistent API types for interface.api

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

7e5735d3 13-Mar-2019 Steven Luong <sluong@cisco.com>

vhost-user: restart vpp may cause vhost to crash

Fix a typo in vhost_user_rx_discard_packet which may cause
txvq->last_avail_idx to go wild.

Change-Id: Ifaeb58835dff9b7ea82c061442722f1dcaa5d9a4
Signed-off-by: Steven Luong <sluong@cisco.com>
(cherry picked from commit 39382976701926c1f34191c1311829c15a53cb01)

aee73648 13-Mar-2019 Filip Tehlar <ftehlar@cisco.com>


Change-Id: I8819bcb9e228e7a432f4a7b67b6107f984927cd4
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>

608996d2 04-Mar-2019 Filip Tehlar <ftehlar@cisco.com>

devices: migrate old MULTIARCH macros to VLIB_NODE_FN

Change-Id: I911fb3f1c6351b37580c5dbde6939a549431a92d
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>

b0789106 24-Jan-2019 Steven Luong <sluong@cisco.com>

vhoat: potential crash in map_guest_mem using debug image

map_guest_mem may be called from worker-thread/dataplane. It has a call
to vlib_log and may crash inside vlib_log's ASSERT statement

/* make sure we are running on the main thread to avoid use in dataplane
code, for dataplane logging consider use of event-logger */
ASSERT (vlib_get_thread_index () == 0);

The fix is to convert the vlib_log call in map_guest_map to event logger

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

296988d3 21-Feb-2019 Damjan Marion <damarion@cisco.com>

Add no-append flag to vlib_frame_t

Change-Id: I01c4f5755d579282773ac227b0bc24f8ddbb2bd1
Signed-off-by: Damjan Marion <damarion@cisco.com>

67f935ec 01-Feb-2019 Steven Luong <sluong@cisco.com>

vhost: VPP stalls with vhost performing control plane actions

With NDR traffic blasting at VPP, bringing up a new VM with vhost
connection to VPP causes packet drops. I am able to recreate this
problem easily using a simple setup like this.

TREX-------------- switch ---- VPP
|---------------| |-------|

The reason for the packet drops is due to vhost holding onto the worker
barrier lock for too long in vhost_user_socket_read(). There are quite a
few of system calls inside the routine. At the end of the routine, it
unconditionally calls vhost_user_update_iface_state() for all message
types. vhost_user_update_iface_state() also unconditionally calls
vhost_user_rx_thread_placement() and vhost_user_tx_thread_placement().
vhost_user_rx_thread_placement scraps out all existing cpu/queue mappings
for the interface and creates brand new cpu/queue mappings for the
interface. This process is very disruptive and very expensive. In my
opinion, this area of code needs a makeover.

* vhost_user_socket_read() is rewritten that it should not hold
onto the worker barrier lock for system calls, or at least minimize the
need for doing it.
* Remove the call to vhost_user_update_iface_state as a default route at
the end of vhost_user_socket_read(). There is only a couple of message
types which really need to call vhost_user_update_iface_state(). We put
the call to those message types which need it.
* Remove vhost_user_rx_thread_placement() and
vhost_user_tx_thread_placement from vhost_user_update_iface_state().
There is no need to repetatively change the cpu/queue mappings.
* vhost_user_rx_thread_placement() is actually quite expensive. It should
be called only once per queue for the interface. There is no need to
scrap the existing cpu/queue mappings and create new cpu/queue mappings
when the additional queues becomes active/enable.
* Change to create the cpu/queue mappings for the first RX when the
interface is created. Dont remove the cpu/queue mapping when the
interface is disconnected. Remove the cpu/queue mapping only when the
interface is deleted.

The create vhost user interface CLI also has some very expensive system
calls if the command is entered with the optional keyword "server"

As a bonus, This patch makes the create vhost user interface binary-api and
CLI thread safe. Do the protection for the small amount of code which is
thread unsafe.

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

6a7cff7e 12-Oct-2018 Andrew Yourtchenko <ayourtch@gmail.com>

tap gso: experimental support

This commit adds a "gso" parameter to existing "create tap..." CLI,
and a "no-gso" parameter for the compatibility with the future,
when/if defaults change.

It makes use of the lowest bit of the "tap_flags" field in the API call
in order to allow creation of GSO interfaces via API as well.

It does the necessary syscalls to enable the GSO
and checksum offload support on the kernel side and sets two flags
on the interface: virtio-specific virtio_if_t.gso_enabled,
and vnet_hw_interface_t.flags & VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO.

The first one, if enabled, triggers the marking of the GSO-encapsulated
packets on ingress with VNET_BUFFER_F_GSO flag, and
setting vnet_buffer2(b)->gso_size to the desired L4 payload size.

VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO determines the egress packet
processing in interface-output for such packets:

When the flag is set, they are sent out almost as usual (just taking
care to set the vnet header for virtio).

When the flag is not enabled (the case for most interfaces),
the egress path performs the re-segmentation such that
the L4 payload of the transmitted packets equals gso_size.

The operations in the datapath are enabled only when there is at least
one GSO-compatible interface in the system - this is done by tracking
the count in interface_main.gso_interface_count. This way the impact
of conditional checks for the setups that do not use GSO is minimized.

"show tap" CLI shows the state of the GSO flag on the interface, and
the total count of GSO-enabled interfaces (which is used to enable
the GSO-related processing in the packet path).

This commit lacks IPv6 extension header traversal support of any kind -
the L4 payload is assumed to follow the IPv6 header. Also it performs
the offloads only for TCP (TSO - TCP segmentation offload).
The UDP fragmentation offload (UFO) is not part of it.

For debug purposes it also adds the debug CLI:

"set tap gso {<interface> | sw_if_index <sw_idx>} <enable|disable>"

Change-Id: Ifd562db89adcc2208094b3d1032cee8c307aaef9
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>

47727c02 12-Feb-2019 Benoît Ganne <bganne@cisco.com>

Add -fno-common compile option

-fno-common makes sure we do not have multiple declarations of the same
global symbol across compilation units. It helps debug nasty linkage
bugs by guaranteeing that all reference to a global symbol use the same
underlying object.
It also helps avoiding benign mistakes such as declaring enum as global
objects instead of types in headers (hence the minor fixes scattered
across the source).

Change-Id: I55c16406dc54ff8a6860238b90ca990fa6b179f1
Signed-off-by: Benoît Ganne <bganne@cisco.com>

8934a045 09-Feb-2019 Damjan Marion <damarion@cisco.com>

buffers: fix typo

Change-Id: I4e836244409c98739a13092ee252542a2c5fe259
Signed-off-by: Damjan Marion <damarion@cisco.com>

5de3fec5 06-Feb-2019 Damjan Marion <damarion@cisco.com>

buffers: make buffer data size configurable from startup config


buffers {
default data-size 1536

Change-Id: I5b4436850ca18025c9fdcfc7ed648c2c2732d660
Signed-off-by: Damjan Marion <damarion@cisco.com>

b74fe32d 31-Jan-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: enable msix interrupt mode

Change-Id: Idd560f3afde1dd03bc3d6fbb2070096146865f50
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

80659b46 31-Jan-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: Use new buffer optimization

Change-Id: Ifc98373371b967c49a75989eac415ddda1dcf15f
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

0e2bc63b 30-Jan-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: fix the device order (legacy or modern)

Change-Id: I60f88d50f062b004e6dea487bd627d303d0a5e75
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

22c0ece2 28-Jan-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: Support legacy and transitional virtio devices

Change-Id: Ib1316482dd7b1ae3c27c7eeb55839ed8af9ca162
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

ddd21838 22-Jan-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: Minor fixes and header cleanup

Change-Id: I2e5fd45abcd07e9eda6184587889bdcd9613a159
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

33cc5cfd 21-Jan-2019 Mohsin Kazmi <sykazmi@cisco.com>

virtio: Add support for logging

Change-Id: Ieadf0a97379ed8b17241e454895c4e5e195dc52f
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

d6c15af3 23-Oct-2018 Mohsin Kazmi <sykazmi@cisco.com>

virtio: Native virtio driver

Change-Id: Id7fccf2f805e578fb05032aeb2b649a74c3c0e56
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

e40231b1 20-Dec-2018 Damjan Marion <damarion@cisco.com>

virtio: fix kick race issue

Change-Id: I25b2a28513821bc5eab9ac6890a3964d412b0399
Signed-off-by: Damjan Marion <damarion@cisco.com>

d9818dd6 14-Dec-2018 David Johnson <davijoh3@cisco.com>

Fixes for buliding for 32bit targets:
* u32/u64/uword mismatches
* pointer-to-int fixes
* printf formatting issues
* issues with incorrect "ULL" and related suffixes
* structure alignment and padding issues

Change-Id: I70b989007758755fe8211c074f651150680f60b4
Signed-off-by: David Johnson <davijoh3@cisco.com>

671e60e6 30-Dec-2018 Damjan Marion <damarion@cisco.com>

buffers: remove unused code

Change-Id: If2bbfbc52994f5de0879763e0b7a7864498debb6
Signed-off-by: Damjan Marion <damarion@cisco.com>

96e8cd0e 23-Nov-2018 Damjan Marion <damarion@cisco.com>

vhost-user: use memory store barrier

Should be less expensive...

Change-Id: I678a39e42a054bf5f6ef9c59d0fb93ff9719b964
Signed-off-by: Damjan Marion <damarion@cisco.com>

46bf8665 22-Nov-2018 Damjan Marion <damarion@cisco.com>

vhost-user: add missing inlines

Change-Id: I1ed39c4ee084b26faac8286d9729413311ba9508
Signed-off-by: Damjan Marion <damarion@cisco.com>

ba1afaae 22-Nov-2018 Damjan Marion <damarion@cisco.com>

vhost-user: avoid global storage access

Change-Id: I9dbeff51d3ede6db3cd5a097623aa580e5e25042
Signed-off-by: Damjan Marion <damarion@cisco.com>

9282538f 21-Nov-2018 Damjan Marion <damarion@cisco.com>

vhost-user: simplify input loop

Change-Id: I6e6963882825e83d8da3a460be35c7349e107777
Signed-off-by: Damjan Marion <damarion@cisco.com>

6a8bfd43 21-Nov-2018 Damjan Marion <damarion@cisco.com>

vhost-user: hint ethernet-input about single sw_if_index

Change-Id: Ia495f8f50c43baf0d6eeb8e9ba04314ce277286f
Signed-off-by: Damjan Marion <damarion@cisco.com>

9af4504d 21-Nov-2018 Damjan Marion <damarion@cisco.com>

vhost-user: avoid per-packet feature arc lookups

Change-Id: If96f5a7c7e4b511cab3d57e5b57796aa516aff11
Signed-off-by: Damjan Marion <damarion@cisco.com>

befe691f 22-Nov-2018 Damjan Marion <damarion@cisco.com>

vhost-user: fix input node runtime stats

Change-Id: Idda43d1236889ef91d8c37faf98ae23a19de688c
Signed-off-by: Damjan Marion <damarion@cisco.com>

7e0b17df 20-Nov-2018 Damjan Marion <damarion@cisco.com>

vhost-user: cleanup

Change-Id: Ibf68423e9514b8e85cdf0a3e57ababd55dd4fcc4
Signed-off-by: Damjan Marion <damarion@cisco.com>

178cf493 13-Nov-2018 Dave Barach <dave@barachs.net>

Remove c-11 memcpy checks from perf-critical code

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

a3d5986a 10-Nov-2018 Damjan Marion <dmarion@me.com>

vlib rename vlib_frame_args(...) to vlib_frame_scalar_args(..)

Typically we have scalar_size == 0, so it doesn't matter
but vlib_frame_args was providing pointer to scalar frame
data, not vector data. To avoid future confusion function
is renamed to vlib_frame_scalar_args(...)

Change-Id: I48b75523b46d487feea24f3f3cb10c528dde516f
Signed-off-by: Damjan Marion <damarion@cisco.com>

0c469985 04-Nov-2018 Steven <sluong@cisco.com>

vhost: crash in vhost_user_tx_avx2

(gdb) bt
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(gdb) frame 5
frame 5
293 if (PREDICT_FALSE (rxvq->last_avail_idx == rxvq->avail->idx))
(gdb) p *rxvq
p *rxvq
$3 = {cacheline0 = 0x7f290bcadd80 "\377\003", qsz_mask = 1023, last_avail_idx = 0, last_used_idx = 0, n_since_last_int = 0, desc = 0x0, avail = 0x0, used = 0x0, int_deadline = 0, started = 1 '\001', enabled = 1 '\001', log_used = 0 '\000', cacheline1 = 0x7f290bcaddc0 "\377\377\377\377\016", errfd = -1, callfd_idx = 14, kickfd_idx = 19, log_guest_addr = 5151049792, mode = 0}

The crash is because we access the null pointer rxvq->avail,
which is supposed to be derived from the mmap informed by the driver.
We fixed a similar issue before in


The reason was the driver ummaps the memory without doing the disconnect in
SR-IOV environment. The fixed was applied to the RX path. Now it happens in the
TX path. We just need to apply the same check in the TX path.

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

5b718d5c 12-Oct-2018 Sirshak Das <sirshak.das@arm.com>

Enable atomic swap and store macro with acquire and release ordering

Add atomic swap and store macro with acquire and release ordering
respectively. Variable in question is interupt_pending variable which
is used as guard variable by input nodes to process the device queue.

Atomic Swap is used with Acquire ordering as writes or reads following
this in program order should not be reordered before the swap.

Atomic Store is used with Release ordering, as post store the node is
added to pending list.

Change-Id: I1be49e91a15c58d0bf21ff5ba1bd37d5d7d12f7a
Original-patch-by: Damjan Marion <damarion@cisco.com>
Signed-off-by: Sirshak Das <sirshak.das@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Ola Liljedahl <ola.liljedahl@arm.com>

5723f4a5 26-Oct-2018 Mohsin Kazmi <sykazmi@cisco.com>

virtio: remove the extra return call

Change-Id: I6e43953a6ad1bd672e69d8377d18bd9614b469d8
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

b7b92993 17-Oct-2018 Dave Barach <dave@barachs.net>

c11 safe string handling support

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

2f6d7bb9 03-Oct-2018 Sirshak Das <sirshak.das@arm.com>

vppinfra: add atomic macros for __sync builtins

This is first part of addition of atomic macros with only macros for
__sync builtins.

- Based on earlier patch by Damjan (https://gerrit.fd.io/r/#/c/10729/)
- clib_atomic_release macro added and used in the absence
of any memory barrier.
- clib_atomic_bool_cmp_and_swap added

Change-Id: Ie4e48c1e184a652018d1d0d87c4be80ddd180a3b
Original-patch-by: Damjan Marion <damarion@cisco.com>
Signed-off-by: Sirshak Das <sirshak.das@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Ola Liljedahl <ola.liljedahl@arm.com>
Reviewed-by: Steve Capper <steve.capper@arm.com>

2f54c27f 02-Oct-2018 Jerome Tollet <jtollet@cisco.com>

vhost-user: add support for vlib_log API

Change-Id: I0af68f6b41d0024aa64b93a8b18e2d179bf939b0
Signed-off-by: Jerome Tollet <jtollet@cisco.com>
Signed-off-by: Damjan Marion <damarion@cisco.com>

b192feba 30-Sep-2018 Juraj Sloboda <jsloboda@cisco.com>

vhost-user: Interface state updates

Fix inconsistencies between admin and link interface states
Admin down should imply link down:
link_up = admin_up && link_ready

Change-Id: I4d668d82d035b5d2ae508727f34f1722a0c3e677
Signed-off-by: Juraj Sloboda <jsloboda@cisco.com>

83c46a2c 27-Sep-2018 Juraj Sloboda <jsloboda@cisco.com>

vhost_user: Fix setting MTU using uninitialized variable

Change-Id: I0caa5fd584e3785f237d08f3d3be23e9bfee7605
Signed-off-by: Juraj Sloboda <jsloboda@cisco.com>

877ad144 20-Sep-2018 Steven <sluong@cisco.com>

vhost: show vhost may display garbage after the interface name

DBGvpp# show vhost-user
Virtio vhost-user interfaces
coalesce frames 32 time 1e-3
number of rx virtqueues in interrupt mode: 0
Interface: VirtualEthernet0/0/0�?x�D (ifindex 3)

The fix is to use format_vnet_hw_if_index_name rather than hi->name. The former
format the name with %v rather than %s

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

ee2e58f6 21-Aug-2018 Mohsin Kazmi <sykazmi@cisco.com>

vhost-user: Add disable feature support in api

Two flags to disable mergable rx buffers and indirect
descriptors are added to api.

Change-Id: Iba0ee9c48d19dfc3d3420a3fdaf44a1a1d325e99
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

28812a0d 29-Aug-2018 Yichen Wang <yicwang@cisco.com>

vhost: Fix VPP crash when reloading VM with mixed-type ports [VPP-1406]

When VM is having mixed type of vhost-user and SRIOV ports, QEMU (RedHat
v2.10) will not send disconnect signal to VPP, and just gives the new
memory region directly. VPP is not able to handle new memory region
mapping without disconnect signal first, which will result in a SEGV.
The fix will handle the VM reboot scenario without explict disconnect
signal from QEMU.

The fix is to invalidate the avail, desc, and used pointers in the txvq
when the new memory regions are received. This is because these pointers
are not valid anymore with the new memory regions. In the input node, check
to make sure the avail pointer is valid and punt if not.

Change-Id: Ieb8b427b202f4442a58907dab1661d63a03650de
Signed-off-by: Yichen Wang <yicwang@cisco.com>

6e36351f 10-Aug-2018 Damjan Marion <damarion@cisco.com>

Multiarch handling in different constructor macros

This significantly reduces need for


in multiarch code. Simply constructor macros will jost create static unused
entry if CLIB_MARCH_VARIANT is defined and that will be optimized out by

Change-Id: I17d1c4ac0c903adcfadaa4a07de1b854c7ab14ac
Signed-off-by: Damjan Marion <damarion@cisco.com>

dd8e7d0e 23-Jul-2018 Mohsin Kazmi <sykazmi@cisco.com>

Multiversioning: Device (tx) function constructor

Change-Id: I39f87ca161c891fb22462a23188982fef7c3243f
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

067cd622 10-Jul-2018 Damjan Marion <damarion@cisco.com>

avoid using thread local storage for thread index

It is cheaper to get thread index from vlib_main_t if available...

Change-Id: I4582e160d06d9d7fccdc54271912f0635da79b50
Signed-off-by: Damjan Marion <damarion@cisco.com>

e7cde313 26-Jun-2018 Mohsin Kazmi <sykazmi@cisco.com>

vhost: Add multi-versioning support

It also refactors the vhost code which was in one big file vhost-user.c.
Receive side code is in vhost_user_input.c and
Transmit side code is in vhost_user_output.c

Change-Id: I1b539b5008685889723e228265786a2a3e9f3a78
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

99d7a72c 27-Jun-2018 Marco Varlese <marco.varlese@suse.com>

gcc8 and Wstringop-truncation

gcc8 introduced a new warning (Wstringop-truncation) which in our case
is being treated as error.
Disabling the warning globally might introduce bugs related to string
truncation which are not desired by the developer (e.g. bug).
Instead, this patch disables the warning only for those occurences
which have been verified to be non-bugs but the desired behaviour as per
developer will.

Change-Id: I0f04ff6b4fad44061e80a65af633fd7e0148a0c5
Signed-off-by: Marco Varlese <marco.varlese@suse.com>

d723161e 07-Jun-2018 Ole Troan <ot@cisco.com>

MTU: Software interface / Per-protocol MTU support

This patch separates setting of hardware interfaec and software
interface MTU. Software MTU is L2 payload MTU (i.e. not including L2
header). Per-protocol MTU for IPv4, IPv6 and MPLS can also be set.
Currently only IP4, IP6 are enabled in adjacency / rewrite code.

Documentation in src/vnet/MTU.md

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

a50a14c5 25-Apr-2018 Mohsin Kazmi <sykazmi@cisco.com>

itf: Fix admin up down for AF_PACKET and vhost-user

Change-Id: I84327197d59c72d0d046dd2cb4071bf74af6fc28
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>

11056004 10-May-2018 Damjan Marion <damarion@cisco.com>

vppinfra: use count_trailing_zeros in sparse_vec_index

It is much cheaper to use ctzll than to do shift,subtract and mask
in likely case when we are looking for 1st set bit in the uword.

Change-Id: I31954081571978878c7098bafad0c85a91755fa2
Signed-off-by: Damjan Marion <damarion@cisco.com>

583f158b 17-Apr-2018 Steven <sluong@cisco.com>

vhost: show vhost-user <interface> may crash [VPP-1242]

show vhost-user <interface> may cause a crash if interface is semi-bogus.
Semi-bogus means it is a known vpp interface which has a hw_if_index, but
it is bogus because it is not a vhost-user interface.

The fix is to add a check to reject non vhost-user interface for the

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

fe7d4a2e 13-Apr-2018 Damjan Marion <damarion@cisco.com>

Revert "MTU: Setting of MTU on software interface (instead of hardware interface)"

This reverts commit 70083ee74c3141bbefb185525315f1b34497dcaa.

Reverting as this patch is causing following crash:

0: /home/damarion/cisco/vpp3/build-data/../src/vnet/devices/devices.h:131 (vnet_get_device_input_thread_index) assertion `queue_id < vec_len (hw->input_node_thread_index_by_queue)' fails

Change-Id: Ie2a365032110b1f67be7a9d832885b9899813d39
Signed-off-by: Damjan Marion <damarion@cisco.com>

70083ee7 27-Mar-2018 Ole Troan <ot@cisco.com>

MTU: Setting of MTU on software interface (instead of hardware interface)

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

074f698b 31-Mar-2018 Steven <sluong@cisco.com>

tapv2: Sporadic SIGABRT in ethernet_input [VPP-1183]

virtio_free_rx_buffers uses the wrong slot in the vring to get
the buffer index. It uses desc_next. It should be last_used_idx
which is the slot number for the first valid descriptor.

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

829ee539 16-Feb-2018 Damjan Marion <damarion@cisco.com>

virtio: add missing tx lock when running multithreaded

Change-Id: I373f429c53c6f66ad38322addcfaccddb7761392
Signed-off-by: Damjan Marion <damarion@cisco.com>

508cabce 08-Feb-2018 Damjan Marion <damarion@cisco.com>

virtio: reset vnet header on tx

Change-Id: Ib04a8787038fb536470a04d99fdc165102edfb5a
Signed-off-by: Damjan Marion <damarion@cisco.com>

2ae5135e 06-Feb-2018 Haiyang Tan <haiyang.tan.dev@gmail.com>

vhostuser: Fix vhostuser file descriptor leak

In the case that vhostuser server accepted more than one client connection,
'vui->clib_file_index' will be overwritten directly without release the possible
existed resource, so file descriptor leak occurs

Change-Id: I89d08133dae31a12a815df2631334dbf0aefeb1e
Signed-off-by: Haiyang Tan <haiyang.tan.dev@gmail.com>

d3cb7ba2 07-Feb-2018 Nitin Saxena <nitin.saxena@cavium.com>

vhost: Added ARMV8 NEON version of function map_guest_mem()

The NEON implementation searches particular address in
VHOST_MEMORY_MAX_NREGIONS regions. Searching two regions at a

Change-Id: Icc3c6746bc98e3a1fa71424e51b64f62efbfdc74
Signed-off-by: Nitin Saxena <nitin.saxena@cavium.com>

ceab7882 19-Jan-2018 Damjan Marion <damarion@cisco.com>

vlib: epoll on worker threads

This patch teaches worer threads to sleep and to be waken up by
kernel if there is activity on file desctiptors assigned to that thread.

It also adds counters to epoll file descriptors and new
debug cli 'show unix file'.

Change-Id: Iaf67869f4aa88ff5b0a08982e1c08474013107c4
Signed-off-by: Damjan Marion <damarion@cisco.com>

7b0933a9 20-Jan-2018 Haiyang Tan <haiyang.tan.dev@gmail.com>

vhost_user: code cleanup

1. Replace the magic number '-1' with MAP_FAILED
2. On x86 platform, QEMU uses vhostuser required the memory back-end is file based,
the file could be tmpfs(4K page size) or hugetlbfs(2M or 1G page size)

Change-Id: If1818cb6833728d641f68e4d4a3bc645e70f2ee6
Signed-off-by: Haiyang Tan <haiyang.tan.dev@gmail.com>

28cf3b7d 15-Jan-2018 Billy McFall <bmcfall@redhat.com>

VPP-899: Run VPP under SELinux

Add an SELinux profile such that VPP can run under SELinux on RPM based
platforms. The SELinux Policy is currently only implemented for RPM
packages, specifically, Fedora, CentOS and RHEL. Doxygen User
Documentation has been included (selinux_doc.md). Once some discussion
on file locations has completed (see vpp-devlist), updates to the Debug
CLI documentation will also need to be updated.

Additional changes:
Patch Set 2:
- Rework selinux_doc.md such that each line is only 80 characters
instead of each sentence on a line. Made additonal minor chnages
to the text.
- Update vHost Debug CLI documentation to reflex new socket location.
Cleaned up some text from when I originally wrote it, to better
reflex proper use.
- Update exec Debug CLI documentation to be more inline with suggested
helptext, added text regarding recommended script file location.
- For Debian builds, create the /var/log/vpp/ directory. I don't use
Debian very much, so please pay extra attention to
build-data/platforms.mk and build-root/deb/debian/.gitignore.
- Per discussion on VPP call, changed the default log location to
- Changed the socket location for vHost in AutoConfig to
Patch Set 3:
- Update selinux_doc.md based on comments.

Change-Id: I400520dc33f1ca51012d09ef8fe5a7b7b96c631e
Signed-off-by: Billy McFall <bmcfall@redhat.com>

9d420871 12-Oct-2017 Ole Troan <ot@cisco.com>

VPPAPIGEN: vppapigen replacement in Python PLY.

This is a version of the VPP API generator in Python PLY. It supports
the existing language, and has a plugin architecture for generators.
Currently C and JSON are supported.

- vl_api_version to option version = "major.minor.patch"
- enum support
- Added error checking and reporting
- import support (removed the C pre-processor)
- services (tying request/reply together)

option version = "1.0.0";

enum colours {
BLUE = 50,
define foo {
vl_api_colours_t colours;

service {
rpc foo returns foo_reply;
rpc foo_dump returns stream foo_details;
rpc want_stats returns want_stats_reply
events ip4_counters, ip6_counters;

Future planned features:
- unions
- bool, text
- array support (including length)
- proto3 output plugin
- Refactor C/C++ generator as a plugin
- Refactor Java generator as a plugin

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

352ecd95 20-Jan-2018 Haiyang Tan <haiyang.tan.dev@gmail.com>

vhost_user: 'nregions' saves the actual number of mapped guest physical address area

This patch fixed the VMA leak that if mapping one of guest physical address area get failed.

Change-Id: I07b0b9a932209561d6ff2b2dd08a111ea5db2209
Signed-off-by: Haiyang Tan <haiyang.tan.dev@gmail.com>

c58408c0 18-Jan-2018 Damjan Marion <damarion@cisco.com>

vlib: add vlib_buffer_alloc_to_ring API

Change-Id: I4e2804754b443f5f41fb25eed8334908c4a70f84
Signed-off-by: Damjan Marion <damarion@cisco.com>

a624dbe7 09-Jan-2018 Steven <sluong@cisco.com>

tapv2: deleting tap interface may leak buffers (VPP-1124)

Buffers may be allocated for indirect descriptors by tx thread and
they are freed when tx thread is invoked in the next invocation.
This is to allow the recipient (kernel) to have a chance to process
them. But if the tap interface is deleted, the tx thread may not yet
be called to clean up the indirect descriptors' buffers. In that case,
we need to remove them without waiting for the tx thread to be called.
Failure to do so may cause buffers leak when the tap interface is deleted.

For the RX ring, leakage also exists for vring->buffers when the interface
is removed.

Change-Id: I3df313a0e60334776b19daf51a9f5bf20dfdc489
Signed-off-by: Steven <sluong@cisco.com>
(cherry picked from commit d8a998e74b815dd3725dfcd80080e4e540940236)

6c4dae27 09-Jan-2018 Florin Coras <fcoras@cisco.com>

api: remove transport specific code from handlers

This does not update api client code. In other words, if the client
assumes the transport is shmem based, this patch does not change that.
Furthermore, code that checks queue size, for tail dropping, is not

Done for the following apis:
- acl
- gtpu
- memif
- nat
- pppoe
- bfd
- bier
- tapv2
- vhost user
- dhcp
- flow
- geneve
- ip
- punt
- ipsec/ipsec-gre
- l2
- l2tp
- lisp-cp/one-cp
- lisp-gpe
- map
- mpls
- policer
- session
- span
- udp
- tap
- vxlan/vxlan-gpe
- interface
- api/api.c
- oam_api.c
- stats.c

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

e86a8edd 05-Jan-2018 Florin Coras <fcoras@cisco.com>

api: refactor vlibmemory

- separate client/server code for both memory and socket apis
- separate memory api code from generic vlib api code
- move unix_shared_memory_fifo to svm and rename to svm_fifo_t
- overall declutter

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

73e7f427 14-Dec-2017 Milan Lenco <milan.lenco@pantheon.tech>

tap_v2: include host-side parameters in the dump binary API

Change-Id: I097a738b96a304621520f1842dcac7dbf61a8e3f
Signed-off-by: Milan Lenco <milan.lenco@pantheon.tech>

2df39094 04-Dec-2017 Damjan Marion <damarion@cisco.com>

tapv2: multiple improvements

- change interface naming scheme
- rework netlink code
- add option to set link address, namespace

Change-Id: Icf667babb3077a07617b0b87c45c957e345cb4d1
Signed-off-by: Damjan Marion <damarion@cisco.com>

c99b4cd1 04-Dec-2017 Damjan Marion <damarion@cisco.com>

tap_v2: move code to vnet/devices/tap

virtio backend stays in vnet/devices/virtio

Change-Id: Idbf04f1c645a809ed408670ba330662859fe9309
Signed-off-by: Damjan Marion <damarion@cisco.com>

37eba0db 03-Dec-2017 Steven <sluong@cisco.com>

tap_v2: coverity strikes, again!

fd is not close when IOCTL encounters an error which causes resource
leak. The fix is to initialize fd to -1. At return, close fd if
it has a valid value.

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

7074961b 04-Dec-2017 Damjan Marion <damarion@cisco.com>

virtio: zero data structs in virtio_vring_init

Change-Id: I877cf1abb062a90f428c3ec0cab5c6e9dad0ca82
Signed-off-by: Damjan Marion <damarion@cisco.com>

91c6ef7c 01-Dec-2017 Damjan Marion <damarion@cisco.com>

tap_v2: multiple improvements

- add support for assigning tap interface to the bridge
- add support for assigning tap interface host side ip4 and ip6 address
- host namespace can be specified as PID (pid:12345) or full path to file
- automatically bring linux interface up

Change-Id: I1cf7c3cad9a740e430cc1b9c2bb0aad0ba4cc8d8
Signed-off-by: Damjan Marion <damarion@cisco.com>

f953dfc8 01-Dec-2017 Steven <sluong@cisco.com>

virtio: fix coverity warnings

Fix 3 coverity warnings
1. api_format.c: init net_ns = 0 and remove its corresponding vec_add and
2. netlink.c (reported in tap.c before the code was removed): resource leaked
due to fd is not close
3. tap.c: subtract 1 for size when calling strncpy to accommodate the
terminated NULL character

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

17fdae73 30-Nov-2017 Damjan Marion <damarion@cisco.com>

tap_v2: move netlink code to separate file

Change-Id: Ib091875f77ea99421aec0947fd17833c4e6d2ec2
Signed-off-by: Damjan Marion <damarion@cisco.com>

8389fb91 13-Oct-2017 Damjan Marion <damarion@cisco.com>

virtio: fast TAP interfaces with vhost-net backend

Change-Id: Ided667356d5c6fb9648eb34685aabd6b16a598b7
Signed-off-by: Damjan Marion <damarion@cisco.com>
Signed-off-by: Steven Luong <sluong@cisco.com>

d7727530 10-Jun-2017 Steven <sluong@cisco.com>

vhost: crash under heavy traffic condition due to memory corruption (VPP-1016)

With heavy traffic, tx code path may crash due to memory corruption

Thread 5 "vpp_wk_2" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fff3995c700 (LWP 2505)]
0x00007ffff73675e8 in vhost_user_if_input (vm=0x7fffb5f5bf9c,
vum=0x7ffff7882a40 <vhost_user_main>, vui=0x7fffb65570c4, qid=0,
node=0x7fffb6577dac, mode=VNET_HW_INTERFACE_RX_MODE_POLLING)
at /home/sluong/vpp-master/vpp/build-data/../src/vnet/devices/virtio/vhost-user.c:1610
1610 bi_current = (vum->cpus[thread_index].rx_buffers)
(gdb) p vum->cpus[thread_index].rx_buffers_len
$2 = 793212607

Apparently, some code accidentally wrote the bad value in rx_buffers_len.
rx_buffers_len should never be greater than 1024 since that is how many buffers
we request each time.

After debugging many hours, I discovered that the memory corruption happens
in the tx code path right here on line 2176.

vhost_copy_t *cpy = &vum->cpus[thread_index].copy[copy_len];
cpy->len = bytes_left;
cpy->len = (cpy->len > buffer_len) ? buffer_len : cpy->len;
cpy->dst = buffer_map_addr;
cpy->src = (uword) vlib_buffer_get_current (current_b0) +
current_b0->current_length - bytes_left;

(gdb) p cpy
$3 = (vhost_copy_t *) 0x7fffb554077c
(gdb) p copy_len
$4 = 1025
(gdb) p &vum->cpus[3].rx_buffers_len
$8 = (u32 *) 0x7fffb5540784

copy_len is picking up the index entry 1024 before it was incremented. copy array has only
1024 members (0 - 1023 are valid).
The assignment here in cpy surely causes memory corruption. It is only discovered later
when the memory location that it corrupted is used.

The condition for the crash is to transmit jumbo frames under heavy volume. Since ring
size is 1024, with one packet taking up one index for frame size (less 2048), it does
not cause overflow. With jumbo frames, it requires multiple indices for one packet,
it can cause the overflow under heavy traffic.

The fix is to do copy out when we have 1000 entries in the array to avoid

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

0d056e5e 28-Sep-2017 Dave Barach <dave@barachs.net>

vppapigen: support per-file (major,minor,patch) version stamps

Add one of these statements to foo.api:

vl_api_version 1.2.3

to generate a version tuple stanza in foo.api.h:

/****** Version tuple *****/

vl_api_version_tuple(foo, 1, 2, 3)

Change-Id: Ic514439e4677999daa8463a94f948f76b132ff15
Signed-off-by: Dave Barach <dave@barachs.net>
Signed-off-by: Ole Troan <ot@cisco.com>

56a86842 05-Oct-2017 Pierre Pfister <ppfister@cisco.com>

fix buffer allocation for sparse jumbo frames in vhost

A bug was reported where a jumbo packet would stay in vhost
queue forever or until a large enough number of other packets
arrived in the queue too.

This is due to a bug in vhost input node buffer allocation.

The fix is to make sure that vhost always allocates at least
enough buffers for one single big packet. '40' is used to
account for 65kB frames.

Change-Id: I1d293028854165083e30cd798fab9d4140230b78
Signed-off-by: Pierre Pfister <ppfister@cisco.com>
(cherry picked from commit 67700d41169ac37d21c400949a316750eabad969)

d3c008d1 02-Oct-2017 Christophe Fontaine <christophe.fontaine@enea.com>

[aarch64] Fixes CLI crashes on dpaa2 platform.

- always use 'va_args' as pointer in all format_* functions
- u32 for all 'indent' params as it's declaration was inconsistent

Change-Id: Ic5799309a6b104c9b50fec309cba789c8da99e79
Signed-off-by: Christophe Fontaine <christophe.fontaine@enea.com>

35df2e1d 20-Sep-2017 Yoann Desmouceaux <ydesmouc@cisco.com>

vhost-user: fix link-up status

When changing the admin state of a vhost-user interface, do not put it
in link-up mode if the interface is not actually ready.

Change-Id: Idbc631a7126efa79d199909f9e7656d21bd412ca
Signed-off-by: Yoann Desmouceaux <ydesmouc@cisco.com>

56dd5438 08-Sep-2017 Damjan Marion <damarion@cisco.com>

move unix_file_* code to vppinfra

This will allow us to use this code in client libraries without vlib.

Change-Id: I8557b752496841ba588aa36b6082cbe2cd1867fe
Signed-off-by: Damjan Marion <damarion@cisco.com>

49a04b95 29-Jul-2017 Steven <sluong@cisco.com>

vhost: Disallow interrupt mode config if driver opts out interrupt support

According to the spec, supporting interrupt mode from the driver is optional,
not a must. When interrupt mode is configured on the interface, we should
check to make sure that the driver didn't opt out for the kickfd support and
reject the configuration if it did.

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

97878890 29-Aug-2017 Steven <sluong@cisco.com>

vhost: Cache qsz_mask instead of qsz in vhost_user_vring_t

In the data path, we grab qsz from vhost_user_vring_t to compute
qsz_mask and store it in a stack variable to use on many occasions.
We never use qsz for any meaningful purpose. It is more useful to
cache qsz_mask in vhost_user_vring_t to avoid the needless computation
in the data path.

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

4ba75f54 28-Aug-2017 Steven <sluong@cisco.com>

vhost: Remove operation mode in the API

create/delete/modify vhost_user APIs no longer support the operation mode
(polling/interrupt/adaptive). They are now done via the generic interface.

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

07145416 18-Aug-2017 Neale Ranns <nranns@cisco.com>

Use correct msg ID in the sw-interface-event from TAP and VHOST

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

a07bd708 07-Aug-2017 Neale Ranns <neale.ranns@cisco.com>

Dedicated SW Interface Event

Change-Id: I06a10a4291e61aec3f1396d2514ed6fe3901897a
Signed-off-by: Neale Ranns <neale.ranns@cisco.com>
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>

2ee2d57c 21-Jul-2017 Steven <sluong@cisco.com>

vhost: debug vhost-user command needs better error checking on the syntax (VPP-916)

The syntax for debug vhost-user is
debug vhost-user <on | off>

However, currently the code does not reject the invalid command such as below
debug vhost-user
debug vhost-user on blah
debug vhost-user off blah

The fix is to enforece the correct syntax and reject the command when invalid
option is entered.

Change-Id: I1a04ae8ddb6dd299aa6d15b043362964e685ddde
Signed-off-by: Steven <sluong@cisco.com>
(cherry picked from commit 6a4de2764d9e6cadf36af824dddb3f33c2d6dc7e)

388e51aa 01-Jun-2017 Steven <sluong@cisco.com>

vhost: add debug vhost-user on | off CLI

Add runtime debug vhost-user on | off CLI to facilitate troubleshooting.
This feature is needed to avoid recompiling the code to debug vhost issues.
The debugging messages should not be on the data path to avoid performance

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

f3b53643 01-May-2017 Steven <sluong@cisco.com>

vhost: migrate to use device infra for worker thread assignment, rx-mode.
and add adaptive mode support to receive queue

- Migrate vhost to use device infra which does the interface/queue to worker
thread assignment.

- Retire vhost thread CLI and corresponding code which assigns interface/queue
to worker thread. set interface placement should be used instead to customize
the interface/queue to worker thread assignment.

- Retire vhost interrupt/polling option when creating vhost-user interface.
Instead, set interface rx-mode should be used.

- Add code in vnet_device_input_unassign_thread to change the node state
to interrupt if the last polling interface has left the worker thread for the
device of the corresponding interface/queue.

- Add adaptive mode support. The node state is set to interrupt initially.
When the scheduler detects a burst of traffic, it switches the input node to
polling. Then we inform the device that we don't need interrupt notification.
When the traffic subsides, the scheduler switches the input node back to
interrupt. Then we immediately tell the driver that we want interrupt
notification again.

- Remove some duplicate code in vlib/main.c

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

95827e43 19-May-2017 Steven <sluong@cisco.com>

vhost: buffers leak and interface disable upon vring descriptor out of mmap

When processing a vring descriptor which is outside of mmap, we disable
the interface and spit a message to shut/no shut the interface. This is
not practical as application using vhost cannot constantly checking the
logs and do the recovery. The proposed fix is to log an error, like
other errors that we encounter.

The other bug is buffer leak in the function rewind. At the end of the
while loop when b_current != b_head, we still have to give back 1 more
buffer or add 1 to rx_buffers_len.

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

025d4151 17-May-2017 Steven <sluong@cisco.com>

vhost: bad packet assembled from descriptor chaining

When the descriptor is chained via multiple parts, vhost is supposed
to reassemble the different parts to form a packet prior to passing
the packet to the next input node. However, bad packet was seen, having
bad ethertype, source, and destination mac addresses.

The problem was due to the destination pointer not being incremented as
each chain is processed. THe result was the first chain is copied to the
beginning of the buffer, the next chain is copied, then the last chain
is also copied to the beginning of the buffer. As a result, the ethertype,
source and destination mac, etc, are being overwritten by the very last
chain of the descriptor.

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

7bee80c8 26-Apr-2017 Damjan Marion <damarion@cisco.com>

Fix remaining 32-bit compile issues

Change-Id: I9664214652229b663c3e3ba7406b4ede96bfb123
Signed-off-by: Damjan Marion <damarion@cisco.com>

5445f5fd 25-Apr-2017 Steven <sluong@cisco.com>

vhost: Disallow duplicate path name for vhost interface

When creating or modifying a vhost interface, verify if the path name
already existed and reject the command.

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

bed5489a 20-Apr-2017 Pierre Pfister <ppfister@cisco.com>

vhost: Fix mmap size calculation

I had a bug where a requested size of 1G was resulting in
an aligned size of '1G + 2M', resulting in an OOM error.

Previous code was adding one huge page size
when memory is already aligned.

Change-Id: Idd3aa0e9b893fb3efccba6ae1c7161e26d3f9456
Signed-off-by: Pierre Pfister <ppfister@cisco.com>

41748864 25-Apr-2017 Steven <sluong@cisco.com>

vhost: core dump on quit with worker threads

Patch 6347 removed the socket file when the interface is deleted and
when VPP process is exitting. The CLI for deleting the interface has
builtin vlib_worker_thread_barrier_sync to prevent the worker
threads from running. Unfortunately, the CLI quit does not have the
builtin vlib_worker_thread_barrier_sync. As a result, it may cause the
worker thread to crash.

The fix is to add the vlib_worker_thread_barrier_sync in vhost_user_exit.

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

11b8dbf7 24-Apr-2017 Dave Barach <dave@barachs.net>

"autoreply" flag: autogenerate standard xxx_reply_t messages

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

53129423 21-Apr-2017 Steven <sluong@cisco.com>

vhost: remove socket linked file when deleting vhost interface

- Unlink the file created for the socket when deleting vhost interface
if we are the server mode.
- Remove all vhost interfaces when VPP process is exitting.

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

e4dcba80 04-Apr-2017 Steven <sluong@cisco.com>

vhost: interrupt mode enhancements

- Add cpu index to the vring structure for quick lookup
- Reduce the code that needs to be protected by
- Set minimum timer no less than 1 ms

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

586afd76 05-Apr-2017 Damjan Marion <damarion@cisco.com>

Use thread local storage for thread index

This patch deprecates stack-based thread identification,
Also removes requirement that thread stacks are adjacent.

Finally, possibly annoying for some folks, it renames
all occurences of cpu_index and cpu_number with thread
index. Using word "cpu" is misleading here as thread can
be migrated ti different CPU, and also it is not related
to linux cpu index.

Change-Id: I68cdaf661e701d2336fc953dcb9978d10a70f7c1
Signed-off-by: Damjan Marion <damarion@cisco.com>

0d150bb1 22-Mar-2017 Steven <sluong@cisco.com>

vhost: vhost-user component may become unusable with too many open files (VPP-668)

When the number of open files is reached in the system, vhost may
encounter a failure in socket call and return from vhost-user-process.
The return terminates all attempts of incoming socket connections
in the future, even if the condition is reconciled.

The fix is to not return from vhost-user-process, record the error in
the interface, spit out the error, and retry the connection every 3 seconds.

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

13ad1f02 26-Mar-2017 Dave Barach <dave@barachs.net>

Rename "show interfaces" -> "show interface"

To line up with "show interface placement," recently added. Otherwise,
"show int" refers only to "show interface placement," which tends to
annoy the cash customers...

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

7312cc77 16-Mar-2017 Steven <sluong@cisco.com>

vhost: support interrupt mode

vhost currently supports only polling mode. This patch is to add
interrupt mode. When the interface is configured for interrupt
mode, our input node does not get called unless there is a packet
in the vring.

If a particular CPU has one interface configured for polling mode
and another in interrupt, the input node is set to polling for
that CPU.

This diffs also includes two crashes in vlib's dispatch_node. One is
included in https://gerrit.fd.io/r/#/c/5516. The other crash is in
the ASSERT. The ASSERT can become true when the caller of
dispatch_node is in a loop. The first call converted the node
to polling. The second call thereafter will hit the ASSERT.

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

f6dae05b 10-Mar-2017 Steven <sluong@cisco.com>

vhost: wrong value return for VHOST_USER_VRING_GET_BASE

When the VM is migrated, the driver sends VHOST_USER_VRING_GET_BASE
message to the device to get the vring offset. The device is
supposed to shut down the vring, and return the current vring offset.
What the code did was to shutdown the vring, initialize the vring,
and return 0 to the driver.

The fix is to first store last_avail_idx in the message and then close
the vring.

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

80f54e20 09-Mar-2017 Dave Barach <dave@barachs.net>

vlib_mains == 0 special cases be gone

Clean up spurious binary API client link dependency on libvlib.so,
which managed to hide behind vlib_mains == 0 checks reached by
VLIB_xxx_FUNCTION macros.

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

a1a0901d 08-Mar-2017 Steven <sluong@cisco.com>

vhost: binary API changes for interrupt mode

Add operation_mode for create_vhost_user_if, modify_vhost_user_if,
and sw_interface_vhost_user_details. Only polling mode is supported
for these APIs. Other mode is rejected and gets

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

35af9e50 05-Mar-2017 Damjan Marion <damarion@cisco.com>

features: take device-input buffer advance value directly

Change-Id: Ifac7d9134d03d79164ce6f06ae9413279bbaadb3
Signed-off-by: Damjan Marion <damarion@cisco.com>

a1a093d4 02-Mar-2017 Dave Barach <dave@barachs.net>

Clean up binary api message handler registration issues

Removed a fair number of "BUG" message handlers, due to conflicts with
actual message handlers in api_format.c. Vpp itself had no business
receiving certain messages, up to the point where we started building
in relevant code from vpp_api_test.

Eliminated all but one duplicate registration complaint. That one
needs attention from the vxlan team since the duplicated handlers have

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

c3a814be 28-Feb-2017 Damjan Marion <damarion@cisco.com>

dpdk: be a plugin

Change-Id: I238258cdeb77035adc5e88903d824593d0a1da90
Signed-off-by: Damjan Marion <damarion@cisco.com>

b3bb1010 28-Feb-2017 Damjan Marion <damarion@cisco.com>

devices: vnet_get_aggregate_rx_packets should not be dpdk specific

Change-Id: I1152db4b7d1602653d7d8b2c6cb28cf5c526c4ca
Signed-off-by: Damjan Marion <damarion@cisco.com>

a9a20e7f 15-Feb-2017 Billy McFall <bmcfall@redhat.com>

VPP-635: CLI Memory leak with invalid parameter

In the CLI parsing, below is a common pattern:
/* Get a line of input. */
if (!unformat_user (input, unformat_line_input, line_input))
return 0;

while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
if (unformat (line_input, "x"))
x = 1;
return clib_error_return (0, "unknown input `%U'",
format_unformat_error, line_input);
unformat_free (line_input);

The 'else' returns if an unknown string is encountered. There a memory
leak because the 'unformat_free(line_input)' is not called. There is a
large number of instances of this pattern.

Replaced the previous pattern with:
/* Get a line of input. */
if (!unformat_user (input, unformat_line_input, line_input))
return 0;

while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
if (unformat (line_input, "x"))
x = 1;
error = clib_error_return (0, "unknown input `%U'",
format_unformat_error, line_input);
goto done:

/* ...Remaining code... */

unformat_free (line_input);
return error;

In multiple files, 'unformat_free (line_input);' was never called, so
there was a memory leak whether an invalid string was entered or not.

Also, there were multiple instance where:
error = clib_error_return (0, "unknown input `%U'",
format_unformat_error, line_input);
used 'input' as the last parameter instead of 'line_input'. The result
is that output did not contain the substring in error, instead just an
empty string. Fixed all of those as well.

There are a lot of file, and very mind numbing work, so tried to keep
it to a pattern to avoid mistakes.

Change-Id: I8902f0c32a47dd7fb3bb3471a89818571702f1d2
Signed-off-by: Billy McFall <bmcfall@redhat.com>
Signed-off-by: Dave Barach <dave@barachs.net>

0578cd1c 13-Feb-2017 Marek Gradzki <mgradzki@cisco.com>

Fix is_server flag in vhost dump (VPP-562)

Change-Id: I5b308eb39ae770d58d1498d7fafa49b236b3f534
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>

0b49e2be 09-Feb-2017 Damjan Marion <damarion@cisco.com>

vhost-user: fix crash when descriptor points to unknown region

This happens only on when compiled for older microarchitectures,
where BSF insutruction is used instead of TZCNT. BSF provides
undefined result if operand is 0.

Change-Id: I7a13350786a533428168595097ef01a560fde53b
Signed-off-by: Damjan Marion <damarion@cisco.com>

62411e7d 03-Feb-2017 Steven <sluong@cisco.com>

vhost-user: fix missing speculative enqueue unwind

Running trex in a VM with a bad config, trex sent a bogus pack from
the VM to the Virtual interface. It caused a crash.

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

8f544964 18-Jan-2017 Dave Barach <dave@barachs.net>

Fix coverity warnings, VPP-608

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

d8e47876 17-Jan-2017 Wojciech Dec <wdec@cisco.com>

Fix crash on deleting activated vhost-user - VPP-603

Vhost-user pool getting freed prematurely

Change-Id: I952821ec85efa68923d09a643c70b6b309ea2574
Signed-off-by: Wojciech Dec <wdec@cisco.com>

553a4119 10-Jan-2017 Ole Troan <ot@cisco.com>

VPP-585: vhost-user interface deletion leaks memory.

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

0c3d467d 03-Jan-2017 Andrew Yourtchenko <ayourtch@gmail.com>

VPP-574: fix VPP hang during security group configuration on a suspended VM

The unix connect() in vhost-user driver in VPP is blocking, and
a non-expedient accept() on the other side causes the entire VPP to hang.

Solution: set the nonblocking flag for the socket fd before calling
connect(), and set the socket back to blocking after the accept() succeeds.

Change-Id: Ia5ee782037eeffabdad71db8241f476a048a4f6f
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>

3cd9eed6 03-Jan-2017 Wojciech Dec <wdec@cisco.com>

Fix crash on null vhost-user socket - VPP-573

Fix for VPP-573.

Change-Id: If7d9690901efebf62fdf28219097153d98c79c0c
Signed-off-by: Wojciech Dec <wdec@cisco.com>

7cd468a3 19-Dec-2016 Damjan Marion <damarion@cisco.com>

Reorganize source tree to use single autotools instance

Change-Id: I7b51f88292e057c6443b12224486f2d0c9f8ae23
Signed-off-by: Damjan Marion <damarion@cisco.com>