diff --git a/sys/net/routing/aodvv2/utils.c b/sys/net/routing/aodvv2/utils.c index 55be6e8c141f63fe369f6969100ee33aaf6d1819..1f66748bc554799aeb17cddb7c9d2de2a0956ac7 100644 --- a/sys/net/routing/aodvv2/utils.c +++ b/sys/net/routing/aodvv2/utils.c @@ -117,7 +117,7 @@ bool rreqtable_is_redundant(struct aodvv2_packet_data *packet_data) { struct aodvv2_rreq_entry *comparable_rreq; timex_t now; - bool result; + bool result = false; mutex_lock(&rreqt_mutex); comparable_rreq = _get_comparable_rreq(packet_data); @@ -125,7 +125,6 @@ bool rreqtable_is_redundant(struct aodvv2_packet_data *packet_data) /* if there is no comparable rreq stored, add one and return false */ if (comparable_rreq == NULL) { _add_rreq(packet_data); - result = false; } else { int seqnum_comparison = seqnum_cmp(packet_data->origNode.seqnum, comparable_rreq->seqnum); @@ -140,8 +139,9 @@ bool rreqtable_is_redundant(struct aodvv2_packet_data *packet_data) } if (seqnum_comparison == 1) { - /* Update RREQ table entry with new seqnum value */ + /* Update RREQ table entry with new seqnum and metric value */ comparable_rreq->seqnum = packet_data->origNode.seqnum; + comparable_rreq->metric = packet_data->origNode.metric; } /* @@ -159,7 +159,6 @@ bool rreqtable_is_redundant(struct aodvv2_packet_data *packet_data) /* Since we've changed RREQ info, update the timestamp */ vtimer_now(&now); comparable_rreq->timestamp = now; - result = true; } mutex_unlock(&rreqt_mutex); diff --git a/sys/net/routing/aodvv2/utils.h b/sys/net/routing/aodvv2/utils.h index 8baee0e1f98d871339bfb108bdd870abef3e4632..2c35190596ff36c4ef8ca68e1675b5f45a7d50a7 100644 --- a/sys/net/routing/aodvv2/utils.h +++ b/sys/net/routing/aodvv2/utils.h @@ -91,6 +91,7 @@ void rreqtable_init(void); * Check if a RREQ is redundant, i.e. was received from another node already. * Behaves as described in Sections 5.7. and 7.6. * @param packet_data data of the RREQ in question + * @return true if packet_data is redundant, false otherwise. */ bool rreqtable_is_redundant(struct aodvv2_packet_data *packet_data);