*/
enum {
-#if PLATFORM_MICAZ || PLATFORM_TELOSA || PLATFORM_TELOSB || PLATFORM_TMOTE || PLATFORM_INTELMOTE2
- FORWARD_PACKET_TIME = 4,
+#if PLATFORM_MICAZ || PLATFORM_TELOSA || PLATFORM_TELOSB || PLATFORM_TMOTE || PLATFORM_INTELMOTE2 || PLATFORM_SHIMMER || PLATFORM_IRIS
+ FORWARD_PACKET_TIME = 7,
#else
FORWARD_PACKET_TIME = 32,
#endif
};
enum {
- SENDDONE_FAIL_OFFSET = 512,
- SENDDONE_NOACK_OFFSET = FORWARD_PACKET_TIME << 2,
- SENDDONE_OK_OFFSET = FORWARD_PACKET_TIME << 2,
- LOOPY_OFFSET = FORWARD_PACKET_TIME << 4,
- SENDDONE_FAIL_WINDOW = SENDDONE_FAIL_OFFSET - 1,
- LOOPY_WINDOW = LOOPY_OFFSET - 1,
- SENDDONE_NOACK_WINDOW = SENDDONE_NOACK_OFFSET - 1,
- SENDDONE_OK_WINDOW = SENDDONE_OK_OFFSET - 1,
+ SENDDONE_OK_OFFSET = FORWARD_PACKET_TIME,
+ SENDDONE_OK_WINDOW = FORWARD_PACKET_TIME,
+ SENDDONE_NOACK_OFFSET = FORWARD_PACKET_TIME,
+ SENDDONE_NOACK_WINDOW = FORWARD_PACKET_TIME,
+ SENDDONE_FAIL_OFFSET = FORWARD_PACKET_TIME << 2,
+ SENDDONE_FAIL_WINDOW = SENDDONE_FAIL_OFFSET,
+ LOOPY_OFFSET = FORWARD_PACKET_TIME << 2,
+ LOOPY_WINDOW = LOOPY_OFFSET,
CONGESTED_WAIT_OFFSET = FORWARD_PACKET_TIME << 2,
- CONGESTED_WAIT_WINDOW = CONGESTED_WAIT_OFFSET - 1,
+ CONGESTED_WAIT_WINDOW = CONGESTED_WAIT_OFFSET,
NO_ROUTE_RETRY = 10000
};
}
}
- static void startRetxmitTimer(uint16_t mask, uint16_t offset) {
+ static void startRetxmitTimer(uint16_t window, uint16_t offset) {
uint16_t r = call Random.rand16();
- r &= mask;
+ r %= window;
r += offset;
call RetxmitTimer.startOneShot(r);
dbg("Forwarder", "Rexmit timer will fire in %hu ms\n", r);
/* Compute this neighbor's path metric */
linkEtx = evaluateEtx(call LinkEstimator.getLinkQuality(entry->neighbor));
dbg("TreeRouting",
- "routingTable[%d]: neighbor: [id: %d parent: %d etx: %d]\n",
- i, entry->neighbor, entry->info.parent, linkEtx);
+ "routingTable[%d]: neighbor: [id: %d parent: %d etx: %d retx: %d]\n",
+ i, entry->neighbor, entry->info.parent, linkEtx, entry->info.etx);
pathEtx = linkEtx + entry->info.etx;
/* Operations specific to the current parent */
if (entry->neighbor == routeInfo.parent) {
}
if (pathEtx < minEtx) {
+ dbg("TreeRouting", " best is %d, setting to %d\n", pathEtx, entry->neighbor);
minEtx = pathEtx;
best = entry;
}
call LinkEstimator.unpinNeighbor(routeInfo.parent);
call LinkEstimator.pinNeighbor(best->neighbor);
call LinkEstimator.clearDLQ(best->neighbor);
- atomic {
+
+ atomic {
routeInfo.parent = best->neighbor;
routeInfo.etx = best->info.etx;
routeInfo.congested = best->info.congested;
}
+ /* If we follow the CTP paper this should be in here.
+ if (currentEtx - minEtx > 20) {
+ call CtpInfo.triggerRouteUpdate();
+ }
+ */
}
}