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

Reply via email to