This patch set adds an L3 & L2 VPN application that makes use of the VPN and Encap SAFIs. This code is currently used to support IETF NVO3 style operation. In NVO3 terminology it provides the Network Virtualization Authority (NVA) and the ability to import/export IP prefixes and MAC addresses from Network Virtualization Edges (NVEs). The code supports per-NVE tables (VRFs/VSIs).
The NVE-NVA protocol used to communicate routing and Ethernet / Layer 2 (L2) forwarding information between NVAs and NVEs is referred to as the Remote Forwarder Protocol (RFP). OpenFlow is an example RFP. RFPs are integrated with BGP via the RF API contained in the new "rfapi" BGP sub-directory. Currently, only a simple example RFP is included in Quagga. Developers may use this example as a starting point to integrate Quagga with an RFP of their choosing, e.g., OpenFlow. The RFAPI code also supports the ability to import/export of routing information between VNC and customer edge routers (CEs) operating within a virtual network. Import/export may take place between BGP views or to the default zebra VRF. BGP, with IP VPNs and Tunnel Encapsulation, is used to distribute VPN information between NVAs. BGP based IP VPN support is defined in RFC4364, BGP/MPLS IP Virtual Private Networks (VPNs), and RFC4659, BGP-MPLS IP Virtual Private Network (VPN) Extension for IPv6 VPN . Use of both the Encapsulation Subsequent Address Family Identifier (SAFI) and the Tunnel Encapsulation Attribute, RFC5512, The BGP Encapsulation Subsequent Address Family Identifier (SAFI) and the BGP Tunnel Encapsulation Attribute, are supported. The code is tunnely type agnostic. MAC address distribution does not follow any standard BGB encoding, although it was inspired by the early IETF EVPN concepts. The intent is that the RF API would not need to change with support of standards-based EVPN. The feature is conditionally compiled and disabled by default. Use the --enable-bgp-vnc configure option to enable. Collectively, we refer to this feature as Virtual Network Control, or VNC. The majority of this code was authored by G. Paul Ziemba <pa...@labn.net>. This patch set is also available at https://github.com/LabNConsulting/quagga-vnc/tree/patches/R1.0.20160315+vnc/v2 The following patches are included in the patch set. basic rel1.0 cleanup: [PATCH 01/10] lib: fix memory leak in zprivs_caps_init [PATCH 02/10] lib/vty: silence clang -Wparentheses-equality [PATCH 03/10] bgpd: cleanup clang uninitialized variable warning debug/testing support: [PATCH 04/10] bgp: add "debug bgp allow-martians" next hops and [PATCH 05/10] bgpd: add -S / --skip_runas flag to not change [PATCH 06/10] lib: dump memory stats on core some standalone lib changes in support of vnc [PATCH 07/10] lib: add skiplist [PATCH 08/10] lib: add route_table_get_default_delegate [PATCH 09/10] lib: add AF_ETHERNET/AFI_ETHER vnc/rfapi: [PATCH 10/10] bgpd: add L3/L2VPN Virtual Network Control feature overall: Makefile.am | 5 +- bgpd/Makefile.am | 77 +- bgpd/bgp_attr.c | 90 +- bgpd/bgp_attr.h | 18 + bgpd/bgp_debug.c | 58 + bgpd/bgp_debug.h | 3 + bgpd/bgp_ecommunity.c | 4 +- bgpd/bgp_ecommunity.h | 3 + bgpd/bgp_encap.c | 12 + bgpd/bgp_main.c | 20 +- bgpd/bgp_mplsvpn.c | 73 +- bgpd/bgp_mplsvpn.h | 29 + bgpd/bgp_nexthop.h | 2 + bgpd/bgp_open.c | 2 + bgpd/bgp_route.c | 255 +- bgpd/bgp_route.h | 39 + bgpd/bgp_routemap.c | 7 + bgpd/bgp_vnc_types.h | 41 + bgpd/bgp_zebra.c | 16 + bgpd/bgpd.c | 31 +- bgpd/bgpd.conf.vnc.sample | 89 + bgpd/bgpd.h | 16 + bgpd/rfapi/bgp_rfapi_cfg.c | 4665 +++++++++++++++++++++++++++ bgpd/rfapi/bgp_rfapi_cfg.h | 312 ++ bgpd/rfapi/rfapi.c | 4405 ++++++++++++++++++++++++++ bgpd/rfapi/rfapi.h | 982 ++++++ bgpd/rfapi/rfapi_ap.c | 629 ++++ bgpd/rfapi/rfapi_ap.h | 99 + bgpd/rfapi/rfapi_backend.h | 92 + bgpd/rfapi/rfapi_descriptor_rfp_utils.c | 136 + bgpd/rfapi/rfapi_descriptor_rfp_utils.h | 39 + bgpd/rfapi/rfapi_encap_tlv.c | 812 +++++ bgpd/rfapi/rfapi_encap_tlv.h | 43 + bgpd/rfapi/rfapi_import.c | 5064 ++++++++++++++++++++++++++++++ bgpd/rfapi/rfapi_import.h | 275 ++ bgpd/rfapi/rfapi_monitor.c | 1644 ++++++++++ bgpd/rfapi/rfapi_monitor.h | 215 ++ bgpd/rfapi/rfapi_nve_addr.c | 179 ++ bgpd/rfapi/rfapi_nve_addr.h | 43 + bgpd/rfapi/rfapi_private.h | 426 +++ bgpd/rfapi/rfapi_rib.c | 2436 ++++++++++++++ bgpd/rfapi/rfapi_rib.h | 145 + bgpd/rfapi/rfapi_vty.c | 5037 +++++++++++++++++++++++++++++ bgpd/rfapi/rfapi_vty.h | 223 ++ bgpd/rfapi/vnc_debug.c | 230 ++ bgpd/rfapi/vnc_debug.h | 49 + bgpd/rfapi/vnc_export_bgp.c | 2204 +++++++++++++ bgpd/rfapi/vnc_export_bgp.h | 42 + bgpd/rfapi/vnc_export_bgp_p.h | 95 + bgpd/rfapi/vnc_export_table.c | 215 ++ bgpd/rfapi/vnc_export_table.h | 85 + bgpd/rfapi/vnc_import_bgp.c | 3173 +++++++++++++++++++ bgpd/rfapi/vnc_import_bgp.h | 93 + bgpd/rfapi/vnc_import_bgp_p.h | 51 + bgpd/rfapi/vnc_zebra.c | 1141 +++++++ bgpd/rfapi/vnc_zebra.h | 67 + bgpd/rfp-example/librfp/Makefile.am | 39 + bgpd/rfp-example/librfp/rfp.h | 31 + bgpd/rfp-example/librfp/rfp_example.c | 286 ++ bgpd/rfp-example/librfp/rfp_internal.h | 29 + bgpd/rfp-example/rfptest/Makefile.am | 51 + bgpd/rfp-example/rfptest/rfptest.c | 32 + bgpd/rfp-example/rfptest/rfptest.h | 26 + configure.ac | 35 + doc/Makefile.am | 33 +- doc/bgpd.8 | 5 +- doc/bgpd.texi | 5 + doc/fig-vnc-commercial-route-reflector.dia | 794 +++++ doc/fig-vnc-commercial-route-reflector.png | Bin 0 -> 50984 bytes doc/fig-vnc-commercial-route-reflector.txt | 0 doc/fig-vnc-gw-rr.dia | 1155 +++++++ doc/fig-vnc-gw-rr.png | Bin 0 -> 80004 bytes doc/fig-vnc-gw-rr.txt | 0 doc/fig-vnc-gw.dia | 1058 +++++++ doc/fig-vnc-gw.png | Bin 0 -> 67376 bytes doc/fig-vnc-gw.txt | 0 doc/fig-vnc-mesh.dia | 1071 +++++++ doc/fig-vnc-mesh.png | Bin 0 -> 61028 bytes doc/fig-vnc-mesh.txt | 0 doc/fig-vnc-quagga-route-reflector.dia | 763 +++++ doc/fig-vnc-quagga-route-reflector.png | Bin 0 -> 49978 bytes doc/fig-vnc-quagga-route-reflector.txt | 0 doc/fig-vnc-redundant-route-reflectors.dia | 871 +++++ doc/fig-vnc-redundant-route-reflectors.png | Bin 0 -> 75353 bytes doc/fig-vnc-redundant-route-reflectors.txt | 0 doc/ospfd.texi | 4 + doc/quagga.texi | 8 +- doc/routemap.texi | 2 +- doc/vnc.texi | 1584 ++++++++++ lib/Makefile.am | 6 +- lib/command.c | 10 + lib/command.h | 5 + lib/log.c | 54 +- lib/log.h | 7 + lib/memtypes.c | 42 + lib/plist.c | 5 + lib/prefix.c | 114 +- lib/prefix.h | 43 + lib/privs.c | 7 + lib/route_types.txt | 14 +- lib/sigevent.c | 2 + lib/skiplist.c | 668 ++++ lib/skiplist.h | 144 + lib/table.c | 6 + lib/table.h | 3 + lib/vty.c | 5 +- lib/zebra.h | 9 +- redhat/quagga.spec.in | 6 + ripd/rip_zebra.c | 1 + ripngd/ripng_zebra.c | 1 + tests/Makefile.am | 17 +- vtysh/Makefile.am | 22 +- vtysh/extract.pl.in | 8 +- vtysh/vtysh.c | 101 + vtysh/vtysh_config.c | 9 + zebra/zserv.c | 6 + 116 files changed, 45373 insertions(+), 60 deletions(-) _______________________________________________ Quagga-dev mailing list Quagga-dev@lists.quagga.net https://lists.quagga.net/mailman/listinfo/quagga-dev