From 2d369f16e420f01f0fc5cbc168ccc662d3328a43 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 21 Mar 2013 03:07:51 +0100 Subject: Implement ACK request handling --- src/send.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/send.c') diff --git a/src/send.c b/src/send.c index 7fc9453..fd3f9d7 100644 --- a/src/send.c +++ b/src/send.c @@ -31,6 +31,30 @@ #include "tlv_types.h" +static inline bool send_neigh(gmrf_t *gmrf, const gp_babel_neigh_t *neigh, const gp_babel_packet_t *packet) { + if (!neigh->iface) + return false; + + if (!gmrf_iface_send(gmrf, neigh->iface->gmrf_iface, packet, gp_babel_packet_size(packet), &neigh->addr)) { + gmrf_logf(gmrf, LOG_WARNING, "gmrf_iface_send: %m"); + return false; + } + + return true; +} + +void gp_babel_send_ack(gmrf_t *gmrf, gmrf_context_t *ctx, gp_babel_neigh_t *neigh, uint16_t nonce) { + gp_babel_packet_t *packet = alloca_packet(GP_BABEL_PACKET_MAX); + + gp_babel_tlv_ack_t *ack = gp_babel_tlv_add(packet, GP_BABEL_PACKET_MAX, TLV_ACK, sizeof(gp_babel_tlv_ack_t)); + if (!ack) + return; + + ack->nonce = htons(nonce); + + send_neigh(gmrf, neigh, packet); +} + static void add_ihus(gmrf_t *gmrf, gp_babel_packet_t *packet, size_t max_len, const gp_babel_iface_t *iface) { const gp_babel_neigh_t *neigh; -- cgit v1.2.3