summaryrefslogtreecommitdiffstats
path: root/src/babel.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/babel.h')
-rw-r--r--src/babel.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/babel.h b/src/babel.h
index 5870364..3e9b3fd 100644
--- a/src/babel.h
+++ b/src/babel.h
@@ -94,16 +94,34 @@ struct gp_babel_announce {
uint16_t last_metric;
gp_babel_metric_seqno_t feasibility_distance;
+ gp_babel_nexthop_t *selected;
+ gp_babel_nexthop_t *nexthops;
+
/* an incomplete announcement is specified by a len value of 0xff with NULL data */
uint8_t len;
uint8_t *data;
};
+struct gp_babel_nexthop {
+ gp_babel_nexthop_t *next;
+
+ gp_babel_neigh_t *neigh;
+ gp_babel_metric_seqno_t metric_seqno;
+
+ gmrf_time_t last_update;
+ uint16_t interval;
+ bool requested_update;
+};
+
static inline bool gp_babel_node_id_equal(const gp_babel_node_id_t *id1, const gp_babel_node_id_t *id2) {
return (memcmp(id1->id, id2->id, GP_BABEL_NODE_ID_LENGTH) == 0);
}
+static inline bool gp_babel_node_id_is_unspec(const gp_babel_node_id_t *id) {
+ return gp_babel_node_id_equal(id, &gp_babel_node_id_unspec);
+};
+
static inline gp_babel_iface_t* gp_babel_get_iface(gmrf_context_t *ctx, gmrf_iface_t *gmrf_iface) {
gp_babel_iface_t *iface;
for (iface = ctx->interfaces; iface; iface = iface->next) {
@@ -153,4 +171,7 @@ gp_babel_announce_t* gp_babel_announce_find(gmrf_t *gmrf, gmrf_context_t *ctx, c
gp_babel_announce_t* gp_babel_announce_get(gmrf_t *gmrf, gmrf_context_t *ctx, const gp_babel_node_id_t *node, uint16_t type, uint16_t key);
void gp_babel_announce_free(gmrf_t *gmrf, gmrf_context_t *ctx, gp_babel_announce_t *announce);
+gp_babel_nexthop_t* gp_babel_announce_nexthop_new(gp_babel_announce_t *announce, gp_babel_neigh_t *neigh);
+gp_babel_nexthop_t* gp_babel_announce_nexthop_find(const gp_babel_announce_t *announce, gp_babel_neigh_t *neigh);
+
#endif /* _GMRF_PROTO_BABEL_BABEL_H_ */