393 Commits

Author SHA1 Message Date
Ole Troan
e6749e4f6b Python API: Fix mistaken removal of '_' in field names.
Change-Id: I1e39970bc6ded9e6da64385b2289321ba43bebfd
Signed-off-by: Ole Troan <ot@cisco.com>
2016-04-28 11:41:21 +00:00
Chris Luke
194ebc58b6 Track number of ethernet vlans in a frame
Adds flags to the packet buffer to track the number of VLANs in
the current Ethernet frame. We use two bits to signify 0, 1 or
2 VLANs. The value 3 signififies an unknown quantity of VLANs,
which includes "three or more" which is not widely supported.
We place the bits in the vlib_buffer section; that is not the
opaque section, so that all subordinate nodes can use it.

For background, see the discussion thread at
https://lists.fd.io/pipermail/vpp-dev/2016-March/000354.html

The helper macro ethernet_buffer_header_size(buffer) uses
these bits stored in "buffer" to calculate the Ethernet header
size.

The macro ethernet_buffer_set_vlan_count(buffer, count) sets the
appropriate bit values based on the number in "count".

By current frame we are referring to the case where a packet
that arrives from the wire is carrying an encapsulated Ethernet
packet. Once decapsulated that inner packet becomes the current
frame.

There are two places where this value is set; For most Ethernet
frames this will be in the "ethernet-input" node when that node
parses the Ethernet header. The second place is whenever
vnet_update_l2_len() is used to update the layer 2 opaque data.
Typically this function is used by nodes just before they send
a packet into l2-input.

These bits are zeroed in vlib_buffer_init_for_free_list()
meaning that wherever the buffer comes from they have a reasonable
value (eg, if ip4/ip6 generates the packet.)

Primarily this VLAN counter is used by nodes below "ethernet-
input" and "l2-input" to determine where the start of the
current Ethernet header is. There is opaque data set by
"ethernet-input" storing the offset of the current Ethernet
header but, since this is opaque, it's not usable by downstream
nodes. Previously several nodes have made assumptions regarding
the location of the Ethernet header, including that it is always
at the start of the packet buffer (incorrect when we have
encapsulated packets) or that it is exactly
sizeof(ethernet_header_t) away (incorrect when we have VLAN tags.)

One notable case where this functionality is required is in
ip6_neighbor when it generates a response to a received neighbor
soliciation request; it reuses the incoming Ethernet header
in-situ and thus needs to reliably know where that header begins.

Also, at the suggestion of Dave Barach, this patch removes
definition of HGSHM bits in the buffer flags since they are
unused and unlikely to ever be.

Change-Id: I00e4b9ced5ef814a776020c395d1774aba6185b3
Signed-off-by: Chris Luke <chrisy@flirble.org>
2016-04-28 11:37:30 +00:00
Thomas F Herbert
473bf23be8 Update Makefile to add debuginfo RPMs for gdb
Change-Id: I29d8cc839565999e2fabe09d29c40e09aa1ea784
Signed-off-by: Thomas F Herbert <therbert@redhat.com>
2016-04-28 10:59:26 +00:00
Florin Coras
81d381c35b Fix Bug VPP-22
Change-Id: Iaac12e63e4a5ee026276638afd5d5ba3b9503a40
Signed-off-by: Florin Coras <fcoras@cisco.com>
2016-04-28 10:58:12 +00:00
Chris Luke
1c9f6ce744 Increase the trace bufffer size
In some cases, the packet header size with IPv6 and a tunnel can
overflow the buffer used for packet tracing. This patch increases
this buffer a little to avoid truncated header information in the
trace.

