From 239389ba30e21de22e6c2dd708f44ece11b5807a Mon Sep 17 00:00:00 2001 From: paul Date: Wed, 5 May 2004 14:09:37 +0000 Subject: 2004-05-05 Anthony.Golia@morganstanley.com * ripd.c: (rip_update_jitter) Bound jitter to a more sensible value, eg 1/4 of update time. --- ripd/ChangeLog | 5 +++++ ripd/ripd.c | 17 ++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) (limited to 'ripd') diff --git a/ripd/ChangeLog b/ripd/ChangeLog index 9f4e1bad..0f371791 100644 --- a/ripd/ChangeLog +++ b/ripd/ChangeLog @@ -1,3 +1,8 @@ +2004-05-05 Anthony.Golia@morganstanley.com + + * ripd.c: (rip_update_jitter) Bound jitter to a more sensible + value, eg 1/4 of update time. + 2004-05-03 Paul Jakma * ripd.c: (rip_rte_process) fix typo in merge of previous patch diff --git a/ripd/ripd.c b/ripd/ripd.c index d520af0e..b2c99f05 100644 --- a/ripd/ripd.c +++ b/ripd/ripd.c @@ -2710,7 +2710,22 @@ rip_request_send (struct sockaddr_in *to, struct interface *ifp, int rip_update_jitter (unsigned long time) { - return ((rand () % (time + 1)) - (time / 2)); +#define JITTER_BOUND 4 + /* We want to get the jitter to +/- 1/JITTER_BOUND the interval. + Given that, we cannot let time be less than JITTER_BOUND seconds. + The RIPv2 RFC says jitter should be small compared to + update_time. We consider 1/JITTER_BOUND to be small. + */ + + int jitter_input = time; + int jitter; + + if (jitter_input < JITTER_BOUND) + jitter_input = JITTER_BOUND; + + jitter = (((rand () % ((jitter_input * 2) + 1)) - jitter_input)); + + return jitter/JITTER_BOUND; } void -- cgit v1.2.1