mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-01 01:57:37 +00:00
isisd: raise hello rate for DIS (BZ#539)
* isis_pdu.c: Divide hello interval by three, depending if we are DIS or not.
This commit is contained in:
parent
5574999e59
commit
8998075956
@ -1943,6 +1943,9 @@ send_hello (struct isis_circuit *circuit, int level)
|
|||||||
memset (&hello_hdr, 0, sizeof (struct isis_lan_hello_hdr));
|
memset (&hello_hdr, 0, sizeof (struct isis_lan_hello_hdr));
|
||||||
interval = circuit->hello_multiplier[level - 1] *
|
interval = circuit->hello_multiplier[level - 1] *
|
||||||
circuit->hello_interval[level - 1];
|
circuit->hello_interval[level - 1];
|
||||||
|
/* If we are the DIS then hello interval is divided by three, as is the hold-timer */
|
||||||
|
if (circuit->u.bc.is_dr[level - 1])
|
||||||
|
interval=interval/3;
|
||||||
if (interval > USHRT_MAX)
|
if (interval > USHRT_MAX)
|
||||||
interval = USHRT_MAX;
|
interval = USHRT_MAX;
|
||||||
hello_hdr.circuit_t = circuit->circuit_is_type;
|
hello_hdr.circuit_t = circuit->circuit_is_type;
|
||||||
@ -2065,9 +2068,21 @@ send_lan_l1_hello (struct thread *thread)
|
|||||||
{
|
{
|
||||||
struct isis_circuit *circuit;
|
struct isis_circuit *circuit;
|
||||||
int retval;
|
int retval;
|
||||||
|
unsigned long next_hello;
|
||||||
|
|
||||||
circuit = THREAD_ARG (thread);
|
circuit = THREAD_ARG (thread);
|
||||||
assert (circuit);
|
assert (circuit);
|
||||||
|
|
||||||
|
if (!circuit->area) {
|
||||||
|
return ISIS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Pseudonode sends hellos three times more than the other nodes */
|
||||||
|
if (circuit->u.bc.is_dr[0])
|
||||||
|
next_hello=circuit->hello_interval[0]/3+1;
|
||||||
|
else
|
||||||
|
next_hello=circuit->hello_interval[0];
|
||||||
|
|
||||||
circuit->u.bc.t_send_lan_hello[0] = NULL;
|
circuit->u.bc.t_send_lan_hello[0] = NULL;
|
||||||
|
|
||||||
if (circuit->u.bc.run_dr_elect[0])
|
if (circuit->u.bc.run_dr_elect[0])
|
||||||
@ -2078,7 +2093,7 @@ send_lan_l1_hello (struct thread *thread)
|
|||||||
/* set next timer thread */
|
/* set next timer thread */
|
||||||
THREAD_TIMER_ON (master, circuit->u.bc.t_send_lan_hello[0],
|
THREAD_TIMER_ON (master, circuit->u.bc.t_send_lan_hello[0],
|
||||||
send_lan_l1_hello, circuit,
|
send_lan_l1_hello, circuit,
|
||||||
isis_jitter (circuit->hello_interval[0], IIH_JITTER));
|
isis_jitter (next_hello, IIH_JITTER));
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
@ -2088,6 +2103,7 @@ send_lan_l2_hello (struct thread *thread)
|
|||||||
{
|
{
|
||||||
struct isis_circuit *circuit;
|
struct isis_circuit *circuit;
|
||||||
int retval;
|
int retval;
|
||||||
|
unsigned long next_hello;
|
||||||
|
|
||||||
circuit = THREAD_ARG (thread);
|
circuit = THREAD_ARG (thread);
|
||||||
assert (circuit);
|
assert (circuit);
|
||||||
@ -2096,6 +2112,12 @@ send_lan_l2_hello (struct thread *thread)
|
|||||||
return ISIS_OK;
|
return ISIS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Pseudonode sends hellos three times more than the other nodes */
|
||||||
|
if (circuit->u.bc.is_dr[1])
|
||||||
|
next_hello=circuit->hello_interval[1]/3+1;
|
||||||
|
else
|
||||||
|
next_hello=circuit->hello_interval[1];
|
||||||
|
|
||||||
circuit->u.bc.t_send_lan_hello[1] = NULL;
|
circuit->u.bc.t_send_lan_hello[1] = NULL;
|
||||||
|
|
||||||
if (circuit->u.bc.run_dr_elect[1])
|
if (circuit->u.bc.run_dr_elect[1])
|
||||||
@ -2106,7 +2128,7 @@ send_lan_l2_hello (struct thread *thread)
|
|||||||
/* set next timer thread */
|
/* set next timer thread */
|
||||||
THREAD_TIMER_ON (master, circuit->u.bc.t_send_lan_hello[1],
|
THREAD_TIMER_ON (master, circuit->u.bc.t_send_lan_hello[1],
|
||||||
send_lan_l2_hello, circuit,
|
send_lan_l2_hello, circuit,
|
||||||
isis_jitter (circuit->hello_interval[1], IIH_JITTER));
|
isis_jitter (next_hello, IIH_JITTER));
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user