mirror_frr/lib
Lou Berger 65efcfce42 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.
2016-10-03 08:17:02 -04:00
..
.gitignore *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
agentx.c lib: AgentX: use threads instead of eventloop hack 2016-07-28 07:27:47 -04:00
bfd.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
bfd.h zebra - BFD client de-registration support 2016-05-08 20:11:18 -07:00
bitfield.h ospf6d: ospfv3-abr-ecmp-support.patch 2015-05-19 18:03:39 -07:00
buffer.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
buffer.h 2005-05-06 Paul Jakma <paul@dishone.st> 2005-05-06 21:25:49 +00:00
checksum.c lib: force local MIN/MAX macros 2016-09-23 12:12:17 -04:00
checksum.h lib: improve fletcher checksum validation 2012-10-25 10:15:58 -07:00
command.c bgpd: add L3/L2VPN Virtual Network Control feature 2016-10-03 08:17:02 -04:00
command.h bgpd: add L3/L2VPN Virtual Network Control feature 2016-10-03 08:17:02 -04:00
csv.c lib: Compiler warning fix 2016-05-20 09:34:42 -04:00
csv.h This patch changes BGP from only listening mode for BFD status updates to interactive mode of dynamically registering/deregistering BFD enabled peers with PTM/BFD through zebra. Peer is registered with BFD when it goes into established state and de-registers when it goes out of establish state. 2015-06-12 07:59:11 -07:00
daemon.c [warnings] Fix various SOS warnings 2008-08-22 19:52:59 +01:00
distribute.c lib: Make distribute.c accepts both v4 and v6. 2016-09-26 10:52:41 -04:00
distribute.h lib: Make distribute.c accepts both v4 and v6. 2016-09-26 10:52:41 -04:00
fifo.h lib, bgpd: Remove 'struct fifo' from lib/zebra.h 2016-09-16 21:22:30 -04:00
filter.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
filter.h lib, bgpd, tests: Refactor FILTER_X in zebra.h 2016-08-16 11:00:22 -04:00
getopt1.c *: make sure zebra.h is always included first 2016-06-09 10:45:22 -04:00
getopt.c *: make sure zebra.h is always included first 2016-06-09 10:45:22 -04:00
getopt.h 2005-08-10 Greg Troxel <gdt@fnord.ir.bbn.com> 2005-08-10 13:20:03 +00:00
gitversion.pl build: fix minimal mixup in gitinfo suffix 2013-04-09 17:05:08 +02:00
hash.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
hash.h *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
if_rmap.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
if_rmap.h 2005-05-06 Paul Jakma <paul@dishone.st> 2005-05-06 21:25:49 +00:00
if.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
if.h *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
imsg-buffer.c ldpd: adapt the code for Quagga 2016-09-23 09:31:09 -04:00
imsg.c ldpd: adapt the code for Quagga 2016-09-23 09:31:09 -04:00
imsg.h ldpd: copy original sources from OpenBSD (14/09/2016) 2016-09-23 09:31:05 -04:00
jhash.c Fix most compiler warnings in default GCC build. 2016-05-26 18:57:39 +00:00
jhash.h Fix arm compilation failures of sockunion_hash issues 2015-09-08 13:26:57 -07:00
json.c lib: Fix json.c compile on older platforms 2016-04-15 15:02:58 -04:00
json.h lib: Fix compile for json 2016-09-28 20:35:12 -04:00
keychain.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
keychain.h 2005-05-06 Paul Jakma <paul@dishone.st> 2005-05-06 21:25:49 +00:00
libospf.h ospfd/ospf6d/zebra: Change interface bandwidth range and auto-cost range to 100G 2016-06-13 09:06:45 -04:00
linklist.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
linklist.h lib: linklist: clean up insert-before/after dups 2016-07-28 07:27:47 -04:00
log.c bgpd: add L3/L2VPN Virtual Network Control feature 2016-10-03 08:17:02 -04:00
log.h bgpd: add L3/L2VPN Virtual Network Control feature 2016-10-03 08:17:02 -04:00
Makefile.am lib: add skiplist 2016-09-30 13:22:35 -04:00
md5.c *: fix signedness mix-ups 2016-06-07 08:47:49 -04:00
md5.h *: fix signedness mix-ups 2016-06-07 08:47:49 -04:00
memory_vty.c lib: Only display memory items that have allocations 2016-09-29 21:47:07 -04:00
memory_vty.h lib: clean/restore memory debugging functions 2016-09-19 16:31:08 -04:00
memory.c memory: restore 'memstats:' keyword when logging memstats - useful in log 2016-09-30 12:56:42 -04:00
memory.h lib: deregister memtypes on exit/unload 2016-09-19 16:31:08 -04:00
mpls.h mpls: add support for LDP LSPs 2016-09-23 09:31:12 -04:00
network.c Update Traffic Engineering Support for OSPFD 2016-09-03 11:05:50 -04:00
network.h Update Traffic Engineering Support for OSPFD 2016-09-03 11:05:50 -04:00
nexthop.c zebra: fix bug in nexthop label allocation 2016-09-23 09:31:21 -04:00
nexthop.h mpls: add support for LDP LSPs 2016-09-23 09:31:12 -04:00
ns.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
ns.h lib, vtysh: support multiple VRFs by using linux netns 2016-09-09 12:15:14 -04:00
openbsd-queue.h ldpd: copy original sources from OpenBSD (14/09/2016) 2016-09-23 09:31:05 -04:00
openbsd-tree.h ldpd: copy original sources from OpenBSD (14/09/2016) 2016-09-23 09:31:05 -04:00
pid_output.c + pidfiles are now always created with 0644 perms instead if LOGFILE_MASK (0600) 2007-10-04 15:09:19 +00:00
plist_int.h lib: Fix missing plist_int.h 2015-11-03 10:00:30 -08:00
plist.c Merge remote-tracking branch 'origin/cmaster' into cmaster-next 2016-09-29 20:24:49 -04:00
plist.h lib: straighten out ORF prefix list support 2015-11-03 05:49:39 -08:00
pqueue.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
pqueue.h lib: use heap to manage timers 2014-04-22 21:17:00 +02:00
prefix.c bgpd: add L3/L2VPN Virtual Network Control feature 2016-10-03 08:17:02 -04:00
prefix.h lib: add AF_ETHERNET/AFI_ETHER 2016-09-03 11:05:51 -04:00
privs.c ldpd: adapt the code for Quagga 2016-09-23 09:31:09 -04:00
privs.h 2005-09-29 Paul Jakma <paul.jakma@sun.com> 2005-09-29 14:39:32 +00:00
ptm_lib.c Fixup of warnings in the code 2015-07-25 15:55:47 -07:00
ptm_lib.h Fixup of warnings in the code 2015-07-25 15:55:47 -07:00
queue.h *: fix detection and usage of sys/cdefs.h 2014-08-18 01:50:19 +02:00
regex-gnu.h *: nuke ^L (page feed) 2014-06-04 06:58:02 +02:00
regex.c *: nuke ^L (page feed) 2014-06-04 06:58:02 +02:00
route_types.pl "ip protocol" is missing ospf as an option 2016-05-11 13:12:08 +00:00
route_types.txt bgpd: add L3/L2VPN Virtual Network Control feature 2016-10-03 08:17:02 -04:00
routemap.c lib: fix ICC warning in route-map code 2016-09-23 12:12:16 -04:00
routemap.h *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
sigevent.c lib: dump memory stats on core 2016-09-03 11:05:51 -04:00
sigevent.h *: use array_size() helper macro 2012-10-25 10:15:59 -07:00
skiplist.c lib: add skiplist 2016-09-30 13:22:35 -04:00
skiplist.h lib: add skiplist 2016-09-30 13:22:35 -04:00
smux.c lib: fix vty.c and smux.c static variable clash 2015-10-13 11:37:15 -07:00
smux.h *: add missing includes 2016-06-07 08:50:09 -04:00
snmp.c snmp: fix warnings 2016-05-26 15:33:29 +00:00
sockopt.c lib: update Solaris multicast API (BZ#725) 2016-09-23 12:12:16 -04:00
sockopt.h *: use an ifindex_t type, defined in lib/if.h, for ifindex values 2016-08-18 07:35:38 -04:00
sockunion.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
sockunion.h zebra: check at startup if the kernel supports MPLS 2016-09-23 09:31:25 -04:00
str.c lib: update strlcpy to OpenBSD v1.13 2016-08-07 21:05:26 -04:00
str.h * configure.ac: Test existance of strndup. 2005-09-19 09:53:21 +00:00
stream.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
stream.h Update Traffic Engineering Support for OSPFD 2016-09-03 11:05:50 -04:00
systemd.c quagga: Fixup startup to allow consistency between sysV and systemd 2016-04-27 16:04:48 -04:00
systemd.h quagga: Fixup startup to allow consistency between sysV and systemd 2016-04-27 16:04:48 -04:00
table.c lib: add route_table_get_default_delegate 2016-09-30 12:56:17 -04:00
table.h lib: add route_table_get_default_delegate 2016-09-30 12:56:17 -04:00
thread.c lib: Allow more space in thread.c output 2016-09-26 14:06:23 -04:00
thread.h lib: add thread_add_timer_tv (struct timeval) 2016-07-28 07:27:47 -04:00
vector.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
vector.h *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
version.h.in build: track config args 2016-06-03 15:53:42 -04:00
vrf.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
vrf.h lib: VRF_GET_ID should respect VRF_UNKNOWN 2016-05-02 13:17:06 -04:00
vty.c bgpd: add L3/L2VPN Virtual Network Control feature 2016-10-03 08:17:02 -04:00
vty.h ldpd: adapt the code for Quagga 2016-09-23 09:31:09 -04:00
workqueue.c *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
workqueue.h *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs 2016-09-19 16:31:04 -04:00
zassert.h Add missing GPL headers, and copyright claims that certainly apply. 2016-05-26 01:06:59 +00:00
zclient.c lib: fix vrf_bitmap leak in zclient_free() 2016-09-28 15:41:06 -04:00
zclient.h Make route flags a 32bit field 2016-09-23 12:12:43 -04:00
zebra.h bgpd: add L3/L2VPN Virtual Network Control feature 2016-10-03 08:17:02 -04:00