Hotfix to solve an issue with delaying timers reported by Aleksey Chudov.

This commit is contained in:
Ondrej Filip 2013-02-21 00:44:59 +01:00
parent 9d969be5f2
commit 2bf59bf4d3
2 changed files with 11 additions and 5 deletions

View file

@ -2734,7 +2734,7 @@ other than equally configured BIRD. I have warned you.
<tag>period <M>number</M> <tag>period <M>number</M>
</tag>specifies the number of seconds between periodic updates. Default is 30 seconds. A lower </tag>specifies the number of seconds between periodic updates. Default is 30 seconds. A lower
number will mean faster convergence but bigger network number will mean faster convergence but bigger network
load. Do not use values lower than 10. load. Do not use values lower than 12.
<tag>timeout time <M>number</M> <tag>timeout time <M>number</M>
</tag>specifies how old route has to be to be considered unreachable. Default is 4*<cf/period/. </tag>specifies how old route has to be to be considered unreachable. Default is 4*<cf/period/.
@ -2764,7 +2764,7 @@ other than equally configured BIRD. I have warned you.
protocol rip MyRIP_test { protocol rip MyRIP_test {
debug all; debug all;
port 1520; port 1520;
period 10; period 12;
garbage time 60; garbage time 60;
interface "eth0" { metric 3; mode multicast; }; interface "eth0" { metric 3; mode multicast; };
interface "eth*" { metric 2; mode broadcast; }; interface "eth*" { metric 2; mode broadcast; };

View file

@ -596,8 +596,12 @@ rip_start(struct proto *p)
init_list( &P->interfaces ); init_list( &P->interfaces );
P->timer = tm_new( p->pool ); P->timer = tm_new( p->pool );
P->timer->data = p; P->timer->data = p;
P->timer->randomize = 5; P->timer->randomize = 2;
P->timer->recurrent = (P_CF->period / 6)+1; P->timer->recurrent = (P_CF->period / 6) - 1;
if (P_CF->period < 12) {
log(L_WARN "Period %d is too low. So I am using 12 which is the lowest possible value.", P_CF->period);
P->timer->recurrent = 1;
}
P->timer->hook = rip_timer; P->timer->hook = rip_timer;
tm_start( P->timer, 5 ); tm_start( P->timer, 5 );
rif = new_iface(p, NULL, 0, NULL); /* Initialize dummy interface */ rif = new_iface(p, NULL, 0, NULL); /* Initialize dummy interface */
@ -956,9 +960,11 @@ rip_rte_insert(net *net UNUSED, rte *rte)
static void static void
rip_rte_remove(net *net UNUSED, rte *rte) rip_rte_remove(net *net UNUSED, rte *rte)
{ {
// struct proto *p = rte->attrs->proto; #ifdef LOCAL_DEBUG
struct proto *p = rte->attrs->proto;
CHK_MAGIC; CHK_MAGIC;
DBG( "rip_rte_remove: %p\n", rte ); DBG( "rip_rte_remove: %p\n", rte );
#endif
rem_node( &rte->u.rip.garbage ); rem_node( &rte->u.rip.garbage );
} }