diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2012-10-07 19:16:31 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2012-10-07 19:16:31 +0200 |
commit | 5d538bb78e1820a807a8670cd3075757f2e115f0 (patch) | |
tree | a71c2ce2fb51f5265334629c43e0bdbdc8cac62b /ffd/announce.c | |
parent | ec6a57a218b4bf4bf6d2e6ae1a6a4db59aa79f64 (diff) | |
download | ffd-5d538bb78e1820a807a8670cd3075757f2e115f0.tar ffd-5d538bb78e1820a807a8670cd3075757f2e115f0.zip |
Periodically update selected nexthops
Diffstat (limited to 'ffd/announce.c')
-rw-r--r-- | ffd/announce.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/ffd/announce.c b/ffd/announce.c index 8911feb..99bf1aa 100644 --- a/ffd/announce.c +++ b/ffd/announce.c @@ -34,6 +34,9 @@ static ffd_nexthop_t* select_nexthop(const ffd_announce_t *announce) { ffd_nexthop_t *nexthop; for (nexthop = announce->nexthop_list; nexthop; nexthop = nexthop->next) { + if (!nexthop->neigh) /* local */ + return nexthop; + if (!ffd_is_feasible(announce, nexthop->metric_seqno)) continue; @@ -59,19 +62,19 @@ ffd_metric_seqno_t get_metric(const ffd_announce_t *announce) { return (ffd_metric_seqno_t){0xffff, 0}; } -static inline void update_selected(ffd_announce_t *announce) { +void ffd_announce_update(ffd_announce_t *announce) { announce->selected = select_nexthop(announce); announce->metric = get_metric(announce); } -void ffd_announce_update(ffd_announce_t *announce, ffd_nexthop_t *nexthop, ffd_metric_seqno_t ms, uint16_t interval) { +void ffd_announce_update_nexthop(ffd_announce_t *announce, ffd_nexthop_t *nexthop, ffd_metric_seqno_t ms, uint16_t interval) { nexthop->metric_seqno = ms; nexthop->interval = interval; if (ms.metric != 0xffff) nexthop->last_update = now; - update_selected(announce); + ffd_announce_update(announce); } ffd_announce_t* ffd_announce_new(void) { |