Change-Id: Ib800e3b908ebe7e80bae4428a94541a803b40b8c
Signed-off-by: Chris Luke <chrisy@flirble.org>
2016-04-27 22:28:50 +00:00
John Lo
acc22d7c45 ENIC driver updates for DPDK 16.04 and 2.2.0
Change-Id: I896925ea2208d318d353d486707b97f295c78426
Signed-off-by: John Lo <loj@cisco.com>
2016-04-27 21:11:12 +00:00
Dave Barach
2a00d171a0 Remove historical artifacts from vnet/buffer.h
Change-Id: I7f50074a4ed5b62bef4584190eb849d90e90e592
Signed-off-by: Dave Barach <dave@barachs.net>
2016-04-27 18:35:30 +00:00
Ole Troan
ae65f5b6a8 VPP-18: Creating tap interface through API broken. Fixed and removed duplicate code by CLI to create TAPs.
Change-Id: Ib6b30e3dc20ddad7c78d2038955df7af020f0671
Signed-off-by: Ole Troan <ot@cisco.com>
2016-04-27 18:23:40 +00:00
John Lo
644ec43b5e Fix pcap trace capture crash for packets > 512 bytes
Change-Id: I9397ac756290953a14e3adfe5b7c980ecf92bac2
Signed-off-by: John Lo <loj@cisco.com>
2016-04-27 09:56:36 -04:00
Chris Luke
7afda3aee5 CLI output pager
Buffers output from CLI commands as it arrives and allows the terminal to
view this buffer one page at a time.

- View of the buffer is moved with space/enter/up/down/page-up/page-down/
  home/end.
- At the end of the CLI command if less than one page of output was
  generated then the pager is not engaged.
- 'q' to quit the pager, or scroll off the bottom.
- Pager prompt displays the current view aperture line numbers and total
  number of lines buffered.
- Can be disabled at runtime with "no-cli-pager" in the unix configuration.
- The number of lines that will be stored in the buffer is limited to
  prevent excessive memory use; this limit is configurable with
  "cli-pager-buffer-limit" in the unix configuration.
- Both these options can also be set in the console with "set terminal
  pager [on|off] [limit <lines>]".

Limitations:
- Does not yet implement a search function.
- Whilst the terminal size is detected and tracked, changing the terminal
  size when the pager is being used will not cause a redraw of the page.
- Lines that wrap the right most column are not yet handled gracefully.

Change-Id: I69548c1464eff79c53e122668f25758266daf1c2
Signed-off-by: Chris Luke <chrisy@flirble.org>
2016-04-27 13:32:49 +00:00
Chris Luke
6b90fe3231 Add "history" CLI command
- Remove the '?' mechanism that previously only worked on telnet
  connections in favor of a more shell-like "history" command.
  The '?' approach had strange side-effects, like executing what
  was already in the command buffer.

Change-Id: I043086b7f400c66c332a32dbd06ef580ecb18ee8
Signed-off-by: Chris Luke <chrisy@flirble.org>
2016-04-27 13:32:48 +00:00
Chris Luke
572d81213a Add a (small) banner to the Debug and Telnet CLI
_______    _        _   _____  ___
 __/ __/ _ \  (_)__    | | / / _ \/ _ \
 _/ _// // / / / _ \   | |/ / ___/ ___/
 /_/ /____(_)_/\___/   |___/_/  /_/

- For terminals that look like they support ANSI output the FD.io
  part is colored red.
- This is only shown at the start of a debug CLI or a telnet CLI
  session.
- This banner can be disabled with "cli-no-banner" in the "unix"
  section of the startup config file.

Change-Id: I085b3780dcca3eae546859dbde6c1c34c8258b9f
Signed-off-by: Chris Luke <chrisy@flirble.org>
2016-04-27 13:32:48 +00:00
Chris Luke
0aca5eb1b8 Debug/Telnet CLI enhancements
A fairly comprehensive re-work of the built-in debug and telnet CLI
to add various command line editing features and to add command history
to the debug CLI.

This may seem like a large change but a good amount of it is merely
reworking the existing CLI code (which changed its indent level).

The features this patch enables include:

- Enable history in the debug CLI.
- Put both stdin and telnet connections in char-by-char mode.
- Echo from the server, not the client, for more control.
- Add a mostly no-op but fairly complete Telnet protocol processor.
- Perform control code parsing on the input byte stream to match strings
  of both control codes and ANSI/VT100 escape sequences.
