Compare commits

...

43 Commits

Author SHA1 Message Date
Ole Troan
511ee63cbb make test: mark all BFD tests as extended
Change-Id: Id6c482cf01f49257a05600ae1458f5db09c13cf0
Signed-off-by: Ole Troan <ot@cisco.com>
2017-04-21 17:15:26 +02:00
Damjan Marion
c39ed3da62 Fix issue with gre protocol registration when running multithreaded
Change-Id: Ic5bd7da08f8a46b548d56516e4633f0b8badf2a1
Signed-off-by: Damjan Marion <damarion@cisco.com>
2017-04-21 11:31:09 +00:00
Damjan Marion
e23680056e Fix issue with udp port registration when running multithreaded
Change-Id: I16606757176649e61f0a51895329586311144766
Signed-off-by: Damjan Marion <damarion@cisco.com>
2017-04-21 11:30:22 +00:00
Klement Sekera
128254a1c3 make test: fix broken plugin paths
Change-Id: I25a6882ec503fc5bb3694411fbdc2eb1f1e1fafc
Signed-off-by: Klement Sekera <ksekera@cisco.com>
(cherry picked from commit 6abbc2884a0d2006f2b7cc1d9f5b74cefbb7ac78)
2017-04-21 11:24:05 +00:00
Klement Sekera
8a74f2a480 make test: properly propagate exit status
Change-Id: Ie9f48a0d5e0a9cd08eb8f07d49149eee40f04131
Signed-off-by: Klement Sekera <ksekera@cisco.com>
(cherry picked from commit 0c8ad446db72078a2255329c2cfaced517829c78)
2017-04-21 11:22:34 +00:00
Damjan Marion
4cb2357443 Comment out dpdk section in startup.conf
It is empty anyway and it is causing problems if dpdk plugin is not
loaded.

Change-Id: I7b49afec39c78cbaf0c57b50621fb3e6848e3469
Signed-off-by: Damjan Marion <damarion@cisco.com>
(cherry picked from commit 60750434fce12e320968a5bbc14cca080048ffd1)
2017-04-20 08:56:46 +00:00
Ole Troan
2c91879e7f 1704: Release notes update. Including old 17.01.
Change-Id: Ifd6e9ce769297534f8de088f583c23ad3f2c51df
Signed-off-by: Ole Troan <ot@cisco.com>
2017-04-20 08:55:44 +02:00
Florin Coras
5d0137bbd0 Update release notes
Change-Id: Ie554934b86ab24e82ca22680f6b3d772f5d6e8f9
Signed-off-by: Florin Coras <fcoras@cisco.com>
2017-04-19 13:49:56 -07:00
Ole Troan
282accc2b3 1704: Release notes.
Change-Id: I2881ae9c68a4edf60e83923e6409cbd767ada914
Signed-off-by: Ole Troan <ot@cisco.com>
2017-04-19 13:32:59 +02:00
Juraj Sloboda
012e4bab6c Support ping from outside network in 1:1 NAT (VPP-695)
Change-Id: Iec8fd4c2bd26874bd8bda82172af797e9b92592c
Signed-off-by: Juraj Sloboda <jsloboda@cisco.com>
2017-04-19 08:01:59 +00:00
Juraj Sloboda
1604a9c0ca Make fixes in SNAT code
Change-Id: I691d1bfb2923a07c0003485b1d0272aaf9ed27ee
Signed-off-by: Juraj Sloboda <jsloboda@cisco.com>
2017-04-19 07:05:59 +00:00
Neale Ranns
d8d09d15e2 Memory leak in load-balance maps
Change-Id: Iec67ae1232e346d5e0000e0b4c997fdc31865bc6
Signed-off-by: Neale Ranns <nranns@cisco.com>
2017-04-18 12:56:45 -07:00
Vengada
68df5a51f6 VPP-341: IOAM documentation
Change-Id: I24139082c795ccdfe19d398637a287523ec7a4cc
Signed-off-by: Vengada <venggovi@cisco.com>
Signed-off-by: Shwetha <shwethab@cisco.com>
Signed-off-by: AkshayaNadahalli <anadahal@cisco.com>
2017-04-15 12:37:48 +00:00
Neale Ranns
2594216a9a Remove unsed parameter from fib_table_entry_special_add() (only used in FIB tests). The DPO was incorrectly initialised with FIB_PROTO_MAX
Change-Id: I962df9e162e4dfb6837a5ce79ea795d5ff2d7315
Signed-off-by: Neale Ranns <nranns@cisco.com>
2017-04-13 09:20:30 +00:00
shwethab
00c14a94c3 VPP-693: IOAM configuration for SRv6 localsid
This add debug cli to accept SRv6 localsid that will be
used to attract the return traffic for M-Anycast flows.

Change-Id: I8f8dd115c36498141ae4cb143c6584141950b1d3
Signed-off-by: shwethab <shwetha.bhandari@gmail.com>
2017-04-13 08:50:21 +00:00
Filip Tehlar
5e189f1a88 LSIP: make LISP statistics collecting thread safe, VPP-692
Change-Id: If884835c0f63de162ecf75fecd2a63a1240ee910
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
2017-04-11 06:30:06 +00:00
Marek Gradzki
92bcecfdcc jvpp: remove redundant libvlib.la dependency
Follows https://gerrit.fd.io/r/#/c/5681/
Should fix VPP-689.

Change-Id: I5514c3d2657f4ee0a932d14c80f55d1471f5d56f
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
2017-04-10 13:15:22 +00:00
Eyal Bari
0f0ff322b1 BRIDGE-DOMAIN:enable arp term,mac/ip learning on local ints
we should not suppress arps on remote interface instead we should  flood them to the local one
used shg != 0 to identify packets from remote interfaces and disable arp term l2 input feature for them

Change-Id: I701537c05df7451a25ccb5bfc9e2b03ea70cff20
Signed-off-by: Eyal Bari <ebari@cisco.com>
(cherry picked from commit a0623f8d26501a230801908cd4bc38d67a35dd23)
2017-04-10 09:44:19 +00:00
John Lo
16c76de9b5 Fix init of ENIC driver to allow receiving of jumbo packets
Set rxmode.enable_scatter field in DPDK port config parameter so ENIC
driver will use multiple mbuf's for receiving jumbo packets.
Also remove ENIC driver check to disable setting ENIC MTU as this
capability is now working with the new ENIC driver, subject to 9002B
limit.

Change-Id: I563976201c4968d4538c0759505cef2de876934a
Signed-off-by: John Lo <loj@cisco.com>
(cherry picked from commit 250b95b71babdfb558554c788a82cf45ccc34ab8)
2017-04-08 17:16:33 +00:00
Florin Coras
b970bb7f01 Fix gpe dp args to allow for 32 bit bridge domain ids, VPP-690
Change-Id: I4e3df197eed33acbceaff495279def8716773303
Signed-off-by: Florin Coras <fcoras@cisco.com>
2017-04-07 00:00:04 +00:00
Marek Gradzki
77ff34d550 jvpp: remove unused print&endian headers (fixes VPP-688)
Change-Id: I97e03d98758a08b1f75a9a1f35f0181385a10ae8
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
2017-04-06 08:15:00 +00:00
Sergio Gonzalez Monroy
12cb0c4cdb Fix name typo
Change-Id: Ic7128d4f8a13c021e0fd4731a717193d050431d2
Signed-off-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
2017-04-05 16:41:55 +00:00
Klement Sekera
5d0b86b8ef BFD: add ARP-awareness, fix bugs
Make BFD ARP-aware when sending out packets.
Fix a few one-liner bugs discovered while integrating with cisco
nexus. Enhance CLI view to better observe session state.

