]> git.proxmox.com Git - mirror_frr.git/commit - bgpd/bgp_vnc_types.h
bgpd: add L3/L2VPN Virtual Network Control feature
authorLou Berger <lberger@labn.net>
Sat, 7 May 2016 18:18:56 +0000 (14:18 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 3 Oct 2016 12:17:02 +0000 (08:17 -0400)
commit65efcfce427e2abb548874ebb1a11a3b2ee7bc17
tree7e1f42c135a093e0e11557fcc991bbf42e5dd208
parent520d2512db8496f9b79b917cb84e36b83465f884
bgpd: add L3/L2VPN Virtual Network Control feature

This feature 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.

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.  For
general background on NVO3 and RFP concepts see [1].  For information on
Openflow see [2].

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 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 zebera 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. MAC address distribution does
not follow any standard BGB encoding, although it was inspired by the
early IETF EVPN concepts.

The feature is conditionally compiled and disabled by default.
Use the --enable-bgp-vnc configure option to enable.

The majority of this code was authored by G. Paul Ziemba
<paulz@labn.net>.

[1] http://tools.ietf.org/html/draft-ietf-nvo3-nve-nva-cp-req
[2] https://www.opennetworking.org/sdn-resources/technical-library

Now includes changes needed to merge with cmaster-next.
106 files changed:
Makefile.am
bgpd/Makefile.am
bgpd/bgp_attr.c
bgpd/bgp_attr.h
bgpd/bgp_ecommunity.c
bgpd/bgp_ecommunity.h
bgpd/bgp_encap.c
bgpd/bgp_encap_tlv.c
bgpd/bgp_encap_types.h
bgpd/bgp_main.c
bgpd/bgp_memory.c
bgpd/bgp_memory.h
bgpd/bgp_mplsvpn.c
bgpd/bgp_mplsvpn.h
bgpd/bgp_nexthop.h
bgpd/bgp_route.c
bgpd/bgp_route.h
bgpd/bgp_routemap.c
bgpd/bgp_vnc_types.h [new file with mode: 0644]
bgpd/bgp_zebra.c
bgpd/bgpd.c
bgpd/bgpd.conf.vnc.sample [new file with mode: 0644]
bgpd/bgpd.h
bgpd/rfapi/bgp_rfapi_cfg.c [new file with mode: 0644]
bgpd/rfapi/bgp_rfapi_cfg.h [new file with mode: 0644]
bgpd/rfapi/rfapi.c [new file with mode: 0644]
bgpd/rfapi/rfapi.h [new file with mode: 0644]
bgpd/rfapi/rfapi_ap.c [new file with mode: 0644]
bgpd/rfapi/rfapi_ap.h [new file with mode: 0644]
bgpd/rfapi/rfapi_backend.h [new file with mode: 0644]
bgpd/rfapi/rfapi_descriptor_rfp_utils.c [new file with mode: 0644]
bgpd/rfapi/rfapi_descriptor_rfp_utils.h [new file with mode: 0644]
bgpd/rfapi/rfapi_encap_tlv.c [new file with mode: 0644]
bgpd/rfapi/rfapi_encap_tlv.h [new file with mode: 0644]
bgpd/rfapi/rfapi_import.c [new file with mode: 0644]
bgpd/rfapi/rfapi_import.h [new file with mode: 0644]
bgpd/rfapi/rfapi_monitor.c [new file with mode: 0644]
bgpd/rfapi/rfapi_monitor.h [new file with mode: 0644]
bgpd/rfapi/rfapi_nve_addr.c [new file with mode: 0644]
bgpd/rfapi/rfapi_nve_addr.h [new file with mode: 0644]
bgpd/rfapi/rfapi_private.h [new file with mode: 0644]
bgpd/rfapi/rfapi_rib.c [new file with mode: 0644]
bgpd/rfapi/rfapi_rib.h [new file with mode: 0644]
bgpd/rfapi/rfapi_vty.c [new file with mode: 0644]
bgpd/rfapi/rfapi_vty.h [new file with mode: 0644]
bgpd/rfapi/vnc_debug.c [new file with mode: 0644]
bgpd/rfapi/vnc_debug.h [new file with mode: 0644]
bgpd/rfapi/vnc_export_bgp.c [new file with mode: 0644]
bgpd/rfapi/vnc_export_bgp.h [new file with mode: 0644]
bgpd/rfapi/vnc_export_bgp_p.h [new file with mode: 0644]
bgpd/rfapi/vnc_export_table.c [new file with mode: 0644]
bgpd/rfapi/vnc_export_table.h [new file with mode: 0644]
bgpd/rfapi/vnc_import_bgp.c [new file with mode: 0644]
bgpd/rfapi/vnc_import_bgp.h [new file with mode: 0644]
bgpd/rfapi/vnc_import_bgp_p.h [new file with mode: 0644]
bgpd/rfapi/vnc_zebra.c [new file with mode: 0644]
bgpd/rfapi/vnc_zebra.h [new file with mode: 0644]
bgpd/rfp-example/librfp/Makefile.am [new file with mode: 0644]
bgpd/rfp-example/librfp/rfp.h [new file with mode: 0644]
bgpd/rfp-example/librfp/rfp_example.c [new file with mode: 0644]
bgpd/rfp-example/librfp/rfp_internal.h [new file with mode: 0644]
bgpd/rfp-example/rfptest/Makefile.am [new file with mode: 0644]
bgpd/rfp-example/rfptest/rfptest.c [new file with mode: 0644]
bgpd/rfp-example/rfptest/rfptest.h [new file with mode: 0644]
configure.ac
doc/Makefile.am
doc/bgpd.texi
doc/fig-vnc-commercial-route-reflector.dia [new file with mode: 0644]
doc/fig-vnc-commercial-route-reflector.png [new file with mode: 0644]
doc/fig-vnc-commercial-route-reflector.txt [new file with mode: 0644]
doc/fig-vnc-gw-rr.dia [new file with mode: 0644]
doc/fig-vnc-gw-rr.png [new file with mode: 0644]
doc/fig-vnc-gw-rr.txt [new file with mode: 0644]
doc/fig-vnc-gw.dia [new file with mode: 0644]
doc/fig-vnc-gw.png [new file with mode: 0644]
doc/fig-vnc-gw.txt [new file with mode: 0644]
doc/fig-vnc-mesh.dia [new file with mode: 0644]
doc/fig-vnc-mesh.png [new file with mode: 0644]
doc/fig-vnc-mesh.txt [new file with mode: 0644]
doc/fig-vnc-quagga-route-reflector.dia [new file with mode: 0644]
doc/fig-vnc-quagga-route-reflector.png [new file with mode: 0644]
doc/fig-vnc-quagga-route-reflector.txt [new file with mode: 0644]
doc/fig-vnc-redundant-route-reflectors.dia [new file with mode: 0644]
doc/fig-vnc-redundant-route-reflectors.png [new file with mode: 0644]
doc/fig-vnc-redundant-route-reflectors.txt [new file with mode: 0644]
doc/ospfd.texi
doc/quagga.texi
doc/routemap.texi
doc/vnc.texi [new file with mode: 0644]
lib/command.c
lib/command.h
lib/log.c
lib/log.h
lib/prefix.c
lib/route_types.txt
lib/vty.c
lib/zebra.h
redhat/quagga.spec.in
ripd/rip_zebra.c
ripngd/ripng_zebra.c
tests/Makefile.am
vtysh/Makefile.am
vtysh/extract.pl.in
vtysh/vtysh.c
vtysh/vtysh_config.c
zebra/zserv.c