diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2012-10-08 03:24:05 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2012-10-08 03:24:05 +0200 |
commit | ec21d1874e54cfb4ce2f0e91ba0310b378b60a4b (patch) | |
tree | 454ba4b442419bfb7ab3d67287918c7b44803b5a /ffd/announce.c | |
parent | 26f5dc2ab09ed83380a374300b10a245f4c848f4 (diff) | |
download | ffd-ec21d1874e54cfb4ce2f0e91ba0310b378b60a4b.tar ffd-ec21d1874e54cfb4ce2f0e91ba0310b378b60a4b.zip |
Send triggered updates
Diffstat (limited to 'ffd/announce.c')
-rw-r--r-- | ffd/announce.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/ffd/announce.c b/ffd/announce.c index ae0a406..0d7b1bc 100644 --- a/ffd/announce.c +++ b/ffd/announce.c @@ -115,6 +115,15 @@ void ffd_announce_update(ffd_announce_t *announce) { announce->selected = select_nexthop(announce); announce->metric = get_metric(announce); + + /* triggered updates */ + int diff = announce->metric.metric - announce->last_metric; + + if (((announce->last_metric == 0xffff) != (announce->metric.metric == 0xffff)) + || diff <= -1024 || diff >= 384) { + fprintf(stderr, "info: announce metric has changed significantly, sending updates\n"); + ffd_send_update(NULL, NULL, announce, false); + } } void ffd_announce_update_nexthop(ffd_announce_t *announce, ffd_nexthop_t *nexthop, ffd_metric_seqno_t ms, uint16_t interval) { @@ -131,7 +140,7 @@ void ffd_announce_update_nexthop(ffd_announce_t *announce, ffd_nexthop_t *nextho ffd_announce_t* ffd_announce_new(void) { ffd_announce_t *a = calloc(1, sizeof(ffd_announce_t)); - a->metric.metric = a->feasibility_distance.metric = 0xffff; + a->metric.metric = a->feasibility_distance.metric = a->last_metric = 0xffff; a->next = announce_list; announce_list = a; |