Change-Id: I266c29492f351207b84328ab665d9d697969da9c
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2017-04-05 16:18:53 +00:00
Milan Lenco
f7f4535510 Fix two more memif coverity issues
Change-Id: Iff7e1562d395f1f2e000fa8c2e98bb85969479d7
Signed-off-by: Milan Lenco <milan.lenco@pantheon.tech>
2017-04-05 15:34:10 +00:00
Filip Tehlar
c6cd26d520 LISP: fix crash when GPE interface is re-added, VPP-685
Change-Id: Ib83baf6ddec4ac192f6b4123d9eb599fb370fd0c
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
2017-04-05 15:19:47 +00:00
Andrew Yourtchenko
7fd3f513c7 acl-plugin: fix pretty-printing in "api trace custom-dump" (VPP-683)
Change-Id: Id15b401223aabe7dacb7566c871ebefc17fbb1fc
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
2017-04-05 10:13:29 +00:00
Filip Tehlar
517f72fe18 LISP: fix crash when adding a negative forwarding entry, VPP-681
Change-Id: I190696da5555c05074ee0eee32eb914bd16e38fb
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
2017-04-05 06:17:37 +00:00
Andrew Yourtchenko
9fc0c26c6b acl-plugin: make the IPv4/IPv6 non-first fragment handling in line with ACL (VPP-682)
This fixes the previously-implicit "drop all non-first fragments" behavior
to be more in line with security rules: a non-first fragment is treated
for the purposes of matching the ACL as a packet with the port
match succeeding. This allows to change the behavior to permit
the fragmented packets for the default "permit specific rules"
ruleset, but also gives the flexibility to block the non-initial
fragments by inserting into the begining a bogus rule
which would deny the L4 traffic.

Also, add a knob which allows to potentially turn this behavior off
in case of a dire need (and revert to dropping all non-initial fragments),
via a debug CLI.

Change-Id: I546b372b65ff2157d9c68b1d32f9e644f1dd71b4
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
2017-04-04 19:45:05 +00:00
Pierre Pfister
ec06222ae1 Fix typo in minimal epoll polling time
epoll was supposed to not sleep when timeout
is less than 1ms, but a typo made it not sleep
any time the requested timeout is lower than
1000 seconds (in practice, never...).

This patch replaces "1e3" with "1e-3", which
represents 1ms.

Change-Id: I731851b27a6bf6ab8e41586e017e94b962b09bf3
Signed-off-by: Pierre Pfister <ppfister@cisco.com>
2017-04-04 15:55:21 +01:00
Milan Lenco
de9a7eacd5 Fix memif coverity issues
Change-Id: I1cd649e1d4582792f75d0db60a9524471fc76a9f
Signed-off-by: Milan Lenco <milan.lenco@pantheon.tech>
2017-04-03 10:25:38 +02:00
Dave Barach
f6fc6b674d vpp-678: 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>
(cherry picked from commit 13ad1f02922858177915b1cb1450041d2e4d85de)
2017-03-30 15:03:55 -04:00
Pablo Camarillo
5d2495d550 VPP-673 Fix L2 steering.
Change-Id: I1eab03525f234139ceefbc9b9895a35a03a56910
Signed-off-by: Pablo Camarillo <pcamaril@cisco.com>
2017-03-30 12:20:24 +00:00
Andrew Yourtchenko
097051a3bd acl-plugin: cleaner node bugfixes (VPP-675)
- use the counters in a private struct rather than node error counters
- ensure the timer for the non-idle connections is restarted
- fix the deletion of conn at the current tail the list

Change-Id: I632f63574d2ced95fb75c5e7fb588c78fb3cce1c
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
2017-03-30 09:38:39 +00:00
Filip Tehlar
65d5f03793 LISP: fix IID in decap, VPP-676
Change-Id: I3f67d32d5d76069a27176deef6cba0c1a194b7ec
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
2017-03-30 09:26:16 +02:00
Jim Gibson
ee403b722f af_packet driver failure to check VLIB_BUFFER_NEXT_PRESENT flag
af_packet driver must check that VLIB_BUFFER_NEXT_PRESENT flag is set
when walking vlib_buffer_t next_buffer chain on transmit.
On buffer allocation:
- next_buffer is not and may contain a stale invalid value that
  should be ignored if not overwritten by a valid value.
- VLIB_BUFFER_NEXT_PRESENT flag is cleared and only set
  if a valid value is written to next_buffer.

Change-Id: Iebf76ce8eea24a0d63c7bf749e672d6a232c80e7
Signed-off-by: Jim Gibson <gibson+fdio@cisco.com>
2017-03-29 21:50:40 +00:00
Neale Ranns
39cdca35c5 Coverity Error: logically dead code in IP unnumbered CLI
Change-Id: Id3398bd4b7a56c168aaab37942b92715e19d4025
Signed-off-by: Neale Ranns <nranns@cisco.com>
2017-03-29 19:21:40 +00:00
Pablo Camarillo
f60b77c159 Bugfixing and documentation for SRv6
- Fixed three coverity issues
- Linked SRv6 docs
- Moved sample plugin to examples folder
- Fixed bug with hash. Now everything is using mhash. Potentially in the future we want to do bihash.

Change-Id: Ie03a13c8fecb1e315e67d0596cbd23220779aaf2
Signed-off-by: Pablo Camarillo <pcamaril@cisco.com>
2017-03-29 14:01:49 +00:00
shwethab
ff077a0401 SR replicate mheap corruption fix VPP-672
Change-Id: If1c68fc63fa71fab198f2bf4f79bdd7a9841c2e8
Signed-off-by: shwethab <shwetha.bhandari@gmail.com>
Signed-off-by: Pablo Camarillo <pcamaril@cisco.com>
2017-03-29 13:57:13 +00:00
Ole Troan
0679760dc5 Python API: Fixup of debian package after cFFI changes.
Change-Id: I4c2a1a818f28d4c6cf52af45f3b7dbfa41d77ccb
Signed-off-by: Ole Troan <ot@cisco.com>
(cherry picked from commit afaa85f873a7bff1cf1e32c22f909af3018ccfee)
2017-03-28 23:37:43 +00:00
John Lo
58f061dca4 Implement MAC Flush for BD or Interface from the L2FIB
Allow non-static MACs in the L2FIB which is associated with an
interface or a bridge domain (BD) be flushed. MAC flush are
initiated automatically when an interface is removed from a BD
or when a BD is deleted. MAC flush can also be invoked manually
via the following CLI:
 l2fib mac-flush interface <if-name>
 l2fib mac-flush bridge-domain <bd-id>

Change-Id: Ie33243622834810a765f48ebcd22bdb8e8fc87a4
Signed-off-by: John Lo <loj@cisco.com>
2017-03-28 22:36:13 +00:00
Ole Troan
45e526f36f Python-API: debian packaging now depends on python-all (for pybuild)
Change-Id: I6b1dd6bdf03fa506c4b114d15800d9fe03e36395
Signed-off-by: Ole Troan <ot@cisco.com>
(cherry picked from commit 9f81d4fe5cfab856e23926bfdb11c03c04838478)
2017-03-28 19:13:55 +00:00
AkshayaNadahalli
f9bb3b45d1 Fix output feature processing (VPP-670)
Double committing to 17.04 as its a bug-fix.

Change-Id: I94539812191ad0eb8abe78e2dad25ab96c780f30
Signed-off-by: AkshayaNadahalli <anadahal@cisco.com>
2017-03-28 12:19:54 +05:30
Ole Troan
cb92fc6edc Change default branch in .gitreview
Change-Id: I204a6125615accaa96b94657e7f76b243c9305d1
Signed-off-by: Ole Troan <ot@cisco.com>
2017-03-22 21:15:07 +01:00
125 changed files with 3426 additions and 1785 deletions

View File

@ -2,3 +2,4 @@
host=gerrit.fd.io
port=29418
project=vpp
defaultbranch=stable/1704

View File

