From 13b755cd43cc022450abad9d6391ae7d2d731773 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Fri, 22 Mar 2013 03:45:38 +0100 Subject: Add data structures and functions for announcements --- src/babel.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/babel.h') diff --git a/src/babel.h b/src/babel.h index 4e78ca0..3385ec1 100644 --- a/src/babel.h +++ b/src/babel.h @@ -39,11 +39,14 @@ #define GP_BABEL_MAINTENANCE_INTERVAL GP_BABEL_HELLO_INTERVAL + struct gmrf_context { gp_babel_node_id_t self; gp_babel_iface_t *interfaces; gp_babel_neigh_t *neighbours; + + gp_babel_announce_t *announces; }; struct gp_babel_iface { @@ -75,6 +78,27 @@ struct gp_babel_neigh { uint16_t txcost; }; +struct gp_babel_announce { + gp_babel_announce_t *next; + + gp_babel_node_id_t node; + uint16_t type; + uint16_t key; + + gp_babel_metric_seqno_t metric; + uint16_t last_metric; + gp_babel_metric_seqno_t feasibility_distance; + + /* an incomplete announcement is specified by a len value of 0xff with NULL data */ + uint8_t len; + uint8_t *data; +}; + + +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 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) { @@ -91,4 +115,9 @@ void gp_babel_handle_packet(gmrf_t *gmrf, gmrf_context_t *ctx, gp_babel_iface_t void gp_babel_send_ack(gmrf_t *gmrf, gmrf_context_t *ctx, gp_babel_neigh_t *neigh, uint16_t nonce); void gp_babel_send_hellos(gmrf_t *gmrf, gmrf_context_t *ctx); +gp_babel_announce_t* gp_babel_announce_new(gmrf_t *gmrf, gmrf_context_t *ctx); +gp_babel_announce_t* gp_babel_announce_find(gmrf_t *gmrf, gmrf_context_t *ctx, const gp_babel_node_id_t *node, uint16_t type, uint16_t key); +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); + #endif /* _GMRF_PROTO_BABEL_BABEL_H_ */ -- cgit v1.2.3