# Release Notes {#release_notes} * @subpage release_notes_1801 * @subpage release_notes_1710 * @subpage release_notes_1707 * @subpage release_notes_1704 * @subpage release_notes_17011 * @subpage release_notes_1701 * @subpage release_notes_1609 * @subpage release_notes_1606 @page release_notes_1801 Release notes for VPP 18.01 More than 560 commits since the 17.10 release. ## Features - Infrastructure - DPDK 17.11 - TCP Checksum Offload - Arm64/Arm-v8 support - SUSE packaging - bihash_vec8_8 variant - PCI rework to support VFIO - chi-squared test calculator - SNAT / NAT - One armed NAT - Twice NAT44 - NAT hairpinning rework - NAT64 multi-thread - NAT64 IPFix - NAT64 Fragmentation - NAT: DS-Lite - Remove old SNAT API - ACL-based NAT - VNET - DNS name resolver - BIER - GENEVE Tunnel - IPSec Openssl 1.1.0 api support - FIB improvements - tap v2 - API - VPP stats (Broadcast & Multicast support) - SR MPLS - VPP Object Model (VOM) - Host Stack - VPP TCP Stack scale / congestion improvements - Refactor UDP - Namespace support - Session rules table - VPP Comms Library (VCL) improvements - ACL - ACL stats - Plugins - Kube-proxy - L2 Emulation - Memif ## 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/1801) ## API changes Message Name Result af_packet_set_l4_cksum_offload definition changed api_versions definition changed app_namespace_add_del definition changed application_attach definition changed bier_disp_entry_add_del definition changed bier_disp_entry_details only in image bier_disp_entry_dump only in image bier_disp_table_add_del definition changed bier_disp_table_details only in image bier_disp_table_dump only in image bier_imp_add definition changed bier_imp_del definition changed bier_imp_details only in image bier_imp_dump only in image bier_route_add_del definition changed bier_route_details only in image bier_route_dump only in image bier_table_add_del definition changed bier_table_details only in image bier_table_dump only in image bind_sock_reply definition changed connect_session_reply definition changed connect_sock definition changed connect_uri definition changed dhcp_proxy_details definition changed dhcp_proxy_set_vss definition changed dns_enable_disable definition changed dns_name_server_add_del definition changed dns_resolve_ip definition changed dns_resolve_name definition changed dslite_add_del_pool_addr_range definition changed dslite_set_aftr_addr definition changed geneve_add_del_tunnel definition changed geneve_tunnel_details only in image geneve_tunnel_dump only in image ip_add_del_route definition changed ip_container_proxy_add_del definition changed ip_mroute_add_del definition changed ip_neighbor_details definition changed ip_punt_police definition changed ip_punt_redirect definition changed ipsec_sa_details only in image ipsec_sa_dump only in image ipsec_sad_add_del_entry definition changed ipsec_tunnel_if_set_key definition changed ipsec_tunnel_if_set_sa definition changed kp_add_del_pod definition changed kp_add_del_vip definition changed kp_conf definition changed l2_emulation definition changed l2_fib_table_details definition changed l2fib_add_del definition changed memclnt_keepalive definition changed memfd_segment_create definition changed mpls_ip_bind_unbind definition changed mpls_route_add_del definition changed nat44_add_del_address_range definition changed nat44_add_del_identity_mapping definition changed nat44_add_del_interface_addr definition changed nat44_add_del_lb_static_mapping definition changed nat44_add_del_static_mapping definition changed nat44_address_details definition changed nat44_del_session definition changed nat44_forwarding_enable_disable definition changed nat44_forwarding_is_enabled definition changed nat44_identity_mapping_details only in image nat44_identity_mapping_dump only in image nat44_interface_addr_details definition changed nat44_lb_static_mapping_details definition changed nat44_static_mapping_details definition changed nat64_add_del_interface_addr definition changed nat_get_reass definition changed nat_reass_details only in image nat_reass_dump only in image nat_set_reass definition changed reset_vrf definition changed session_rule_add_del definition changed session_rules_details only in image session_rules_dump only in image snat_add_address_range definition changed snat_add_del_interface_addr definition changed snat_add_det_map definition changed snat_add_static_mapping definition changed snat_address_details only in file snat_address_dump only in file snat_control_ping definition changed snat_det_close_session_in definition changed snat_det_close_session_out definition changed snat_det_forward definition changed snat_det_get_timeouts definition changed snat_det_map_details only in file snat_det_map_dump only in file snat_det_reverse definition changed snat_det_session_details only in file snat_det_session_dump only in file snat_det_set_timeouts definition changed snat_interface_add_del_feature definition changed snat_interface_add_del_output_feature definition changed snat_interface_addr_details only in file snat_interface_addr_dump only in file snat_interface_details only in file snat_interface_dump only in file snat_interface_output_feature_details only in file snat_interface_output_feature_dump only in file snat_ipfix_enable_disable
#!/usr/bin/env python

import unittest
import socket

from framework import VppTestCase, VppTestRunner
from vpp_ip_route import VppIpRoute, VppRoutePath, DpoProto