@ -57,7 +57,7 @@ M: Damjan Marion <damarion@cisco.com>
F: src/vnet/devices/
VNET Device Drivers - DPDK Crypto
M: Sergio Gonzales Monroy <sergio.gonzalez.monroy@intel.com>
M: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
F: src/devices/dpdk/ipsec/
VNET Feature Arcs
@ -81,7 +81,7 @@ M: Pablo Camarillo <pcamaril@cisco.com>
F: src/vnet/sr/
VNET IPSec
M: Sergio Gonzales Monroy <sergio.gonzalez.monroy@intel.com>
M: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
M: Matus Fabian <matfabia@cisco.com>
F: src/vnet/ipsec/

View File

@ -40,7 +40,7 @@ DEB_DEPENDS = curl build-essential autoconf automake bison libssl-dev ccache
DEB_DEPENDS += debhelper dkms git libtool libganglia1-dev libapr1-dev dh-systemd
DEB_DEPENDS += libconfuse-dev git-review exuberant-ctags cscope pkg-config
DEB_DEPENDS += lcov chrpath autoconf nasm
DEB_DEPENDS += python-dev python-virtualenv python-pip libffi6
DEB_DEPENDS += python-all python-dev python-virtualenv python-pip libffi6
ifeq ($(OS_VERSION_ID),14.04)
DEB_DEPENDS += openjdk-8-jdk-headless
else

View File

