Add gp_babel_since helper
This commit is contained in:
parent
8ca5dead7f
commit
48f77c26dc
4 changed files with 12 additions and 5 deletions
|
@ -152,6 +152,13 @@ static inline bool gp_babel_less(uint16_t a, uint16_t b) {
|
||||||
return (diff < 0);
|
return (diff < 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int64_t gp_babel_since(gmrf_context_t *ctx, gmrf_time_t t) {
|
||||||
|
if (t == gmrf_time_unspec)
|
||||||
|
return INT64_MAX;
|
||||||
|
|
||||||
|
return (gmrf_now(ctx->gmrf) - t)/10;
|
||||||
|
}
|
||||||
|
|
||||||
static inline bool gp_babel_is_metric_better(gp_babel_metric_seqno_t ms1, gp_babel_metric_seqno_t ms2) {
|
static inline bool gp_babel_is_metric_better(gp_babel_metric_seqno_t ms1, gp_babel_metric_seqno_t ms2) {
|
||||||
if (ms1.metric == GP_BABEL_INFINITY)
|
if (ms1.metric == GP_BABEL_INFINITY)
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -68,7 +68,7 @@ uint16_t gp_babel_neigh_get_rxcost(gmrf_context_t *ctx, const gp_babel_neigh_t *
|
||||||
if (!neigh->hello_log || !neigh->hello_interval || !neigh->iface)
|
if (!neigh->hello_log || !neigh->hello_interval || !neigh->iface)
|
||||||
return GP_BABEL_INFINITY;
|
return GP_BABEL_INFINITY;
|
||||||
|
|
||||||
int timediff = (gmrf_now(ctx->gmrf) - neigh->last_hello)/10;
|
int timediff = gp_babel_since(ctx, neigh->last_hello);
|
||||||
int shift = (timediff - neigh->hello_interval/2)/neigh->hello_interval;
|
int shift = (timediff - neigh->hello_interval/2)/neigh->hello_interval;
|
||||||
|
|
||||||
if (shift >= 16)
|
if (shift >= 16)
|
||||||
|
@ -83,7 +83,7 @@ uint16_t gp_babel_neigh_get_rxcost(gmrf_context_t *ctx, const gp_babel_neigh_t *
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t gp_babel_neigh_get_txcost(gmrf_context_t *ctx, const gp_babel_neigh_t *neigh) {
|
uint16_t gp_babel_neigh_get_txcost(gmrf_context_t *ctx, const gp_babel_neigh_t *neigh) {
|
||||||
if ((gmrf_now(ctx->gmrf) - neigh->last_ihu)/10 > GP_BABEL_IHU_TIMEOUT(neigh->ihu_interval) || !neigh->iface)
|
if (gp_babel_since(ctx, neigh->last_ihu) > GP_BABEL_IHU_TIMEOUT(neigh->ihu_interval) || !neigh->iface)
|
||||||
return GP_BABEL_INFINITY;
|
return GP_BABEL_INFINITY;
|
||||||
else
|
else
|
||||||
return neigh->txcost;
|
return neigh->txcost;
|
||||||
|
|
|
@ -109,7 +109,7 @@ static void maintain_nexthops(gmrf_context_t *ctx, gp_babel_route_t *route) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gmrf_now(ctx->gmrf) > nexthop->last_update+GP_BABEL_UPDATE_TIMEOUT(nexthop->interval)*10) {
|
if (gp_babel_since(ctx, nexthop->last_update) > GP_BABEL_UPDATE_TIMEOUT(nexthop->interval)) {
|
||||||
if (nexthop->metric_seqno.metric == GP_BABEL_INFINITY) {
|
if (nexthop->metric_seqno.metric == GP_BABEL_INFINITY) {
|
||||||
*cur = *next;
|
*cur = *next;
|
||||||
next = cur;
|
next = cur;
|
||||||
|
@ -126,7 +126,7 @@ static void maintain_nexthops(gmrf_context_t *ctx, gp_babel_route_t *route) {
|
||||||
nexthop->last_update += GP_BABEL_UPDATE_TIMEOUT(nexthop->interval)*10;
|
nexthop->last_update += GP_BABEL_UPDATE_TIMEOUT(nexthop->interval)*10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (gmrf_now(ctx->gmrf) > nexthop->last_update+GP_BABEL_UPDATE_REQUEST_TIMEOUT(nexthop->interval)*10 && route->selected == nexthop) {
|
else if (gp_babel_since(ctx, nexthop->last_update) > GP_BABEL_UPDATE_REQUEST_TIMEOUT(nexthop->interval)*10 && route->selected == nexthop) {
|
||||||
if (!nexthop->requested_update) {
|
if (!nexthop->requested_update) {
|
||||||
gmrf_logf(ctx->gmrf, LOG_INFO, "route about to expire, requesting update");
|
gmrf_logf(ctx->gmrf, LOG_INFO, "route about to expire, requesting update");
|
||||||
gp_babel_send_route_request(ctx, NULL, nexthop->neigh, &route->node);
|
gp_babel_send_route_request(ctx, NULL, nexthop->neigh, &route->node);
|
||||||
|
|
|
@ -77,7 +77,7 @@ static void handle_tlv_hello(gmrf_context_t *ctx, const gp_babel_tlv_hello_t *tl
|
||||||
uint16_t seqno = ntohs(tlv->seqno);
|
uint16_t seqno = ntohs(tlv->seqno);
|
||||||
|
|
||||||
if (neigh->last_hello != gmrf_time_unspec) {
|
if (neigh->last_hello != gmrf_time_unspec) {
|
||||||
int timediff = (gmrf_now(ctx->gmrf) - neigh->last_hello)/10;
|
int timediff = gp_babel_since(ctx, neigh->last_hello);
|
||||||
uint16_t seqexp = neigh->last_seqno + (timediff - neigh->hello_interval/2)/neigh->hello_interval;
|
uint16_t seqexp = neigh->last_seqno + (timediff - neigh->hello_interval/2)/neigh->hello_interval;
|
||||||
|
|
||||||
/* cast to int16_t to ensure correct handling of seqno wrapping */
|
/* cast to int16_t to ensure correct handling of seqno wrapping */
|
||||||
|
|
Reference in a new issue