from scapy.layers.l2 import Ether, Raw
from scapy.layers.inet import IP, UDP, ICMP
from scapy.layers.inet6 import IPv6


class TestMAP(VppTestCase):
    """ MAP Test Case """

    def setUp(self):
        super(TestMAP, self).setUp()

        # create 2 pg interfaces
        self.create_pg_interfaces(range(4))

        # pg0 is 'inside' IPv4
        self.pg0.admin_up()
        self.pg0.config_ip4()
        self.pg0.resolve_arp()

        # pg1 is 'outside' IPv6
        self.pg1.admin_up()
        self.pg1.config_ip6()
        self.pg1.generate_remote_hosts(4)
        self.pg1.configure_ipv6_neighbors()

    def tearDown(self):
        super(TestMAP, self).tearDown()
        for i in self.pg_interfaces:
            i.unconfig_ip4()
            i.unconfig_ip6()
            i.admin_down()

    def send_and_assert_encapped(self, tx, ip6_src, ip6_dst, dmac=None):
        if not dmac:
            dmac = self.pg1.remote_mac

        self.pg0.add_stream(tx)

        self.pg_enable_capture(self.pg_interfaces)
        self.pg_start()

        rx = self.pg1.get_capture(1)
        rx = rx[0]

        self.assertEqual(rx[Ether].dst, dmac)
        self.assertEqual(rx[IP].src, tx[IP].src)
        self.assertEqual(rx[IPv6].src, ip6_src)
        self.assertEqual(rx[IPv6].dst, ip6_dst)

    def test_map_e(self):
        """ MAP-E """

        #
        # Add a route to the MAP-BR
        #
        map_br_pfx = "2001::"
        map_br_pfx_len = 64
        map_route = VppIpRoute(self,
                               map_br_pfx,
                               map_br_pfx_len,
                               [VppRoutePath(self.pg1.remote_ip6,
                                             self.pg1.sw_if_index,
                                             proto=DpoProto.DPO_PROTO_IP6)],
                               is_ip6=1)
        map_route.add_vpp_config()

        #
        # Add a domain that maps from pg0 to pg1
        #
        map_dst = socket.inet_pton(socket.AF_INET6, map_br_pfx)
        map_src = "3001::1"
        map_src_n = socket.inet_pton(socket.AF_INET6, map_src)
        client_pfx = socket.inet_pton(socket.AF_INET, "192.168.0.0")

        self.vapi.map_add_domain(map_dst,
                                 map_br_pfx_len,
                                 map_src_n,
                                 128,
                                 client_pfx,
                                 16)

        #
        # Fire in a v4 packet that will be encapped to the BR
        #
        v4 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
              IP(src=self.pg0.remote_ip4, dst='192.168.1.1') /
              UDP(sport=20000, dport=10000) /
              Raw('\xa5' * 100))

        self.send_and_assert_encapped(v4, map_src, "2001::c0a8:0:0")

        #
        # Fire in a V6 encapped packet.
        #  expect a decapped packet on the inside ip4 link
        #
        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
             IPv6(dst=map_src, src="2001::1") /
             IP(dst=self.pg0.remote_ip4, src='192.168.1.1') /
             UDP(sport=20000, dport=10000) /
             Raw('\xa5' * 100))

        self.pg1.add_stream(p)

        self.pg_enable_capture(self.pg_interfaces)
        self.pg_start()

        rx = self.pg0.get_capture(1)
        rx = rx[0]

        self.assertFalse(rx.haslayer(IPv6))
        self.assertEqual(rx[IP].src, p[IP].src)
        self.assertEqual(rx[IP].dst, p[IP].dst)

        #
        # Pre-resolve. No API for this!!
        #
        self.vapi.ppcli("map params pre-resolve ip6-nh 4001::1")

        self.send_and_assert_no_replies(self.pg0, v4,
                                        "resovled via default route")

        #
        # Add a route to 4001::1. Expect the encapped traffic to be
        # sent via that routes next-hop
        #
        pre_res_route = VppIpRoute(
            self, "4001::1", 128,
            [VppRoutePath(self.pg1.remote_hosts[2].ip6,
                          self.pg1.sw_if_index,
                          proto=DpoProto.DPO_PROTO_IP6)],
            is_ip6=1)
        pre_res_route.add_vpp_config()

        self.send_and_assert_encapped(v4, map_src,
                                      "2001::c0a8:0:0",
                                      dmac=self.pg1.remote_hosts[2].mac)

        #
        # change the route to the pre-solved next-hop
        #
        pre_res_route.modify([VppRoutePath(self.pg1.remote_hosts[3].ip6,
                                           self.pg1.sw_if_index,
                                           proto=DpoProto.DPO_PROTO_IP6)])
        pre_res_route.add_vpp_config()

        self.send_and_assert_encapped(v4, map_src,
                                      "2001::c0a8:0:0",
                                      dmac=self.pg1.remote_hosts[3].mac)

        #
        # cleanup. The test infra's object registry will ensure
        # the route is really gone and thus that the unresolve worked.
        #
        pre_res_route.remove_vpp_config()
        self.vapi.ppcli("map params pre-resolve del ip6-nh 4001::1")