@ -1,12 +1,105 @@
# Release Notes {#release_notes}
* @subpage release_notes_1704
* @subpage release_notes_17011
* @subpage release_notes_1701
* @subpage release_notes_1609
* @subpage release_notes_1606
@page release_notes_1704 Release notes for VPP 17.04
More than 500 commits since the 1701 release.
## Features
- Infrastructure
- make test improvements
- vnet: add device-input threadplacement infra
- 64 bit per-thread counters
- process restart cli
- High performance timer wheels
- Plugin infrastructure improvements
- Support for .default_disabled, .version_required
- Added MAINTAINERS file
- Host stack
- TCP stack (experimental)
- DHCPv4 / DHCPv6 relay multi-destination
- DHCPv4 option 82
- ND proxy
- Attached hosts
- Consolidated DHCPv4 and DHCPv6 implementation
- Interfaces
- DPDK 17.02 (retire support for DPDK 16.07)
- Add memif - packet memory interface for intra-host communication
- vhost: support interrupt mode
- DPDK as plugin (retired vpp_lite)
- DPDPK input optimizations
- Loopback interface allocation scheme
- Network features
- IP Multicast FIB
- Bridging
- Learning on local interfaces
- Flushing of MACs from the L2 FIB
- SNAT
- CGN (Deterministic and dynamic)
- CGN configurable port allocation algorithm
- ICMP support
- Tentant VRF id for SNAT outside addresses
- Session dump / User dump
- Port allocation per protocol
- Security groups
- Routed interface support
- L2+L3 unified processing node
- Improve fragment handling
- Segement routing v6
- SR policies with weighted SID lists
- Binding SID
- SR steering policies
- SR Local SIDs
- Framework to expand local SIDs w/plugins
- Documentation
- IOAM
- UDP Pinger w/path fault isolation
- IOAM as type 2 metadata in NSH
- IAOM raw IPFIX collector and analyzer
- Anycast active server selection
- Documentation
- SRv6 Local SID
- IP6 HBH header and SR header co-existence
- Active probe
- LISP
- Statistics collection
- Generalize encap for overlay transport (vxlan-gpe support)
- Improve data plane speed
- GPE
- CLI
- NSH added to encap/decap path
- Renamed LISP GPE API to GPE
- MPLS
- Performance improvements (quad loop)
- BFD
- Command line interface
- Echo function
- Remote demand mode
- SHA1 authentication
- IPsec
- IKEv2 initiator features
- VXLAN
- unify IP4/IP6 control plane handling
## API changes
- Python API: To avoid conflicts between VPP API messages names and
@ -23,23 +116,112 @@
For backwards compatibility VPP API methods are left in the main
name space (VPP), but will be removed from 17.07.
- Python API: Change from cPython to CFFI.
- create_loopback message to be replaced with create_loopback_instance
create_loopback will be removed from 17.07.
https://gerrit.fd.io/r/#/c/5572/
@todo Release 17.04 needs release notes.
## Known issues
For the full list of issues please reffer to fd.io [JIRA](https://jira.fd.io).
## Issues fixed
For the full list of fixed issues please reffer to:
- fd.io [JIRA](https://jira.fd.io)
- git [commit log](https://git.fd.io/vpp/log/?h=stable/1704)
@page release_notes_17011 Release notes for VPP 17.01.1
This is bug fix release.
For the full list of fixed issues please reffer to:
- fd.io [JIRA](https://jira.fd.io)
- git [commit log](https://git.fd.io/vpp/log/?h=stable/1701)
@page release_notes_1701 Release notes for VPP 17.01
@note This release was for a while known as 16.12.
@todo Release 17.01 needs release notes. It will show up here soon...
## Features
- [Integrated November 2016 DPDK release](http://www.dpdk.org/doc/guides/rel_notes/release_16_11.html)
- Complete rework of Forwarding Information Base (FIB)
- Performance Improvements
- Improvements in DPDK input and output nodes
- Improvements in L2 path
- Improvmeents in IPv4 lookup node
- Feature Arcs Improvements
- Consolidation of the code
- New feature arcs
- device-input
- interface-output
- DPDK Cryptodev Support
- Software and Hardware Crypto Support
- DPDK HQoS support
- Simple Port Analyzer (SPAN)
- Bidirectional Forwarding Detection
- Basic implementation
- IPFIX Improvements
- L2 GRE over IPSec tunnels
- Link Layer Discovery Protocol (LLDP)
- Vhost-user Improvements
- Performance Improvements
- Multiqueue
- Reconnect
- LISP Enhancements
- Source/Dest control plane support
- L2 over LISP and GRE
- Map-Register/Map-Notify/RLOC-probing support
- L2 API improvements, overall code hardening
- Plugins:
- New: ACL
- New: Flow per Packet
- Improved: SNAT
- Mutlithreading
- Flow export
- Doxygen Enhancements
- Luajit API bindings
- API Refactoring
- file split
- message signatures
- Python and Scapy based unit testing infrastructure
- Infrastructure
- Various tests
- Packet Generator improvements
- TUN/TAP jumbo frames support
- Other various bug fixes and improvements
## Known issues
For the full list of issues please reffer to fd.io [JIRA](https://jira.fd.io).
## Issues fixed
For the full list of fixed issues please reffer to:
- fd.io [JIRA](https://jira.fd.io)
- git [commit log](https://git.fd.io/vpp/log/?h=stable/1701)
@page release_notes_1609 Release notes for VPP 16.09

View File

@ -59,10 +59,6 @@ install-deb: $(patsubst %,%-find-source,$(ROOT_PACKAGES))
./scripts/find-vpp-api-java-contents $(INSTALL_PREFIX)$(ARCH) \
deb/debian/vpp-api-java.install ; \
\
: vpp-api-python package ; \
./scripts/find-vpp-api-python-contents $(INSTALL_PREFIX)$(ARCH) \
deb/debian/vpp-api-python.install ; \
\
: bin package needs startup config ; \
echo ../../src/vpp/conf/startup.conf /etc/vpp \
>> deb/debian/vpp.install ; \

View File

@ -2,7 +2,7 @@ Source: vpp
Section: net
Priority: extra
Maintainer: Cisco OpenVPP Packaging Team <bogus.address@cisco.com>
Build-Depends: debhelper (>= 9), dh-systemd, dh-python, chrpath
Build-Depends: debhelper (>= 9), dh-systemd, dh-python, chrpath, python-all
Standards-Version: 3.9.4
Package: vpp

View File

@ -16,9 +16,15 @@ include /usr/share/dpkg/default.mk
# package maintainers to append LDFLAGS
#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
export PYBUILD_NAME = vpp-api-python
export PYBUILD_DIR = ../../src/vpp-api/python
export PYBUILD_DESTDIR_python2=debian/vpp-api-python/
export PYBUILD_DISABLE_python2=test
export PYBUILD_SYSTEM=distutils
# main packaging script based on dh7 syntax
%:
dh $@ --with systemd,python2
dh $@ --with systemd,python2 --buildsystem=pybuild
override_dh_install:
dh_install --exclude .git

View File

@ -1,5 +0,0 @@
#!/bin/sh -e
# after installing python-api files
python2_sitedir=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
easy_install --install-dir=$python2_sitedir -z $python2_sitedir/vpp_papi/vpp_papi-*.egg

View File

@ -1,8 +0,0 @@
#!/bin/sh -e
# before removing python-api files
python2_sitedir=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
easy_install --install-dir=$python2_sitedir -mxNq vpp_papi
# the egg has been copied during install
rm $python2_sitedir/vpp_papi-*.egg

View File

@ -53,7 +53,8 @@ DOXY_SRC_DIRECTORIES = \
$(DOXY_SRC)/vlibsocket \
$(DOXY_SRC)/vnet \
$(DOXY_SRC)/vpp \
$(DOXY_SRC)/vpp-api
$(DOXY_SRC)/vpp-api \
$(DOXY_SRC)/examples
# Input directories and files
DOXY_INPUT ?= \
@ -72,9 +73,8 @@ DOXY_INPUT := $(subst $(WS_ROOT)/,,$(DOXY_INPUT))
# These must be left-anchored paths for the regexp below to work.
DOXY_EXCLUDE ?= \
$(DOXY_SRC)/vlib/vlib/buffer.c \
$(DOXY_SRC)/vlib/example \
$(DOXY_SRC)/vpp-api/lua \
plugins/sample-plugin
$(DOXY_SRC)/examples/sample-plugin
# Generate a regexp for filenames to exclude
DOXY_EXCLUDE_REGEXP = ($(subst .,\.,$(shell echo '$(strip $(DOXY_EXCLUDE))' | sed -e 's/ /|/g')))

View File

@ -4,13 +4,14 @@ User Documentation {#user_doc}
Several modules provide operational, dataplane-user focused documentation.
- [GUI guided user demo](https://wiki.fd.io/view/VPP_Sandbox/vpp-userdemo)
- @subpage qos_doc
- @subpage ipsec_gre_doc
- @subpage dpdk_crypto_ipsec_doc
- @subpage map_doc
- @subpage lldp_doc
- @subpage ioam_plugin_doc
- @subpage lb_plugin_doc
- @subpage flowperpkt_plugin_doc
- @subpage span_doc
- @subpage bfd_doc
- @subpage ioam_plugin_doc
- @subpage ipsec_gre_doc
- @subpage lb_plugin_doc
- @subpage lldp_doc
- @subpage map_doc
- @subpage dpdk_crypto_ipsec_doc
- @subpage flowperpkt_plugin_doc
- @subpage qos_doc
- @subpage span_doc
- @subpage srv6_doc

View File

@ -154,7 +154,6 @@ PLUGIN_ENABLED(lb)
PLUGIN_ENABLED(memif)
PLUGIN_ENABLED(sixrd)
PLUGIN_ENABLED(snat)
PLUGIN_DISABLED(srv6sample)
###############################################################################
# Dependency checks

View File

@ -1,12 +1,4 @@
# SRv6 Sample LocalSID documentation {#srv6_plugin_doc}
## Disclaimer
This is a memo intended to contain documentation for the sample SRv6 LocalSID behavior plugin
Everything that is not directly obvious should come here.
For any feedback on content that should be explained please mailto:pcamaril@cisco.com
This plugin refers to Segment Routing. Please read the SR documentation first.
# Sample SRv6 LocalSID documentation {#srv6_plugin_doc}
## Introduction

View File

@ -69,10 +69,6 @@ if ENABLE_SNAT_PLUGIN
include snat.am
endif
if ENABLE_SRV6SAMPLE_PLUGIN
include sample_srv6_localsid.am
endif
include ../suffix-rules.mk
# Remove *.la files

View File

@ -22,6 +22,7 @@ acl_plugin_la_SOURCES = \
acl/l2sess.c \
acl/l2sess_node.c \
acl/l2sess.h \
acl/manual_fns.h \
acl/acl_plugin.api.h
API_FILES += acl/acl.api
@ -29,8 +30,9 @@ API_FILES += acl/acl.api
nobase_apiinclude_HEADERS += \
acl/acl_all_api_h.h \
acl/acl_msg_enum.h \
acl/manual_fns.h \
acl/acl.api.h
acl_test_plugin_la_SOURCES = acl/acl_test.c acl/acl_plugin.api.h
acl_test_plugin_la_SOURCES = acl/acl_test.c acl/acl_plugin.api.h acl/acl_all_api.h
# vi:syntax=automake

View File

@ -60,7 +60,7 @@ define acl_plugin_get_version_reply
@param tcp_flags_value - if proto==6, mask to AND the TCP flags in the packet with
*/
typeonly manual_print manual_endian define acl_rule
typeonly manual_print define acl_rule
{
u8 is_permit;
u8 is_ipv6;
@ -104,7 +104,7 @@ typeonly manual_print manual_endian define acl_rule
@param src_ip_prefix_len - Source prefix length
*/
typeonly manual_print manual_endian define macip_acl_rule
typeonly manual_print define macip_acl_rule
{
u8 is_permit;
u8 is_ipv6;
@ -161,7 +161,7 @@ define acl_add_replace_reply
@param acl_index - ACL index to delete
*/
define acl_del
manual_print define acl_del
{
u32 client_index;
u32 context;
@ -190,7 +190,7 @@ define acl_del_reply
@param acl_index - index of ACL for the operation
*/
define acl_interface_add_del
manual_print define acl_interface_add_del
{
u32 client_index;
u32 context;
@ -224,7 +224,7 @@ define acl_interface_add_del_reply
@param acls - vector of ACL indices
*/
manual_endian define acl_interface_set_acl_list
manual_print define acl_interface_set_acl_list
{
u32 client_index;
u32 context;
@ -266,7 +266,7 @@ define acl_dump
@param r - Array of rules within this ACL
*/
manual_print manual_endian define acl_details
manual_endian manual_print define acl_details
{
u32 context;
u32 acl_index;
@ -296,7 +296,7 @@ define acl_interface_list_dump
@param acls - the vector of ACL indices
*/
manual_endian define acl_interface_list_details
define acl_interface_list_details
{
u32 context;
u32 sw_if_index;
@ -313,7 +313,7 @@ manual_endian define acl_interface_list_details
@param r - vector of MACIP ACL rules
*/
manual_print manual_endian define macip_acl_add
manual_endian manual_print define macip_acl_add
{
u32 client_index;
u32 context;
@ -341,7 +341,7 @@ define macip_acl_add_reply
@param acl_index - MACIP ACL index to delete
*/
define macip_acl_del
manual_print define macip_acl_del
{
u32 client_index;
u32 context;
@ -367,7 +367,7 @@ define macip_acl_del_reply
@param acl_index - MACIP ACL index
*/
define macip_acl_interface_add_del
manual_print define macip_acl_interface_add_del
{
u32 client_index;
u32 context;
@ -409,7 +409,7 @@ define macip_acl_dump
@param r - rules comprising this ACL
*/
manual_print manual_endian define macip_acl_details
manual_endian manual_print define macip_acl_details
{
u32 context;
u32 acl_index;

View File

@ -1767,8 +1767,6 @@ vl_api_macip_acl_interface_get_t_handler (vl_api_macip_acl_interface_get_t *
vl_msg_api_send_shmem (q, (u8 *) & rmp);
}
/* Set up the API message handling tables */
static clib_error_t *
acl_plugin_api_hookup (vlib_main_t * vm)
@ -2010,6 +2008,11 @@ acl_set_aclplugin_fn (vlib_main_t * vm,
}
goto done;
}
if (unformat (input, "l4-match-nonfirst-fragment %u", &val))
{
am->l4_match_nonfirst_fragment = (val != 0);
goto done;
}
if (unformat (input, "session")) {
if (unformat (input, "clear")) {
acl_main_t *am = &acl_main;
@ -2120,10 +2123,15 @@ acl_show_aclplugin_fn (vlib_main_t * vm,
u64 n_dels = sw_if_index < vec_len(am->fa_session_dels_by_sw_if_index) ? am->fa_session_dels_by_sw_if_index[sw_if_index] : 0;
out0 = format(out0, "sw_if_index %d: add %lu - del %lu = %lu\n", sw_if_index, n_adds, n_dels, n_adds - n_dels);
}));
out0 = format(out0, "\n\nConn cleaner thread counters:\n");
#define _(cnt, desc) out0 = format(out0, " %20lu: %s\n", am->cnt, desc);
foreach_fa_cleaner_counter;
#undef _
vlib_cli_output(vm, "\n\n%s\n\n", out0);
vlib_cli_output(vm, "Sessions per interval: min %lu max %lu increment: %f ms current: %f ms",
am->fa_min_deleted_sessions_per_interval, am->fa_max_deleted_sessions_per_interval,
am->fa_cleaner_wait_time_increment * 1000.0, ((f64)am->fa_current_cleaner_timer_wait_interval) * 1000.0/(f64)vm->clib_time.clocks_per_second);
vec_free(out0);
}
return error;
@ -2190,10 +2198,20 @@ acl_init (vlib_main_t * vm)
am->fa_max_deleted_sessions_per_interval = ACL_FA_DEFAULT_MAX_DELETED_SESSIONS_PER_INTERVAL;
am->fa_cleaner_wait_time_increment = ACL_FA_DEFAULT_CLEANER_WAIT_TIME_INCREMENT;
am->fa_cleaner_cnt_delete_by_sw_index = 0;
am->fa_cleaner_cnt_delete_by_sw_index_ok = 0;
am->fa_cleaner_cnt_unknown_event = 0;
am->fa_cleaner_cnt_deleted_sessions = 0;
am->fa_cleaner_cnt_timer_restarted = 0;
am->fa_cleaner_cnt_wait_with_timeout = 0;
#define _(N, v, s) am->fa_ipv6_known_eh_bitmap = clib_bitmap_set(am->fa_ipv6_known_eh_bitmap, v, 1);
foreach_acl_eh
#undef _
am->l4_match_nonfirst_fragment = 1;
return error;
}

View File

@ -181,6 +181,9 @@ typedef struct {
/* EH values that we can skip over */
uword *fa_ipv6_known_eh_bitmap;
/* whether to match L4 ACEs with ports on the non-initial fragment */
int l4_match_nonfirst_fragment;
/* conn table per-interface conn table parameters */
u32 fa_conn_table_hash_num_buckets;
uword fa_conn_table_hash_memory_size;
@ -209,6 +212,22 @@ typedef struct {
u32 fa_conn_list_head[ACL_N_TIMEOUTS];
u32 fa_conn_list_tail[ACL_N_TIMEOUTS];
/* Counters for the cleaner thread */
#define foreach_fa_cleaner_counter \
_(fa_cleaner_cnt_delete_by_sw_index, "delete_by_sw_index events") \
_(fa_cleaner_cnt_delete_by_sw_index_ok, "delete_by_sw_index handled ok") \
_(fa_cleaner_cnt_unknown_event, "unknown events received") \
_(fa_cleaner_cnt_deleted_sessions, "sessions deleted") \
_(fa_cleaner_cnt_timer_restarted, "session idle timers restarted") \
_(fa_cleaner_cnt_wait_with_timeout, "event wait with timeout called") \
_(fa_cleaner_cnt_wait_without_timeout, "event wait w/o timeout called") \
_(fa_cleaner_cnt_event_cycles, "total event cycles") \
_(fa_cleaner_cnt_already_deleted, "try to delete already deleted conn") \
/* end of counters */
#define _(id, desc) u32 id;
foreach_fa_cleaner_counter
#undef _
/* convenience */
vlib_main_t * vlib_main;
@ -219,6 +238,7 @@ typedef struct {
_(HOPBYHOP , 0 , "IPv6ExtHdrHopByHop") \
_(ROUTING , 43 , "IPv6ExtHdrRouting") \
_(DESTOPT , 60 , "IPv6ExtHdrDestOpt") \
_(FRAGMENT , 44 , "IPv6ExtHdrFragment") \
_(MOBILITY , 135, "Mobility Header") \
_(HIP , 139, "Experimental use Host Identity Protocol") \
_(SHIM6 , 140, "Shim6 Protocol") \
@ -231,7 +251,6 @@ typedef struct {
Also, Fragment header needs special processing.
_(NONEXT , 59 , "NoNextHdr") \
_(FRAGMENT , 44 , "IPv6ExtHdrFragment") \
ESP is hiding its internal format, so no point in trying to go past it.

File diff suppressed because it is too large Load Diff

View File

@ -164,14 +164,14 @@ vl_api_acl_rule_t_pretty_format (u8 *out, vl_api_acl_rule_t * a)
inet_ntop(af, a->src_ip_addr, (void *)src, sizeof(src));
inet_ntop(af, a->dst_ip_addr, (void *)dst, sizeof(dst));
out = format(out, "%s action %d src %s/%d dst %s/%d proto %d sport %d-%d dport %d-%d tcpflags %d %d",
out = format(out, "%s action %d src %s/%d dst %s/%d proto %d sport %d-%d dport %d-%d tcpflags %d mask %d",
a->is_ipv6 ? "ipv6" : "ipv4", a->is_permit,
src, a->src_ip_prefix_len,
dst, a->dst_ip_prefix_len,
a->proto,
a->srcport_or_icmptype_first, a->srcport_or_icmptype_last,
a->dstport_or_icmpcode_first, a->dstport_or_icmpcode_last,
a->tcp_flags_mask, a->tcp_flags_value);
a->tcp_flags_value, a->tcp_flags_mask);
return(out);
}
@ -326,6 +326,7 @@ static int api_acl_add_replace (vat_main_t * vam)
vl_api_acl_rule_t *rules = 0;
int rule_idx = 0;
int n_rules = 0;
int n_rules_override = -1;
u32 proto = 0;
u32 port1 = 0;
u32 port2 = 0;
@ -363,6 +364,10 @@ static int api_acl_add_replace (vat_main_t * vam)
vec_validate_acl_rules(rules, rule_idx);
rules[rule_idx].is_permit = 1;
}
else if (unformat (i, "count %d", &n_rules_override))
{
/* we will use this later */
}
else if (unformat (i, "action %d", &action))
{
vec_validate_acl_rules(rules, rule_idx);
@ -430,6 +435,12 @@ static int api_acl_add_replace (vat_main_t * vam)
rules[rule_idx].tcp_flags_value = tcpflags;
rules[rule_idx].tcp_flags_mask = tcpmask;
}
else if (unformat (i, "tcpflags %d mask %d", &tcpflags, &tcpmask))
{
vec_validate_acl_rules(rules, rule_idx);
rules[rule_idx].tcp_flags_value = tcpflags;
rules[rule_idx].tcp_flags_mask = tcpmask;
}
else if (unformat (i, "proto %d", &proto))
{
vec_validate_acl_rules(rules, rule_idx);
@ -455,6 +466,9 @@ static int api_acl_add_replace (vat_main_t * vam)
else
n_rules = 0;
if (n_rules_override >= 0)
n_rules = n_rules_override;
msg_size += n_rules*sizeof(rules[0]);
mp = vl_msg_api_alloc_as_if_client(msg_size);
@ -812,6 +826,7 @@ static int api_macip_acl_add (vat_main_t * vam)
vl_api_macip_acl_rule_t *rules = 0;
int rule_idx = 0;
int n_rules = 0;
int n_rules_override = -1;
u32 src_prefix_length = 0;
u32 action = 0;
ip4_address_t src_v4address;
@ -843,6 +858,10 @@ static int api_macip_acl_add (vat_main_t * vam)
vec_validate_macip_acl_rules(rules, rule_idx);
rules[rule_idx].is_permit = 0;
}
else if (unformat (i, "count %d", &n_rules_override))
{
/* we will use this later */
}
else if (unformat (i, "action %d", &action))
{
vec_validate_macip_acl_rules(rules, rule_idx);
@ -856,6 +875,10 @@ static int api_macip_acl_add (vat_main_t * vam)
rules[rule_idx].src_ip_prefix_len = src_prefix_length;
rules[rule_idx].is_ipv6 = 0;
}
else if (unformat (i, "src"))
{
/* Everything in MACIP is "source" but allow this verbosity */
}
else if (unformat (i, "ip %U/%d",
unformat_ip6_address, &src_v6address, &src_prefix_length))
{
@ -897,6 +920,9 @@ static int api_macip_acl_add (vat_main_t * vam)
else
n_rules = 0;
if (n_rules_override >= 0)
n_rules = n_rules_override;
msg_size += n_rules*sizeof(rules[0]);
mp = vl_msg_api_alloc_as_if_client(msg_size);

View File

@ -191,7 +191,21 @@ acl_match_5tuple (acl_main_t * am, u32 acl_index, fa_5tuple_t * pkt_5tuple,
{
if (pkt_5tuple->l4.proto != r->proto)
continue;
/* A sanity check just to ensure what we jave just matched was a valid L4 extracted from the packet */
if (PREDICT_FALSE (pkt_5tuple->pkt.is_nonfirst_fragment &&
am->l4_match_nonfirst_fragment))
{
/* non-initial fragment with frag match configured - match this rule */
*trace_bitmap |= 0x80000000;
*r_action = r->is_permit;
if (r_acl_match_p)
*r_acl_match_p = acl_index;
if (r_rule_match_p)
*r_rule_match_p = i;
return 1;
}
/* A sanity check just to ensure we are about to match the ports extracted from the packet */
if (PREDICT_FALSE (!pkt_5tuple->pkt.l4_valid))
continue;
@ -312,6 +326,10 @@ acl_fill_5tuple (acl_main_t * am, vlib_buffer_t * b0, int is_ip6,
l3_offset = 0;
}
/* key[0..3] contains src/dst address and is cleared/set below */
/* Remainder of the key and per-packet non-key data */
p5tuple_pkt->kv.key[4] = 0;
p5tuple_pkt->kv.value = 0;
if (is_ip6)
{
@ -333,12 +351,33 @@ acl_fill_5tuple (acl_main_t * am, vlib_buffer_t * b0, int is_ip6,
int need_skip_eh = clib_bitmap_get (am->fa_ipv6_known_eh_bitmap, proto);
if (PREDICT_FALSE (need_skip_eh))
{
/* FIXME: add fragment header special handling. Currently causes treated as unknown header. */
while (need_skip_eh && offset_within_packet (b0, l4_offset))
{
u8 nwords = *(u8 *) get_ptr_to_offset (b0, 1 + l4_offset);
proto = *(u8 *) get_ptr_to_offset (b0, l4_offset);
l4_offset += 8 * (1 + (u16) nwords);
/* Fragment header needs special handling */
if (PREDICT_FALSE(ACL_EH_FRAGMENT == proto))
{
proto = *(u8 *) get_ptr_to_offset (b0, l4_offset);
u16 frag_offset;
clib_memcpy (&frag_offset, get_ptr_to_offset (b0, 2 + l4_offset), sizeof(frag_offset));
frag_offset = ntohs(frag_offset) >> 3;
if (frag_offset)
{
p5tuple_pkt->pkt.is_nonfirst_fragment = 1;
/* invalidate L4 offset so we don't try to find L4 info */
l4_offset += b0->current_length;
}
else
{
/* First fragment: skip the frag header and move on. */
l4_offset += 8;
}
}
else
{
u8 nwords = *(u8 *) get_ptr_to_offset (b0, 1 + l4_offset);
proto = *(u8 *) get_ptr_to_offset (b0, l4_offset);
l4_offset += 8 * (1 + (u16) nwords);
}
#ifdef FA_NODE_VERBOSE_DEBUG
clib_warning ("ACL_FA_NODE_DBG: new proto: %d, new offset: %d",
proto, l4_offset);
@ -369,13 +408,26 @@ acl_fill_5tuple (acl_main_t * am, vlib_buffer_t * b0, int is_ip6,
offsetof (ip4_header_t,
protocol) + l3_offset);
l4_offset = l3_offset + sizeof (ip4_header_t);
u16 flags_and_fragment_offset;
clib_memcpy (&flags_and_fragment_offset,
get_ptr_to_offset (b0,
offsetof (ip4_header_t,
flags_and_fragment_offset)) + l3_offset,
sizeof(flags_and_fragment_offset));
flags_and_fragment_offset = ntohs (flags_and_fragment_offset);
/* non-initial fragments have non-zero offset */
if ((PREDICT_FALSE(0xfff & flags_and_fragment_offset)))
{
p5tuple_pkt->pkt.is_nonfirst_fragment = 1;
/* invalidate L4 offset so we don't try to find L4 info */
l4_offset += b0->current_length;
}
}
/* Remainder of the key and per-packet non-key data */
p5tuple_pkt->kv.key[4] = 0;
p5tuple_pkt->kv.value = 0;
p5tuple_pkt->l4.proto = proto;
if (PREDICT_TRUE (offset_within_packet (b0, l4_offset)))
{
p5tuple_pkt->l4.proto = proto;
p5tuple_pkt->pkt.l4_valid = 1;
if (icmp_protos[is_ip6] == proto)
{
@ -533,6 +585,10 @@ acl_fa_conn_list_add_session (acl_main_t * am, u32 sess_id)
if (~0 == am->fa_conn_list_head[list_id]) {
am->fa_conn_list_head[list_id] = sess_id;
/* If it is a first conn in any list, kick off the cleaner */
vlib_process_signal_event (am->vlib_main, am->fa_cleaner_node_index,
ACL_FA_CLEANER_RESCHEDULE, 0);
}
}
@ -556,7 +612,7 @@ acl_fa_conn_list_delete_session (acl_main_t *am, u32 sess_id)
am->fa_conn_list_head[sess->link_list_id] = sess->link_next_idx;
}
if (am->fa_conn_list_tail[sess->link_list_id] == sess_id) {
am->fa_conn_list_tail[sess->link_list_id] = sess->link_next_idx;
am->fa_conn_list_tail[sess->link_list_id] = sess->link_prev_idx;
}
}
@ -982,14 +1038,6 @@ acl_out_ip4_fa_node_fn (vlib_main_t * vm,
/* *INDENT-OFF* */
#define foreach_acl_fa_cleaner_error \
_(EVENT_CYCLE, "event processing cycle") \
_(TIMER_RESTARTED, "restarted session timers") \
_(DELETED_SESSIONS, "deleted sessions") \
_(ALREADY_DELETED, "timer event for already deleted session") \
_(DELETE_BY_SW_IF_INDEX, "delete by sw_if_index event") \
_(DELETE_BY_SW_IF_INDEX_OK, "delete by sw_if_index completed ok") \
_(WAIT_WITHOUT_TIMEOUT, "process waits without timeout") \
_(WAIT_WITH_TIMEOUT, "process waits with timeout") \
_(UNKNOWN_EVENT, "unknown event received") \
/* end of errors */
@ -1067,7 +1115,7 @@ acl_fa_session_cleaner_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
f64 cpu_cps = vm->clib_time.clocks_per_second;
u64 next_expire;
/* We should call timer wheel at least twice a second */
u64 max_timer_wait_interval = cpu_cps / 2;
u64 max_timer_wait_interval = cpu_cps / 2;
am->fa_current_cleaner_timer_wait_interval = max_timer_wait_interval;
u32 *expired = NULL;
@ -1079,10 +1127,24 @@ acl_fa_session_cleaner_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
{
u32 count_deleted_sessions = 0;
u32 count_already_deleted = 0;
u32 count_timer_restarted = 0;
now = clib_cpu_time_now ();
next_expire = now + am->fa_current_cleaner_timer_wait_interval;
int has_pending_conns = 0;
u8 tt;
for(tt = 0; tt < ACL_N_TIMEOUTS; tt++)
{
if (~0 != am->fa_conn_list_head[tt])
has_pending_conns = 1;
}
/* If no pending connections then no point in timing out */
if (!has_pending_conns)
{
am->fa_cleaner_cnt_wait_without_timeout++;
(void) vlib_process_wait_for_event (vm);
event_type = vlib_process_get_events (vm, &event_data);
}
else
{
f64 timeout = ((i64) next_expire - (i64) now) / cpu_cps;
if (timeout <= 0)
@ -1095,11 +1157,7 @@ acl_fa_session_cleaner_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
/* Timing wheel code is happier if it is called regularly */
if (timeout > 0.5)
timeout = 0.5;
vlib_node_increment_counter (vm,
acl_fa_session_cleaner_process_node.
index,
ACL_FA_CLEANER_ERROR_WAIT_WITH_TIMEOUT,
1);
am->fa_cleaner_cnt_wait_with_timeout++;
(void) vlib_process_wait_for_event_or_clock (vm, timeout);
event_type = vlib_process_get_events (vm, &event_data);
}
@ -1119,11 +1177,7 @@ acl_fa_session_cleaner_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
uword *sw_if_index0;
vec_foreach (sw_if_index0, event_data)
{
vlib_node_increment_counter (vm,
acl_fa_session_cleaner_process_node.
index,
ACL_FA_CLEANER_ERROR_DELETE_BY_SW_IF_INDEX,
1);
am->fa_cleaner_cnt_delete_by_sw_index++;
#ifdef FA_NODE_VERBOSE_DEBUG
clib_warning
("ACL_FA_NODE_CLEAN: ACL_FA_CLEANER_DELETE_BY_SW_IF_INDEX: %d",
@ -1134,11 +1188,7 @@ acl_fa_session_cleaner_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
acl_fa_clean_sessions_by_sw_if_index (am, *sw_if_index0,
&count);
count_deleted_sessions += count;
vlib_node_increment_counter (vm,
acl_fa_session_cleaner_process_node.
index,
ACL_FA_CLEANER_ERROR_DELETE_BY_SW_IF_INDEX_OK,
result);
am->fa_cleaner_cnt_delete_by_sw_index_ok += result;
}
}
break;
@ -1147,17 +1197,21 @@ acl_fa_session_cleaner_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
clib_warning ("ACL plugin connection cleaner: unknown event %u",
event_type);
#endif
vlib_node_increment_counter (vm,
acl_fa_session_cleaner_process_node.
index,
ACL_FA_CLEANER_ERROR_UNKNOWN_EVENT, 1);
vlib_node_increment_counter (vm,
acl_fa_session_cleaner_process_node.
index,
ACL_FA_CLEANER_ERROR_UNKNOWN_EVENT, 1);
am->fa_cleaner_cnt_unknown_event++;
break;
}
{
u8 tt = 0;
for(tt = 0; tt < ACL_N_TIMEOUTS; tt++) {
while((vec_len(expired) < 2*am->fa_max_deleted_sessions_per_interval) && (~0 != am->fa_conn_list_head[tt]) && (acl_fa_conn_has_timed_out(am, now, am->fa_conn_list_head[tt]))) {
while((vec_len(expired) < 2*am->fa_max_deleted_sessions_per_interval)
&& (~0 != am->fa_conn_list_head[tt])
&& (acl_fa_conn_has_timed_out(am, now,
am->fa_conn_list_head[tt]))) {
u32 sess_id = am->fa_conn_list_head[tt];
vec_add1(expired, sess_id);
acl_fa_conn_list_delete_session(am, sess_id);
@ -1165,7 +1219,6 @@ acl_fa_session_cleaner_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
}
}
u32 *psid = NULL;
vec_foreach (psid, expired)
{
@ -1181,15 +1234,22 @@ acl_fa_session_cleaner_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
/* clib_warning ("ACL_FA_NODE_CLEAN: Restarting timer for session %d",
(int) session_index); */
/* Pretend we did this in the past, at last_active moment */
count_timer_restarted++;
/* There was activity on the session, so the idle timeout
has not passed. Enqueue for another time period. */
acl_fa_conn_list_add_session(am, session_index);
/* FIXME: When/if moving to timer wheel,
pretend we did this in the past,
at last_active moment, so the timer is accurate */
am->fa_cleaner_cnt_timer_restarted++;
}
else
{
/* clib_warning ("ACL_FA_NODE_CLEAN: Deleting session %d",
(int) session_index); */
acl_fa_delete_session (am, sw_if_index, session_index);
count_deleted_sessions++;
count_deleted_sessions++;
}
}
else
@ -1210,22 +1270,9 @@ acl_fa_session_cleaner_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
if (am->fa_current_cleaner_timer_wait_interval < max_timer_wait_interval)
am->fa_current_cleaner_timer_wait_interval += cpu_cps * am->fa_cleaner_wait_time_increment;
}
vlib_node_increment_counter (vm,
acl_fa_session_cleaner_process_node.index,
ACL_FA_CLEANER_ERROR_EVENT_CYCLE, 1);
vlib_node_increment_counter (vm,
acl_fa_session_cleaner_process_node.index,
ACL_FA_CLEANER_ERROR_TIMER_RESTARTED,
count_timer_restarted);
vlib_node_increment_counter (vm,
acl_fa_session_cleaner_process_node.index,
ACL_FA_CLEANER_ERROR_DELETED_SESSIONS,
count_deleted_sessions);
vlib_node_increment_counter (vm,
acl_fa_session_cleaner_process_node.index,
ACL_FA_CLEANER_ERROR_ALREADY_DELETED,
count_already_deleted);
am->fa_cleaner_cnt_event_cycles++;
am->fa_cleaner_cnt_deleted_sessions += count_deleted_sessions;
am->fa_cleaner_cnt_already_deleted += count_already_deleted;
}
/* NOT REACHED */
return 0;

View File

@ -22,10 +22,12 @@
typedef union {
u64 as_u64;
struct {
u8 tcp_flags_valid;
u8 tcp_flags;
u8 is_input;
u8 l4_valid;
u8 tcp_flags_valid:1;
u8 is_input:1;
u8 l4_valid:1;
u8 is_nonfirst_fragment:1;
u8 flags_reserved:4;
};
} fa_packet_info_t;

File diff suppressed because it is too large Load Diff

View File

@ -419,56 +419,35 @@ dpdk_flag_change (vnet_main_t * vnm, vnet_hw_interface_t * hi, u32 flags)
}
else if (ETHERNET_INTERFACE_FLAG_CONFIG_MTU (flags))
{
/*
* DAW-FIXME: The Cisco VIC firmware does not provide an api for a
* driver to dynamically change the mtu. If/when the
* VIC firmware gets fixed, then this should be removed.
*/
if (xd->pmd == VNET_DPDK_PMD_ENIC)
int rv;
xd->port_conf.rxmode.max_rx_pkt_len = hi->max_packet_bytes;
if (xd->flags & DPDK_DEVICE_FLAG_ADMIN_UP)
rte_eth_dev_stop (xd->device_index);
rv = rte_eth_dev_configure
(xd->device_index, xd->rx_q_used, xd->tx_q_used, &xd->port_conf);
if (rv < 0)
vlib_cli_output (vlib_get_main (),
"rte_eth_dev_configure[%d]: err %d",
xd->device_index, rv);
rte_eth_dev_set_mtu (xd->device_index, hi->max_packet_bytes);
if (xd->flags & DPDK_DEVICE_FLAG_ADMIN_UP)
{
struct rte_eth_dev_info dev_info;
/*
* Restore mtu to what has been set by CIMC in the firmware cfg.
*/
rte_eth_dev_info_get (xd->device_index, &dev_info);
hi->max_packet_bytes = dev_info.max_rx_pktlen;
vlib_cli_output (vlib_get_main (),
"Cisco VIC mtu can only be changed "
"using CIMC then rebooting the server!");
}
else
{
int rv;
xd->port_conf.rxmode.max_rx_pkt_len = hi->max_packet_bytes;
if (xd->flags & DPDK_DEVICE_FLAG_ADMIN_UP)
rte_eth_dev_stop (xd->device_index);
rv = rte_eth_dev_configure
(xd->device_index, xd->rx_q_used, xd->tx_q_used, &xd->port_conf);
int rv = rte_eth_dev_start (xd->device_index);
if (!rv && xd->default_mac_address)
rv = rte_eth_dev_default_mac_addr_set (xd->device_index,
(struct ether_addr *)
xd->default_mac_address);
if (rv < 0)
vlib_cli_output (vlib_get_main (),
"rte_eth_dev_configure[%d]: err %d",
xd->device_index, rv);
rte_eth_dev_set_mtu (xd->device_index, hi->max_packet_bytes);
if (xd->flags & DPDK_DEVICE_FLAG_ADMIN_UP)
{
int rv = rte_eth_dev_start (xd->device_index);
if (!rv && xd->default_mac_address)
rv = rte_eth_dev_default_mac_addr_set (xd->device_index,
(struct ether_addr *)
xd->default_mac_address);
if (rv < 0)
clib_warning ("rte_eth_dev_start %d returned %d",
xd->device_index, rv);
}
clib_warning ("rte_eth_dev_start %d returned %d",
xd->device_index, rv);
}
}
return old;
}
@ -655,11 +634,13 @@ dpdk_lib_init (dpdk_main_t * dm)
{
xd->tx_conf.txq_flags |= ETH_TXQ_FLAGS_NOMULTSEGS;
port_conf_template.rxmode.jumbo_frame = 0;
port_conf_template.rxmode.enable_scatter = 0;
}
else
{
xd->tx_conf.txq_flags &= ~ETH_TXQ_FLAGS_NOMULTSEGS;
port_conf_template.rxmode.jumbo_frame = 1;
port_conf_template.rxmode.enable_scatter = 1;
xd->flags |= DPDK_DEVICE_FLAG_MAYBE_MULTISEG;
}
@ -1065,16 +1046,13 @@ dpdk_lib_init (dpdk_main_t * dm)
hi = vnet_get_hw_interface (dm->vnet_main, xd->vlib_hw_if_index);
/*
* DAW-FIXME: The Cisco VIC firmware does not provide an api for a
* driver to dynamically change the mtu. If/when the
* VIC firmware gets fixed, then this should be removed.
* For cisco VIC vNIC, set default to VLAN strip enabled, unless
* specified otherwise in the startup config.
* For other NICs default to VLAN strip disabled, unless specified
* otherwis in the startup config.
*/
if (xd->pmd == VNET_DPDK_PMD_ENIC)
{
/*
* Initialize mtu to what has been set by CIMC in the firmware cfg.
*/
hi->max_packet_bytes = dev_info.max_rx_pktlen;
if (devconf->vlan_strip_offload != DPDK_DEVICE_VLAN_STRIP_OFF)
vlan_strip = 1; /* remove vlan tag from VIC port by default */
else

View File

@ -736,8 +736,7 @@ ila_add_del_entry (ila_add_del_entry_args_t * args)
fib_table_entry_special_add(0,
&next_hop,
FIB_SOURCE_RR,
FIB_ENTRY_FLAG_NONE,
ADJ_INDEX_INVALID);
FIB_ENTRY_FLAG_NONE);
e->next_hop_child_index =
fib_entry_child_add(e->next_hop_fib_entry_index,
ila_fib_node_type,

View File

@ -0,0 +1,101 @@
## IOAM Analyser for IPv6 {#ioam_analyser_doc}
IOAM Analyser for IPv6 does
- Analysing iOAM records and aggregating statistics
- Export the aggregated statistics over IP-FIX to external collector.
Following statistics are collected and exported per IOAM flow:
- All the Paths available for the flow : Collected using IOAM Trace.
- Delay
- POT data: No of packets In Policy and Out of Policy.
- Packet loss count
- Reordered Packet count
- Duplicate Packet count
This feature can work on IOAM decapsulating node or as a standalone external analyser.
## Configuration
Below command can be used to configure a VPP node as IOAM analyser:
set ioam analyse [export-ipfix-collector] [disable] [listen-ipfix]
- export-ipfix-collector : This keyword instructs VPP to export the IOAM
analysis data to be exported to an external collector via IP-Fix. Note
that IP-Fix collector information has to be configured using the below
command:
set ipfix exporter collector <Remote IP Address> src <Local IP address>
- listen-ipfix : This keyword instructs VPP node to listen to IP-Fix port
4739 to receive RAW IOAM records exported by using IOAM Export plugin and
analyse IOAM records.
- disable : This keyword is used to instruct VPP to stop analysing IOAM.
Example1 : To use VPP as IOAM Analyser on IOAM decapsulating node and export.
set ipam analyse export-ipfix-collector
set ipfix exporter collector 172.16.1.254 src 172.16.1.229
Above commands when configured on a IOAM Decapsulating node will analyse
all the IOAM data before Decap, aggregate statistics and export them to
node with IP address 172.16.1.254 via IP-Fix.
Example2 : To use VPP as a standalone IOAM Analyser and export.
set ipam analyse export-ipfix-collector listen-ipfix
set ipfix exporter collector 172.16.1.254 src 172.16.1.229
Above commands when configured on a VPP node will listen on IP-Fix
port 4739 for IP-Fix records containing IOAM Raw data aggregate
statistics and export them to node with IP address 172.16.1.254 via IP-Fix.
## Operational data
For checking the operational data of VPP IOAM analyser below command needs to be used:
show ioam analyse
Example:
vpp# show ioam analyse
iOAM Analyse Information:
Flow Number: 1
pkt_sent : 400
pkt_counter : 400
bytes_counter : 458700
Trace data:
pkt_sent : 400
pkt_counter : 100
bytes_counter : 458700
Trace data:
path_map:
node_id: 0x1, ingress_if: 1, egress_if: 2, state:UP
node_id: 0x2, ingress_if: 0, egress_if: 2, state:UP
node_id: 0x3, ingress_if: 3, egress_if: 0, state:UP
pkt_counter: 200
bytes_counter: 229350
min_delay: 10
max_delay: 50
mean_delay: 15
node_id: 0x1, ingress_if: 1, egress_if: 2, state:UP
node_id: 0x4, ingress_if: 10, egress_if: 12, state:UP
node_id: 0x3, ingress_if: 3, egress_if: 0, state:UP
pkt_counter: 200
bytes_counter: 229350
min_delay: 19
max_delay: 100
mean_delay: 35
POT data:
sfc_validated_count : 200
sfc_invalidated_count : 200
Seqno Data:
RX Packets : 400
Lost Packets : 0
Duplicate Packets : 0
Reordered Packets : 0

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More