summaryrefslogtreecommitdiffstats
path: root/ffd/announce.c
diff options
context:
space:
mode:
Diffstat (limited to 'ffd/announce.c')
-rw-r--r--ffd/announce.c9
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) {