mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-04 00:27:00 +00:00
The peer-groups parser is missing advertisement-interval and 'timers connect'
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
This commit is contained in:
parent
1f5705f042
commit
966f821c38
@ -3479,7 +3479,7 @@ peer_timers_connect_set_vty (struct vty *vty, const char *ip_str,
|
|||||||
struct peer *peer;
|
struct peer *peer;
|
||||||
u_int32_t connect;
|
u_int32_t connect;
|
||||||
|
|
||||||
peer = peer_lookup_vty (vty, ip_str);
|
peer = peer_and_group_lookup_vty (vty, ip_str);
|
||||||
if (! peer)
|
if (! peer)
|
||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
|
|
||||||
@ -3487,7 +3487,7 @@ peer_timers_connect_set_vty (struct vty *vty, const char *ip_str,
|
|||||||
|
|
||||||
ret = peer_timers_connect_set (peer, connect);
|
ret = peer_timers_connect_set (peer, connect);
|
||||||
|
|
||||||
return CMD_SUCCESS;
|
return bgp_vty_return (vty, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -3502,14 +3502,14 @@ peer_timers_connect_unset_vty (struct vty *vty, const char *ip_str)
|
|||||||
|
|
||||||
ret = peer_timers_connect_unset (peer);
|
ret = peer_timers_connect_unset (peer);
|
||||||
|
|
||||||
return CMD_SUCCESS;
|
return bgp_vty_return (vty, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (neighbor_timers_connect,
|
DEFUN (neighbor_timers_connect,
|
||||||
neighbor_timers_connect_cmd,
|
neighbor_timers_connect_cmd,
|
||||||
NEIGHBOR_CMD "timers connect <0-65535>",
|
NEIGHBOR_CMD2 "timers connect <0-65535>",
|
||||||
NEIGHBOR_STR
|
NEIGHBOR_STR
|
||||||
NEIGHBOR_ADDR_STR
|
NEIGHBOR_ADDR_STR2
|
||||||
"BGP per neighbor timers\n"
|
"BGP per neighbor timers\n"
|
||||||
"BGP connect timer\n"
|
"BGP connect timer\n"
|
||||||
"Connect timer\n")
|
"Connect timer\n")
|
||||||
@ -3519,10 +3519,10 @@ DEFUN (neighbor_timers_connect,
|
|||||||
|
|
||||||
DEFUN (no_neighbor_timers_connect,
|
DEFUN (no_neighbor_timers_connect,
|
||||||
no_neighbor_timers_connect_cmd,
|
no_neighbor_timers_connect_cmd,
|
||||||
NO_NEIGHBOR_CMD "timers connect",
|
NO_NEIGHBOR_CMD2 "timers connect",
|
||||||
NO_STR
|
NO_STR
|
||||||
NEIGHBOR_STR
|
NEIGHBOR_STR
|
||||||
NEIGHBOR_ADDR_STR
|
NEIGHBOR_ADDR_STR2
|
||||||
"BGP per neighbor timers\n"
|
"BGP per neighbor timers\n"
|
||||||
"BGP connect timer\n")
|
"BGP connect timer\n")
|
||||||
{
|
{
|
||||||
@ -3531,10 +3531,10 @@ DEFUN (no_neighbor_timers_connect,
|
|||||||
|
|
||||||
ALIAS (no_neighbor_timers_connect,
|
ALIAS (no_neighbor_timers_connect,
|
||||||
no_neighbor_timers_connect_val_cmd,
|
no_neighbor_timers_connect_val_cmd,
|
||||||
NO_NEIGHBOR_CMD "timers connect <0-65535>",
|
NO_NEIGHBOR_CMD2 "timers connect <0-65535>",
|
||||||
NO_STR
|
NO_STR
|
||||||
NEIGHBOR_STR
|
NEIGHBOR_STR
|
||||||
NEIGHBOR_ADDR_STR
|
NEIGHBOR_ADDR_STR2
|
||||||
"BGP per neighbor timers\n"
|
"BGP per neighbor timers\n"
|
||||||
"BGP connect timer\n"
|
"BGP connect timer\n"
|
||||||
"Connect timer\n")
|
"Connect timer\n")
|
||||||
@ -3547,7 +3547,7 @@ peer_advertise_interval_vty (struct vty *vty, const char *ip_str,
|
|||||||
struct peer *peer;
|
struct peer *peer;
|
||||||
u_int32_t routeadv = 0;
|
u_int32_t routeadv = 0;
|
||||||
|
|
||||||
peer = peer_lookup_vty (vty, ip_str);
|
peer = peer_and_group_lookup_vty (vty, ip_str);
|
||||||
if (! peer)
|
if (! peer)
|
||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
|
|
||||||
@ -3559,14 +3559,14 @@ peer_advertise_interval_vty (struct vty *vty, const char *ip_str,
|
|||||||
else
|
else
|
||||||
ret = peer_advertise_interval_unset (peer);
|
ret = peer_advertise_interval_unset (peer);
|
||||||
|
|
||||||
return CMD_SUCCESS;
|
return bgp_vty_return (vty, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (neighbor_advertise_interval,
|
DEFUN (neighbor_advertise_interval,
|
||||||
neighbor_advertise_interval_cmd,
|
neighbor_advertise_interval_cmd,
|
||||||
NEIGHBOR_CMD "advertisement-interval <0-600>",
|
NEIGHBOR_CMD2 "advertisement-interval <0-600>",
|
||||||
NEIGHBOR_STR
|
NEIGHBOR_STR
|
||||||
NEIGHBOR_ADDR_STR
|
NEIGHBOR_ADDR_STR2
|
||||||
"Minimum interval between sending BGP routing updates\n"
|
"Minimum interval between sending BGP routing updates\n"
|
||||||
"time in seconds\n")
|
"time in seconds\n")
|
||||||
{
|
{
|
||||||
@ -3575,10 +3575,10 @@ DEFUN (neighbor_advertise_interval,
|
|||||||
|
|
||||||
DEFUN (no_neighbor_advertise_interval,
|
DEFUN (no_neighbor_advertise_interval,
|
||||||
no_neighbor_advertise_interval_cmd,
|
no_neighbor_advertise_interval_cmd,
|
||||||
NO_NEIGHBOR_CMD "advertisement-interval",
|
NO_NEIGHBOR_CMD2 "advertisement-interval",
|
||||||
NO_STR
|
NO_STR
|
||||||
NEIGHBOR_STR
|
NEIGHBOR_STR
|
||||||
NEIGHBOR_ADDR_STR
|
NEIGHBOR_ADDR_STR2
|
||||||
"Minimum interval between sending BGP routing updates\n")
|
"Minimum interval between sending BGP routing updates\n")
|
||||||
{
|
{
|
||||||
return peer_advertise_interval_vty (vty, argv[0], NULL, 0);
|
return peer_advertise_interval_vty (vty, argv[0], NULL, 0);
|
||||||
@ -3586,10 +3586,10 @@ DEFUN (no_neighbor_advertise_interval,
|
|||||||
|
|
||||||
ALIAS (no_neighbor_advertise_interval,
|
ALIAS (no_neighbor_advertise_interval,
|
||||||
no_neighbor_advertise_interval_val_cmd,
|
no_neighbor_advertise_interval_val_cmd,
|
||||||
NO_NEIGHBOR_CMD "advertisement-interval <0-600>",
|
NO_NEIGHBOR_CMD2 "advertisement-interval <0-600>",
|
||||||
NO_STR
|
NO_STR
|
||||||
NEIGHBOR_STR
|
NEIGHBOR_STR
|
||||||
NEIGHBOR_ADDR_STR
|
NEIGHBOR_ADDR_STR2
|
||||||
"Minimum interval between sending BGP routing updates\n"
|
"Minimum interval between sending BGP routing updates\n"
|
||||||
"time in seconds\n")
|
"time in seconds\n")
|
||||||
|
|
||||||
|
100
bgpd/bgpd.c
100
bgpd/bgpd.c
@ -908,6 +908,7 @@ static void
|
|||||||
peer_as_change (struct peer *peer, as_t as)
|
peer_as_change (struct peer *peer, as_t as)
|
||||||
{
|
{
|
||||||
bgp_peer_sort_t type;
|
bgp_peer_sort_t type;
|
||||||
|
struct peer *conf;
|
||||||
|
|
||||||
/* Stop peer. */
|
/* Stop peer. */
|
||||||
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
|
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
|
||||||
@ -932,10 +933,17 @@ peer_as_change (struct peer *peer, as_t as)
|
|||||||
peer->local_as = peer->bgp->as;
|
peer->local_as = peer->bgp->as;
|
||||||
|
|
||||||
/* Advertisement-interval reset */
|
/* Advertisement-interval reset */
|
||||||
if (peer_sort (peer) == BGP_PEER_IBGP)
|
conf = NULL;
|
||||||
peer->v_routeadv = BGP_DEFAULT_IBGP_ROUTEADV;
|
if (peer->group)
|
||||||
|
conf = peer->group->conf;
|
||||||
|
|
||||||
|
if (conf && CHECK_FLAG (conf->config, PEER_CONFIG_ROUTEADV))
|
||||||
|
peer->v_routeadv = conf->routeadv;
|
||||||
else
|
else
|
||||||
peer->v_routeadv = BGP_DEFAULT_EBGP_ROUTEADV;
|
if (peer_sort (peer) == BGP_PEER_IBGP)
|
||||||
|
peer->v_routeadv = BGP_DEFAULT_IBGP_ROUTEADV;
|
||||||
|
else
|
||||||
|
peer->v_routeadv = BGP_DEFAULT_EBGP_ROUTEADV;
|
||||||
|
|
||||||
/* TTL reset */
|
/* TTL reset */
|
||||||
if (peer_sort (peer) == BGP_PEER_IBGP)
|
if (peer_sort (peer) == BGP_PEER_IBGP)
|
||||||
@ -1454,10 +1462,13 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer,
|
|||||||
peer->v_connect = BGP_DEFAULT_CONNECT_RETRY;
|
peer->v_connect = BGP_DEFAULT_CONNECT_RETRY;
|
||||||
|
|
||||||
/* advertisement-interval reset */
|
/* advertisement-interval reset */
|
||||||
if (peer_sort (peer) == BGP_PEER_IBGP)
|
if (CHECK_FLAG (conf->config, PEER_CONFIG_ROUTEADV))
|
||||||
peer->v_routeadv = BGP_DEFAULT_IBGP_ROUTEADV;
|
peer->v_routeadv = conf->routeadv;
|
||||||
else
|
else
|
||||||
peer->v_routeadv = BGP_DEFAULT_EBGP_ROUTEADV;
|
if (peer_sort (peer) == BGP_PEER_IBGP)
|
||||||
|
peer->v_routeadv = BGP_DEFAULT_IBGP_ROUTEADV;
|
||||||
|
else
|
||||||
|
peer->v_routeadv = BGP_DEFAULT_EBGP_ROUTEADV;
|
||||||
|
|
||||||
/* password apply */
|
/* password apply */
|
||||||
if (conf->password && !peer->password)
|
if (conf->password && !peer->password)
|
||||||
@ -1815,10 +1826,11 @@ peer_group_bind (struct bgp *bgp, union sockunion *su,
|
|||||||
if (first_member)
|
if (first_member)
|
||||||
{
|
{
|
||||||
/* Advertisement-interval reset */
|
/* Advertisement-interval reset */
|
||||||
if (peer_sort (group->conf) == BGP_PEER_IBGP)
|
if (! CHECK_FLAG (group->conf->config, PEER_CONFIG_ROUTEADV))
|
||||||
group->conf->v_routeadv = BGP_DEFAULT_IBGP_ROUTEADV;
|
if (peer_sort (group->conf) == BGP_PEER_IBGP)
|
||||||
else
|
group->conf->v_routeadv = BGP_DEFAULT_IBGP_ROUTEADV;
|
||||||
group->conf->v_routeadv = BGP_DEFAULT_EBGP_ROUTEADV;
|
else
|
||||||
|
group->conf->v_routeadv = BGP_DEFAULT_EBGP_ROUTEADV;
|
||||||
|
|
||||||
/* ebgp-multihop reset */
|
/* ebgp-multihop reset */
|
||||||
if (peer_sort (group->conf) == BGP_PEER_IBGP)
|
if (peer_sort (group->conf) == BGP_PEER_IBGP)
|
||||||
@ -3295,6 +3307,9 @@ peer_timers_unset (struct peer *peer)
|
|||||||
int
|
int
|
||||||
peer_timers_connect_set (struct peer *peer, u_int32_t connect)
|
peer_timers_connect_set (struct peer *peer, u_int32_t connect)
|
||||||
{
|
{
|
||||||
|
struct peer_group *group;
|
||||||
|
struct listnode *node, *nnode;
|
||||||
|
|
||||||
if (peer_group_active (peer))
|
if (peer_group_active (peer))
|
||||||
return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
|
return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
|
||||||
|
|
||||||
@ -3308,12 +3323,26 @@ peer_timers_connect_set (struct peer *peer, u_int32_t connect)
|
|||||||
/* Set value to timer setting. */
|
/* Set value to timer setting. */
|
||||||
peer->v_connect = connect;
|
peer->v_connect = connect;
|
||||||
|
|
||||||
|
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* peer-group member updates. */
|
||||||
|
group = peer->group;
|
||||||
|
for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
|
||||||
|
{
|
||||||
|
SET_FLAG (peer->config, PEER_CONFIG_CONNECT);
|
||||||
|
peer->connect = connect;
|
||||||
|
peer->v_connect = connect;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
peer_timers_connect_unset (struct peer *peer)
|
peer_timers_connect_unset (struct peer *peer)
|
||||||
{
|
{
|
||||||
|
struct peer_group *group;
|
||||||
|
struct listnode *node, *nnode;
|
||||||
|
|
||||||
if (peer_group_active (peer))
|
if (peer_group_active (peer))
|
||||||
return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
|
return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
|
||||||
|
|
||||||
@ -3324,12 +3353,26 @@ peer_timers_connect_unset (struct peer *peer)
|
|||||||
/* Set timer setting to default value. */
|
/* Set timer setting to default value. */
|
||||||
peer->v_connect = BGP_DEFAULT_CONNECT_RETRY;
|
peer->v_connect = BGP_DEFAULT_CONNECT_RETRY;
|
||||||
|
|
||||||
|
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* peer-group member updates. */
|
||||||
|
group = peer->group;
|
||||||
|
for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
|
||||||
|
{
|
||||||
|
UNSET_FLAG (peer->config, PEER_CONFIG_CONNECT);
|
||||||
|
peer->connect = 0;
|
||||||
|
peer->v_connect = BGP_DEFAULT_CONNECT_RETRY;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
peer_advertise_interval_set (struct peer *peer, u_int32_t routeadv)
|
peer_advertise_interval_set (struct peer *peer, u_int32_t routeadv)
|
||||||
{
|
{
|
||||||
|
struct peer_group *group;
|
||||||
|
struct listnode *node, *nnode;
|
||||||
|
|
||||||
if (peer_group_active (peer))
|
if (peer_group_active (peer))
|
||||||
return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
|
return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
|
||||||
|
|
||||||
@ -3340,12 +3383,27 @@ peer_advertise_interval_set (struct peer *peer, u_int32_t routeadv)
|
|||||||
peer->routeadv = routeadv;
|
peer->routeadv = routeadv;
|
||||||
peer->v_routeadv = routeadv;
|
peer->v_routeadv = routeadv;
|
||||||
|
|
||||||
|
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* peer-group member updates. */
|
||||||
|
group = peer->group;
|
||||||
|
for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
|
||||||
|
{
|
||||||
|
SET_FLAG (peer->config, PEER_CONFIG_ROUTEADV);
|
||||||
|
peer->routeadv = routeadv;
|
||||||
|
peer->v_routeadv = routeadv;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
peer_advertise_interval_unset (struct peer *peer)
|
peer_advertise_interval_unset (struct peer *peer)
|
||||||
{
|
{
|
||||||
|
struct peer_group *group;
|
||||||
|
struct listnode *node, *nnode;
|
||||||
|
|
||||||
if (peer_group_active (peer))
|
if (peer_group_active (peer))
|
||||||
return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
|
return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
|
||||||
|
|
||||||
@ -3357,6 +3415,22 @@ peer_advertise_interval_unset (struct peer *peer)
|
|||||||
else
|
else
|
||||||
peer->v_routeadv = BGP_DEFAULT_EBGP_ROUTEADV;
|
peer->v_routeadv = BGP_DEFAULT_EBGP_ROUTEADV;
|
||||||
|
|
||||||
|
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* peer-group member updates. */
|
||||||
|
group = peer->group;
|
||||||
|
for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
|
||||||
|
{
|
||||||
|
UNSET_FLAG (peer->config, PEER_CONFIG_ROUTEADV);
|
||||||
|
peer->routeadv = 0;
|
||||||
|
|
||||||
|
if (peer->sort == BGP_PEER_IBGP)
|
||||||
|
peer->v_routeadv = BGP_DEFAULT_IBGP_ROUTEADV;
|
||||||
|
else
|
||||||
|
peer->v_routeadv = BGP_DEFAULT_EBGP_ROUTEADV;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4903,7 +4977,8 @@ bgp_config_write_peer (struct vty *vty, struct bgp *bgp,
|
|||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
|
|
||||||
/* advertisement-interval */
|
/* advertisement-interval */
|
||||||
if (CHECK_FLAG (peer->config, PEER_CONFIG_ROUTEADV))
|
if (CHECK_FLAG (peer->config, PEER_CONFIG_ROUTEADV) &&
|
||||||
|
! peer_group_active (peer))
|
||||||
vty_out (vty, " neighbor %s advertisement-interval %d%s",
|
vty_out (vty, " neighbor %s advertisement-interval %d%s",
|
||||||
addr, peer->v_routeadv, VTY_NEWLINE);
|
addr, peer->v_routeadv, VTY_NEWLINE);
|
||||||
|
|
||||||
@ -4913,7 +4988,8 @@ bgp_config_write_peer (struct vty *vty, struct bgp *bgp,
|
|||||||
vty_out (vty, " neighbor %s timers %d %d%s", addr,
|
vty_out (vty, " neighbor %s timers %d %d%s", addr,
|
||||||
peer->keepalive, peer->holdtime, VTY_NEWLINE);
|
peer->keepalive, peer->holdtime, VTY_NEWLINE);
|
||||||
|
|
||||||
if (CHECK_FLAG (peer->config, PEER_CONFIG_CONNECT))
|
if (CHECK_FLAG (peer->config, PEER_CONFIG_CONNECT) &&
|
||||||
|
! peer_group_active (peer))
|
||||||
vty_out (vty, " neighbor %s timers connect %d%s", addr,
|
vty_out (vty, " neighbor %s timers connect %d%s", addr,
|
||||||
peer->connect, VTY_NEWLINE);
|
peer->connect, VTY_NEWLINE);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user