mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-05 18:42:23 +00:00
Merge remote-tracking branch 'origin/stable/2.0'
This commit is contained in:
commit
3b14d86eed
5
.gitignore
vendored
5
.gitignore
vendored
@ -26,9 +26,8 @@ conftest
|
||||
conftest.err
|
||||
aclocal.m4
|
||||
Makefile.in
|
||||
zebra-[0-9.][0-9.][0-9.]*.tar.gz
|
||||
quagga-[0-9.][0-9.][0-9.]*.tar.gz
|
||||
quagga-[0-9.][0-9.][0-9.]*.tar.gz.asc
|
||||
*.tar.gz
|
||||
*.tar.gz.asc
|
||||
.nfs*
|
||||
libtool
|
||||
.arch-inventory
|
||||
|
@ -300,4 +300,11 @@ at scale and in ways that can be unexpected for the original implementor.
|
||||
As such debugs MUST be guarded in such a way that they can be turned off.
|
||||
This PROJECT has the ability to turn on/off debugs from the CLI and it is
|
||||
expected that the developer will use this convention to allow control
|
||||
of their debugs.
|
||||
of their debugs.
|
||||
|
||||
### CLI-Changes
|
||||
|
||||
CLI's are a complicated ugly beast. Additions or changes to the CLI
|
||||
should use a DEFUN to encapsulate one setting as much as is possible.
|
||||
Additionally as new DEFUN's are added to the system, documentation
|
||||
should be provided for the new commands.
|
@ -1,111 +0,0 @@
|
||||
--------------------------------------------------------------------------
|
||||
Building and Installing Quagga from releases or snapshots:
|
||||
|
||||
The 'INSTALL' file contains generic instructions on how to use 'configure'
|
||||
scripts.
|
||||
|
||||
Quagga requires a C compiler (and associated header files and
|
||||
libraries) supporting the C99 standard.
|
||||
|
||||
Quagga requires a reasonable make. It is considered a bug if quagga
|
||||
does not compile with the system make on recent FreeBSD, NetBSD or
|
||||
OpenBSD, and a very serious bug if it does not compile with GNU make.
|
||||
|
||||
Quagga expects a POSIX.2 compliant system, more or less. Clean
|
||||
workarounds for POSIX non-compliance are welcome.
|
||||
|
||||
It is considered a bug if Quagga fails to build and run on any of the
|
||||
following systems (where .x indicates the most recent release), or
|
||||
such systems "-current" versions. Or, it might be that this list is
|
||||
out of date and will be updated. (Note that considering it a bug is
|
||||
not a guarantee of support, merely "we agree that it is broken".)
|
||||
|
||||
Dragonfly ?
|
||||
FreeBSD (stable branches currently supported, plus perhaps one)
|
||||
FreeBSD-current
|
||||
Linux [kernel/distribution information needed]
|
||||
NetBSD 4.x
|
||||
NetBSD 5.x
|
||||
NetBSD 6.x
|
||||
NetBSD-current
|
||||
OpenBSD ? [info needed on what should work]
|
||||
Solaris (modern/supported versions, including OpenSolaris forks)
|
||||
|
||||
On BSD systems, installing libexecinfo is strongly recommended in order
|
||||
to get backtrace support.
|
||||
|
||||
For further Quagga specific information on 'configure' and build-time
|
||||
configuration of the software, please read the Quagga info
|
||||
documentation, (doc/quagga.info). To read the info page included with
|
||||
the Quagga sources without first installing Quagga:
|
||||
|
||||
cd doc
|
||||
# one of the following, depending on your info viewer preferences
|
||||
info quagga.info
|
||||
pinfo -r quagga.info
|
||||
emacs -eval '(info "quagga.info")'
|
||||
|
||||
The Quagga website (http://www.quagga.net) currently has the info
|
||||
files available in various formats.
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
Building Quagga from git checkouts:
|
||||
|
||||
In order to build from git, you will need recent versions of several GNU
|
||||
tools, particularly autoconf, automake, libtool, GNU awk and texinfo. Note
|
||||
that the CVS snapshots on the Quagga website should not require these tools;
|
||||
everything is already setup ready to run 'configure'. If you have trouble
|
||||
building from CVS checkout it is recommended that you try a CVS snapshot
|
||||
instead.
|
||||
|
||||
We declare that the following versions should work for building from
|
||||
CVS checkouts. Earlier versions may work, but failure to do so is not
|
||||
a bug. Required versions can be moved earlier if no problems, or
|
||||
later after a judgement that a system without a higher version is
|
||||
deficient is made.
|
||||
|
||||
[TODO: this list is out of date as of 2013-07]
|
||||
automake: 1.9.6 (released 2005-07-10)
|
||||
autoconf: 2.59 (2.60 on 2006-06-26 is too recent to require)
|
||||
libtool: 1.5.22 (released 2005-12-18)
|
||||
texinfo: 4.7 (released 2004-04-10; 4.8 is not yet common)
|
||||
|
||||
For running tests, one also needs:
|
||||
|
||||
DejaGnu:
|
||||
|
||||
[TODO: texinfo 4.6 is now ancient and this should be revisited/fixed]
|
||||
Because some systems provide texinfo 4.6 (4.7 is new), quagga.info is
|
||||
checked in so that texinfo will generally not be invoked. When
|
||||
texinfo 4.7 is widespread, quagga.info will be removed from CVS and
|
||||
texinfo will become required again. (4.7 has figure support, needed
|
||||
for the route server docs, which is why 4.6 doesn't work.)
|
||||
|
||||
In order to create PostScript or PDF versions of the Texinfo documentation,
|
||||
you will need the convert utility, from the ImageMagick toolset installed,
|
||||
and epstopdf from the TeTeX suite.
|
||||
|
||||
To create the required autotools files (Makefile.in, configure, etc.),
|
||||
run "./bootstrap.sh". After this you may run configure as for a
|
||||
snapshot or release.
|
||||
|
||||
Please refer to "Building and Installing Quagga" above for further
|
||||
instructions.
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
Notes on required versions:
|
||||
|
||||
The general goal is to use a modern baseline of tools, while not
|
||||
imposing pain on those tracking supported (or almost supported) stable
|
||||
distributions. The notes below explain what versions are present in
|
||||
various environments.
|
||||
|
||||
NetBSD 4 provides texinfo 4.7.
|
||||
NetBSD 5 and 6 provides texinfo 4.8
|
||||
|
||||
Fedora Core ? provides autoconf 2.59.
|
||||
|
||||
OpenBSD 3.6 provides texinfo 4.2.
|
||||
OpenBSD [3.6] ports provides automake 1.4-p6 autoconf 2.5.9 libtool 1.5.8
|
||||
|
||||
--------------------------------------------------------------------------
|
@ -2,14 +2,14 @@
|
||||
|
||||
SUBDIRS = lib qpb fpm @ZEBRA@ @LIBRFP@ @RFPTEST@ \
|
||||
@BGPD@ @RIPD@ @RIPNGD@ @OSPFD@ @OSPF6D@ @LDPD@ \
|
||||
@ISISD@ @PIMD@ @WATCHQUAGGA@ @VTYSH@ @OSPFCLIENT@ @DOC@ m4 @pkgsrcdir@ \
|
||||
@ISISD@ @PIMD@ @WATCHFRR@ @VTYSH@ @OSPFCLIENT@ @DOC@ m4 @pkgsrcdir@ \
|
||||
redhat @SOLARIS@ tests tools cumulus
|
||||
|
||||
DIST_SUBDIRS = lib qpb fpm zebra bgpd ripd ripngd ospfd ospf6d ldpd \
|
||||
isisd watchquagga vtysh ospfclient doc m4 pkgsrc redhat tests \
|
||||
isisd watchfrr vtysh ospfclient doc m4 pkgsrc redhat tests \
|
||||
solaris pimd @LIBRFP@ @RFPTEST@ tools cumulus
|
||||
|
||||
EXTRA_DIST = aclocal.m4 SERVICES REPORTING-BUGS INSTALL.quagga.txt \
|
||||
EXTRA_DIST = aclocal.m4 SERVICES REPORTING-BUGS \
|
||||
update-autotools \
|
||||
vtysh/Makefile.in vtysh/Makefile.am \
|
||||
tools/rrcheck.pl tools/rrlookup.pl tools/zc.pl \
|
||||
|
6
README
6
README
@ -3,9 +3,7 @@ protocols.
|
||||
|
||||
Currently Quagga supports BGP4, BGP4+, OSPFv2, OSPFv3, RIPv1,
|
||||
RIPv2, RIPng, PIM-SSM and LDP as well as very early support for IS-IS.
|
||||
|
||||
See the file INSTALL.quagga.txt for building and installation instructions.
|
||||
|
||||
|
||||
See the file REPORTING-BUGS to report bugs.
|
||||
|
||||
|
||||
Quagga is free software. See the file COPYING for copying conditions.
|
||||
|
@ -1,7 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $QuaggaId: Format:%an, %ai, %h$ $
|
||||
|
||||
# This file is helpful for building quagga from cvs on NetBSD, and
|
||||
# probably on any system using pkgsrc.
|
||||
# One should have readline installed already (pkgsrc/devel/readline).
|
||||
|
1
SERVICES
1
SERVICES
@ -18,3 +18,4 @@ ospf6d 2606/tcp
|
||||
ospfapi 2607/tcp
|
||||
isisd 2608/tcp
|
||||
pimd 2611/tcp
|
||||
ldpd 2612/tcp
|
||||
|
223
bgpd/bgp_attr.c
223
bgpd/bgp_attr.c
@ -221,6 +221,11 @@ cluster_finish (void)
|
||||
cluster_hash = NULL;
|
||||
}
|
||||
|
||||
static struct hash *encap_hash = NULL;
|
||||
#if ENABLE_BGP_VNC
|
||||
static struct hash *vnc_hash = NULL;
|
||||
#endif
|
||||
|
||||
struct bgp_attr_encap_subtlv *
|
||||
encap_tlv_dup(struct bgp_attr_encap_subtlv *orig)
|
||||
{
|
||||
@ -288,14 +293,10 @@ encap_same(struct bgp_attr_encap_subtlv *h1, struct bgp_attr_encap_subtlv *h2)
|
||||
struct bgp_attr_encap_subtlv *p;
|
||||
struct bgp_attr_encap_subtlv *q;
|
||||
|
||||
if (!h1 && !h2)
|
||||
return 1;
|
||||
if (h1 && !h2)
|
||||
return 0;
|
||||
if (!h1 && h2)
|
||||
return 0;
|
||||
if (h1 == h2)
|
||||
return 1;
|
||||
if (h1 == NULL || h2 == NULL)
|
||||
return 0;
|
||||
|
||||
for (p = h1; p; p = p->next) {
|
||||
for (q = h2; q; q = q->next) {
|
||||
@ -326,6 +327,96 @@ encap_same(struct bgp_attr_encap_subtlv *h1, struct bgp_attr_encap_subtlv *h2)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void *
|
||||
encap_hash_alloc (void *p)
|
||||
{
|
||||
/* Encap structure is already allocated. */
|
||||
return p;
|
||||
}
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ENCAP_SUBTLV_TYPE,
|
||||
#if ENABLE_BGP_VNC
|
||||
VNC_SUBTLV_TYPE
|
||||
#endif
|
||||
} encap_subtlv_type;
|
||||
|
||||
static struct bgp_attr_encap_subtlv *
|
||||
encap_intern (struct bgp_attr_encap_subtlv *encap, encap_subtlv_type type)
|
||||
{
|
||||
struct bgp_attr_encap_subtlv *find;
|
||||
struct hash *hash = encap_hash;
|
||||
#if ENABLE_BGP_VNC
|
||||
if (type == VNC_SUBTLV_TYPE)
|
||||
hash = vnc_hash;
|
||||
#endif
|
||||
|
||||
find = hash_get (hash, encap, encap_hash_alloc);
|
||||
if (find != encap)
|
||||
encap_free (encap);
|
||||
find->refcnt++;
|
||||
|
||||
return find;
|
||||
}
|
||||
|
||||
static void
|
||||
encap_unintern (struct bgp_attr_encap_subtlv **encapp, encap_subtlv_type type)
|
||||
{
|
||||
struct bgp_attr_encap_subtlv *encap = *encapp;
|
||||
if (encap->refcnt)
|
||||
encap->refcnt--;
|
||||
|
||||
if (encap->refcnt == 0)
|
||||
{
|
||||
struct hash *hash = encap_hash;
|
||||
#if ENABLE_BGP_VNC
|
||||
if (type == VNC_SUBTLV_TYPE)
|
||||
hash = vnc_hash;
|
||||
#endif
|
||||
hash_release (hash, encap);
|
||||
encap_free (encap);
|
||||
*encapp = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
encap_hash_key_make (void *p)
|
||||
{
|
||||
const struct bgp_attr_encap_subtlv * encap = p;
|
||||
|
||||
return jhash(encap->value, encap->length, 0);
|
||||
}
|
||||
|
||||
static int
|
||||
encap_hash_cmp (const void *p1, const void *p2)
|
||||
{
|
||||
return encap_same((struct bgp_attr_encap_subtlv *)p1,
|
||||
(struct bgp_attr_encap_subtlv *)p2);
|
||||
}
|
||||
|
||||
static void
|
||||
encap_init (void)
|
||||
{
|
||||
encap_hash = hash_create (encap_hash_key_make, encap_hash_cmp);
|
||||
#if ENABLE_BGP_VNC
|
||||
vnc_hash = hash_create (encap_hash_key_make, encap_hash_cmp);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
encap_finish (void)
|
||||
{
|
||||
hash_clean (encap_hash, (void (*)(void *))encap_free);
|
||||
hash_free (encap_hash);
|
||||
encap_hash = NULL;
|
||||
#if ENABLE_BGP_VNC
|
||||
hash_clean (vnc_hash, (void (*)(void *))encap_free);
|
||||
hash_free (vnc_hash);
|
||||
vnc_hash = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Unknown transit attribute. */
|
||||
static struct hash *transit_hash;
|
||||
|
||||
@ -434,16 +525,6 @@ bgp_attr_extra_free (struct attr *attr)
|
||||
{
|
||||
if (attr->extra)
|
||||
{
|
||||
if (attr->extra->encap_subtlvs) {
|
||||
encap_free(attr->extra->encap_subtlvs);
|
||||
attr->extra->encap_subtlvs = NULL;
|
||||
}
|
||||
#if ENABLE_BGP_VNC
|
||||
if (attr->extra->vnc_subtlvs) {
|
||||
encap_free(attr->extra->vnc_subtlvs);
|
||||
attr->extra->vnc_subtlvs = NULL;
|
||||
}
|
||||
#endif
|
||||
XFREE (MTYPE_ATTR_EXTRA, attr->extra);
|
||||
attr->extra = NULL;
|
||||
}
|
||||
@ -481,28 +562,12 @@ bgp_attr_dup (struct attr *new, struct attr *orig)
|
||||
memset(new->extra, 0, sizeof(struct attr_extra));
|
||||
if (orig->extra) {
|
||||
*new->extra = *orig->extra;
|
||||
if (orig->extra->encap_subtlvs) {
|
||||
new->extra->encap_subtlvs = encap_tlv_dup(orig->extra->encap_subtlvs);
|
||||
}
|
||||
#if ENABLE_BGP_VNC
|
||||
if (orig->extra->vnc_subtlvs) {
|
||||
new->extra->vnc_subtlvs = encap_tlv_dup(orig->extra->vnc_subtlvs);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else if (orig->extra)
|
||||
{
|
||||
new->extra = bgp_attr_extra_new();
|
||||
*new->extra = *orig->extra;
|
||||
if (orig->extra->encap_subtlvs) {
|
||||
new->extra->encap_subtlvs = encap_tlv_dup(orig->extra->encap_subtlvs);
|
||||
}
|
||||
#if ENABLE_BGP_VNC
|
||||
if (orig->extra->vnc_subtlvs) {
|
||||
new->extra->vnc_subtlvs = encap_tlv_dup(orig->extra->vnc_subtlvs);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -523,6 +588,12 @@ bgp_attr_deep_dup (struct attr *new, struct attr *orig)
|
||||
new->extra->cluster = cluster_dup(orig->extra->cluster);
|
||||
if (orig->extra->transit)
|
||||
new->extra->transit = transit_dup(orig->extra->transit);
|
||||
if (orig->extra->encap_subtlvs)
|
||||
new->extra->encap_subtlvs = encap_tlv_dup(orig->extra->encap_subtlvs);
|
||||
#if ENABLE_BGP_VNC
|
||||
if (orig->extra->vnc_subtlvs)
|
||||
new->extra->vnc_subtlvs = encap_tlv_dup(orig->extra->vnc_subtlvs);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -543,6 +614,12 @@ bgp_attr_deep_free (struct attr *attr)
|
||||
cluster_free(attr->extra->cluster);
|
||||
if (attr->extra->transit)
|
||||
transit_free(attr->extra->transit);
|
||||
if (attr->extra->encap_subtlvs)
|
||||
encap_free(attr->extra->encap_subtlvs);
|
||||
#if ENABLE_BGP_VNC
|
||||
if (attr->extra->vnc_subtlvs)
|
||||
encap_free(attr->extra->vnc_subtlvs);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -599,7 +676,12 @@ attrhash_key_make (void *p)
|
||||
MIX(cluster_hash_key_make (extra->cluster));
|
||||
if (extra->transit)
|
||||
MIX(transit_hash_key_make (extra->transit));
|
||||
|
||||
if (extra->encap_subtlvs)
|
||||
MIX(encap_hash_key_make (extra->encap_subtlvs));
|
||||
#if ENABLE_BGP_VNC
|
||||
if (extra->vnc_subtlvs)
|
||||
MIX(encap_hash_key_make (extra->vnc_subtlvs));
|
||||
#endif
|
||||
#ifdef HAVE_IPV6
|
||||
MIX(extra->mp_nexthop_len);
|
||||
key = jhash(extra->mp_nexthop_global.s6_addr, IPV6_MAX_BYTELEN, key);
|
||||
@ -712,13 +794,12 @@ bgp_attr_hash_alloc (void *p)
|
||||
{
|
||||
attr->extra = bgp_attr_extra_new ();
|
||||
*attr->extra = *val->extra;
|
||||
|
||||
if (attr->extra->encap_subtlvs) {
|
||||
attr->extra->encap_subtlvs = encap_tlv_dup(attr->extra->encap_subtlvs);
|
||||
if (val->extra->encap_subtlvs) {
|
||||
val->extra->encap_subtlvs = NULL;
|
||||
}
|
||||
#if ENABLE_BGP_VNC
|
||||
if (attr->extra->vnc_subtlvs) {
|
||||
attr->extra->vnc_subtlvs = encap_tlv_dup(attr->extra->vnc_subtlvs);
|
||||
if (val->extra->vnc_subtlvs) {
|
||||
val->extra->vnc_subtlvs = NULL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -773,11 +854,27 @@ bgp_attr_intern (struct attr *attr)
|
||||
else
|
||||
attre->transit->refcnt++;
|
||||
}
|
||||
if (attre->encap_subtlvs)
|
||||
{
|
||||
if (! attre->encap_subtlvs->refcnt)
|
||||
attre->encap_subtlvs = encap_intern (attre->encap_subtlvs, ENCAP_SUBTLV_TYPE);
|
||||
else
|
||||
attre->encap_subtlvs->refcnt++;
|
||||
}
|
||||
#if ENABLE_BGP_VNC
|
||||
if (attre->vnc_subtlvs)
|
||||
{
|
||||
if (! attre->vnc_subtlvs->refcnt)
|
||||
attre->vnc_subtlvs = encap_intern (attre->vnc_subtlvs, VNC_SUBTLV_TYPE);
|
||||
else
|
||||
attre->vnc_subtlvs->refcnt++;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
find = (struct attr *) hash_get (attrhash, attr, bgp_attr_hash_alloc);
|
||||
find->refcnt++;
|
||||
|
||||
|
||||
return find;
|
||||
}
|
||||
|
||||
@ -811,6 +908,14 @@ bgp_attr_refcount (struct attr *attr)
|
||||
|
||||
if (attre->transit)
|
||||
attre->transit->refcnt++;
|
||||
|
||||
if (attre->encap_subtlvs)
|
||||
attre->encap_subtlvs->refcnt++;
|
||||
|
||||
#if ENABLE_BGP_VNC
|
||||
if (attre->vnc_subtlvs)
|
||||
attre->vnc_subtlvs->refcnt++;
|
||||
#endif
|
||||
}
|
||||
attr->refcnt++;
|
||||
return attr;
|
||||
@ -936,6 +1041,14 @@ bgp_attr_unintern_sub (struct attr *attr)
|
||||
|
||||
if (attr->extra->transit)
|
||||
transit_unintern (attr->extra->transit);
|
||||
|
||||
if (attr->extra->encap_subtlvs)
|
||||
encap_unintern (&attr->extra->encap_subtlvs, ENCAP_SUBTLV_TYPE);
|
||||
|
||||
#if ENABLE_BGP_VNC
|
||||
if (attr->extra->vnc_subtlvs)
|
||||
encap_unintern (&attr->extra->vnc_subtlvs, VNC_SUBTLV_TYPE);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -1001,11 +1114,17 @@ bgp_attr_flush (struct attr *attr)
|
||||
transit_free (attre->transit);
|
||||
attre->transit = NULL;
|
||||
}
|
||||
encap_free(attre->encap_subtlvs);
|
||||
attre->encap_subtlvs = NULL;
|
||||
if (attre->encap_subtlvs && ! attre->encap_subtlvs->refcnt)
|
||||
{
|
||||
encap_free(attre->encap_subtlvs);
|
||||
attre->encap_subtlvs = NULL;
|
||||
}
|
||||
#if ENABLE_BGP_VNC
|
||||
encap_free(attre->vnc_subtlvs);
|
||||
attre->vnc_subtlvs = NULL;
|
||||
if (attre->vnc_subtlvs && ! attre->vnc_subtlvs->refcnt)
|
||||
{
|
||||
encap_free(attre->vnc_subtlvs);
|
||||
attre->vnc_subtlvs = NULL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -2493,10 +2612,18 @@ bgp_attr_parse (struct peer *peer, struct attr *attr, bgp_size_t size,
|
||||
if (ret != BGP_ATTR_PARSE_PROCEED)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Finally intern unknown attribute. */
|
||||
if (attr->extra && attr->extra->transit)
|
||||
attr->extra->transit = transit_intern (attr->extra->transit);
|
||||
if (attr->extra)
|
||||
{
|
||||
/* Finally intern unknown attribute. */
|
||||
if (attr->extra->transit)
|
||||
attr->extra->transit = transit_intern (attr->extra->transit);
|
||||
if (attr->extra->encap_subtlvs)
|
||||
attr->extra->encap_subtlvs = encap_intern (attr->extra->encap_subtlvs, ENCAP_SUBTLV_TYPE);
|
||||
#if ENABLE_BGP_VNC
|
||||
if (attr->extra->vnc_subtlvs)
|
||||
attr->extra->vnc_subtlvs = encap_intern (attr->extra->vnc_subtlvs, VNC_SUBTLV_TYPE);
|
||||
#endif
|
||||
}
|
||||
|
||||
return BGP_ATTR_PARSE_PROCEED;
|
||||
}
|
||||
@ -3184,6 +3311,7 @@ bgp_attr_init (void)
|
||||
ecommunity_init ();
|
||||
cluster_init ();
|
||||
transit_init ();
|
||||
encap_init ();
|
||||
}
|
||||
|
||||
void
|
||||
@ -3195,6 +3323,7 @@ bgp_attr_finish (void)
|
||||
ecommunity_finish ();
|
||||
cluster_finish ();
|
||||
transit_finish ();
|
||||
encap_finish ();
|
||||
}
|
||||
|
||||
/* Make attribute packet. */
|
||||
|
@ -58,6 +58,8 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
|
||||
struct bgp_attr_encap_subtlv {
|
||||
struct bgp_attr_encap_subtlv *next; /* for chaining */
|
||||
/* Reference count of this attribute. */
|
||||
unsigned long refcnt;
|
||||
uint16_t type;
|
||||
uint16_t length;
|
||||
uint8_t value[1]; /* will be extended */
|
||||
|
@ -44,9 +44,9 @@ static zebra_capabilities_t _caps_p [] =
|
||||
|
||||
struct zebra_privs_t bgpd_privs =
|
||||
{
|
||||
#if defined(QUAGGA_USER) && defined(QUAGGA_GROUP)
|
||||
.user = QUAGGA_USER,
|
||||
.group = QUAGGA_GROUP,
|
||||
#if defined(FRR_USER) && defined(FRR_GROUP)
|
||||
.user = FRR_USER,
|
||||
.group = FRR_GROUP,
|
||||
#endif
|
||||
#ifdef VTY_GROUP
|
||||
.vty_group = VTY_GROUP,
|
||||
|
@ -54,6 +54,13 @@ ecommunity_free (struct ecommunity **ecom)
|
||||
ecom = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
ecommunity_hash_free (struct ecommunity *ecom)
|
||||
{
|
||||
ecommunity_free(&ecom);
|
||||
}
|
||||
|
||||
|
||||
/* Add a new Extended Communities value to Extended Communities
|
||||
Attribute structure. When the value is already exists in the
|
||||
structure, we don't add the value. Newly added value is sorted by
|
||||
@ -282,6 +289,7 @@ ecommunity_init (void)
|
||||
void
|
||||
ecommunity_finish (void)
|
||||
{
|
||||
hash_clean (ecomhash, (void (*)(void *))ecommunity_hash_free);
|
||||
hash_free (ecomhash);
|
||||
ecomhash = NULL;
|
||||
}
|
||||
|
@ -467,7 +467,7 @@ bgp_show_encap (
|
||||
vty_out (vty, "No prefixes displayed, %ld exist%s", total_count, VTY_NEWLINE);
|
||||
}
|
||||
else
|
||||
vty_out (vty, "%sDisplayed %ld out of %ld total prefixes%s",
|
||||
vty_out (vty, "%sDisplayed %ld routes and %ld total paths%s",
|
||||
VTY_NEWLINE, output_count, total_count, VTY_NEWLINE);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
|
@ -134,9 +134,9 @@ static zebra_capabilities_t _caps_p [] =
|
||||
|
||||
struct zebra_privs_t bgpd_privs =
|
||||
{
|
||||
#if defined(QUAGGA_USER) && defined(QUAGGA_GROUP)
|
||||
.user = QUAGGA_USER,
|
||||
.group = QUAGGA_GROUP,
|
||||
#if defined(FRR_USER) && defined(FRR_GROUP)
|
||||
.user = FRR_USER,
|
||||
.group = FRR_GROUP,
|
||||
#endif
|
||||
#ifdef VTY_GROUP
|
||||
.vty_group = VTY_GROUP,
|
||||
@ -174,7 +174,7 @@ redistribution between different routing protocols.\n\n\
|
||||
-C, --dryrun Check configuration for validity and exit\n\
|
||||
-h, --help Display this help and exit\n\
|
||||
\n\
|
||||
Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
|
||||
Report bugs to %s\n", progname, FRR_BUG_ADDRESS);
|
||||
}
|
||||
|
||||
exit (status);
|
||||
@ -547,7 +547,7 @@ main (int argc, char **argv)
|
||||
vty_serv_sock (vty_addr, vty_port, BGP_VTYSH_PATH);
|
||||
|
||||
/* Print banner. */
|
||||
zlog_notice ("BGPd %s starting: vty@%d, bgp@%s:%d", QUAGGA_VERSION,
|
||||
zlog_notice ("BGPd %s starting: vty@%d, bgp@%s:%d", FRR_COPYRIGHT,
|
||||
vty_port,
|
||||
(bm->address ? bm->address : "<all>"),
|
||||
bm->port);
|
||||
|
@ -1,5 +1,4 @@
|
||||
/* $QuaggaId: Format:%an, %ai, %h$ $
|
||||
*
|
||||
/*
|
||||
* BGP Multipath
|
||||
* Copyright (C) 2010 Google Inc.
|
||||
*
|
||||
|
@ -1,5 +1,4 @@
|
||||
/* $QuaggaId: Format:%an, %ai, %h$ $
|
||||
*
|
||||
/*
|
||||
* BGP Multipath
|
||||
* Copyright (C) 2010 Google Inc.
|
||||
*
|
||||
|
@ -888,7 +888,7 @@ bgp_show_mpls_vpn (struct vty *vty, afi_t afi, struct prefix_rd *prd,
|
||||
if (output_count == 0)
|
||||
vty_out (vty, "No prefixes displayed, %ld exist%s", total_count, VTY_NEWLINE);
|
||||
else
|
||||
vty_out (vty, "%sDisplayed %ld out of %ld total prefixes%s",
|
||||
vty_out (vty, "%sDisplayed %ld routes and %ld total paths%s",
|
||||
VTY_NEWLINE, output_count, total_count, VTY_NEWLINE);
|
||||
}
|
||||
|
||||
|
@ -630,8 +630,9 @@ bgp_info_cmp (struct bgp *bgp, struct bgp_info *new, struct bgp_info *exist,
|
||||
{
|
||||
if (peer_sort (new->peer) == BGP_PEER_IBGP
|
||||
&& peer_sort (exist->peer) == BGP_PEER_IBGP
|
||||
&& CHECK_FLAG (mpath_cfg->ibgp_flags,
|
||||
BGP_FLAG_IBGP_MULTIPATH_SAME_CLUSTERLEN))
|
||||
&& (mpath_cfg == NULL ||
|
||||
CHECK_FLAG (mpath_cfg->ibgp_flags,
|
||||
BGP_FLAG_IBGP_MULTIPATH_SAME_CLUSTERLEN)))
|
||||
{
|
||||
newm = BGP_CLUSTER_LIST_LENGTH(new->attr);
|
||||
existm = BGP_CLUSTER_LIST_LENGTH(exist->attr);
|
||||
@ -867,9 +868,8 @@ bgp_info_cmp_compatible (struct bgp *bgp, struct bgp_info *new, struct bgp_info
|
||||
afi_t afi, safi_t safi)
|
||||
{
|
||||
int paths_eq;
|
||||
struct bgp_maxpaths_cfg mpath_cfg;
|
||||
int ret;
|
||||
ret = bgp_info_cmp (bgp, new, exist, &paths_eq, &mpath_cfg, 0, __func__);
|
||||
ret = bgp_info_cmp (bgp, new, exist, &paths_eq, NULL, 0, __func__);
|
||||
|
||||
if (paths_eq)
|
||||
ret = 0;
|
||||
@ -1799,6 +1799,7 @@ subgroup_process_announce_selected (struct update_subgroup *subgrp,
|
||||
PEER_STATUS_ORF_WAIT_REFRESH))
|
||||
return 0;
|
||||
|
||||
memset(&extra, 0, sizeof(struct attr_extra));
|
||||
/* It's initialized in bgp_announce_check() */
|
||||
attr.extra = &extra;
|
||||
|
||||
@ -4498,7 +4499,6 @@ bgp_config_write_table_map (struct vty *vty, struct bgp *bgp, afi_t afi,
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFUN (bgp_table_map,
|
||||
bgp_table_map_cmd,
|
||||
"table-map WORD",
|
||||
@ -7506,7 +7506,7 @@ bgp_show_table (struct vty *vty, struct bgp *bgp, struct bgp_table *table,
|
||||
vty_out (vty, "No BGP prefixes displayed, %ld exist%s", total_count, VTY_NEWLINE);
|
||||
}
|
||||
else
|
||||
vty_out (vty, "%sDisplayed %ld out of %ld total prefixes%s",
|
||||
vty_out (vty, "%sDisplayed %ld routes and %ld total paths%s",
|
||||
VTY_NEWLINE, output_count, total_count, VTY_NEWLINE);
|
||||
}
|
||||
|
||||
@ -7860,7 +7860,7 @@ bgp_show_route (struct vty *vty, const char *view_name, const char *ip_str,
|
||||
/* BGP route print out function. */
|
||||
DEFUN (show_ip_bgp_ipv4,
|
||||
show_ip_bgp_ipv4_cmd,
|
||||
"show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>]\
|
||||
"show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]]\
|
||||
[<\
|
||||
cidr-only\
|
||||
|dampening <flap-statistics|dampened-paths|parameters>\
|
||||
@ -7880,12 +7880,12 @@ DEFUN (show_ip_bgp_ipv4,
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Display only routes with non-natural netmasks\n"
|
||||
"Display detailed information about dampening\n"
|
||||
@ -7930,7 +7930,7 @@ DEFUN (show_ip_bgp_ipv4,
|
||||
{
|
||||
afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
|
||||
if (argv_find (argv, argc, "unicast", &idx) || argv_find (argv, argc, "multicast", &idx))
|
||||
safi = strmatch (argv[idx]->text, "unicast") ? SAFI_UNICAST : SAFI_MULTICAST;
|
||||
safi = bgp_vty_safi_from_arg (argv[idx]->text);
|
||||
}
|
||||
else if (argv_find (argv, argc, "encap", &idx) || argv_find (argv, argc, "vpnv4", &idx))
|
||||
{
|
||||
@ -8007,7 +8007,7 @@ DEFUN (show_ip_bgp_ipv4,
|
||||
|
||||
DEFUN (show_ip_bgp_route,
|
||||
show_ip_bgp_route_cmd,
|
||||
"show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>]"
|
||||
"show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]]"
|
||||
"<A.B.C.D|A.B.C.D/M|X:X::X:X|X:X::X:X/M> [<bestpath|multipath>] [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
@ -8016,12 +8016,12 @@ DEFUN (show_ip_bgp_route,
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Network in the BGP routing table to display\n"
|
||||
"IPv4 prefix\n"
|
||||
@ -8096,16 +8096,20 @@ DEFUN (show_ip_bgp_route,
|
||||
|
||||
DEFUN (show_ip_bgp_regexp,
|
||||
show_ip_bgp_regexp_cmd,
|
||||
"show [ip] bgp [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] regexp REGEX...",
|
||||
"show [ip] bgp [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]|encap [unicast]|vpnv4 [unicast]>] regexp REGEX...",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
|
@ -573,8 +573,9 @@ subgroup_clear_table (struct update_subgroup *subgrp)
|
||||
|
||||
SUBGRP_FOREACH_ADJ_SAFE (subgrp, aout, taout)
|
||||
{
|
||||
bgp_adj_out_remove_subgroup (aout->rn, aout, subgrp);
|
||||
bgp_unlock_node (aout->rn);
|
||||
struct bgp_node *rn = aout->rn;
|
||||
bgp_adj_out_remove_subgroup (rn, aout, subgrp);
|
||||
bgp_unlock_node (rn);
|
||||
}
|
||||
}
|
||||
|
||||
|
160
bgpd/bgp_vty.c
160
bgpd/bgp_vty.c
@ -123,25 +123,29 @@ bgp_parse_afi(const char *str, afi_t *afi)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* supports (unicast|multicast|vpn|encap) */
|
||||
safi_t
|
||||
bgp_vty_safi_from_arg(const char *safi_str)
|
||||
{
|
||||
safi_t safi = SAFI_MAX; /* unknown */
|
||||
if (strncmp (safi_str, "m", 1) == 0)
|
||||
safi = SAFI_MULTICAST;
|
||||
else if (strncmp (safi_str, "u", 1) == 0)
|
||||
safi = SAFI_UNICAST;
|
||||
else if (strncmp (safi_str, "e", 1) == 0)
|
||||
safi = SAFI_ENCAP;
|
||||
else if (strncmp (safi_str, "v", 1) == 0)
|
||||
safi = SAFI_MPLS_VPN;
|
||||
return safi;
|
||||
}
|
||||
|
||||
int
|
||||
bgp_parse_safi(const char *str, safi_t *safi)
|
||||
{
|
||||
if (!strcmp(str, "encap")) {
|
||||
*safi = SAFI_ENCAP;
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(str, "multicast")) {
|
||||
*safi = SAFI_MULTICAST;
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(str, "unicast")) {
|
||||
*safi = SAFI_UNICAST;
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(str, "vpn")) {
|
||||
*safi = SAFI_MPLS_VPN;
|
||||
return 0;
|
||||
}
|
||||
*safi = bgp_vty_safi_from_arg(str);
|
||||
if (*safi != SAFI_MAX)
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -5411,17 +5415,31 @@ DEFUN (address_family_ipv4,
|
||||
|
||||
DEFUN (address_family_ipv4_safi,
|
||||
address_family_ipv4_safi_cmd,
|
||||
"address-family ipv4 <unicast|multicast>",
|
||||
"address-family ipv4 <unicast|multicast|vpn|encap>",
|
||||
"Enter Address Family command mode\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n")
|
||||
{
|
||||
int idx_safi = 2;
|
||||
if (strncmp (argv[idx_safi]->arg, "m", 1) == 0)
|
||||
vty->node = BGP_IPV4M_NODE;
|
||||
else
|
||||
vty->node = BGP_IPV4_NODE;
|
||||
switch (bgp_vty_safi_from_arg(argv[idx_safi]->arg))
|
||||
{
|
||||
case SAFI_MULTICAST:
|
||||
vty->node = BGP_IPV4M_NODE;
|
||||
break;
|
||||
case SAFI_ENCAP:
|
||||
vty->node = BGP_ENCAP_NODE;
|
||||
break;
|
||||
case SAFI_MPLS_VPN:
|
||||
vty->node = BGP_VPNV4_NODE;
|
||||
break;
|
||||
case SAFI_UNICAST:
|
||||
default:
|
||||
vty->node = BGP_IPV4_NODE;
|
||||
break;
|
||||
}
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
@ -5438,10 +5456,12 @@ DEFUN (address_family_ipv6,
|
||||
|
||||
DEFUN (address_family_ipv6_safi,
|
||||
address_family_ipv6_safi_cmd,
|
||||
"address-family ipv6 <unicast|multicast>",
|
||||
"address-family ipv6 <unicast|multicast|vpn|encap>",
|
||||
"Enter Address Family command mode\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n")
|
||||
{
|
||||
int idx_safi = 2;
|
||||
@ -5598,7 +5618,7 @@ bgp_clear_prefix (struct vty *vty, const char *view_name, const char *ip_str,
|
||||
/* one clear bgp command to rule them all */
|
||||
DEFUN (clear_ip_bgp_all,
|
||||
clear_ip_bgp_all_cmd,
|
||||
"clear [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] <*|A.B.C.D|X:X::X:X|WORD|(1-4294967295)|external|peer-group WORD> [<soft [<in|out>]|in [prefix-filter]|out>]",
|
||||
"clear [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]] <*|A.B.C.D|X:X::X:X|WORD|(1-4294967295)|external|peer-group WORD> [<soft [<in|out>]|in [prefix-filter]|out>]",
|
||||
CLEAR_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
@ -5614,9 +5634,13 @@ DEFUN (clear_ip_bgp_all,
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
@ -5702,12 +5726,12 @@ DEFUN (clear_ip_bgp_all,
|
||||
{
|
||||
afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
|
||||
if (argv_find (argv, argc, "unicast", &idx) || argv_find (argv, argc, "multicast", &idx))
|
||||
safi = strmatch (argv[idx]->text, "unicast") ? SAFI_UNICAST : SAFI_MULTICAST;
|
||||
safi = bgp_vty_safi_from_arg (argv[idx]->text);
|
||||
}
|
||||
else if (argv_find (argv, argc, "encap", &idx) || argv_find (argv, argc, "vpnv4", &idx))
|
||||
{
|
||||
afi = AFI_IP;
|
||||
safi = strmatch (argv[idx]->text, "encap") ? SAFI_ENCAP : SAFI_MPLS_VPN;
|
||||
safi = bgp_vty_safi_from_arg (argv[idx]->text);
|
||||
// advance idx if necessary
|
||||
argv_find (argv, argc, "unicast", &idx);
|
||||
}
|
||||
@ -5759,27 +5783,27 @@ DEFUN (clear_ip_bgp_prefix,
|
||||
|
||||
DEFUN (clear_bgp_ipv6_safi_prefix,
|
||||
clear_bgp_ipv6_safi_prefix_cmd,
|
||||
"clear [ip] bgp ipv6 <unicast|multicast> prefix X:X::X:X/M",
|
||||
"clear [ip] bgp ipv6 <unicast|multicast|vpn|encap> prefix X:X::X:X/M",
|
||||
CLEAR_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Clear bestpath and re-advertise\n"
|
||||
"IPv6 prefix\n")
|
||||
{
|
||||
int idx_safi = 3;
|
||||
int idx_ipv6_prefixlen = 5;
|
||||
if (strncmp (argv[idx_safi]->arg, "m", 1) == 0)
|
||||
return bgp_clear_prefix (vty, NULL, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, SAFI_MULTICAST, NULL);
|
||||
else
|
||||
return bgp_clear_prefix (vty, NULL, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, SAFI_UNICAST, NULL);
|
||||
safi_t safi = bgp_vty_safi_from_arg (argv[idx_safi]->arg);
|
||||
return bgp_clear_prefix (vty, NULL, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, safi, NULL);
|
||||
}
|
||||
|
||||
DEFUN (clear_bgp_instance_ipv6_safi_prefix,
|
||||
clear_bgp_instance_ipv6_safi_prefix_cmd,
|
||||
"clear [ip] bgp <view|vrf> WORD ipv6 <unicast|multicast> prefix X:X::X:X/M",
|
||||
"clear [ip] bgp <view|vrf> WORD ipv6 <unicast|multicast|vpn|encap> prefix X:X::X:X/M",
|
||||
CLEAR_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
@ -5787,16 +5811,16 @@ DEFUN (clear_bgp_instance_ipv6_safi_prefix,
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Clear bestpath and re-advertise\n"
|
||||
"IPv6 prefix\n")
|
||||
{
|
||||
int idx_word = 3;
|
||||
int idx_safi = 5;
|
||||
int idx_ipv6_prefixlen = 7;
|
||||
if (strncmp (argv[idx_safi]->arg, "m", 1) == 0)
|
||||
return bgp_clear_prefix (vty, argv[idx_word]->arg, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, SAFI_MULTICAST, NULL);
|
||||
else
|
||||
return bgp_clear_prefix (vty, argv[idx_word]->arg, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, SAFI_UNICAST, NULL);
|
||||
safi_t safi = bgp_vty_safi_from_arg (argv[idx_safi]->text);
|
||||
return bgp_clear_prefix (vty, argv[idx_word]->arg, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, safi, NULL);
|
||||
}
|
||||
|
||||
DEFUN (show_bgp_views,
|
||||
@ -6118,6 +6142,10 @@ bgp_show_summary (struct vty *vty, struct bgp *bgp, int afi, int safi,
|
||||
|
||||
if (peer->afc[afi][safi])
|
||||
{
|
||||
memset(dn_flag, '\0', sizeof(dn_flag));
|
||||
if (peer_dynamic_neighbor(peer))
|
||||
dn_flag[0] = '*';
|
||||
|
||||
if (peer->hostname && bgp_flag_check(bgp, BGP_FLAG_SHOW_HOSTNAME))
|
||||
sprintf(neighbor_buf, "%s%s(%s) ", dn_flag, peer->hostname, peer->host);
|
||||
else
|
||||
@ -6513,7 +6541,7 @@ bgp_show_summary_vty (struct vty *vty, const char *name,
|
||||
/* `show [ip] bgp summary' commands. */
|
||||
DEFUN (show_ip_bgp_summary,
|
||||
show_ip_bgp_summary_cmd,
|
||||
"show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 <all|rd ASN:nn_or_IP-address:nn>>] summary [json]",
|
||||
"show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]|vpnv4 <all|rd ASN:nn_or_IP-address:nn>>] summary [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
@ -6521,11 +6549,13 @@ DEFUN (show_ip_bgp_summary,
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Display information about all VPNv4 NLRIs\n"
|
||||
"Display information for a route distinguisher\n"
|
||||
@ -6550,7 +6580,7 @@ DEFUN (show_ip_bgp_summary,
|
||||
{
|
||||
afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
|
||||
if (argv_find (argv, argc, "unicast", &idx) || argv_find (argv, argc, "multicast", &idx))
|
||||
safi = strmatch (argv[idx]->text, "unicast") ? SAFI_UNICAST : SAFI_MULTICAST;
|
||||
safi = bgp_vty_safi_from_arg (argv[idx]->text);
|
||||
}
|
||||
else if (argv_find (argv, argc, "encap", &idx))
|
||||
{
|
||||
@ -8452,12 +8482,14 @@ DEFUN (show_ip_bgp_neighbors,
|
||||
same.*/
|
||||
DEFUN (show_ip_bgp_paths,
|
||||
show_ip_bgp_paths_cmd,
|
||||
"show [ip] bgp [<unicast|multicast>] paths",
|
||||
"show [ip] bgp [<unicast|multicast|vpn|encap>] paths",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Path information\n")
|
||||
{
|
||||
vty_out (vty, "Address Refcnt Path%s", VTY_NEWLINE);
|
||||
@ -8555,7 +8587,7 @@ bgp_show_update_groups(struct vty *vty, const char *name,
|
||||
|
||||
DEFUN (show_ip_bgp_updgrps,
|
||||
show_ip_bgp_updgrps_cmd,
|
||||
"show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] update-groups [SUBGROUP-ID]",
|
||||
"show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]|vpnv4 [unicast]>] update-groups [SUBGROUP-ID]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
@ -8563,11 +8595,13 @@ DEFUN (show_ip_bgp_updgrps,
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Detailed info about dynamic update groups\n"
|
||||
@ -8591,12 +8625,12 @@ DEFUN (show_ip_bgp_updgrps,
|
||||
{
|
||||
afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
|
||||
if (argv_find (argv, argc, "unicast", &idx) || argv_find (argv, argc, "multicast", &idx))
|
||||
safi = strmatch (argv[idx]->text, "unicast") ? SAFI_UNICAST : SAFI_MULTICAST;
|
||||
safi = bgp_vty_safi_from_arg (argv[idx]->text);
|
||||
}
|
||||
else if (argv_find (argv, argc, "encap", &idx) || argv_find (argv, argc, "vpnv4", &idx))
|
||||
{
|
||||
afi = AFI_IP;
|
||||
safi = strmatch (argv[idx]->text, "encap") ? SAFI_ENCAP : SAFI_MPLS_VPN;
|
||||
safi = bgp_vty_safi_from_arg (argv[idx]->text);
|
||||
// advance idx if necessary
|
||||
argv_find (argv, argc, "unicast", &idx);
|
||||
}
|
||||
@ -8721,7 +8755,7 @@ DEFUN (show_ip_bgp_instance_updgrps_adj,
|
||||
|
||||
DEFUN (show_bgp_updgrps_afi_adj,
|
||||
show_bgp_updgrps_afi_adj_cmd,
|
||||
"show [ip] bgp <ipv4|ipv6> <unicast|multicast> update-groups <advertise-queue|advertised-routes|packet-queue>",
|
||||
"show [ip] bgp <ipv4|ipv6> <unicast|multicast|vpn|encap> update-groups <advertise-queue|advertised-routes|packet-queue>",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
@ -8729,6 +8763,8 @@ DEFUN (show_bgp_updgrps_afi_adj,
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Detailed info about dynamic update groups\n"
|
||||
"Advertisement queue\n"
|
||||
"Announced routes\n"
|
||||
@ -8742,7 +8778,7 @@ DEFUN (show_bgp_updgrps_afi_adj,
|
||||
safi_t safi;
|
||||
|
||||
afi = (strcmp(argv[idx_afi]->arg, "ipv4") == 0) ? AFI_IP : AFI_IP6;
|
||||
safi = (strncmp (argv[idx_safi]->arg, "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
|
||||
safi = bgp_vty_safi_from_arg(argv[idx_safi]->arg);
|
||||
show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[idx_type]->arg, 0);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
@ -8831,7 +8867,7 @@ DEFUN (show_ip_bgp_instance_updgrps_adj_s,
|
||||
|
||||
DEFUN (show_bgp_updgrps_afi_adj_s,
|
||||
show_bgp_updgrps_afi_adj_s_cmd,
|
||||
"show [ip] bgp <ipv4|ipv6> <unicast|multicast> update-groups SUBGROUP-ID <advertise-queue|advertised-routes|packet-queue>",
|
||||
"show [ip] bgp <ipv4|ipv6> <unicast|multicast|vpn|encap> update-groups SUBGROUP-ID <advertise-queue|advertised-routes|packet-queue>",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
@ -8839,6 +8875,8 @@ DEFUN (show_bgp_updgrps_afi_adj_s,
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Detailed info about dynamic update groups\n"
|
||||
"Specific subgroup to display info for\n"
|
||||
"Advertisement queue\n"
|
||||
@ -8855,7 +8893,7 @@ DEFUN (show_bgp_updgrps_afi_adj_s,
|
||||
uint64_t subgrp_id;
|
||||
|
||||
afi = (strmatch(argv[idx_afi]->text, "ipv4")) ? AFI_IP : AFI_IP6;
|
||||
safi = (strmatch(argv[idx_safi]->text, "unicast")) ? SAFI_UNICAST : SAFI_MULTICAST;
|
||||
safi = bgp_vty_safi_from_arg(argv[idx_safi]->text);
|
||||
VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx_subgroup_id]->arg);
|
||||
|
||||
show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[idx_type]->arg, subgrp_id);
|
||||
@ -9098,7 +9136,7 @@ DEFUN (bgp_redistribute_ipv4,
|
||||
bgp_redistribute_ipv4_cmd,
|
||||
"redistribute <kernel|connected|static|rip|ospf|isis|pim|table>",
|
||||
"Redistribute information from another routing protocol\n"
|
||||
QUAGGA_IP_REDIST_HELP_STR_BGPD)
|
||||
FRR_IP_REDIST_HELP_STR_BGPD)
|
||||
{
|
||||
VTY_DECLVAR_CONTEXT(bgp, bgp);
|
||||
int idx_protocol = 1;
|
||||
@ -9118,7 +9156,7 @@ DEFUN (bgp_redistribute_ipv4_rmap,
|
||||
bgp_redistribute_ipv4_rmap_cmd,
|
||||
"redistribute <kernel|connected|static|rip|ospf|isis|pim|table> route-map WORD",
|
||||
"Redistribute information from another routing protocol\n"
|
||||
QUAGGA_IP_REDIST_HELP_STR_BGPD
|
||||
FRR_IP_REDIST_HELP_STR_BGPD
|
||||
"Route map reference\n"
|
||||
"Pointer to route-map entries\n")
|
||||
{
|
||||
@ -9144,7 +9182,7 @@ DEFUN (bgp_redistribute_ipv4_metric,
|
||||
bgp_redistribute_ipv4_metric_cmd,
|
||||
"redistribute <kernel|connected|static|rip|ospf|isis|pim|table> metric (0-4294967295)",
|
||||
"Redistribute information from another routing protocol\n"
|
||||
QUAGGA_IP_REDIST_HELP_STR_BGPD
|
||||
FRR_IP_REDIST_HELP_STR_BGPD
|
||||
"Metric for redistributed routes\n"
|
||||
"Default metric\n")
|
||||
{
|
||||
@ -9172,7 +9210,7 @@ DEFUN (bgp_redistribute_ipv4_rmap_metric,
|
||||
bgp_redistribute_ipv4_rmap_metric_cmd,
|
||||
"redistribute <kernel|connected|static|rip|ospf|isis|pim|table> route-map WORD metric (0-4294967295)",
|
||||
"Redistribute information from another routing protocol\n"
|
||||
QUAGGA_IP_REDIST_HELP_STR_BGPD
|
||||
FRR_IP_REDIST_HELP_STR_BGPD
|
||||
"Route map reference\n"
|
||||
"Pointer to route-map entries\n"
|
||||
"Metric for redistributed routes\n"
|
||||
@ -9204,7 +9242,7 @@ DEFUN (bgp_redistribute_ipv4_metric_rmap,
|
||||
bgp_redistribute_ipv4_metric_rmap_cmd,
|
||||
"redistribute <kernel|connected|static|rip|ospf|isis|pim|table> metric (0-4294967295) route-map WORD",
|
||||
"Redistribute information from another routing protocol\n"
|
||||
QUAGGA_IP_REDIST_HELP_STR_BGPD
|
||||
FRR_IP_REDIST_HELP_STR_BGPD
|
||||
"Metric for redistributed routes\n"
|
||||
"Default metric\n"
|
||||
"Route map reference\n"
|
||||
@ -9423,7 +9461,7 @@ DEFUN (no_bgp_redistribute_ipv4,
|
||||
"no redistribute <kernel|connected|static|rip|ospf|isis|pim|table> [metric (0-4294967295)] [route-map WORD]",
|
||||
NO_STR
|
||||
"Redistribute information from another routing protocol\n"
|
||||
QUAGGA_IP_REDIST_HELP_STR_BGPD
|
||||
FRR_IP_REDIST_HELP_STR_BGPD
|
||||
"Metric for redistributed routes\n"
|
||||
"Default metric\n"
|
||||
"Route map reference\n"
|
||||
@ -9447,7 +9485,7 @@ DEFUN (bgp_redistribute_ipv6,
|
||||
bgp_redistribute_ipv6_cmd,
|
||||
"redistribute <kernel|connected|static|ripng|ospf6|isis|table>",
|
||||
"Redistribute information from another routing protocol\n"
|
||||
QUAGGA_IP6_REDIST_HELP_STR_BGPD)
|
||||
FRR_IP6_REDIST_HELP_STR_BGPD)
|
||||
{
|
||||
VTY_DECLVAR_CONTEXT(bgp, bgp);
|
||||
int idx_protocol = 1;
|
||||
@ -9468,7 +9506,7 @@ DEFUN (bgp_redistribute_ipv6_rmap,
|
||||
bgp_redistribute_ipv6_rmap_cmd,
|
||||
"redistribute <kernel|connected|static|ripng|ospf6|isis|table> route-map WORD",
|
||||
"Redistribute information from another routing protocol\n"
|
||||
QUAGGA_IP6_REDIST_HELP_STR_BGPD
|
||||
FRR_IP6_REDIST_HELP_STR_BGPD
|
||||
"Route map reference\n"
|
||||
"Pointer to route-map entries\n")
|
||||
{
|
||||
@ -9494,7 +9532,7 @@ DEFUN (bgp_redistribute_ipv6_metric,
|
||||
bgp_redistribute_ipv6_metric_cmd,
|
||||
"redistribute <kernel|connected|static|ripng|ospf6|isis|table> metric (0-4294967295)",
|
||||
"Redistribute information from another routing protocol\n"
|
||||
QUAGGA_IP6_REDIST_HELP_STR_BGPD
|
||||
FRR_IP6_REDIST_HELP_STR_BGPD
|
||||
"Metric for redistributed routes\n"
|
||||
"Default metric\n")
|
||||
{
|
||||
@ -9522,7 +9560,7 @@ DEFUN (bgp_redistribute_ipv6_rmap_metric,
|
||||
bgp_redistribute_ipv6_rmap_metric_cmd,
|
||||
"redistribute <kernel|connected|static|ripng|ospf6|isis|table> route-map WORD metric (0-4294967295)",
|
||||
"Redistribute information from another routing protocol\n"
|
||||
QUAGGA_IP6_REDIST_HELP_STR_BGPD
|
||||
FRR_IP6_REDIST_HELP_STR_BGPD
|
||||
"Route map reference\n"
|
||||
"Pointer to route-map entries\n"
|
||||
"Metric for redistributed routes\n"
|
||||
@ -9554,7 +9592,7 @@ DEFUN (bgp_redistribute_ipv6_metric_rmap,
|
||||
bgp_redistribute_ipv6_metric_rmap_cmd,
|
||||
"redistribute <kernel|connected|static|ripng|ospf6|isis|table> metric (0-4294967295) route-map WORD",
|
||||
"Redistribute information from another routing protocol\n"
|
||||
QUAGGA_IP6_REDIST_HELP_STR_BGPD
|
||||
FRR_IP6_REDIST_HELP_STR_BGPD
|
||||
"Metric for redistributed routes\n"
|
||||
"Default metric\n"
|
||||
"Route map reference\n"
|
||||
@ -9587,7 +9625,7 @@ DEFUN (no_bgp_redistribute_ipv6,
|
||||
"no redistribute <kernel|connected|static|ripng|ospf6|isis|table> [metric (0-4294967295)] [route-map WORD]",
|
||||
NO_STR
|
||||
"Redistribute information from another routing protocol\n"
|
||||
QUAGGA_IP6_REDIST_HELP_STR_BGPD
|
||||
FRR_IP6_REDIST_HELP_STR_BGPD
|
||||
"Metric for redistributed routes\n"
|
||||
"Default metric\n"
|
||||
"Route map reference\n"
|
||||
@ -9606,10 +9644,6 @@ DEFUN (no_bgp_redistribute_ipv6,
|
||||
|
||||
return bgp_redistribute_unset (bgp, AFI_IP6, type, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /* HAVE_IPV6 */
|
||||
|
||||
int
|
||||
|
@ -26,6 +26,13 @@ struct bgp;
|
||||
#define BGP_INSTANCE_HELP_STR "BGP view\nBGP VRF\nView/VRF name\n"
|
||||
#define BGP_INSTANCE_ALL_HELP_STR "BGP view\nBGP VRF\nAll Views/VRFs\n"
|
||||
|
||||
#define AFI_SAFI_STR \
|
||||
"Address family\n" \
|
||||
"Address Family modifier\n" \
|
||||
"Address Family modifier\n" \
|
||||
"Address Family modifier\n" \
|
||||
"Address Family modifier\n"
|
||||
|
||||
extern void bgp_vty_init (void);
|
||||
extern const char *afi_safi_print (afi_t, safi_t);
|
||||
extern int bgp_config_write_update_delay (struct vty *, struct bgp *);
|
||||
@ -42,4 +49,7 @@ bgp_parse_afi(const char *str, afi_t *afi);
|
||||
extern int
|
||||
bgp_parse_safi(const char *str, safi_t *safi);
|
||||
|
||||
extern safi_t
|
||||
bgp_vty_safi_from_arg(const char *safi_str);
|
||||
|
||||
#endif /* _QUAGGA_BGP_VTY_H */
|
||||
|
@ -3497,7 +3497,7 @@ static struct cmd_node bgp_vnc_l2_group_node = {
|
||||
1
|
||||
};
|
||||
|
||||
static struct rfapi_l2_group_cfg *
|
||||
struct rfapi_l2_group_cfg *
|
||||
bgp_rfapi_get_group_by_lni_label (
|
||||
struct bgp *bgp,
|
||||
uint32_t logical_net_id,
|
||||
|
@ -300,6 +300,12 @@ bgp_rfapi_show_summary (struct bgp *bgp, struct vty *vty);
|
||||
extern struct rfapi_cfg *
|
||||
bgp_rfapi_get_config (struct bgp *bgp);
|
||||
|
||||
extern struct rfapi_l2_group_cfg *
|
||||
bgp_rfapi_get_group_by_lni_label (
|
||||
struct bgp *bgp,
|
||||
uint32_t logical_net_id,
|
||||
uint32_t label);
|
||||
|
||||
extern struct ecommunity *
|
||||
bgp_rfapi_get_ecommunity_by_lni_label (
|
||||
struct bgp *bgp,
|
||||
|
@ -2842,13 +2842,39 @@ rfapi_register (
|
||||
* If mac address is set, add an RT based on the registered LNI
|
||||
*/
|
||||
memset ((char *) &ecom_value, 0, sizeof (ecom_value));
|
||||
ecom_value.val[1] = 0x02;
|
||||
ecom_value.val[1] = ECOMMUNITY_ROUTE_TARGET;
|
||||
ecom_value.val[5] = (l2o->logical_net_id >> 16) & 0xff;
|
||||
ecom_value.val[6] = (l2o->logical_net_id >> 8) & 0xff;
|
||||
ecom_value.val[7] = (l2o->logical_net_id >> 0) & 0xff;
|
||||
rtlist = ecommunity_new();
|
||||
ecommunity_add_val (rtlist, &ecom_value);
|
||||
}
|
||||
if (l2o->tag_id)
|
||||
{
|
||||
as_t as = bgp->as;
|
||||
uint16_t val = l2o->tag_id;
|
||||
memset ((char *) &ecom_value, 0, sizeof (ecom_value));
|
||||
ecom_value.val[1] = ECOMMUNITY_ROUTE_TARGET;
|
||||
if (as > BGP_AS_MAX)
|
||||
{
|
||||
ecom_value.val[0] = ECOMMUNITY_ENCODE_AS4;
|
||||
ecom_value.val[2] = (as >>24) & 0xff;
|
||||
ecom_value.val[3] = (as >>16) & 0xff;
|
||||
ecom_value.val[4] = (as >>8) & 0xff;
|
||||
ecom_value.val[5] = as & 0xff;
|
||||
}
|
||||
else
|
||||
{
|
||||
ecom_value.val[0] = ECOMMUNITY_ENCODE_AS;
|
||||
ecom_value.val[2] = (as >>8) & 0xff;
|
||||
ecom_value.val[3] = as & 0xff;
|
||||
}
|
||||
ecom_value.val[6] = (val >> 8) & 0xff;
|
||||
ecom_value.val[7] = val & 0xff;
|
||||
if (rtlist == NULL)
|
||||
rtlist = ecommunity_new();
|
||||
ecommunity_add_val (rtlist, &ecom_value);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -89,6 +89,7 @@ struct rfapi_l2address_option
|
||||
uint32_t logical_net_id; /* ~= EVPN Ethernet Segment Id,
|
||||
must not be zero for mac regis. */
|
||||
uint8_t local_nve_id;
|
||||
uint16_t tag_id; /* EVPN Ethernet Tag ID, 0 = none */
|
||||
};
|
||||
|
||||
typedef enum
|
||||
|
@ -1130,6 +1130,49 @@ rfapiEcommunityGetLNI (struct ecommunity *ecom, uint32_t * lni)
|
||||
return ENOENT;
|
||||
}
|
||||
|
||||
int
|
||||
rfapiEcommunityGetEthernetTag (struct ecommunity *ecom, uint16_t * tag_id)
|
||||
{
|
||||
struct bgp *bgp = bgp_get_default ();
|
||||
*tag_id = 0; /* default to untagged */
|
||||
if (ecom)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < ecom->size; ++i)
|
||||
{
|
||||
as_t as = 0;
|
||||
int encode = 0;
|
||||
uint8_t *p = ecom->val + (i * ECOMMUNITY_SIZE);
|
||||
|
||||
/* High-order octet of type. */
|
||||
encode = *p++;
|
||||
|
||||
if (*p++ == ECOMMUNITY_ROUTE_TARGET) {
|
||||
if (encode == ECOMMUNITY_ENCODE_AS4)
|
||||
{
|
||||
as = (*p++ << 24);
|
||||
as |= (*p++ << 16);
|
||||
as |= (*p++ << 8);
|
||||
as |= (*p++);
|
||||
}
|
||||
else if (encode == ECOMMUNITY_ENCODE_AS)
|
||||
{
|
||||
as = (*p++ << 8);
|
||||
as |= (*p++);
|
||||
p += 2; /* skip next two, tag/vid always in lowest bytes */
|
||||
}
|
||||
if (as == bgp->as)
|
||||
{
|
||||
*tag_id = *p++ << 8;
|
||||
*tag_id |= (*p++);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ENOENT;
|
||||
}
|
||||
|
||||
static int
|
||||
rfapiVpnBiNhEqualsPt (struct bgp_info *bi, struct rfapi_ip_addr *hpt)
|
||||
{
|
||||
@ -1377,6 +1420,8 @@ rfapiRouteInfo2NextHopEntry (
|
||||
{
|
||||
(void) rfapiEcommunityGetLNI (bi->attr->extra->ecommunity,
|
||||
&vo->v.l2addr.logical_net_id);
|
||||
(void) rfapiEcommunityGetEthernetTag (bi->attr->extra->ecommunity,
|
||||
&vo->v.l2addr.tag_id);
|
||||
}
|
||||
|
||||
/* local_nve_id comes from lower byte of RD type */
|
||||
@ -2106,6 +2151,7 @@ rfapiBgpInfoAttachSorted (
|
||||
info_new->next = next;
|
||||
if (next)
|
||||
next->prev = info_new;
|
||||
bgp_attr_intern (info_new->attr);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2114,6 +2160,7 @@ rfapiBgpInfoDetach (struct route_node *rn, struct bgp_info *bi)
|
||||
/*
|
||||
* Remove the route (doubly-linked)
|
||||
*/
|
||||
// bgp_attr_unintern (&bi->attr);
|
||||
if (bi->next)
|
||||
bi->next->prev = bi->prev;
|
||||
if (bi->prev)
|
||||
@ -2464,6 +2511,7 @@ rfapiMonitorEncapAdd (
|
||||
__func__, import_table, vpn_bi, afi, rn, m);
|
||||
|
||||
RFAPI_CHECK_REFCOUNT (rn, SAFI_ENCAP, 0);
|
||||
bgp_attr_intern (vpn_bi->attr);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2966,6 +3014,7 @@ rfapiBiStartWithdrawTimer (
|
||||
wcb->node = rn;
|
||||
wcb->info = bi;
|
||||
wcb->import_table = import_table;
|
||||
bgp_attr_intern (bi->attr);
|
||||
|
||||
if (VNC_DEBUG(VERBOSE))
|
||||
{
|
||||
|
@ -203,6 +203,9 @@ extern int rfapiEcommunityGetLNI (
|
||||
struct ecommunity *ecom,
|
||||
uint32_t *lni);
|
||||
|
||||
extern int rfapiEcommunityGetEthernetTag (
|
||||
struct ecommunity *ecom,
|
||||
uint16_t * tag_id);
|
||||
|
||||
/* enable for debugging; disable for performance */
|
||||
#if 0
|
||||
|
@ -707,6 +707,8 @@ rfapiRibBi2Ri(
|
||||
{
|
||||
(void) rfapiEcommunityGetLNI (bi->attr->extra->ecommunity,
|
||||
&vo->v.l2addr.logical_net_id);
|
||||
(void) rfapiEcommunityGetEthernetTag (bi->attr->extra->ecommunity,
|
||||
&vo->v.l2addr.tag_id);
|
||||
}
|
||||
|
||||
/* local_nve_id comes from RD */
|
||||
|
@ -2553,7 +2553,7 @@ DEFUN (add_vnc_prefix_cost_life_lnh,
|
||||
"add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> cost (0-255) lifetime (1-4294967295) .LNH_OPTIONS",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
"VN address of NVE\n"
|
||||
@ -2579,7 +2579,7 @@ DEFUN (add_vnc_prefix_life_cost_lnh,
|
||||
"add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> lifetime (1-4294967295) cost (0-255) .LNH_OPTIONS",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
"VN address of NVE\n"
|
||||
@ -2605,7 +2605,7 @@ DEFUN (add_vnc_prefix_cost_lnh,
|
||||
"add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> cost (0-255) .LNH_OPTIONS",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
"VN address of NVE\n"
|
||||
@ -2629,7 +2629,7 @@ DEFUN (add_vnc_prefix_life_lnh,
|
||||
"add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> lifetime (1-4294967295) .LNH_OPTIONS",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
"VN address of NVE\n"
|
||||
@ -2653,7 +2653,7 @@ DEFUN (add_vnc_prefix_lnh,
|
||||
"add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> .LNH_OPTIONS",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
"VN address of NVE\n"
|
||||
@ -2678,7 +2678,7 @@ DEFUN (add_vnc_prefix_cost_life,
|
||||
"add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> cost (0-255) lifetime (1-4294967295)",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
"VN address of NVE\n"
|
||||
@ -2704,7 +2704,7 @@ DEFUN (add_vnc_prefix_life_cost,
|
||||
"add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> lifetime (1-4294967295) cost (0-255)",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
"VN address of NVE\n"
|
||||
@ -2730,7 +2730,7 @@ DEFUN (add_vnc_prefix_cost,
|
||||
"add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> cost (0-255)",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
"VN address of NVE\n"
|
||||
@ -2754,7 +2754,7 @@ DEFUN (add_vnc_prefix_life,
|
||||
"add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> lifetime (1-4294967295)",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
"VN address of NVE\n"
|
||||
@ -2778,7 +2778,7 @@ DEFUN (add_vnc_prefix,
|
||||
"add vnc prefix <A.B.C.D/M|X:X::X:X/M> vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X>",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
"VN address of NVE\n"
|
||||
@ -2803,7 +2803,7 @@ DEFUN (add_vnc_mac_vni_prefix_cost_life,
|
||||
"add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> prefix <A.B.C.D/M|X:X::X:X/M> cost (0-255) lifetime (1-4294967295)",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify mac address infomation\n"
|
||||
"Add/modify mac address information\n"
|
||||
"MAC address\n"
|
||||
"Virtual Network Identifier follows\n"
|
||||
"Virtual Network Identifier\n"
|
||||
@ -2813,7 +2813,7 @@ DEFUN (add_vnc_mac_vni_prefix_cost_life,
|
||||
"UN address of NVE\n"
|
||||
"UN IPv4 interface address\n"
|
||||
"UN IPv6 interface address\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
"Administrative cost [default: 255]\n"
|
||||
@ -2833,7 +2833,7 @@ DEFUN (add_vnc_mac_vni_prefix_life,
|
||||
"add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> prefix <A.B.C.D/M|X:X::X:X/M> lifetime (1-4294967295)",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify mac address infomation\n"
|
||||
"Add/modify mac address information\n"
|
||||
"MAC address\n"
|
||||
"Virtual Network Identifier follows\n"
|
||||
"Virtual Network Identifier\n"
|
||||
@ -2843,7 +2843,7 @@ DEFUN (add_vnc_mac_vni_prefix_life,
|
||||
"UN address of NVE\n"
|
||||
"UN IPv4 interface address\n"
|
||||
"UN IPv6 interface address\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
"Registration lifetime [default: infinite]\n"
|
||||
@ -2860,7 +2860,7 @@ DEFUN (add_vnc_mac_vni_prefix_cost,
|
||||
"add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> prefix <A.B.C.D/M|X:X::X:X/M> cost (0-255)",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify mac address infomation\n"
|
||||
"Add/modify mac address information\n"
|
||||
"MAC address\n"
|
||||
"Virtual Network Identifier follows\n"
|
||||
"Virtual Network Identifier\n"
|
||||
@ -2870,7 +2870,7 @@ DEFUN (add_vnc_mac_vni_prefix_cost,
|
||||
"UN address of NVE\n"
|
||||
"UN IPv4 interface address\n"
|
||||
"UN IPv6 interface address\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
"Administrative cost [default: 255]\n" "Administrative cost\n")
|
||||
@ -2886,7 +2886,7 @@ DEFUN (add_vnc_mac_vni_prefix,
|
||||
"add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> prefix <A.B.C.D/M|X:X::X:X/M>",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify mac address infomation\n"
|
||||
"Add/modify mac address information\n"
|
||||
"MAC address\n"
|
||||
"Virtual Network Identifier follows\n"
|
||||
"Virtual Network Identifier\n"
|
||||
@ -2896,7 +2896,7 @@ DEFUN (add_vnc_mac_vni_prefix,
|
||||
"UN address of NVE\n"
|
||||
"UN IPv4 interface address\n"
|
||||
"UN IPv6 interface address\n"
|
||||
"Add/modify prefix related infomation\n"
|
||||
"Add/modify prefix related information\n"
|
||||
"IPv4 prefix\n" "IPv6 prefix\n")
|
||||
{
|
||||
/* pfx vn un cost life */
|
||||
@ -2910,7 +2910,7 @@ DEFUN (add_vnc_mac_vni_cost_life,
|
||||
"add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> cost (0-255) lifetime (1-4294967295)",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify mac address infomation\n"
|
||||
"Add/modify mac address information\n"
|
||||
"MAC address\n"
|
||||
"Virtual Network Identifier follows\n"
|
||||
"Virtual Network Identifier\n"
|
||||
@ -2937,7 +2937,7 @@ DEFUN (add_vnc_mac_vni_cost,
|
||||
"add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> cost (0-255)",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify mac address infomation\n"
|
||||
"Add/modify mac address information\n"
|
||||
"MAC address\n"
|
||||
"Virtual Network Identifier follows\n"
|
||||
"Virtual Network Identifier\n"
|
||||
@ -2961,7 +2961,7 @@ DEFUN (add_vnc_mac_vni_life,
|
||||
"add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X> lifetime (1-4294967295)",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify mac address infomation\n"
|
||||
"Add/modify mac address information\n"
|
||||
"MAC address\n"
|
||||
"Virtual Network Identifier follows\n"
|
||||
"Virtual Network Identifier\n"
|
||||
@ -2986,7 +2986,7 @@ DEFUN (add_vnc_mac_vni,
|
||||
"add vnc mac YY:YY:YY:YY:YY:YY virtual-network-identifier (1-4294967295) vn <A.B.C.D|X:X::X:X> un <A.B.C.D|X:X::X:X>",
|
||||
"Add registration\n"
|
||||
"VNC Information\n"
|
||||
"Add/modify mac address infomation\n"
|
||||
"Add/modify mac address information\n"
|
||||
"MAC address\n"
|
||||
"Virtual Network Identifier follows\n"
|
||||
"Virtual Network Identifier\n"
|
||||
@ -3735,7 +3735,7 @@ DEFUN (clear_vnc_nve_vn_un,
|
||||
"clear vnc nve vn <*|A.B.C.D|X:X::X:X> un <*|A.B.C.D|X:X::X:X>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear prefix registration infomation\n"
|
||||
"Clear prefix registration information\n"
|
||||
"VN address of NVE\n"
|
||||
"VN IPv4 interface address\n"
|
||||
"VN IPv6 interface address\n"
|
||||
@ -3765,7 +3765,7 @@ DEFUN (clear_vnc_nve_un_vn,
|
||||
"clear vnc nve un <*|A.B.C.D|X:X::X:X> vn <*|A.B.C.D|X:X::X:X>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear prefix registration infomation\n"
|
||||
"Clear prefix registration information\n"
|
||||
"UN address of NVE\n"
|
||||
"UN IPv4 interface address\n"
|
||||
"UN IPv6 interface address\n"
|
||||
@ -3795,7 +3795,7 @@ DEFUN (clear_vnc_nve_vn,
|
||||
"clear vnc nve vn <*|A.B.C.D|X:X::X:X>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear prefix registration infomation\n"
|
||||
"Clear prefix registration information\n"
|
||||
"VN address of NVE\n"
|
||||
"VN IPv4 interface address\n" "VN IPv6 interface address\n")
|
||||
{
|
||||
@ -3820,7 +3820,7 @@ DEFUN (clear_vnc_nve_un,
|
||||
"clear vnc nve un <*|A.B.C.D|X:X::X:X>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear prefix registration infomation\n"
|
||||
"Clear prefix registration information\n"
|
||||
"UN address of NVE\n"
|
||||
"UN IPv4 interface address\n" "UN IPv6 interface address\n")
|
||||
{
|
||||
@ -3853,7 +3853,7 @@ DEFUN (clear_vnc_prefix_vn_un,
|
||||
"clear vnc prefix <*|A.B.C.D/M|X:X::X:X/M> vn <*|A.B.C.D|X:X::X:X> un <*|A.B.C.D|X:X::X:X>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear prefix registration infomation\n"
|
||||
"Clear prefix registration information\n"
|
||||
"All prefixes\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
@ -3883,7 +3883,7 @@ DEFUN (clear_vnc_prefix_un_vn,
|
||||
"clear vnc prefix <*|A.B.C.D/M|X:X::X:X/M> un <*|A.B.C.D|X:X::X:X> vn <*|A.B.C.D|X:X::X:X>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear prefix registration infomation\n"
|
||||
"Clear prefix registration information\n"
|
||||
"All prefixes\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
@ -3913,7 +3913,7 @@ DEFUN (clear_vnc_prefix_un,
|
||||
"clear vnc prefix <*|A.B.C.D/M|X:X::X:X/M> un <*|A.B.C.D|X:X::X:X>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear prefix registration infomation\n"
|
||||
"Clear prefix registration information\n"
|
||||
"All prefixes\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
@ -3939,7 +3939,7 @@ DEFUN (clear_vnc_prefix_vn,
|
||||
"clear vnc prefix <*|A.B.C.D/M|X:X::X:X/M> vn <*|A.B.C.D|X:X::X:X>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear prefix registration infomation\n"
|
||||
"Clear prefix registration information\n"
|
||||
"All prefixes\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
@ -3965,7 +3965,7 @@ DEFUN (clear_vnc_prefix_all,
|
||||
"clear vnc prefix <*|A.B.C.D/M|X:X::X:X/M> *",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear prefix registration infomation\n"
|
||||
"Clear prefix registration information\n"
|
||||
"All prefixes\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n"
|
||||
@ -3995,7 +3995,7 @@ DEFUN (clear_vnc_mac_vn_un,
|
||||
"clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> vn <*|A.B.C.D|X:X::X:X> un <*|A.B.C.D|X:X::X:X>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear mac registration infomation\n"
|
||||
"Clear mac registration information\n"
|
||||
"All macs\n"
|
||||
"MAC address\n"
|
||||
"VNI keyword\n"
|
||||
@ -4030,7 +4030,7 @@ DEFUN (clear_vnc_mac_un_vn,
|
||||
"clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> un <*|A.B.C.D|X:X::X:X> vn <*|A.B.C.D|X:X::X:X>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear mac registration infomation\n"
|
||||
"Clear mac registration information\n"
|
||||
"All macs\n"
|
||||
"MAC address\n"
|
||||
"VNI keyword\n"
|
||||
@ -4064,7 +4064,7 @@ DEFUN (clear_vnc_mac_un,
|
||||
"clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> un <*|A.B.C.D|X:X::X:X>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear mac registration infomation\n"
|
||||
"Clear mac registration information\n"
|
||||
"All macs\n"
|
||||
"MAC address\n"
|
||||
"VNI keyword\n"
|
||||
@ -4093,7 +4093,7 @@ DEFUN (clear_vnc_mac_vn,
|
||||
"clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> vn <*|A.B.C.D|X:X::X:X>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear mac registration infomation\n"
|
||||
"Clear mac registration information\n"
|
||||
"All macs\n"
|
||||
"MAC address\n"
|
||||
"VNI keyword\n"
|
||||
@ -4122,7 +4122,7 @@ DEFUN (clear_vnc_mac_all,
|
||||
"clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> *",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear mac registration infomation\n"
|
||||
"Clear mac registration information\n"
|
||||
"All macs\n"
|
||||
"MAC address\n"
|
||||
"VNI keyword\n"
|
||||
@ -4152,7 +4152,7 @@ DEFUN (clear_vnc_mac_vn_un_prefix,
|
||||
"clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> vn <*|A.B.C.D|X:X::X:X> un <*|A.B.C.D|X:X::X:X> prefix <*|A.B.C.D/M|X:X::X:X/M>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear mac registration infomation\n"
|
||||
"Clear mac registration information\n"
|
||||
"All macs\n"
|
||||
"MAC address\n"
|
||||
"VNI keyword\n"
|
||||
@ -4167,7 +4167,7 @@ DEFUN (clear_vnc_mac_vn_un_prefix,
|
||||
"All UN addresses\n"
|
||||
"UN IPv4 interface address\n"
|
||||
"UN IPv6 interface address\n"
|
||||
"Clear prefix registration infomation\n"
|
||||
"Clear prefix registration information\n"
|
||||
"All prefixes\n"
|
||||
"IPv4 prefix\n"
|
||||
"IPv6 prefix\n")
|
||||
@ -4191,7 +4191,7 @@ DEFUN (clear_vnc_mac_un_vn_prefix,
|
||||
"clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> un <*|A.B.C.D|X:X::X:X> vn <*|A.B.C.D|X:X::X:X> prefix <*|A.B.C.D/M|X:X::X:X/M> prefix <*|A.B.C.D/M|X:X::X:X/M>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear mac registration infomation\n"
|
||||
"Clear mac registration information\n"
|
||||
"All macs\n"
|
||||
"MAC address\n"
|
||||
"VNI keyword\n"
|
||||
@ -4225,7 +4225,7 @@ DEFUN (clear_vnc_mac_un_prefix,
|
||||
"clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> un <*|A.B.C.D|X:X::X:X> prefix <*|A.B.C.D/M|X:X::X:X/M>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear mac registration infomation\n"
|
||||
"Clear mac registration information\n"
|
||||
"All macs\n"
|
||||
"MAC address\n"
|
||||
"VNI keyword\n"
|
||||
@ -4255,7 +4255,7 @@ DEFUN (clear_vnc_mac_vn_prefix,
|
||||
"clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> vn <*|A.B.C.D|X:X::X:X> prefix <*|A.B.C.D/M|X:X::X:X/M>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear mac registration infomation\n"
|
||||
"Clear mac registration information\n"
|
||||
"All macs\n"
|
||||
"MAC address\n"
|
||||
"VNI keyword\n"
|
||||
@ -4285,7 +4285,7 @@ DEFUN (clear_vnc_mac_all_prefix,
|
||||
"clear vnc mac <*|YY:YY:YY:YY:YY:YY> virtual-network-identifier <*|(1-4294967295)> prefix <*|A.B.C.D/M|X:X::X:X/M>",
|
||||
"clear\n"
|
||||
"VNC Information\n"
|
||||
"Clear mac registration infomation\n"
|
||||
"Clear mac registration information\n"
|
||||
"All macs\n"
|
||||
"MAC address\n"
|
||||
"VNI keyword\n"
|
||||
|
@ -76,7 +76,6 @@ encap_attr_export_ce (
|
||||
memset (new, 0, sizeof (struct attr));
|
||||
bgp_attr_dup (new, orig);
|
||||
bgp_attr_extra_get (new);
|
||||
bgp_attr_flush_encap (new);
|
||||
|
||||
/*
|
||||
* Set nexthop
|
||||
|
1
bgpd/rfp-example/rfptest/.gitignore
vendored
Normal file
1
bgpd/rfp-example/rfptest/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/rfptest
|
260
configure.ac
260
configure.ac
@ -1,5 +1,5 @@
|
||||
##
|
||||
## Configure template file for Quagga.
|
||||
## Configure template file for FreeRangeRouting.
|
||||
## autoconf will generate configure script.
|
||||
##
|
||||
## Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
|
||||
@ -7,9 +7,14 @@
|
||||
##
|
||||
AC_PREREQ(2.60)
|
||||
|
||||
AC_INIT(Quagga, 2.0.999, [https://bugzilla.quagga.net])
|
||||
AC_INIT(frr, 2.0-rc0, [https://bugzilla.quagga.net])
|
||||
PACKAGE_URL="https://freerangerouting.org/"
|
||||
PACKAGE_FULLNAME="FreeRangeRouting"
|
||||
AC_SUBST(PACKAGE_FULLNAME)
|
||||
|
||||
CONFIG_ARGS="$ac_configure_args"
|
||||
AC_SUBST(CONFIG_ARGS)
|
||||
|
||||
AC_CONFIG_SRCDIR(lib/zebra.h)
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
|
||||
@ -208,8 +213,8 @@ AC_ARG_ENABLE(ospf6d,
|
||||
AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
|
||||
AC_ARG_ENABLE(ldpd,
|
||||
AS_HELP_STRING([--enable-ldpd], [build ldpd]))
|
||||
AC_ARG_ENABLE(watchquagga,
|
||||
AS_HELP_STRING([--disable-watchquagga], [do not build watchquagga]))
|
||||
AC_ARG_ENABLE(watchfrr,
|
||||
AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
|
||||
AC_ARG_ENABLE(isisd,
|
||||
AS_HELP_STRING([--disable-isisd], [do not build isisd]))
|
||||
AC_ARG_ENABLE(pimd,
|
||||
@ -234,9 +239,9 @@ AC_ARG_ENABLE(ospfclient,
|
||||
AC_ARG_ENABLE(multipath,
|
||||
AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
|
||||
AC_ARG_ENABLE(user,
|
||||
AS_HELP_STRING([--enable-user=USER], [user to run Quagga suite as (default quagga)]))
|
||||
AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
|
||||
AC_ARG_ENABLE(group,
|
||||
AS_HELP_STRING([--enable-group=GROUP], [group to run Quagga suite as (default quagga)]))
|
||||
AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
|
||||
AC_ARG_ENABLE(vty_group,
|
||||
AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
|
||||
AC_ARG_ENABLE(configfile_mask,
|
||||
@ -422,18 +427,18 @@ if test x"${enable_user}" = x"no"; then
|
||||
enable_user=""
|
||||
else
|
||||
if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
|
||||
enable_user="quagga"
|
||||
enable_user="frr"
|
||||
fi
|
||||
AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
|
||||
AC_DEFINE_UNQUOTED(FRR_USER, "${enable_user}", frr User)
|
||||
fi
|
||||
|
||||
if test x"${enable_group}" = x"no"; then
|
||||
enable_group=""
|
||||
else
|
||||
if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
|
||||
enable_group="quagga"
|
||||
enable_group="frr"
|
||||
fi
|
||||
AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
|
||||
AC_DEFINE_UNQUOTED(FRR_GROUP, "${enable_group}", frr Group)
|
||||
fi
|
||||
|
||||
if test x"${enable_vty_group}" = x"yes" ; then
|
||||
@ -511,7 +516,7 @@ AC_CHECK_HEADERS([stropts.h sys/ksym.h \
|
||||
sys/cdefs.h])
|
||||
|
||||
dnl Utility macro to avoid retyping includes all the time
|
||||
m4_define([QUAGGA_INCLUDES],
|
||||
m4_define([FRR_INCLUDES],
|
||||
[#ifdef SUNOS_5
|
||||
#define _XPG4_2
|
||||
#define __EXTENSIONS__
|
||||
@ -538,10 +543,10 @@ dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
|
||||
dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
|
||||
dnl an additional round for it.
|
||||
|
||||
AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
|
||||
AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
|
||||
|
||||
m4_define([QUAGGA_INCLUDES],
|
||||
QUAGGA_INCLUDES
|
||||
m4_define([FRR_INCLUDES],
|
||||
FRR_INCLUDES
|
||||
[#if HAVE_NET_IF_VAR_H
|
||||
# include <net/if_var.h>
|
||||
#endif
|
||||
@ -551,13 +556,13 @@ AC_CHECK_HEADERS([netinet/in_var.h \
|
||||
net/if_dl.h net/netopt.h \
|
||||
inet/nd.h netinet/ip_icmp.h \
|
||||
sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
|
||||
[], [], QUAGGA_INCLUDES)
|
||||
[], [], FRR_INCLUDES)
|
||||
|
||||
AC_CHECK_HEADERS([ucontext.h], [], [],
|
||||
[#ifndef __USE_GNU
|
||||
#define __USE_GNU
|
||||
#endif /* __USE_GNU */
|
||||
QUAGGA_INCLUDES
|
||||
FRR_INCLUDES
|
||||
])
|
||||
|
||||
m4_define([UCONTEXT_INCLUDES],
|
||||
@ -572,8 +577,8 @@ AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
|
||||
AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
|
||||
[], [], [UCONTEXT_INCLUDES])
|
||||
|
||||
m4_define([QUAGGA_INCLUDES],
|
||||
QUAGGA_INCLUDES
|
||||
m4_define([FRR_INCLUDES],
|
||||
FRR_INCLUDES
|
||||
[
|
||||
#include <sys/un.h>
|
||||
#include <netinet/in_systm.h>
|
||||
@ -701,13 +706,13 @@ if test "$with_libpam" = "yes"; then
|
||||
AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
|
||||
pam_conv_func="misc_conv"
|
||||
],
|
||||
[], QUAGGA_INCLUDES)
|
||||
[], FRR_INCLUDES)
|
||||
AC_CHECK_HEADER([security/openpam.h],
|
||||
[AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
|
||||
AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
|
||||
pam_conv_func="openpam_ttyconv"
|
||||
],
|
||||
[], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
|
||||
[], FRR_INCLUDES[#include <security/pam_appl.h>])
|
||||
if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
|
||||
AC_MSG_WARN([*** pam support will not be built ***])
|
||||
with_libpam="no"
|
||||
@ -795,7 +800,7 @@ AC_CHECK_FUNCS([ \
|
||||
AC_CHECK_HEADER([asm-generic/unistd.h],
|
||||
[AC_CHECK_DECL(__NR_setns,
|
||||
AC_DEFINE(HAVE_NETNS,, Have netns),,
|
||||
QUAGGA_INCLUDES [#include <asm-generic/unistd.h>
|
||||
FRR_INCLUDES [#include <asm-generic/unistd.h>
|
||||
])
|
||||
AC_CHECK_FUNCS(setns)]
|
||||
)
|
||||
@ -882,25 +887,25 @@ main()
|
||||
dnl ------------------------------
|
||||
dnl check kernel route read method
|
||||
dnl ------------------------------
|
||||
AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
|
||||
AC_CACHE_CHECK([route read method], [frr_cv_rtread_method],
|
||||
[if test "x$netlink" = xyes; then
|
||||
quagga_cv_rtread_method="netlink"
|
||||
frr_cv_rtread_method="netlink"
|
||||
else
|
||||
for quagga_cv_rtread_method in /dev/ip /dev/null;
|
||||
for frr_cv_rtread_method in /dev/ip /dev/null;
|
||||
do
|
||||
test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
|
||||
test x`ls $frr_cv_rtread_method 2>/dev/null` = x"$frr_cv_rtread_method" && break
|
||||
done
|
||||
case $quagga_cv_rtread_method in
|
||||
case $frr_cv_rtread_method in
|
||||
"/dev/ip")
|
||||
case "$host" in
|
||||
*-freebsd*) quagga_cv_rtread_method="sysctl";;
|
||||
*) quagga_cv_rtread_method="getmsg";;
|
||||
*-freebsd*) frr_cv_rtread_method="sysctl";;
|
||||
*) frr_cv_rtread_method="getmsg";;
|
||||
esac;;
|
||||
*)
|
||||
quagga_cv_rtread_method="sysctl";;
|
||||
frr_cv_rtread_method="sysctl";;
|
||||
esac
|
||||
fi])
|
||||
RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
|
||||
RTREAD_METHOD=rtread_${frr_cv_rtread_method}.o
|
||||
AC_SUBST(RTREAD_METHOD)
|
||||
|
||||
dnl -----------------------------
|
||||
@ -935,7 +940,7 @@ AC_SUBST(IOCTL_METHOD)
|
||||
dnl ---------------------------------------------------------------
|
||||
dnl figure out how to specify an interface in multicast sockets API
|
||||
dnl ---------------------------------------------------------------
|
||||
AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
|
||||
AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
|
||||
|
||||
AC_CHECK_HEADERS([linux/mroute.h], [], [],[
|
||||
#include <sys/socket.h>
|
||||
@ -944,8 +949,8 @@ AC_CHECK_HEADERS([linux/mroute.h], [], [],[
|
||||
#include <linux/types.h>
|
||||
])
|
||||
|
||||
m4_define([QUAGGA_INCLUDES],
|
||||
QUAGGA_INCLUDES
|
||||
m4_define([FRR_INCLUDES],
|
||||
FRR_INCLUDES
|
||||
[#if HAVE_LINUX_MROUTE_H
|
||||
# include <linux/mroute.h>
|
||||
#endif
|
||||
@ -958,8 +963,8 @@ AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
|
||||
#include <net/route.h>
|
||||
])
|
||||
|
||||
m4_define([QUAGGA_INCLUDES],
|
||||
QUAGGA_INCLUDES
|
||||
m4_define([FRR_INCLUDES],
|
||||
FRR_INCLUDES
|
||||
[#if HAVE_NETINET_IP_MROUTE_H
|
||||
# include <netinet/ip_mroute.h>
|
||||
#endif
|
||||
@ -989,14 +994,14 @@ dnl figure out how to check link-state
|
||||
dnl ---------------------------------------------------------------
|
||||
AC_CHECK_HEADER( [net/if_media.h],
|
||||
[m4_define([LINK_DETECT_INCLUDES],
|
||||
QUAGGA_INCLUDES
|
||||
FRR_INCLUDES
|
||||
[#include <net/if_media.h>
|
||||
])
|
||||
AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
|
||||
AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
|
||||
[], LINK_DETECT_INCLUDES)],
|
||||
[],
|
||||
QUAGGA_INCLUDES)
|
||||
FRR_INCLUDES)
|
||||
|
||||
dnl ---------------------------------------------------------------
|
||||
dnl Additional, newer way to check link-state using ifi_link_state.
|
||||
@ -1004,7 +1009,7 @@ dnl Not available in all BSD's when ifmediareq available
|
||||
dnl ---------------------------------------------------------------
|
||||
AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
|
||||
AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
|
||||
[], QUAGGA_INCLUDES)
|
||||
[], FRR_INCLUDES)
|
||||
|
||||
dnl ------------------------
|
||||
dnl TCP_MD5SIG socket option
|
||||
@ -1012,16 +1017,16 @@ dnl ------------------------
|
||||
|
||||
AC_CHECK_HEADER([netinet/tcp.h],
|
||||
[m4_define([MD5_INCLUDES],
|
||||
QUAGGA_INCLUDES
|
||||
FRR_INCLUDES
|
||||
[#include <netinet/tcp.h>
|
||||
])
|
||||
AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
|
||||
[],
|
||||
QUAGGA_INCLUDES)
|
||||
FRR_INCLUDES)
|
||||
if test $ac_cv_have_decl_TCP_MD5SIG = no; then
|
||||
AC_CHECK_HEADER([linux/tcp.h],
|
||||
[m4_define([MD5_INCLUDES],
|
||||
QUAGGA_INCLUDES
|
||||
FRR_INCLUDES
|
||||
[#include <linux/tcp.h>
|
||||
])
|
||||
AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
|
||||
@ -1030,29 +1035,29 @@ fi
|
||||
dnl -----------------------------
|
||||
dnl check ipforward detect method
|
||||
dnl -----------------------------
|
||||
AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
|
||||
AC_CACHE_CHECK([ipforward method], [frr_cv_ipforward_method],
|
||||
[if test x$cross_compiling = xyes; then
|
||||
if test x"$opsys" = x"gnu-linux"; then
|
||||
quagga_cv_ipforward_method=/proc/net/snmp
|
||||
frr_cv_ipforward_method=/proc/net/snmp
|
||||
else
|
||||
quagga_cv_ipforward_method=/dev/ip
|
||||
frr_cv_ipforward_method=/dev/ip
|
||||
fi
|
||||
else
|
||||
for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
|
||||
for frr_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
|
||||
do
|
||||
test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
|
||||
test x`ls $frr_cv_ipforward_method 2>/dev/null` = x"$frr_cv_ipforward_method" && break
|
||||
done
|
||||
fi
|
||||
case $quagga_cv_ipforward_method in
|
||||
"/proc/net/snmp") quagga_cv_ipforward_method="proc";;
|
||||
case $frr_cv_ipforward_method in
|
||||
"/proc/net/snmp") frr_cv_ipforward_method="proc";;
|
||||
"/dev/ip")
|
||||
case "$host" in
|
||||
*-freebsd*) quagga_cv_ipforward_method="sysctl";;
|
||||
*) quagga_cv_ipforward_method="solaris";;
|
||||
*-freebsd*) frr_cv_ipforward_method="sysctl";;
|
||||
*) frr_cv_ipforward_method="solaris";;
|
||||
esac;;
|
||||
*) quagga_cv_ipforward_method="sysctl";;
|
||||
*) frr_cv_ipforward_method="sysctl";;
|
||||
esac])
|
||||
IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
|
||||
IPFORWARD=ipforward_${frr_cv_ipforward_method}.o
|
||||
AC_SUBST(IPFORWARD)
|
||||
|
||||
dnl ----------------------------------------------------------------------------
|
||||
@ -1100,10 +1105,10 @@ dnl IPv6 header checks
|
||||
dnl ------------------
|
||||
AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
|
||||
netinet6/in6_var.h netinet6/nd6.h], [], [],
|
||||
QUAGGA_INCLUDES)
|
||||
FRR_INCLUDES)
|
||||
|
||||
m4_define([QUAGGA_INCLUDES],dnl
|
||||
QUAGGA_INCLUDES
|
||||
m4_define([FRR_INCLUDES],dnl
|
||||
FRR_INCLUDES
|
||||
[#if HAVE_NETINET6_IN6_H
|
||||
#include <netinet6/in6.h>
|
||||
#endif
|
||||
@ -1165,12 +1170,12 @@ else
|
||||
fi
|
||||
AM_CONDITIONAL(LDPD, test "x$LDPD" = "xldpd")
|
||||
|
||||
if test "${enable_watchquagga}" = "no";then
|
||||
WATCHQUAGGA=""
|
||||
if test "${enable_watchfrr}" = "no";then
|
||||
WATCHFRR=""
|
||||
else
|
||||
WATCHQUAGGA="watchquagga"
|
||||
WATCHFRR="watchfrr"
|
||||
fi
|
||||
AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
|
||||
AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
|
||||
|
||||
OSPFCLIENT=""
|
||||
if test "${enable_ospfapi}" != "no";then
|
||||
@ -1245,7 +1250,7 @@ AC_SUBST(RIPNGD)
|
||||
AC_SUBST(OSPFD)
|
||||
AC_SUBST(OSPF6D)
|
||||
AC_SUBST(LDPD)
|
||||
AC_SUBST(WATCHQUAGGA)
|
||||
AC_SUBST(WATCHFRR)
|
||||
AC_SUBST(ISISD)
|
||||
AC_SUBST(PIMD)
|
||||
AC_SUBST(SOLARIS)
|
||||
@ -1313,14 +1318,14 @@ AC_CHECK_TYPES([
|
||||
struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
|
||||
struct nd_opt_adv_interval, struct rt_addrinfo,
|
||||
struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
|
||||
[], [], QUAGGA_INCLUDES)
|
||||
[], [], FRR_INCLUDES)
|
||||
|
||||
AC_CHECK_MEMBERS([struct sockaddr.sa_len,
|
||||
struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
|
||||
struct sockaddr_dl.sdl_len,
|
||||
struct if6_aliasreq.ifra_lifetime,
|
||||
struct nd_opt_adv_interval.nd_opt_ai_type],
|
||||
[], [], QUAGGA_INCLUDES)
|
||||
[], [], FRR_INCLUDES)
|
||||
|
||||
dnl ---------------------------
|
||||
dnl IRDP/pktinfo/icmphdr checks
|
||||
@ -1332,10 +1337,10 @@ AC_CHECK_TYPES([struct in_pktinfo],
|
||||
fi],
|
||||
[if test "${enable_irdp}" = "yes"; then
|
||||
AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
|
||||
fi], [QUAGGA_INCLUDES])],
|
||||
fi], [FRR_INCLUDES])],
|
||||
[if test "${enable_irdp}" = "yes"; then
|
||||
AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
|
||||
fi], [QUAGGA_INCLUDES])
|
||||
fi], [FRR_INCLUDES])
|
||||
|
||||
dnl -----------------------
|
||||
dnl checking for IP_PKTINFO
|
||||
@ -1408,7 +1413,7 @@ dnl --------------------------------------
|
||||
AC_CHECK_DECL(CLOCK_MONOTONIC,
|
||||
[AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
|
||||
AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
|
||||
], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
|
||||
], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
|
||||
|
||||
dnl --------------------------------------
|
||||
dnl checking for flex and bison
|
||||
@ -1478,17 +1483,17 @@ if test "${enable_capabilities}" != "no"; then
|
||||
AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
|
||||
[AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
|
||||
quagga_ac_keepcaps="yes"],
|
||||
frr_ac_keepcaps="yes"],
|
||||
AC_MSG_RESULT(no)
|
||||
)
|
||||
if test x"${quagga_ac_keepcaps}" = x"yes"; then
|
||||
if test x"${frr_ac_keepcaps}" = x"yes"; then
|
||||
AC_CHECK_HEADERS(sys/capability.h)
|
||||
fi
|
||||
if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
|
||||
AC_CHECK_LIB(cap, cap_init,
|
||||
[AC_DEFINE(HAVE_LCAPS,1,Capabilities)
|
||||
LIBCAP="-lcap"
|
||||
quagga_ac_lcaps="yes"]
|
||||
frr_ac_lcaps="yes"]
|
||||
)
|
||||
else
|
||||
AC_CHECK_HEADERS(priv.h,
|
||||
@ -1496,14 +1501,14 @@ if test "${enable_capabilities}" != "no"; then
|
||||
AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
|
||||
[AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
|
||||
quagga_ac_scaps="yes"],
|
||||
frr_ac_scaps="yes"],
|
||||
AC_MSG_RESULT(no)
|
||||
)
|
||||
]
|
||||
)
|
||||
fi
|
||||
if test x"${quagga_ac_scaps}" = x"yes" \
|
||||
-o x"${quagga_ac_lcaps}" = x"yes"; then
|
||||
if test x"${frr_ac_scaps}" = x"yes" \
|
||||
-o x"${frr_ac_lcaps}" = x"yes"; then
|
||||
AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
|
||||
fi
|
||||
fi
|
||||
@ -1543,7 +1548,7 @@ AC_CHECK_HEADER([malloc.h],
|
||||
AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
|
||||
AC_MSG_RESULT(no)
|
||||
)
|
||||
], [], QUAGGA_INCLUDES)
|
||||
], [], FRR_INCLUDES)
|
||||
|
||||
dnl ----------
|
||||
dnl configure date
|
||||
@ -1568,54 +1573,54 @@ dnl set paths for state directory
|
||||
dnl ------------------------------
|
||||
AC_MSG_CHECKING(directory to use for state file)
|
||||
if test "${prefix}" = "NONE"; then
|
||||
quagga_statedir_prefix="";
|
||||
frr_statedir_prefix="";
|
||||
else
|
||||
quagga_statedir_prefix=${prefix}
|
||||
frr_statedir_prefix=${prefix}
|
||||
fi
|
||||
if test "${localstatedir}" = '${prefix}/var'; then
|
||||
for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
|
||||
${quagga_statedir_prefix}/var/adm dnl
|
||||
${quagga_statedir_prefix}/etc dnl
|
||||
for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
|
||||
${frr_statedir_prefix}/var/adm dnl
|
||||
${frr_statedir_prefix}/etc dnl
|
||||
/var/run dnl
|
||||
/var/adm dnl
|
||||
/etc dnl
|
||||
/dev/null;
|
||||
do
|
||||
test -d $QUAGGA_STATE_DIR && break
|
||||
test -d $FRR_STATE_DIR && break
|
||||
done
|
||||
quagga_statedir=$QUAGGA_STATE_DIR
|
||||
frr_statedir=$FRR_STATE_DIR
|
||||
else
|
||||
quagga_statedir=${localstatedir}
|
||||
frr_statedir=${localstatedir}
|
||||
fi
|
||||
if test $quagga_statedir = "/dev/null"; then
|
||||
if test $frr_statedir = "/dev/null"; then
|
||||
AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
|
||||
fi
|
||||
AC_MSG_RESULT(${quagga_statedir})
|
||||
AC_SUBST(quagga_statedir)
|
||||
AC_MSG_RESULT(${frr_statedir})
|
||||
AC_SUBST(frr_statedir)
|
||||
|
||||
AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_LDPD_PID, "$quagga_statedir/ldpd.pid",ldpd PID)
|
||||
AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$quagga_statedir/ldpd.sock",ldpd control socket)
|
||||
AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$quagga_statedir/pimd.pid",pimd PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
|
||||
AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
|
||||
AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
|
||||
AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
|
||||
AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
|
||||
AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
|
||||
AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
|
||||
AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
|
||||
AC_DEFINE_UNQUOTED(LDP_VTYSH_PATH, "$quagga_statedir/ldpd.vty",ldpd vty socket)
|
||||
AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
|
||||
AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$quagga_statedir/pimd.vty",pimd vty socket)
|
||||
AC_DEFINE_UNQUOTED(WATCHQUAGGA_VTYSH_PATH, "$quagga_statedir/watchquagga.vty",watchquagga vty socket)
|
||||
AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
|
||||
AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$frr_statedir/zebra.pid",zebra PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$frr_statedir/ripd.pid",ripd PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$frr_statedir/ripngd.pid",ripngd PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$frr_statedir/bgpd.pid",bgpd PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$frr_statedir/ospfd.pid",ospfd PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$frr_statedir/ospf6d.pid",ospf6d PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_LDPD_PID, "$frr_statedir/ldpd.pid",ldpd PID)
|
||||
AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
|
||||
AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$frr_statedir/isisd.pid",isisd PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$frr_statedir/pimd.pid",pimd PID)
|
||||
AC_DEFINE_UNQUOTED(PATH_WATCHFRR_PID, "$frr_statedir/watchfrr.pid",watchfrr PID)
|
||||
AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
|
||||
AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$frr_statedir/zebra.vty",zebra vty socket)
|
||||
AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$frr_statedir/ripd.vty",rip vty socket)
|
||||
AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$frr_statedir/ripngd.vty",ripng vty socket)
|
||||
AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$frr_statedir/bgpd.vty",bgpd vty socket)
|
||||
AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$frr_statedir/ospfd.vty",ospfd vty socket)
|
||||
AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$frr_statedir/ospf6d.vty",ospf6d vty socket)
|
||||
AC_DEFINE_UNQUOTED(LDP_VTYSH_PATH, "$frr_statedir/ldpd.vty",ldpd vty socket)
|
||||
AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$frr_statedir/isisd.vty",isisd vty socket)
|
||||
AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$frr_statedir/pimd.vty",pimd vty socket)
|
||||
AC_DEFINE_UNQUOTED(WATCHFRR_VTYSH_PATH, "$frr_statedir/watchfrr.vty",watchfrr vty socket)
|
||||
AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
|
||||
|
||||
dnl autoconf does this, but it does it too late...
|
||||
test "x$prefix" = xNONE && prefix=$ac_default_prefix
|
||||
@ -1628,6 +1633,18 @@ for I in 1 2 3 4 5 6 7 8 9 10; do
|
||||
done
|
||||
AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
|
||||
|
||||
CFG_SYSCONF="$sysconfdir"
|
||||
CFG_SBIN="$sbindir"
|
||||
CFG_STATE="$frr_statedir"
|
||||
for I in 1 2 3 4 5 6 7 8 9 10; do
|
||||
eval CFG_SYSCONF="\"$CFG_SYSCONF\""
|
||||
eval CFG_SBIN="\"$CFG_SBIN\""
|
||||
eval CFG_STATE="\"$CFG_STATE\""
|
||||
done
|
||||
AC_SUBST(CFG_SYSCONF)
|
||||
AC_SUBST(CFG_SBIN)
|
||||
AC_SUBST(CFG_STATE)
|
||||
|
||||
dnl -------------------------------
|
||||
dnl Quagga sources should always be
|
||||
dnl current wrt interfaces. Dont
|
||||
@ -1641,14 +1658,14 @@ dnl Check htonl works correctly
|
||||
dnl ---------------------------
|
||||
AC_MSG_CHECKING(for working htonl)
|
||||
AC_CACHE_VAL(ac_cv_htonl_works,
|
||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
|
||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
|
||||
[ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
|
||||
]
|
||||
)
|
||||
AC_MSG_RESULT($ac_cv_htonl_works)
|
||||
|
||||
AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
|
||||
ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
|
||||
ripngd/Makefile bgpd/Makefile ospfd/Makefile watchfrr/Makefile
|
||||
ospf6d/Makefile ldpd/Makefile isisd/Makefile vtysh/Makefile
|
||||
doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
|
||||
pimd/Makefile
|
||||
@ -1662,6 +1679,19 @@ AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
|
||||
redhat/quagga.spec
|
||||
lib/version.h
|
||||
doc/defines.texi
|
||||
doc/bgpd.8
|
||||
doc/isisd.8
|
||||
doc/ospf6d.8
|
||||
doc/ospfclient.8
|
||||
doc/ospfd.8
|
||||
doc/ldpd.8
|
||||
doc/ripd.8
|
||||
doc/ripngd.8
|
||||
doc/pimd.8
|
||||
doc/vtysh.1
|
||||
doc/watchfrr.8
|
||||
doc/zebra.8
|
||||
doc/frr.1
|
||||
pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
|
||||
pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
|
||||
|
||||
@ -1682,21 +1712,21 @@ AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
|
||||
AC_OUTPUT
|
||||
|
||||
echo "
|
||||
Quagga configuration
|
||||
--------------------
|
||||
quagga version : ${PACKAGE_VERSION}
|
||||
FreeRangeRouting configuration
|
||||
------------------------------
|
||||
FRR version : ${PACKAGE_VERSION}
|
||||
host operating system : ${host_os}
|
||||
source code location : ${srcdir}
|
||||
compiler : ${CC}
|
||||
compiler flags : ${CFLAGS}
|
||||
make : ${MAKE-make}
|
||||
linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
|
||||
state file directory : ${quagga_statedir}
|
||||
state file directory : ${frr_statedir}
|
||||
config file directory : `eval echo \`echo ${sysconfdir}\``
|
||||
example directory : `eval echo \`echo ${exampledir}\``
|
||||
user to run as : ${enable_user}
|
||||
group to run as : ${enable_group}
|
||||
group for vty sockets : ${enable_vty_group}
|
||||
user to run as : ${enable_user}
|
||||
group to run as : ${enable_group}
|
||||
group for vty sockets : ${enable_vty_group}
|
||||
config file mask : ${enable_configfile_mask}
|
||||
log file mask : ${enable_logfile_mask}
|
||||
zebra protobuf enabled : ${have_protobuf:-no}
|
||||
|
@ -18,7 +18,7 @@
|
||||
# When using "vtysh" such a config file is also needed. It should be owned by
|
||||
# group "quaggavty" and set to ug=rw,o= though. Check /etc/pam.d/quagga, too.
|
||||
#
|
||||
# The watchquagga daemon is always started. Per default in monitoring-only but
|
||||
# The watchfrr daemon is always started. Per default in monitoring-only but
|
||||
# that can be changed via /etc/quagga/debian.conf.
|
||||
#
|
||||
zebra=no
|
||||
|
@ -14,5 +14,5 @@ isisd_options=" --daemon -A 127.0.0.1"
|
||||
pimd_options=" --daemon -A 127.0.0.1"
|
||||
|
||||
# The list of daemons to watch is automatically generated by the init script.
|
||||
watchquagga_enable=yes
|
||||
watchquagga_options=(-adz -r /usr/sbin/servicebBquaggabBrestartbB%s -s /usr/sbin/servicebBquaggabBstartbB%s -k /usr/sbin/servicebBquaggabBstopbB%s -b bB -t 30)
|
||||
watchfrr_enable=yes
|
||||
watchfrr_options=(-adz -r /usr/sbin/servicebBquaggabBrestartbB%s -s /usr/sbin/servicebBquaggabBstartbB%s -k /usr/sbin/servicebBquaggabBstopbB%s -b bB -t 30)
|
||||
|
50
debian/README.Debian
vendored
50
debian/README.Debian
vendored
@ -2,34 +2,34 @@
|
||||
==================
|
||||
|
||||
Please consider setting this package "on hold" by typing
|
||||
echo "quagga hold" | dpkg --set-selections
|
||||
echo "frr hold" | dpkg --set-selections
|
||||
and verifying this using
|
||||
dpkg --get-selections | grep 'hold$'
|
||||
|
||||
Setting a package "on hold" means that it will not automatically be upgraded.
|
||||
Instead apt-get only displays a warning saying that a new version would be
|
||||
available forcing you to explicitly type "apt-get install quagga" to upgrade it.
|
||||
available forcing you to explicitly type "apt-get install frr" to upgrade it.
|
||||
|
||||
|
||||
* What is quagga?
|
||||
* What is frr?
|
||||
=================
|
||||
|
||||
http://www.quagga.net/
|
||||
> Quagga is a routing software suite, providing implementations of OSPFv2,
|
||||
http://www.freerangerouting.net/
|
||||
> Frr is a routing software suite, providing implementations of OSPFv2,
|
||||
> OSPFv3, RIP v1 and v2, RIPv3 and BGPv4 for Unix platforms, particularly
|
||||
> FreeBSD and Linux and also NetBSD, to mention a few. Quagga is a fork of GNU
|
||||
> FreeBSD and Linux and also NetBSD, to mention a few. Frr is a fork of GNU
|
||||
> Zebra which was developed by Kunihiro Ishiguro. Development of GNU Zebra
|
||||
> slowed dramatically to the point where eventually GNU Zebra was forked into
|
||||
> Quagga.
|
||||
> Frr.
|
||||
|
||||
> The Quagga tree is an attempt to provide a zebra tree with at least the
|
||||
> The Frr tree is an attempt to provide a zebra tree with at least the
|
||||
> bug-fixes, which have accumulated, applied, while tracking any significant
|
||||
> changes made to the zebra.org tree. Ultimately, this tree hopes to revitalise
|
||||
> development of this code base.
|
||||
|
||||
I packaged zebra-pj which was then renamed to quagga to get people used to it
|
||||
I packaged zebra-pj which was then renamed to frr to get people used to it
|
||||
and offer Debian users the choice which versions they like to use. I hope this
|
||||
brings quagga some feedback and helps it evolving to a good successor of the
|
||||
brings frr some feedback and helps it evolving to a good successor of the
|
||||
orphaned zebra.
|
||||
|
||||
-- Christian Hammers <ch@debian.org>, Jul/Aug 2003
|
||||
@ -37,16 +37,16 @@ orphaned zebra.
|
||||
|
||||
* Why has SNMP support been disabled?
|
||||
=====================================
|
||||
Quagga used to link against the NetSNMP libraries to provide SNMP
|
||||
Frr used to link against the NetSNMP libraries to provide SNMP
|
||||
support. Those libraries sadly link against the OpenSSL libraries
|
||||
to provide crypto support for SNMPv3 among others.
|
||||
OpenSSL now is not compatible with the GNU GENERAL PUBLIC LICENSE (GPL)
|
||||
licence that Quagga is distributed under. For more explanation read:
|
||||
licence that Frr is distributed under. For more explanation read:
|
||||
http://www.gnome.org/~markmc/openssl-and-the-gpl.html
|
||||
http://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs
|
||||
Updating the licence to explecitly allow linking against OpenSSL
|
||||
would requite the affirmation of all people that ever contributed
|
||||
a significant part to Zebra or Quagga and thus are the collective
|
||||
a significant part to Zebra or Frr and thus are the collective
|
||||
"copyright holder". That's too much work. Using a shrinked down
|
||||
version of NetSNMP without OpenSSL or convincing the NetSNMP people
|
||||
to change to GnuTLS are maybe good solutions but not reachable
|
||||
@ -55,17 +55,17 @@ during the last days before the Sarge release :-(
|
||||
*BUT*
|
||||
|
||||
It is allowed by the used licence mix that you fetch the sources and
|
||||
build Quagga yourself with SNMP with
|
||||
<remove the "grep ^smux" block at the end of debian/quagga.preinst>
|
||||
build Frr yourself with SNMP with
|
||||
<remove the "grep ^smux" block at the end of debian/frr.preinst>
|
||||
# export WANT_SNMP=1
|
||||
# apt-get -b source quagga
|
||||
# apt-get -b source frr
|
||||
Just distributing it in binary form, linked against OpenSSL, is forbidden.
|
||||
|
||||
|
||||
* Daemon selection:
|
||||
===================
|
||||
|
||||
The Debian package uses /etc/quagga/daemons to tell the
|
||||
The Debian package uses /etc/frr/daemons to tell the
|
||||
initscript which daemons to start. It's in the format
|
||||
<daemon>=<yes|no|priority>
|
||||
with no spaces (it's simply source-d into the initscript).
|
||||
@ -73,13 +73,13 @@ Default is not to start anything, since it can hose your
|
||||
system's routing table if not set up properly.
|
||||
|
||||
Priorities were suggested by Dancer <dancer@zeor.simegen.com>.
|
||||
They're used to start the Quagga daemons in more than one step
|
||||
They're used to start the Frr daemons in more than one step
|
||||
(for example start one or two at network initialization and the
|
||||
rest later). The number of Quagga daemons being small, priorities
|
||||
rest later). The number of Frr daemons being small, priorities
|
||||
must be between 1 and 9, inclusive (or the initscript has to be
|
||||
changed). /etc/init.d/quagga then can be started as
|
||||
changed). /etc/init.d/frr then can be started as
|
||||
|
||||
/etc/init.d/quagga <start|stop|restart|<priority>>
|
||||
/etc/init.d/frr <start|stop|restart|<priority>>
|
||||
|
||||
where priority 0 is the same as 'stop', priority 10 or 'start'
|
||||
means 'start all'
|
||||
@ -96,15 +96,15 @@ into the kernel.
|
||||
=====================================================================
|
||||
|
||||
If this message occurs the receive buffer should be increased by adding the
|
||||
following to /etc/sysctl.conf and "--nl-bufsize" to /etc/quagga/debian.conf.
|
||||
following to /etc/sysctl.conf and "--nl-bufsize" to /etc/frr/debian.conf.
|
||||
> net.core.rmem_default = 262144
|
||||
> net.core.rmem_max = 262144
|
||||
See message #4525 from 2005-05-09 in the quagga-users mailing list.
|
||||
See message #4525 from 2005-05-09 in the frr-users mailing list.
|
||||
|
||||
|
||||
* vtysh immediately exists:
|
||||
===========================
|
||||
|
||||
Check /etc/pam.d/quagga, it probably denies access to your user. The passwords
|
||||
configured in /etc/quagga/Quagga.conf are only for telnet access.
|
||||
Check /etc/pam.d/frr, it probably denies access to your user. The passwords
|
||||
configured in /etc/frr/Frr.conf are only for telnet access.
|
||||
|
||||
|
16
debian/README.Maintainer
vendored
16
debian/README.Maintainer
vendored
@ -4,19 +4,19 @@
|
||||
for i in debian/patches/*.diff; do echo -e "#\n# $i\n#"; patch --fuzz=3 --dry-run -p1 < $i; done
|
||||
|
||||
#
|
||||
# Filename transition from zebra to quagga
|
||||
# Filename transition from zebra to frr
|
||||
#
|
||||
|
||||
Files that keep their names
|
||||
/usr/bin/vtysh
|
||||
|
||||
Files that got an -pj suffix
|
||||
/etc/default/zebra -> /etc/quagga/debian.conf
|
||||
/etc/init.d/zebra -> /etc/init.d/quagga
|
||||
/etc/zebra/ -> /etc/quagga/
|
||||
/usr/share/doc/zebra/ -> /usr/share/doc/quagga/
|
||||
/var/log/zebra/ -> /var/log/quagga/
|
||||
/var/run/ -> /var/run/quagga/
|
||||
/etc/default/zebra -> /etc/frr/debian.conf
|
||||
/etc/init.d/zebra -> /etc/init.d/frr
|
||||
/etc/zebra/ -> /etc/frr/
|
||||
/usr/share/doc/zebra/ -> /usr/share/doc/frr/
|
||||
/var/log/zebra/ -> /var/log/frr/
|
||||
/var/run/ -> /var/run/frr/
|
||||
|
||||
Files that were moved
|
||||
/usr/sbin/* -> /usr/lib/quagga/
|
||||
/usr/sbin/* -> /usr/lib/frr/
|
||||
|
4
debian/changelog
vendored
4
debian/changelog
vendored
@ -1,3 +1,7 @@
|
||||
frr (2.0) Released; urgency=medium
|
||||
|
||||
* Switchover to FRR
|
||||
|
||||
quagga (0.99.24+cl3u5) RELEASED; urgency=medium
|
||||
|
||||
* Closes: CM-12846 - Resolve Memory leaks in 'show ip bgp neighbor json'
|
||||
|
30
debian/control
vendored
30
debian/control
vendored
@ -1,14 +1,14 @@
|
||||
Source: quagga
|
||||
Source: frr
|
||||
Section: net
|
||||
Priority: optional
|
||||
Maintainer: Christian Hammers <ch@debian.org>
|
||||
Uploaders: Florian Weimer <fw@debian.org>
|
||||
Build-Depends: debhelper (>= 7.0.50~), libncurses5-dev, libreadline-dev, texlive-latex-base, texlive-generic-recommended, libpam0g-dev | libpam-dev, libcap-dev, texinfo (>= 4.7), imagemagick, ghostscript, groff, po-debconf, autotools-dev, hardening-wrapper, libpcre3-dev, gawk, chrpath, libsnmp-dev, git, dh-autoreconf, libjson0, libjson0-dev, dh-systemd, libsystemd-dev, python-ipaddr, bison, flex
|
||||
Standards-Version: 3.9.6
|
||||
Homepage: http://www.quagga.net/
|
||||
Homepage: http://www.frr.net/
|
||||
XS-Testsuite: autopkgtest
|
||||
|
||||
Package: quagga
|
||||
Package: frr
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, logrotate (>= 3.2-11), iproute, ${misc:Depends}
|
||||
Pre-Depends: adduser
|
||||
@ -16,37 +16,33 @@ Conflicts: zebra, zebra-pj
|
||||
Replaces: zebra, zebra-pj
|
||||
Suggests: snmpd
|
||||
Description: BGP/OSPF/RIP routing daemon
|
||||
GNU Quagga is free software which manages TCP/IP based routing protocols.
|
||||
Frr is free software which manages TCP/IP based routing protocols.
|
||||
It supports BGP4, BGP4+, OSPFv2, OSPFv3, IS-IS, RIPv1, RIPv2, and RIPng as
|
||||
well as the IPv6 versions of these.
|
||||
.
|
||||
As the precessor Zebra has been considered orphaned, the Quagga project
|
||||
has been formed by members of the zebra mailing list and the former
|
||||
zebra-pj project to continue developing.
|
||||
.
|
||||
Quagga uses threading if the kernel supports it, but can also run on
|
||||
Frr uses threading if the kernel supports it, but can also run on
|
||||
kernels that do not support threading. Each protocol has its own daemon.
|
||||
.
|
||||
It is more than a routed replacement, it can be used as a Route Server and
|
||||
a Route Reflector.
|
||||
|
||||
Package: quagga-dbg
|
||||
Package: frr-dbg
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, quagga (= ${binary:Version})
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, frr (= ${binary:Version})
|
||||
Priority: extra
|
||||
Section: debug
|
||||
Description: BGP/OSPF/RIP routing daemon (debug symbols)
|
||||
This package provides debugging symbols for all binary packages built from
|
||||
quagga source package. It's highly recommended to have this package installed
|
||||
before reporting any Quagga crashes to either Quagga developers or Debian
|
||||
frr source package. It's highly recommended to have this package installed
|
||||
before reporting any Frr crashes to either Frr developers or Debian
|
||||
package maintainers.
|
||||
|
||||
Package: quagga-doc
|
||||
Package: frr-doc
|
||||
Section: net
|
||||
Architecture: all
|
||||
Depends: ${misc:Depends}
|
||||
Suggests: quagga
|
||||
Description: documentation files for quagga
|
||||
This package includes info files for quagga, a free software which manages
|
||||
Suggests: frr
|
||||
Description: documentation files for frr
|
||||
This package includes info files for frr, a free software which manages
|
||||
TCP/IP based routing protocols. It supports BGP4, BGP4+, OSPFv2, OSPFv3,
|
||||
IS-IS, RIPv1, RIPv2, and RIPng as well as the IPv6 versions of these.
|
||||
|
6
debian/copyright
vendored
6
debian/copyright
vendored
@ -1,7 +1,7 @@
|
||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: Quagga
|
||||
Upstream-Contact: maintainers@quagga.net, security@quagga.net
|
||||
Source: http://www.quagga.net/
|
||||
Upstream-Name: Frr
|
||||
Upstream-Contact: maintainers@freerangerouting.net, security@freerangerouting.net
|
||||
Source: http://www.freerangerouting.net/
|
||||
|
||||
Files: *
|
||||
Copyright: 1996-2003 by the original Zebra authors:
|
||||
|
1
debian/frr-doc.info
vendored
Normal file
1
debian/frr-doc.info
vendored
Normal file
@ -0,0 +1 @@
|
||||
doc/frr.info*
|
1
debian/frr-doc.lintian-overrides
vendored
Normal file
1
debian/frr-doc.lintian-overrides
vendored
Normal file
@ -0,0 +1 @@
|
||||
frr-doc: wrong-section-according-to-package-name frr-doc => doc
|
2
debian/frr.conf
vendored
Normal file
2
debian/frr.conf
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
# Create the /run/frr directory at boot or from systemd-tmpfiles on install
|
||||
d /run/frr 0755 frr frr
|
7
debian/frr.dirs
vendored
Normal file
7
debian/frr.dirs
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
etc/logrotate.d/
|
||||
etc/frr/
|
||||
usr/share/doc/frr/
|
||||
usr/share/doc/frr/examples/
|
||||
usr/share/lintian/overrides/
|
||||
usr/share/snmp/mibs/
|
||||
var/log/frr/
|
0
debian/quagga.docs → debian/frr.docs
vendored
0
debian/quagga.docs → debian/frr.docs
vendored
16
debian/quagga.install → debian/frr.install
vendored
16
debian/quagga.install → debian/frr.install
vendored
@ -1,12 +1,12 @@
|
||||
etc/quagga/
|
||||
etc/frr/
|
||||
usr/bin/vtysh
|
||||
usr/include/quagga/
|
||||
usr/include/frr/
|
||||
usr/lib/
|
||||
tools/quagga-reload.py usr/lib/quagga/
|
||||
tools/quagga usr/lib/quagga
|
||||
usr/share/doc/quagga/
|
||||
tools/frr-reload.py usr/lib/frr/
|
||||
tools/frr usr/lib/frr
|
||||
usr/share/doc/frr/
|
||||
usr/share/man/man1/vtysh.1
|
||||
usr/share/man/man1/quagga.1
|
||||
usr/share/man/man1/frr.1
|
||||
usr/share/man/man8
|
||||
usr/share/man/man8/bgpd.8
|
||||
usr/share/man/man8/ospf6d.8
|
||||
@ -15,8 +15,8 @@ usr/share/man/man8/ripd.8
|
||||
usr/share/man/man8/ripngd.8
|
||||
usr/share/man/man8/zebra.8
|
||||
usr/share/man/man8/isisd.8
|
||||
usr/share/man/man8/watchquagga.8
|
||||
usr/share/man/man8/watchfrr.8
|
||||
usr/share/snmp/mibs/
|
||||
cumulus/etc/* etc/
|
||||
tools/*.service lib/systemd/system
|
||||
debian/quagga.conf usr/lib/tmpfiles.d
|
||||
debian/frr.conf usr/lib/tmpfiles.d
|
4
debian/frr.lintian-overrides
vendored
Normal file
4
debian/frr.lintian-overrides
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
frr: non-dev-pkg-with-shlib-symlink usr/lib/libospfapiclient.so.0.0.0 usr/lib/libospfapiclient.so
|
||||
frr: non-dev-pkg-with-shlib-symlink usr/lib/libospf.so.0.0.0 usr/lib/libospf.so
|
||||
frr: non-dev-pkg-with-shlib-symlink usr/lib/libzebra.so.0.0.0 usr/lib/libzebra.so
|
||||
frr: package-name-doesnt-match-sonames libospf0 libospfapiclient0 libzebra0
|
@ -1,15 +1,15 @@
|
||||
/var/log/quagga/*.log {
|
||||
/var/log/frr/*.log {
|
||||
size 500k
|
||||
sharedscripts
|
||||
missingok
|
||||
compress
|
||||
rotate 14
|
||||
create 640 quagga quaggavty
|
||||
create 640 frr frrvty
|
||||
|
||||
postrotate
|
||||
for i in zebra bgpd ripd ospfd ripngd ospf6d isisd pimd; do
|
||||
if [ -e /var/run/quagga/$i.pid ] ; then
|
||||
kill -USR1 `cat /var/run/quagga/$i.pid`
|
||||
if [ -e /var/run/frr/$i.pid ] ; then
|
||||
kill -USR1 `cat /var/run/frr/$i.pid`
|
||||
fi
|
||||
|
||||
done
|
2
debian/quagga.manpages → debian/frr.manpages
vendored
2
debian/quagga.manpages → debian/frr.manpages
vendored
@ -6,4 +6,4 @@ doc/ripngd.8
|
||||
doc/vtysh.1
|
||||
doc/zebra.8
|
||||
doc/isisd.8
|
||||
doc/watchquagga.8
|
||||
doc/watchfrr.8
|
2
debian/quagga.pam → debian/frr.pam
vendored
2
debian/quagga.pam → debian/frr.pam
vendored
@ -1,3 +1,3 @@
|
||||
# Any user may call vtysh but only those belonging to the group quaggavty can
|
||||
# Any user may call vtysh but only those belonging to the group frrvty can
|
||||
# actually connect to the socket and use the program.
|
||||
auth sufficient pam_permit.so
|
41
debian/frr.postinst
vendored
Normal file
41
debian/frr.postinst
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
######################
|
||||
PASSWDFILE=/etc/passwd
|
||||
GROUPFILE=/etc/group
|
||||
|
||||
frruid=`egrep "^frr:" $PASSWDFILE | awk -F ":" '{ print $3 }'`
|
||||
frrgid=`egrep "^frr:" $GROUPFILE | awk -F ":" '{ print $3 }'`
|
||||
frrvtygid=`egrep "^frrvty:" $GROUPFILE | awk -F ":" '{ print $3 }'`
|
||||
|
||||
[ -n ${frruid} ] || (echo "No uid for frr in ${PASSWDFILE}" && /bin/false)
|
||||
[ -n ${frrgid} ] || (echo "No gid for frr in ${GROUPFILE}" && /bin/false)
|
||||
[ -n ${frrVTYgid} ] || (echo "No gid for frrvty in ${GROUPFILE}" && /bin/false)
|
||||
|
||||
chown -R ${frruid}:${frrgid} /etc/frr
|
||||
touch /etc/frr/vtysh.conf
|
||||
chgrp ${frrvtygid} /etc/frr/vtysh*
|
||||
chmod 440 /etc/sudoers.d/frr_sudoers
|
||||
chmod 644 /etc/frr/*
|
||||
|
||||
ENVIRONMENTFILE=/etc/environment
|
||||
if ! grep --quiet VTYSH_PAGER=/bin/cat ${ENVIRONMENTFILE}; then
|
||||
echo "VTYSH_PAGER=/bin/cat" >> ${ENVIRONMENTFILE}
|
||||
fi
|
||||
##################################################
|
||||
|
||||
if [ -n "$DEBIAN_SCRIPT_DEBUG" ]; then set -v -x; DEBIAN_SCRIPT_TRACE=1; fi
|
||||
${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*"}
|
||||
|
||||
# This is most likely due to the answer "no" to the "really stop the server"
|
||||
# question in the prerm script.
|
||||
if [ "$1" = "abort-upgrade" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
. /usr/share/debconf/confmodule
|
||||
|
||||
db_stop
|
||||
|
||||
#DEBHELPER#
|
||||
|
4
debian/quagga.postrm → debian/frr.postrm
vendored
4
debian/quagga.postrm → debian/frr.postrm
vendored
@ -5,8 +5,8 @@ ${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*"}
|
||||
# set -u not because of debhelper
|
||||
|
||||
if [ "$1" = "purge" ]; then
|
||||
rm -rf /etc/quagga /var/run/quagga /var/log/quagga
|
||||
userdel quagga >/dev/null 2>&1 || true
|
||||
rm -rf /etc/frr /var/run/frr /var/log/frr
|
||||
userdel frr >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
#DEBHELPER#
|
54
debian/quagga.preinst → debian/frr.preinst
vendored
54
debian/quagga.preinst → debian/frr.preinst
vendored
@ -5,73 +5,73 @@ ${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*"}
|
||||
set -e
|
||||
set -u
|
||||
|
||||
# creating quaggavty group if it isn't already there
|
||||
if ! getent group quaggavty >/dev/null; then
|
||||
addgroup --system quaggavty >/dev/null
|
||||
# creating frrvty group if it isn't already there
|
||||
if ! getent group frrvty >/dev/null; then
|
||||
addgroup --system frrvty >/dev/null
|
||||
fi
|
||||
|
||||
# creating quagga group if it isn't already there
|
||||
if ! getent group quagga >/dev/null; then
|
||||
addgroup --system quagga >/dev/null
|
||||
# creating frr group if it isn't already there
|
||||
if ! getent group frr >/dev/null; then
|
||||
addgroup --system frr >/dev/null
|
||||
fi
|
||||
|
||||
# creating quagga user if he isn't already there
|
||||
if ! getent passwd quagga >/dev/null; then
|
||||
# creating frr user if he isn't already there
|
||||
if ! getent passwd frr >/dev/null; then
|
||||
adduser \
|
||||
--system \
|
||||
--ingroup quagga \
|
||||
--home /var/run/quagga/ \
|
||||
--gecos "Quagga routing suite" \
|
||||
--ingroup frr \
|
||||
--home /var/run/frr/ \
|
||||
--gecos "Frr routing suite" \
|
||||
--shell /bin/false \
|
||||
quagga >/dev/null
|
||||
frr >/dev/null
|
||||
fi
|
||||
|
||||
# We may be installing over an older version of
|
||||
# quagga and as such we need to intelligently
|
||||
# check to see if the quagga user is in the quaggavty
|
||||
# frr and as such we need to intelligently
|
||||
# check to see if the frr user is in the frrvty
|
||||
# group.
|
||||
if ! /usr/bin/id quagga | grep &>/dev/null 'quaggavty'; then
|
||||
usermod -a -G quaggavty quagga >/dev/null
|
||||
if ! /usr/bin/id frr | grep &>/dev/null 'frrvty'; then
|
||||
usermod -a -G frrvty frr >/dev/null
|
||||
fi
|
||||
|
||||
# Do not change permissions when upgrading as it would violate policy.
|
||||
if [ "$1" = "install" ]; then
|
||||
# Logfiles are group readable in case users were put into the quagga group.
|
||||
d=/var/log/quagga/
|
||||
# Logfiles are group readable in case users were put into the frr group.
|
||||
d=/var/log/frr/
|
||||
mkdir -p $d
|
||||
chown -R quagga:quagga $d
|
||||
chown -R frr:frr $d
|
||||
chmod u=rwx,go=rx $d
|
||||
find $d -type f -print0 | xargs -0 --no-run-if-empty chmod u=rw,g=r,o=
|
||||
|
||||
# Strict permissions for the sockets.
|
||||
d=/var/run/quagga/
|
||||
d=/var/run/frr/
|
||||
mkdir -p $d
|
||||
chown -R quagga:quagga $d
|
||||
chown -R frr:frr $d
|
||||
chmod u=rwx,go=rx $d
|
||||
find $d -type f -print0 | xargs -0 --no-run-if-empty chmod u=rw,go=
|
||||
|
||||
# Config files. Vtysh does not have access to the individual daemons config file
|
||||
d=/etc/quagga/
|
||||
d=/etc/frr/
|
||||
mkdir -p $d
|
||||
chown quagga:quaggavty $d
|
||||
chown frr:frrvty $d
|
||||
chmod ug=rwx,o=rx $d
|
||||
find $d -type f -print0 | xargs -0 --no-run-if-empty chown quagga:quagga
|
||||
find $d -type f -print0 | xargs -0 --no-run-if-empty chown frr:frr
|
||||
find $d -type f -print0 | xargs -0 --no-run-if-empty chmod u=rw,g=r,o=
|
||||
|
||||
# Exceptions for vtysh.
|
||||
f=$d/vtysh.conf
|
||||
if [ -f $f ]; then
|
||||
chown quagga:quaggavty $f
|
||||
chown frr:frrvty $f
|
||||
chmod u=rw,g=r,o= $f
|
||||
fi
|
||||
|
||||
# Exceptions for vtysh.
|
||||
f=$d/Quagga.conf
|
||||
f=$d/Frr.conf
|
||||
if [ -f $d/Zebra.conf ]; then
|
||||
mv $d/Zebra.conf $f
|
||||
fi
|
||||
if [ -f $f ]; then
|
||||
chown quagga:quaggavty $f
|
||||
chown frr:frrvty $f
|
||||
chmod u=rw,g=r,o= $f
|
||||
fi
|
||||
fi
|
2
debian/quagga.prerm → debian/frr.prerm
vendored
2
debian/quagga.prerm → debian/frr.prerm
vendored
@ -15,7 +15,7 @@ case $1 in
|
||||
;;
|
||||
|
||||
failed-upgrade)
|
||||
# If quagga/really_stop was negated then this script exits with return
|
||||
# If frr/really_stop was negated then this script exits with return
|
||||
# code 1 and is called again with "failed-upgrade". Well, exit again.
|
||||
exit 1
|
||||
;;
|
1
debian/quagga-doc.info
vendored
1
debian/quagga-doc.info
vendored
@ -1 +0,0 @@
|
||||
doc/quagga.info*
|
1
debian/quagga-doc.lintian-overrides
vendored
1
debian/quagga-doc.lintian-overrides
vendored
@ -1 +0,0 @@
|
||||
quagga-doc: wrong-section-according-to-package-name quagga-doc => doc
|
2
debian/quagga.conf
vendored
2
debian/quagga.conf
vendored
@ -1,2 +0,0 @@
|
||||
# Create the /run/quagga directory at boot or from systemd-tmpfiles on install
|
||||
d /run/quagga 0755 quagga quagga
|
7
debian/quagga.dirs
vendored
7
debian/quagga.dirs
vendored
@ -1,7 +0,0 @@
|
||||
etc/logrotate.d/
|
||||
etc/quagga/
|
||||
usr/share/doc/quagga/
|
||||
usr/share/doc/quagga/examples/
|
||||
usr/share/lintian/overrides/
|
||||
usr/share/snmp/mibs/
|
||||
var/log/quagga/
|
4
debian/quagga.lintian-overrides
vendored
4
debian/quagga.lintian-overrides
vendored
@ -1,4 +0,0 @@
|
||||
quagga: non-dev-pkg-with-shlib-symlink usr/lib/libospfapiclient.so.0.0.0 usr/lib/libospfapiclient.so
|
||||
quagga: non-dev-pkg-with-shlib-symlink usr/lib/libospf.so.0.0.0 usr/lib/libospf.so
|
||||
quagga: non-dev-pkg-with-shlib-symlink usr/lib/libzebra.so.0.0.0 usr/lib/libzebra.so
|
||||
quagga: package-name-doesnt-match-sonames libospf0 libospfapiclient0 libzebra0
|
41
debian/quagga.postinst
vendored
41
debian/quagga.postinst
vendored
@ -1,41 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
######################
|
||||
PASSWDFILE=/etc/passwd
|
||||
GROUPFILE=/etc/group
|
||||
|
||||
quaggauid=`egrep "^quagga:" $PASSWDFILE | awk -F ":" '{ print $3 }'`
|
||||
quaggagid=`egrep "^quagga:" $GROUPFILE | awk -F ":" '{ print $3 }'`
|
||||
quaggavtygid=`egrep "^quaggavty:" $GROUPFILE | awk -F ":" '{ print $3 }'`
|
||||
|
||||
[ -n ${quaggauid} ] || (echo "No uid for quagga in ${PASSWDFILE}" && /bin/false)
|
||||
[ -n ${quaggagid} ] || (echo "No gid for quagga in ${GROUPFILE}" && /bin/false)
|
||||
[ -n ${quaggaVTYgid} ] || (echo "No gid for quaggavty in ${GROUPFILE}" && /bin/false)
|
||||
|
||||
chown -R ${quaggauid}:${quaggagid} /etc/quagga
|
||||
touch /etc/quagga/vtysh.conf
|
||||
chgrp ${quaggavtygid} /etc/quagga/vtysh*
|
||||
chmod 440 /etc/sudoers.d/quagga_sudoers
|
||||
chmod 644 /etc/quagga/*
|
||||
|
||||
ENVIRONMENTFILE=/etc/environment
|
||||
if ! grep --quiet VTYSH_PAGER=/bin/cat ${ENVIRONMENTFILE}; then
|
||||
echo "VTYSH_PAGER=/bin/cat" >> ${ENVIRONMENTFILE}
|
||||
fi
|
||||
##################################################
|
||||
|
||||
if [ -n "$DEBIAN_SCRIPT_DEBUG" ]; then set -v -x; DEBIAN_SCRIPT_TRACE=1; fi
|
||||
${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*"}
|
||||
|
||||
# This is most likely due to the answer "no" to the "really stop the server"
|
||||
# question in the prerm script.
|
||||
if [ "$1" = "abort-upgrade" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
. /usr/share/debconf/confmodule
|
||||
|
||||
db_stop
|
||||
|
||||
#DEBHELPER#
|
||||
|
38
debian/rules
vendored
38
debian/rules
vendored
@ -20,10 +20,10 @@ MAKEFLAGS += -j$(DEBIAN_JOBS)
|
||||
endif
|
||||
|
||||
%:
|
||||
dh $@ --with=systemd,autoreconf --parallel --dbg-package=quagga-dbg --list-missing
|
||||
dh $@ --with=systemd,autoreconf --parallel --dbg-package=frr-dbg --list-missing
|
||||
|
||||
override_dh_auto_configure:
|
||||
# Quagga needs /proc to check some BSD vs Linux specific stuff.
|
||||
# Frr needs /proc to check some BSD vs Linux specific stuff.
|
||||
# Else it fails with an obscure error message pointing out that
|
||||
# IPCTL_FORWARDING is an undefined symbol which is not very helpful.
|
||||
@if ! [ -d /proc/1 ]; then \
|
||||
@ -33,18 +33,18 @@ override_dh_auto_configure:
|
||||
|
||||
if ! [ -e config.status ]; then \
|
||||
dh_auto_configure -- \
|
||||
--enable-exampledir=/usr/share/doc/quagga/examples/ \
|
||||
--localstatedir=/var/run/quagga \
|
||||
--sbindir=/usr/lib/quagga \
|
||||
--sysconfdir=/etc/quagga \
|
||||
--enable-exampledir=/usr/share/doc/frr/examples/ \
|
||||
--localstatedir=/var/run/frr \
|
||||
--sbindir=/usr/lib/frr \
|
||||
--sysconfdir=/etc/frr \
|
||||
$(USE_SNMP) \
|
||||
--enable-ospfapi=yes \
|
||||
--enable-vtysh=yes \
|
||||
--enable-isisd=yes \
|
||||
--enable-multipath=256 \
|
||||
--enable-user=quagga \
|
||||
--enable-group=quagga \
|
||||
--enable-vty-group=quaggavty \
|
||||
--enable-user=frr \
|
||||
--enable-group=frr \
|
||||
--enable-vty-group=frrvty \
|
||||
--enable-configfile-mask=0640 \
|
||||
--enable-logfile-mask=0640 \
|
||||
--enable-werror \
|
||||
@ -53,7 +53,7 @@ override_dh_auto_configure:
|
||||
--enable-systemd=yes \
|
||||
--enable-poll=yes \
|
||||
--enable-cumulus=yes \
|
||||
--enable-pimd=no \
|
||||
--enable-pimd=yes \
|
||||
--enable-dependency-tracking \
|
||||
--enable-bgp-vnc=no; \
|
||||
fi
|
||||
@ -66,11 +66,11 @@ override_dh_auto_build:
|
||||
|
||||
# doc/ is a bit crazy
|
||||
ifeq ($(GENERATE_PDF), 1)
|
||||
dh_auto_build -- -C doc quagga.pdf || true # pdfetex fails with exit code 1 but still produces a good looking .pdf
|
||||
dh_auto_build -- -C doc frr.pdf || true # pdfetex fails with exit code 1 but still produces a good looking .pdf
|
||||
endif
|
||||
rm -vf doc/quagga.info
|
||||
dh_auto_build -- -C doc quagga.info
|
||||
rm -vf doc/quagga.info.html*
|
||||
rm -vf doc/frr.info
|
||||
dh_auto_build -- -C doc frr.info
|
||||
rm -vf doc/frr.info.html*
|
||||
|
||||
override_dh_auto_test:
|
||||
|
||||
@ -81,18 +81,18 @@ override_dh_auto_install:
|
||||
rm -f debian/tmp/usr/share/info/dir*
|
||||
|
||||
# install config files
|
||||
mkdir -p debian/tmp/etc/quagga/
|
||||
perl -pi -e 's#^!log file #!log file /var/log/quagga/#' debian/tmp/usr/share/doc/quagga/examples/*sample*
|
||||
mkdir -p debian/tmp/etc/frr/
|
||||
perl -pi -e 's#^!log file #!log file /var/log/frr/#' debian/tmp/usr/share/doc/frr/examples/*sample*
|
||||
|
||||
# installing the Quagga specific SNMP MIB
|
||||
# installing the Frr specific SNMP MIB
|
||||
install -D -m 644 ./zebra/GNOME-PRODUCT-ZEBRA-MIB debian/tmp/usr/share/snmp/mibs/GNOME-PRODUCT-ZEBRA-MIB
|
||||
|
||||
# cleaning .la files
|
||||
sed -i "/dependency_libs/ s/'.*'/''/" debian/tmp/usr/lib/*.la
|
||||
|
||||
override_dh_systemd_start:
|
||||
dh_systemd_start quagga.service
|
||||
dh_systemd_start frr.service
|
||||
|
||||
override_dh_systemd_enable:
|
||||
dh_systemd_enable quagga.service
|
||||
dh_systemd_enable frr.service
|
||||
|
||||
|
2
debian/tests/control
vendored
2
debian/tests/control
vendored
@ -1,3 +1,3 @@
|
||||
Tests: daemons
|
||||
Depends: quagga
|
||||
Depends: frr
|
||||
Restrictions: needs-root
|
||||
|
10
debian/tests/daemons
vendored
10
debian/tests/daemons
vendored
@ -1,21 +1,21 @@
|
||||
#!/bin/bash
|
||||
#---------------
|
||||
# Testing quagga
|
||||
# Testing frr
|
||||
#---------------
|
||||
set -e
|
||||
|
||||
# modify config file to enable all daemons and copy config files
|
||||
CONFIG_FILE=/etc/quagga/daemons
|
||||
CONFIG_FILE=/etc/frr/daemons
|
||||
DAEMONS=("zebra" "bgpd" "ospfd" "ospf6d" "ripd" "ripngd" "isisd" "pimd")
|
||||
|
||||
for daemon in "${DAEMONS[@]}"
|
||||
do
|
||||
sed -i -e "s/${daemon}=no/${daemon}=yes/g" $CONFIG_FILE
|
||||
cp /usr/share/doc/quagga/examples/${daemon}.conf.sample /etc/quagga/${daemon}.conf
|
||||
cp /usr/share/doc/frr/examples/${daemon}.conf.sample /etc/frr/${daemon}.conf
|
||||
done
|
||||
|
||||
# reload quagga
|
||||
/etc/init.d/quagga restart > /dev/null 2>&1
|
||||
# reload frr
|
||||
/etc/init.d/frr restart > /dev/null 2>&1
|
||||
|
||||
# check daemons
|
||||
for daemon in "${DAEMONS[@]}"
|
||||
|
2
debian/watch
vendored
2
debian/watch
vendored
@ -4,5 +4,5 @@
|
||||
# Site Directory Pattern Version Script
|
||||
version=3
|
||||
opts=uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha|b|a)[\-\.]?\d*)$/$1~$2/ \
|
||||
http://download.savannah.gnu.org/releases/quagga/quagga-(\d.*)\.(?:tgz|tar\.(?:gz|bz2|xz))
|
||||
http://download.savannah.gnu.org/releases/frr/quagga-(\d.*)\.(?:tgz|tar\.(?:gz|bz2|xz))
|
||||
# Bart Martens <bartm@debian.org> Fri, 25 Jan 2013 06:38:53 +0000
|
||||
|
4
debian/watchfrr.rc
vendored
Normal file
4
debian/watchfrr.rc
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
check process watchfrr with pidfile /var/run/frr/watchfrr.pid
|
||||
start program = "/etc/init.d/frr start watchfrr" with timeout 120 seconds
|
||||
stop program = "/etc/init.d/frr stop watchfrr"
|
||||
if 3 restarts within 10 cycles then timeout
|
4
debian/watchquagga.rc
vendored
4
debian/watchquagga.rc
vendored
@ -1,4 +0,0 @@
|
||||
check process watchquagga with pidfile /var/run/quagga/watchquagga.pid
|
||||
start program = "/etc/init.d/quagga start watchquagga" with timeout 120 seconds
|
||||
stop program = "/etc/init.d/quagga stop watchquagga"
|
||||
if 3 restarts within 10 cycles then timeout
|
12
doc/.gitignore
vendored
12
doc/.gitignore
vendored
@ -2,17 +2,17 @@ Makefile
|
||||
Makefile.in
|
||||
mdate-sh
|
||||
draft-zebra-00.txt
|
||||
quagga.info-*
|
||||
frr.info-*
|
||||
zebra.html
|
||||
defines.texi
|
||||
version.texi
|
||||
texinfo.tex
|
||||
quagga.html
|
||||
quagga.info
|
||||
frr.html
|
||||
frr.info
|
||||
*.pdf
|
||||
*.eps
|
||||
quagga.ps
|
||||
quagga.dvi
|
||||
frr.ps
|
||||
frr.dvi
|
||||
stamp-vti
|
||||
.nfs*
|
||||
*.aux
|
||||
@ -28,6 +28,8 @@ stamp-vti
|
||||
*.toc
|
||||
*.tp
|
||||
*.vr
|
||||
*.8
|
||||
*.1
|
||||
.arch-inventory
|
||||
.arch-ids
|
||||
*~
|
||||
|
@ -7,7 +7,7 @@
|
||||
#
|
||||
# Here we use 'convert' from the well known 'ImageMagick' package
|
||||
# to do conversion from png to eps/pdf for figures.
|
||||
# PDF form is required for quagga.pdf, using PDFTex at least.
|
||||
# PDF form is required for frr.pdf, using PDFTex at least.
|
||||
#
|
||||
# TeX implementation, which we depend on already anyway.
|
||||
#
|
||||
@ -20,7 +20,7 @@ PNGTOPDF = $(PNGTOEPS)
|
||||
EPSTOPDF = epstopdf
|
||||
|
||||
VNCFIGURES_PNG =
|
||||
VNCFIGURES_DIA = -vnc-mesh -vnc-quagga-route-reflector \
|
||||
VNCFIGURES_DIA = -vnc-mesh -vnc-frr-route-reflector \
|
||||
-vnc-commercial-route-reflector -vnc-redundant-route-reflectors \
|
||||
-vnc-gw -vnc-gw-rr
|
||||
|
||||
@ -40,7 +40,7 @@ figures_eps = $(figures_names_parts:%=fig%.eps) $(VNCFIGURES_PNG:%.png=%.eps)
|
||||
figures_txt = $(figures_names_parts:%=fig%.txt)
|
||||
|
||||
# rather twisted logic because we have to build PDFs of the EPS figures for
|
||||
# PDFTex and yet build one PDF, quagga.pdf, from texi source. Which means we
|
||||
# PDFTex and yet build one PDF, frr.pdf, from texi source. Which means we
|
||||
# cant rely on a single automatic rule for *.pdf, eg the one automatically
|
||||
# provided by automake. If you are an automake wizard, please feel free to
|
||||
# compact it somehow.
|
||||
@ -48,16 +48,16 @@ figures_txt = $(figures_names_parts:%=fig%.txt)
|
||||
# Built from defines.texi.in
|
||||
BUILT_SOURCES = defines.texi
|
||||
|
||||
info_TEXINFOS = quagga.texi
|
||||
info_TEXINFOS = frr.texi
|
||||
|
||||
# Have to manually specify the quagga.pdf rule in order to allow
|
||||
# Have to manually specify the frr.pdf rule in order to allow
|
||||
# us to have a generic automatic .pdf rule to build the figure sources
|
||||
# because it cant just work from the png's directly it seems - contrary
|
||||
# to the documentation...
|
||||
quagga.pdf: $(info_TEXINFOS) $(figures_pdf) $(quagga_TEXINFOS)
|
||||
frr.pdf: $(info_TEXINFOS) $(figures_pdf) $(frr_TEXINFOS)
|
||||
$(TEXI2PDF) -o "$@" $< || true
|
||||
|
||||
quagga_TEXINFOS = appendix.texi basic.texi bgpd.texi isisd.texi filter.texi \
|
||||
frr_TEXINFOS = appendix.texi basic.texi bgpd.texi isisd.texi filter.texi \
|
||||
vnc.texi \
|
||||
install.texi ipv6.texi kernel.texi main.texi ospf6d.texi ospfd.texi \
|
||||
overview.texi protocol.texi ripd.texi ripngd.texi routemap.texi \
|
||||
@ -73,7 +73,7 @@ quagga_TEXINFOS = appendix.texi basic.texi bgpd.texi isisd.texi filter.texi \
|
||||
.dia.png:
|
||||
$(DIATOPNG) "$@" $<
|
||||
|
||||
man_MANS = quagga.1
|
||||
man_MANS = frr.1
|
||||
|
||||
if PIMD
|
||||
man_MANS += pimd.8
|
||||
@ -115,8 +115,8 @@ if VTYSH
|
||||
man_MANS += vtysh.1
|
||||
endif
|
||||
|
||||
if WATCHQUAGGA
|
||||
man_MANS += watchquagga.8
|
||||
if WATCHFRR
|
||||
man_MANS += watchfrr.8
|
||||
endif
|
||||
|
||||
if ZEBRA
|
||||
@ -124,8 +124,21 @@ man_MANS += zebra.8
|
||||
endif
|
||||
|
||||
EXTRA_DIST = BGP-TypeCode draft-zebra-00.ms draft-zebra-00.txt \
|
||||
bgpd.8 isisd.8 ospf6d.8 ospfclient.8 ospfd.8 ldpd.8 ripd.8 \
|
||||
ripngd.8 pimd.8 vtysh.1 watchquagga.8 zebra.8 quagga.1 \
|
||||
\
|
||||
bgpd.8.in \
|
||||
isisd.8.in \
|
||||
ospf6d.8.in \
|
||||
ospfclient.8.in \
|
||||
ospfd.8.in \
|
||||
ldpd.8.in \
|
||||
ripd.8.in \
|
||||
ripngd.8.in \
|
||||
pimd.8.in \
|
||||
vtysh.1.in \
|
||||
watchfrr.8.in \
|
||||
zebra.8.in \
|
||||
frr.1.in \
|
||||
\
|
||||
mpls/ChangeLog.opaque.txt mpls/cli_summary.txt \
|
||||
mpls/opaque_lsa.txt mpls/ospfd.conf \
|
||||
$(figures_sources) $(figures_png) $(figures_txt)
|
||||
|
@ -110,7 +110,7 @@ with severity @code{errors}.
|
||||
If you want to log into a file, please specify @code{filename} as
|
||||
in this example:
|
||||
@example
|
||||
log file /var/log/quagga/bgpd.log informational
|
||||
log file /var/log/frr/bgpd.log informational
|
||||
@end example
|
||||
If the optional second argument specifying the
|
||||
logging level is not present, the default logging level (typically debugging,
|
||||
@ -119,7 +119,7 @@ The @code{no} form of the command disables logging to a file.
|
||||
|
||||
Note: if you do not configure any file logging, and a daemon crashes due
|
||||
to a signal or an assertion failure, it will attempt to save the crash
|
||||
information in a file named /var/tmp/quagga.<daemon name>.crashlog.
|
||||
information in a file named /var/tmp/frr.<daemon name>.crashlog.
|
||||
For security reasons, this will not happen if the file exists already, so
|
||||
it is important to delete the file after reporting the crash information.
|
||||
@end deffn
|
||||
|
@ -1,7 +1,6 @@
|
||||
.TH BGPD 8 "25 November 2004" "Quagga BGPD daemon" "Version 0.97.3"
|
||||
.TH BGPD 8 "25 November 2004" "@PACKAGE_FULLNAME@ BGPD daemon" "Version @PACKAGE_VERSION@"
|
||||
.SH NAME
|
||||
bgpd \- a BGPv4, BGPv4\+, BGPv4\- routing engine for use with Quagga routing
|
||||
software
|
||||
bgpd \- a BGPv4, BGPv4\+, BGPv4\- routing engine for use with @PACKAGE_FULLNAME@.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.B bgpd
|
||||
@ -32,7 +31,7 @@ software
|
||||
.SH DESCRIPTION
|
||||
.B bgpd
|
||||
is a routing component that works with the
|
||||
.B Quagga
|
||||
.B @PACKAGE_FULLNAME@
|
||||
routing engine.
|
||||
.SH OPTIONS
|
||||
Options available for the
|
||||
@ -44,10 +43,10 @@ Runs in daemon mode, forking and exiting from tty.
|
||||
.TP
|
||||
\fB\-f\fR, \fB\-\-config-file \fR\fIconfig-file\fR
|
||||
Specifies the config file to use for startup. If not specified this
|
||||
option will likely default to \fB\fI/usr/local/etc/bgpd.conf\fR.
|
||||
option will default to \fB\fI@CFG_SYSCONF@/bgpd.conf\fR.
|
||||
.TP
|
||||
\fB\-g\fR, \fB\-\-group \fR\fIgroup\fR
|
||||
Specify the group to run as. Default is \fIquagga\fR.
|
||||
Specify the group to run as. Default is \fI@enable_group@\fR.
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
A brief message.
|
||||
@ -55,7 +54,7 @@ A brief message.
|
||||
\fB\-i\fR, \fB\-\-pid_file \fR\fIpid-file\fR
|
||||
When bgpd starts its process identifier is written to
|
||||
\fB\fIpid-file\fR. The init system uses the recorded PID to stop or
|
||||
restart bgpd. The likely default is \fB\fI/var/run/bgpd.pid\fR.
|
||||
restart bgpd. The default is \fB\fI@CFG_STATE@/bgpd.pid\fR.
|
||||
.TP
|
||||
\fB\-p\fR, \fB\-\-bgp_port \fR\fIbgp-port-number\fR
|
||||
Set the port that bgpd will listen to for bgp data.
|
||||
@ -69,7 +68,7 @@ Specify the address that the bgpd VTY will listen on. Default is all
|
||||
interfaces.
|
||||
.TP
|
||||
\fB\-u\fR, \fB\-\-user \fR\fIuser\fR
|
||||
Specify the user to run as. Default is \fIquagga\fR.
|
||||
Specify the user to run as. Default is \fI@enable_user@\fR.
|
||||
.TP
|
||||
\fB\-r\fR, \fB\-\-retain\fR
|
||||
When the program terminates, retain routes added by \fBbgpd\fR.
|
||||
@ -81,12 +80,12 @@ Skip setting the process effective user and group.
|
||||
Print the version and exit.
|
||||
.SH FILES
|
||||
.TP
|
||||
.BI /usr/lib/quagga/bgpd
|
||||
.BI @CFG_SBIN@/bgpd
|
||||
The default location of the
|
||||
.B bgpd
|
||||
binary.
|
||||
.TP
|
||||
.BI /etc/quagga/bgpd.conf
|
||||
.BI @CFG_SYSCONF@/bgpd.conf
|
||||
The default location of the
|
||||
.B bgpd
|
||||
config file.
|
||||
@ -98,7 +97,7 @@ process is config'd to output logs to a file, then you will find this
|
||||
file in the directory where you started \fBbgpd\fR.
|
||||
.SH WARNING
|
||||
This man page is intended to be a quick reference for command line
|
||||
options. The definitive document is the Info file \fBQuagga\fR.
|
||||
options. The definitive document is the Info file \fB@PACKAGE_NAME@\fR.
|
||||
.SH DIAGNOSTICS
|
||||
The bgpd process may log to standard output, to a VTY, to a log
|
||||
file, or through syslog to the system logs. \fBbgpd\fR supports many
|
||||
@ -114,11 +113,11 @@ debugging options, see the Info file, or the source for details.
|
||||
.SH BUGS
|
||||
.B bgpd
|
||||
eats bugs for breakfast. If you have food for the maintainers try
|
||||
.BI http://bugzilla.quagga.net
|
||||
.BI @PACKAGE_BUGREPORT@
|
||||
.SH AUTHORS
|
||||
See
|
||||
.BI http://www.zebra.org
|
||||
and
|
||||
.BI http://www.quagga.net
|
||||
.BI @PACKAGE_URL@
|
||||
or the Info file for an accurate list of authors.
|
||||
|
@ -1,9 +1,9 @@
|
||||
@c -*-texinfo-*-
|
||||
@c This is part of the Quagga Manual.
|
||||
@c This is part of the Frr Manual.
|
||||
@c @value{COPYRIGHT_STR}
|
||||
@c Portions:
|
||||
@c Copyright @copyright{} 2015 Hewlett Packard Enterprise Development LP
|
||||
@c See file quagga.texi for copying conditions.
|
||||
@c See file frr.texi for copying conditions.
|
||||
@node BGP
|
||||
@chapter BGP
|
||||
|
||||
@ -114,7 +114,7 @@ This command set distance value to
|
||||
@node BGP decision process
|
||||
@subsection BGP decision process
|
||||
|
||||
The decision process Quagga BGP uses to select routes is as follows:
|
||||
The decision process Frr BGP uses to select routes is as follows:
|
||||
|
||||
@table @asis
|
||||
@item 1. Weight check
|
||||
@ -240,7 +240,7 @@ The BGP MED (Multi_Exit_Discriminator) attribute has properties which can
|
||||
cause subtle convergence problems in BGP. These properties and problems
|
||||
have proven to be hard to understand, at least historically, and may still
|
||||
not be widely understood. The following attempts to collect together and
|
||||
present what is known about MED, to help operators and Quagga users in
|
||||
present what is known about MED, to help operators and Frr users in
|
||||
designing and configuring their networks.
|
||||
|
||||
The BGP @acronym{MED, Multi_Exit_Discriminator} attribute is intended to
|
||||
@ -263,7 +263,7 @@ MED values to those of AS X. The MED values have been set by different
|
||||
administrators, with different frames of reference.
|
||||
|
||||
The default behaviour of BGP therefore is to not compare MED values across
|
||||
routes received from different neighbouring ASes. In Quagga this is done by
|
||||
routes received from different neighbouring ASes. In Frr this is done by
|
||||
comparing the neighbouring, left-most AS in the received AS_PATHs of the
|
||||
routes and only comparing MED if those are the same.
|
||||
|
||||
@ -341,7 +341,7 @@ in response to the most common sequence of received updates.
|
||||
|
||||
A deterministic order of evaluation tends to imply an additional overhead of
|
||||
sorting over any set of n routes to a destination. The implementation of
|
||||
deterministic MED in Quagga scales significantly worse than most sorting
|
||||
deterministic MED in Frr scales significantly worse than most sorting
|
||||
algorithms at present, with the number of paths to a given destination.
|
||||
That number is often low enough to not cause any issues, but where there are
|
||||
many paths, the deterministic comparison may quickly become increasingly
|
||||
@ -408,7 +408,7 @@ preferences between the routes:
|
||||
This particular type of oscillation in full-mesh iBGP topologies can be
|
||||
avoided by speakers preferring already selected, external routes rather than
|
||||
choosing to update to new a route based on a post-MED metric (e.g.
|
||||
router-ID), at the cost of a non-deterministic selection process. Quagga
|
||||
router-ID), at the cost of a non-deterministic selection process. Frr
|
||||
implements this, as do many other implementations, so long as it is not
|
||||
overridden by setting @ref{bgp bestpath compare-routerid}, and see also
|
||||
@ref{BGP decision process}, .
|
||||
@ -480,7 +480,7 @@ with MED may be determined largely by the order that routes were received
|
||||
in.
|
||||
|
||||
Setting this option will have a performance cost that may be noticeable when
|
||||
there are many routes for each destination. Currently in Quagga it is
|
||||
there are many routes for each destination. Currently in Frr it is
|
||||
implemented in a way that scales poorly as the number of routes per
|
||||
destination increases.
|
||||
|
||||
@ -1478,11 +1478,11 @@ unicast neighbor, @command{bgpd} does not send these Capability
|
||||
Negotiation packets (at least not unless other optional BGP features
|
||||
require capability negotation).
|
||||
|
||||
By default, Quagga will bring up peering with minimal common capability
|
||||
By default, Frr will bring up peering with minimal common capability
|
||||
for the both sides. For example, local router has unicast and
|
||||
multicast capabilitie and remote router has unicast capability. In
|
||||
this case, the local router will establish the connection with unicast
|
||||
only capability. When there are no common capabilities, Quagga sends
|
||||
only capability. When there are no common capabilities, Frr sends
|
||||
Unsupported Capability error and then resets the connection.
|
||||
|
||||
If you want to completely match capabilities with remote peer. Please
|
||||
@ -1588,10 +1588,10 @@ When bgp config-type cisco is specified,
|
||||
``network'' and ``aggregate-address'' argument is displayed as
|
||||
``A.B.C.D M.M.M.M''
|
||||
|
||||
Quagga: network 10.0.0.0/8
|
||||
Frr: network 10.0.0.0/8
|
||||
Cisco: network 10.0.0.0
|
||||
|
||||
Quagga: aggregate-address 192.168.0.0/24
|
||||
Frr: aggregate-address 192.168.0.0/24
|
||||
Cisco: aggregate-address 192.168.0.0 255.255.255.0
|
||||
|
||||
Community attribute handling is also different. If there is no
|
||||
@ -1615,7 +1615,7 @@ router bgp 1
|
||||
@end example
|
||||
|
||||
@deffn {Command} {bgp config-type zebra} {}
|
||||
Quagga style BGP configuration. This is default.
|
||||
Frr style BGP configuration. This is default.
|
||||
@end deffn
|
||||
|
||||
@node BGP instance and view
|
||||
|
@ -10,7 +10,9 @@
|
||||
@set COPYRIGHT_STR Copyright @copyright{} @value{COPYRIGHT_YEAR} @value{AUTHORS}
|
||||
|
||||
@c These may vary with installation environment.
|
||||
@set INSTALL_PREFIX_ETC /etc/quagga
|
||||
@set INSTALL_PREFIX_SBIN /usr/sbin
|
||||
@set INSTALL_PREFIX_STATE /var/run/quagga
|
||||
@set INSTALL_PREFIX_ETC @CFG_SYSCONF@
|
||||
@set INSTALL_PREFIX_SBIN @CFG_SBIN@
|
||||
@set INSTALL_PREFIX_STATE @CFG_STATE@
|
||||
@set INSTALL_USER @enable_user@
|
||||
@set INSTALL_GROUP @enable_group@
|
||||
@set INSTALL_VTY_GROUP @enable_vty_group@
|
||||
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
@ -2,7 +2,7 @@
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Filtering
|
||||
|
||||
Quagga provides many very flexible filtering features. Filtering is used
|
||||
Frr provides many very flexible filtering features. Filtering is used
|
||||
for both input and output of the routing information. Once filtering is
|
||||
defined, it can be applied in any direction.
|
||||
|
||||
|
@ -1,45 +1,45 @@
|
||||
.TH Quagga 1 "27 July 2006" "Quagga Systemd Script" "Version 0.99.23.1"
|
||||
.TH Frr 1 "27 July 2006" "@PACKAGE_FULLNAME@ Systemd Script" "Version @PACKAGE_VERSION@"
|
||||
.SH NAME
|
||||
quagga \- a systemd interaction script
|
||||
frr \- a systemd interaction script
|
||||
.SH SYNOPSIS
|
||||
.B quagga
|
||||
.B frr
|
||||
[
|
||||
.B start
|
||||
]
|
||||
.br
|
||||
.B quagga
|
||||
.B frr
|
||||
[
|
||||
.B stop
|
||||
]
|
||||
.br
|
||||
.B quagga
|
||||
.B frr
|
||||
[
|
||||
.B reload
|
||||
]
|
||||
.br
|
||||
.B quagga
|
||||
.B frr
|
||||
[
|
||||
.B restart
|
||||
]
|
||||
.br
|
||||
.B quagga
|
||||
.B frr
|
||||
[
|
||||
.B status
|
||||
]
|
||||
.br
|
||||
.SH DESCRIPTION
|
||||
.B Quagga
|
||||
.B @PACKAGE_NAME@
|
||||
is a systemd interaction script for the
|
||||
.B Quagga
|
||||
.B @PACKAGE_FULLNAME@
|
||||
routing engine.
|
||||
.SH OPTIONS
|
||||
Options available for the
|
||||
.B quagga
|
||||
.B frr
|
||||
command:
|
||||
.IP start
|
||||
Start enabled Quagga daemons
|
||||
Start enabled Frr daemons
|
||||
.IP stop
|
||||
Stop enabled Quagga daemons
|
||||
Stop enabled Frr daemons
|
||||
.IP reload
|
||||
Reload modified configuration files
|
||||
.IP restart
|
||||
@ -55,11 +55,11 @@ Status of all the daemons
|
||||
.BR isisd (8),
|
||||
.BR zebra (8)
|
||||
.SH BUGS
|
||||
.B quagga
|
||||
.B frr
|
||||
eats bugs for breakfast. If you have food for the maintainers try
|
||||
.BI http://bugzilla.quagga.net
|
||||
.BI @PACKAGE_BUGREPORT@
|
||||
.SH AUTHORS
|
||||
See
|
||||
.BI http://www.quagga.net
|
||||
.BI @PACKAGE_URL@
|
||||
or the Info file for an accurate list of authors.
|
||||
|
@ -4,10 +4,10 @@
|
||||
@include defines.texi
|
||||
|
||||
@c %**start of header
|
||||
@setfilename quagga.info
|
||||
@setfilename frr.info
|
||||
@c Set variables - sourced from defines.texi
|
||||
@include defines.texi
|
||||
@settitle @uref{http://www.quagga.net,,@value{PACKAGE_NAME}}
|
||||
@settitle @uref{http://www.freerangerouting.net,,@value{PACKAGE_NAME}}
|
||||
@c %**end of header
|
||||
|
||||
@c automake will automatically generate version.texi
|
||||
@ -38,26 +38,26 @@ approved by Kunihiro Ishiguro.
|
||||
@c Info entry
|
||||
@dircategory Routing Software:
|
||||
@direntry
|
||||
* @value{PACKAGE_NAME}: (quagga). The Quagga Software Routing Suite
|
||||
* @value{PACKAGE_NAME}: (frr). The Frr Suite
|
||||
@end direntry
|
||||
|
||||
@c @smallbook
|
||||
|
||||
@ifinfo
|
||||
This file documents the Quagga Software Routing Suite which manages common
|
||||
This file documents the Frr Software Routing Suite which manages common
|
||||
TCP/IP routing protocols.
|
||||
|
||||
This is Edition @value{EDITION}, last updated @value{UPDATED} of
|
||||
@cite{The Quagga Manual}, for @uref{http://www.quagga.net/,,@value{PACKAGE_NAME}}
|
||||
@cite{The Frr Manual}, for @uref{http://www.freerangerouting.net/,,@value{PACKAGE_NAME}}
|
||||
Version @value{VERSION}.
|
||||
|
||||
@insertcopying
|
||||
@end ifinfo
|
||||
|
||||
@titlepage
|
||||
@title @uref{http://www.quagga.net,,Quagga}
|
||||
@title @uref{http://www.freerangerouting.net,,Frr}
|
||||
@subtitle A routing software package for TCP/IP networks
|
||||
@subtitle @uref{http://www.quagga.net,,@value{PACKAGE_NAME}} @value{VERSION}
|
||||
@subtitle @uref{http://www.freerangerouting.net,,@value{PACKAGE_NAME}} @value{VERSION}
|
||||
@subtitle @value{UPDATED-MONTH}
|
||||
@author @value{AUTHORS}
|
||||
|
||||
@ -70,12 +70,12 @@ Version @value{VERSION}.
|
||||
|
||||
@ifnottex
|
||||
@node Top
|
||||
@top Quagga -- With Virtual Network Control
|
||||
@top Frr -- With Virtual Network Control
|
||||
|
||||
@uref{http://www.quagga.net,,Quagga} is an advanced routing software package
|
||||
@uref{http://www.freerangerouting.net,,Frr} is an advanced routing software package
|
||||
that provides a suite of TCP/IP based routing protocols. This is the Manual
|
||||
for @value{PACKAGE_STRING}. @uref{http://www.quagga.net,,Quagga} is a fork of
|
||||
@uref{http://www.zebra.org,,GNU Zebra}.
|
||||
for @value{PACKAGE_STRING}. @uref{http://www.freerangerouting.net,,Frr} is a fork of
|
||||
@uref{http://www.quagga.net,,Quagga}.
|
||||
|
||||
@insertcopying
|
||||
@end ifnottex
|
||||
@ -91,7 +91,7 @@ for @value{PACKAGE_STRING}. @uref{http://www.quagga.net,,Quagga} is a fork of
|
||||
* OSPFv3::
|
||||
* ISIS::
|
||||
* BGP::
|
||||
* Configuring Quagga as a Route Server::
|
||||
* Configuring Frr as a Route Server::
|
||||
* VNC and VNC-GW::
|
||||
* VTY shell::
|
||||
* Filtering::
|
@ -1,11 +1,11 @@
|
||||
@node Installation
|
||||
@chapter Installation
|
||||
|
||||
@cindex How to install Quagga
|
||||
@cindex How to install Frr
|
||||
@cindex Installation
|
||||
@cindex Installing Quagga
|
||||
@cindex Installing Frr
|
||||
@cindex Building the system
|
||||
@cindex Making Quagga
|
||||
@cindex Making Frr
|
||||
|
||||
There are three steps for installing the software: configuration,
|
||||
compilation, and installation.
|
||||
@ -16,7 +16,7 @@ compilation, and installation.
|
||||
* Install the Software::
|
||||
@end menu
|
||||
|
||||
The easiest way to get Quagga running is to issue the following
|
||||
The easiest way to get Frr running is to issue the following
|
||||
commands:
|
||||
|
||||
@example
|
||||
@ -43,7 +43,7 @@ commands:
|
||||
@cindex Distribution configuration
|
||||
@cindex Options to @code{./configure}
|
||||
|
||||
Quagga has an excellent configure script which automatically detects most
|
||||
Frr has an excellent configure script which automatically detects most
|
||||
host configurations. There are several additional configure options to
|
||||
customize the build to include or exclude specific features and dependencies.
|
||||
|
||||
@ -122,13 +122,13 @@ This command will configure zebra and the routing daemons.
|
||||
@node Least-Privilege support
|
||||
@subsection Least-Privilege support
|
||||
|
||||
@cindex Quagga Least-Privileges
|
||||
@cindex Quagga Privileges
|
||||
@cindex Frr Least-Privileges
|
||||
@cindex Frr Privileges
|
||||
|
||||
Additionally, you may configure zebra to drop its elevated privileges
|
||||
shortly after startup and switch to another user. The configure script will
|
||||
automatically try to configure this support. There are three configure
|
||||
options to control the behaviour of Quagga daemons.
|
||||
options to control the behaviour of Frr daemons.
|
||||
|
||||
@table @option
|
||||
@item --enable-user=@var{user}
|
||||
@ -145,29 +145,29 @@ delegate this group to individual users, or to run vtysh setgid to
|
||||
this group.
|
||||
@end table
|
||||
|
||||
The default user and group which will be configured is 'quagga' if no user
|
||||
The default user and group which will be configured is 'frr' if no user
|
||||
or group is specified. Note that this user or group requires write access to
|
||||
the local state directory (see --localstatedir) and requires at least read
|
||||
access, and write access if you wish to allow daemons to write out their
|
||||
configuration, to the configuration directory (see --sysconfdir).
|
||||
|
||||
On systems which have the 'libcap' capabilities manipulation library
|
||||
(currently only linux), the quagga system will retain only minimal
|
||||
(currently only linux), the frr system will retain only minimal
|
||||
capabilities required, further it will only raise these capabilities for
|
||||
brief periods. On systems without libcap, quagga will run as the user
|
||||
brief periods. On systems without libcap, frr will run as the user
|
||||
specified and only raise its uid back to uid 0 for brief periods.
|
||||
|
||||
@node Linux notes
|
||||
@subsection Linux Notes
|
||||
|
||||
@cindex Configuring Quagga
|
||||
@cindex Configuring Frr
|
||||
@cindex Building on Linux boxes
|
||||
@cindex Linux configurations
|
||||
|
||||
There are several options available only to @sc{gnu}/Linux systems:
|
||||
@footnote{@sc{gnu}/Linux has very flexible kernel configuration features}. If
|
||||
you use @sc{gnu}/Linux, make sure that the current kernel configuration is
|
||||
what you want. Quagga will run with any kernel configuration but some
|
||||
what you want. Frr will run with any kernel configuration but some
|
||||
recommendations do exist.
|
||||
|
||||
@table @var
|
||||
@ -190,7 +190,7 @@ This option should be specified when you use @command{ripd} (@pxref{RIP}) or
|
||||
@end table
|
||||
|
||||
IPv6 support has been added in @sc{gnu}/Linux kernel version 2.2. If you
|
||||
try to use the Quagga IPv6 feature on a @sc{gnu}/Linux kernel, please
|
||||
try to use the Frr IPv6 feature on a @sc{gnu}/Linux kernel, please
|
||||
make sure the following libraries have been installed. Please note that
|
||||
these libraries will not be needed when you uses @sc{gnu} C library 2.1
|
||||
or upper.
|
||||
@ -244,7 +244,7 @@ programs and supporting files to a standard location. After the
|
||||
installation process has completed, these files have been copied
|
||||
from your work directory to @file{/usr/local/bin}, and @file{/usr/local/etc}.
|
||||
|
||||
To install the Quagga suite, issue the following command at your shell
|
||||
To install the Frr suite, issue the following command at your shell
|
||||
prompt: @command{make install}.
|
||||
|
||||
@example
|
||||
@ -253,7 +253,7 @@ prompt: @command{make install}.
|
||||
%
|
||||
@end example
|
||||
|
||||
Quagga daemons have their own terminal interface or VTY. After
|
||||
Frr daemons have their own terminal interface or VTY. After
|
||||
installation, you have to setup each beast's port number to connect to
|
||||
them. Please add the following entries to @file{/etc/services}.
|
||||
|
||||
|
@ -1,14 +1,14 @@
|
||||
@node IPv6 Support
|
||||
@chapter IPv6 Support
|
||||
|
||||
Quagga fully supports IPv6 routing. As described so far, Quagga supports
|
||||
Frr fully supports IPv6 routing. As described so far, Frr supports
|
||||
RIPng, OSPFv3, and BGP-4+. You can give IPv6 addresses to an interface
|
||||
and configure static IPv6 routing information. Quagga IPv6 also provides
|
||||
and configure static IPv6 routing information. Frr IPv6 also provides
|
||||
automatic address configuration via a feature called @code{address
|
||||
auto configuration}. To do it, the router must send router advertisement
|
||||
messages to the all nodes that exist on the network.
|
||||
|
||||
Previous versions of Quagga could be built without IPv6 support. This is
|
||||
Previous versions of Frr could be built without IPv6 support. This is
|
||||
no longer possible.
|
||||
|
||||
@menu
|
||||
|
@ -1,6 +1,6 @@
|
||||
.TH IS-IS 8 "25 November 2004" "Quagga IS-IS daemon" "Version 0.97.3"
|
||||
.TH IS-IS 8 "25 November 2004" "@PACKAGE_FULLNAME@ IS-IS daemon" "Version @PACKAGE_VERSION@"
|
||||
.SH NAME
|
||||
isisd \- an IS-IS routing engine for use with Quagga routing software.
|
||||
isisd \- an IS-IS routing engine for use with @PACKAGE_FULLNAME@.
|
||||
.SH SYNOPSIS
|
||||
.B isisd
|
||||
[
|
||||
@ -27,7 +27,7 @@ isisd \- an IS-IS routing engine for use with Quagga routing software.
|
||||
.SH DESCRIPTION
|
||||
.B isisd
|
||||
is a routing component that works with the
|
||||
.B Quagga
|
||||
.B @PACKAGE_FULLNAME@
|
||||
routing engine.
|
||||
.SH OPTIONS
|
||||
Options available for the
|
||||
@ -39,10 +39,10 @@ Runs in daemon mode, forking and exiting from tty.
|
||||
.TP
|
||||
\fB\-f\fR, \fB\-\-config-file \fR\fIconfig-file\fR
|
||||
Specifies the config file to use for startup. If not specified this
|
||||
option will likely default to \fB\fI/usr/local/etc/isisd.conf\fR.
|
||||
option will default to \fB\fI@CFG_SYSCONF@/isisd.conf\fR.
|
||||
.TP
|
||||
\fB\-g\fR, \fB\-\-group \fR\fIgroup\fR
|
||||
Specify the group to run as. Default is \fIquagga\fR.
|
||||
Specify the group to run as. Default is \fI@enable_group@\fR.
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
A brief message.
|
||||
@ -50,7 +50,7 @@ A brief message.
|
||||
\fB\-i\fR, \fB\-\-pid_file \fR\fIpid-file\fR
|
||||
When isisd starts its process identifier is written to
|
||||
\fB\fIpid-file\fR. The init system uses the recorded PID to stop or
|
||||
restart isisd. The likely default is \fB\fI/var/run/isisd.pid\fR.
|
||||
restart isisd. The default is \fB\fI@CFG_STATE@/isisd.pid\fR.
|
||||
.TP
|
||||
\fB\-P\fR, \fB\-\-vty_port \fR\fIport-number\fR
|
||||
Specify the port that the isisd VTY will listen on. This defaults to
|
||||
@ -61,18 +61,18 @@ Specify the address that the isisd VTY will listen on. Default is all
|
||||
interfaces.
|
||||
.TP
|
||||
\fB\-u\fR, \fB\-\-user \fR\fIuser\fR
|
||||
Specify the user to run as. Default is \fIquagga\fR.
|
||||
Specify the user to run as. Default is \fI@enable_user@\fR.
|
||||
.TP
|
||||
\fB\-v\fR, \fB\-\-version\fR
|
||||
Print the version and exit.
|
||||
.SH FILES
|
||||
.TP
|
||||
.BI /usr/lib/quagga/isisd
|
||||
.BI @CFG_SBIN@/isisd
|
||||
The default location of the
|
||||
.B isisd
|
||||
binary.
|
||||
.TP
|
||||
.BI /etc/quagga/isisd.conf
|
||||
.BI @CFG_SYSCONF@/isisd.conf
|
||||
The default location of the
|
||||
.B isisd
|
||||
config file.
|
||||
@ -84,7 +84,7 @@ process is config'd to output logs to a file, then you will find this
|
||||
file in the directory where you started \fBisisd\fR.
|
||||
.SH WARNING
|
||||
This man page is intended to be a quick reference for command line
|
||||
options. The definitive document is the Info file \fBQuagga\fR.
|
||||
options. The definitive document is the Info file \fB@PACKAGE_NAME@\fR.
|
||||
.SH DIAGNOSTICS
|
||||
The isisd process may log to standard output, to a VTY, to a log
|
||||
file, or through syslog to the system logs. \fBisisd\fR supports many
|
||||
@ -103,7 +103,7 @@ production use.
|
||||
|
||||
.B isisd
|
||||
eats bugs for breakfast. If you have food for the maintainers try
|
||||
.BI http://bugzilla.quagga.net
|
||||
.BI @PACKAGE_BUGREPORT@
|
||||
.SH AUTHORS
|
||||
See
|
||||
.BI http://isisd.sourceforge.net
|
@ -31,7 +31,7 @@ information.
|
||||
@item netlink
|
||||
On recent Linux kernels (2.0.x and 2.2.x), there is a kernel/user
|
||||
communication support called @code{netlink}. It makes asynchronous
|
||||
communication between kernel and Quagga possible, similar to a routing
|
||||
communication between kernel and Frr possible, similar to a routing
|
||||
socket on BSD systems.
|
||||
|
||||
Before you use this feature, be sure to select (in kernel configuration)
|
||||
@ -41,7 +41,7 @@ the kernel/netlink support option 'Kernel/User network link driver' and
|
||||
Today, the /dev/route special device file is obsolete. Netlink
|
||||
communication is done by reading/writing over netlink socket.
|
||||
|
||||
After the kernel configuration, please reconfigure and rebuild Quagga.
|
||||
You can use netlink as a dynamic routing update channel between Quagga
|
||||
After the kernel configuration, please reconfigure and rebuild Frr.
|
||||
You can use netlink as a dynamic routing update channel between Frr
|
||||
and the kernel.
|
||||
@end table
|
||||
|
@ -103,7 +103,7 @@ just to show how the VPLS configuration should look like in the future.
|
||||
# ip -6 route add 3:3:3::3/128 via 2001:db8:4::3
|
||||
```
|
||||
|
||||
6 - Edit /etc/quagga/ospfd.conf:
|
||||
6 - Edit /etc/frr/ospfd.conf:
|
||||
```
|
||||
router ospf
|
||||
network 4.4.4.4/32 area 0.0.0.0
|
||||
@ -112,7 +112,7 @@ router ospf
|
||||
!
|
||||
```
|
||||
|
||||
7 - Edit /etc/quagga/ldpd.conf:
|
||||
7 - Edit /etc/frr/ldpd.conf:
|
||||
```
|
||||
debug mpls ldp messages recv
|
||||
debug mpls ldp messages sent
|
||||
@ -207,7 +207,7 @@ LDPv6 but the IOS-XR implementation is not RFC compliant in this regard.
|
||||
# route -n add 2:2:2::2/128 2001:db8:2::2
|
||||
```
|
||||
|
||||
6 - Edit /etc/quagga/ospfd.conf:
|
||||
6 - Edit /etc/frr/ospfd.conf:
|
||||
```
|
||||
router ospf
|
||||
network 10.0.2.3/24 area 0
|
||||
@ -216,7 +216,7 @@ router ospf
|
||||
!
|
||||
```
|
||||
|
||||
7 - Edit /etc/quagga/ldpd.conf:
|
||||
7 - Edit /etc/frr/ldpd.conf:
|
||||
```
|
||||
debug mpls ldp messages recv
|
||||
debug mpls ldp messages sent
|
||||
|
@ -1,6 +1,6 @@
|
||||
.TH LDPD 8 "29 March 2016" "Quagga LDP daemon" "Version 1.0.20160309"
|
||||
.TH LDPD 8 "29 March 2016" "@PACKAGE_FULLNAME@ LDP daemon" "Version @PACKAGE_VERSION@"
|
||||
.SH NAME
|
||||
ldpd \- an LDP engine for use with Quagga routing software.
|
||||
ldpd \- an LDP engine for use with @PACKAGE_FULLNAME@.
|
||||
.SH SYNOPSIS
|
||||
.B ldpd
|
||||
[
|
||||
@ -27,7 +27,7 @@ ldpd \- an LDP engine for use with Quagga routing software.
|
||||
.SH DESCRIPTION
|
||||
.B ldpd
|
||||
is a component that works with the
|
||||
.B Quagga
|
||||
.B @PACKAGE_FULLNAME@
|
||||
routing engine.
|
||||
.SH OPTIONS
|
||||
Options available for the
|
||||
@ -39,10 +39,10 @@ Runs in daemon mode, forking and exiting from tty.
|
||||
.TP
|
||||
\fB\-f\fR, \fB\-\-config-file \fR\fIconfig-file\fR
|
||||
Specifies the config file to use for startup. If not specified this
|
||||
option will likely default to \fB\fI/usr/local/etc/ldpd.conf\fR.
|
||||
option will default to \fB\fI@CFG_SYSCONF@/ldpd.conf\fR.
|
||||
.TP
|
||||
\fB\-g\fR, \fB\-\-group \fR\fIgroup\fR
|
||||
Specify the group to run as. Default is \fIquagga\fR.
|
||||
Specify the group to run as. Default is \fI@enable_group@\fR.
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
A brief message.
|
||||
@ -50,7 +50,7 @@ A brief message.
|
||||
\fB\-i\fR, \fB\-\-pid_file \fR\fIpid-file\fR
|
||||
When ldpd starts its process identifier is written to
|
||||
\fB\fIpid-file\fR. The init system uses the recorded PID to stop or
|
||||
restart ldpd. The likely default is \fB\fI/var/run/ldpd.pid\fR.
|
||||
restart ldpd. The default is \fB\fI@CFG_STATE@/ldpd.pid\fR.
|
||||
.TP
|
||||
\fB\-P\fR, \fB\-\-vty_port \fR\fIport-number\fR
|
||||
Specify the port that the ldpd VTY will listen on. This defaults to
|
||||
@ -61,18 +61,18 @@ Specify the address that the ldpd VTY will listen on. Default is all
|
||||
interfaces.
|
||||
.TP
|
||||
\fB\-u\fR, \fB\-\-user \fR\fIuser\fR
|
||||
Specify the user to run as. Default is \fIquagga\fR.
|
||||
Specify the user to run as. Default is \fI@enable_user@\fR.
|
||||
.TP
|
||||
\fB\-v\fR, \fB\-\-version\fR
|
||||
Print the version and exit.
|
||||
.SH FILES
|
||||
.TP
|
||||
.BI /usr/local/sbin/ldpd
|
||||
.BI @CFG_SBIN@/ldpd
|
||||
The default location of the
|
||||
.B ldpd
|
||||
binary.
|
||||
.TP
|
||||
.BI /usr/local/etc/ldpd.conf
|
||||
.BI @CFG_SYSCONF@/ldpd.conf
|
||||
The default location of the
|
||||
.B ldpd
|
||||
config file.
|
||||
@ -84,7 +84,7 @@ process is config'd to output logs to a file, then you will find this
|
||||
file in the directory where you started \fBldpd\fR.
|
||||
.SH WARNING
|
||||
This man page is intended to be a quick reference for command line
|
||||
options. The definitive document is the Info file \fBQuagga\fR.
|
||||
options. The definitive document is the Info file \fB@PACKAGE_NAME@\fR.
|
||||
.SH DIAGNOSTICS
|
||||
The ldpd process may log to standard output, to a VTY, to a log
|
||||
file, or through syslog to the system logs. \fBldpd\fR supports many
|
||||
@ -101,9 +101,9 @@ debugging options, see the Info file, or the source for details.
|
||||
.SH BUGS
|
||||
.B ldpd
|
||||
eats bugs for breakfast. If you have food for the maintainers try
|
||||
.BI http://bugzilla.quagga.net
|
||||
.BI @PACKAGE_BUGREPORT@
|
||||
.SH AUTHORS
|
||||
See
|
||||
.BI http://www.quagga.net
|
||||
.BI @PACKAGE_URL@
|
||||
or the Info file for an accurate list of authors.
|
||||
|
@ -258,7 +258,7 @@ addresses but unicast addresses.
|
||||
This table is fully separate from the default unicast table. However,
|
||||
RPF lookup can include the unicast table.
|
||||
|
||||
WARNING: RPF lookup results are non-responsive in this version of Quagga,
|
||||
WARNING: RPF lookup results are non-responsive in this version of Frr,
|
||||
i.e. multicast routing does not actively react to changes in underlying
|
||||
unicast topology!
|
||||
|
||||
@ -330,7 +330,7 @@ Multicast RIB instead of the Unicast RIB.
|
||||
@node zebra Route Filtering
|
||||
@section zebra Route Filtering
|
||||
Zebra supports @command{prefix-list} and @command{route-map} to match
|
||||
routes received from other quagga components. The
|
||||
routes received from other frr components. The
|
||||
@command{permit}/@command{deny} facilities provided by these commands
|
||||
can be used to filter which routes zebra will install in the kernel.
|
||||
|
||||
@ -374,16 +374,16 @@ ip protocol rip route-map RM1
|
||||
@section zebra FIB push interface
|
||||
|
||||
Zebra supports a 'FIB push' interface that allows an external
|
||||
component to learn the forwarding information computed by the Quagga
|
||||
component to learn the forwarding information computed by the Frr
|
||||
routing suite.
|
||||
|
||||
In Quagga, the Routing Information Base (RIB) resides inside
|
||||
In Frr, the Routing Information Base (RIB) resides inside
|
||||
zebra. Routing protocols communicate their best routes to zebra, and
|
||||
zebra computes the best route across protocols for each prefix. This
|
||||
latter information makes up the Forwarding Information Base
|
||||
(FIB). Zebra feeds the FIB to the kernel, which allows the IP stack in
|
||||
the kernel to forward packets according to the routes computed by
|
||||
Quagga. The kernel FIB is updated in an OS-specific way. For example,
|
||||
Frr. The kernel FIB is updated in an OS-specific way. For example,
|
||||
the @code{netlink} interface is used on Linux, and route sockets are
|
||||
used on FreeBSD.
|
||||
|
||||
@ -408,7 +408,7 @@ interaction of zebra with the kernel remains unchanged -- that is, the
|
||||
kernel continues to receive FIB updates as before.
|
||||
|
||||
The encapsulation header for the messages exchanged with the FPM is
|
||||
defined by the file @file{fpm/fpm.h} in the quagga tree. The routes
|
||||
defined by the file @file{fpm/fpm.h} in the frr tree. The routes
|
||||
themselves are encoded in netlink or protobuf format, with netlink
|
||||
being the default.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
0. Introduction
|
||||
|
||||
This is the design specification for next hop tracking feature in
|
||||
Quagga.
|
||||
Frr.
|
||||
|
||||
1. Background
|
||||
|
||||
@ -259,7 +259,7 @@ rnh table:
|
||||
|
||||
5. User interface changes
|
||||
|
||||
quagga# show ip nht
|
||||
frr# show ip nht
|
||||
3.3.3.3
|
||||
resolved via kernel
|
||||
via 11.0.0.6, swp1
|
||||
@ -277,7 +277,7 @@ quagga# show ip nht
|
||||
via 10.0.1.2, eth0
|
||||
Client list: bgp(fd 12)
|
||||
|
||||
quagga# show ip bgp nexthop
|
||||
frr# show ip bgp nexthop
|
||||
Current BGP nexthop cache:
|
||||
3.3.3.3 valid [IGP metric 0], #paths 3
|
||||
Last update: Wed Oct 16 04:43:49 2013
|
||||
@ -291,11 +291,11 @@ Current BGP nexthop cache:
|
||||
11.11.11.11 valid [IGP metric 0], #paths 1
|
||||
Last update: Wed Oct 16 04:43:47 2013
|
||||
|
||||
quagga# show ipv6 nht
|
||||
quagga# show ip bgp nexthop detail
|
||||
frr# show ipv6 nht
|
||||
frr# show ip bgp nexthop detail
|
||||
|
||||
quagga# debug bgp nht
|
||||
quagga# debug zebra nht
|
||||
frr# debug bgp nht
|
||||
frr# debug zebra nht
|
||||
|
||||
6. Sample test cases
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
.TH OSPF6D 8 "25 November 2004" "Quagga OSPFv3 daemon" "Version 0.97.3"
|
||||
.TH OSPF6D 8 "25 November 2004" "@PACKAGE_FULLNAME@ OSPFv3 daemon" "Version @PACKAGE_VERSION@"
|
||||
.SH NAME
|
||||
ospf6d \- an OSPFv3 routing engine for use with Quagga routing software.
|
||||
ospf6d \- an OSPFv3 routing engine for use with @PACKAGE_FULLNAME@.
|
||||
.SH SYNOPSIS
|
||||
.B ospf6d
|
||||
[
|
||||
@ -27,7 +27,7 @@ ospf6d \- an OSPFv3 routing engine for use with Quagga routing software.
|
||||
.SH DESCRIPTION
|
||||
.B ospf6d
|
||||
is a routing component that works with the
|
||||
.B Quagga
|
||||
.B @PACKAGE_FULLNAME@
|
||||
routing engine.
|
||||
.SH OPTIONS
|
||||
Options available for the
|
||||
@ -40,10 +40,10 @@ Runs in daemon mode, forking and exiting from tty.
|
||||
.TP
|
||||
\fB\-f\fR, \fB\-\-config-file \fR\fIconfig-file\fR
|
||||
Specifies the config file to use for startup. If not specified this
|
||||
option will likely default to \fB\fI/usr/local/etc/ospf6d.conf\fR.
|
||||
option will default to \fB\fI@CFG_SYSCONF@/ospf6d.conf\fR.
|
||||
.TP
|
||||
\fB\-g\fR, \fB\-\-group \fR\fIgroup\fR
|
||||
Specify the group to run as. Default is \fIquagga\fR.
|
||||
Specify the group to run as. Default is \fI@enable_group@\fR.
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
A brief message.
|
||||
@ -51,7 +51,7 @@ A brief message.
|
||||
\fB\-i\fR, \fB\-\-pid_file \fR\fIpid-file\fR
|
||||
When ospf6d starts its process identifier is written to
|
||||
\fB\fIpid-file\fR. The init system uses the recorded PID to stop or
|
||||
restart ospf6d. The likely default is \fB\fI/var/run/ospf6d.pid\fR.
|
||||
restart ospf6d. The default is \fB\fI@CFG_STATE@/ospf6d.pid\fR.
|
||||
.TP
|
||||
\fB\-P\fR, \fB\-\-vty_port \fR\fIport-number\fR
|
||||
Specify the port that the ospf6d VTY will listen on. This defaults to
|
||||
@ -62,18 +62,18 @@ Specify the address that the ospf6d VTY will listen on. Default is all
|
||||
interfaces.
|
||||
.TP
|
||||
\fB\-u\fR, \fB\-\-user \fR\fIuser\fR
|
||||
Specify the user to run as. Default is \fIquagga\fR.
|
||||
Specify the user to run as. Default is \fI@enable_user@\fR.
|
||||
.TP
|
||||
\fB\-v\fR, \fB\-\-version\fR
|
||||
Print the version and exit.
|
||||
.SH FILES
|
||||
.TP
|
||||
.BI /usr/lib/quagga/ospf6d
|
||||
.BI @CFG_SBIN@/ospf6d
|
||||
The default location of the
|
||||
.B ospf6d
|
||||
binary.
|
||||
.TP
|
||||
.BI /etc/quagga/ospf6d.conf
|
||||
.BI @CFG_SYSCONF@/ospf6d.conf
|
||||
The default location of the
|
||||
.B ospf6d
|
||||
config file.
|
||||
@ -85,7 +85,7 @@ process is config'd to output logs to a file, then you will find this
|
||||
file in the directory where you started \fBospf6d\fR.
|
||||
.SH WARNING
|
||||
This man page is intended to be a quick reference for command line
|
||||
options. The definitive document is the Info file \fBQuagga\fR.
|
||||
options. The definitive document is the Info file \fB@PACKAGE_NAME@\fR.
|
||||
.SH DIAGNOSTICS
|
||||
The ospf6d process may log to standard output, to a VTY, to a log
|
||||
file, or through syslog to the system logs. \fBospf6d\fR supports many
|
||||
@ -101,11 +101,11 @@ debugging options, see the Info file, or the source for details.
|
||||
.SH BUGS
|
||||
.B ospf6d
|
||||
eats bugs for breakfast. If you have food for the maintainers try
|
||||
.BI http://bugzilla.quagga.net
|
||||
.BI @PACKAGE_BUGREPORT@
|
||||
.SH AUTHORS
|
||||
See
|
||||
.BI http://www.zebra.org
|
||||
and
|
||||
.BI http://www.quagga.net
|
||||
.BI @PACKAGE_URL@
|
||||
or the Info file for an accurate list of authors.
|
||||
|
@ -39,4 +39,4 @@ Area in the IP address format for type 10, otherwise it will be ignored.
|
||||
.SH "SEE ALSO"
|
||||
.BR ospfd (8).
|
||||
.SH AUTHORS
|
||||
See the project homepage at <http://www.quagga.net/>.
|
||||
See the project homepage at <@PACKAGE_URL@>.
|
@ -1,6 +1,6 @@
|
||||
.TH OSPFD 8 "25 November 2004" "Quagga OSPFv2 daemon" "Version 0.97.3"
|
||||
.TH OSPFD 8 "25 November 2004" "@PACKAGE_FULLNAME@ OSPFv2 daemon" "Version @PACKAGE_VERSION@"
|
||||
.SH NAME
|
||||
ospfd \- an OSPFv2 routing engine for use with Quagga routing software.
|
||||
ospfd \- an OSPFv2 routing engine for use with @PACKAGE_FULLNAME@.
|
||||
.SH SYNOPSIS
|
||||
.B ospfd
|
||||
[
|
||||
@ -27,7 +27,7 @@ ospfd \- an OSPFv2 routing engine for use with Quagga routing software.
|
||||
.SH DESCRIPTION
|
||||
.B ospfd
|
||||
is a routing component that works with the
|
||||
.B Quagga
|
||||
.B @PACKAGE_FULLNAME@
|
||||
routing engine.
|
||||
.SH OPTIONS
|
||||
Options available for the
|
||||
@ -39,10 +39,10 @@ Runs in daemon mode, forking and exiting from tty.
|
||||
.TP
|
||||
\fB\-f\fR, \fB\-\-config-file \fR\fIconfig-file\fR
|
||||
Specifies the config file to use for startup. If not specified this
|
||||
option will likely default to \fB\fI/usr/local/etc/ospfd.conf\fR.
|
||||
option will default to \fB\fI@CFG_SYSCONF@/ospfd.conf\fR.
|
||||
.TP
|
||||
\fB\-g\fR, \fB\-\-group \fR\fIgroup\fR
|
||||
Specify the group to run as. Default is \fIquagga\fR.
|
||||
Specify the group to run as. Default is \fI@enable_group@\fR.
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
A brief message.
|
||||
@ -50,7 +50,7 @@ A brief message.
|
||||
\fB\-i\fR, \fB\-\-pid_file \fR\fIpid-file\fR
|
||||
When ospfd starts its process identifier is written to
|
||||
\fB\fIpid-file\fR. The init system uses the recorded PID to stop or
|
||||
restart ospfd. The likely default is \fB\fI/var/run/ospfd.pid\fR.
|
||||
restart ospfd. The default is \fB\fI@CFG_STATE@/ospfd.pid\fR.
|
||||
.TP
|
||||
\fB\-P\fR, \fB\-\-vty_port \fR\fIport-number\fR
|
||||
Specify the port that the ospfd VTY will listen on. This defaults to
|
||||
@ -61,7 +61,7 @@ Specify the address that the ospfd VTY will listen on. Default is all
|
||||
interfaces.
|
||||
.TP
|
||||
\fB\-u\fR, \fB\-\-user \fR\fIuser\fR
|
||||
Specify the user to run as. Default is \fIquagga\fR.
|
||||
Specify the user to run as. Default is \fI@enable_user@\fR.
|
||||
.TP
|
||||
\fB\-a\fR, \fB\-\-apiserver \fR
|
||||
Enable OSPF apiserver. Default is disabled.
|
||||
@ -70,12 +70,12 @@ Enable OSPF apiserver. Default is disabled.
|
||||
Print the version and exit.
|
||||
.SH FILES
|
||||
.TP
|
||||
.BI /usr/lib/quagga/ospfd
|
||||
.BI @CFG_SBIN@/ospfd
|
||||
The default location of the
|
||||
.B ospfd
|
||||
binary.
|
||||
.TP
|
||||
.BI /etc/quagga/ospfd.conf
|
||||
.BI @CFG_SYSCONF@/ospfd.conf
|
||||
The default location of the
|
||||
.B ospfd
|
||||
config file.
|
||||
@ -87,7 +87,7 @@ process is config'd to output logs to a file, then you will find this
|
||||
file in the directory where you started \fBospfd\fR.
|
||||
.SH WARNING
|
||||
This man page is intended to be a quick reference for command line
|
||||
options. The definitive document is the Info file \fBQuagga\fR.
|
||||
options. The definitive document is the Info file \fB@PACKAGE_NAME@\fR.
|
||||
.SH DIAGNOSTICS
|
||||
The ospfd process may log to standard output, to a VTY, to a log
|
||||
file, or through syslog to the system logs. \fBospfd\fR supports many
|
||||
@ -103,11 +103,11 @@ debugging options, see the Info file, or the source for details.
|
||||
.SH BUGS
|
||||
.B ospfd
|
||||
eats bugs for breakfast. If you have food for the maintainers try
|
||||
.BI http://bugzilla.quagga.net
|
||||
.BI @PACKAGE_BUGREPORT@
|
||||
.SH AUTHORS
|
||||
See
|
||||
.BI http://www.zebra.org
|
||||
and
|
||||
.BI http://www.quagga.net
|
||||
.BI @PACKAGE_URL@
|
||||
or the Info file for an accurate list of authors.
|
||||
|
@ -77,7 +77,7 @@ which still can reach the backbone - this restriction exists primarily
|
||||
to ensure routing-loops are avoided.
|
||||
|
||||
With the "Cisco" or "IBM" ABR type, the default in this release of
|
||||
Quagga, this restriction is lifted, allowing an ABR to consider
|
||||
Frr, this restriction is lifted, allowing an ABR to consider
|
||||
summaries learnt from other ABRs through non-backbone areas, and hence
|
||||
route via non-backbone areas as a last resort when, and only when,
|
||||
backbone links are down.
|
||||
@ -169,7 +169,7 @@ calculations will always be seperated by between 400ms to 10s, the
|
||||
hold-time increasing by 400ms each time an SPF-triggering event occurs
|
||||
within the hold-time of the previous SPF calculation.
|
||||
|
||||
This command supercedes the @command{timers spf} command in previous Quagga
|
||||
This command supercedes the @command{timers spf} command in previous Frr
|
||||
releases.
|
||||
@end deffn
|
||||
|
||||
@ -259,7 +259,7 @@ Summarize intra area paths from specified area into one Type-3 summary-LSA
|
||||
announced to other areas. This command can be used only in ABR and ONLY
|
||||
router-LSAs (Type-1) and network-LSAs (Type-2) (ie. LSAs with scope area) can
|
||||
be summarized. Type-5 AS-external-LSAs can't be summarized - their scope is AS.
|
||||
Summarizing Type-7 AS-external-LSAs isn't supported yet by Quagga.
|
||||
Summarizing Type-7 AS-external-LSAs isn't supported yet by Frr.
|
||||
|
||||
@example
|
||||
@group
|
||||
@ -784,7 +784,7 @@ of networks between the areas:
|
||||
@group
|
||||
!
|
||||
password ABCDEF
|
||||
log file /var/log/quagga/ospfd.log
|
||||
log file /var/log/frr/ospfd.log
|
||||
service advanced-vty
|
||||
!
|
||||
interface eth0
|
||||
|
@ -2,73 +2,73 @@
|
||||
@chapter Overview
|
||||
@cindex Overview
|
||||
|
||||
@uref{http://www.quagga.net,,Quagga} is a routing software package that
|
||||
@uref{http://www.freerangerouting.net,,Frr} is a routing software package that
|
||||
provides TCP/IP based routing services with routing protocols support such
|
||||
as RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, IS-IS, BGP-4, and BGP-4+ (@pxref{Supported
|
||||
RFCs}). Quagga also supports special BGP Route Reflector and Route Server
|
||||
behavior. In addition to traditional IPv4 routing protocols, Quagga also
|
||||
RFCs}). Frr also supports special BGP Route Reflector and Route Server
|
||||
behavior. In addition to traditional IPv4 routing protocols, Frr also
|
||||
supports IPv6 routing protocols. With SNMP daemon which supports SMUX and AgentX
|
||||
protocol, Quagga provides routing protocol MIBs (@pxref{SNMP Support}).
|
||||
protocol, Frr provides routing protocol MIBs (@pxref{SNMP Support}).
|
||||
|
||||
Quagga uses an advanced software architecture to provide you with a high
|
||||
quality, multi server routing engine. Quagga has an interactive user
|
||||
Frr uses an advanced software architecture to provide you with a high
|
||||
quality, multi server routing engine. Frr has an interactive user
|
||||
interface for each routing protocol and supports common client commands.
|
||||
Due to this design, you can add new protocol daemons to Quagga easily. You
|
||||
can use Quagga library as your program's client user interface.
|
||||
Due to this design, you can add new protocol daemons to Frr easily. You
|
||||
can use Frr library as your program's client user interface.
|
||||
|
||||
Quagga is distributed under the @sc{gnu} General Public License.
|
||||
Frr is distributed under the @sc{gnu} General Public License.
|
||||
|
||||
@menu
|
||||
* About Quagga:: Basic information about Quagga
|
||||
* System Architecture:: The Quagga system architecture
|
||||
* About Frr:: Basic information about Frr
|
||||
* System Architecture:: The Frr system architecture
|
||||
* Supported Platforms:: Supported platforms and future plans
|
||||
* Supported RFCs:: Supported RFCs
|
||||
* How to get Quagga::
|
||||
* How to get Frr::
|
||||
* Mailing List:: Mailing list information
|
||||
* Bug Reports:: Mail address for bug data
|
||||
@end menu
|
||||
|
||||
@node About Quagga
|
||||
@node About Frr
|
||||
@comment node-name, next, previous, up
|
||||
@section About Quagga
|
||||
@cindex About Quagga
|
||||
@section About Frr
|
||||
@cindex About Frr
|
||||
|
||||
Today, TCP/IP networks are covering all of the world. The Internet has
|
||||
been deployed in many countries, companies, and to the home. When you
|
||||
connect to the Internet your packet will pass many routers which have TCP/IP
|
||||
routing functionality.
|
||||
|
||||
A system with Quagga installed acts as a dedicated router. With Quagga,
|
||||
A system with Frr installed acts as a dedicated router. With Frr,
|
||||
your machine exchanges routing information with other routers using routing
|
||||
protocols. Quagga uses this information to update the kernel routing table
|
||||
protocols. Frr uses this information to update the kernel routing table
|
||||
so that the right data goes to the right place. You can dynamically change
|
||||
the configuration and you may view routing table information from the Quagga
|
||||
the configuration and you may view routing table information from the Frr
|
||||
terminal interface.
|
||||
|
||||
Adding to routing protocol support, Quagga can setup interface's flags,
|
||||
Adding to routing protocol support, Frr can setup interface's flags,
|
||||
interface's address, static routes and so on. If you have a small network,
|
||||
or a stub network, or xDSL connection, configuring the Quagga routing
|
||||
or a stub network, or xDSL connection, configuring the Frr routing
|
||||
software is very easy. The only thing you have to do is to set up the
|
||||
interfaces and put a few commands about static routes and/or default routes.
|
||||
If the network is rather large, or if the network structure changes
|
||||
frequently, you will want to take advantage of Quagga's dynamic routing
|
||||
frequently, you will want to take advantage of Frr's dynamic routing
|
||||
protocol support for protocols such as RIP, OSPF, IS-IS or BGP.
|
||||
|
||||
Traditionally, UNIX based router configuration is done by
|
||||
@command{ifconfig} and @command{route} commands. Status of routing
|
||||
table is displayed by @command{netstat} utility. Almost of these commands
|
||||
work only if the user has root privileges. Quagga has a different system
|
||||
administration method. There are two user modes in Quagga. One is normal
|
||||
work only if the user has root privileges. Frr has a different system
|
||||
administration method. There are two user modes in Frr. One is normal
|
||||
mode, the other is enable mode. Normal mode user can only view system
|
||||
status, enable mode user can change system configuration. This UNIX account
|
||||
independent feature will be great help to the router administrator.
|
||||
|
||||
Currently, Quagga supports common unicast routing protocols, that is BGP,
|
||||
Currently, Frr supports common unicast routing protocols, that is BGP,
|
||||
OSPF, RIP and IS-IS. Upcoming for MPLS support, an implementation of LDP is
|
||||
currently being prepared for merging. Implementations of BFD and PIM-SSM
|
||||
(IPv4) also exist, but are not actively being worked on.
|
||||
|
||||
The ultimate goal of the Quagga project is making a productive, quality, free
|
||||
The ultimate goal of the Frr project is making a productive, quality, free
|
||||
TCP/IP routing software package.
|
||||
|
||||
@node System Architecture
|
||||
@ -79,7 +79,7 @@ TCP/IP routing software package.
|
||||
@cindex Software internals
|
||||
|
||||
Traditional routing software is made as a one process program which
|
||||
provides all of the routing protocol functionalities. Quagga takes a
|
||||
provides all of the routing protocol functionalities. Frr takes a
|
||||
different approach. It is made from a collection of several daemons that
|
||||
work together to build the routing table. There may be several
|
||||
protocol-specific routing daemons and zebra the kernel routing manager.
|
||||
@ -110,7 +110,7 @@ architecture creates new possibilities for the routing system.
|
||||
| |
|
||||
+------------------------------+
|
||||
|
||||
Quagga System Architecture
|
||||
Frr System Architecture
|
||||
@end group
|
||||
@end example
|
||||
|
||||
@ -120,11 +120,11 @@ and terminal interfaces. Each daemon has it's own configuration file and
|
||||
terminal interface. When you configure a static route, it must be done in
|
||||
@command{zebra} configuration file. When you configure BGP network it must
|
||||
be done in @command{bgpd} configuration file. This can be a very annoying
|
||||
thing. To resolve the problem, Quagga provides integrated user interface
|
||||
thing. To resolve the problem, Frr provides integrated user interface
|
||||
shell called @command{vtysh}. @command{vtysh} connects to each daemon with
|
||||
UNIX domain socket and then works as a proxy for user input.
|
||||
|
||||
Quagga was planned to use multi-threaded mechanism when it runs with a
|
||||
Frr was planned to use multi-threaded mechanism when it runs with a
|
||||
kernel that supports multi-threads. But at the moment, the thread library
|
||||
which comes with @sc{gnu}/Linux or FreeBSD has some problems with running
|
||||
reliable services such as routing software, so we don't use threads at all.
|
||||
@ -136,18 +136,18 @@ events.
|
||||
@section Supported Platforms
|
||||
|
||||
@cindex Supported platforms
|
||||
@cindex Quagga on other systems
|
||||
@cindex Frr on other systems
|
||||
@cindex Compatibility with other systems
|
||||
@cindex Operating systems that support Quagga
|
||||
@cindex Operating systems that support Frr
|
||||
|
||||
Currently Quagga supports @sc{gnu}/Linux and BSD. Porting Quagga
|
||||
Currently Frr supports @sc{gnu}/Linux and BSD. Porting Frr
|
||||
to other platforms is not too difficult as platform dependent code should
|
||||
most be limited to the @command{zebra} daemon. Protocol daemons are mostly
|
||||
platform independent. Please let us know when you find out Quagga runs on a
|
||||
platform independent. Please let us know when you find out Frr runs on a
|
||||
platform which is not listed below.
|
||||
|
||||
The list of officially supported platforms are listed below. Note that
|
||||
Quagga may run correctly on other platforms, and may run with partial
|
||||
Frr may run correctly on other platforms, and may run with partial
|
||||
functionality on further platforms.
|
||||
|
||||
@sp 1
|
||||
@ -176,7 +176,7 @@ Mac OSX
|
||||
@end itemize
|
||||
|
||||
Also note that, in particular regarding proprietary platforms, compiler
|
||||
and C library choice will affect Quagga. Only recent versions of the
|
||||
and C library choice will affect Frr. Only recent versions of the
|
||||
following C compilers are well-tested:
|
||||
|
||||
@sp 1
|
||||
@ -269,39 +269,39 @@ November 1995.}
|
||||
|
||||
@end table
|
||||
|
||||
@node How to get Quagga
|
||||
@node How to get Frr
|
||||
@comment node-name, next, previous, up
|
||||
@section How to get Quagga
|
||||
@section How to get Frr
|
||||
|
||||
The official Quagga web-site is located at:
|
||||
The official Frr web-site is located at:
|
||||
|
||||
@uref{http://www.quagga.net/}
|
||||
@uref{http://www.freerangerouting.net/}
|
||||
|
||||
and contains further information, as well as links to additional
|
||||
resources.
|
||||
|
||||
@uref{http://www.quagga.net/,Quagga} is a fork of GNU Zebra, whose
|
||||
@uref{http://www.freerangerouting.net/,Frr} is a fork of Quagga, whose
|
||||
web-site is located at:
|
||||
|
||||
@uref{http://www.zebra.org/}.
|
||||
@uref{http://www.quagga.net/}.
|
||||
|
||||
@node Mailing List
|
||||
@comment node-name, next, previous, up
|
||||
@section Mailing List
|
||||
@cindex How to get in touch with Quagga
|
||||
@cindex Mailing Quagga
|
||||
@cindex How to get in touch with Frr
|
||||
@cindex Mailing Frr
|
||||
@cindex Contact information
|
||||
@cindex Mailing lists
|
||||
|
||||
There is a mailing list for discussions about Quagga. If you have any
|
||||
comments or suggestions to Quagga, please subscribe to:
|
||||
There is a mailing list for discussions about Frr. If you have any
|
||||
comments or suggestions to Frr, please subscribe to:
|
||||
|
||||
@uref{http://lists.quagga.net/mailman/listinfo/quagga-users}.
|
||||
@uref{http://lists.nox.tf/listinfo/frr-users}.
|
||||
|
||||
The @uref{http://www.quagga.net/,,Quagga} site has further information on
|
||||
The @uref{http://www.freerangerouting.net/,,Frr} site has further information on
|
||||
the available mailing lists, see:
|
||||
|
||||
@uref{http://www.quagga.net/lists.php}
|
||||
@uref{http://lists.nox.tf/lists.php}
|
||||
|
||||
@node Bug Reports
|
||||
@section Bug Reports
|
||||
@ -315,7 +315,7 @@ the available mailing lists, see:
|
||||
|
||||
If you think you have found a bug, please send a bug report to:
|
||||
|
||||
@uref{http://bugzilla.quagga.net}
|
||||
@uref{http://github.com/freerangerouting/frr/issues}
|
||||
|
||||
When you send a bug report, please be careful about the points below.
|
||||
|
||||
@ -332,6 +332,6 @@ Please send your configuration file with the report. If you specify
|
||||
arguments to the configure script please note that too.
|
||||
@end itemize
|
||||
|
||||
Bug reports are very important for us to improve the quality of Quagga.
|
||||
Quagga is still in the development stage, but please don't hesitate to
|
||||
send a bug report to @uref{http://bugzilla.quagga.net}.
|
||||
Bug reports are very important for us to improve the quality of Frr.
|
||||
Frr is still in the development stage, but please don't hesitate to
|
||||
send a bug report to @uref{http://github.com/freerangerouting/frr/issues}.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.TH PIM 8 "10 December 2008" "Quagga PIM daemon" "Version 0.99.11"
|
||||
.TH PIM 8 "10 December 2008" "@PACKAGE_FULLNAME@ PIM daemon" "Version @PACKAGE_VERSION@"
|
||||
.SH NAME
|
||||
pimd \- a PIM routing for use with Quagga Routing Suite.
|
||||
pimd \- a PIM routing for use with @PACKAGE_FULLNAME@.
|
||||
.SH SYNOPSIS
|
||||
.B pimd
|
||||
[
|
||||
@ -30,7 +30,7 @@ pimd \- a PIM routing for use with Quagga Routing Suite.
|
||||
.SH DESCRIPTION
|
||||
.B pimd
|
||||
is a protocol-independent multicast component that works with the
|
||||
.B Quagga
|
||||
.B @PACKAGE_FULLNAME@
|
||||
Routing Suite.
|
||||
.SH OPTIONS
|
||||
Options available for the
|
||||
@ -42,10 +42,10 @@ Runs in daemon mode, forking and exiting from tty.
|
||||
.TP
|
||||
\fB\-f\fR, \fB\-\-config-file \fR\fIconfig-file\fR
|
||||
Specifies the config file to use for startup. If not specified this
|
||||
option will likely default to \fB\fI/usr/local/etc/pimd.conf\fR.
|
||||
option will default to \fB\fI@CFG_SYSCONF@/pimd.conf\fR.
|
||||
.TP
|
||||
\fB\-g\fR, \fB\-\-group \fR\fIgroup\fR
|
||||
Specify the group to run as. Default is \fIquagga\fR.
|
||||
Specify the group to run as. Default is \fI@enable_group@\fR.
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
A brief message.
|
||||
@ -53,11 +53,11 @@ A brief message.
|
||||
\fB\-i\fR, \fB\-\-pid_file \fR\fIpid-file\fR
|
||||
When pimd starts its process identifier is written to
|
||||
\fB\fIpid-file\fR. The init system uses the recorded PID to stop or
|
||||
restart pimd. The likely default is \fB\fI/var/run/pimd.pid\fR.
|
||||
restart pimd. The default is \fB\fI@CFG_STATE@/pimd.pid\fR.
|
||||
.TP
|
||||
\fB\-z\fR, \fB\-\-socket \fR\fIpath\fR
|
||||
Specify the socket path for contacting the zebra daemon.
|
||||
The likely default is \fB\fI/var/run/zserv.api\fR.
|
||||
The default is \fB\fI@CFG_STATE@/zserv.api\fR.
|
||||
.TP
|
||||
\fB\-P\fR, \fB\-\-vty_port \fR\fIport-number\fR
|
||||
Specify the port that the pimd VTY will listen on. This defaults to
|
||||
@ -68,7 +68,7 @@ Specify the address that the pimd VTY will listen on. Default is all
|
||||
interfaces.
|
||||
.TP
|
||||
\fB\-u\fR, \fB\-\-user \fR\fIuser\fR
|
||||
Specify the user to run as. Default is \fIquagga\fR.
|
||||
Specify the user to run as. Default is \fI@enable_user@\fR.
|
||||
.TP
|
||||
\fB\-v\fR, \fB\-\-version\fR
|
||||
Print the version and exit.
|
||||
@ -77,22 +77,22 @@ Print the version and exit.
|
||||
Enable logging information for zclient debugging.
|
||||
.SH FILES
|
||||
.TP
|
||||
.BI /usr/local/sbin/pimd
|
||||
.BI @CFG_SBIN@/pimd
|
||||
The default location of the
|
||||
.B pimd
|
||||
binary.
|
||||
.TP
|
||||
.BI /usr/local/etc/pimd.conf
|
||||
.BI @CFG_SYSCONF@/pimd.conf
|
||||
The default location of the
|
||||
.B pimd
|
||||
config file.
|
||||
.TP
|
||||
.BI /var/run/pimd.pid
|
||||
.BI @CFG_STATE@/pimd.pid
|
||||
The default location of the
|
||||
.B pimd
|
||||
pid file.
|
||||
.TP
|
||||
.BI /var/run/zserv.api
|
||||
.BI @CFG_STATE@/zserv.api
|
||||
The default location of the
|
||||
.B zebra
|
||||
unix socket file.
|
@ -25,8 +25,11 @@ enough to allow for future extensions to done compatibly through
|
||||
seperate commands.
|
||||
|
||||
Version 0 is used by all versions of GNU Zebra as of this writing, and
|
||||
versions of Quagga up to and including Quagga 0.98. Version 1 will be
|
||||
used as of Quagga 1.0.
|
||||
versions of Quagga up to and including Quagga 0.98. Version 2 was created
|
||||
for 0.99.21 of Quagga. Version 3 designates VRF compatibility and was
|
||||
released in 1.0. Version 4 will be used as of Frr 2.0 to indicate that
|
||||
we are a different Routing Suite now and to hopefully prevent accidental
|
||||
Quagga <-> FRR issues.
|
||||
|
||||
@appendixsection Zebra Protocol Definition
|
||||
@appendixsubsec Zebra Protocol Header (version 0)
|
||||
|
@ -1,6 +1,6 @@
|
||||
.TH RIPD 8 "25 November 2004" "Quagga RIP daemon" "Version 0.97.3"
|
||||
.TH RIPD 8 "25 November 2004" "@PACKAGE_FULLNAME@ RIP daemon" "Version @PACKAGE_VERSION@"
|
||||
.SH NAME
|
||||
ripd \- a RIP routing engine for use with Quagga routing software.
|
||||
ripd \- a RIP routing engine for use with @PACKAGE_FULLNAME@.
|
||||
.SH SYNOPSIS
|
||||
.B ripd
|
||||
[
|
||||
@ -27,7 +27,7 @@ ripd \- a RIP routing engine for use with Quagga routing software.
|
||||
.SH DESCRIPTION
|
||||
.B ripd
|
||||
is a routing component that works with the
|
||||
.B Quagga
|
||||
.B @PACKAGE_FULLNAME@
|
||||
routing engine.
|
||||
.SH OPTIONS
|
||||
Options available for the
|
||||
@ -40,10 +40,10 @@ Runs in daemon mode, forking and exiting from tty.
|
||||
.TP
|
||||
\fB\-f\fR, \fB\-\-config-file \fR\fIconfig-file\fR
|
||||
Specifies the config file to use for startup. If not specified this
|
||||
option will likely default to \fB\fI/usr/local/etc/ripd.conf\fR.
|
||||
option will default to \fB\fI@CFG_SYSCONF@/ripd.conf\fR.
|
||||
.TP
|
||||
\fB\-g\fR, \fB\-\-group \fR\fIgroup\fR
|
||||
Specify the group to run as. Default is \fIquagga\fR.
|
||||
Specify the group to run as. Default is \fI@enable_group@\fR.
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
A brief message.
|
||||
@ -51,7 +51,7 @@ A brief message.
|
||||
\fB\-i\fR, \fB\-\-pid_file \fR\fIpid-file\fR
|
||||
When ripd starts its process identifier is written to
|
||||
\fB\fIpid-file\fR. The init system uses the recorded PID to stop or
|
||||
restart ripd. The likely default is \fB\fI/var/run/ripd.pid\fR.
|
||||
restart ripd. The default is \fB\fI@CFG_STATE@/ripd.pid\fR.
|
||||
.TP
|
||||
\fB\-P\fR, \fB\-\-vty_port \fR\fIport-number\fR
|
||||
Specify the port that the ripd VTY will listen on. This defaults to
|
||||
@ -62,7 +62,7 @@ Specify the address that the ripd VTY will listen on. Default is all
|
||||
interfaces.
|
||||
.TP
|
||||
\fB\-u\fR, \fB\-\-user \fR\fIuser\fR
|
||||
Specify the user to run as. Default is \fIquagga\fR.
|
||||
Specify the user to run as. Default is \fI@enable_user@\fR.
|
||||
.TP
|
||||
\fB\-r\fR, \fB\-\-retain\fR
|
||||
When the program terminates, retain routes added by \fBripd\fR.
|
||||
@ -71,12 +71,12 @@ When the program terminates, retain routes added by \fBripd\fR.
|
||||
Print the version and exit.
|
||||
.SH FILES
|
||||
.TP
|
||||
.BI /usr/lib/quagga/ripd
|
||||
.BI @CFG_SBIN@/ripd
|
||||
The default location of the
|
||||
.B ripd
|
||||
binary.
|
||||
.TP
|
||||
.BI /etc/quagga/ripd.conf
|
||||
.BI @CFG_SYSCONF@/ripd.conf
|
||||
The default location of the
|
||||
.B ripd
|
||||
config file.
|
||||
@ -88,7 +88,7 @@ process is config'd to output logs to a file, then you will find this
|
||||
file in the directory where you started \fBripd\fR.
|
||||
.SH WARNING
|
||||
This man page is intended to be a quick reference for command line
|
||||
options. The definitive document is the Info file \fBQuagga\fR.
|
||||
options. The definitive document is the Info file \fB@PACKAGE_NAME@\fR.
|
||||
.SH DIAGNOSTICS
|
||||
The ripd process may log to standard output, to a VTY, to a log
|
||||
file, or through syslog to the system logs. \fBripd\fR supports many
|
||||
@ -104,10 +104,10 @@ debugging options, see the Info file, or the source for details.
|
||||
.SH BUGS
|
||||
.B ripd
|
||||
eats bugs for breakfast. If you have food for the maintainers try
|
||||
.BI http://bugzilla.quagga.net
|
||||
.BI @PACKAGE_BUGREPORT@
|
||||
.SH AUTHORS
|
||||
See
|
||||
.BI http://www.zebra.org
|
||||
and
|
||||
.BI http://www.quagga.net
|
||||
.BI @PACKAGE_URL@
|
||||
or the Info file for an accurate list of authors.
|
@ -1,7 +1,7 @@
|
||||
@c -*-texinfo-*-
|
||||
@c This is part of the Quagga Manual.
|
||||
@c This is part of the Frr Manual.
|
||||
@c @value{COPYRIGHT_STR}
|
||||
@c See file quagga.texi for copying conditions.
|
||||
@c See file frr.texi for copying conditions.
|
||||
@node RIP
|
||||
@chapter RIP
|
||||
|
||||
@ -97,7 +97,7 @@ to the packet on the basis of the interface that received the packet.
|
||||
Version 2 of RIP supports a variable length subnet mask (VLSM). By
|
||||
extending the subnet mask, the mask can be divided and reused. Each
|
||||
subnet can be used for different purposes such as large to middle size
|
||||
LANs and WAN links. Quagga @command{ripd} does not support the non-sequential
|
||||
LANs and WAN links. Frr @command{ripd} does not support the non-sequential
|
||||
netmasks that are included in RIP Version 2.
|
||||
|
||||
In a case of similar information with the same prefix and metric, the
|
||||
@ -294,10 +294,10 @@ If you want to specify RIP only static routes:
|
||||
|
||||
@deffn {RIP command} {route @var{a.b.c.d/m}} {}
|
||||
@deffnx {RIP command} {no route @var{a.b.c.d/m}} {}
|
||||
This command is specific to Quagga. The @code{route} command makes a static
|
||||
This command is specific to Frr. The @code{route} command makes a static
|
||||
route only inside RIP. This command should be used only by advanced
|
||||
users who are particularly knowledgeable about the RIP protocol. In
|
||||
most cases, we recommend creating a static route in Quagga and
|
||||
most cases, we recommend creating a static route in Frr and
|
||||
redistributing it in RIP using @code{redistribute static}.
|
||||
@end deffn
|
||||
|
||||
@ -399,7 +399,7 @@ redistribute connected [route-map MAP_NAME]
|
||||
@end example
|
||||
|
||||
Cisco applies route-map _before_ routes will exported to rip route table.
|
||||
In current Quagga's test implementation, @command{ripd} applies route-map
|
||||
In current Frr's test implementation, @command{ripd} applies route-map
|
||||
after routes are listed in the route table and before routes will be
|
||||
announced to an interface (something like output filter). I think it is not
|
||||
so clear, but it is draft and it may be changed at future.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.TH RIPNGD 8 "25 November 2004" "Quagga RIPNG daemon" "Version 0.97.3"
|
||||
.TH RIPNGD 8 "25 November 2004" "@PACKAGE_FULLNAME@ RIPNG daemon" "Version @PACKAGE_VERSION@"
|
||||
.SH NAME
|
||||
ripngd \- a RIPNG routing engine for use with Quagga routing software.
|
||||
ripngd \- a RIPNG routing engine for use with @PACKAGE_FULLNAME@.
|
||||
.SH SYNOPSIS
|
||||
.B ripngd
|
||||
[
|
||||
@ -27,7 +27,7 @@ ripngd \- a RIPNG routing engine for use with Quagga routing software.
|
||||
.SH DESCRIPTION
|
||||
.B ripngd
|
||||
is a routing component that works with the
|
||||
.B Quagga
|
||||
.B @PACKAGE_FULLNAME@
|
||||
routing engine.
|
||||
.SH OPTIONS
|
||||
Options available for the
|
||||
@ -40,10 +40,10 @@ Runs in daemon mode, forking and exiting from tty.
|
||||
.TP
|
||||
\fB\-f\fR, \fB\-\-config-file \fR\fIconfig-file\fR
|
||||
Specifies the config file to use for startup. If not specified this
|
||||
option will likely default to \fB\fI/usr/local/etc/ripngd.conf\fR.
|
||||
option will default to \fB\fI@CFG_SYSCONF@/ripngd.conf\fR.
|
||||
.TP
|
||||
\fB\-g\fR, \fB\-\-group \fR\fIgroup\fR
|
||||
Specify the group to run as. Default is \fIquagga\fR.
|
||||
Specify the group to run as. Default is \fI@enable_group@\fR.
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
A brief message.
|
||||
@ -51,7 +51,7 @@ A brief message.
|
||||
\fB\-i\fR, \fB\-\-pid_file \fR\fIpid-file\fR
|
||||
When ripngd starts its process identifier is written to
|
||||
\fB\fIpid-file\fR. The init system uses the recorded PID to stop or
|
||||
restart ripngd. The likely default is \fB\fI/var/run/ripngd.pid\fR.
|
||||
restart ripngd. The default is \fB\fI@CFG_STATE@/ripngd.pid\fR.
|
||||
.TP
|
||||
\fB\-P\fR, \fB\-\-vty_port \fR\fIport-number\fR
|
||||
Specify the port that the ripngd VTY will listen on. This defaults to
|
||||
@ -62,7 +62,7 @@ Specify the address that the ripngd VTY will listen on. Default is all
|
||||
interfaces.
|
||||
.TP
|
||||
\fB\-u\fR, \fB\-\-user \fR\fIuser\fR
|
||||
Specify the user to run as. Default is \fIquagga\fR.
|
||||
Specify the user to run as. Default is \fI@enable_user@\fR.
|
||||
.TP
|
||||
\fB\-r\fR, \fB\-\-retain\fR
|
||||
When the program terminates, retain routes added by \fBripd\fR.
|
||||
@ -71,12 +71,12 @@ When the program terminates, retain routes added by \fBripd\fR.
|
||||
Print the version and exit.
|
||||
.SH FILES
|
||||
.TP
|
||||
.BI /usr/lib/quagga/ripngd
|
||||
.BI @CFG_SBIN@/ripngd
|
||||
The default location of the
|
||||
.B ripngd
|
||||
binary.
|
||||
.TP
|
||||
.BI /etc/quagga/ripngd.conf
|
||||
.BI @CFG_SYSCONF@/ripngd.conf
|
||||
The default location of the
|
||||
.B ripngd
|
||||
config file.
|
||||
@ -88,7 +88,7 @@ process is config'd to output logs to a file, then you will find this
|
||||
file in the directory where you started \fBripngd\fR.
|
||||
.SH WARNING
|
||||
This man page is intended to be a quick reference for command line
|
||||
options. The definitive document is the Info file \fBQuagga\fR.
|
||||
options. The definitive document is the Info file \fB@PACKAGE_NAME@\fR.
|
||||
.SH DIAGNOSTICS
|
||||
The ripngd process may log to standard output, to a VTY, to a log
|
||||
file, or through syslog to the system logs. \fBripngd\fR supports many
|
||||
@ -104,11 +104,11 @@ debugging options, see the Info file, or the source for details.
|
||||
.SH BUGS
|
||||
.B ripngd
|
||||
eats bugs for breakfast. If you have food for the maintainers try
|
||||
.BI http://bugzilla.quagga.net
|
||||
.BI @PACKAGE_BUGREPORT@
|
||||
.SH AUTHORS
|
||||
See
|
||||
.BI http://www.zebra.org
|
||||
and
|
||||
.BI http://www.quagga.net
|
||||
.BI @PACKAGE_URL@
|
||||
or the Info file for an accurate list of authors.
|
||||
|
@ -1,7 +1,7 @@
|
||||
@c -*-texinfo-*-
|
||||
@c This is part of the Quagga Manual.
|
||||
@c This is part of the Frr Manual.
|
||||
@c @value{COPYRIGHT_STR}
|
||||
@c See file quagga.texi for copying conditions.
|
||||
@c See file frr.texi for copying conditions.
|
||||
@node RIPng
|
||||
@chapter RIPng
|
||||
|
||||
|
@ -1,12 +1,12 @@
|
||||
@c -*-texinfo-*-
|
||||
@c @value{COPYRIGHT_STR}
|
||||
@c See file quagga.texi for copying conditions.
|
||||
@c See file frr.texi for copying conditions.
|
||||
@c
|
||||
@c This file is a modified version of Jose Luis Rubio's TeX sources
|
||||
@c of his RS-Manual document
|
||||
|
||||
@node Configuring Quagga as a Route Server
|
||||
@chapter Configuring Quagga as a Route Server
|
||||
@node Configuring Frr as a Route Server
|
||||
@chapter Configuring Frr as a Route Server
|
||||
|
||||
The purpose of a Route Server is to centralize the peerings between BGP
|
||||
speakers. For example if we have an exchange point scenario with four BGP
|
||||
@ -15,9 +15,9 @@ speakers, each of which maintaining a BGP peering with the other three
|
||||
each of the four establishes a single BGP peering against the Route Server
|
||||
(@pxref{fig:route-server}).
|
||||
|
||||
We will first describe briefly the Route Server model implemented by Quagga.
|
||||
We will first describe briefly the Route Server model implemented by Frr.
|
||||
We will explain the commands that have been added for configuring that
|
||||
model. And finally we will show a full example of Quagga configured as Route
|
||||
model. And finally we will show a full example of Frr configured as Route
|
||||
Server.
|
||||
|
||||
@menu
|
||||
@ -148,7 +148,7 @@ It is also common to demand from a route server that it does not
|
||||
modify some BGP attributes (next-hop, as-path and MED) that are usually
|
||||
modified by standard BGP speakers before announcing a route.
|
||||
|
||||
The announcement processing model implemented by Quagga is shown in
|
||||
The announcement processing model implemented by Frr is shown in
|
||||
@ref{fig:rs-processing}. The figure shows a mixture of RS-clients (B, C and D)
|
||||
with normal BGP peers (A). There are some details that worth additional
|
||||
comments:
|
||||
@ -180,7 +180,7 @@ they do not hurt anybody (they can always be left empty).
|
||||
@node Commands for configuring a Route Server
|
||||
@section Commands for configuring a Route Server
|
||||
|
||||
Now we will describe the commands that have been added to quagga
|
||||
Now we will describe the commands that have been added to frr
|
||||
in order to support the route server features.
|
||||
|
||||
@deffn {Route-Server} {neighbor @var{peer-group} route-server-client} {}
|
||||
@ -189,7 +189,7 @@ in order to support the route server features.
|
||||
This command configures the peer given by @var{peer}, @var{A.B.C.D} or
|
||||
@var{X:X::X:X} as an RS-client.
|
||||
|
||||
Actually this command is not new, it already existed in standard Quagga. It
|
||||
Actually this command is not new, it already existed in standard Frr. It
|
||||
enables the transparent mode for the specified peer. This means that some
|
||||
BGP attributes (as-path, next-hop and MED) of the routes announced to that
|
||||
peer are not modified.
|
||||
@ -235,7 +235,7 @@ any normal (in or out) route-map.
|
||||
@node Example of Route Server Configuration
|
||||
@section Example of Route Server Configuration
|
||||
|
||||
Finally we are going to show how to configure a Quagga daemon to act as a
|
||||
Finally we are going to show how to configure a Frr daemon to act as a
|
||||
Route Server. For this purpose we are going to present a scenario without
|
||||
route server, and then we will show how to use the configurations of the BGP
|
||||
routers to generate the configuration of the route server.
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
@acronym{SNMP,Simple Network Managing Protocol} is a widely implemented
|
||||
feature for collecting network information from router and/or host.
|
||||
Quagga itself does not support SNMP agent (server daemon) functionality
|
||||
Frr itself does not support SNMP agent (server daemon) functionality
|
||||
but is able to connect to a SNMP agent using the SMUX protocol
|
||||
(@cite{RFC1227}) or the AgentX protocol (@cite{RFC2741}) and make the
|
||||
routing protocol MIBs available through it.
|
||||
@ -24,7 +24,7 @@ version of @code{net-snmp} which was formerly known as @code{ucd-snmp}.
|
||||
It is free and open software and available at @uref{http://www.net-snmp.org/}
|
||||
and as binary package for most Linux distributions.
|
||||
@code{net-snmp} has to be compiled with @code{--with-mib-modules=agentx} to
|
||||
be able to accept connections from Quagga using AgentX protocol or with
|
||||
be able to accept connections from Frr using AgentX protocol or with
|
||||
@code{--with-mib-modules=smux} to use SMUX protocol.
|
||||
|
||||
Nowadays, SMUX is a legacy protocol. The AgentX protocol should be
|
||||
@ -33,11 +33,11 @@ preferred for any new deployment. Both protocols have the same coverage.
|
||||
@node AgentX configuration
|
||||
@section AgentX configuration
|
||||
|
||||
To enable AgentX protocol support, Quagga must have been build with the
|
||||
To enable AgentX protocol support, Frr must have been build with the
|
||||
@code{--enable-snmp} or @code{--enable-snmp=agentx} option. Both the
|
||||
master SNMP agent (snmpd) and each of the Quagga daemons must be
|
||||
master SNMP agent (snmpd) and each of the Frr daemons must be
|
||||
configured. In @code{/etc/snmp/snmpd.conf}, @code{master agentx}
|
||||
directive should be added. In each of the Quagga daemons, @code{agentx}
|
||||
directive should be added. In each of the Frr daemons, @code{agentx}
|
||||
command will enable AgentX support.
|
||||
|
||||
@example
|
||||
@ -54,7 +54,7 @@ command will enable AgentX support.
|
||||
#
|
||||
master agentx
|
||||
|
||||
/etc/quagga/ospfd.conf:
|
||||
/etc/frr/ospfd.conf:
|
||||
! ... the rest of ospfd.conf has been omitted for clarity ...
|
||||
!
|
||||
agentx
|
||||
@ -62,7 +62,7 @@ command will enable AgentX support.
|
||||
@end example
|
||||
|
||||
Upon successful connection, you should get something like this in the
|
||||
log of each Quagga daemons:
|
||||
log of each Frr daemons:
|
||||
|
||||
@example
|
||||
2012/05/25 11:39:08 ZEBRA: snmp[info]: NET-SNMP version 5.4.3 AgentX subagent connected
|
||||
@ -78,11 +78,11 @@ OSPF-MIB::ospfRouterId.0 = IpAddress: 192.168.42.109
|
||||
|
||||
The AgentX protocol can be transported over a Unix socket or using TCP
|
||||
or UDP. It usually defaults to a Unix socket and depends on how NetSNMP
|
||||
was built. If need to configure Quagga to use another transport, you can
|
||||
configure it through @code{/etc/snmp/quagga.conf}:
|
||||
was built. If need to configure Frr to use another transport, you can
|
||||
configure it through @code{/etc/snmp/frr.conf}:
|
||||
|
||||
@example
|
||||
/etc/snmp/quagga.conf:
|
||||
/etc/snmp/frr.conf:
|
||||
[snmpd]
|
||||
# Use a remote master agent
|
||||
agentXSocket tcp:192.168.15.12:705
|
||||
@ -91,17 +91,17 @@ configure it through @code{/etc/snmp/quagga.conf}:
|
||||
@node SMUX configuration
|
||||
@section SMUX configuration
|
||||
|
||||
To enable SMUX protocol support, Quagga must have been build with the
|
||||
To enable SMUX protocol support, Frr must have been build with the
|
||||
@code{--enable-snmp=smux} option.
|
||||
|
||||
A separate connection has then to be established between the
|
||||
SNMP agent (snmpd) and each of the Quagga daemons. This connections
|
||||
SNMP agent (snmpd) and each of the Frr daemons. This connections
|
||||
each use different OID numbers and passwords. Be aware that this OID
|
||||
number is not the one that is used in queries by clients, it is solely
|
||||
used for the intercommunication of the daemons.
|
||||
|
||||
In the following example the ospfd daemon will be connected to the
|
||||
snmpd daemon using the password "quagga_ospfd". For testing it is
|
||||
snmpd daemon using the password "frr_ospfd". For testing it is
|
||||
recommending to take exactly the below snmpd.conf as wrong access
|
||||
restrictions can be hard to debug.
|
||||
|
||||
@ -115,24 +115,24 @@ restrictions can be hard to debug.
|
||||
view all included .1 80
|
||||
access MyROGroup "" any noauth exact all none none
|
||||
#
|
||||
# the following line is relevant for Quagga
|
||||
# the following line is relevant for Frr
|
||||
#
|
||||
smuxpeer .1.3.6.1.4.1.3317.1.2.5 quagga_ospfd
|
||||
smuxpeer .1.3.6.1.4.1.3317.1.2.5 frr_ospfd
|
||||
|
||||
/etc/quagga/ospf:
|
||||
/etc/frr/ospf:
|
||||
! ... the rest of ospfd.conf has been omitted for clarity ...
|
||||
!
|
||||
smux peer .1.3.6.1.4.1.3317.1.2.5 quagga_ospfd
|
||||
smux peer .1.3.6.1.4.1.3317.1.2.5 frr_ospfd
|
||||
!
|
||||
@end example
|
||||
|
||||
After restarting snmpd and quagga, a successful connection can be verified in
|
||||
After restarting snmpd and frr, a successful connection can be verified in
|
||||
the syslog and by querying the SNMP daemon:
|
||||
|
||||
@example
|
||||
snmpd[12300]: [smux_accept] accepted fd 12 from 127.0.0.1:36255
|
||||
snmpd[12300]: accepted smux peer: \
|
||||
oid GNOME-PRODUCT-ZEBRA-MIB::ospfd, quagga-0.96.5
|
||||
oid GNOME-PRODUCT-ZEBRA-MIB::ospfd, frr-0.96.5
|
||||
|
||||
# snmpwalk -c public -v1 localhost .1.3.6.1.2.1.14.1.1
|
||||
OSPF-MIB::ospfRouterId.0 = IpAddress: 192.168.42.109
|
||||
@ -148,7 +148,7 @@ troublesome @code{snmp_log()} line in the function
|
||||
@section MIB and command reference
|
||||
|
||||
The following OID numbers are used for the interprocess communication of snmpd and
|
||||
the Quagga daemons with SMUX only.
|
||||
the Frr daemons with SMUX only.
|
||||
@example
|
||||
(OIDs below .iso.org.dod.internet.private.enterprises)
|
||||
zebra .1.3.6.1.4.1.3317.1.2.1 .gnome.gnomeProducts.zebra.zserv
|
||||
@ -168,7 +168,7 @@ ripd .1.3.6.1.2.1.23 .iso.org.dot.internet.mgmt.mib-2.rip2
|
||||
ospf6d .1.3.6.1.3.102 .iso.org.dod.internet.experimental.ospfv3
|
||||
@end example
|
||||
|
||||
The following syntax is understood by the Quagga daemons for configuring SNMP using SMUX:
|
||||
The following syntax is understood by the Frr daemons for configuring SNMP using SMUX:
|
||||
@deffn {Command} {smux peer @var{oid}} {}
|
||||
@deffnx {Command} {no smux peer @var{oid}} {}
|
||||
@end deffn
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user