diff options
Diffstat (limited to 'proto/babel/babel.c')
-rw-r--r-- | proto/babel/babel.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/proto/babel/babel.c b/proto/babel/babel.c index 797a83d4..ce05191c 100644 --- a/proto/babel/babel.c +++ b/proto/babel/babel.c @@ -2226,6 +2226,14 @@ babel_init(struct proto_config *CF) return P; } +static inline void +babel_randomize_router_id(struct babel_proto *p) +{ + p->router_id &= (u64) 0xffffffff; + p->router_id |= ((u64) random()) << 32; + TRACE(D_EVENTS, "Randomized router ID to %lR", p->router_id); +} + static int babel_start(struct proto *P) { @@ -2244,6 +2252,9 @@ babel_start(struct proto *P) p->update_seqno = 1; p->router_id = proto_get_router_id(&cf->c); + if (cf->randomize_router_id) + babel_randomize_router_id(p); + p->route_slab = sl_new(P->pool, sizeof(struct babel_route)); p->source_slab = sl_new(P->pool, sizeof(struct babel_source)); p->msg_slab = sl_new(P->pool, sizeof(struct babel_msg_node)); |