summaryrefslogtreecommitdiffstats
path: root/ffd/announce.c
diff options
context:
space:
mode:
Diffstat (limited to 'ffd/announce.c')
-rw-r--r--ffd/announce.c19
1 files changed, 3 insertions, 16 deletions
diff --git a/ffd/announce.c b/ffd/announce.c
index e1f7ae0..8911feb 100644
--- a/ffd/announce.c
+++ b/ffd/announce.c
@@ -28,20 +28,6 @@
#include "neigh.h"
-bool ffd_is_feasible(const ffd_announce_t *announce, ffd_metric_seqno_t ms) {
- if (FFD_IS_INFINITY(ms) || FFD_IS_INFINITY(announce->feasibility_distance))
- return true;
-
- int16_t seqno_diff = ms.seqno - announce->feasibility_distance.seqno;
-
- if (seqno_diff < 0)
- return true;
- if (seqno_diff == 0 && ms.metric < announce->feasibility_distance.metric)
- return true;
-
- return false;
-}
-
static ffd_nexthop_t* select_nexthop(const ffd_announce_t *announce) {
uint16_t ret_metric = 0xffff;
ffd_nexthop_t *ret = NULL;
@@ -62,7 +48,7 @@ static ffd_nexthop_t* select_nexthop(const ffd_announce_t *announce) {
return ret;
}
-ffd_metric_seqno_t ffd_announce_get_metric(const ffd_announce_t *announce) {
+ffd_metric_seqno_t get_metric(const ffd_announce_t *announce) {
if (announce->selected) {
uint32_t metric = announce->selected->metric_seqno.metric + ffd_neigh_get_cost(announce->selected->neigh);
@@ -75,6 +61,7 @@ ffd_metric_seqno_t ffd_announce_get_metric(const ffd_announce_t *announce) {
static inline void update_selected(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) {
@@ -90,7 +77,7 @@ void ffd_announce_update(ffd_announce_t *announce, ffd_nexthop_t *nexthop, ffd_m
ffd_announce_t* ffd_announce_new(void) {
ffd_announce_t *a = calloc(1, sizeof(ffd_announce_t));
- a->feasibility_distance.metric = 0xffff;
+ a->metric.metric = a->feasibility_distance.metric = 0xffff;
a->next = announce_list;
announce_list = a;