From 3057cb3363d2456ecd04e61cd4da2ff60b05fe0f Mon Sep 17 00:00:00 2001 From: Simon Duquennoy Date: Tue, 15 Mar 2016 16:10:01 +0100 Subject: [PATCH] TSCH: reset now also flushes all queues and resets backoff exponents --- core/net/mac/tsch/tsch-queue.c | 6 +++++- core/net/mac/tsch/tsch-queue.h | 4 ++-- core/net/mac/tsch/tsch.c | 4 ++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/core/net/mac/tsch/tsch-queue.c b/core/net/mac/tsch/tsch-queue.c index afe868030..1fdf04232 100644 --- a/core/net/mac/tsch/tsch-queue.c +++ b/core/net/mac/tsch/tsch-queue.c @@ -302,14 +302,17 @@ tsch_queue_free_packet(struct tsch_packet *p) /*---------------------------------------------------------------------------*/ /* Flush all neighbor queues */ void -tsch_queue_flush_all(void) +tsch_queue_reset(void) { /* Deallocate unneeded neighbors */ if(!tsch_is_locked()) { struct tsch_neighbor *n = list_head(neighbor_list); while(n != NULL) { struct tsch_neighbor *next_n = list_item_next(n); + /* Flush queue */ tsch_queue_flush_nbr_queue(n); + /* Reset backoff exponent */ + tsch_queue_backoff_reset(n); n = next_n; } } @@ -379,6 +382,7 @@ tsch_queue_get_packet_for_dest_addr(const linkaddr_t *addr, struct tsch_link *li } return NULL; } +/*---------------------------------------------------------------------------*/ /* Returns the head packet of any neighbor queue with zero backoff counter. * Writes pointer to the neighbor in *n */ struct tsch_packet * diff --git a/core/net/mac/tsch/tsch-queue.h b/core/net/mac/tsch/tsch-queue.h index b4061be23..c350ab063 100644 --- a/core/net/mac/tsch/tsch-queue.h +++ b/core/net/mac/tsch/tsch-queue.h @@ -166,8 +166,8 @@ int tsch_queue_packet_count(const linkaddr_t *addr); struct tsch_packet *tsch_queue_remove_packet_from_queue(struct tsch_neighbor *n); /* Free a packet */ void tsch_queue_free_packet(struct tsch_packet *p); -/* Flush all neighbor queues */ -void tsch_queue_flush_all(void); +/* Reset neighbor queues */ +void tsch_queue_reset(void); /* Deallocate neighbors with empty queue */ void tsch_queue_free_unused_neighbors(void); /* Is the neighbor queue empty? */ diff --git a/core/net/mac/tsch/tsch.c b/core/net/mac/tsch/tsch.c index 4e24ea8da..fa92fe8ad 100644 --- a/core/net/mac/tsch/tsch.c +++ b/core/net/mac/tsch/tsch.c @@ -199,8 +199,8 @@ tsch_reset(void) frame802154_set_pan_id(0xffff); /* First make sure pending packet callbacks are sent etc */ process_post_synch(&tsch_pending_events_process, PROCESS_EVENT_POLL, NULL); - /* Empty all neighbor queues */ - /* tsch_queue_flush_all(); */ + /* Reset neighbor queues */ + tsch_queue_reset(); /* Remove unused neighbors */ tsch_queue_free_unused_neighbors(); tsch_queue_update_time_source(NULL);