mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-12 11:18:59 +00:00
Merge pull request #2304 from ppmathis/enhancement/bgp-pg-overrides
bgpd: Add proper support for overriding peer-group AF-flags/filters
This commit is contained in:
commit
483e5a3aa5
@ -4075,6 +4075,7 @@ DEFUN (neighbor_send_community,
|
|||||||
"Send Community attribute to this neighbor\n")
|
"Send Community attribute to this neighbor\n")
|
||||||
{
|
{
|
||||||
int idx_peer = 1;
|
int idx_peer = 1;
|
||||||
|
|
||||||
return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
|
return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
|
||||||
bgp_node_safi(vty),
|
bgp_node_safi(vty),
|
||||||
PEER_FLAG_SEND_COMMUNITY);
|
PEER_FLAG_SEND_COMMUNITY);
|
||||||
@ -4094,6 +4095,7 @@ DEFUN (no_neighbor_send_community,
|
|||||||
"Send Community attribute to this neighbor\n")
|
"Send Community attribute to this neighbor\n")
|
||||||
{
|
{
|
||||||
int idx_peer = 2;
|
int idx_peer = 2;
|
||||||
|
|
||||||
return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
|
return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
|
||||||
bgp_node_afi(vty), bgp_node_safi(vty),
|
bgp_node_afi(vty), bgp_node_safi(vty),
|
||||||
PEER_FLAG_SEND_COMMUNITY);
|
PEER_FLAG_SEND_COMMUNITY);
|
||||||
@ -4117,27 +4119,26 @@ DEFUN (neighbor_send_community_type,
|
|||||||
"Send Standard Community attributes\n"
|
"Send Standard Community attributes\n"
|
||||||
"Send Large Community attributes\n")
|
"Send Large Community attributes\n")
|
||||||
{
|
{
|
||||||
int idx = 0;
|
int idx_peer = 1;
|
||||||
uint32_t flag = 0;
|
uint32_t flag = 0;
|
||||||
|
const char *type = argv[argc - 1]->text;
|
||||||
|
|
||||||
char *peer = argv[1]->arg;
|
if (strmatch(type, "standard")) {
|
||||||
|
|
||||||
if (argv_find(argv, argc, "standard", &idx))
|
|
||||||
SET_FLAG(flag, PEER_FLAG_SEND_COMMUNITY);
|
SET_FLAG(flag, PEER_FLAG_SEND_COMMUNITY);
|
||||||
else if (argv_find(argv, argc, "extended", &idx))
|
} else if (strmatch(type, "extended")) {
|
||||||
SET_FLAG(flag, PEER_FLAG_SEND_EXT_COMMUNITY);
|
SET_FLAG(flag, PEER_FLAG_SEND_EXT_COMMUNITY);
|
||||||
else if (argv_find(argv, argc, "large", &idx))
|
} else if (strmatch(type, "large")) {
|
||||||
SET_FLAG(flag, PEER_FLAG_SEND_LARGE_COMMUNITY);
|
SET_FLAG(flag, PEER_FLAG_SEND_LARGE_COMMUNITY);
|
||||||
else if (argv_find(argv, argc, "both", &idx)) {
|
} else if (strmatch(type, "both")) {
|
||||||
SET_FLAG(flag, PEER_FLAG_SEND_COMMUNITY);
|
SET_FLAG(flag, PEER_FLAG_SEND_COMMUNITY);
|
||||||
SET_FLAG(flag, PEER_FLAG_SEND_EXT_COMMUNITY);
|
SET_FLAG(flag, PEER_FLAG_SEND_EXT_COMMUNITY);
|
||||||
} else {
|
} else { /* if (strmatch(type, "all")) */
|
||||||
SET_FLAG(flag, PEER_FLAG_SEND_COMMUNITY);
|
SET_FLAG(flag, PEER_FLAG_SEND_COMMUNITY);
|
||||||
SET_FLAG(flag, PEER_FLAG_SEND_EXT_COMMUNITY);
|
SET_FLAG(flag, PEER_FLAG_SEND_EXT_COMMUNITY);
|
||||||
SET_FLAG(flag, PEER_FLAG_SEND_LARGE_COMMUNITY);
|
SET_FLAG(flag, PEER_FLAG_SEND_LARGE_COMMUNITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
return peer_af_flag_set_vty(vty, peer, bgp_node_afi(vty),
|
return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
|
||||||
bgp_node_safi(vty), flag);
|
bgp_node_safi(vty), flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4166,33 +4167,27 @@ DEFUN (no_neighbor_send_community_type,
|
|||||||
"Send Large Community attributes\n")
|
"Send Large Community attributes\n")
|
||||||
{
|
{
|
||||||
int idx_peer = 2;
|
int idx_peer = 2;
|
||||||
|
uint32_t flag = 0;
|
||||||
const char *type = argv[argc - 1]->text;
|
const char *type = argv[argc - 1]->text;
|
||||||
|
|
||||||
if (strmatch(type, "standard"))
|
if (strmatch(type, "standard")) {
|
||||||
return peer_af_flag_unset_vty(
|
SET_FLAG(flag, PEER_FLAG_SEND_COMMUNITY);
|
||||||
vty, argv[idx_peer]->arg, bgp_node_afi(vty),
|
} else if (strmatch(type, "extended")) {
|
||||||
bgp_node_safi(vty), PEER_FLAG_SEND_COMMUNITY);
|
SET_FLAG(flag, PEER_FLAG_SEND_EXT_COMMUNITY);
|
||||||
if (strmatch(type, "extended"))
|
} else if (strmatch(type, "large")) {
|
||||||
return peer_af_flag_unset_vty(
|
SET_FLAG(flag, PEER_FLAG_SEND_LARGE_COMMUNITY);
|
||||||
vty, argv[idx_peer]->arg, bgp_node_afi(vty),
|
} else if (strmatch(type, "both")) {
|
||||||
bgp_node_safi(vty), PEER_FLAG_SEND_EXT_COMMUNITY);
|
SET_FLAG(flag, PEER_FLAG_SEND_COMMUNITY);
|
||||||
if (strmatch(type, "large"))
|
SET_FLAG(flag, PEER_FLAG_SEND_EXT_COMMUNITY);
|
||||||
return peer_af_flag_unset_vty(
|
} else { /* if (strmatch(type, "all")) */
|
||||||
vty, argv[idx_peer]->arg, bgp_node_afi(vty),
|
SET_FLAG(flag, PEER_FLAG_SEND_COMMUNITY);
|
||||||
bgp_node_safi(vty), PEER_FLAG_SEND_LARGE_COMMUNITY);
|
SET_FLAG(flag, PEER_FLAG_SEND_EXT_COMMUNITY);
|
||||||
if (strmatch(type, "both"))
|
SET_FLAG(flag, PEER_FLAG_SEND_LARGE_COMMUNITY);
|
||||||
return peer_af_flag_unset_vty(
|
}
|
||||||
vty, argv[idx_peer]->arg, bgp_node_afi(vty),
|
|
||||||
bgp_node_safi(vty),
|
|
||||||
PEER_FLAG_SEND_COMMUNITY
|
|
||||||
| PEER_FLAG_SEND_EXT_COMMUNITY);
|
|
||||||
|
|
||||||
/* if (strmatch (type, "all")) */
|
return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
|
||||||
return peer_af_flag_unset_vty(
|
bgp_node_afi(vty), bgp_node_safi(vty),
|
||||||
vty, argv[idx_peer]->arg, bgp_node_afi(vty), bgp_node_safi(vty),
|
flag);
|
||||||
(PEER_FLAG_SEND_COMMUNITY | PEER_FLAG_SEND_EXT_COMMUNITY
|
|
||||||
| PEER_FLAG_SEND_LARGE_COMMUNITY));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ALIAS_HIDDEN(
|
ALIAS_HIDDEN(
|
||||||
@ -5362,8 +5357,8 @@ static int peer_prefix_list_set_vty(struct vty *vty, const char *ip_str,
|
|||||||
const char *direct_str)
|
const char *direct_str)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct peer *peer;
|
|
||||||
int direct = FILTER_IN;
|
int direct = FILTER_IN;
|
||||||
|
struct peer *peer;
|
||||||
|
|
||||||
peer = peer_and_group_lookup_vty(vty, ip_str);
|
peer = peer_and_group_lookup_vty(vty, ip_str);
|
||||||
if (!peer)
|
if (!peer)
|
||||||
|
1365
bgpd/bgpd.c
1365
bgpd/bgpd.c
File diff suppressed because it is too large
Load Diff
51
bgpd/bgpd.h
51
bgpd/bgpd.h
@ -865,6 +865,17 @@ struct peer {
|
|||||||
* *peer-specific*.
|
* *peer-specific*.
|
||||||
*/
|
*/
|
||||||
uint32_t af_flags_override[AFI_MAX][SAFI_MAX];
|
uint32_t af_flags_override[AFI_MAX][SAFI_MAX];
|
||||||
|
/*
|
||||||
|
* Parallel array to af_flags that indicates whether each flag should
|
||||||
|
* be treated as regular (defaults to 0) or inverted (defaults to 1).
|
||||||
|
* If a flag is set to 1 by default, the same bit should be set here.
|
||||||
|
*
|
||||||
|
* Notes:
|
||||||
|
* - This does *not* contain the flag values, rather it contains
|
||||||
|
* whether the flag at the same position in af_flags is *regular* or
|
||||||
|
* *inverted*.
|
||||||
|
*/
|
||||||
|
uint32_t af_flags_invert[AFI_MAX][SAFI_MAX];
|
||||||
/*
|
/*
|
||||||
* Effective flags, computed by applying peer-group flags and then
|
* Effective flags, computed by applying peer-group flags and then
|
||||||
* overriding with individual flags
|
* overriding with individual flags
|
||||||
@ -1038,6 +1049,32 @@ struct peer {
|
|||||||
/* Filter structure. */
|
/* Filter structure. */
|
||||||
struct bgp_filter filter[AFI_MAX][SAFI_MAX];
|
struct bgp_filter filter[AFI_MAX][SAFI_MAX];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parallel array to filter that indicates whether each filter
|
||||||
|
* originates from a peer-group or if it is config that is specific to
|
||||||
|
* this individual peer. If a filter is set independent of the
|
||||||
|
* peer-group the appropriate bit should be set here. If this peer is a
|
||||||
|
* peer-group, this memory region should be all zeros. The assumption
|
||||||
|
* is that the default state for all flags is unset. Due to filters
|
||||||
|
* having a direction (e.g. in/out/...), this array has a third
|
||||||
|
* dimension for storing the overrides independently per direction.
|
||||||
|
*
|
||||||
|
* Notes:
|
||||||
|
* - if a filter for an individual peer is unset, the corresponding
|
||||||
|
* override flag is unset and the peer is considered to be back in
|
||||||
|
* sync with the peer-group.
|
||||||
|
* - This does *not* contain the filter values, rather it contains
|
||||||
|
* whether the filter in filter (struct bgp_filter) is peer-specific.
|
||||||
|
*/
|
||||||
|
uint8_t filter_override[AFI_MAX][SAFI_MAX][(FILTER_MAX > RMAP_MAX)
|
||||||
|
? FILTER_MAX
|
||||||
|
: RMAP_MAX];
|
||||||
|
#define PEER_FT_DISTRIBUTE_LIST (1 << 0) /* distribute-list */
|
||||||
|
#define PEER_FT_FILTER_LIST (1 << 1) /* filter-list */
|
||||||
|
#define PEER_FT_PREFIX_LIST (1 << 2) /* prefix-list */
|
||||||
|
#define PEER_FT_ROUTE_MAP (1 << 3) /* route-map */
|
||||||
|
#define PEER_FT_UNSUPPRESS_MAP (1 << 4) /* unsuppress-map */
|
||||||
|
|
||||||
/* ORF Prefix-list */
|
/* ORF Prefix-list */
|
||||||
struct prefix_list *orf_plist[AFI_MAX][SAFI_MAX];
|
struct prefix_list *orf_plist[AFI_MAX][SAFI_MAX];
|
||||||
|
|
||||||
@ -1115,6 +1152,18 @@ struct peer {
|
|||||||
};
|
};
|
||||||
DECLARE_QOBJ_TYPE(peer)
|
DECLARE_QOBJ_TYPE(peer)
|
||||||
|
|
||||||
|
/* Inherit peer attribute from peer-group. */
|
||||||
|
#define PEER_ATTR_INHERIT(peer, attr) ((peer)->attr = (peer)->group->conf->attr)
|
||||||
|
#define PEER_STR_ATTR_INHERIT(mt, peer, attr) \
|
||||||
|
do { \
|
||||||
|
if ((peer)->attr) \
|
||||||
|
XFREE(mt, (peer)->attr); \
|
||||||
|
if ((peer)->group->conf->attr) \
|
||||||
|
(peer)->attr = XSTRDUP(mt, (peer)->group->conf->attr); \
|
||||||
|
else \
|
||||||
|
(peer)->attr = NULL; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
/* Check if suppress start/restart of sessions to peer. */
|
/* Check if suppress start/restart of sessions to peer. */
|
||||||
#define BGP_PEER_START_SUPPRESSED(P) \
|
#define BGP_PEER_START_SUPPRESSED(P) \
|
||||||
(CHECK_FLAG((P)->flags, PEER_FLAG_SHUTDOWN) \
|
(CHECK_FLAG((P)->flags, PEER_FLAG_SHUTDOWN) \
|
||||||
@ -1513,6 +1562,8 @@ extern int peer_flag_unset(struct peer *, uint32_t);
|
|||||||
extern int peer_af_flag_set(struct peer *, afi_t, safi_t, uint32_t);
|
extern int peer_af_flag_set(struct peer *, afi_t, safi_t, uint32_t);
|
||||||
extern int peer_af_flag_unset(struct peer *, afi_t, safi_t, uint32_t);
|
extern int peer_af_flag_unset(struct peer *, afi_t, safi_t, uint32_t);
|
||||||
extern int peer_af_flag_check(struct peer *, afi_t, safi_t, uint32_t);
|
extern int peer_af_flag_check(struct peer *, afi_t, safi_t, uint32_t);
|
||||||
|
extern void peer_af_flag_inherit(struct peer *peer, afi_t afi, safi_t safi,
|
||||||
|
uint32_t flag);
|
||||||
|
|
||||||
extern int peer_ebgp_multihop_set(struct peer *, int);
|
extern int peer_ebgp_multihop_set(struct peer *, int);
|
||||||
extern int peer_ebgp_multihop_unset(struct peer *);
|
extern int peer_ebgp_multihop_unset(struct peer *);
|
||||||
|
1
tests/.gitignore
vendored
1
tests/.gitignore
vendored
@ -26,6 +26,7 @@ __pycache__
|
|||||||
/bgpd/test_mp_attr
|
/bgpd/test_mp_attr
|
||||||
/bgpd/test_mpath
|
/bgpd/test_mpath
|
||||||
/bgpd/test_packet
|
/bgpd/test_packet
|
||||||
|
/bgpd/test_peer_attr
|
||||||
/isisd/test_fuzz_isis_tlv
|
/isisd/test_fuzz_isis_tlv
|
||||||
/isisd/test_fuzz_isis_tlv_tests.h
|
/isisd/test_fuzz_isis_tlv_tests.h
|
||||||
/isisd/test_isis_vertex_queue
|
/isisd/test_isis_vertex_queue
|
||||||
|
@ -18,6 +18,7 @@ TESTS_BGPD = \
|
|||||||
bgpd/test_aspath \
|
bgpd/test_aspath \
|
||||||
bgpd/test_capability \
|
bgpd/test_capability \
|
||||||
bgpd/test_packet \
|
bgpd/test_packet \
|
||||||
|
bgpd/test_peer_attr \
|
||||||
bgpd/test_ecommunity \
|
bgpd/test_ecommunity \
|
||||||
bgpd/test_mp_attr \
|
bgpd/test_mp_attr \
|
||||||
bgpd/test_mpath
|
bgpd/test_mpath
|
||||||
@ -140,6 +141,7 @@ lib_cli_test_commands_SOURCES = lib/cli/test_commands_defun.c \
|
|||||||
bgpd_test_aspath_SOURCES = bgpd/test_aspath.c
|
bgpd_test_aspath_SOURCES = bgpd/test_aspath.c
|
||||||
bgpd_test_capability_SOURCES = bgpd/test_capability.c
|
bgpd_test_capability_SOURCES = bgpd/test_capability.c
|
||||||
bgpd_test_packet_SOURCES = bgpd/test_packet.c
|
bgpd_test_packet_SOURCES = bgpd/test_packet.c
|
||||||
|
bgpd_test_peer_attr_SOURCES = bgpd/test_peer_attr.c
|
||||||
bgpd_test_ecommunity_SOURCES = bgpd/test_ecommunity.c
|
bgpd_test_ecommunity_SOURCES = bgpd/test_ecommunity.c
|
||||||
bgpd_test_mp_attr_SOURCES = bgpd/test_mp_attr.c
|
bgpd_test_mp_attr_SOURCES = bgpd/test_mp_attr.c
|
||||||
bgpd_test_mpath_SOURCES = bgpd/test_mpath.c
|
bgpd_test_mpath_SOURCES = bgpd/test_mpath.c
|
||||||
@ -179,6 +181,7 @@ lib_cli_test_commands_LDADD = $(ALL_TESTS_LDADD)
|
|||||||
bgpd_test_aspath_LDADD = $(BGP_TEST_LDADD)
|
bgpd_test_aspath_LDADD = $(BGP_TEST_LDADD)
|
||||||
bgpd_test_capability_LDADD = $(BGP_TEST_LDADD)
|
bgpd_test_capability_LDADD = $(BGP_TEST_LDADD)
|
||||||
bgpd_test_packet_LDADD = $(BGP_TEST_LDADD)
|
bgpd_test_packet_LDADD = $(BGP_TEST_LDADD)
|
||||||
|
bgpd_test_peer_attr_LDADD = $(BGP_TEST_LDADD)
|
||||||
bgpd_test_ecommunity_LDADD = $(BGP_TEST_LDADD)
|
bgpd_test_ecommunity_LDADD = $(BGP_TEST_LDADD)
|
||||||
bgpd_test_mp_attr_LDADD = $(BGP_TEST_LDADD)
|
bgpd_test_mp_attr_LDADD = $(BGP_TEST_LDADD)
|
||||||
bgpd_test_mpath_LDADD = $(BGP_TEST_LDADD)
|
bgpd_test_mpath_LDADD = $(BGP_TEST_LDADD)
|
||||||
@ -193,6 +196,7 @@ EXTRA_DIST = \
|
|||||||
bgpd/test_ecommunity.py \
|
bgpd/test_ecommunity.py \
|
||||||
bgpd/test_mp_attr.py \
|
bgpd/test_mp_attr.py \
|
||||||
bgpd/test_mpath.py \
|
bgpd/test_mpath.py \
|
||||||
|
bgpd/test_peer_attr.py \
|
||||||
helpers/python/frrsix.py \
|
helpers/python/frrsix.py \
|
||||||
helpers/python/frrtest.py \
|
helpers/python/frrtest.py \
|
||||||
isisd/test_fuzz_isis_tlv.py \
|
isisd/test_fuzz_isis_tlv.py \
|
||||||
|
1001
tests/bgpd/test_peer_attr.c
Normal file
1001
tests/bgpd/test_peer_attr.c
Normal file
File diff suppressed because it is too large
Load Diff
172
tests/bgpd/test_peer_attr.py
Normal file
172
tests/bgpd/test_peer_attr.py
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
import frrtest
|
||||||
|
|
||||||
|
class TestFlag(frrtest.TestMultiOut):
|
||||||
|
program = './test_peer_attr'
|
||||||
|
|
||||||
|
# List of tests can be generated by executing:
|
||||||
|
# $> ./test_peer_attr 2>&1 | sed -n 's/\\/\\\\/g; s/\S\+ \[test\] \(.\+\)/TestFlag.okfail(\x27\1\x27)/pg'
|
||||||
|
#
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\addpath-tx-all-paths')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\addpath-tx-all-paths')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\addpath-tx-all-paths')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\addpath-tx-all-paths')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\addpath-tx-bestpath-per-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\addpath-tx-bestpath-per-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\addpath-tx-bestpath-per-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\addpath-tx-bestpath-per-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\allowas-in')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\allowas-in')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\allowas-in')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\allowas-in')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\allowas-in origin')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\allowas-in origin')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\allowas-in origin')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\allowas-in origin')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\as-override')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\as-override')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\as-override')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\as-override')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\attribute-unchanged as-path')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\attribute-unchanged as-path')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\attribute-unchanged as-path')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\attribute-unchanged as-path')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\attribute-unchanged next-hop')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\attribute-unchanged next-hop')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\attribute-unchanged next-hop')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\attribute-unchanged next-hop')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\attribute-unchanged med')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\attribute-unchanged med')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\attribute-unchanged med')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\attribute-unchanged med')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\attribute-unchanged as-path next-hop')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\attribute-unchanged as-path next-hop')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\attribute-unchanged as-path next-hop')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\attribute-unchanged as-path next-hop')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\attribute-unchanged as-path med')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\attribute-unchanged as-path med')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\attribute-unchanged as-path med')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\attribute-unchanged as-path med')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\attribute-unchanged as-path next-hop med')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\attribute-unchanged as-path next-hop med')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\attribute-unchanged as-path next-hop med')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\attribute-unchanged as-path next-hop med')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\capability orf prefix-list send')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\capability orf prefix-list send')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\capability orf prefix-list send')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\capability orf prefix-list send')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\capability orf prefix-list receive')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\capability orf prefix-list receive')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\capability orf prefix-list receive')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\capability orf prefix-list receive')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\capability orf prefix-list both')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\capability orf prefix-list both')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\capability orf prefix-list both')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\capability orf prefix-list both')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\default-originate')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\default-originate')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\default-originate')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\default-originate')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\default-originate route-map')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\default-originate route-map')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\default-originate route-map')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\default-originate route-map')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\filter-list')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\filter-list')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\filter-list')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\filter-list')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\filter-list')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\filter-list')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\filter-list')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\filter-list')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\maximum-prefix')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\next-hop-self')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\next-hop-self')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\next-hop-self')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\next-hop-self')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\next-hop-self force')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\next-hop-self force')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\next-hop-self force')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\next-hop-self force')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\prefix-list')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\prefix-list')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\prefix-list')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\prefix-list')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\prefix-list')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\prefix-list')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\prefix-list')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\prefix-list')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\remove-private-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\remove-private-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\remove-private-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\remove-private-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\remove-private-AS all')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\remove-private-AS all')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\remove-private-AS all')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\remove-private-AS all')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\remove-private-AS replace-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\remove-private-AS replace-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\remove-private-AS replace-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\remove-private-AS replace-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\remove-private-AS all replace-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\remove-private-AS all replace-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\remove-private-AS all replace-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\remove-private-AS all replace-AS')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\route-map')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\route-map')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\route-map')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\route-map')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\route-map')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\route-map')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\route-map')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\route-map')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\route-reflector-client')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\route-reflector-client')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\route-reflector-client')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\route-reflector-client')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\route-server-client')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\route-server-client')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\route-server-client')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\route-server-client')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\send-community')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\send-community')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\send-community')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\send-community')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\send-community extended')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\send-community extended')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\send-community extended')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\send-community extended')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\send-community large')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\send-community large')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\send-community large')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\send-community large')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\soft-reconfiguration inbound')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\soft-reconfiguration inbound')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\soft-reconfiguration inbound')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\soft-reconfiguration inbound')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\unsuppress-map')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\unsuppress-map')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\unsuppress-map')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\unsuppress-map')
|
||||||
|
TestFlag.okfail('peer\\ipv4-unicast\\weight')
|
||||||
|
TestFlag.okfail('peer\\ipv4-multicast\\weight')
|
||||||
|
TestFlag.okfail('peer\\ipv6-unicast\\weight')
|
||||||
|
TestFlag.okfail('peer\\ipv6-multicast\\weight')
|
Loading…
Reference in New Issue
Block a user