mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 09:22:03 +00:00
Merge pull request #7133 from Niral-Networks/niral_fix_ospf_timer
ospfd : Fix for ospf dead interval and hello due.
This commit is contained in:
commit
68f383438d
@ -539,6 +539,7 @@ static struct ospf_if_params *ospf_new_if_params(void)
|
|||||||
oip->auth_crypt = list_new();
|
oip->auth_crypt = list_new();
|
||||||
|
|
||||||
oip->network_lsa_seqnum = htonl(OSPF_INITIAL_SEQUENCE_NUMBER);
|
oip->network_lsa_seqnum = htonl(OSPF_INITIAL_SEQUENCE_NUMBER);
|
||||||
|
oip->is_v_wait_set = false;
|
||||||
|
|
||||||
return oip;
|
return oip;
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,7 @@ struct ospf_if_params {
|
|||||||
|
|
||||||
DECLARE_IF_PARAM(uint32_t, v_hello); /* Hello Interval */
|
DECLARE_IF_PARAM(uint32_t, v_hello); /* Hello Interval */
|
||||||
DECLARE_IF_PARAM(uint32_t, v_wait); /* Router Dead Interval */
|
DECLARE_IF_PARAM(uint32_t, v_wait); /* Router Dead Interval */
|
||||||
|
bool is_v_wait_set; /* Check for Dead Interval set */
|
||||||
|
|
||||||
/* MTU mismatch check (see RFC2328, chap 10.6) */
|
/* MTU mismatch check (see RFC2328, chap 10.6) */
|
||||||
DECLARE_IF_PARAM(uint8_t, mtu_ignore);
|
DECLARE_IF_PARAM(uint8_t, mtu_ignore);
|
||||||
|
@ -7310,6 +7310,7 @@ static int ospf_vty_dead_interval_set(struct vty *vty, const char *interval_str,
|
|||||||
|
|
||||||
SET_IF_PARAM(params, v_wait);
|
SET_IF_PARAM(params, v_wait);
|
||||||
params->v_wait = seconds;
|
params->v_wait = seconds;
|
||||||
|
params->is_v_wait_set = true;
|
||||||
|
|
||||||
/* Update timer values in neighbor structure. */
|
/* Update timer values in neighbor structure. */
|
||||||
if (nbr_str) {
|
if (nbr_str) {
|
||||||
@ -7419,6 +7420,7 @@ DEFUN (no_ip_ospf_dead_interval,
|
|||||||
|
|
||||||
UNSET_IF_PARAM(params, v_wait);
|
UNSET_IF_PARAM(params, v_wait);
|
||||||
params->v_wait = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
|
params->v_wait = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
|
||||||
|
params->is_v_wait_set = false;
|
||||||
|
|
||||||
UNSET_IF_PARAM(params, fast_hello);
|
UNSET_IF_PARAM(params, fast_hello);
|
||||||
params->fast_hello = OSPF_FAST_HELLO_DEFAULT;
|
params->fast_hello = OSPF_FAST_HELLO_DEFAULT;
|
||||||
@ -7495,6 +7497,17 @@ DEFUN (ip_ospf_hello_interval,
|
|||||||
SET_IF_PARAM(params, v_hello);
|
SET_IF_PARAM(params, v_hello);
|
||||||
params->v_hello = seconds;
|
params->v_hello = seconds;
|
||||||
|
|
||||||
|
if (!params->is_v_wait_set) {
|
||||||
|
SET_IF_PARAM(params, v_wait);
|
||||||
|
/* As per RFC 4062
|
||||||
|
* The router dead interval should
|
||||||
|
* be some multiple of the HelloInterval (perhaps 4 times the
|
||||||
|
* hello interval) and must be the same for all routers
|
||||||
|
* attached to a common network.
|
||||||
|
*/
|
||||||
|
params->v_wait = 4 * seconds;
|
||||||
|
}
|
||||||
|
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7523,6 +7536,7 @@ DEFUN (no_ip_ospf_hello_interval,
|
|||||||
int idx = 0;
|
int idx = 0;
|
||||||
struct in_addr addr;
|
struct in_addr addr;
|
||||||
struct ospf_if_params *params;
|
struct ospf_if_params *params;
|
||||||
|
struct route_node *rn;
|
||||||
|
|
||||||
params = IF_DEF_PARAMS(ifp);
|
params = IF_DEF_PARAMS(ifp);
|
||||||
|
|
||||||
@ -7541,6 +7555,25 @@ DEFUN (no_ip_ospf_hello_interval,
|
|||||||
UNSET_IF_PARAM(params, v_hello);
|
UNSET_IF_PARAM(params, v_hello);
|
||||||
params->v_hello = OSPF_HELLO_INTERVAL_DEFAULT;
|
params->v_hello = OSPF_HELLO_INTERVAL_DEFAULT;
|
||||||
|
|
||||||
|
if (!params->is_v_wait_set) {
|
||||||
|
UNSET_IF_PARAM(params, v_wait);
|
||||||
|
params->v_wait = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
|
||||||
|
struct ospf_interface *oi = rn->info;
|
||||||
|
|
||||||
|
if (!oi)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
oi->type = IF_DEF_PARAMS(ifp)->type;
|
||||||
|
|
||||||
|
if (oi->state > ISM_Down) {
|
||||||
|
OSPF_ISM_EVENT_EXECUTE(oi, ISM_InterfaceDown);
|
||||||
|
OSPF_ISM_EVENT_EXECUTE(oi, ISM_InterfaceUp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (params != IF_DEF_PARAMS(ifp)) {
|
if (params != IF_DEF_PARAMS(ifp)) {
|
||||||
ospf_free_if_params(ifp, addr);
|
ospf_free_if_params(ifp, addr);
|
||||||
ospf_if_update_params(ifp, addr);
|
ospf_if_update_params(ifp, addr);
|
||||||
|
Loading…
Reference in New Issue
Block a user