summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_vty.c76
1 files changed, 75 insertions, 1 deletions
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index 1a7a3543f9..8cbc92e014 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -461,7 +461,7 @@ int bgp_get_vty(struct bgp **bgp, as_t *as, const char *name,
if (ret == BGP_CREATED) {
bgp_timers_set(*bgp, DFLT_BGP_KEEPALIVE, DFLT_BGP_HOLDTIME,
- DFLT_BGP_CONNECT_RETRY);
+ DFLT_BGP_CONNECT_RETRY, BGP_DEFAULT_DELAYOPEN);
if (DFLT_BGP_IMPORT_CHECK)
SET_FLAG((*bgp)->flags, BGP_FLAG_IMPORT_CHECK);
@@ -7373,6 +7373,54 @@ DEFUN_YANG (no_neighbor_timers_connect,
return nb_cli_apply_changes(vty, base_xpath);
}
+DEFPY (neighbor_timers_delayopen,
+ neighbor_timers_delayopen_cmd,
+ "neighbor <A.B.C.D|X:X::X:X|WORD>$neighbor timers delayopen (1-240)$interval",
+ NEIGHBOR_STR
+ NEIGHBOR_ADDR_STR2
+ "BGP per neighbor timers\n"
+ "RFC 4271 DelayOpenTimer\n"
+ "DelayOpenTime timer interval\n")
+{
+ struct peer *peer;
+
+ peer = peer_and_group_lookup_vty(vty, neighbor);
+ if (!peer)
+ return CMD_WARNING_CONFIG_FAILED;
+
+ if (!interval) {
+ if (peer_timers_delayopen_unset(peer))
+ return CMD_WARNING_CONFIG_FAILED;
+ } else {
+ if (peer_timers_delayopen_set(peer, interval))
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ return CMD_SUCCESS;
+}
+
+DEFPY (no_neighbor_timers_delayopen,
+ no_neighbor_timers_delayopen_cmd,
+ "no neighbor <A.B.C.D|X:X::X:X|WORD>$neighbor timers delayopen [(0-65535)]",
+ NO_STR
+ NEIGHBOR_STR
+ NEIGHBOR_ADDR_STR2
+ "BGP per neighbor timers\n"
+ "RFC 4271 DelayOpenTimer\n"
+ "DelayOpenTime timer interval\n")
+{
+ struct peer *peer;
+
+ peer = peer_and_group_lookup_vty(vty, neighbor);
+ if (!peer)
+ return CMD_WARNING_CONFIG_FAILED;
+
+ if (peer_timers_delayopen_unset(peer))
+ return CMD_WARNING_CONFIG_FAILED;
+
+ return CMD_SUCCESS;
+}
+
DEFUN_YANG (neighbor_advertise_interval,
neighbor_advertise_interval_cmd,
"neighbor <A.B.C.D|X:X::X:X|WORD> advertisement-interval (0-600)",
@@ -12600,6 +12648,12 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, bool use_json,
json_object_int_add(json_neigh,
"bgpTimerKeepAliveIntervalMsecs",
p->v_keepalive * 1000);
+ if (CHECK_FLAG(p->flags, PEER_FLAG_TIMER_DELAYOPEN)) {
+ json_object_int_add(json_neigh,
+ "bgpTimerDelayOpenTimeMsecs",
+ p->v_delayopen * 1000);
+ }
+
if (CHECK_FLAG(p->flags, PEER_FLAG_TIMER)) {
json_object_int_add(json_neigh,
"bgpTimerConfiguredHoldTimeMsecs",
@@ -12679,6 +12733,10 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, bool use_json,
vty_out(vty, ", keepalive interval is %d seconds\n",
bgp->default_keepalive);
}
+ if (CHECK_FLAG(p->flags, PEER_FLAG_TIMER_DELAYOPEN))
+ vty_out(vty,
+ " Configured DelayOpenTime is %d seconds\n",
+ p->delayopen);
}
/* Capability. */
if (p->status == Established) {
@@ -16395,6 +16453,18 @@ static void bgp_config_write_peer_global(struct vty *vty, struct bgp *bgp,
vty_out(vty, " neighbor %s timers connect %u\n", addr,
peer->bgp->default_connect_retry);
+ /* timers delayopen */
+ if (peergroup_flag_check(peer, PEER_FLAG_TIMER_DELAYOPEN))
+ vty_out(vty, " neighbor %s timers delayopen %u\n", addr,
+ peer->delayopen);
+ /* Save config even though flag is not set if default values have been
+ * changed
+ */
+ else if (!peer_group_active(peer) && !peer->delayopen
+ && peer->bgp->default_delayopen != BGP_DEFAULT_DELAYOPEN)
+ vty_out(vty, " neighbor %s timers delayopen %u\n", addr,
+ peer->bgp->default_delayopen);
+
/* capability dynamic */
if (peergroup_flag_check(peer, PEER_FLAG_DYNAMIC_CAPABILITY))
vty_out(vty, " neighbor %s capability dynamic\n", addr);
@@ -18254,6 +18324,10 @@ void bgp_vty_init(void)
install_element(BGP_NODE, &neighbor_timers_connect_cmd);
install_element(BGP_NODE, &no_neighbor_timers_connect_cmd);
+ /* "neighbor timers delayopen" commands. */
+ install_element(BGP_NODE, &neighbor_timers_delayopen_cmd);
+ install_element(BGP_NODE, &no_neighbor_timers_delayopen_cmd);
+
/* "neighbor advertisement-interval" commands. */
install_element(BGP_NODE, &neighbor_advertise_interval_cmd);
install_element(BGP_NODE, &no_neighbor_advertise_interval_cmd);