mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 13:33:15 +00:00
* bgp_clist.[ch], bgp_route.c, bgp_routemap.c, bgp_vty.c:
community-list cleanup. [merge from GNU Zebra]
This commit is contained in:
parent
6ffd207959
commit
fee6e4e454
@ -1,3 +1,8 @@
|
|||||||
|
2005-02-02 Akihiro Mizutani <mizutani@net-chef.net>
|
||||||
|
|
||||||
|
* bgp_clist.[ch], bgp_route.c, bgp_routemap.c, bgp_vty.c:
|
||||||
|
community-list cleanup.
|
||||||
|
|
||||||
2005-02-02 Akihiro Mizutani <mizutani@net-chef.net>
|
2005-02-02 Akihiro Mizutani <mizutani@net-chef.net>
|
||||||
|
|
||||||
* bgp_route.c, bgp_vty.c, bgp_zebra.c, bgpd.[ch]: "enforce-multihop"
|
* bgp_route.c, bgp_vty.c, bgp_zebra.c, bgpd.[ch]: "enforce-multihop"
|
||||||
|
323
bgpd/bgp_clist.c
323
bgpd/bgp_clist.c
@ -34,20 +34,16 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|||||||
/* Lookup master structure for community-list or
|
/* Lookup master structure for community-list or
|
||||||
extcommunity-list. */
|
extcommunity-list. */
|
||||||
struct community_list_master *
|
struct community_list_master *
|
||||||
community_list_master_lookup (struct community_list_handler *ch, int style)
|
community_list_master_lookup (struct community_list_handler *ch, int master)
|
||||||
{
|
{
|
||||||
if (ch)
|
if (ch)
|
||||||
switch (style)
|
switch (master)
|
||||||
{
|
{
|
||||||
case COMMUNITY_LIST_STANDARD:
|
case COMMUNITY_LIST_MASTER:
|
||||||
case COMMUNITY_LIST_EXPANDED:
|
return &ch->community_list;
|
||||||
case COMMUNITY_LIST_AUTO:
|
break;
|
||||||
return &ch->community_list;
|
case EXTCOMMUNITY_LIST_MASTER:
|
||||||
break;
|
return &ch->extcommunity_list;
|
||||||
case EXTCOMMUNITY_LIST_STANDARD:
|
|
||||||
case EXTCOMMUNITY_LIST_EXPANDED:
|
|
||||||
case EXTCOMMUNITY_LIST_AUTO:
|
|
||||||
return &ch->extcommunity_list;
|
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -115,7 +111,7 @@ community_list_free (struct community_list *list)
|
|||||||
|
|
||||||
struct community_list *
|
struct community_list *
|
||||||
community_list_insert (struct community_list_handler *ch,
|
community_list_insert (struct community_list_handler *ch,
|
||||||
const char *name, int style)
|
const char *name, int master)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
long number;
|
long number;
|
||||||
@ -125,7 +121,7 @@ community_list_insert (struct community_list_handler *ch,
|
|||||||
struct community_list_master *cm;
|
struct community_list_master *cm;
|
||||||
|
|
||||||
/* Lookup community-list master. */
|
/* Lookup community-list master. */
|
||||||
cm = community_list_master_lookup (ch, style);
|
cm = community_list_master_lookup (ch, master);
|
||||||
if (!cm)
|
if (!cm)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -209,7 +205,7 @@ community_list_insert (struct community_list_handler *ch,
|
|||||||
|
|
||||||
struct community_list *
|
struct community_list *
|
||||||
community_list_lookup (struct community_list_handler *ch,
|
community_list_lookup (struct community_list_handler *ch,
|
||||||
const char *name, int style)
|
const char *name, int master)
|
||||||
{
|
{
|
||||||
struct community_list *list;
|
struct community_list *list;
|
||||||
struct community_list_master *cm;
|
struct community_list_master *cm;
|
||||||
@ -217,7 +213,7 @@ community_list_lookup (struct community_list_handler *ch,
|
|||||||
if (!name)
|
if (!name)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
cm = community_list_master_lookup (ch, style);
|
cm = community_list_master_lookup (ch, master);
|
||||||
if (!cm)
|
if (!cm)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -232,14 +228,14 @@ community_list_lookup (struct community_list_handler *ch,
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct community_list *
|
struct community_list *
|
||||||
community_list_get (struct community_list_handler *ch,
|
community_list_get (struct community_list_handler *ch,
|
||||||
const char *name, int style)
|
const char *name, int master)
|
||||||
{
|
{
|
||||||
struct community_list *list;
|
struct community_list *list;
|
||||||
|
|
||||||
list = community_list_lookup (ch, name, style);
|
list = community_list_lookup (ch, name, master);
|
||||||
if (!list)
|
if (!list)
|
||||||
list = community_list_insert (ch, name, style);
|
list = community_list_insert (ch, name, master);
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -609,15 +605,13 @@ int
|
|||||||
community_list_set (struct community_list_handler *ch,
|
community_list_set (struct community_list_handler *ch,
|
||||||
const char *name, const char *str, int direct, int style)
|
const char *name, const char *str, int direct, int style)
|
||||||
{
|
{
|
||||||
struct community_entry *entry;
|
struct community_entry *entry = NULL;
|
||||||
struct community_list *list;
|
struct community_list *list;
|
||||||
struct community *com;
|
struct community *com = NULL;
|
||||||
regex_t *regex;
|
regex_t *regex = NULL;
|
||||||
|
|
||||||
entry = NULL;
|
|
||||||
|
|
||||||
/* Get community list. */
|
/* Get community list. */
|
||||||
list = community_list_get (ch, name, style);
|
list = community_list_get (ch, name, COMMUNITY_LIST_MASTER);
|
||||||
|
|
||||||
/* When community-list already has entry, new entry should have same
|
/* When community-list already has entry, new entry should have same
|
||||||
style. If you want to have mixed style community-list, you can
|
style. If you want to have mixed style community-list, you can
|
||||||
@ -628,68 +622,33 @@ community_list_set (struct community_list_handler *ch,
|
|||||||
|
|
||||||
first = list->head;
|
first = list->head;
|
||||||
|
|
||||||
if (style == COMMUNITY_LIST_AUTO)
|
if (style != first->style)
|
||||||
style = first->style;
|
{
|
||||||
else if (style != first->style)
|
return (first->style == COMMUNITY_LIST_STANDARD
|
||||||
{
|
? COMMUNITY_LIST_ERR_STANDARD_CONFLICT
|
||||||
return (first->style == COMMUNITY_LIST_STANDARD
|
: COMMUNITY_LIST_ERR_EXPANDED_CONFLICT);
|
||||||
? COMMUNITY_LIST_ERR_STANDARD_CONFLICT
|
}
|
||||||
: COMMUNITY_LIST_ERR_EXPANDED_CONFLICT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* When str is NULL, it is matches any. */
|
if (str)
|
||||||
if (!str)
|
|
||||||
{
|
{
|
||||||
entry = community_entry_new ();
|
if (style == COMMUNITY_LIST_STANDARD)
|
||||||
entry->direct = direct;
|
com = community_str2com (str);
|
||||||
entry->any = 1;
|
|
||||||
if (style == COMMUNITY_LIST_AUTO)
|
|
||||||
entry->style = COMMUNITY_LIST_STANDARD;
|
|
||||||
else
|
else
|
||||||
entry->style = style;
|
regex = bgp_regcomp (str);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Standard community-list parse. String must be converted into
|
|
||||||
community structure without problem. */
|
|
||||||
if (style == COMMUNITY_LIST_STANDARD || style == COMMUNITY_LIST_AUTO)
|
|
||||||
{
|
|
||||||
com = community_str2com (str);
|
|
||||||
if (com)
|
|
||||||
{
|
|
||||||
entry = community_entry_new ();
|
|
||||||
entry->u.com = com;
|
|
||||||
entry->direct = direct;
|
|
||||||
entry->style = COMMUNITY_LIST_STANDARD;
|
|
||||||
}
|
|
||||||
else if (style == COMMUNITY_LIST_STANDARD)
|
|
||||||
return COMMUNITY_LIST_ERR_MALFORMED_VAL;
|
|
||||||
|
|
||||||
/* We can't convert string into communities value. When
|
if (! com && ! regex)
|
||||||
community-list type is auto, fall dawn to regular expression
|
return COMMUNITY_LIST_ERR_MALFORMED_VAL;
|
||||||
match. */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Expanded community-list parse. String may include regular
|
|
||||||
expression. */
|
|
||||||
if (!entry && (style == COMMUNITY_LIST_EXPANDED
|
|
||||||
|| style == COMMUNITY_LIST_AUTO))
|
|
||||||
{
|
|
||||||
regex = bgp_regcomp (str);
|
|
||||||
if (regex)
|
|
||||||
{
|
|
||||||
entry = community_entry_new ();
|
|
||||||
entry->reg = regex;
|
|
||||||
entry->config = XSTRDUP (MTYPE_COMMUNITY_LIST_CONFIG, str);
|
|
||||||
entry->direct = direct;
|
|
||||||
entry->style = COMMUNITY_LIST_EXPANDED;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return COMMUNITY_LIST_ERR_MALFORMED_VAL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
entry = community_entry_new ();
|
||||||
|
entry->direct = direct;
|
||||||
|
entry->style = style;
|
||||||
|
entry->any = (str ? 0 : 1);
|
||||||
|
entry->u.com = com;
|
||||||
|
entry->reg = regex;
|
||||||
|
entry->config = (regex ? XSTRDUP (MTYPE_COMMUNITY_LIST_CONFIG, str) : NULL);
|
||||||
|
|
||||||
/* Do not put duplicated community entry. */
|
/* Do not put duplicated community entry. */
|
||||||
if (community_list_dup_check (list, entry))
|
if (community_list_dup_check (list, entry))
|
||||||
community_entry_free (entry);
|
community_entry_free (entry);
|
||||||
@ -706,15 +665,13 @@ community_list_unset (struct community_list_handler *ch,
|
|||||||
const char *name, const char *str,
|
const char *name, const char *str,
|
||||||
int direct, int style)
|
int direct, int style)
|
||||||
{
|
{
|
||||||
struct community_entry *entry;
|
struct community_entry *entry = NULL;
|
||||||
struct community_list *list;
|
struct community_list *list;
|
||||||
struct community *com;
|
struct community *com = NULL;
|
||||||
regex_t *regex;
|
regex_t *regex = NULL;
|
||||||
|
|
||||||
entry = NULL;
|
|
||||||
|
|
||||||
/* Lookup community list. */
|
/* Lookup community list. */
|
||||||
list = community_list_lookup (ch, name, style);
|
list = community_list_lookup (ch, name, COMMUNITY_LIST_MASTER);
|
||||||
if (list == NULL)
|
if (list == NULL)
|
||||||
return COMMUNITY_LIST_ERR_CANT_FIND_LIST;
|
return COMMUNITY_LIST_ERR_CANT_FIND_LIST;
|
||||||
|
|
||||||
@ -725,37 +682,23 @@ community_list_unset (struct community_list_handler *ch,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Community list string is specified. Lookup entry from community
|
if (style == COMMUNITY_LIST_STANDARD)
|
||||||
list. */
|
com = community_str2com (str);
|
||||||
if (style == COMMUNITY_LIST_STANDARD || style == COMMUNITY_LIST_AUTO)
|
else
|
||||||
{
|
regex = bgp_regcomp (str);
|
||||||
com = community_str2com (str);
|
|
||||||
if (com)
|
|
||||||
{
|
|
||||||
entry = community_list_entry_lookup (list, com, direct);
|
|
||||||
community_free (com);
|
|
||||||
}
|
|
||||||
else if (style == COMMUNITY_LIST_STANDARD)
|
|
||||||
return COMMUNITY_LIST_ERR_MALFORMED_VAL;
|
|
||||||
|
|
||||||
/* If we can't convert string into community and community-list
|
if (! com && ! regex)
|
||||||
type is auto, fall dawn to expanded community-list. */
|
return COMMUNITY_LIST_ERR_MALFORMED_VAL;
|
||||||
}
|
|
||||||
|
|
||||||
/* Expanded community-list parse. String may include regular
|
if (com)
|
||||||
expression. */
|
entry = community_list_entry_lookup (list, com, direct);
|
||||||
if (!entry
|
else
|
||||||
&& (style == COMMUNITY_LIST_EXPANDED || style == COMMUNITY_LIST_AUTO))
|
entry = community_list_entry_lookup (list, str, direct);
|
||||||
{
|
|
||||||
regex = bgp_regcomp (str);
|
if (com)
|
||||||
if (regex)
|
community_free (com);
|
||||||
{
|
if (regex)
|
||||||
entry = community_list_entry_lookup (list, str, direct);
|
bgp_regex_free (regex);
|
||||||
bgp_regex_free (regex);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return COMMUNITY_LIST_ERR_MALFORMED_VAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!entry)
|
if (!entry)
|
||||||
return COMMUNITY_LIST_ERR_CANT_FIND_LIST;
|
return COMMUNITY_LIST_ERR_CANT_FIND_LIST;
|
||||||
@ -771,15 +714,15 @@ extcommunity_list_set (struct community_list_handler *ch,
|
|||||||
const char *name, const char *str,
|
const char *name, const char *str,
|
||||||
int direct, int style)
|
int direct, int style)
|
||||||
{
|
{
|
||||||
struct community_entry *entry;
|
struct community_entry *entry = NULL;
|
||||||
struct community_list *list;
|
struct community_list *list;
|
||||||
struct ecommunity *ecom;
|
struct ecommunity *ecom = NULL;
|
||||||
regex_t *regex;
|
regex_t *regex = NULL;
|
||||||
|
|
||||||
entry = NULL;
|
entry = NULL;
|
||||||
|
|
||||||
/* Get community list. */
|
/* Get community list. */
|
||||||
list = community_list_get (ch, name, style);
|
list = community_list_get (ch, name, EXTCOMMUNITY_LIST_MASTER);
|
||||||
|
|
||||||
/* When community-list already has entry, new entry should have same
|
/* When community-list already has entry, new entry should have same
|
||||||
style. If you want to have mixed style community-list, you can
|
style. If you want to have mixed style community-list, you can
|
||||||
@ -790,74 +733,40 @@ extcommunity_list_set (struct community_list_handler *ch,
|
|||||||
|
|
||||||
first = list->head;
|
first = list->head;
|
||||||
|
|
||||||
if (style == EXTCOMMUNITY_LIST_AUTO)
|
if (style != first->style)
|
||||||
style = first->style;
|
{
|
||||||
else if (style != first->style)
|
return (first->style == EXTCOMMUNITY_LIST_STANDARD
|
||||||
{
|
? COMMUNITY_LIST_ERR_STANDARD_CONFLICT
|
||||||
return (first->style == EXTCOMMUNITY_LIST_STANDARD
|
: COMMUNITY_LIST_ERR_EXPANDED_CONFLICT);
|
||||||
? COMMUNITY_LIST_ERR_STANDARD_CONFLICT
|
}
|
||||||
: COMMUNITY_LIST_ERR_EXPANDED_CONFLICT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* When str is NULL, it is matches any. */
|
if (str)
|
||||||
if (!str)
|
|
||||||
{
|
{
|
||||||
entry = community_entry_new ();
|
if (style == EXTCOMMUNITY_LIST_STANDARD)
|
||||||
entry->direct = direct;
|
ecom = ecommunity_str2com (str, 0, 1);
|
||||||
entry->any = 1;
|
|
||||||
if (style == EXTCOMMUNITY_LIST_AUTO)
|
|
||||||
entry->style = EXTCOMMUNITY_LIST_STANDARD;
|
|
||||||
else
|
else
|
||||||
entry->style = style;
|
regex = bgp_regcomp (str);
|
||||||
|
|
||||||
|
if (! ecom && ! regex)
|
||||||
|
return COMMUNITY_LIST_ERR_MALFORMED_VAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ecom)
|
||||||
|
ecom->str = ecommunity_ecom2str (ecom, ECOMMUNITY_FORMAT_DISPLAY);
|
||||||
|
|
||||||
|
entry = community_entry_new ();
|
||||||
|
entry->direct = direct;
|
||||||
|
entry->style = style;
|
||||||
|
entry->any = (str ? 0 : 1);
|
||||||
|
if (ecom)
|
||||||
|
entry->config = ecommunity_ecom2str (ecom, ECOMMUNITY_FORMAT_COMMUNITY_LIST);
|
||||||
|
else if (regex)
|
||||||
|
entry->config = XSTRDUP (MTYPE_COMMUNITY_LIST_CONFIG, str);
|
||||||
else
|
else
|
||||||
{
|
entry->config = NULL;
|
||||||
/* Standard extcommunity-list parse. String is converted into
|
entry->u.ecom = ecom;
|
||||||
ecommunity structure. */
|
entry->reg = regex;
|
||||||
if (style == EXTCOMMUNITY_LIST_STANDARD
|
|
||||||
|| style == EXTCOMMUNITY_LIST_AUTO)
|
|
||||||
{
|
|
||||||
/* Type is unknown. String includes keyword. */
|
|
||||||
ecom = ecommunity_str2com (str, 0, 1);
|
|
||||||
if (ecom)
|
|
||||||
{
|
|
||||||
entry = community_entry_new ();
|
|
||||||
entry->config
|
|
||||||
=
|
|
||||||
ecommunity_ecom2str (ecom, ECOMMUNITY_FORMAT_COMMUNITY_LIST);
|
|
||||||
ecom->str =
|
|
||||||
ecommunity_ecom2str (ecom, ECOMMUNITY_FORMAT_DISPLAY);
|
|
||||||
entry->u.ecom = ecom;
|
|
||||||
entry->direct = direct;
|
|
||||||
entry->style = EXTCOMMUNITY_LIST_STANDARD;
|
|
||||||
}
|
|
||||||
else if (style == EXTCOMMUNITY_LIST_STANDARD)
|
|
||||||
return COMMUNITY_LIST_ERR_MALFORMED_VAL;
|
|
||||||
|
|
||||||
/* We can't convert string into communities value. When
|
|
||||||
community-list type is auto, fall dawn to regular expression
|
|
||||||
match. */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Expanded extcommunity-list parse. String may include regular
|
|
||||||
expression. */
|
|
||||||
if (!entry && (style == EXTCOMMUNITY_LIST_EXPANDED
|
|
||||||
|| style == EXTCOMMUNITY_LIST_AUTO))
|
|
||||||
{
|
|
||||||
regex = bgp_regcomp (str);
|
|
||||||
if (regex)
|
|
||||||
{
|
|
||||||
entry = community_entry_new ();
|
|
||||||
entry->reg = regex;
|
|
||||||
entry->config = XSTRDUP (MTYPE_COMMUNITY_LIST_CONFIG, str);
|
|
||||||
entry->direct = direct;
|
|
||||||
entry->style = EXTCOMMUNITY_LIST_EXPANDED;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return COMMUNITY_LIST_ERR_MALFORMED_VAL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do not put duplicated community entry. */
|
/* Do not put duplicated community entry. */
|
||||||
if (community_list_dup_check (list, entry))
|
if (community_list_dup_check (list, entry))
|
||||||
@ -875,15 +784,13 @@ extcommunity_list_unset (struct community_list_handler *ch,
|
|||||||
const char *name, const char *str,
|
const char *name, const char *str,
|
||||||
int direct, int style)
|
int direct, int style)
|
||||||
{
|
{
|
||||||
struct community_entry *entry;
|
struct community_entry *entry = NULL;
|
||||||
struct community_list *list;
|
struct community_list *list;
|
||||||
struct ecommunity *ecom = NULL;
|
struct ecommunity *ecom = NULL;
|
||||||
regex_t *regex;
|
regex_t *regex = NULL;
|
||||||
|
|
||||||
entry = NULL;
|
|
||||||
|
|
||||||
/* Lookup extcommunity list. */
|
/* Lookup extcommunity list. */
|
||||||
list = community_list_lookup (ch, name, style);
|
list = community_list_lookup (ch, name, EXTCOMMUNITY_LIST_MASTER);
|
||||||
if (list == NULL)
|
if (list == NULL)
|
||||||
return COMMUNITY_LIST_ERR_CANT_FIND_LIST;
|
return COMMUNITY_LIST_ERR_CANT_FIND_LIST;
|
||||||
|
|
||||||
@ -894,37 +801,23 @@ extcommunity_list_unset (struct community_list_handler *ch,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Community list string is specified. Lookup entry from community
|
if (style == EXTCOMMUNITY_LIST_STANDARD)
|
||||||
list. */
|
ecom = ecommunity_str2com (str, 0, 1);
|
||||||
if (style == EXTCOMMUNITY_LIST_STANDARD || style == EXTCOMMUNITY_LIST_AUTO)
|
else
|
||||||
{
|
regex = bgp_regcomp (str);
|
||||||
ecom = ecommunity_str2com (str, 0, 1);
|
|
||||||
if (ecom)
|
|
||||||
{
|
|
||||||
entry = community_list_entry_lookup (list, ecom, direct);
|
|
||||||
ecommunity_free (ecom);
|
|
||||||
}
|
|
||||||
else if (style == COMMUNITY_LIST_STANDARD)
|
|
||||||
return COMMUNITY_LIST_ERR_MALFORMED_VAL;
|
|
||||||
|
|
||||||
/* If we can't convert string into community and community-list
|
if (! ecom && ! regex)
|
||||||
type is auto, fall dawn to expanded community-list. */
|
return COMMUNITY_LIST_ERR_MALFORMED_VAL;
|
||||||
}
|
|
||||||
|
|
||||||
/* Expanded community-list parse. String may include regular
|
if (ecom)
|
||||||
expression. */
|
entry = community_list_entry_lookup (list, ecom, direct);
|
||||||
if (!entry
|
else
|
||||||
&& (style == COMMUNITY_LIST_EXPANDED || style == COMMUNITY_LIST_AUTO))
|
entry = community_list_entry_lookup (list, str, direct);
|
||||||
{
|
|
||||||
regex = bgp_regcomp (str);
|
if (ecom)
|
||||||
if (regex)
|
ecommunity_free (ecom);
|
||||||
{
|
if (regex)
|
||||||
entry = community_list_entry_lookup (list, str, direct);
|
bgp_regex_free (regex);
|
||||||
bgp_regex_free (regex);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return COMMUNITY_LIST_ERR_MALFORMED_VAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!entry)
|
if (!entry)
|
||||||
return COMMUNITY_LIST_ERR_CANT_FIND_LIST;
|
return COMMUNITY_LIST_ERR_CANT_FIND_LIST;
|
||||||
|
@ -18,6 +18,10 @@ along with GNU Zebra; see the file COPYING. If not, write to the Free
|
|||||||
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
02111-1307, USA. */
|
02111-1307, USA. */
|
||||||
|
|
||||||
|
/* Master Community-list. */
|
||||||
|
#define COMMUNITY_LIST_MASTER 0
|
||||||
|
#define EXTCOMMUNITY_LIST_MASTER 1
|
||||||
|
|
||||||
/* Community-list deny and permit. */
|
/* Community-list deny and permit. */
|
||||||
#define COMMUNITY_DENY 0
|
#define COMMUNITY_DENY 0
|
||||||
#define COMMUNITY_PERMIT 1
|
#define COMMUNITY_PERMIT 1
|
||||||
@ -29,10 +33,8 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|||||||
/* Community-list entry types. */
|
/* Community-list entry types. */
|
||||||
#define COMMUNITY_LIST_STANDARD 0 /* Standard community-list. */
|
#define COMMUNITY_LIST_STANDARD 0 /* Standard community-list. */
|
||||||
#define COMMUNITY_LIST_EXPANDED 1 /* Expanded community-list. */
|
#define COMMUNITY_LIST_EXPANDED 1 /* Expanded community-list. */
|
||||||
#define COMMUNITY_LIST_AUTO 2 /* Automatically detected. */
|
#define EXTCOMMUNITY_LIST_STANDARD 2 /* Standard extcommunity-list. */
|
||||||
#define EXTCOMMUNITY_LIST_STANDARD 3 /* Standard extcommunity-list. */
|
#define EXTCOMMUNITY_LIST_EXPANDED 3 /* Expanded extcommunity-list. */
|
||||||
#define EXTCOMMUNITY_LIST_EXPANDED 4 /* Expanded extcommunity-list. */
|
|
||||||
#define EXTCOMMUNITY_LIST_AUTO 5 /* Automatically detected. */
|
|
||||||
|
|
||||||
/* Community-list. */
|
/* Community-list. */
|
||||||
struct community_list
|
struct community_list
|
||||||
|
@ -7767,7 +7767,7 @@ bgp_show_community_list (struct vty *vty, const char *com, int exact,
|
|||||||
{
|
{
|
||||||
struct community_list *list;
|
struct community_list *list;
|
||||||
|
|
||||||
list = community_list_lookup (bgp_clist, com, COMMUNITY_LIST_AUTO);
|
list = community_list_lookup (bgp_clist, com, COMMUNITY_LIST_MASTER);
|
||||||
if (list == NULL)
|
if (list == NULL)
|
||||||
{
|
{
|
||||||
vty_out (vty, "%% %s is not a valid community-list name%s", com,
|
vty_out (vty, "%% %s is not a valid community-list name%s", com,
|
||||||
@ -7782,11 +7782,12 @@ bgp_show_community_list (struct vty *vty, const char *com, int exact,
|
|||||||
|
|
||||||
DEFUN (show_ip_bgp_community_list,
|
DEFUN (show_ip_bgp_community_list,
|
||||||
show_ip_bgp_community_list_cmd,
|
show_ip_bgp_community_list_cmd,
|
||||||
"show ip bgp community-list WORD",
|
"show ip bgp community-list (<1-500>|WORD)",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Display routes matching the community-list\n"
|
"Display routes matching the community-list\n"
|
||||||
|
"community-list number\n"
|
||||||
"community-list name\n")
|
"community-list name\n")
|
||||||
{
|
{
|
||||||
return bgp_show_community_list (vty, argv[0], 0, AFI_IP, SAFI_UNICAST);
|
return bgp_show_community_list (vty, argv[0], 0, AFI_IP, SAFI_UNICAST);
|
||||||
@ -7794,7 +7795,7 @@ DEFUN (show_ip_bgp_community_list,
|
|||||||
|
|
||||||
DEFUN (show_ip_bgp_ipv4_community_list,
|
DEFUN (show_ip_bgp_ipv4_community_list,
|
||||||
show_ip_bgp_ipv4_community_list_cmd,
|
show_ip_bgp_ipv4_community_list_cmd,
|
||||||
"show ip bgp ipv4 (unicast|multicast) community-list WORD",
|
"show ip bgp ipv4 (unicast|multicast) community-list (<1-500>|WORD)",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
@ -7802,6 +7803,7 @@ DEFUN (show_ip_bgp_ipv4_community_list,
|
|||||||
"Address Family modifier\n"
|
"Address Family modifier\n"
|
||||||
"Address Family modifier\n"
|
"Address Family modifier\n"
|
||||||
"Display routes matching the community-list\n"
|
"Display routes matching the community-list\n"
|
||||||
|
"community-list number\n"
|
||||||
"community-list name\n")
|
"community-list name\n")
|
||||||
{
|
{
|
||||||
if (strncmp (argv[0], "m", 1) == 0)
|
if (strncmp (argv[0], "m", 1) == 0)
|
||||||
@ -7812,11 +7814,12 @@ DEFUN (show_ip_bgp_ipv4_community_list,
|
|||||||
|
|
||||||
DEFUN (show_ip_bgp_community_list_exact,
|
DEFUN (show_ip_bgp_community_list_exact,
|
||||||
show_ip_bgp_community_list_exact_cmd,
|
show_ip_bgp_community_list_exact_cmd,
|
||||||
"show ip bgp community-list WORD exact-match",
|
"show ip bgp community-list (<1-500>|WORD) exact-match",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Display routes matching the community-list\n"
|
"Display routes matching the community-list\n"
|
||||||
|
"community-list number\n"
|
||||||
"community-list name\n"
|
"community-list name\n"
|
||||||
"Exact match of the communities\n")
|
"Exact match of the communities\n")
|
||||||
{
|
{
|
||||||
@ -7825,7 +7828,7 @@ DEFUN (show_ip_bgp_community_list_exact,
|
|||||||
|
|
||||||
DEFUN (show_ip_bgp_ipv4_community_list_exact,
|
DEFUN (show_ip_bgp_ipv4_community_list_exact,
|
||||||
show_ip_bgp_ipv4_community_list_exact_cmd,
|
show_ip_bgp_ipv4_community_list_exact_cmd,
|
||||||
"show ip bgp ipv4 (unicast|multicast) community-list WORD exact-match",
|
"show ip bgp ipv4 (unicast|multicast) community-list (<1-500>|WORD) exact-match",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
@ -7833,6 +7836,7 @@ DEFUN (show_ip_bgp_ipv4_community_list_exact,
|
|||||||
"Address Family modifier\n"
|
"Address Family modifier\n"
|
||||||
"Address Family modifier\n"
|
"Address Family modifier\n"
|
||||||
"Display routes matching the community-list\n"
|
"Display routes matching the community-list\n"
|
||||||
|
"community-list number\n"
|
||||||
"community-list name\n"
|
"community-list name\n"
|
||||||
"Exact match of the communities\n")
|
"Exact match of the communities\n")
|
||||||
{
|
{
|
||||||
@ -7845,10 +7849,11 @@ DEFUN (show_ip_bgp_ipv4_community_list_exact,
|
|||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
DEFUN (show_bgp_community_list,
|
DEFUN (show_bgp_community_list,
|
||||||
show_bgp_community_list_cmd,
|
show_bgp_community_list_cmd,
|
||||||
"show bgp community-list WORD",
|
"show bgp community-list (<1-500>|WORD)",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Display routes matching the community-list\n"
|
"Display routes matching the community-list\n"
|
||||||
|
"community-list number\n"
|
||||||
"community-list name\n")
|
"community-list name\n")
|
||||||
{
|
{
|
||||||
return bgp_show_community_list (vty, argv[0], 0, AFI_IP6, SAFI_UNICAST);
|
return bgp_show_community_list (vty, argv[0], 0, AFI_IP6, SAFI_UNICAST);
|
||||||
@ -7856,12 +7861,13 @@ DEFUN (show_bgp_community_list,
|
|||||||
|
|
||||||
ALIAS (show_bgp_community_list,
|
ALIAS (show_bgp_community_list,
|
||||||
show_bgp_ipv6_community_list_cmd,
|
show_bgp_ipv6_community_list_cmd,
|
||||||
"show bgp ipv6 community-list WORD",
|
"show bgp ipv6 community-list (<1-500>|WORD)",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
"Address family\n"
|
||||||
"Display routes matching the community-list\n"
|
"Display routes matching the community-list\n"
|
||||||
"community-list name\n")
|
"community-list number\n"
|
||||||
|
"community-list name\n");
|
||||||
|
|
||||||
/* old command */
|
/* old command */
|
||||||
DEFUN (show_ipv6_bgp_community_list,
|
DEFUN (show_ipv6_bgp_community_list,
|
||||||
@ -7891,10 +7897,11 @@ DEFUN (show_ipv6_mbgp_community_list,
|
|||||||
|
|
||||||
DEFUN (show_bgp_community_list_exact,
|
DEFUN (show_bgp_community_list_exact,
|
||||||
show_bgp_community_list_exact_cmd,
|
show_bgp_community_list_exact_cmd,
|
||||||
"show bgp community-list WORD exact-match",
|
"show bgp community-list (<1-500>|WORD) exact-match",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Display routes matching the community-list\n"
|
"Display routes matching the community-list\n"
|
||||||
|
"community-list number\n"
|
||||||
"community-list name\n"
|
"community-list name\n"
|
||||||
"Exact match of the communities\n")
|
"Exact match of the communities\n")
|
||||||
{
|
{
|
||||||
@ -7903,11 +7910,12 @@ DEFUN (show_bgp_community_list_exact,
|
|||||||
|
|
||||||
ALIAS (show_bgp_community_list_exact,
|
ALIAS (show_bgp_community_list_exact,
|
||||||
show_bgp_ipv6_community_list_exact_cmd,
|
show_bgp_ipv6_community_list_exact_cmd,
|
||||||
"show bgp ipv6 community-list WORD exact-match",
|
"show bgp ipv6 community-list (<1-500>|WORD) exact-match",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Address family\n"
|
"Address family\n"
|
||||||
"Display routes matching the community-list\n"
|
"Display routes matching the community-list\n"
|
||||||
|
"community-list number\n"
|
||||||
"community-list name\n"
|
"community-list name\n"
|
||||||
"Exact match of the communities\n")
|
"Exact match of the communities\n")
|
||||||
|
|
||||||
|
@ -556,7 +556,7 @@ route_match_community (void *rule, struct prefix *prefix,
|
|||||||
bgp_info = object;
|
bgp_info = object;
|
||||||
rcom = rule;
|
rcom = rule;
|
||||||
|
|
||||||
list = community_list_lookup (bgp_clist, rcom->name, COMMUNITY_LIST_AUTO);
|
list = community_list_lookup (bgp_clist, rcom->name, COMMUNITY_LIST_MASTER);
|
||||||
if (! list)
|
if (! list)
|
||||||
return RMAP_NOMATCH;
|
return RMAP_NOMATCH;
|
||||||
|
|
||||||
@ -632,7 +632,7 @@ route_match_ecommunity (void *rule, struct prefix *prefix,
|
|||||||
bgp_info = object;
|
bgp_info = object;
|
||||||
|
|
||||||
list = community_list_lookup (bgp_clist, (char *) rule,
|
list = community_list_lookup (bgp_clist, (char *) rule,
|
||||||
EXTCOMMUNITY_LIST_AUTO);
|
EXTCOMMUNITY_LIST_MASTER);
|
||||||
if (! list)
|
if (! list)
|
||||||
return RMAP_NOMATCH;
|
return RMAP_NOMATCH;
|
||||||
|
|
||||||
@ -1225,7 +1225,7 @@ struct route_map_rule_cmd route_set_community_cmd =
|
|||||||
route_set_community_free,
|
route_set_community_free,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* `set comm-list (<1-99>|<100-199>|WORD) delete' */
|
/* `set comm-list (<1-99>|<100-500>|WORD) delete' */
|
||||||
|
|
||||||
/* For community set mechanism. */
|
/* For community set mechanism. */
|
||||||
route_map_result_t
|
route_map_result_t
|
||||||
@ -1244,7 +1244,7 @@ route_set_community_delete (void *rule, struct prefix *prefix,
|
|||||||
return RMAP_OKAY;
|
return RMAP_OKAY;
|
||||||
|
|
||||||
binfo = object;
|
binfo = object;
|
||||||
list = community_list_lookup (bgp_clist, rule, COMMUNITY_LIST_AUTO);
|
list = community_list_lookup (bgp_clist, rule, COMMUNITY_LIST_MASTER);
|
||||||
old = binfo->attr->community;
|
old = binfo->attr->community;
|
||||||
|
|
||||||
if (list && old)
|
if (list && old)
|
||||||
@ -2412,7 +2412,7 @@ ALIAS (no_match_metric,
|
|||||||
|
|
||||||
DEFUN (match_community,
|
DEFUN (match_community,
|
||||||
match_community_cmd,
|
match_community_cmd,
|
||||||
"match community (<1-99>|<100-199>|WORD)",
|
"match community (<1-99>|<100-500>|WORD)",
|
||||||
MATCH_STR
|
MATCH_STR
|
||||||
"Match BGP community list\n"
|
"Match BGP community list\n"
|
||||||
"Community-list number (standard)\n"
|
"Community-list number (standard)\n"
|
||||||
@ -2424,7 +2424,7 @@ DEFUN (match_community,
|
|||||||
|
|
||||||
DEFUN (match_community_exact,
|
DEFUN (match_community_exact,
|
||||||
match_community_exact_cmd,
|
match_community_exact_cmd,
|
||||||
"match community (<1-99>|<100-199>|WORD) exact-match",
|
"match community (<1-99>|<100-500>|WORD) exact-match",
|
||||||
MATCH_STR
|
MATCH_STR
|
||||||
"Match BGP community list\n"
|
"Match BGP community list\n"
|
||||||
"Community-list number (standard)\n"
|
"Community-list number (standard)\n"
|
||||||
@ -2459,7 +2459,7 @@ DEFUN (no_match_community,
|
|||||||
|
|
||||||
ALIAS (no_match_community,
|
ALIAS (no_match_community,
|
||||||
no_match_community_val_cmd,
|
no_match_community_val_cmd,
|
||||||
"no match community (<1-99>|<100-199>|WORD)",
|
"no match community (<1-99>|<100-500>|WORD)",
|
||||||
NO_STR
|
NO_STR
|
||||||
MATCH_STR
|
MATCH_STR
|
||||||
"Match BGP community list\n"
|
"Match BGP community list\n"
|
||||||
@ -2469,7 +2469,7 @@ ALIAS (no_match_community,
|
|||||||
|
|
||||||
ALIAS (no_match_community,
|
ALIAS (no_match_community,
|
||||||
no_match_community_exact_cmd,
|
no_match_community_exact_cmd,
|
||||||
"no match community (<1-99>|<100-199>|WORD) exact-match",
|
"no match community (<1-99>|<100-500>|WORD) exact-match",
|
||||||
NO_STR
|
NO_STR
|
||||||
MATCH_STR
|
MATCH_STR
|
||||||
"Match BGP community list\n"
|
"Match BGP community list\n"
|
||||||
@ -2480,7 +2480,7 @@ ALIAS (no_match_community,
|
|||||||
|
|
||||||
DEFUN (match_ecommunity,
|
DEFUN (match_ecommunity,
|
||||||
match_ecommunity_cmd,
|
match_ecommunity_cmd,
|
||||||
"match extcommunity (<1-99>|<100-199>|WORD)",
|
"match extcommunity (<1-99>|<100-500>|WORD)",
|
||||||
MATCH_STR
|
MATCH_STR
|
||||||
"Match BGP/VPN extended community list\n"
|
"Match BGP/VPN extended community list\n"
|
||||||
"Extended community-list number (standard)\n"
|
"Extended community-list number (standard)\n"
|
||||||
@ -2502,7 +2502,7 @@ DEFUN (no_match_ecommunity,
|
|||||||
|
|
||||||
ALIAS (no_match_ecommunity,
|
ALIAS (no_match_ecommunity,
|
||||||
no_match_ecommunity_val_cmd,
|
no_match_ecommunity_val_cmd,
|
||||||
"no match extcommunity (<1-99>|<100-199>|WORD)",
|
"no match extcommunity (<1-99>|<100-500>|WORD)",
|
||||||
NO_STR
|
NO_STR
|
||||||
MATCH_STR
|
MATCH_STR
|
||||||
"Match BGP/VPN extended community list\n"
|
"Match BGP/VPN extended community list\n"
|
||||||
@ -2913,7 +2913,7 @@ ALIAS (no_set_community,
|
|||||||
|
|
||||||
DEFUN (set_community_delete,
|
DEFUN (set_community_delete,
|
||||||
set_community_delete_cmd,
|
set_community_delete_cmd,
|
||||||
"set comm-list (<1-99>|<100-199>|WORD) delete",
|
"set comm-list (<1-99>|<100-500>|WORD) delete",
|
||||||
SET_STR
|
SET_STR
|
||||||
"set BGP community list (for deletion)\n"
|
"set BGP community list (for deletion)\n"
|
||||||
"Community-list number (standard)\n"
|
"Community-list number (standard)\n"
|
||||||
@ -2945,7 +2945,7 @@ DEFUN (no_set_community_delete,
|
|||||||
|
|
||||||
ALIAS (no_set_community_delete,
|
ALIAS (no_set_community_delete,
|
||||||
no_set_community_delete_val_cmd,
|
no_set_community_delete_val_cmd,
|
||||||
"no set comm-list (<1-99>|<100-199>|WORD) delete",
|
"no set comm-list (<1-99>|<100-500>|WORD) delete",
|
||||||
NO_STR
|
NO_STR
|
||||||
SET_STR
|
SET_STR
|
||||||
"set BGP community list (for deletion)\n"
|
"set BGP community list (for deletion)\n"
|
||||||
|
274
bgpd/bgp_vty.c
274
bgpd/bgp_vty.c
@ -9597,52 +9597,40 @@ community_list_set_vty (struct vty *vty, int argc, const char **argv,
|
|||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Community-list delete with name. */
|
|
||||||
int
|
|
||||||
community_list_unset_all_vty (struct vty *vty, const char *name)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = community_list_unset (bgp_clist, name, NULL, 0, COMMUNITY_LIST_AUTO);
|
|
||||||
|
|
||||||
if (ret < 0)
|
|
||||||
{
|
|
||||||
community_list_perror (vty, ret);
|
|
||||||
return CMD_WARNING;
|
|
||||||
}
|
|
||||||
return CMD_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Communiyt-list entry delete. */
|
/* Communiyt-list entry delete. */
|
||||||
int
|
int
|
||||||
community_list_unset_vty (struct vty *vty, int argc, const char **argv,
|
community_list_unset_vty (struct vty *vty, int argc, const char **argv,
|
||||||
int style)
|
int style)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
int direct;
|
int direct = 0;
|
||||||
char *str;
|
char *str = NULL;
|
||||||
|
|
||||||
/* Check the list direct. */
|
if (argc > 1)
|
||||||
if (strncmp (argv[1], "p", 1) == 0)
|
|
||||||
direct = COMMUNITY_PERMIT;
|
|
||||||
else if (strncmp (argv[1], "d", 1) == 0)
|
|
||||||
direct = COMMUNITY_DENY;
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
vty_out (vty, "%% Matching condition must be permit or deny%s",
|
/* Check the list direct. */
|
||||||
VTY_NEWLINE);
|
if (strncmp (argv[1], "p", 1) == 0)
|
||||||
return CMD_WARNING;
|
direct = COMMUNITY_PERMIT;
|
||||||
}
|
else if (strncmp (argv[1], "d", 1) == 0)
|
||||||
|
direct = COMMUNITY_DENY;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vty_out (vty, "%% Matching condition must be permit or deny%s",
|
||||||
|
VTY_NEWLINE);
|
||||||
|
return CMD_WARNING;
|
||||||
|
}
|
||||||
|
|
||||||
/* Concat community string argument. */
|
/* Concat community string argument. */
|
||||||
str = argv_concat (argv, argc, 2);
|
str = argv_concat (argv, argc, 2);
|
||||||
|
}
|
||||||
|
|
||||||
/* Unset community list. */
|
/* Unset community list. */
|
||||||
ret = community_list_unset (bgp_clist, argv[0], str, direct, style);
|
ret = community_list_unset (bgp_clist, argv[0], str, direct, style);
|
||||||
|
|
||||||
/* Free temporary community list string allocated by
|
/* Free temporary community list string allocated by
|
||||||
argv_concat(). */
|
argv_concat(). */
|
||||||
XFREE (MTYPE_TMP, str);
|
if (str)
|
||||||
|
XFREE (MTYPE_TMP, str);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
@ -9657,19 +9645,6 @@ community_list_unset_vty (struct vty *vty, int argc, const char **argv,
|
|||||||
#define COMMUNITY_LIST_STR "Add a community list entry\n"
|
#define COMMUNITY_LIST_STR "Add a community list entry\n"
|
||||||
#define COMMUNITY_VAL_STR "Community number in aa:nn format or internet|local-AS|no-advertise|no-export\n"
|
#define COMMUNITY_VAL_STR "Community number in aa:nn format or internet|local-AS|no-advertise|no-export\n"
|
||||||
|
|
||||||
DEFUN (ip_community_list,
|
|
||||||
ip_community_list_cmd,
|
|
||||||
"ip community-list WORD (deny|permit) .AA:NN",
|
|
||||||
IP_STR
|
|
||||||
COMMUNITY_LIST_STR
|
|
||||||
"Community list name\n"
|
|
||||||
"Specify community to reject\n"
|
|
||||||
"Specify community to accept\n"
|
|
||||||
COMMUNITY_VAL_STR)
|
|
||||||
{
|
|
||||||
return community_list_set_vty (vty, argc, argv, COMMUNITY_LIST_AUTO, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFUN (ip_community_list_standard,
|
DEFUN (ip_community_list_standard,
|
||||||
ip_community_list_standard_cmd,
|
ip_community_list_standard_cmd,
|
||||||
"ip community-list <1-99> (deny|permit) .AA:NN",
|
"ip community-list <1-99> (deny|permit) .AA:NN",
|
||||||
@ -9694,7 +9669,7 @@ ALIAS (ip_community_list_standard,
|
|||||||
|
|
||||||
DEFUN (ip_community_list_expanded,
|
DEFUN (ip_community_list_expanded,
|
||||||
ip_community_list_expanded_cmd,
|
ip_community_list_expanded_cmd,
|
||||||
"ip community-list <100-199> (deny|permit) .LINE",
|
"ip community-list <100-500> (deny|permit) .LINE",
|
||||||
IP_STR
|
IP_STR
|
||||||
COMMUNITY_LIST_STR
|
COMMUNITY_LIST_STR
|
||||||
"Community list number (expanded)\n"
|
"Community list number (expanded)\n"
|
||||||
@ -9743,44 +9718,50 @@ DEFUN (ip_community_list_name_expanded,
|
|||||||
return community_list_set_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED, 1);
|
return community_list_set_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (no_ip_community_list_all,
|
DEFUN (no_ip_community_list_standard_all,
|
||||||
no_ip_community_list_all_cmd,
|
no_ip_community_list_standard_all_cmd,
|
||||||
"no ip community-list (WORD|<1-99>|<100-199>)",
|
"no ip community-list <1-99>",
|
||||||
NO_STR
|
NO_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
COMMUNITY_LIST_STR
|
COMMUNITY_LIST_STR
|
||||||
"Community list name\n"
|
"Community list number (standard)\n")
|
||||||
"Community list number (standard)\n"
|
|
||||||
"Community list number (expanded)\n")
|
|
||||||
{
|
{
|
||||||
return community_list_unset_all_vty (vty, argv[0]);
|
return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (no_ip_community_list_name_all,
|
DEFUN (no_ip_community_list_expanded_all,
|
||||||
no_ip_community_list_name_all_cmd,
|
no_ip_community_list_expanded_all_cmd,
|
||||||
"no ip community-list (standard|expanded) WORD",
|
"no ip community-list <100-500>",
|
||||||
|
NO_STR
|
||||||
|
IP_STR
|
||||||
|
COMMUNITY_LIST_STR
|
||||||
|
"Community list number (expanded)\n")
|
||||||
|
{
|
||||||
|
return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFUN (no_ip_community_list_name_standard_all,
|
||||||
|
no_ip_community_list_name_standard_all_cmd,
|
||||||
|
"no ip community-list standard WORD",
|
||||||
NO_STR
|
NO_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
COMMUNITY_LIST_STR
|
COMMUNITY_LIST_STR
|
||||||
"Add a standard community-list entry\n"
|
"Add a standard community-list entry\n"
|
||||||
"Add an expanded community-list entry\n"
|
|
||||||
"Community list name\n")
|
"Community list name\n")
|
||||||
{
|
{
|
||||||
return community_list_unset_all_vty (vty, argv[1]);
|
return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_STANDARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (no_ip_community_list,
|
DEFUN (no_ip_community_list_name_expanded_all,
|
||||||
no_ip_community_list_cmd,
|
no_ip_community_list_name_expanded_all_cmd,
|
||||||
"no ip community-list WORD (deny|permit) .AA:NN",
|
"no ip community-list expanded WORD",
|
||||||
NO_STR
|
NO_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
COMMUNITY_LIST_STR
|
COMMUNITY_LIST_STR
|
||||||
"Community list name\n"
|
"Add an expanded community-list entry\n"
|
||||||
"Specify community to reject\n"
|
"Community list name\n")
|
||||||
"Specify community to accept\n"
|
|
||||||
COMMUNITY_VAL_STR)
|
|
||||||
{
|
{
|
||||||
return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_AUTO);
|
return community_list_unset_vty (vty, argc, argv, COMMUNITY_LIST_EXPANDED);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (no_ip_community_list_standard,
|
DEFUN (no_ip_community_list_standard,
|
||||||
@ -9799,7 +9780,7 @@ DEFUN (no_ip_community_list_standard,
|
|||||||
|
|
||||||
DEFUN (no_ip_community_list_expanded,
|
DEFUN (no_ip_community_list_expanded,
|
||||||
no_ip_community_list_expanded_cmd,
|
no_ip_community_list_expanded_cmd,
|
||||||
"no ip community-list <100-199> (deny|permit) .LINE",
|
"no ip community-list <100-500> (deny|permit) .LINE",
|
||||||
NO_STR
|
NO_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
COMMUNITY_LIST_STR
|
COMMUNITY_LIST_STR
|
||||||
@ -9883,7 +9864,7 @@ DEFUN (show_ip_community_list,
|
|||||||
struct community_list *list;
|
struct community_list *list;
|
||||||
struct community_list_master *cm;
|
struct community_list_master *cm;
|
||||||
|
|
||||||
cm = community_list_master_lookup (bgp_clist, COMMUNITY_LIST_AUTO);
|
cm = community_list_master_lookup (bgp_clist, COMMUNITY_LIST_MASTER);
|
||||||
if (! cm)
|
if (! cm)
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
|
|
||||||
@ -9898,7 +9879,7 @@ DEFUN (show_ip_community_list,
|
|||||||
|
|
||||||
DEFUN (show_ip_community_list_arg,
|
DEFUN (show_ip_community_list_arg,
|
||||||
show_ip_community_list_arg_cmd,
|
show_ip_community_list_arg_cmd,
|
||||||
"show ip community-list (<1-199>|WORD)",
|
"show ip community-list (<1-500>|WORD)",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
"List community-list\n"
|
"List community-list\n"
|
||||||
@ -9907,7 +9888,7 @@ DEFUN (show_ip_community_list_arg,
|
|||||||
{
|
{
|
||||||
struct community_list *list;
|
struct community_list *list;
|
||||||
|
|
||||||
list = community_list_lookup (bgp_clist, argv[0], COMMUNITY_LIST_AUTO);
|
list = community_list_lookup (bgp_clist, argv[0], COMMUNITY_LIST_MASTER);
|
||||||
if (! list)
|
if (! list)
|
||||||
{
|
{
|
||||||
vty_out (vty, "%% Can't find communit-list%s", VTY_NEWLINE);
|
vty_out (vty, "%% Can't find communit-list%s", VTY_NEWLINE);
|
||||||
@ -9968,49 +9949,38 @@ extcommunity_list_set_vty (struct vty *vty, int argc, const char **argv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
extcommunity_list_unset_all_vty (struct vty *vty, const char *name)
|
extcommunity_list_unset_vty (struct vty *vty, int argc, const char **argv,
|
||||||
|
int style)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
int direct = 0;
|
||||||
|
char *str = NULL;
|
||||||
|
|
||||||
ret = extcommunity_list_unset (bgp_clist, name, NULL, 0, EXTCOMMUNITY_LIST_AUTO);
|
if (argc > 1)
|
||||||
|
|
||||||
if (ret < 0)
|
|
||||||
{
|
{
|
||||||
community_list_perror (vty, ret);
|
/* Check the list direct. */
|
||||||
return CMD_WARNING;
|
if (strncmp (argv[1], "p", 1) == 0)
|
||||||
|
direct = COMMUNITY_PERMIT;
|
||||||
|
else if (strncmp (argv[1], "d", 1) == 0)
|
||||||
|
direct = COMMUNITY_DENY;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vty_out (vty, "%% Matching condition must be permit or deny%s",
|
||||||
|
VTY_NEWLINE);
|
||||||
|
return CMD_WARNING;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Concat community string argument. */
|
||||||
|
str = argv_concat (argv, argc, 2);
|
||||||
}
|
}
|
||||||
return CMD_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
extcommunity_list_unset_vty (struct vty *vty, int argc, const char **argv,
|
|
||||||
int style)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
int direct;
|
|
||||||
char *str;
|
|
||||||
|
|
||||||
/* Check the list direct. */
|
|
||||||
if (strncmp (argv[1], "p", 1) == 0)
|
|
||||||
direct = COMMUNITY_PERMIT;
|
|
||||||
else if (strncmp (argv[1], "d", 1) == 0)
|
|
||||||
direct = COMMUNITY_DENY;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vty_out (vty, "%% Matching condition must be permit or deny%s",
|
|
||||||
VTY_NEWLINE);
|
|
||||||
return CMD_WARNING;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Concat community string argument. */
|
|
||||||
str = argv_concat (argv, argc, 2);
|
|
||||||
|
|
||||||
/* Unset community list. */
|
/* Unset community list. */
|
||||||
ret = extcommunity_list_unset (bgp_clist, argv[0], str, direct, style);
|
ret = extcommunity_list_unset (bgp_clist, argv[0], str, direct, style);
|
||||||
|
|
||||||
/* Free temporary community list string allocated by
|
/* Free temporary community list string allocated by
|
||||||
argv_concat(). */
|
argv_concat(). */
|
||||||
XFREE (MTYPE_TMP, str);
|
if (str)
|
||||||
|
XFREE (MTYPE_TMP, str);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
@ -10049,7 +10019,7 @@ ALIAS (ip_extcommunity_list_standard,
|
|||||||
|
|
||||||
DEFUN (ip_extcommunity_list_expanded,
|
DEFUN (ip_extcommunity_list_expanded,
|
||||||
ip_extcommunity_list_expanded_cmd,
|
ip_extcommunity_list_expanded_cmd,
|
||||||
"ip extcommunity-list <100-199> (deny|permit) .LINE",
|
"ip extcommunity-list <100-500> (deny|permit) .LINE",
|
||||||
IP_STR
|
IP_STR
|
||||||
EXTCOMMUNITY_LIST_STR
|
EXTCOMMUNITY_LIST_STR
|
||||||
"Extended Community list number (expanded)\n"
|
"Extended Community list number (expanded)\n"
|
||||||
@ -10098,29 +10068,50 @@ DEFUN (ip_extcommunity_list_name_expanded,
|
|||||||
return extcommunity_list_set_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED, 1);
|
return extcommunity_list_set_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (no_ip_extcommunity_list_all,
|
DEFUN (no_ip_extcommunity_list_standard_all,
|
||||||
no_ip_extcommunity_list_all_cmd,
|
no_ip_extcommunity_list_standard_all_cmd,
|
||||||
"no ip extcommunity-list (<1-99>|<100-199>)",
|
"no ip extcommunity-list <1-99>",
|
||||||
NO_STR
|
NO_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
EXTCOMMUNITY_LIST_STR
|
EXTCOMMUNITY_LIST_STR
|
||||||
"Extended Community list number (standard)\n"
|
"Extended Community list number (standard)\n")
|
||||||
"Extended Community list number (expanded)\n")
|
|
||||||
{
|
{
|
||||||
return extcommunity_list_unset_all_vty (vty, argv[0]);
|
return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (no_ip_extcommunity_list_name_all,
|
DEFUN (no_ip_extcommunity_list_expanded_all,
|
||||||
no_ip_extcommunity_list_name_all_cmd,
|
no_ip_extcommunity_list_expanded_all_cmd,
|
||||||
"no ip extcommunity-list (standard|expanded) WORD",
|
"no ip extcommunity-list <100-500>",
|
||||||
|
NO_STR
|
||||||
|
IP_STR
|
||||||
|
EXTCOMMUNITY_LIST_STR
|
||||||
|
"Extended Community list number (expanded)\n")
|
||||||
|
{
|
||||||
|
return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFUN (no_ip_extcommunity_list_name_standard_all,
|
||||||
|
no_ip_extcommunity_list_name_standard_all_cmd,
|
||||||
|
"no ip extcommunity-list standard WORD",
|
||||||
NO_STR
|
NO_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
EXTCOMMUNITY_LIST_STR
|
EXTCOMMUNITY_LIST_STR
|
||||||
"Specify standard extcommunity-list\n"
|
"Specify standard extcommunity-list\n"
|
||||||
|
"Extended Community list name\n")
|
||||||
|
{
|
||||||
|
return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_STANDARD);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFUN (no_ip_extcommunity_list_name_expanded_all,
|
||||||
|
no_ip_extcommunity_list_name_expanded_all_cmd,
|
||||||
|
"no ip extcommunity-list expanded WORD",
|
||||||
|
NO_STR
|
||||||
|
IP_STR
|
||||||
|
EXTCOMMUNITY_LIST_STR
|
||||||
"Specify expanded extcommunity-list\n"
|
"Specify expanded extcommunity-list\n"
|
||||||
"Extended Community list name\n")
|
"Extended Community list name\n")
|
||||||
{
|
{
|
||||||
return extcommunity_list_unset_all_vty (vty, argv[1]);
|
return extcommunity_list_unset_vty (vty, argc, argv, EXTCOMMUNITY_LIST_EXPANDED);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (no_ip_extcommunity_list_standard,
|
DEFUN (no_ip_extcommunity_list_standard,
|
||||||
@ -10139,7 +10130,7 @@ DEFUN (no_ip_extcommunity_list_standard,
|
|||||||
|
|
||||||
DEFUN (no_ip_extcommunity_list_expanded,
|
DEFUN (no_ip_extcommunity_list_expanded,
|
||||||
no_ip_extcommunity_list_expanded_cmd,
|
no_ip_extcommunity_list_expanded_cmd,
|
||||||
"no ip extcommunity-list <100-199> (deny|permit) .LINE",
|
"no ip extcommunity-list <100-500> (deny|permit) .LINE",
|
||||||
NO_STR
|
NO_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
EXTCOMMUNITY_LIST_STR
|
EXTCOMMUNITY_LIST_STR
|
||||||
@ -10223,7 +10214,7 @@ DEFUN (show_ip_extcommunity_list,
|
|||||||
struct community_list *list;
|
struct community_list *list;
|
||||||
struct community_list_master *cm;
|
struct community_list_master *cm;
|
||||||
|
|
||||||
cm = community_list_master_lookup (bgp_clist, EXTCOMMUNITY_LIST_AUTO);
|
cm = community_list_master_lookup (bgp_clist, EXTCOMMUNITY_LIST_MASTER);
|
||||||
if (! cm)
|
if (! cm)
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
|
|
||||||
@ -10238,7 +10229,7 @@ DEFUN (show_ip_extcommunity_list,
|
|||||||
|
|
||||||
DEFUN (show_ip_extcommunity_list_arg,
|
DEFUN (show_ip_extcommunity_list_arg,
|
||||||
show_ip_extcommunity_list_arg_cmd,
|
show_ip_extcommunity_list_arg_cmd,
|
||||||
"show ip extcommunity-list (<1-199>|WORD)",
|
"show ip extcommunity-list (<1-500>|WORD)",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
"List extended-community list\n"
|
"List extended-community list\n"
|
||||||
@ -10247,7 +10238,7 @@ DEFUN (show_ip_extcommunity_list_arg,
|
|||||||
{
|
{
|
||||||
struct community_list *list;
|
struct community_list *list;
|
||||||
|
|
||||||
list = community_list_lookup (bgp_clist, argv[0], EXTCOMMUNITY_LIST_AUTO);
|
list = community_list_lookup (bgp_clist, argv[0], EXTCOMMUNITY_LIST_MASTER);
|
||||||
if (! list)
|
if (! list)
|
||||||
{
|
{
|
||||||
vty_out (vty, "%% Can't find extcommunit-list%s", VTY_NEWLINE);
|
vty_out (vty, "%% Can't find extcommunit-list%s", VTY_NEWLINE);
|
||||||
@ -10287,23 +10278,15 @@ community_list_config_write (struct vty *vty)
|
|||||||
int write = 0;
|
int write = 0;
|
||||||
|
|
||||||
/* Community-list. */
|
/* Community-list. */
|
||||||
cm = community_list_master_lookup (bgp_clist, COMMUNITY_LIST_AUTO);
|
cm = community_list_master_lookup (bgp_clist, COMMUNITY_LIST_MASTER);
|
||||||
|
|
||||||
for (list = cm->num.head; list; list = list->next)
|
for (list = cm->num.head; list; list = list->next)
|
||||||
for (entry = list->head; entry; entry = entry->next)
|
for (entry = list->head; entry; entry = entry->next)
|
||||||
{
|
{
|
||||||
if (atol (list->name) < 200)
|
vty_out (vty, "ip community-list %s %s %s%s",
|
||||||
vty_out (vty, "ip community-list %s %s %s%s",
|
list->name, community_direct_str (entry->direct),
|
||||||
list->name, community_direct_str (entry->direct),
|
community_list_config_str (entry),
|
||||||
community_list_config_str (entry),
|
VTY_NEWLINE);
|
||||||
VTY_NEWLINE);
|
|
||||||
else
|
|
||||||
vty_out (vty, "ip community-list %s %s %s %s%s",
|
|
||||||
entry->style == COMMUNITY_LIST_STANDARD
|
|
||||||
? "standard" : "expanded",
|
|
||||||
list->name, community_direct_str (entry->direct),
|
|
||||||
community_list_config_str (entry),
|
|
||||||
VTY_NEWLINE);
|
|
||||||
write++;
|
write++;
|
||||||
}
|
}
|
||||||
for (list = cm->str.head; list; list = list->next)
|
for (list = cm->str.head; list; list = list->next)
|
||||||
@ -10319,21 +10302,14 @@ community_list_config_write (struct vty *vty)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Extcommunity-list. */
|
/* Extcommunity-list. */
|
||||||
cm = community_list_master_lookup (bgp_clist, EXTCOMMUNITY_LIST_AUTO);
|
cm = community_list_master_lookup (bgp_clist, EXTCOMMUNITY_LIST_MASTER);
|
||||||
|
|
||||||
for (list = cm->num.head; list; list = list->next)
|
for (list = cm->num.head; list; list = list->next)
|
||||||
for (entry = list->head; entry; entry = entry->next)
|
for (entry = list->head; entry; entry = entry->next)
|
||||||
{
|
{
|
||||||
if (atol (list->name) < 200)
|
vty_out (vty, "ip extcommunity-list %s %s %s%s",
|
||||||
vty_out (vty, "ip extcommunity-list %s %s %s%s",
|
list->name, community_direct_str (entry->direct),
|
||||||
list->name, community_direct_str (entry->direct),
|
community_list_config_str (entry), VTY_NEWLINE);
|
||||||
community_list_config_str (entry), VTY_NEWLINE);
|
|
||||||
else
|
|
||||||
vty_out (vty, "ip extcommunity-list %s %s %s %s%s",
|
|
||||||
entry->style == EXTCOMMUNITY_LIST_STANDARD
|
|
||||||
? "standard" : "expanded",
|
|
||||||
list->name, community_direct_str (entry->direct),
|
|
||||||
community_list_config_str (entry), VTY_NEWLINE);
|
|
||||||
write++;
|
write++;
|
||||||
}
|
}
|
||||||
for (list = cm->str.head; list; list = list->next)
|
for (list = cm->str.head; list; list = list->next)
|
||||||
@ -10362,16 +10338,16 @@ community_list_vty ()
|
|||||||
install_node (&community_list_node, community_list_config_write);
|
install_node (&community_list_node, community_list_config_write);
|
||||||
|
|
||||||
/* Community-list. */
|
/* Community-list. */
|
||||||
install_element (CONFIG_NODE, &ip_community_list_cmd);
|
|
||||||
install_element (CONFIG_NODE, &ip_community_list_standard_cmd);
|
install_element (CONFIG_NODE, &ip_community_list_standard_cmd);
|
||||||
install_element (CONFIG_NODE, &ip_community_list_standard2_cmd);
|
install_element (CONFIG_NODE, &ip_community_list_standard2_cmd);
|
||||||
install_element (CONFIG_NODE, &ip_community_list_expanded_cmd);
|
install_element (CONFIG_NODE, &ip_community_list_expanded_cmd);
|
||||||
install_element (CONFIG_NODE, &ip_community_list_name_standard_cmd);
|
install_element (CONFIG_NODE, &ip_community_list_name_standard_cmd);
|
||||||
install_element (CONFIG_NODE, &ip_community_list_name_standard2_cmd);
|
install_element (CONFIG_NODE, &ip_community_list_name_standard2_cmd);
|
||||||
install_element (CONFIG_NODE, &ip_community_list_name_expanded_cmd);
|
install_element (CONFIG_NODE, &ip_community_list_name_expanded_cmd);
|
||||||
install_element (CONFIG_NODE, &no_ip_community_list_all_cmd);
|
install_element (CONFIG_NODE, &no_ip_community_list_standard_all_cmd);
|
||||||
install_element (CONFIG_NODE, &no_ip_community_list_name_all_cmd);
|
install_element (CONFIG_NODE, &no_ip_community_list_expanded_all_cmd);
|
||||||
install_element (CONFIG_NODE, &no_ip_community_list_cmd);
|
install_element (CONFIG_NODE, &no_ip_community_list_name_standard_all_cmd);
|
||||||
|
install_element (CONFIG_NODE, &no_ip_community_list_name_expanded_all_cmd);
|
||||||
install_element (CONFIG_NODE, &no_ip_community_list_standard_cmd);
|
install_element (CONFIG_NODE, &no_ip_community_list_standard_cmd);
|
||||||
install_element (CONFIG_NODE, &no_ip_community_list_expanded_cmd);
|
install_element (CONFIG_NODE, &no_ip_community_list_expanded_cmd);
|
||||||
install_element (CONFIG_NODE, &no_ip_community_list_name_standard_cmd);
|
install_element (CONFIG_NODE, &no_ip_community_list_name_standard_cmd);
|
||||||
@ -10388,8 +10364,10 @@ community_list_vty ()
|
|||||||
install_element (CONFIG_NODE, &ip_extcommunity_list_name_standard_cmd);
|
install_element (CONFIG_NODE, &ip_extcommunity_list_name_standard_cmd);
|
||||||
install_element (CONFIG_NODE, &ip_extcommunity_list_name_standard2_cmd);
|
install_element (CONFIG_NODE, &ip_extcommunity_list_name_standard2_cmd);
|
||||||
install_element (CONFIG_NODE, &ip_extcommunity_list_name_expanded_cmd);
|
install_element (CONFIG_NODE, &ip_extcommunity_list_name_expanded_cmd);
|
||||||
install_element (CONFIG_NODE, &no_ip_extcommunity_list_all_cmd);
|
install_element (CONFIG_NODE, &no_ip_extcommunity_list_standard_all_cmd);
|
||||||
install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_all_cmd);
|
install_element (CONFIG_NODE, &no_ip_extcommunity_list_expanded_all_cmd);
|
||||||
|
install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_standard_all_cmd);
|
||||||
|
install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_expanded_all_cmd);
|
||||||
install_element (CONFIG_NODE, &no_ip_extcommunity_list_standard_cmd);
|
install_element (CONFIG_NODE, &no_ip_extcommunity_list_standard_cmd);
|
||||||
install_element (CONFIG_NODE, &no_ip_extcommunity_list_expanded_cmd);
|
install_element (CONFIG_NODE, &no_ip_extcommunity_list_expanded_cmd);
|
||||||
install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_standard_cmd);
|
install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_standard_cmd);
|
||||||
|
Loading…
Reference in New Issue
Block a user