![]() 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. |
||
---|---|---|
.. | ||
.gitignore | ||
bgpd.init | ||
isisd.init | ||
ldpd.init | ||
Makefile.am | ||
ospf6d.init | ||
ospfd.init | ||
pimd.init | ||
quagga.logrotate | ||
quagga.pam | ||
quagga.spec.in | ||
quagga.sysconfig | ||
README.rpm_build.md | ||
ripd.init | ||
ripngd.init | ||
watchquagga.init | ||
zebra.init |
Building your own Quagga RPM
(Tested on CentOS 6, CentOS 7 and Fedora 22.)
-
Install the following packages to build the RPMs:
yum install git autoconf automake libtool make gawk readline-devel \ texinfo dejagnu net-snmp-devel groff rpm-build net-snmp-devel \ libcap-devel texi2html
(use
dnf install
on new Fedora instead ofyum install
) -
Checkout Quagga under a unpriviledged user account
git clone git://git.savannah.nongnu.org/quagga.git quagga
-
Run Bootstrap and make distribution tar.gz
cd quagga ./bootstrap.sh ./configure --with-pkg-extra-version=-MyRPMVersion make dist
Note: configure parameters are not important for the RPM building - except the
with-pkg-extra-version
if you want to give the RPM a specific name to mark your own unoffical build -
Create RPM directory structure and populate with sources
mkdir rpmbuild mkdir rpmbuild/SOURCES mkdir rpmbuild/SPECS cp redhat/*.spec rpmbuild/SPECS/ cp quagga*.tar.gz rpmbuild/SOURCES/
-
Edit rpm/SPECS/quagga.spec with configuration as needed Look at the beginning of the file and adjust the following parameters to enable or disable features as required:
################# Quagga configure options #################### # with-feature options %{!?with_snmp: %global with_snmp 1 } %{!?with_vtysh: %global with_vtysh 1 } %{!?with_ospf_te: %global with_ospf_te 1 } %{!?with_opaque_lsa: %global with_opaque_lsa 1 } %{!?with_tcp_zebra: %global with_tcp_zebra 0 } %{!?with_vtysh: %global with_vtysh 1 } %{!?with_pam: %global with_pam 1 } %{!?with_ospfclient: %global with_ospfclient 1 } %{!?with_ospfapi: %global with_ospfapi 1 } %{!?with_irdp: %global with_irdp 1 } %{!?with_rtadv: %global with_rtadv 1 } %{!?with_isisd: %global with_isisd 1 } %{!?with_pimd: %global with_pimd 1 } %{!?with_mpls: %global with_mpls 0 } %{!?with_ldpd: %global with_ldpd 0 } %{!?with_shared: %global with_shared 1 } %{!?with_multipath: %global with_multipath 64 } %{!?quagga_user: %global quagga_user quagga } %{!?vty_group: %global vty_group quaggavt } %{!?with_fpm: %global with_fpm 0 } %{!?with_watchquagga: %global with_watchquagga 1 }
-
Build the RPM
rpmbuild --define "_topdir `pwd`/rpmbuild" -ba rpmbuild/SPECS/quagga.spec
DONE.
If all works correctly, then you should end up with the RPMs under rpmbuild/RPMS
and the Source RPM under rpmbuild/SRPMS
Enabling daemons after installation of the package:
init.d based systems (ie CentOS 6):
-
Enable the daemons as needed to run after boot (Zebra is mandatory)
chkconfig zebra on chkconfig ospfd on chkconfig ospf6d on chkconfig bgpd on ... etc
-
If you want to run
watchquagga
, then configure/etc/sysconfig/quagga
and uncomment the line with the daemons forwatchquagga
to monitor, then enable watchquaggachkconfig watchquagga on
-
Check your firewall / IPtables to make sure the routing protocols are allowed.
-
Start the daemons (or reboot)
service zebra start service bgpd start service ospfd start ... etc
Configuration is stored in /etc/quagga/*.conf
files.
systemd based systems (ie CentOS 7, Fedora 22)
-
Enable the daemons as needed to run after boot (Zebra is mandatory)
systemctl enable zebra systemctl enable ospfd systemctl enable ospf6d systemctl enable bgpd ... etc
Note: There is no watchquagga on systemd based systems. Systemd contains the functionality of monitoring and restarting daemons.
-
Check your firewall / IPtables to make sure the routing protocols are allowed.
-
Start the daemons (or reboot)
systemctl start zebra systemctl start bgpd systemctl start ospfd ... etc
Configuration is stored in /etc/quagga/*.conf
files.