Merge remote-tracking branch 'origin/stable/2.0'

This commit is contained in:
Donald Sharp 2017-01-06 09:58:21 -05:00
commit 3b14d86eed
238 changed files with 1605 additions and 1543 deletions

5
.gitignore vendored
View File

@ -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

View File

@ -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.

View File

@ -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
--------------------------------------------------------------------------

View File

@ -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
View File

@ -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.

View File

@ -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).

View File

@ -18,3 +18,4 @@ ospf6d 2606/tcp
ospfapi 2607/tcp
isisd 2608/tcp
pimd 2611/tcp
ldpd 2612/tcp

View File

@ -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. */

View File

@ -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 */

View File

@ -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,

View File

@ -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;
}

View File

@ -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;

View File

@ -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);

View File

@ -1,5 +1,4 @@
/* $QuaggaId: Format:%an, %ai, %h$ $
*
/*
* BGP Multipath
* Copyright (C) 2010 Google Inc.
*

View File

@ -1,5 +1,4 @@
/* $QuaggaId: Format:%an, %ai, %h$ $
*
/*
* BGP Multipath
* Copyright (C) 2010 Google Inc.
*

View File

@ -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);
}

View File

@ -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"

View File

@ -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);
}
}

View File

@ -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

View File

@ -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 */

View File

@ -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,

View File

@ -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,

View File

@ -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);
}
}
/*

View File

@ -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

View File

@ -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))
{

View File

@ -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

View File

@ -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 */

View File

@ -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"

View File

@ -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
View File

@ -0,0 +1 @@
/rfptest

View File

@ -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}

View File

@ -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

View File

@ -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
View File

@ -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.

View File

@ -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
View File

@ -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
View File

@ -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
View File

@ -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
View File

@ -0,0 +1 @@
doc/frr.info*

1
debian/frr-doc.lintian-overrides vendored Normal file
View File

@ -0,0 +1 @@
frr-doc: wrong-section-according-to-package-name frr-doc => doc

2
debian/frr.conf vendored Normal file
View 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
View 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/

View File

@ -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
View 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

View File

@ -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

View File

@ -6,4 +6,4 @@ doc/ripngd.8
doc/vtysh.1
doc/zebra.8
doc/isisd.8
doc/watchquagga.8
doc/watchfrr.8

View File

@ -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
View 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#

View File

@ -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#

View File

@ -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

View File

@ -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
;;

View File

@ -1 +0,0 @@
doc/quagga.info*

View File

@ -1 +0,0 @@
quagga-doc: wrong-section-according-to-package-name quagga-doc => doc

2
debian/quagga.conf vendored
View File

@ -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
View File

@ -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/

View File

@ -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

View File

@ -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
View File

@ -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

View File

@ -1,3 +1,3 @@
Tests: daemons
Depends: quagga
Depends: frr
Restrictions: needs-root

10
debian/tests/daemons vendored
View File

@ -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
View File

@ -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
View 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

View File

@ -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
View File

@ -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
*~

View File

@ -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)

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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@

View File

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

@ -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.

View File

@ -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.

View File

@ -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::

View File

@ -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}.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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@>.

View File

@ -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.

View File

@ -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

View File

@ -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}.

View File

@ -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.

View 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)

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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