From 0af36311e10c0dd480bcfca5774db738e165066d Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sun, 24 Mar 2013 02:54:17 +0100 Subject: Add nexthop data structure and receive updates --- src/babel.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/babel.h') 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_ */ -- cgit v1.2.3