mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 17:18:56 +00:00
Merge pull request #37 from LabNConsulting/working/2.0/patch-set-170102a
Working/2.0/patch set 170102a
This commit is contained in:
commit
9b532e09f9
209
bgpd/bgp_attr.c
209
bgpd/bgp_attr.c
@ -220,6 +220,11 @@ cluster_finish (void)
|
|||||||
cluster_hash = NULL;
|
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 *
|
struct bgp_attr_encap_subtlv *
|
||||||
encap_tlv_dup(struct bgp_attr_encap_subtlv *orig)
|
encap_tlv_dup(struct bgp_attr_encap_subtlv *orig)
|
||||||
{
|
{
|
||||||
@ -287,14 +292,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 *p;
|
||||||
struct bgp_attr_encap_subtlv *q;
|
struct bgp_attr_encap_subtlv *q;
|
||||||
|
|
||||||
if (!h1 && !h2)
|
|
||||||
return 1;
|
|
||||||
if (h1 && !h2)
|
|
||||||
return 0;
|
|
||||||
if (!h1 && h2)
|
|
||||||
return 0;
|
|
||||||
if (h1 == h2)
|
if (h1 == h2)
|
||||||
return 1;
|
return 1;
|
||||||
|
if (h1 == NULL || h2 == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
for (p = h1; p; p = p->next) {
|
for (p = h1; p; p = p->next) {
|
||||||
for (q = h2; q; q = q->next) {
|
for (q = h2; q; q = q->next) {
|
||||||
@ -325,6 +326,96 @@ encap_same(struct bgp_attr_encap_subtlv *h1, struct bgp_attr_encap_subtlv *h2)
|
|||||||
return 1;
|
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. */
|
/* Unknown transit attribute. */
|
||||||
static struct hash *transit_hash;
|
static struct hash *transit_hash;
|
||||||
|
|
||||||
@ -433,16 +524,6 @@ bgp_attr_extra_free (struct attr *attr)
|
|||||||
{
|
{
|
||||||
if (attr->extra)
|
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);
|
XFREE (MTYPE_ATTR_EXTRA, attr->extra);
|
||||||
attr->extra = NULL;
|
attr->extra = NULL;
|
||||||
}
|
}
|
||||||
@ -480,28 +561,12 @@ bgp_attr_dup (struct attr *new, struct attr *orig)
|
|||||||
memset(new->extra, 0, sizeof(struct attr_extra));
|
memset(new->extra, 0, sizeof(struct attr_extra));
|
||||||
if (orig->extra) {
|
if (orig->extra) {
|
||||||
*new->extra = *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)
|
else if (orig->extra)
|
||||||
{
|
{
|
||||||
new->extra = bgp_attr_extra_new();
|
new->extra = bgp_attr_extra_new();
|
||||||
*new->extra = *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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -522,6 +587,12 @@ bgp_attr_deep_dup (struct attr *new, struct attr *orig)
|
|||||||
new->extra->cluster = cluster_dup(orig->extra->cluster);
|
new->extra->cluster = cluster_dup(orig->extra->cluster);
|
||||||
if (orig->extra->transit)
|
if (orig->extra->transit)
|
||||||
new->extra->transit = transit_dup(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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -542,6 +613,12 @@ bgp_attr_deep_free (struct attr *attr)
|
|||||||
cluster_free(attr->extra->cluster);
|
cluster_free(attr->extra->cluster);
|
||||||
if (attr->extra->transit)
|
if (attr->extra->transit)
|
||||||
transit_free(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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -598,7 +675,12 @@ attrhash_key_make (void *p)
|
|||||||
MIX(cluster_hash_key_make (extra->cluster));
|
MIX(cluster_hash_key_make (extra->cluster));
|
||||||
if (extra->transit)
|
if (extra->transit)
|
||||||
MIX(transit_hash_key_make (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
|
#ifdef HAVE_IPV6
|
||||||
MIX(extra->mp_nexthop_len);
|
MIX(extra->mp_nexthop_len);
|
||||||
key = jhash(extra->mp_nexthop_global.s6_addr, IPV6_MAX_BYTELEN, key);
|
key = jhash(extra->mp_nexthop_global.s6_addr, IPV6_MAX_BYTELEN, key);
|
||||||
@ -711,13 +793,12 @@ bgp_attr_hash_alloc (void *p)
|
|||||||
{
|
{
|
||||||
attr->extra = bgp_attr_extra_new ();
|
attr->extra = bgp_attr_extra_new ();
|
||||||
*attr->extra = *val->extra;
|
*attr->extra = *val->extra;
|
||||||
|
if (val->extra->encap_subtlvs) {
|
||||||
if (attr->extra->encap_subtlvs) {
|
val->extra->encap_subtlvs = NULL;
|
||||||
attr->extra->encap_subtlvs = encap_tlv_dup(attr->extra->encap_subtlvs);
|
|
||||||
}
|
}
|
||||||
#if ENABLE_BGP_VNC
|
#if ENABLE_BGP_VNC
|
||||||
if (attr->extra->vnc_subtlvs) {
|
if (val->extra->vnc_subtlvs) {
|
||||||
attr->extra->vnc_subtlvs = encap_tlv_dup(attr->extra->vnc_subtlvs);
|
val->extra->vnc_subtlvs = NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -772,6 +853,22 @@ bgp_attr_intern (struct attr *attr)
|
|||||||
else
|
else
|
||||||
attre->transit->refcnt++;
|
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 = (struct attr *) hash_get (attrhash, attr, bgp_attr_hash_alloc);
|
||||||
@ -810,6 +907,14 @@ bgp_attr_refcount (struct attr *attr)
|
|||||||
|
|
||||||
if (attre->transit)
|
if (attre->transit)
|
||||||
attre->transit->refcnt++;
|
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++;
|
attr->refcnt++;
|
||||||
return attr;
|
return attr;
|
||||||
@ -935,6 +1040,14 @@ bgp_attr_unintern_sub (struct attr *attr)
|
|||||||
|
|
||||||
if (attr->extra->transit)
|
if (attr->extra->transit)
|
||||||
transit_unintern (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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1000,11 +1113,17 @@ bgp_attr_flush (struct attr *attr)
|
|||||||
transit_free (attre->transit);
|
transit_free (attre->transit);
|
||||||
attre->transit = NULL;
|
attre->transit = NULL;
|
||||||
}
|
}
|
||||||
|
if (attre->encap_subtlvs && ! attre->encap_subtlvs->refcnt)
|
||||||
|
{
|
||||||
encap_free(attre->encap_subtlvs);
|
encap_free(attre->encap_subtlvs);
|
||||||
attre->encap_subtlvs = NULL;
|
attre->encap_subtlvs = NULL;
|
||||||
|
}
|
||||||
#if ENABLE_BGP_VNC
|
#if ENABLE_BGP_VNC
|
||||||
|
if (attre->vnc_subtlvs && ! attre->vnc_subtlvs->refcnt)
|
||||||
|
{
|
||||||
encap_free(attre->vnc_subtlvs);
|
encap_free(attre->vnc_subtlvs);
|
||||||
attre->vnc_subtlvs = NULL;
|
attre->vnc_subtlvs = NULL;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2492,10 +2611,18 @@ bgp_attr_parse (struct peer *peer, struct attr *attr, bgp_size_t size,
|
|||||||
if (ret != BGP_ATTR_PARSE_PROCEED)
|
if (ret != BGP_ATTR_PARSE_PROCEED)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
if (attr->extra)
|
||||||
|
{
|
||||||
/* Finally intern unknown attribute. */
|
/* Finally intern unknown attribute. */
|
||||||
if (attr->extra && attr->extra->transit)
|
if (attr->extra->transit)
|
||||||
attr->extra->transit = transit_intern (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;
|
return BGP_ATTR_PARSE_PROCEED;
|
||||||
}
|
}
|
||||||
@ -3183,6 +3310,7 @@ bgp_attr_init (void)
|
|||||||
ecommunity_init ();
|
ecommunity_init ();
|
||||||
cluster_init ();
|
cluster_init ();
|
||||||
transit_init ();
|
transit_init ();
|
||||||
|
encap_init ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -3194,6 +3322,7 @@ bgp_attr_finish (void)
|
|||||||
ecommunity_finish ();
|
ecommunity_finish ();
|
||||||
cluster_finish ();
|
cluster_finish ();
|
||||||
transit_finish ();
|
transit_finish ();
|
||||||
|
encap_finish ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make attribute packet. */
|
/* Make attribute packet. */
|
||||||
|
@ -58,6 +58,8 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|||||||
|
|
||||||
struct bgp_attr_encap_subtlv {
|
struct bgp_attr_encap_subtlv {
|
||||||
struct bgp_attr_encap_subtlv *next; /* for chaining */
|
struct bgp_attr_encap_subtlv *next; /* for chaining */
|
||||||
|
/* Reference count of this attribute. */
|
||||||
|
unsigned long refcnt;
|
||||||
uint16_t type;
|
uint16_t type;
|
||||||
uint16_t length;
|
uint16_t length;
|
||||||
uint8_t value[1]; /* will be extended */
|
uint8_t value[1]; /* will be extended */
|
||||||
|
@ -54,6 +54,13 @@ ecommunity_free (struct ecommunity **ecom)
|
|||||||
ecom = NULL;
|
ecom = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ecommunity_hash_free (struct ecommunity *ecom)
|
||||||
|
{
|
||||||
|
ecommunity_free(&ecom);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Add a new Extended Communities value to Extended Communities
|
/* Add a new Extended Communities value to Extended Communities
|
||||||
Attribute structure. When the value is already exists in the
|
Attribute structure. When the value is already exists in the
|
||||||
structure, we don't add the value. Newly added value is sorted by
|
structure, we don't add the value. Newly added value is sorted by
|
||||||
@ -282,6 +289,7 @@ ecommunity_init (void)
|
|||||||
void
|
void
|
||||||
ecommunity_finish (void)
|
ecommunity_finish (void)
|
||||||
{
|
{
|
||||||
|
hash_clean (ecomhash, (void (*)(void *))ecommunity_hash_free);
|
||||||
hash_free (ecomhash);
|
hash_free (ecomhash);
|
||||||
ecomhash = NULL;
|
ecomhash = NULL;
|
||||||
}
|
}
|
||||||
|
315
bgpd/bgp_route.c
315
bgpd/bgp_route.c
@ -631,8 +631,9 @@ bgp_info_cmp (struct bgp *bgp, struct bgp_info *new, struct bgp_info *exist,
|
|||||||
{
|
{
|
||||||
if (peer_sort (new->peer) == BGP_PEER_IBGP
|
if (peer_sort (new->peer) == BGP_PEER_IBGP
|
||||||
&& peer_sort (exist->peer) == BGP_PEER_IBGP
|
&& peer_sort (exist->peer) == BGP_PEER_IBGP
|
||||||
&& CHECK_FLAG (mpath_cfg->ibgp_flags,
|
&& (mpath_cfg == NULL ||
|
||||||
BGP_FLAG_IBGP_MULTIPATH_SAME_CLUSTERLEN))
|
CHECK_FLAG (mpath_cfg->ibgp_flags,
|
||||||
|
BGP_FLAG_IBGP_MULTIPATH_SAME_CLUSTERLEN)))
|
||||||
{
|
{
|
||||||
newm = BGP_CLUSTER_LIST_LENGTH(new->attr);
|
newm = BGP_CLUSTER_LIST_LENGTH(new->attr);
|
||||||
existm = BGP_CLUSTER_LIST_LENGTH(exist->attr);
|
existm = BGP_CLUSTER_LIST_LENGTH(exist->attr);
|
||||||
@ -868,9 +869,8 @@ bgp_info_cmp_compatible (struct bgp *bgp, struct bgp_info *new, struct bgp_info
|
|||||||
afi_t afi, safi_t safi)
|
afi_t afi, safi_t safi)
|
||||||
{
|
{
|
||||||
int paths_eq;
|
int paths_eq;
|
||||||
struct bgp_maxpaths_cfg mpath_cfg;
|
|
||||||
int ret;
|
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)
|
if (paths_eq)
|
||||||
ret = 0;
|
ret = 0;
|
||||||
@ -1800,6 +1800,7 @@ subgroup_process_announce_selected (struct update_subgroup *subgrp,
|
|||||||
PEER_STATUS_ORF_WAIT_REFRESH))
|
PEER_STATUS_ORF_WAIT_REFRESH))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
memset(&extra, 0, sizeof(struct attr_extra));
|
||||||
/* It's initialized in bgp_announce_check() */
|
/* It's initialized in bgp_announce_check() */
|
||||||
attr.extra = &extra;
|
attr.extra = &extra;
|
||||||
|
|
||||||
@ -4479,7 +4480,6 @@ bgp_config_write_table_map (struct vty *vty, struct bgp *bgp, afi_t afi,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DEFUN (bgp_table_map,
|
DEFUN (bgp_table_map,
|
||||||
bgp_table_map_cmd,
|
bgp_table_map_cmd,
|
||||||
"table-map WORD",
|
"table-map WORD",
|
||||||
@ -8168,11 +8168,9 @@ DEFUN (show_ip_bgp_ipv4,
|
|||||||
{
|
{
|
||||||
u_char uj = use_json(argc, argv);
|
u_char uj = use_json(argc, argv);
|
||||||
|
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
return bgp_show (vty, NULL, AFI_IP,
|
||||||
return bgp_show (vty, NULL, AFI_IP, SAFI_MULTICAST, bgp_show_type_normal,
|
bgp_vty_safi_from_arg(argv[0]),
|
||||||
NULL, uj);
|
bgp_show_type_normal, NULL, uj);
|
||||||
|
|
||||||
return bgp_show (vty, NULL, AFI_IP, SAFI_UNICAST, bgp_show_type_normal, NULL, uj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ALIAS (show_ip_bgp_ipv4,
|
ALIAS (show_ip_bgp_ipv4,
|
||||||
@ -8218,12 +8216,10 @@ DEFUN (show_ip_bgp_route_pathtype,
|
|||||||
|
|
||||||
DEFUN (show_bgp_ipv4_safi_route_pathtype,
|
DEFUN (show_bgp_ipv4_safi_route_pathtype,
|
||||||
show_bgp_ipv4_safi_route_pathtype_cmd,
|
show_bgp_ipv4_safi_route_pathtype_cmd,
|
||||||
"show bgp ipv4 (unicast|multicast) A.B.C.D (bestpath|multipath) {json}",
|
"show bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D (bestpath|multipath) {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
|
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
|
||||||
"Display only the bestpath\n"
|
"Display only the bestpath\n"
|
||||||
"Display only multipaths\n"
|
"Display only multipaths\n"
|
||||||
@ -8231,16 +8227,14 @@ DEFUN (show_bgp_ipv4_safi_route_pathtype,
|
|||||||
{
|
{
|
||||||
u_char uj = use_json(argc, argv);
|
u_char uj = use_json(argc, argv);
|
||||||
|
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
|
||||||
if (strncmp (argv[2], "b", 1) == 0)
|
if (strncmp (argv[2], "b", 1) == 0)
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 0, BGP_PATH_BESTPATH, uj);
|
return bgp_show_route (vty, NULL, argv[1], AFI_IP,
|
||||||
|
bgp_vty_safi_from_arg(argv[0]),
|
||||||
|
NULL, 0, BGP_PATH_BESTPATH, uj);
|
||||||
else
|
else
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 0, BGP_PATH_MULTIPATH, uj);
|
return bgp_show_route (vty, NULL, argv[1], AFI_IP,
|
||||||
else
|
bgp_vty_safi_from_arg(argv[0]),
|
||||||
if (strncmp (argv[2], "b", 1) == 0)
|
NULL, 0, BGP_PATH_MULTIPATH, uj);
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 0, BGP_PATH_BESTPATH, uj);
|
|
||||||
else
|
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 0, BGP_PATH_MULTIPATH, uj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (show_bgp_ipv4_prefix,
|
DEFUN (show_bgp_ipv4_prefix,
|
||||||
@ -8281,32 +8275,27 @@ DEFUN (show_bgp_ipv6_prefix,
|
|||||||
|
|
||||||
DEFUN (show_ip_bgp_ipv4_route,
|
DEFUN (show_ip_bgp_ipv4_route,
|
||||||
show_ip_bgp_ipv4_route_cmd,
|
show_ip_bgp_ipv4_route_cmd,
|
||||||
"show ip bgp ipv4 (unicast|multicast) A.B.C.D {json}",
|
"show ip bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"Network in the BGP routing table to display\n"
|
"Network in the BGP routing table to display\n"
|
||||||
"JavaScript Object Notation\n")
|
"JavaScript Object Notation\n")
|
||||||
{
|
{
|
||||||
u_char uj = use_json(argc, argv);
|
u_char uj = use_json(argc, argv);
|
||||||
|
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
return bgp_show_route (vty, NULL, argv[1], AFI_IP,
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 0, BGP_PATH_ALL, uj);
|
bgp_vty_safi_from_arg(argv[0]),
|
||||||
|
NULL, 0, BGP_PATH_ALL, uj);
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 0, BGP_PATH_ALL, uj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ALIAS (show_ip_bgp_ipv4_route,
|
ALIAS (show_ip_bgp_ipv4_route,
|
||||||
show_bgp_ipv4_safi_route_cmd,
|
show_bgp_ipv4_safi_route_cmd,
|
||||||
"show bgp ipv4 (unicast|multicast) A.B.C.D {json}",
|
"show bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"Network in the BGP routing table to display\n"
|
"Network in the BGP routing table to display\n"
|
||||||
"JavaScript Object Notation\n")
|
"JavaScript Object Notation\n")
|
||||||
|
|
||||||
@ -8324,78 +8313,123 @@ DEFUN (show_ip_bgp_vpnv4_all_route,
|
|||||||
return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_MPLS_VPN, NULL, 0, BGP_PATH_ALL, use_json(argc, argv));
|
return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_MPLS_VPN, NULL, 0, BGP_PATH_ALL, use_json(argc, argv));
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (show_bgp_ipv4_vpn_route,
|
DEFUN (show_bgp_ipv4_safi_rd_route,
|
||||||
show_bgp_ipv4_vpn_route_cmd,
|
show_bgp_ipv4_safi_rd_route_cmd,
|
||||||
"show bgp ipv4 vpn A.B.C.D {json}",
|
"show bgp ipv4 (encap|vpn) rd ASN:nn_or_IP-address:nn A.B.C.D {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address Family\n"
|
"Address Family\n"
|
||||||
"Display VPN NLRI specific information\n"
|
"Address Family Modifier\n"
|
||||||
"Network in the BGP routing table to display\n"
|
"Address Family Modifier\n"
|
||||||
JSON_STR)
|
|
||||||
{
|
|
||||||
return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_MPLS_VPN, NULL, 0, BGP_PATH_ALL, use_json (argc, argv));
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFUN (show_bgp_ipv6_vpn_route,
|
|
||||||
show_bgp_ipv6_vpn_route_cmd,
|
|
||||||
"show bgp ipv6 vpn X:X::X:X {json}",
|
|
||||||
SHOW_STR
|
|
||||||
BGP_STR
|
|
||||||
"Address Family\n"
|
|
||||||
"Display VPN NLRI specific information\n"
|
|
||||||
"Network in the BGP routing table to display\n"
|
|
||||||
JSON_STR)
|
|
||||||
{
|
|
||||||
return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_MPLS_VPN, NULL, 0, BGP_PATH_ALL, use_json (argc, argv));
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFUN (show_bgp_ipv4_vpn_rd_route,
|
|
||||||
show_bgp_ipv4_vpn_rd_route_cmd,
|
|
||||||
"show bgp ipv4 vpn rd ASN:nn_or_IP-address:nn A.B.C.D {json}",
|
|
||||||
SHOW_STR
|
|
||||||
BGP_STR
|
|
||||||
IP_STR
|
|
||||||
"Display VPN NLRI specific information\n"
|
|
||||||
"Display information for a route distinguisher\n"
|
"Display information for a route distinguisher\n"
|
||||||
"VPN Route Distinguisher\n"
|
"ENCAP Route Distinguisher\n"
|
||||||
"Network in the BGP routing table to display\n"
|
"Network in the BGP routing table to display\n")
|
||||||
JSON_STR)
|
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct prefix_rd prd;
|
struct prefix_rd prd;
|
||||||
|
safi_t safi;
|
||||||
|
|
||||||
ret = str2prefix_rd (argv[0], &prd);
|
if (bgp_parse_safi(argv[0], &safi)) {
|
||||||
|
vty_out (vty, "Error: Bad SAFI: %s%s", argv[0], VTY_NEWLINE);
|
||||||
|
return CMD_WARNING;
|
||||||
|
}
|
||||||
|
ret = str2prefix_rd (argv[1], &prd);
|
||||||
if (! ret)
|
if (! ret)
|
||||||
{
|
{
|
||||||
vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
|
vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
|
||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
}
|
}
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MPLS_VPN, &prd, 0, BGP_PATH_ALL, use_json (argc, argv));
|
return bgp_show_route (vty, NULL, argv[2], AFI_IP, safi, &prd, 0, BGP_PATH_ALL, use_json (argc, argv));
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (show_bgp_ipv6_vpn_rd_route,
|
DEFUN (show_bgp_ipv6_safi_rd_route,
|
||||||
show_bgp_ipv6_vpn_rd_route_cmd,
|
show_bgp_ipv6_safi_rd_route_cmd,
|
||||||
"show bgp ipv6 vpn rd ASN:nn_or_IP-address:nn X:X::X:X {json}",
|
"show bgp ipv6 (encap|vpn) rd ASN:nn_or_IP-address:nn X:X::X:X {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address Family\n"
|
"Address Family\n"
|
||||||
"Display VPN NLRI specific information\n"
|
"Address Family Modifier\n"
|
||||||
|
"Address Family Modifier\n"
|
||||||
"Display information for a route distinguisher\n"
|
"Display information for a route distinguisher\n"
|
||||||
"VPN Route Distinguisher\n"
|
"ENCAP Route Distinguisher\n"
|
||||||
"Network in the BGP routing table to display\n"
|
"Network in the BGP routing table to display\n")
|
||||||
JSON_STR)
|
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct prefix_rd prd;
|
struct prefix_rd prd;
|
||||||
|
safi_t safi;
|
||||||
|
|
||||||
ret = str2prefix_rd (argv[0], &prd);
|
if (bgp_parse_safi(argv[0], &safi)) {
|
||||||
|
vty_out (vty, "Error: Bad SAFI: %s%s", argv[0], VTY_NEWLINE);
|
||||||
|
return CMD_WARNING;
|
||||||
|
}
|
||||||
|
ret = str2prefix_rd (argv[1], &prd);
|
||||||
if (! ret)
|
if (! ret)
|
||||||
{
|
{
|
||||||
vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
|
vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
|
||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
}
|
}
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MPLS_VPN, &prd, 0, BGP_PATH_ALL, use_json (argc, argv));
|
return bgp_show_route (vty, NULL, argv[2], AFI_IP6, SAFI_ENCAP, &prd, 0, BGP_PATH_ALL, use_json (argc, argv));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DEFUN (show_bgp_ipv4_safi_rd_prefix,
|
||||||
|
show_bgp_ipv4_safi_rd_prefix_cmd,
|
||||||
|
"show bgp ipv4 (encap|vpn) rd ASN:nn_or_IP-address:nn A.B.C.D/M {json}",
|
||||||
|
SHOW_STR
|
||||||
|
BGP_STR
|
||||||
|
"Address Family\n"
|
||||||
|
"Address Family Modifier\n"
|
||||||
|
"Address Family Modifier\n"
|
||||||
|
"Display information for a route distinguisher\n"
|
||||||
|
"ENCAP Route Distinguisher\n"
|
||||||
|
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct prefix_rd prd;
|
||||||
|
safi_t safi;
|
||||||
|
|
||||||
|
if (bgp_parse_safi(argv[0], &safi)) {
|
||||||
|
vty_out (vty, "Error: Bad SAFI: %s%s", argv[0], VTY_NEWLINE);
|
||||||
|
return CMD_WARNING;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = str2prefix_rd (argv[1], &prd);
|
||||||
|
if (! ret)
|
||||||
|
{
|
||||||
|
vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
|
||||||
|
return CMD_WARNING;
|
||||||
|
}
|
||||||
|
return bgp_show_route (vty, NULL, argv[2], AFI_IP, safi, &prd, 1, BGP_PATH_ALL, use_json (argc, argv));
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFUN (show_bgp_ipv6_safi_rd_prefix,
|
||||||
|
show_bgp_ipv6_safi_rd_prefix_cmd,
|
||||||
|
"show bgp ipv6 (encap|vpn) rd ASN:nn_or_IP-address:nn X:X::X:X/M {json}",
|
||||||
|
SHOW_STR
|
||||||
|
BGP_STR
|
||||||
|
"Address Family\n"
|
||||||
|
"Address Family Modifier\n"
|
||||||
|
"Address Family Modifier\n"
|
||||||
|
"Display information for a route distinguisher\n"
|
||||||
|
"ENCAP Route Distinguisher\n"
|
||||||
|
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct prefix_rd prd;
|
||||||
|
safi_t safi;
|
||||||
|
|
||||||
|
if (bgp_parse_safi(argv[0], &safi)) {
|
||||||
|
vty_out (vty, "Error: Bad SAFI: %s%s", argv[0], VTY_NEWLINE);
|
||||||
|
return CMD_WARNING;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = str2prefix_rd (argv[1], &prd);
|
||||||
|
if (! ret)
|
||||||
|
{
|
||||||
|
vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
|
||||||
|
return CMD_WARNING;
|
||||||
|
}
|
||||||
|
return bgp_show_route (vty, NULL, argv[2], AFI_IP6, safi, &prd, 1, BGP_PATH_ALL, use_json (argc, argv));
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (show_ip_bgp_vpnv4_rd_route,
|
DEFUN (show_ip_bgp_vpnv4_rd_route,
|
||||||
@ -8455,44 +8489,37 @@ DEFUN (show_ip_bgp_prefix_pathtype,
|
|||||||
|
|
||||||
DEFUN (show_ip_bgp_ipv4_prefix,
|
DEFUN (show_ip_bgp_ipv4_prefix,
|
||||||
show_ip_bgp_ipv4_prefix_cmd,
|
show_ip_bgp_ipv4_prefix_cmd,
|
||||||
"show ip bgp ipv4 (unicast|multicast) A.B.C.D/M {json}",
|
"show ip bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D/M {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
|
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
|
||||||
"JavaScript Object Notation\n")
|
"JavaScript Object Notation\n")
|
||||||
{
|
{
|
||||||
u_char uj = use_json(argc, argv);
|
u_char uj = use_json(argc, argv);
|
||||||
|
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
return bgp_show_route (vty, NULL, argv[1], AFI_IP,
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 1, BGP_PATH_ALL, uj);
|
bgp_vty_safi_from_arg(argv[0]),
|
||||||
|
NULL, 1, BGP_PATH_ALL, uj);
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 1, BGP_PATH_ALL, uj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ALIAS (show_ip_bgp_ipv4_prefix,
|
ALIAS (show_ip_bgp_ipv4_prefix,
|
||||||
show_bgp_ipv4_safi_prefix_cmd,
|
show_bgp_ipv4_safi_prefix_cmd,
|
||||||
"show bgp ipv4 (unicast|multicast) A.B.C.D/M {json}",
|
"show bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D/M {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
|
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
|
||||||
"JavaScript Object Notation\n")
|
"JavaScript Object Notation\n")
|
||||||
|
|
||||||
DEFUN (show_ip_bgp_ipv4_prefix_pathtype,
|
DEFUN (show_ip_bgp_ipv4_prefix_pathtype,
|
||||||
show_ip_bgp_ipv4_prefix_pathtype_cmd,
|
show_ip_bgp_ipv4_prefix_pathtype_cmd,
|
||||||
"show ip bgp ipv4 (unicast|multicast) A.B.C.D/M (bestpath|multipath) {json}",
|
"show ip bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D/M (bestpath|multipath) {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
|
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
|
||||||
"Display only the bestpath\n"
|
"Display only the bestpath\n"
|
||||||
"Display only multipaths\n"
|
"Display only multipaths\n"
|
||||||
@ -8500,26 +8527,22 @@ DEFUN (show_ip_bgp_ipv4_prefix_pathtype,
|
|||||||
{
|
{
|
||||||
u_char uj = use_json(argc, argv);
|
u_char uj = use_json(argc, argv);
|
||||||
|
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
|
||||||
if (strncmp (argv[2], "b", 1) == 0)
|
if (strncmp (argv[2], "b", 1) == 0)
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 1, BGP_PATH_BESTPATH, uj);
|
return bgp_show_route (vty, NULL, argv[1], AFI_IP,
|
||||||
|
bgp_vty_safi_from_arg(argv[0]),
|
||||||
|
NULL, 1, BGP_PATH_BESTPATH, uj);
|
||||||
else
|
else
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 1, BGP_PATH_MULTIPATH, uj);
|
return bgp_show_route (vty, NULL, argv[1], AFI_IP,
|
||||||
else
|
bgp_vty_safi_from_arg(argv[0]),
|
||||||
if (strncmp (argv[2], "b", 1) == 0)
|
NULL, 1, BGP_PATH_MULTIPATH, uj);
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 1, BGP_PATH_BESTPATH, uj);
|
|
||||||
else
|
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 1, BGP_PATH_MULTIPATH, uj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ALIAS (show_ip_bgp_ipv4_prefix_pathtype,
|
ALIAS (show_ip_bgp_ipv4_prefix_pathtype,
|
||||||
show_bgp_ipv4_safi_prefix_pathtype_cmd,
|
show_bgp_ipv4_safi_prefix_pathtype_cmd,
|
||||||
"show bgp ipv4 (unicast|multicast) A.B.C.D/M (bestpath|multipath) {json}",
|
"show bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D/M (bestpath|multipath) {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
|
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
|
||||||
"Display only the bestpath\n"
|
"Display only the bestpath\n"
|
||||||
"Display only multipaths\n"
|
"Display only multipaths\n"
|
||||||
@ -8693,14 +8716,14 @@ DEFUN (show_bgp_ipv6_safi,
|
|||||||
"Address family\n"
|
"Address family\n"
|
||||||
"Address Family modifier\n"
|
"Address Family modifier\n"
|
||||||
"Address Family modifier\n"
|
"Address Family modifier\n"
|
||||||
|
AFI_SAFI_STR
|
||||||
"JavaScript Object Notation\n")
|
"JavaScript Object Notation\n")
|
||||||
{
|
{
|
||||||
u_char uj = use_json(argc, argv);
|
u_char uj = use_json(argc, argv);
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
|
||||||
return bgp_show (vty, NULL, AFI_IP6, SAFI_MULTICAST, bgp_show_type_normal,
|
|
||||||
NULL, uj);
|
|
||||||
|
|
||||||
return bgp_show (vty, NULL, AFI_IP6, SAFI_UNICAST, bgp_show_type_normal, NULL, uj);
|
return bgp_show (vty, NULL, AFI_IP6,
|
||||||
|
bgp_vty_safi_from_arg(argv[0]),
|
||||||
|
bgp_show_type_normal, NULL, uj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -8738,20 +8761,18 @@ DEFUN (show_bgp_route,
|
|||||||
|
|
||||||
DEFUN (show_bgp_ipv6_safi_route,
|
DEFUN (show_bgp_ipv6_safi_route,
|
||||||
show_bgp_ipv6_safi_route_cmd,
|
show_bgp_ipv6_safi_route_cmd,
|
||||||
"show bgp ipv6 (unicast|multicast) X:X::X:X {json}",
|
"show bgp ipv6 (unicast|multicast|vpn|encap) X:X::X:X {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"Network in the BGP routing table to display\n"
|
"Network in the BGP routing table to display\n"
|
||||||
"JavaScript Object Notation\n")
|
"JavaScript Object Notation\n")
|
||||||
{
|
{
|
||||||
u_char uj = use_json(argc, argv);
|
u_char uj = use_json(argc, argv);
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 0, BGP_PATH_ALL, uj);
|
|
||||||
|
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 0, BGP_PATH_ALL, uj);
|
return bgp_show_route (vty, NULL, argv[1], AFI_IP6,
|
||||||
|
bgp_vty_safi_from_arg(argv[0]),
|
||||||
|
NULL, 0, BGP_PATH_ALL, uj);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (show_bgp_route_pathtype,
|
DEFUN (show_bgp_route_pathtype,
|
||||||
@ -8784,28 +8805,24 @@ ALIAS (show_bgp_route_pathtype,
|
|||||||
|
|
||||||
DEFUN (show_bgp_ipv6_safi_route_pathtype,
|
DEFUN (show_bgp_ipv6_safi_route_pathtype,
|
||||||
show_bgp_ipv6_safi_route_pathtype_cmd,
|
show_bgp_ipv6_safi_route_pathtype_cmd,
|
||||||
"show bgp ipv6 (unicast|multicast) X:X::X:X (bestpath|multipath) {json}",
|
"show bgp ipv6 (unicast|multicast|vpn|encap) X:X::X:X (bestpath|multipath) {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"Network in the BGP routing table to display\n"
|
"Network in the BGP routing table to display\n"
|
||||||
"Display only the bestpath\n"
|
"Display only the bestpath\n"
|
||||||
"Display only multipaths\n"
|
"Display only multipaths\n"
|
||||||
"JavaScript Object Notation\n")
|
"JavaScript Object Notation\n")
|
||||||
{
|
{
|
||||||
u_char uj = use_json(argc, argv);
|
u_char uj = use_json(argc, argv);
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
|
||||||
if (strncmp (argv[2], "b", 1) == 0)
|
if (strncmp (argv[2], "b", 1) == 0)
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 0, BGP_PATH_BESTPATH, uj);
|
return bgp_show_route (vty, NULL, argv[1], AFI_IP6,
|
||||||
|
bgp_vty_safi_from_arg(argv[0]),
|
||||||
|
NULL, 0, BGP_PATH_BESTPATH, uj);
|
||||||
else
|
else
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 0, BGP_PATH_MULTIPATH, uj);
|
return bgp_show_route (vty, NULL, argv[1], AFI_IP6,
|
||||||
else
|
bgp_vty_safi_from_arg(argv[0]),
|
||||||
if (strncmp (argv[2], "b", 1) == 0)
|
NULL, 0, BGP_PATH_MULTIPATH, uj);
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 0, BGP_PATH_BESTPATH, uj);
|
|
||||||
else
|
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 0, BGP_PATH_MULTIPATH, uj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* old command */
|
/* old command */
|
||||||
@ -8835,20 +8852,18 @@ DEFUN (show_bgp_prefix,
|
|||||||
|
|
||||||
DEFUN (show_bgp_ipv6_safi_prefix,
|
DEFUN (show_bgp_ipv6_safi_prefix,
|
||||||
show_bgp_ipv6_safi_prefix_cmd,
|
show_bgp_ipv6_safi_prefix_cmd,
|
||||||
"show bgp ipv6 (unicast|multicast) X:X::X:X/M {json}",
|
"show bgp ipv6 (unicast|multicast|vpn|encap) X:X::X:X/M {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"IPv6 prefix <network>/<length>, e.g., 3ffe::/16\n"
|
"IPv6 prefix <network>/<length>, e.g., 3ffe::/16\n"
|
||||||
"JavaScript Object Notation\n")
|
"JavaScript Object Notation\n")
|
||||||
{
|
{
|
||||||
u_char uj = use_json(argc, argv);
|
u_char uj = use_json(argc, argv);
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 1, BGP_PATH_ALL, uj);
|
|
||||||
|
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 1, BGP_PATH_ALL, uj);
|
return bgp_show_route (vty, NULL, argv[1], AFI_IP6,
|
||||||
|
bgp_vty_safi_from_arg(argv[0]),
|
||||||
|
NULL, 1, BGP_PATH_ALL, uj);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (show_bgp_prefix_pathtype,
|
DEFUN (show_bgp_prefix_pathtype,
|
||||||
@ -8881,28 +8896,23 @@ ALIAS (show_bgp_prefix_pathtype,
|
|||||||
|
|
||||||
DEFUN (show_bgp_ipv6_safi_prefix_pathtype,
|
DEFUN (show_bgp_ipv6_safi_prefix_pathtype,
|
||||||
show_bgp_ipv6_safi_prefix_pathtype_cmd,
|
show_bgp_ipv6_safi_prefix_pathtype_cmd,
|
||||||
"show bgp ipv6 (unicast|multicast) X:X::X:X/M (bestpath|multipath) {json}",
|
"show bgp ipv6 (unicast|multicast|vpn|encap) X:X::X:X/M (bestpath|multipath) {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"IPv6 prefix <network>/<length>, e.g., 3ffe::/16\n"
|
"IPv6 prefix <network>/<length>, e.g., 3ffe::/16\n"
|
||||||
"Display only the bestpath\n"
|
"Display only the bestpath\n"
|
||||||
"Display only multipaths\n"
|
"Display only multipaths\n"
|
||||||
"JavaScript Object Notation\n")
|
"JavaScript Object Notation\n")
|
||||||
{
|
{
|
||||||
u_char uj = use_json(argc, argv);
|
u_char uj = use_json(argc, argv);
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
|
||||||
if (strncmp (argv[2], "b", 1) == 0)
|
if (strncmp (argv[2], "b", 1) == 0)
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 1, BGP_PATH_BESTPATH, uj);
|
return bgp_show_route (vty, NULL, argv[1], AFI_IP6,
|
||||||
|
bgp_vty_safi_from_arg(argv[0]),
|
||||||
|
NULL, 1, BGP_PATH_BESTPATH, uj);
|
||||||
else
|
else
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 1, BGP_PATH_MULTIPATH, uj);
|
return bgp_show_route (vty, NULL, argv[1], AFI_IP6,
|
||||||
else
|
bgp_vty_safi_from_arg(argv[0]), NULL, 1, BGP_PATH_MULTIPATH, uj);
|
||||||
if (strncmp (argv[2], "b", 1) == 0)
|
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 1, BGP_PATH_BESTPATH, uj);
|
|
||||||
else
|
|
||||||
return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 1, BGP_PATH_MULTIPATH, uj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* old command */
|
/* old command */
|
||||||
@ -14983,11 +14993,10 @@ bgp_route_init (void)
|
|||||||
install_element (VIEW_NODE, &show_ip_bgp_neighbor_damp_cmd);
|
install_element (VIEW_NODE, &show_ip_bgp_neighbor_damp_cmd);
|
||||||
|
|
||||||
install_element (VIEW_NODE, &show_bgp_ipv4_prefix_cmd);
|
install_element (VIEW_NODE, &show_bgp_ipv4_prefix_cmd);
|
||||||
install_element (VIEW_NODE, &show_bgp_ipv4_vpn_rd_route_cmd);
|
install_element (VIEW_NODE, &show_bgp_ipv4_safi_rd_route_cmd);
|
||||||
install_element (VIEW_NODE, &show_bgp_ipv4_vpn_route_cmd);
|
install_element (VIEW_NODE, &show_bgp_ipv6_safi_rd_route_cmd);
|
||||||
|
install_element (VIEW_NODE, &show_bgp_ipv4_safi_rd_prefix_cmd);
|
||||||
install_element (VIEW_NODE, &show_bgp_ipv6_vpn_rd_route_cmd);
|
install_element (VIEW_NODE, &show_bgp_ipv6_safi_rd_prefix_cmd);
|
||||||
install_element (VIEW_NODE, &show_bgp_ipv6_vpn_route_cmd);
|
|
||||||
|
|
||||||
/* BGP dampening clear commands */
|
/* BGP dampening clear commands */
|
||||||
install_element (ENABLE_NODE, &clear_ip_bgp_dampening_cmd);
|
install_element (ENABLE_NODE, &clear_ip_bgp_dampening_cmd);
|
||||||
|
148
bgpd/bgp_vty.c
148
bgpd/bgp_vty.c
@ -123,25 +123,29 @@ bgp_parse_afi(const char *str, afi_t *afi)
|
|||||||
return -1;
|
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
|
int
|
||||||
bgp_parse_safi(const char *str, safi_t *safi)
|
bgp_parse_safi(const char *str, safi_t *safi)
|
||||||
{
|
{
|
||||||
if (!strcmp(str, "encap")) {
|
*safi = bgp_vty_safi_from_arg(str);
|
||||||
*safi = SAFI_ENCAP;
|
if (*safi != SAFI_MAX)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
else
|
||||||
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;
|
|
||||||
}
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6050,14 +6054,24 @@ DEFUN (address_family_ipv4_safi,
|
|||||||
address_family_ipv4_safi_cmd,
|
address_family_ipv4_safi_cmd,
|
||||||
"address-family ipv4 (unicast|multicast)",
|
"address-family ipv4 (unicast|multicast)",
|
||||||
"Enter Address Family command mode\n"
|
"Enter Address Family command mode\n"
|
||||||
"Address family\n"
|
AFI_SAFI_STR)
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n")
|
|
||||||
{
|
{
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
switch (bgp_vty_safi_from_arg(argv[0]))
|
||||||
|
{
|
||||||
|
case SAFI_MULTICAST:
|
||||||
vty->node = BGP_IPV4M_NODE;
|
vty->node = BGP_IPV4M_NODE;
|
||||||
else
|
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;
|
vty->node = BGP_IPV4_NODE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -10755,60 +10769,27 @@ DEFUN (show_ip_bgp_instance_all_summary,
|
|||||||
|
|
||||||
DEFUN (show_ip_bgp_ipv4_summary,
|
DEFUN (show_ip_bgp_ipv4_summary,
|
||||||
show_ip_bgp_ipv4_summary_cmd,
|
show_ip_bgp_ipv4_summary_cmd,
|
||||||
"show ip bgp ipv4 (unicast|multicast) summary {json}",
|
"show ip bgp ipv4 (unicast|multicast|vpn|encap) summary {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"Summary of BGP neighbor status\n"
|
"Summary of BGP neighbor status\n"
|
||||||
"JavaScript Object Notation\n")
|
"JavaScript Object Notation\n")
|
||||||
{
|
{
|
||||||
u_char uj = use_json(argc, argv);
|
u_char uj = use_json(argc, argv);
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
|
||||||
return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, uj);
|
|
||||||
|
|
||||||
return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_UNICAST, uj);
|
return bgp_show_summary_vty (vty, NULL, AFI_IP, bgp_vty_safi_from_arg(argv[0]), uj);
|
||||||
}
|
}
|
||||||
|
|
||||||
ALIAS (show_ip_bgp_ipv4_summary,
|
ALIAS (show_ip_bgp_ipv4_summary,
|
||||||
show_bgp_ipv4_safi_summary_cmd,
|
show_bgp_ipv4_safi_summary_cmd,
|
||||||
"show bgp ipv4 (unicast|multicast) summary {json}",
|
"show bgp ipv4 (unicast|multicast|vpn|encap) summary {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"Summary of BGP neighbor status\n")
|
"Summary of BGP neighbor status\n")
|
||||||
|
|
||||||
DEFUN (show_bgp_ipv4_vpn_summary,
|
|
||||||
show_bgp_ipv4_vpn_summary_cmd,
|
|
||||||
"show bgp ipv4 vpn summary {json}",
|
|
||||||
SHOW_STR
|
|
||||||
BGP_STR
|
|
||||||
"IPv4\n"
|
|
||||||
"Display VPN NLRI specific information\n"
|
|
||||||
"Summary of BGP neighbor status\n"
|
|
||||||
JSON_STR)
|
|
||||||
{
|
|
||||||
return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, use_json (argc, argv));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* `show ip bgp summary' commands. */
|
|
||||||
DEFUN (show_bgp_ipv6_vpn_summary,
|
|
||||||
show_bgp_ipv6_vpn_summary_cmd,
|
|
||||||
"show bgp ipv6 vpn summary {json}",
|
|
||||||
SHOW_STR
|
|
||||||
BGP_STR
|
|
||||||
"IPv6\n"
|
|
||||||
"Display VPN NLRI specific information\n"
|
|
||||||
"Summary of BGP neighbor status\n"
|
|
||||||
JSON_STR)
|
|
||||||
{
|
|
||||||
return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_MPLS_VPN, use_json (argc, argv));
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFUN (show_ip_bgp_instance_ipv4_summary,
|
DEFUN (show_ip_bgp_instance_ipv4_summary,
|
||||||
show_ip_bgp_instance_ipv4_summary_cmd,
|
show_ip_bgp_instance_ipv4_summary_cmd,
|
||||||
"show ip bgp view WORD ipv4 (unicast|multicast) summary {json}",
|
"show ip bgp view WORD ipv4 (unicast|multicast) summary {json}",
|
||||||
@ -10837,9 +10818,7 @@ ALIAS (show_ip_bgp_instance_ipv4_summary,
|
|||||||
BGP_STR
|
BGP_STR
|
||||||
"BGP view\n"
|
"BGP view\n"
|
||||||
"View name\n"
|
"View name\n"
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"Summary of BGP neighbor status\n")
|
"Summary of BGP neighbor status\n")
|
||||||
|
|
||||||
DEFUN (show_ip_bgp_vpnv4_all_summary,
|
DEFUN (show_ip_bgp_vpnv4_all_summary,
|
||||||
@ -10941,20 +10920,16 @@ ALIAS (show_bgp_instance_summary,
|
|||||||
|
|
||||||
DEFUN (show_bgp_ipv6_safi_summary,
|
DEFUN (show_bgp_ipv6_safi_summary,
|
||||||
show_bgp_ipv6_safi_summary_cmd,
|
show_bgp_ipv6_safi_summary_cmd,
|
||||||
"show bgp ipv6 (unicast|multicast) summary {json}",
|
"show bgp ipv6 (unicast|multicast|vpn|encap) summary {json}",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"Summary of BGP neighbor status\n"
|
"Summary of BGP neighbor status\n"
|
||||||
"JavaScript Object Notation\n")
|
"JavaScript Object Notation\n")
|
||||||
{
|
{
|
||||||
u_char uj = use_json(argc, argv);
|
u_char uj = use_json(argc, argv);
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
|
||||||
return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_MULTICAST, uj);
|
|
||||||
|
|
||||||
return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, uj);
|
return bgp_show_summary_vty (vty, NULL, AFI_IP6, bgp_vty_safi_from_arg(argv[0]), uj);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (show_bgp_instance_ipv6_safi_summary,
|
DEFUN (show_bgp_instance_ipv6_safi_summary,
|
||||||
@ -10963,9 +10938,7 @@ DEFUN (show_bgp_instance_ipv6_safi_summary,
|
|||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
BGP_INSTANCE_HELP_STR
|
BGP_INSTANCE_HELP_STR
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"Summary of BGP neighbor status\n"
|
"Summary of BGP neighbor status\n"
|
||||||
"JavaScript Object Notation\n")
|
"JavaScript Object Notation\n")
|
||||||
{
|
{
|
||||||
@ -13249,7 +13222,7 @@ DEFUN (show_bgp_instance_all_ipv6_updgrps,
|
|||||||
|
|
||||||
DEFUN (show_bgp_updgrps,
|
DEFUN (show_bgp_updgrps,
|
||||||
show_bgp_updgrps_cmd,
|
show_bgp_updgrps_cmd,
|
||||||
"show bgp (ipv4|ipv6) (unicast|multicast) update-groups",
|
"show bgp (ipv4|ipv6) (unicast|multicast|vpn|encap) update-groups",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
"Address family\n"
|
||||||
@ -13262,7 +13235,7 @@ DEFUN (show_bgp_updgrps,
|
|||||||
safi_t safi;
|
safi_t safi;
|
||||||
|
|
||||||
afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
|
afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
|
||||||
safi = (strncmp (argv[1], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
|
safi = bgp_vty_safi_from_arg(argv[1]);
|
||||||
return (bgp_show_update_groups(vty, NULL, afi, safi, 0));
|
return (bgp_show_update_groups(vty, NULL, afi, safi, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -13327,13 +13300,11 @@ DEFUN (show_bgp_instance_ipv6_updgrps_s,
|
|||||||
|
|
||||||
DEFUN (show_bgp_updgrps_s,
|
DEFUN (show_bgp_updgrps_s,
|
||||||
show_bgp_updgrps_s_cmd,
|
show_bgp_updgrps_s_cmd,
|
||||||
"show bgp (ipv4|ipv6) (unicast|multicast) update-groups SUBGROUP-ID",
|
"show bgp (ipv4|ipv6) (unicast|multicast|vpn|encap) update-groups SUBGROUP-ID",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
"Address family\n"
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"Detailed info about v6 dynamic update groups\n"
|
"Detailed info about v6 dynamic update groups\n"
|
||||||
"Specific subgroup to display detailed info for")
|
"Specific subgroup to display detailed info for")
|
||||||
{
|
{
|
||||||
@ -13342,8 +13313,7 @@ DEFUN (show_bgp_updgrps_s,
|
|||||||
uint64_t subgrp_id;
|
uint64_t subgrp_id;
|
||||||
|
|
||||||
afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
|
afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
|
||||||
safi = (strncmp (argv[1], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
|
safi = bgp_vty_safi_from_arg(argv[1]);
|
||||||
|
|
||||||
VTY_GET_ULL("subgroup-id", subgrp_id, argv[2]);
|
VTY_GET_ULL("subgroup-id", subgrp_id, argv[2]);
|
||||||
return(bgp_show_update_groups(vty, NULL, afi, safi, subgrp_id));
|
return(bgp_show_update_groups(vty, NULL, afi, safi, subgrp_id));
|
||||||
}
|
}
|
||||||
@ -13441,13 +13411,11 @@ DEFUN (show_ip_bgp_instance_updgrps_adj,
|
|||||||
|
|
||||||
DEFUN (show_bgp_updgrps_afi_adj,
|
DEFUN (show_bgp_updgrps_afi_adj,
|
||||||
show_bgp_updgrps_afi_adj_cmd,
|
show_bgp_updgrps_afi_adj_cmd,
|
||||||
"show bgp (ipv4|ipv6) (unicast|multicast) update-groups (advertise-queue|advertised-routes|packet-queue)",
|
"show bgp (ipv4|ipv6) (unicast|multicast|vpn|encap) update-groups (advertise-queue|advertised-routes|packet-queue)",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
"Address family\n"
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"BGP update groups\n"
|
"BGP update groups\n"
|
||||||
"Advertisement queue\n"
|
"Advertisement queue\n"
|
||||||
"Announced routes\n"
|
"Announced routes\n"
|
||||||
@ -13458,7 +13426,7 @@ DEFUN (show_bgp_updgrps_afi_adj,
|
|||||||
safi_t safi;
|
safi_t safi;
|
||||||
|
|
||||||
afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
|
afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
|
||||||
safi = (strncmp (argv[1], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
|
safi = bgp_vty_safi_from_arg(argv[1]);
|
||||||
show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[2], 0);
|
show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[2], 0);
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -13537,13 +13505,11 @@ DEFUN (show_ip_bgp_instance_updgrps_adj_s,
|
|||||||
|
|
||||||
DEFUN (show_bgp_updgrps_afi_adj_s,
|
DEFUN (show_bgp_updgrps_afi_adj_s,
|
||||||
show_bgp_updgrps_afi_adj_s_cmd,
|
show_bgp_updgrps_afi_adj_s_cmd,
|
||||||
"show bgp (ipv4|ipv6) (unicast|multicast) update-groups SUBGROUP-ID (advertise-queue|advertised-routes|packet-queue)",
|
"show bgp (ipv4|ipv6) (unicast|multicast|vpn|encap) update-groups SUBGROUP-ID (advertise-queue|advertised-routes|packet-queue)",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
"Address family\n"
|
||||||
"Address family\n"
|
AFI_SAFI_STR
|
||||||
"Address Family modifier\n"
|
|
||||||
"Address Family modifier\n"
|
|
||||||
"BGP update groups\n"
|
"BGP update groups\n"
|
||||||
"Specific subgroup to display info for\n"
|
"Specific subgroup to display info for\n"
|
||||||
"Advertisement queue\n"
|
"Advertisement queue\n"
|
||||||
@ -13556,7 +13522,7 @@ DEFUN (show_bgp_updgrps_afi_adj_s,
|
|||||||
uint64_t subgrp_id;
|
uint64_t subgrp_id;
|
||||||
|
|
||||||
afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
|
afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
|
||||||
safi = (strncmp (argv[1], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
|
safi = bgp_vty_safi_from_arg(argv[1]);
|
||||||
VTY_GET_ULL("subgroup-id", subgrp_id, argv[2]);
|
VTY_GET_ULL("subgroup-id", subgrp_id, argv[2]);
|
||||||
|
|
||||||
show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[3], subgrp_id);
|
show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[3], subgrp_id);
|
||||||
@ -16023,10 +15989,6 @@ bgp_vty_init (void)
|
|||||||
install_element (VIEW_NODE, &show_bgp_instance_ipv6_safi_summary_cmd);
|
install_element (VIEW_NODE, &show_bgp_instance_ipv6_safi_summary_cmd);
|
||||||
#endif /* HAVE_IPV6 */
|
#endif /* HAVE_IPV6 */
|
||||||
|
|
||||||
install_element (VIEW_NODE, &show_bgp_ipv4_vpn_summary_cmd);
|
|
||||||
|
|
||||||
install_element (VIEW_NODE, &show_bgp_ipv6_vpn_summary_cmd);
|
|
||||||
|
|
||||||
/* "show ip bgp neighbors" commands. */
|
/* "show ip bgp neighbors" commands. */
|
||||||
install_element (VIEW_NODE, &show_ip_bgp_neighbors_cmd);
|
install_element (VIEW_NODE, &show_ip_bgp_neighbors_cmd);
|
||||||
install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbors_cmd);
|
install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbors_cmd);
|
||||||
|
@ -30,6 +30,13 @@ struct bgp;
|
|||||||
#define BGP_INSTANCE_ALL_CMD "(view|vrf) all"
|
#define BGP_INSTANCE_ALL_CMD "(view|vrf) all"
|
||||||
#define BGP_INSTANCE_ALL_HELP_STR "BGP view\nBGP VRF\nAll Views/VRFs\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 void bgp_vty_init (void);
|
||||||
extern const char *afi_safi_print (afi_t, safi_t);
|
extern const char *afi_safi_print (afi_t, safi_t);
|
||||||
extern int bgp_config_write_update_delay (struct vty *, struct bgp *);
|
extern int bgp_config_write_update_delay (struct vty *, struct bgp *);
|
||||||
@ -46,4 +53,7 @@ bgp_parse_afi(const char *str, afi_t *afi);
|
|||||||
extern int
|
extern int
|
||||||
bgp_parse_safi(const char *str, safi_t *safi);
|
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 */
|
#endif /* _QUAGGA_BGP_VTY_H */
|
||||||
|
@ -3778,7 +3778,7 @@ static struct cmd_node bgp_vnc_l2_group_node = {
|
|||||||
1
|
1
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct rfapi_l2_group_cfg *
|
struct rfapi_l2_group_cfg *
|
||||||
bgp_rfapi_get_group_by_lni_label (
|
bgp_rfapi_get_group_by_lni_label (
|
||||||
struct bgp *bgp,
|
struct bgp *bgp,
|
||||||
uint32_t logical_net_id,
|
uint32_t logical_net_id,
|
||||||
|
@ -300,6 +300,12 @@ bgp_rfapi_show_summary (struct bgp *bgp, struct vty *vty);
|
|||||||
extern struct rfapi_cfg *
|
extern struct rfapi_cfg *
|
||||||
bgp_rfapi_get_config (struct bgp *bgp);
|
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 *
|
extern struct ecommunity *
|
||||||
bgp_rfapi_get_ecommunity_by_lni_label (
|
bgp_rfapi_get_ecommunity_by_lni_label (
|
||||||
struct bgp *bgp,
|
struct bgp *bgp,
|
||||||
|
@ -2842,13 +2842,39 @@ rfapi_register (
|
|||||||
* If mac address is set, add an RT based on the registered LNI
|
* If mac address is set, add an RT based on the registered LNI
|
||||||
*/
|
*/
|
||||||
memset ((char *) &ecom_value, 0, sizeof (ecom_value));
|
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[5] = (l2o->logical_net_id >> 16) & 0xff;
|
||||||
ecom_value.val[6] = (l2o->logical_net_id >> 8) & 0xff;
|
ecom_value.val[6] = (l2o->logical_net_id >> 8) & 0xff;
|
||||||
ecom_value.val[7] = (l2o->logical_net_id >> 0) & 0xff;
|
ecom_value.val[7] = (l2o->logical_net_id >> 0) & 0xff;
|
||||||
rtlist = ecommunity_new();
|
rtlist = ecommunity_new();
|
||||||
ecommunity_add_val (rtlist, &ecom_value);
|
ecommunity_add_val (rtlist, &ecom_value);
|
||||||
}
|
}
|
||||||
|
if (l2o->tag_id)
|
||||||
|
{
|
||||||
|
as_t as = bgp->as;
|
||||||
|
uint16_t val = l2o->tag_id;
|
||||||
|
memset ((char *) &ecom_value, 0, sizeof (ecom_value));
|
||||||
|
ecom_value.val[1] = ECOMMUNITY_ROUTE_TARGET;
|
||||||
|
if (as > BGP_AS_MAX)
|
||||||
|
{
|
||||||
|
ecom_value.val[0] = ECOMMUNITY_ENCODE_AS4;
|
||||||
|
ecom_value.val[2] = (as >>24) & 0xff;
|
||||||
|
ecom_value.val[3] = (as >>16) & 0xff;
|
||||||
|
ecom_value.val[4] = (as >>8) & 0xff;
|
||||||
|
ecom_value.val[5] = as & 0xff;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ecom_value.val[0] = ECOMMUNITY_ENCODE_AS;
|
||||||
|
ecom_value.val[2] = (as >>8) & 0xff;
|
||||||
|
ecom_value.val[3] = as & 0xff;
|
||||||
|
}
|
||||||
|
ecom_value.val[6] = (val >> 8) & 0xff;
|
||||||
|
ecom_value.val[7] = val & 0xff;
|
||||||
|
if (rtlist == NULL)
|
||||||
|
rtlist = ecommunity_new();
|
||||||
|
ecommunity_add_val (rtlist, &ecom_value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -89,6 +89,7 @@ struct rfapi_l2address_option
|
|||||||
uint32_t logical_net_id; /* ~= EVPN Ethernet Segment Id,
|
uint32_t logical_net_id; /* ~= EVPN Ethernet Segment Id,
|
||||||
must not be zero for mac regis. */
|
must not be zero for mac regis. */
|
||||||
uint8_t local_nve_id;
|
uint8_t local_nve_id;
|
||||||
|
uint16_t tag_id; /* EVPN Ethernet Tag ID, 0 = none */
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
|
@ -1130,6 +1130,49 @@ rfapiEcommunityGetLNI (struct ecommunity *ecom, uint32_t * lni)
|
|||||||
return ENOENT;
|
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
|
static int
|
||||||
rfapiVpnBiNhEqualsPt (struct bgp_info *bi, struct rfapi_ip_addr *hpt)
|
rfapiVpnBiNhEqualsPt (struct bgp_info *bi, struct rfapi_ip_addr *hpt)
|
||||||
{
|
{
|
||||||
@ -1377,6 +1420,8 @@ rfapiRouteInfo2NextHopEntry (
|
|||||||
{
|
{
|
||||||
(void) rfapiEcommunityGetLNI (bi->attr->extra->ecommunity,
|
(void) rfapiEcommunityGetLNI (bi->attr->extra->ecommunity,
|
||||||
&vo->v.l2addr.logical_net_id);
|
&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 */
|
/* local_nve_id comes from lower byte of RD type */
|
||||||
@ -2106,6 +2151,7 @@ rfapiBgpInfoAttachSorted (
|
|||||||
info_new->next = next;
|
info_new->next = next;
|
||||||
if (next)
|
if (next)
|
||||||
next->prev = info_new;
|
next->prev = info_new;
|
||||||
|
bgp_attr_intern (info_new->attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -2114,6 +2160,7 @@ rfapiBgpInfoDetach (struct route_node *rn, struct bgp_info *bi)
|
|||||||
/*
|
/*
|
||||||
* Remove the route (doubly-linked)
|
* Remove the route (doubly-linked)
|
||||||
*/
|
*/
|
||||||
|
// bgp_attr_unintern (&bi->attr);
|
||||||
if (bi->next)
|
if (bi->next)
|
||||||
bi->next->prev = bi->prev;
|
bi->next->prev = bi->prev;
|
||||||
if (bi->prev)
|
if (bi->prev)
|
||||||
@ -2464,6 +2511,7 @@ rfapiMonitorEncapAdd (
|
|||||||
__func__, import_table, vpn_bi, afi, rn, m);
|
__func__, import_table, vpn_bi, afi, rn, m);
|
||||||
|
|
||||||
RFAPI_CHECK_REFCOUNT (rn, SAFI_ENCAP, 0);
|
RFAPI_CHECK_REFCOUNT (rn, SAFI_ENCAP, 0);
|
||||||
|
bgp_attr_intern (vpn_bi->attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -2966,6 +3014,7 @@ rfapiBiStartWithdrawTimer (
|
|||||||
wcb->node = rn;
|
wcb->node = rn;
|
||||||
wcb->info = bi;
|
wcb->info = bi;
|
||||||
wcb->import_table = import_table;
|
wcb->import_table = import_table;
|
||||||
|
bgp_attr_intern (bi->attr);
|
||||||
|
|
||||||
if (VNC_DEBUG(VERBOSE))
|
if (VNC_DEBUG(VERBOSE))
|
||||||
{
|
{
|
||||||
|
@ -203,6 +203,9 @@ extern int rfapiEcommunityGetLNI (
|
|||||||
struct ecommunity *ecom,
|
struct ecommunity *ecom,
|
||||||
uint32_t *lni);
|
uint32_t *lni);
|
||||||
|
|
||||||
|
extern int rfapiEcommunityGetEthernetTag (
|
||||||
|
struct ecommunity *ecom,
|
||||||
|
uint16_t * tag_id);
|
||||||
|
|
||||||
/* enable for debugging; disable for performance */
|
/* enable for debugging; disable for performance */
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -707,6 +707,8 @@ rfapiRibBi2Ri(
|
|||||||
{
|
{
|
||||||
(void) rfapiEcommunityGetLNI (bi->attr->extra->ecommunity,
|
(void) rfapiEcommunityGetLNI (bi->attr->extra->ecommunity,
|
||||||
&vo->v.l2addr.logical_net_id);
|
&vo->v.l2addr.logical_net_id);
|
||||||
|
(void) rfapiEcommunityGetEthernetTag (bi->attr->extra->ecommunity,
|
||||||
|
&vo->v.l2addr.tag_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* local_nve_id comes from RD */
|
/* local_nve_id comes from RD */
|
||||||
|
@ -2546,7 +2546,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify prefix related infomation\n"
|
"Add/modify prefix related information\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
"VN address of NVE\n"
|
"VN address of NVE\n"
|
||||||
@ -2572,7 +2572,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify prefix related infomation\n"
|
"Add/modify prefix related information\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
"VN address of NVE\n"
|
"VN address of NVE\n"
|
||||||
@ -2598,7 +2598,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify prefix related infomation\n"
|
"Add/modify prefix related information\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
"VN address of NVE\n"
|
"VN address of NVE\n"
|
||||||
@ -2622,7 +2622,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify prefix related infomation\n"
|
"Add/modify prefix related information\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
"VN address of NVE\n"
|
"VN address of NVE\n"
|
||||||
@ -2646,7 +2646,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify prefix related infomation\n"
|
"Add/modify prefix related information\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
"VN address of NVE\n"
|
"VN address of NVE\n"
|
||||||
@ -2671,7 +2671,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify prefix related infomation\n"
|
"Add/modify prefix related information\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
"VN address of NVE\n"
|
"VN address of NVE\n"
|
||||||
@ -2697,7 +2697,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify prefix related infomation\n"
|
"Add/modify prefix related information\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
"VN address of NVE\n"
|
"VN address of NVE\n"
|
||||||
@ -2723,7 +2723,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify prefix related infomation\n"
|
"Add/modify prefix related information\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
"VN address of NVE\n"
|
"VN address of NVE\n"
|
||||||
@ -2747,7 +2747,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify prefix related infomation\n"
|
"Add/modify prefix related information\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
"VN address of NVE\n"
|
"VN address of NVE\n"
|
||||||
@ -2771,7 +2771,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify prefix related infomation\n"
|
"Add/modify prefix related information\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
"VN address of NVE\n"
|
"VN address of NVE\n"
|
||||||
@ -2796,7 +2796,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify mac address infomation\n"
|
"Add/modify mac address information\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"Virtual Network Identifier follows\n"
|
"Virtual Network Identifier follows\n"
|
||||||
"Virtual Network Identifier\n"
|
"Virtual Network Identifier\n"
|
||||||
@ -2806,7 +2806,7 @@ DEFUN (add_vnc_mac_vni_prefix_cost_life,
|
|||||||
"UN address of NVE\n"
|
"UN address of NVE\n"
|
||||||
"UN IPv4 interface address\n"
|
"UN IPv4 interface address\n"
|
||||||
"UN IPv6 interface address\n"
|
"UN IPv6 interface address\n"
|
||||||
"Add/modify prefix related infomation\n"
|
"Add/modify prefix related information\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
"Administrative cost [default: 255]\n"
|
"Administrative cost [default: 255]\n"
|
||||||
@ -2826,7 +2826,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify mac address infomation\n"
|
"Add/modify mac address information\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"Virtual Network Identifier follows\n"
|
"Virtual Network Identifier follows\n"
|
||||||
"Virtual Network Identifier\n"
|
"Virtual Network Identifier\n"
|
||||||
@ -2836,7 +2836,7 @@ DEFUN (add_vnc_mac_vni_prefix_life,
|
|||||||
"UN address of NVE\n"
|
"UN address of NVE\n"
|
||||||
"UN IPv4 interface address\n"
|
"UN IPv4 interface address\n"
|
||||||
"UN IPv6 interface address\n"
|
"UN IPv6 interface address\n"
|
||||||
"Add/modify prefix related infomation\n"
|
"Add/modify prefix related information\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
"Registration lifetime [default: infinite]\n"
|
"Registration lifetime [default: infinite]\n"
|
||||||
@ -2853,7 +2853,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify mac address infomation\n"
|
"Add/modify mac address information\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"Virtual Network Identifier follows\n"
|
"Virtual Network Identifier follows\n"
|
||||||
"Virtual Network Identifier\n"
|
"Virtual Network Identifier\n"
|
||||||
@ -2863,7 +2863,7 @@ DEFUN (add_vnc_mac_vni_prefix_cost,
|
|||||||
"UN address of NVE\n"
|
"UN address of NVE\n"
|
||||||
"UN IPv4 interface address\n"
|
"UN IPv4 interface address\n"
|
||||||
"UN IPv6 interface address\n"
|
"UN IPv6 interface address\n"
|
||||||
"Add/modify prefix related infomation\n"
|
"Add/modify prefix related information\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
"Administrative cost [default: 255]\n" "Administrative cost\n")
|
"Administrative cost [default: 255]\n" "Administrative cost\n")
|
||||||
@ -2879,7 +2879,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify mac address infomation\n"
|
"Add/modify mac address information\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"Virtual Network Identifier follows\n"
|
"Virtual Network Identifier follows\n"
|
||||||
"Virtual Network Identifier\n"
|
"Virtual Network Identifier\n"
|
||||||
@ -2889,7 +2889,7 @@ DEFUN (add_vnc_mac_vni_prefix,
|
|||||||
"UN address of NVE\n"
|
"UN address of NVE\n"
|
||||||
"UN IPv4 interface address\n"
|
"UN IPv4 interface address\n"
|
||||||
"UN IPv6 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")
|
"IPv4 prefix\n" "IPv6 prefix\n")
|
||||||
{
|
{
|
||||||
/* pfx vn un cost life */
|
/* pfx vn un cost life */
|
||||||
@ -2903,7 +2903,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify mac address infomation\n"
|
"Add/modify mac address information\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"Virtual Network Identifier follows\n"
|
"Virtual Network Identifier follows\n"
|
||||||
"Virtual Network Identifier\n"
|
"Virtual Network Identifier\n"
|
||||||
@ -2930,7 +2930,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify mac address infomation\n"
|
"Add/modify mac address information\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"Virtual Network Identifier follows\n"
|
"Virtual Network Identifier follows\n"
|
||||||
"Virtual Network Identifier\n"
|
"Virtual Network Identifier\n"
|
||||||
@ -2954,7 +2954,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify mac address infomation\n"
|
"Add/modify mac address information\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"Virtual Network Identifier follows\n"
|
"Virtual Network Identifier follows\n"
|
||||||
"Virtual Network Identifier\n"
|
"Virtual Network Identifier\n"
|
||||||
@ -2979,7 +2979,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 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"
|
"Add registration\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Add/modify mac address infomation\n"
|
"Add/modify mac address information\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"Virtual Network Identifier follows\n"
|
"Virtual Network Identifier follows\n"
|
||||||
"Virtual Network Identifier\n"
|
"Virtual Network Identifier\n"
|
||||||
@ -3723,7 +3723,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 vnc nve vn (*|A.B.C.D|X:X::X:X) un (*|A.B.C.D|X:X::X:X)",
|
||||||
"clear\n"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear prefix registration infomation\n"
|
"Clear prefix registration information\n"
|
||||||
"VN address of NVE\n"
|
"VN address of NVE\n"
|
||||||
"VN IPv4 interface address\n"
|
"VN IPv4 interface address\n"
|
||||||
"VN IPv6 interface address\n"
|
"VN IPv6 interface address\n"
|
||||||
@ -3753,7 +3753,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 vnc nve un (*|A.B.C.D|X:X::X:X) vn (*|A.B.C.D|X:X::X:X)",
|
||||||
"clear\n"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear prefix registration infomation\n"
|
"Clear prefix registration information\n"
|
||||||
"UN address of NVE\n"
|
"UN address of NVE\n"
|
||||||
"UN IPv4 interface address\n"
|
"UN IPv4 interface address\n"
|
||||||
"UN IPv6 interface address\n"
|
"UN IPv6 interface address\n"
|
||||||
@ -3783,7 +3783,7 @@ DEFUN (clear_vnc_nve_vn,
|
|||||||
"clear vnc nve vn (*|A.B.C.D|X:X::X:X)",
|
"clear vnc nve vn (*|A.B.C.D|X:X::X:X)",
|
||||||
"clear\n"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear prefix registration infomation\n"
|
"Clear prefix registration information\n"
|
||||||
"VN address of NVE\n"
|
"VN address of NVE\n"
|
||||||
"VN IPv4 interface address\n" "VN IPv6 interface address\n")
|
"VN IPv4 interface address\n" "VN IPv6 interface address\n")
|
||||||
{
|
{
|
||||||
@ -3808,7 +3808,7 @@ DEFUN (clear_vnc_nve_un,
|
|||||||
"clear vnc nve un (*|A.B.C.D|X:X::X:X)",
|
"clear vnc nve un (*|A.B.C.D|X:X::X:X)",
|
||||||
"clear\n"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear prefix registration infomation\n"
|
"Clear prefix registration information\n"
|
||||||
"UN address of NVE\n"
|
"UN address of NVE\n"
|
||||||
"UN IPv4 interface address\n" "UN IPv6 interface address\n")
|
"UN IPv4 interface address\n" "UN IPv6 interface address\n")
|
||||||
{
|
{
|
||||||
@ -3841,7 +3841,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 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"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear prefix registration infomation\n"
|
"Clear prefix registration information\n"
|
||||||
"All prefixes\n"
|
"All prefixes\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
@ -3871,7 +3871,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 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"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear prefix registration infomation\n"
|
"Clear prefix registration information\n"
|
||||||
"All prefixes\n"
|
"All prefixes\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
@ -3901,7 +3901,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 vnc prefix (*|A.B.C.D/M|X:X::X:X/M) un (*|A.B.C.D|X:X::X:X)",
|
||||||
"clear\n"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear prefix registration infomation\n"
|
"Clear prefix registration information\n"
|
||||||
"All prefixes\n"
|
"All prefixes\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
@ -3927,7 +3927,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 vnc prefix (*|A.B.C.D/M|X:X::X:X/M) vn (*|A.B.C.D|X:X::X:X)",
|
||||||
"clear\n"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear prefix registration infomation\n"
|
"Clear prefix registration information\n"
|
||||||
"All prefixes\n"
|
"All prefixes\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
@ -3953,7 +3953,7 @@ DEFUN (clear_vnc_prefix_all,
|
|||||||
"clear vnc prefix (*|A.B.C.D/M|X:X::X:X/M) *",
|
"clear vnc prefix (*|A.B.C.D/M|X:X::X:X/M) *",
|
||||||
"clear\n"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear prefix registration infomation\n"
|
"Clear prefix registration information\n"
|
||||||
"All prefixes\n"
|
"All prefixes\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n"
|
"IPv6 prefix\n"
|
||||||
@ -3983,7 +3983,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 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"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear mac registration infomation\n"
|
"Clear mac registration information\n"
|
||||||
"All macs\n"
|
"All macs\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"VNI keyword\n"
|
"VNI keyword\n"
|
||||||
@ -4018,7 +4018,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 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"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear mac registration infomation\n"
|
"Clear mac registration information\n"
|
||||||
"All macs\n"
|
"All macs\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"VNI keyword\n"
|
"VNI keyword\n"
|
||||||
@ -4052,7 +4052,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 vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) un (*|A.B.C.D|X:X::X:X)",
|
||||||
"clear\n"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear mac registration infomation\n"
|
"Clear mac registration information\n"
|
||||||
"All macs\n"
|
"All macs\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"VNI keyword\n"
|
"VNI keyword\n"
|
||||||
@ -4081,7 +4081,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 vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) vn (*|A.B.C.D|X:X::X:X)",
|
||||||
"clear\n"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear mac registration infomation\n"
|
"Clear mac registration information\n"
|
||||||
"All macs\n"
|
"All macs\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"VNI keyword\n"
|
"VNI keyword\n"
|
||||||
@ -4110,7 +4110,7 @@ DEFUN (clear_vnc_mac_all,
|
|||||||
"clear vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) *",
|
"clear vnc mac (*|YY:YY:YY:YY:YY:YY) virtual-network-identifier (*|<1-4294967295>) *",
|
||||||
"clear\n"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear mac registration infomation\n"
|
"Clear mac registration information\n"
|
||||||
"All macs\n"
|
"All macs\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"VNI keyword\n"
|
"VNI keyword\n"
|
||||||
@ -4140,7 +4140,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 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"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear mac registration infomation\n"
|
"Clear mac registration information\n"
|
||||||
"All macs\n"
|
"All macs\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"VNI keyword\n"
|
"VNI keyword\n"
|
||||||
@ -4155,7 +4155,7 @@ DEFUN (clear_vnc_mac_vn_un_prefix,
|
|||||||
"All UN addresses\n"
|
"All UN addresses\n"
|
||||||
"UN IPv4 interface address\n"
|
"UN IPv4 interface address\n"
|
||||||
"UN IPv6 interface address\n"
|
"UN IPv6 interface address\n"
|
||||||
"Clear prefix registration infomation\n"
|
"Clear prefix registration information\n"
|
||||||
"All prefixes\n"
|
"All prefixes\n"
|
||||||
"IPv4 prefix\n"
|
"IPv4 prefix\n"
|
||||||
"IPv6 prefix\n")
|
"IPv6 prefix\n")
|
||||||
@ -4179,7 +4179,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 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"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear mac registration infomation\n"
|
"Clear mac registration information\n"
|
||||||
"All macs\n"
|
"All macs\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"VNI keyword\n"
|
"VNI keyword\n"
|
||||||
@ -4213,7 +4213,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 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"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear mac registration infomation\n"
|
"Clear mac registration information\n"
|
||||||
"All macs\n"
|
"All macs\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"VNI keyword\n"
|
"VNI keyword\n"
|
||||||
@ -4243,7 +4243,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 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"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear mac registration infomation\n"
|
"Clear mac registration information\n"
|
||||||
"All macs\n"
|
"All macs\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"VNI keyword\n"
|
"VNI keyword\n"
|
||||||
@ -4273,7 +4273,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 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"
|
"clear\n"
|
||||||
"VNC Information\n"
|
"VNC Information\n"
|
||||||
"Clear mac registration infomation\n"
|
"Clear mac registration information\n"
|
||||||
"All macs\n"
|
"All macs\n"
|
||||||
"MAC address\n"
|
"MAC address\n"
|
||||||
"VNI keyword\n"
|
"VNI keyword\n"
|
||||||
|
@ -76,7 +76,6 @@ encap_attr_export_ce (
|
|||||||
memset (new, 0, sizeof (struct attr));
|
memset (new, 0, sizeof (struct attr));
|
||||||
bgp_attr_dup (new, orig);
|
bgp_attr_dup (new, orig);
|
||||||
bgp_attr_extra_get (new);
|
bgp_attr_extra_get (new);
|
||||||
bgp_attr_flush_encap (new);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set nexthop
|
* Set nexthop
|
||||||
|
@ -726,7 +726,7 @@ provided to other protocols, either via zebra or directly to BGP.
|
|||||||
It is important to note that when exporting routes to other protocols,
|
It is important to note that when exporting routes to other protocols,
|
||||||
the downstream protocol must also be configured to import the routes.
|
the downstream protocol must also be configured to import the routes.
|
||||||
For example, when VNC routes are exported to unicast BGP, the BGP
|
For example, when VNC routes are exported to unicast BGP, the BGP
|
||||||
configuration must include a corresponding @code{redistribute vpn}
|
configuration must include a corresponding @code{redistribute vnc-direct}
|
||||||
statement.
|
statement.
|
||||||
|
|
||||||
@deffn {VNC} {export bgp|zebra mode none|group-nve|registering-nve|ce}
|
@deffn {VNC} {export bgp|zebra mode none|group-nve|registering-nve|ce}
|
||||||
@ -1115,7 +1115,7 @@ The configuration for @code{VNC-GW 1} is shown below.
|
|||||||
router bgp 64512
|
router bgp 64512
|
||||||
bgp router-id 192.168.1.101
|
bgp router-id 192.168.1.101
|
||||||
bgp cluster-id 1.2.3.4
|
bgp cluster-id 1.2.3.4
|
||||||
redistribute vpn
|
redistribute vnc-direct
|
||||||
neighbor 192.168.1.102 remote-as 64512
|
neighbor 192.168.1.102 remote-as 64512
|
||||||
no neighbor 192.168.1.102 activate
|
no neighbor 192.168.1.102 activate
|
||||||
neighbor 192.168.1.103 remote-as 64512
|
neighbor 192.168.1.103 remote-as 64512
|
||||||
|
@ -1061,6 +1061,7 @@ cmd_ipv6_prefix_match (const char *str)
|
|||||||
const char *delim = "/\0";
|
const char *delim = "/\0";
|
||||||
char *dupe, *prefix, *mask, *context, *endptr;
|
char *dupe, *prefix, *mask, *context, *endptr;
|
||||||
int nmask = -1;
|
int nmask = -1;
|
||||||
|
enum match_type ret;
|
||||||
|
|
||||||
if (str == NULL)
|
if (str == NULL)
|
||||||
return partly_match;
|
return partly_match;
|
||||||
@ -1074,21 +1075,26 @@ cmd_ipv6_prefix_match (const char *str)
|
|||||||
prefix = strtok_r(dupe, delim, &context);
|
prefix = strtok_r(dupe, delim, &context);
|
||||||
mask = strtok_r(NULL, delim, &context);
|
mask = strtok_r(NULL, delim, &context);
|
||||||
|
|
||||||
|
ret = exact_match;
|
||||||
if (!mask)
|
if (!mask)
|
||||||
return partly_match;
|
ret = partly_match;
|
||||||
|
else
|
||||||
|
{
|
||||||
/* validate prefix */
|
/* validate prefix */
|
||||||
if (inet_pton(AF_INET6, prefix, &sin6_dummy.sin6_addr) != 1)
|
if (inet_pton(AF_INET6, prefix, &sin6_dummy.sin6_addr) != 1)
|
||||||
return no_match;
|
ret = no_match;
|
||||||
|
else
|
||||||
|
{
|
||||||
/* validate mask */
|
/* validate mask */
|
||||||
nmask = strtol (mask, &endptr, 10);
|
nmask = strtol (mask, &endptr, 10);
|
||||||
if (*endptr != '\0' || nmask < 0 || nmask > 128)
|
if (*endptr != '\0' || nmask < 0 || nmask > 128)
|
||||||
return no_match;
|
ret = no_match;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
XFREE(MTYPE_TMP, dupe);
|
XFREE(MTYPE_TMP, dupe);
|
||||||
|
|
||||||
return exact_match;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* HAVE_IPV6 */
|
#endif /* HAVE_IPV6 */
|
||||||
|
12
lib/log.c
12
lib/log.c
@ -1077,10 +1077,10 @@ proto_redistnum(int afi, const char *s)
|
|||||||
return ZEBRA_ROUTE_BGP;
|
return ZEBRA_ROUTE_BGP;
|
||||||
else if (strncmp (s, "ta", 2) == 0)
|
else if (strncmp (s, "ta", 2) == 0)
|
||||||
return ZEBRA_ROUTE_TABLE;
|
return ZEBRA_ROUTE_TABLE;
|
||||||
else if (strncmp (s, "v", 1) == 0)
|
else if (strcmp (s, "vnc-direct") == 0)
|
||||||
return ZEBRA_ROUTE_VNC;
|
|
||||||
else if (strncmp (s, "vd", 1) == 0)
|
|
||||||
return ZEBRA_ROUTE_VNC_DIRECT;
|
return ZEBRA_ROUTE_VNC_DIRECT;
|
||||||
|
else if (strcmp (s, "vnc") == 0)
|
||||||
|
return ZEBRA_ROUTE_VNC;
|
||||||
}
|
}
|
||||||
if (afi == AFI_IP6)
|
if (afi == AFI_IP6)
|
||||||
{
|
{
|
||||||
@ -1100,10 +1100,10 @@ proto_redistnum(int afi, const char *s)
|
|||||||
return ZEBRA_ROUTE_BGP;
|
return ZEBRA_ROUTE_BGP;
|
||||||
else if (strncmp (s, "ta", 2) == 0)
|
else if (strncmp (s, "ta", 2) == 0)
|
||||||
return ZEBRA_ROUTE_TABLE;
|
return ZEBRA_ROUTE_TABLE;
|
||||||
else if (strncmp (s, "v", 1) == 0)
|
else if (strcmp (s, "vnc-direct") == 0)
|
||||||
return ZEBRA_ROUTE_VNC;
|
|
||||||
else if (strncmp (s, "vd", 1) == 0)
|
|
||||||
return ZEBRA_ROUTE_VNC_DIRECT;
|
return ZEBRA_ROUTE_VNC_DIRECT;
|
||||||
|
else if (strcmp (s, "vnc") == 0)
|
||||||
|
return ZEBRA_ROUTE_VNC;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -665,7 +665,7 @@ str2prefix_ipv6 (const char *str, struct prefix_ipv6 *p)
|
|||||||
strncpy (cp, str, pnt - str);
|
strncpy (cp, str, pnt - str);
|
||||||
*(cp + (pnt - str)) = '\0';
|
*(cp + (pnt - str)) = '\0';
|
||||||
ret = inet_pton (AF_INET6, cp, &p->prefix);
|
ret = inet_pton (AF_INET6, cp, &p->prefix);
|
||||||
free (cp);
|
XFREE (MTYPE_TMP, cp);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
return 0;
|
return 0;
|
||||||
plen = (u_char) atoi (++pnt);
|
plen = (u_char) atoi (++pnt);
|
||||||
|
@ -56,7 +56,7 @@ while (<STDIN>) {
|
|||||||
|
|
||||||
# else: 7-field line
|
# else: 7-field line
|
||||||
my @f = split(/,/, $_);
|
my @f = split(/,/, $_);
|
||||||
unless (@f == 7) {
|
unless (@f == 7 || @f == 8) {
|
||||||
die "invalid input on route_types line $.\n";
|
die "invalid input on route_types line $.\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,6 +73,7 @@ while (<STDIN>) {
|
|||||||
"ipv4" => int($f[4]),
|
"ipv4" => int($f[4]),
|
||||||
"ipv6" => int($f[5]),
|
"ipv6" => int($f[5]),
|
||||||
"shorthelp" => $f[6],
|
"shorthelp" => $f[6],
|
||||||
|
"restrict2" => $f[7],
|
||||||
};
|
};
|
||||||
push @protos, $proto;
|
push @protos, $proto;
|
||||||
$daemons{$f[2]} = {
|
$daemons{$f[2]} = {
|
||||||
@ -137,6 +138,8 @@ sub collect {
|
|||||||
my (@names, @help) = ((), ());
|
my (@names, @help) = ((), ());
|
||||||
for my $p (@protos) {
|
for my $p (@protos) {
|
||||||
next if ($protodetail{$p}->{"daemon"} eq $daemon && $daemon ne "zebra");
|
next if ($protodetail{$p}->{"daemon"} eq $daemon && $daemon ne "zebra");
|
||||||
|
next if ($protodetail{$p}->{"restrict2"} ne "" &&
|
||||||
|
$protodetail{$p}->{"restrict2"} ne $daemon);
|
||||||
next unless (($ipv4 && $protodetail{$p}->{"ipv4"})
|
next unless (($ipv4 && $protodetail{$p}->{"ipv4"})
|
||||||
|| ($ipv6 && $protodetail{$p}->{"ipv6"}));
|
|| ($ipv6 && $protodetail{$p}->{"ipv6"}));
|
||||||
push @names, $protodetail{$p}->{"cname"};
|
push @names, $protodetail{$p}->{"cname"};
|
||||||
|
@ -64,9 +64,9 @@ ZEBRA_ROUTE_LDP, ldp, ldpd, 'L', 0, 0, "LDP"
|
|||||||
#vnc when sent to zebra
|
#vnc when sent to zebra
|
||||||
ZEBRA_ROUTE_VNC, vnc, NULL, 'v', 1, 1, "VNC"
|
ZEBRA_ROUTE_VNC, vnc, NULL, 'v', 1, 1, "VNC"
|
||||||
# vnc when sent to bgp
|
# vnc when sent to bgp
|
||||||
ZEBRA_ROUTE_VNC_DIRECT, vpn, NULL, 'V', 1, 1, "VPN"
|
ZEBRA_ROUTE_VNC_DIRECT, vnc-direct,NULL, 'V', 1, 1, "VNC-Direct", bgpd
|
||||||
# vnc when sent to bgp (remote next hop?)
|
# vnc when sent to bgp (resolve NVE mode)
|
||||||
ZEBRA_ROUTE_VNC_DIRECT_RH, vpn-rh, NULL, 'V', 0, 0, "VPN"
|
ZEBRA_ROUTE_VNC_DIRECT_RH, vnc-rn, NULL, 'V', 0, 0, "VNC-RN"
|
||||||
# bgp unicast -> vnc
|
# bgp unicast -> vnc
|
||||||
ZEBRA_ROUTE_BGP_DIRECT, bgp-direct, NULL, 'b', 0, 0, "BGP-Direct"
|
ZEBRA_ROUTE_BGP_DIRECT, bgp-direct, NULL, 'b', 0, 0, "BGP-Direct"
|
||||||
# bgp unicast -> vnc
|
# bgp unicast -> vnc
|
||||||
@ -90,4 +90,4 @@ ZEBRA_ROUTE_VNC, "Virtual Network Control (VNC)"
|
|||||||
ZEBRA_ROUTE_OLSR, "Optimised Link State Routing (OLSR)"
|
ZEBRA_ROUTE_OLSR, "Optimised Link State Routing (OLSR)"
|
||||||
ZEBRA_ROUTE_TABLE, "Non-main Kernel Routing Table"
|
ZEBRA_ROUTE_TABLE, "Non-main Kernel Routing Table"
|
||||||
ZEBRA_ROUTE_LDP, "Label Distribution Protocol (LDP)"
|
ZEBRA_ROUTE_LDP, "Label Distribution Protocol (LDP)"
|
||||||
ZEBRA_ROUTE_VNC_DIRECT, "VPN routes(VPN)"
|
ZEBRA_ROUTE_VNC_DIRECT, "VNC direct (not via zebra) routes"
|
||||||
|
@ -216,7 +216,9 @@ zclient_socket(void)
|
|||||||
ret = connect (sock, (struct sockaddr *) &serv, sizeof (serv));
|
ret = connect (sock, (struct sockaddr *) &serv, sizeof (serv));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
zlog_warn ("%s connect failure: %d", __PRETTY_FUNCTION__, errno);
|
if (zclient_debug)
|
||||||
|
zlog_warn ("%s connect failure: %d(%s)", __PRETTY_FUNCTION__,
|
||||||
|
errno, safe_strerror (errno));
|
||||||
close (sock);
|
close (sock);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -252,7 +254,9 @@ zclient_socket_un (const char *path)
|
|||||||
ret = connect (sock, (struct sockaddr *) &addr, len);
|
ret = connect (sock, (struct sockaddr *) &addr, len);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
zlog_warn ("%s connect failure: %d", __PRETTY_FUNCTION__, errno);
|
if (zclient_debug)
|
||||||
|
zlog_warn ("%s connect failure: %d(%s)", __PRETTY_FUNCTION__,
|
||||||
|
errno, safe_strerror (errno));
|
||||||
close (sock);
|
close (sock);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -572,23 +576,11 @@ zclient_start (struct zclient *zclient)
|
|||||||
if (zclient->t_connect)
|
if (zclient->t_connect)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/*
|
if (zclient_socket_connect(zclient) < 0)
|
||||||
* If we fail to connect to the socket on initialization,
|
|
||||||
* Let's wait a second and see if we can reconnect.
|
|
||||||
* Cause if we don't connect, we never attempt to
|
|
||||||
* reconnect. On startup if zebra is slow we
|
|
||||||
* can get into this situation.
|
|
||||||
*/
|
|
||||||
while (zclient_socket_connect(zclient) < 0 && zclient->fail < 5)
|
|
||||||
{
|
{
|
||||||
if (zclient_debug)
|
if (zclient_debug)
|
||||||
zlog_debug ("zclient connection fail");
|
zlog_debug ("zclient connection fail");
|
||||||
zclient->fail++;
|
zclient->fail++;
|
||||||
sleep (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (zclient->sock < 0)
|
|
||||||
{
|
|
||||||
zclient_event (ZCLIENT_CONNECT, zclient);
|
zclient_event (ZCLIENT_CONNECT, zclient);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1727,11 +1719,9 @@ zclient_event (enum event event, struct zclient *zclient)
|
|||||||
thread_add_event (zclient->master, zclient_connect, zclient, 0);
|
thread_add_event (zclient->master, zclient_connect, zclient, 0);
|
||||||
break;
|
break;
|
||||||
case ZCLIENT_CONNECT:
|
case ZCLIENT_CONNECT:
|
||||||
if (zclient->fail >= 10)
|
|
||||||
return;
|
|
||||||
if (zclient_debug)
|
if (zclient_debug)
|
||||||
zlog_debug ("zclient connect schedule interval is %d",
|
zlog_debug ("zclient connect failures: %d schedule interval is now %d",
|
||||||
zclient->fail < 3 ? 10 : 60);
|
zclient->fail, zclient->fail < 3 ? 10 : 60);
|
||||||
if (! zclient->t_connect)
|
if (! zclient->t_connect)
|
||||||
zclient->t_connect =
|
zclient->t_connect =
|
||||||
thread_add_timer (zclient->master, zclient_connect, zclient,
|
thread_add_timer (zclient->master, zclient_connect, zclient,
|
||||||
|
Loading…
Reference in New Issue
Block a user