- Up/down keys scroll through the history (like ^P/^N).
- Do CRLF output cooking (\n -> \r\n) for connections that need it.
- Left/right cursor movements, insert/erase at cursor.
- Home/end cursor jumps.
- Jump left/right word at a time (Ctrl-left/right).
- Negotiate the terminal type from Telnet clients. (well, the code doesn’t
  really negotiate, it demands it, but the client is led to believe it
  was a negotiation)
- Read terminal type from TERM variable for the local debug CLI.
- Delete from cursor to end of line (^K). Delete char-right (^D/Del).
- Clear screen (^L) and repaint prompt/current command (on non-ANSI
  terminals it just newlines and repaints the line).

Change-Id: Id274b56ccfd4cc8c19ddc0f478890f21f284262a
Signed-off-by: Chris Luke <chrisy@flirble.org>
2016-04-27 13:32:48 +00:00
Maros Marsalek
b3656ea0b8 HONEYCOMB-10: Add missing context parameter to *details structs
Some of the *details structures defined in vpe.api did
not have the context parameter that is used for request<->reply
matching. Without the context, it is difficult for upper
layers (users of vpp binary apis) to identify which reply
or details message belongs to which request

Tested manually using vat

Change-Id: I5fda54a891b68349f80c87fae06009791a028147
Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
2016-04-27 12:51:55 +00:00
Shesha Sreenivasamurthy
0666dc47d9 Live VM migration support for vhost-user
Change-Id: I79bef6dc94b3ad688564a409d14d63ca3125a305
Signed-off-by: Shesha Sreenivasamurthy <shesha@cisco.com>
2016-04-27 09:14:06 +00:00
Damjan Marion
6b1d7c55d6 Make automake silent rules default
Change-Id: Ia504ccdac1deac20f20cf7fb76f78b2d8c505474
Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-04-26 19:36:59 +00:00
Damjan Marion
fa6935594d Fix clang warnings in api code
Change-Id: I7a4bc4678fea723c35bbeac1b893c5c52235aa67
Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-04-26 19:35:12 +00:00
Mohsin Kazmi
f2ba9aadbb MTU: set interface mtu tap
This patch introduces standard command line 'set interface mtu' for setting the MTU
for tap devices. It allows user to set the mtu in between 68 to 65535 bytes
aligned to what linux kernel supports for tun/tap devices.

Right now tapcli set the same MTU size for each tap interface. But it should be set
and configure to per interface rather than per tap instance.

Change-Id: I81b7f3ad95ca56d585907ff8f51d9935a428e01b
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
2016-04-26 16:43:30 +00:00
Damjan Marion
e39a7b8347 Fix compile errors reported by clang
For using clang as a compiler it is enough
to specify CC=clang in the make command line

Change-Id: I06f1c1d418b68768f8119de5bdc8748c51f90c02
Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-04-26 16:16:44 +00:00
Pierre Pfister
1dabaafceb Port glean neighbor entry support to IPv6
This patch is more or less a port of I71f3ba0c8192 to IPv6.
In practice it allows creating a route via a neighbor which is not resolved yet.
It also adds static flag to IPv6 neighbor entries.
And as Damjan suggested, it formalizes ip46_address_t by using
the IPv4 embedded IPv6 address format.

Change-Id: Ifa7328a03380ea4ff118b7ca4897b4ab23a3e57c
Signed-off-by: Pierre Pfister <ppfister@cisco.com>
2016-04-26 14:09:00 +00:00
Hongjun Ni
0371807f7b Fix decap's second-loop failure issue within nsh-vxlan-gpe
Change-Id: I7c5c93b6490baa05b9b203b6d065d9c31f36d531
Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
2016-04-26 12:32:04 +00:00
Dave Barach
fed985c898 Build vpp w/ dpdk-16.04 by default
Change-Id: I82cdd82213517c51064eb439c44068d8977e5619
Signed-off-by: Dave Barach <dave@barachs.net>
2016-04-26 09:58:54 +00:00
Damjan Marion
106f0eda8d Gernerate dpdk config out of target specific files
DPDK 16.04 introduced new config parameter RTE_ARCH_X86
which was missing in the dpdk/Makefile

