diff options
-rw-r--r-- | proto/babel/babel.c | 11 | ||||
-rw-r--r-- | proto/babel/babel.h | 1 |
2 files changed, 10 insertions, 2 deletions
diff --git a/proto/babel/babel.c b/proto/babel/babel.c index 10974474..54b31c22 100644 --- a/proto/babel/babel.c +++ b/proto/babel/babel.c @@ -760,6 +760,13 @@ babel_send_update_(struct babel_iface *ifa, btime changed, struct fib *rtable) { struct babel_proto *p = ifa->proto; + /* Update increase was requested */ + if (p->update_seqno_inc) + { + p->update_seqno++; + p->update_seqno_inc = 0; + } + FIB_WALK(rtable, struct babel_entry, e) { struct babel_route *r = e->selected_out; @@ -1299,8 +1306,8 @@ babel_handle_seqno_request(union babel_msg *m, struct babel_iface *ifa) /* Seqno is larger; check if we own the router id */ if (msg->router_id == p->router_id) { - /* Ours; update seqno and trigger global update */ - p->update_seqno++; + /* Ours; seqno increase and trigger global update */ + p->update_seqno_inc = 1; babel_trigger_update(p); } else diff --git a/proto/babel/babel.h b/proto/babel/babel.h index 1b857f09..d0c159f9 100644 --- a/proto/babel/babel.h +++ b/proto/babel/babel.h @@ -139,6 +139,7 @@ struct babel_proto { list interfaces; /* Interfaces we really know about (struct babel_iface) */ u64 router_id; u16 update_seqno; /* To be increased on request */ + u8 update_seqno_inc; /* Request for update_seqno increase */ u8 triggered; /* For triggering global updates */ slab *route_slab; |