if __name__ == '__main__':
    unittest.main(testRunner=VppTestRunner)
- Documentation - Autogenerated CLI documentation. - Using doxygen to automate API/Node documentation. - [(available online)](https://docs.fd.io/vpp/16.09/) - Resolved all static analysis issues found by Coverity - Beginning of 16.09 cycle: 505 issues. - Release: 0 outstanding issues. ## Known issues Issues in fd.io are tracked in [JIRA](https://jira.fd.io). Issue | Description --- | --- VPP-391 | vpp debug version assert appeared in the process of start VPP-380 | Mapping algorithm compute wrong ea-bits when IPv4 prefix 0.0.0.0/0 VPP-371 | load_one_plugin:63: Loaded plugin: message from vppctl VPP-367 | vpp packages need to depend on specific versions of each other VPP-312 | IP6 FIB gets in indeterminate state by duplicating commands VPP-224 | Lookup-in-vrf can not be set correctly VPP-206 | Fix classify table delete VPP-203 | Fix binary API for reading vpp node graph VPP-147 | Inconsistent behaviour when adding L2 FIB filter entry VPP-99 | VPP doesn't discard DHCPOFFER message with wrong XID ## Issues fixed Issues in fd.io are tracked in [JIRA](https://jira.fd.io). Issue | Description --- | --- VPP-396 | Ubuntu systems Graphviz bug VPP-390 | vpp-lib rpm fails to include *.so symlinks, causing linking problems with out of tree builds VPP-388 | IPSec output feature assumes packets have been ethernet rewritten VPP-385 | ARP for indirect adjacencies not working correctly VPP-361 | Memory leak on delete of VXLAN over IPv6 tunnel VPP-357 | VNI not set correctly when removing LISP fwd entries VPP-349 | sw_interface_vhost_user_dump not working VPP-345 | net/enic: bad L4 checksum ptype set on ICMP packets VPP-340 | MAP-T wrong destination address VPP-330 | Use fifo to store LISP pending map-requests VPP-326 | map_add_domain VAT command: unable to configure domain with mtu parameter VPP-318 | The map_add_domain VAT command accepts invalid arguments VPP-315 | Fix "show vxlan-gpe" issue VPP-310 | Mapping algorithm compute wrong ea-bits VPP-239 | LISP IP forwarding does not tag packets that hit negative mapping entries VPP-235 | Invalid help in VAT for sw_interface_set_l2_bridge VPP-228 | Mapping algorithm sends packet to wrong IPv6 address VPP-214 | vpp-api-test: api_ipsec_sad_add_del_entry: vector "ck" not initialized VPP-200 | VPP - TAP port create problem VPP-189 | Coverity Issues for 16.09 VPP-184 | u16 translating to char ,not short VPP-179 | Adjacency share-count botch VPP-163 | "show ip6 interface" ignores non-global addresses VPP-155 | Netmap: Inconsistency in interface state between "show hardware" and "show interface" VPP-145 | Dynamically compute IP feature ordering based on constraints VPP-137 | VPP sends ARP with wrong requested IP VPP-118 | JVpp: 0 length arrays not handled properly in VPP responses VPP-112 | linux kernel info missing from build log VPP-110 | vxlan encap node should never touch a deleted tunnel VPP-107 | RPM build broken in master VPP-92 | segment routing is not properly filling out the segment list VPP-91 | segment routing add/del tunnel lookup doesn't work VPP-84 | af_packet throws a fatal error on EAGAIN VPP-74 | Clang compile fails due to warning in vlib/unix/cli.c VPP-64 | Top level "make pkg-deb" fails if CDPATH is set in user env. VPP-48 | Traceroute does not terminate when VPP is the target VPP-23 | CLI pager does not gracefully handle lines longer than the terminal width @page release_notes_1606 Release notes for VPP 16.06 The FD.io Project, relentlessly focused on data IO speed and efficiency supporting the creation of high performance, flexible, and scalable software defined infrastructures, announces the availability of the community’s first software release (16.06). In the four months since launching, FD.io has brought together more than 75 developers from 11 different companies including network operators, solution providers chip vendors, and network equipment vendors who are collaborating to enhance and innovate around the Vector Packet Processing (VPP) technology. The FD.io community has quickly formed to grow the number of projects from the initial VPP project to an additional 6 projects addressing a diverse set of requirements and usability across a variety of deployment environments. The 16.06 release brings unprecedented performance: 480Gbps/200mpps with 8 million routes and 2k whitelist entries on standard high volume x86 servers. ## Features In addition to the existing full suite of vswitch/vrouter features, the new 16.06 release adds: * Enhanced Switching and Routing: * IPv6 Segment Routing multicast support. * LISP xTR support. * VXLAN over IPv6 underlay. * Per interface whitelists. * Shared adjacencies in FIB. * New and improved interface support: * Jumbo frame support for vhost-user. * Netmap interface support. * AF_Packet interface support. * Expanded and improved programmability: * Python API bindings. * Enhanced JVPP Java API bindings. * Debugging CLI. * Expanded Hardware and Software Support: * Support for ARM 32 targets including Rasberry Pi single-board computer. * Support for DPDK 16.04.