From 3fe846dbada52ef4b1a738340ff073514bb65a2e Mon Sep 17 00:00:00 2001 From: Simon Duquennoy Date: Mon, 26 Mar 2018 11:35:35 -0700 Subject: [PATCH] TSCH burst mode: bounded burst lengths --- os/net/mac/tsch/tsch-conf.h | 13 ++++++++++--- os/net/mac/tsch/tsch-schedule.c | 2 +- os/net/mac/tsch/tsch-slot-operation.c | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/os/net/mac/tsch/tsch-conf.h b/os/net/mac/tsch/tsch-conf.h index 934e0884f..afd90aaef 100644 --- a/os/net/mac/tsch/tsch-conf.h +++ b/os/net/mac/tsch/tsch-conf.h @@ -318,10 +318,17 @@ #endif /* Add burst mode to 6TiSCH minimal schedule */ -#ifdef TSCH_SCHEDULE_CONF_WITH_6TISCH_MINIMAL_WITH_BURST -#define TSCH_SCHEDULE_WITH_6TISCH_MINIMAL_WITH_BURST TSCH_SCHEDULE_CONF_WITH_6TISCH_MINIMAL_WITH_BURST +#ifdef TSCH_CONF_WITH_6TISCH_MINIMAL_WITH_BURST +#define TSCH_WITH_6TISCH_MINIMAL_WITH_BURST TSCH_CONF_WITH_6TISCH_MINIMAL_WITH_BURST #else -#define TSCH_SCHEDULE_WITH_6TISCH_MINIMAL_WITH_BURST 0 +#define TSCH_WITH_6TISCH_MINIMAL_WITH_BURST 0 +#endif + +/* Set an upper bound on burst length */ +#ifdef TSCH_CONF_BURST_MAX_LEN +#define TSCH_BURST_MAX_LEN TSCH_CONF_BURST_MAX_LEN +#else +#define TSCH_BURST_MAX_LEN 32 #endif /* 6TiSCH Minimal schedule slotframe length */ diff --git a/os/net/mac/tsch/tsch-schedule.c b/os/net/mac/tsch/tsch-schedule.c index d5bf49653..a03363eb9 100644 --- a/os/net/mac/tsch/tsch-schedule.c +++ b/os/net/mac/tsch/tsch-schedule.c @@ -424,7 +424,7 @@ tsch_schedule_create_minimal(void) * Timeslot: 0, channel offset: 0. */ tsch_schedule_add_link(sf_min, LINK_OPTION_RX | LINK_OPTION_TX | LINK_OPTION_SHARED | LINK_OPTION_TIME_KEEPING - | (TSCH_SCHEDULE_WITH_6TISCH_MINIMAL_WITH_BURST ? LINK_OPTION_BURST : 0), + | (TSCH_WITH_6TISCH_MINIMAL_WITH_BURST ? LINK_OPTION_BURST : 0), LINK_TYPE_ADVERTISING, &tsch_broadcast_address, 0, 0); } diff --git a/os/net/mac/tsch/tsch-slot-operation.c b/os/net/mac/tsch/tsch-slot-operation.c index 6b47b4ebf..a2e9982fe 100644 --- a/os/net/mac/tsch/tsch-slot-operation.c +++ b/os/net/mac/tsch/tsch-slot-operation.c @@ -476,6 +476,7 @@ PT_THREAD(tsch_tx_slot(struct pt *pt, struct rtimer *t)) /* Unicast. More packets in queue for the neighbor? */ burst_link_requested = 0; if(!is_broadcast && (current_link->link_options & LINK_OPTION_BURST) + && tsch_current_burst_count + 1 < TSCH_BURST_MAX_LEN && tsch_queue_packet_count(¤t_neighbor->addr) > 1) { burst_link_requested = 1; tsch_packet_set_frame_pending(packet, packet_len);