That caused issues with virtio devices on older kernels
(observed on 3.13.0).

This patch changes the source of generated config so
it will also include all defines in config/defconfig_TARGET
file.

Change-Id: Idc6ccbef1d01da84235281ea1078c081846446de
Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-04-26 09:58:19 +00:00
John Lo
350dc1cd78 Put back VMXNET3 driver init for DPDK 2.2.0 or older versions
Change-Id: I3fb9441fb7272072aba9721ca729d6ce5f2c00af
Signed-off-by: John Lo <loj@cisco.com>
2016-04-25 19:52:52 +00:00
Shesha Sreenivasamurthy
423f723a5a Disable TSO/CSUM offloading
Enabling these features breaks L4 traffic when a VHOST
  interface is bridged with a hardware interface which
  does not support such offloading. (Eg: enic)

Change-Id: Ife3d292a8860eb60b82f1473e2d0dd7329e51d5e
Signed-off-by: Shesha Sreenivasamurthy <shesha@cisco.com>
2016-04-25 19:09:31 +00:00
Shesha Sreenivasamurthy
cbdd897846 Fix vpp crash in DBG mode
virtio-vhost driver was specifying wrong prefetch
    size. This caused VPP to assert in DBG mode.

Change-Id: Icbe3d5574bd2463b98dfc618a001b16198ab82be
Signed-off-by: Shesha Sreenivasamurthy <shesha@cisco.com>
2016-04-25 14:38:33 -04:00
Ed Warnicke
d6a0fc5ea6 Break boostrap.sh into pieces
In order to make it easier for folks who have existing
Centos or Ubuntu boxes to utilize the same
'Getting started' scripting that is used in Vagrant,
as well as enable us to use that scripting in CI,
broke up bootstrap.sh into

update.sh - Things like apt-get update
build.sh - Install any dependencies and build vpp
clearinterfaces.sh - Clean off any non-default gateway
                   interfaces.  Used by vagrant.
run.sh - Start vpp as a service on the box.

A user (or CI) just wanting to get going and build
on an existing Ubuntu or Centos image (ie, not via
vagrant) can simply run

build.sh

Change-Id: I8f19342f163cad07c6c05def943a5fb8e394b879
Signed-off-by: Ed Warnicke <eaw@cisco.com>
2016-04-25 17:27:09 +00:00
Damjan Marion
108c731385 Add native NETMAP driver
This is first drop of native NETMAP driver.
It is mainly tested with NETMAP pipes but also
support for native interfaces should work.

New CLI:
create netmap [<intf name>|valeXXX:YYY] [hw-addr <mac>] [pipe]
[master|slave]

Following example creates NETMAP pipe where VPP acts as master:

 create netmap name vale00:vpp1 pipe master

then NETMAP pkt-gen tool can be used to send traffic:

 pkt-gen -i vale00:vpp1}0  -f tx

Change-Id: Ie0ddaa5facc75285b78467420e8a9f9c8dfc39e5
Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-04-25 14:24:03 +00:00
Bud Grise
68adab9267 Allow the number of elements in a frame queue to be specified per thread.
Change-Id: I026a61a943960dc52539565968a942fbd851da93
Signed-off-by: Todd Foggoa <tfoggoa@cisco.com>
2016-04-25 13:27:45 +00:00
Todd Foggoa (tfoggoa)
a30d40d33c Add APIs to access dpdk information
- Add an API to get the number of DPDK mbufs
- Add an API to detemrine if the io thread has been released
- Add an API to get the DPKD pmd type
- Add an API to get the cpu socket of a device

