diff --git a/sys/net/routing/aodvv2/aodv.c b/sys/net/routing/aodvv2/aodv.c index 906ba2d2e38d..c0c3ed23ddaf 100644 --- a/sys/net/routing/aodvv2/aodv.c +++ b/sys/net/routing/aodvv2/aodv.c @@ -23,6 +23,11 @@ #define ENABLE_DEBUG (0) #include "debug.h" +#ifdef DEBUG +#define ENABLE_AODV_DEBUG (1) +#include "aodv_debug.h" +#endif + #define UDP_BUFFER_SIZE (128) /** with respect to IEEE 802.15.4's MTU */ #define RCV_MSG_Q_SIZE (32) /* TODO: check if smaller values work, too */ @@ -56,7 +61,7 @@ static struct writer_target *wt; void aodv_init(void) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); /* TODO: set if_id properly */ int if_id = 0; @@ -82,7 +87,7 @@ void aodv_init(void) /* start listening & enable sending */ thread_create(aodv_rcv_stack_buf, sizeof(aodv_rcv_stack_buf), PRIORITY_MAIN, CREATE_STACKTEST, _aodv_receiver_thread, NULL, "_aodv_receiver_thread"); - DEBUG("[aodvv2] listening on port %d\n", HTONS(MANET_PORT)); + AODV_DEBUG("listening on port %d\n", HTONS(MANET_PORT)); sender_thread = thread_create(aodv_snd_stack_buf, KERNEL_CONF_STACKSIZE_MAIN, PRIORITY_MAIN, CREATE_STACKTEST, _aodv_sender_thread, NULL, "_aodv_sender_thread"); @@ -102,7 +107,7 @@ void aodv_set_metric_type(aodvv2_metric_t metric_type) void aodv_send_rreq(struct aodvv2_packet_data *packet_data) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); struct aodvv2_packet_data *pd = malloc(sizeof(struct aodvv2_packet_data)); memcpy(pd, packet_data, sizeof(struct aodvv2_packet_data)); @@ -129,7 +134,7 @@ void aodv_send_rreq(struct aodvv2_packet_data *packet_data) void aodv_send_rrep(struct aodvv2_packet_data *packet_data, struct netaddr *next_hop) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); struct aodvv2_packet_data *pd = malloc(sizeof(struct aodvv2_packet_data)); memcpy(pd, packet_data, sizeof(struct aodvv2_packet_data)); @@ -159,7 +164,7 @@ void aodv_send_rrep(struct aodvv2_packet_data *packet_data, struct netaddr *next void aodv_send_rerr(struct unreachable_node unreachable_nodes[], size_t len, struct netaddr *next_hop) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); struct rerr_data *rerrd = malloc(sizeof(struct rerr_data)); *rerrd = (struct rerr_data) @@ -192,12 +197,12 @@ static void _init_addresses(void) { /* init multicast address: set to to a link-local all nodes multicast address */ ipv6_addr_set_all_nodes_addr(&_v6_addr_mcast); - DEBUG("[aodvv2] my multicast address is: %s\n", + AODV_DEBUG("my multicast address is: %s\n", ipv6_addr_to_str(addr_str, IPV6_MAX_ADDR_STR_LEN, &_v6_addr_mcast)); /* get best IP for sending */ ipv6_net_if_get_best_src_addr(&_v6_addr_local, &_v6_addr_mcast); - DEBUG("[aodvv2] my src address is: %s\n", + AODV_DEBUG("my src address is: %s\n", ipv6_addr_to_str(addr_str, IPV6_MAX_ADDR_STR_LEN, &_v6_addr_local)); /* store src & multicast address as netaddr as well for easy interaction @@ -217,7 +222,7 @@ static void _init_sock_snd(void) _sock_snd = socket_base_socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP); if (-1 == _sock_snd) { - DEBUG("[aodvv2] Error Creating Socket!\n"); + AODV_DEBUG("Error Creating Socket!\n"); return; } } @@ -230,10 +235,10 @@ static void *_aodv_sender_thread(void *arg) msg_t msgq[RCV_MSG_Q_SIZE]; msg_init_queue(msgq, sizeof msgq); - DEBUG("[aodvv2] _aodv_sender_thread initialized.\n"); + AODV_DEBUG("_aodv_sender_thread initialized.\n"); while (true) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); msg_t msg; msg_receive(&msg); struct msg_container *mc = (struct msg_container *) msg.content.ptr; @@ -265,7 +270,7 @@ static void *_aodv_receiver_thread(void *arg) { (void) arg; - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); uint32_t fromlen; int32_t rcv_size; char buf_rcv[UDP_BUFFER_SIZE]; @@ -284,16 +289,16 @@ static void *_aodv_receiver_thread(void *arg) socket_base_close(sock_rcv); } - DEBUG("[aodvv2] ready to receive data\n"); + AODV_DEBUG("ready to receive data\n"); while (true) { rcv_size = socket_base_recvfrom(sock_rcv, (void *)buf_rcv, UDP_BUFFER_SIZE, 0, &sa_rcv, &fromlen); if (rcv_size < 0) { - DEBUG("[aodvv2] ERROR receiving data!\n"); + AODV_DEBUG("ERROR receiving data!\n"); } - DEBUG("[aodvv2] _aodv_receiver_thread() %s:", + AODV_DEBUG("_aodv_receiver_thread() %s:", ipv6_addr_to_str(addr_str, IPV6_MAX_ADDR_STR_LEN, &_v6_addr_local)); DEBUG(" UDP packet received from %s\n", ipv6_addr_to_str(addr_str, IPV6_MAX_ADDR_STR_LEN, &sa_rcv.sin6_addr)); @@ -303,7 +308,7 @@ static void *_aodv_receiver_thread(void *arg) /* For some reason we sometimes get passed our own packets. drop them. */ if (!netaddr_cmp(&_sender, &na_local) == 0) { - DEBUG("[aodvv2] received our own packet, dropping it.\n"); + AODV_DEBUG("received our own packet, dropping it.\n"); reader_handle_packet((void *) buf_rcv, rcv_size, &_sender); } } @@ -315,7 +320,7 @@ static void *_aodv_receiver_thread(void *arg) ipv6_addr_t *aodv_get_next_hop(ipv6_addr_t *dest) { - DEBUG("[aodvv2] aodv_get_next_hop() %s:", + AODV_DEBUG("aodv_get_next_hop() %s:", ipv6_addr_to_str(addr_str, IPV6_MAX_ADDR_STR_LEN, &_v6_addr_local)); DEBUG(" getting next hop for %s\n", ipv6_addr_to_str(addr_str, IPV6_MAX_ADDR_STR_LEN, dest)); @@ -328,7 +333,7 @@ ipv6_addr_t *aodv_get_next_hop(ipv6_addr_t *dest) /* The network stack sometimes asks us for the next hop towards our own IP */ if (memcmp(dest, &_v6_addr_local, sizeof(ipv6_addr_t)) == 0) { - DEBUG("[aodvv2] That's me, returning loopback\n"); + AODV_DEBUG("That's me, returning loopback\n"); return &_v6_addr_loopback; } @@ -438,7 +443,7 @@ static void _write_packet(struct rfc5444_writer *wr __attribute__ ((unused)), struct rfc5444_writer_target *iface __attribute__((unused)), void *buffer, size_t length) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); /* generate hexdump and human readable representation of packet * and print to console */ abuf_hexdump(&_hexbuf, "\t", buffer, length); @@ -455,7 +460,7 @@ static void _write_packet(struct rfc5444_writer *wr __attribute__ ((unused)), /* When originating a RREQ, add it to our RREQ table/update its predecessor */ if (wt->type == RFC5444_MSGTYPE_RREQ && netaddr_cmp(&wt->packet_data.origNode.addr, &na_local) == 0) { - DEBUG("[aodvv2] originating RREQ with SeqNum %d towards %s via %s; updating RREQ table...\n", + AODV_DEBUG("originating RREQ with SeqNum %d towards %s via %s; updating RREQ table...\n", wt->packet_data.origNode.seqnum, netaddr_to_string(&nbuf, &wt->packet_data.targNode.addr), ipv6_addr_to_str(addr_str, IPV6_MAX_ADDR_STR_LEN, &sa_wp.sin6_addr)); @@ -466,7 +471,7 @@ static void _write_packet(struct rfc5444_writer *wr __attribute__ ((unused)), 0, &sa_wp, sizeof sa_wp); (void) bytes_sent; - DEBUG("[aodvv2] %d bytes sent.\n", bytes_sent); + AODV_DEBUG("%d bytes sent.\n", bytes_sent); } /* free the matryoshka doll of cobbled-together structs that the sender_thread receives */ diff --git a/sys/net/routing/aodvv2/aodv_debug.h b/sys/net/routing/aodvv2/aodv_debug.h new file mode 100644 index 000000000000..ca00dc61fd2e --- /dev/null +++ b/sys/net/routing/aodvv2/aodv_debug.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2014 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @addtogroup core_util + * @{ + * + * @ingroup aodvv2 + * @brief Debug-header for aodvv2 debug messages + * + * + * @author Lotte Steenbrink + */ + +#ifndef AODV_DEBUG_H_ +#define AODV_DEBUG_H_ + +#include +#include "sched.h" + +#ifdef __cplusplus + extern "C" { +#endif + +/** + * @brief Print aodvv2 specific debug information to std-out with [aodvv2] prefix + * + */ +#if ENABLE_AODV_DEBUG +#include "tcb.h" +#define AODV_DEBUG(...) \ + do { \ + printf("[aodvv2] "); \ + printf(__VA_ARGS__); \ + } while (0) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* AODVV2_DEBUG_H_*/ \ No newline at end of file diff --git a/sys/net/routing/aodvv2/reader.c b/sys/net/routing/aodvv2/reader.c index b239407ed1c2..dfd9e024a768 100644 --- a/sys/net/routing/aodvv2/reader.c +++ b/sys/net/routing/aodvv2/reader.c @@ -26,12 +26,14 @@ #define ENABLE_DEBUG (0) #include "debug.h" +#ifdef DEBUG +#define ENABLE_AODV_DEBUG (1) +#include "aodv_debug.h" +#endif + #define VERBOSE_DEBUG (0) #if VERBOSE_DEBUG -#define VDEBUG(...) printf(__VA_ARGS__) -#undef VERBOSE_DEBUG -#else -#define VDEBUG(...) +#define VDEBUG(...) AODV_DEBUG(__VA_ARGS__) #endif static enum rfc5444_result _cb_rreq_blocktlv_addresstlvs_okay( @@ -167,7 +169,7 @@ static struct rfc5444_reader_tlvblock_consumer_entry _rerr_address_consumer_entr */ static enum rfc5444_result _cb_rreq_blocktlv_messagetlvs_okay(struct rfc5444_reader_tlvblock_context *cont) { - VDEBUG("[aodvv2] %s()\n", __func__); + VDEBUG("%s()\n", __func__); if (!cont->has_hoplimit) { DEBUG("\tERROR: missing hop limit\n"); @@ -198,7 +200,7 @@ static enum rfc5444_result _cb_rreq_blocktlv_addresstlvs_okay(struct rfc5444_rea bool is_origNode_addr = false; bool is_targNode_addr = false; - VDEBUG("[aodvv2] %s()\n", __func__); + VDEBUG("%s()\n", __func__); DEBUG("\taddr: %s\n", netaddr_to_string(&nbuf, &cont->addr)); /* handle OrigNode SeqNum TLV */ @@ -366,14 +368,14 @@ static enum rfc5444_result _cb_rreq_end_callback( * processing continues as follows. */ if (clienttable_is_client(&packet_data.targNode.addr)) { - DEBUG("[aodvv2] TargNode is in client list, sending RREP\n"); + AODV_DEBUG("TargNode is in client list, sending RREP\n"); /* make sure to start with a clean metric value */ packet_data.targNode.metric = 0; aodv_send_rrep(&packet_data, &packet_data.sender); } else { - DEBUG("[aodvv2] I am not TargNode, forwarding RREQ\n"); + AODV_DEBUG("I am not TargNode, forwarding RREQ\n"); aodv_send_rreq(&packet_data); } return RFC5444_OKAY; @@ -387,7 +389,7 @@ static enum rfc5444_result _cb_rreq_end_callback( */ static enum rfc5444_result _cb_rrep_blocktlv_messagetlvs_okay(struct rfc5444_reader_tlvblock_context *cont) { - VDEBUG("[aodvv2] %s()\n", __func__); + VDEBUG("%s()\n", __func__); if (!cont->has_hoplimit) { VDEBUG("\tERROR: missing hop limit\n"); @@ -418,7 +420,7 @@ static enum rfc5444_result _cb_rrep_blocktlv_addresstlvs_okay(struct rfc5444_rea struct rfc5444_reader_tlvblock_entry *tlv; bool is_targNode_addr = false; - VDEBUG("[aodvv2] %s()\n", __func__); + VDEBUG("%s()\n", __func__); VDEBUG("\taddr: %s\n", netaddr_to_string(&nbuf, &cont->addr)); /* handle TargNode SeqNum TLV */ @@ -477,7 +479,7 @@ static enum rfc5444_result _cb_rrep_end_callback( { (void) cont; - VDEBUG("[aodvv2] %s()\n", __func__); + VDEBUG("%s()\n", __func__); struct aodvv2_routing_entry_t *rt_entry; #ifdef DEBUG @@ -576,7 +578,7 @@ static enum rfc5444_result _cb_rrep_end_callback( /* If HandlingRtr is not RREQ_Gen then the outgoing RREP is sent to the * Route.NextHopAddress for the RREP.AddrBlk[OrigNodeNdx]. */ else { - DEBUG("[aodvv2] Not my RREP, passing it on to the next hop\n"); + AODV_DEBUG("Not my RREP, passing it on to the next hop\n"); aodv_send_rrep(&packet_data, routingtable_get_next_hop(&packet_data.origNode.addr,packet_data.metricType)); } @@ -585,7 +587,7 @@ static enum rfc5444_result _cb_rrep_end_callback( static enum rfc5444_result _cb_rerr_blocktlv_messagetlvs_okay(struct rfc5444_reader_tlvblock_context *cont) { - VDEBUG("[aodvv2] %s()\n", __func__); + VDEBUG("%s()\n", __func__); if (!cont->has_hoplimit) { VDEBUG("\tERROR: missing hop limit\n"); @@ -616,7 +618,7 @@ static enum rfc5444_result _cb_rerr_blocktlv_addresstlvs_okay(struct rfc5444_rea struct aodvv2_routing_entry_t *unreachable_entry; struct rfc5444_reader_tlvblock_entry *tlv; - VDEBUG("[aodvv2] %s()\n", __func__); + VDEBUG("%s()\n", __func__); VDEBUG("\tmessage type: %d\n", cont->type); VDEBUG("\taddr: %s\n", netaddr_to_string(&nbuf, &cont->addr)); @@ -675,7 +677,7 @@ static enum rfc5444_result _cb_rerr_end_callback(struct rfc5444_reader_tlvblock_ void reader_init(void) { - VDEBUG("[aodvv2] %s()\n", __func__); + VDEBUG("%s()\n", __func__); /* initialize reader */ rfc5444_reader_init(&reader); @@ -703,13 +705,13 @@ void reader_init(void) void reader_cleanup(void) { - VDEBUG("[aodvv2] %s()\n", __func__); + VDEBUG("%s()\n", __func__); rfc5444_reader_cleanup(&reader); } int reader_handle_packet(void *buffer, size_t length, struct netaddr *sender) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); memcpy(&packet_data.sender, sender, sizeof(*sender)); DEBUG("\t sender: %s\n", netaddr_to_string(&nbuf, &packet_data.sender)); diff --git a/sys/net/routing/aodvv2/routingtable.c b/sys/net/routing/aodvv2/routingtable.c index 3b01d8427c47..1188b462a022 100644 --- a/sys/net/routing/aodvv2/routingtable.c +++ b/sys/net/routing/aodvv2/routingtable.c @@ -22,6 +22,11 @@ #define ENABLE_DEBUG (0) #include "debug.h" +#ifdef DEBUG +#define ENABLE_AODV_DEBUG (1) +#include "aodv_debug.h" +#endif + /* helper functions */ static void _reset_entry_if_stale(uint8_t i); @@ -43,7 +48,7 @@ void routingtable_init(void) for (unsigned i = 0; i < AODVV2_MAX_ROUTING_ENTRIES; i++) { memset(&routing_table[i], 0, sizeof(routing_table[i])); } - DEBUG("[aodvv2] routing table initialized.\n"); + AODV_DEBUG("routing table initialized.\n"); } struct netaddr *routingtable_get_next_hop(struct netaddr *dest, aodvv2_metric_t metricType) diff --git a/sys/net/routing/aodvv2/utils.c b/sys/net/routing/aodvv2/utils.c index 05327d4c4db8..f1c2f034b6f4 100644 --- a/sys/net/routing/aodvv2/utils.c +++ b/sys/net/routing/aodvv2/utils.c @@ -22,6 +22,11 @@ #define ENABLE_DEBUG (0) #include "debug.h" +#ifdef DEBUG +#define ENABLE_AODV_DEBUG (1) +#include "aodv_debug.h" +#endif + /* Some aodvv2 utilities (mostly tables) */ static mutex_t clientt_mutex; static mutex_t rreqt_mutex; @@ -48,7 +53,7 @@ void clienttable_init(void) } mutex_unlock(&clientt_mutex); - DEBUG("[aodvv2] client table initialized.\n"); + AODV_DEBUG("client table initialized.\n"); } void clienttable_add_client(struct netaddr *addr) @@ -60,13 +65,13 @@ void clienttable_add_client(struct netaddr *addr) if ((client_table[i]._type == AF_UNSPEC) && (client_table[i]._prefix_len == 0)) { client_table[i] = *addr; - DEBUG("[aodvv2] clienttable: added client %s\n", + AODV_DEBUG("clienttable: added client %s\n", netaddr_to_string(&nbuf, addr)); mutex_unlock(&clientt_mutex); return; } } - DEBUG("[aodvv2] Error: Client could not be added: Client table is full.\n"); + AODV_DEBUG("Error: Client could not be added: Client table is full.\n"); mutex_unlock(&clientt_mutex); } } @@ -110,7 +115,7 @@ void rreqtable_init(void) memset(&rreq_table[i], 0, sizeof(rreq_table[i])); } mutex_unlock(&rreqt_mutex); - DEBUG("[aodvv2] RREQ table initialized.\n"); + AODV_DEBUG("RREQ table initialized.\n"); } bool rreqtable_is_redundant(struct aodvv2_packet_data *packet_data) diff --git a/sys/net/routing/aodvv2/writer.c b/sys/net/routing/aodvv2/writer.c index 0f2a7913e0f0..bc1cb8fbd577 100644 --- a/sys/net/routing/aodvv2/writer.c +++ b/sys/net/routing/aodvv2/writer.c @@ -26,6 +26,11 @@ #define ENABLE_DEBUG (0) #include "debug.h" +#ifdef DEBUG +#define ENABLE_AODV_DEBUG (1) +#include "aodv_debug.h" +#endif + static void _cb_addMessageHeader(struct rfc5444_writer *wr, struct rfc5444_writer_message *message); @@ -114,7 +119,7 @@ static struct rfc5444_writer_tlvtype _rerr_addrtlvs[] = static void _cb_addMessageHeader(struct rfc5444_writer *wr, struct rfc5444_writer_message *message) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); /* no originator, no hopcount, has hoplimit, no seqno */ rfc5444_writer_set_msg_header(wr, message, false, false, true, false); @@ -128,7 +133,7 @@ _cb_addMessageHeader(struct rfc5444_writer *wr, struct rfc5444_writer_message *m static void _cb_rreq_addAddresses(struct rfc5444_writer *wr) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); struct rfc5444_writer_address *origNode_addr; @@ -160,7 +165,7 @@ _cb_rreq_addAddresses(struct rfc5444_writer *wr) static void _cb_rrep_addAddresses(struct rfc5444_writer *wr) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); struct rfc5444_writer_address *origNode_addr, *targNode_addr; @@ -198,7 +203,7 @@ _cb_rrep_addAddresses(struct rfc5444_writer *wr) static void _cb_rerr_addAddresses(struct rfc5444_writer *wr) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); for (unsigned i = 0; i < _num_unreachable_nodes; i++) { /* add unreachableNode addresses (has no address tlv); is mandatory address */ @@ -220,7 +225,7 @@ _cb_rerr_addAddresses(struct rfc5444_writer *wr) void writer_init(write_packet_func_ptr ptr) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); mutex_init(&writer_mutex); @@ -273,7 +278,7 @@ void writer_init(write_packet_func_ptr ptr) */ void writer_send_rreq(struct aodvv2_packet_data *packet_data, struct netaddr *next_hop) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); if (packet_data == NULL || next_hop == NULL) { return; @@ -302,7 +307,7 @@ void writer_send_rreq(struct aodvv2_packet_data *packet_data, struct netaddr *ne */ void writer_send_rrep(struct aodvv2_packet_data *packet_data, struct netaddr *next_hop) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); if (packet_data == NULL || next_hop == NULL) { return; @@ -334,7 +339,7 @@ void writer_send_rrep(struct aodvv2_packet_data *packet_data, struct netaddr *ne void writer_send_rerr(struct unreachable_node unreachable_nodes[], size_t len, int hoplimit, struct netaddr *next_hop) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); if (unreachable_nodes == NULL || next_hop == NULL) { return; @@ -356,6 +361,6 @@ void writer_send_rerr(struct unreachable_node unreachable_nodes[], size_t len, void writer_cleanup(void) { - DEBUG("[aodvv2] %s()\n", __func__); + AODV_DEBUG("%s()\n", __func__); rfc5444_writer_cleanup(&writer); }