diff options
| -rw-r--r-- | bgpd/bgp_vty.c | 6 | ||||
| -rw-r--r-- | bgpd/bgpd.c | 19 | ||||
| -rw-r--r-- | bgpd/bgpd.h | 5 | 
3 files changed, 21 insertions, 9 deletions
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 445dea92d5..daa8507e39 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -590,7 +590,7 @@ int bgp_get_vty(struct bgp **bgp, as_t *as, const char *name,  	int ret = bgp_get(bgp, as, name, inst_type, as_pretty, asnotation);  	if (ret == BGP_CREATED) { -		bgp_timers_set(*bgp, DFLT_BGP_KEEPALIVE, DFLT_BGP_HOLDTIME, +		bgp_timers_set(NULL, *bgp, DFLT_BGP_KEEPALIVE, DFLT_BGP_HOLDTIME,  			       DFLT_BGP_CONNECT_RETRY, BGP_DEFAULT_DELAYOPEN);  		if (DFLT_BGP_IMPORT_CHECK) @@ -2661,7 +2661,7 @@ DEFUN (bgp_timers,  		return CMD_WARNING_CONFIG_FAILED;  	} -	bgp_timers_set(bgp, keepalive, holdtime, DFLT_BGP_CONNECT_RETRY, +	bgp_timers_set(vty, bgp, keepalive, holdtime, DFLT_BGP_CONNECT_RETRY,  		       BGP_DEFAULT_DELAYOPEN);  	return CMD_SUCCESS; @@ -2677,7 +2677,7 @@ DEFUN (no_bgp_timers,         "Holdtime\n")  {  	VTY_DECLVAR_CONTEXT(bgp, bgp); -	bgp_timers_set(bgp, DFLT_BGP_KEEPALIVE, DFLT_BGP_HOLDTIME, +	bgp_timers_set(vty, bgp, DFLT_BGP_KEEPALIVE, DFLT_BGP_HOLDTIME,  		       DFLT_BGP_CONNECT_RETRY, BGP_DEFAULT_DELAYOPEN);  	return CMD_SUCCESS; diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 730c96cdda..60b394b697 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -519,11 +519,22 @@ void bgp_cluster_id_unset(struct bgp *bgp)  }  /* BGP timer configuration.  */ -void bgp_timers_set(struct bgp *bgp, uint32_t keepalive, uint32_t holdtime, -		    uint32_t connect_retry, uint32_t delayopen) +void bgp_timers_set(struct vty *vty, struct bgp *bgp, uint32_t keepalive, +		    uint32_t holdtime, uint32_t connect_retry, +		    uint32_t delayopen)  { -	bgp->default_keepalive = -		(keepalive < holdtime / 3 ? keepalive : holdtime / 3); +	uint32_t default_keepalive = holdtime / 3; + +	if (keepalive > default_keepalive) { +		if (vty) +			vty_out(vty, +				"%% keepalive value %u is larger than 1/3 of the holdtime, setting to %u\n", +				keepalive, default_keepalive); +	} else { +		default_keepalive = keepalive; +	} + +	bgp->default_keepalive = default_keepalive;  	bgp->default_holdtime = holdtime;  	bgp->default_connect_retry = connect_retry;  	bgp->default_delayopen = delayopen; diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h index 51e0cb3802..6aa659adea 100644 --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h @@ -2254,8 +2254,9 @@ extern void bgp_confederation_peers_add(struct bgp *bgp, as_t as,  					const char *as_str);  extern void bgp_confederation_peers_remove(struct bgp *bgp, as_t as); -extern void bgp_timers_set(struct bgp *, uint32_t keepalive, uint32_t holdtime, -			   uint32_t connect_retry, uint32_t delayopen); +extern void bgp_timers_set(struct vty *vty, struct bgp *, uint32_t keepalive, +			   uint32_t holdtime, uint32_t connect_retry, +			   uint32_t delayopen);  extern void bgp_timers_unset(struct bgp *);  extern void bgp_default_local_preference_set(struct bgp *bgp,  | 