Change-Id: I926401891fb6053c676125c9d0621cc9ed1f80bb
Signed-off-by: Todd Foggoa (tfoggoa) <tfoggoa@cisco.com>
2016-04-25 13:25:22 +00:00
Hongjun Ni
2acdb58d92 Change ethernet's result within unformat_decap_next
Change-Id: Ib3f9d1a03930842063ebfbfcfeefca533a678416
Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
2016-04-25 13:19:04 +00:00
Florin Coras
577c3553dd Convert lisp-gpe encap to interface tx node
With this change, one lisp-gpe interface is created per vrf/overlay
tenant and its tx node is used as encapsulator (or tunnel ingress). For
all intents and purposes, the tx node inherits all functions previously
performed by the lisp-gpe-encap node and it maintains said node's
position in lisp-gpe's data-path graph. Chiefly, this opens the
possibility to chain interface features, like IPSec, transparently with
LISP. Furthermore, it brings basic data plane support for vrfs and LISP
instance-ids (or virtual network instances as per RFC7364).

Other changes include improvements to lisp-gpe enable and disable
sequences and corresponding API/VAT fixes.

Change-Id: I085500450660a976b587b1a720e282f6e728d580
Signed-off-by: Florin Coras <fcoras@cisco.com>
2016-04-25 13:05:49 +00:00
John Lo
405e41b50e Improve mechanism for using loopback interface as BVI for BDs
When loopback interface is configured as BVI, instead of changing its
output node from loopN-output to l2-input, the loopN-output node is now
kept while its next tx node is changed from ethernet-input to l2-input.
The packet setup previously done in bvi_to_l2 as part of l2-input is now
performed in the loop output node.

This change adds an extra node in the BVI output path but provides the
following improvements:
1. IP address/route created on loopback prior to it being configured as
   BVI will still work properly. The requirement to (re)configure IP/route
   on loopback after it is configured as BVI is removed.
2. The output stats for loopback interfaces are always provided irrespective
   of their BVI configuration.
3. The loopback-BVI output stats can be batch updated outside the packet
   loop in output node, instead of per packet update in l2-input node,
   making l2-input node more efficient for BVI packets.
4. Restore original node property as implemented in node.c function
   vlib_node_add_next_with_slot() where next node indices stored in next
   slots of each node will remain unique.
5. Packet trace for BVI output includes loopN output node which provides
   useful packet data.

Change-Id: I7f5bc72ef953a367363a179088210596881f9e73
Signed-off-by: John Lo <loj@cisco.com>
2016-04-25 12:58:41 +00:00
Ole Troan
d06b9f9cbf Python-API: Python 2 support.
Change-Id: I6bc656caf22e284233e27f9e003f11502f306c11
Signed-off-by: Ole Troan <ot@cisco.com>
2016-04-25 13:11:19 +02:00
Ole Troan
fc6cf287c4 Python-API: Support for zero-length arrays from caller to VPP. (Previously only VPP to caller was supported.)
Change-Id: Id660caeb780f3b26cc091467291463980f485178
Signed-off-by: Ole Troan <ot@cisco.com>
2016-04-25 12:37:12 +02:00
Keith Burns (alagalah)
8a1a19b8b6 Updated .gitignore for Python API generated file
Change-Id: I7c08b52124b44feb36e04a7fd417fe14b367cb44
Signed-off-by: Keith Burns (alagalah) <alagalah@gmail.com>
2016-04-24 11:13:49 -07:00
Damjan Marion
f1213b8277 Add clib_memcpy macro based on DPDK rte_memcpy implementation
Change-Id: I22cb443c4bd0bf298abb6f06e8e4ca65a44a2854
Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-04-22 17:29:47 +02:00
Dave Barach
2b836cf4d1 Add a vpp_restart command
vpp_restart solves the problem of restarting vpp and not exiting until
the new vpp instance is sufficiently established to allow immediate
binary API connections. The point is to avoid using arbitrary "sleep
N" commands e.g. in CSIT shell scripts.

We send SIGTERM to the current vpp process, and expect / depend on the
process-monitor du jour to remove the vpp-api shared-memory segment.

vpp_restart exits w/ status 0 if all is well, non-zero upon failure.

