.. _vpp17.04:

###############################
Features for Release VPP 17.04
###############################

This section lists those features that became available in VPP Release 17.04:

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 the Python API binding function names, the VPP API methods are put into a separate proxy object https://gerrit.fd.io/r/#/c/5570/ 

  The api methods are now referenced as: vpp_handle = VPP(jsonfiles) vpp_handle.connect(...) vpp = vpp_handle.api vpp.show_version() vpp_handle.disconnect()

  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/>`_ 


Known issues
---------------

For the full list of issues please refer to fd.io `JIRA <https://jira.fd.io/>`_.

Issues fixed
--------------

For the full list of fixed issues please refer to:

* fd.io `JIRA <https://jira.fd.io/>`_
* git `commit log <https://git.fd.io/vpp/log/?h=stable/1704>`_