In trying to make vpp_restart reliable, we discovered a
recently-introduced heap corruption bug in .../dpdk/init.c, which
caused vpp to crash on startup once every 20 times on a particular
rig.

If possible, we should check /var/log/syslog for evidence of
unexpected multiple restarts during regression-testing.

Change-Id: Ic48c74b1a94a4368066ba2e326d4b12d51192088
Signed-off-by: Dave Barach <dbarach@cisco.com>
2016-04-22 09:54:33 -04:00
Dave Barach
daede64544 Fix duplicate free
Change-Id: Ifda07e476c74da9bfd7e21f02aa09160a0212e24
Signed-off-by: Dave Barach <dbarach@cisco.com>
2016-04-22 13:26:15 +00:00
Damjan Marion
ae605265d2 Use memory from other CPU sockets if there is no local
This fixes crash when local socket memory is not available
so rx/tx queue setup fails. Here we simply retry operation
without being so picky about memory location.

Change-Id: I5bae47defe3c0fe120853378ed13141893284a5a
Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-04-22 12:02:26 +00:00
Damjan Marion
7cd98ea5ad Removing dpdk socket-mem from startup.conf
We allocate 512M of memory on each available cpu socket
by default so this is not needed anymore in startup.conf

Change-Id: Ib28b25df8d6722777a006aaddd1d56f21ab7b58a
Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-04-21 19:53:25 +00:00
Damjan Marion
7c1ef81480 Fix warning in vppapigen
Change-Id: I6301ece0d772fd5a6271edd07765b05ef0b63f21
Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-04-21 14:04:10 +00:00
Damjan Marion
bd4b590561 Add Broadwell-EP/EX to the uarch list
Change-Id: I2ab84846ac88d3170b8c847914749e2a728dfa2b
Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-04-21 14:03:55 +00:00
Damjan Marion
c843ddcbec Remove execute flags from some dpdk patch files
Change-Id: I972b784082de45480baf1d1f07845743afddea40
Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-04-20 21:02:16 +00:00
Srivatsa Sangli
0777915b2a ubuntu 16.04 build support. Supporting systemd with vpp.service files.
Incorporating review comments : modified debian/control dependencies

Change-Id: Ib2fe85d81eb7f1803ef8f54294c7c18cd07c61ba
Signed-off-by: Srivatsa Sangli <srivrama@cisco.com>
2016-04-20 18:44:41 +00:00
John Lo
e5055d21a9 Allow L3 forwarded jumbo packets on Bonded Interfaces
Set max L3 packet size allowed to the lowest value of the slave links.
Also cleanup FIXME's for VMXNET3 driver.

Change-Id: Ia5cf742f2ab13b8cdc8ea6286f56464ee4f8c51d
Signed-off-by: John Lo <loj@cisco.com>
2016-04-20 17:25:27 +00:00
Ole Troan
6855f6cdfe Python-API: Inital commit of Python bindings for the VPP API.
See: https://wiki.fd.io/view/VPP/Python_API

Change-Id: If135fc32208c7031787e1935b399d930e0e1ea1f
Signed-off-by: Ole Troan <ot@cisco.com>
2016-04-20 16:50:29 +00:00
Alpesh S. Patel
633951c3d8 delete loopback interface cli
(to be consistent with other delete interface commands)

Change-Id: I41f63cc5b11d9fa9489edc54b17a4d857b711b66
Signed-off-by: Alpesh S. Patel <apatel9191@hotmail.com>
2016-04-20 16:25:19 +00:00
Keith Burns (alagalah)
c02f02d64e Cleaned up formatting in device.c - no functionality changes.
Change-Id: Ia7d83784d50b3651117201b876464528d015edea
Signed-off-by: Keith Burns (alagalah) <alagalah@gmail.com>
2016-04-20 11:24:50 +00:00
Hongjun Ni
514f651eae Change from nsh-encap to nsh-vxlan-gpe within nsh vxlan tunnel's short_help
Change-Id: Ifeba2e9857a112139b7be6436b59f05858f1abf9
Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
2016-04-20 03:47:00 +00:00