[Tinyos-2-commits] CVS: tinyos-2.x/tos/lib/net/ctp CollectionC.nc,
1.1.2.2, 1.1.2.3 CtpForwardingEngineP.nc, 1.1.2.12,
1.1.2.13 CtpInfo.nc, 1.1.2.4, 1.1.2.5 CtpP.nc, 1.1.2.7,
1.1.2.8 CtpRoutingEngineP.nc, 1.1.2.8,
1.1.2.9 CtpRoutingPacket.nc, 1.1.2.2, 1.1.2.3 TreeRouting.h,
1.1.2.2, 1.1.2.3
Rodrigo Fonseca
rfonseca76 at users.sourceforge.net
Fri Oct 27 11:05:06 PDT 2006
Update of /cvsroot/tinyos/tinyos-2.x/tos/lib/net/ctp
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv30763
Modified Files:
Tag: tinyos-2_0_devel-BRANCH
CollectionC.nc CtpForwardingEngineP.nc CtpInfo.nc CtpP.nc
CtpRoutingEngineP.nc CtpRoutingPacket.nc TreeRouting.h
Log Message:
Quite a few changes to add ECN to the Forwarder and the Router.
Index: CollectionC.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/net/ctp/Attic/CollectionC.nc,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -C2 -d -r1.1.2.2 -r1.1.2.3
*** CollectionC.nc 6 Sep 2006 17:39:27 -0000 1.1.2.2
--- CollectionC.nc 27 Oct 2006 18:05:03 -0000 1.1.2.3
***************
*** 56,59 ****
--- 56,60 ----
interface CtpInfo;
+ interface CtpCongestion;
interface RootControl;
}
***************
*** 79,82 ****
--- 80,84 ----
CtpInfo = CtpP;
+ CtpCongestion = CtpP;
RootControl = CtpP;
Index: CtpForwardingEngineP.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/net/ctp/Attic/CtpForwardingEngineP.nc,v
retrieving revision 1.1.2.12
retrieving revision 1.1.2.13
diff -C2 -d -r1.1.2.12 -r1.1.2.13
*** CtpForwardingEngineP.nc 26 Oct 2006 21:25:19 -0000 1.1.2.12
--- CtpForwardingEngineP.nc 27 Oct 2006 18:05:03 -0000 1.1.2.13
***************
*** 138,141 ****
--- 138,142 ----
interface CollectionPacket;
interface CtpPacket;
+ interface CtpCongestion;
}
uses {
***************
*** 175,185 ****
static void startCongestionTimer(uint16_t mask, uint16_t offset);
! /*
! * Predicate to indicate our *local* congestion state (see TEP 123).
! */
! static bool congested();
/* Tracks our parent's congestion state. */
! bool parentCongested = FALSE;
/* Keeps track of whether the routing layer is running; if not,
--- 176,184 ----
static void startCongestionTimer(uint16_t mask, uint16_t offset);
! /* Indicates whether our client is congested */
! bool clientCongested = FALSE;
/* Tracks our parent's congestion state. */
! //bool parentCongested = FALSE;
/* Keeps track of whether the routing layer is running; if not,
***************
*** 399,402 ****
--- 398,402 ----
return;
}
+ /*
else if (parentCongested) {
// Do nothing; the congestion timer is necessarily set which
***************
*** 406,411 ****
call CollectionDebug.logEvent(NET_C_FE_CONGESTION_SENDWAIT);
}
else {
- // Once we are here, we have decided to send the packet.
error_t subsendResult;
fe_queue_entry_t* qe = call SendQueue.head();
--- 406,411 ----
call CollectionDebug.logEvent(NET_C_FE_CONGESTION_SENDWAIT);
}
+ */
else {
error_t subsendResult;
fe_queue_entry_t* qe = call SendQueue.head();
***************
*** 414,429 ****
uint16_t gradient;
if (call SentCache.lookup(qe->msg)) {
call CollectionDebug.logEvent(NET_C_FE_DUPLICATE_CACHE_AT_SEND);
call SendQueue.dequeue();
! post sendTask();
return;
}
/* If our current parent is not the same as the last parent
! we sent do, then reset the count of unacked packets: don't
! penalize a new parent for the failures of a prior one.*/
if (dest != lastParent) {
! qe->retries = MAX_RETRIES;
! lastParent = dest;
}
--- 414,442 ----
uint16_t gradient;
+ if (call CtpInfo.isNeighborCongested(dest)) {
+ // Our parent is congested. We should wait.
+ // Don't repost the task, CongestionTimer will do the job
+ if (! call CongestionTimer.isRunning()) {
+ startCongestionTimer(CONGESTED_WAIT_WINDOW, CONGESTED_WAIT_OFFSET);
+ call CollectionDebug.logEvent(NET_C_FE_CONGESTION_BEGIN);
+ }
+ dbg("Forwarder", "%s: sendTask deferring for congested parent\n",
+ __FUNCTION__);
+ call CollectionDebug.logEvent(NET_C_FE_CONGESTION_SENDWAIT);
+ return;
+ }
+ // Once we are here, we have decided to send the packet.
if (call SentCache.lookup(qe->msg)) {
call CollectionDebug.logEvent(NET_C_FE_DUPLICATE_CACHE_AT_SEND);
call SendQueue.dequeue();
! post sendTask();
return;
}
/* If our current parent is not the same as the last parent
! we sent do, then reset the count of unacked packets: don't
! penalize a new parent for the failures of a prior one.*/
if (dest != lastParent) {
! qe->retries = MAX_RETRIES;
! lastParent = dest;
}
***************
*** 453,457 ****
// Set or clear the congestion bit on *outgoing* packets.
! if (congested())
call CtpPacket.setOption(qe->msg, CTP_OPT_ECN);
else
--- 466,470 ----
// Set or clear the congestion bit on *outgoing* packets.
! if (call CtpCongestion.isCongested())
call CtpPacket.setOption(qe->msg, CTP_OPT_ECN);
else
***************
*** 787,791 ****
event message_t*
SubSnoop.receive(message_t* msg, void *payload, uint8_t len) {
! am_addr_t parent = call UnicastNameFreeRouting.nextHop();
am_addr_t proximalSrc = call AMPacket.source(msg);
--- 800,804 ----
event message_t*
SubSnoop.receive(message_t* msg, void *payload, uint8_t len) {
! //am_addr_t parent = call UnicastNameFreeRouting.nextHop();
am_addr_t proximalSrc = call AMPacket.source(msg);
***************
*** 795,811 ****
call CtpInfo.triggerRouteUpdate();
! if (call CtpPacket.option(msg, CTP_OPT_ECN) && proximalSrc == parent) {
! // We've overheard our parent's ECN bit set.
! startCongestionTimer(CONGESTED_WAIT_WINDOW, CONGESTED_WAIT_OFFSET);
! parentCongested = TRUE;
! call CollectionDebug.logEvent(NET_C_FE_CONGESTION_BEGIN);
! } else if (proximalSrc == parent) {
! // We've overheard out parent's ECN bit cleared.
! call CongestionTimer.stop();
! parentCongested = FALSE;
! call CollectionDebug.logEventSimple(NET_C_FE_CONGESTION_END, 1);
! post sendTask();
! }
!
return signal Snoop.receive[call CtpPacket.getType(msg)]
(msg, payload + sizeof(ctp_data_header_t),
--- 808,812 ----
call CtpInfo.triggerRouteUpdate();
! call CtpInfo.setNeighborCongested(proximalSrc, call CtpPacket.option(msg, CTP_OPT_ECN));
return signal Snoop.receive[call CtpPacket.getType(msg)]
(msg, payload + sizeof(ctp_data_header_t),
***************
*** 819,827 ****
event void CongestionTimer.fired() {
! parentCongested = FALSE;
call CollectionDebug.logEventSimple(NET_C_FE_CONGESTION_END, 0);
post sendTask();
}
command void Packet.clear(message_t* msg) {
call SubPacket.clear(msg);
--- 820,847 ----
event void CongestionTimer.fired() {
! //parentCongested = FALSE;
call CollectionDebug.logEventSimple(NET_C_FE_CONGESTION_END, 0);
post sendTask();
}
+
+ command bool CtpCongestion.isCongested() {
+ // A simple predicate for now to determine congestion state of
+ // this node.
+ bool congested = (call SendQueue.size() + 2 >= call SendQueue.maxSize()) ?
+ TRUE : FALSE;
+ return ((congested || clientCongested)?TRUE:FALSE);
+ }
+
+ command void CtpCongestion.setClientCongested(bool congested) {
+ bool wasCongested = call CtpCongestion.isCongested();
+ clientCongested = congested;
+ if (!wasCongested && congested) {
+ call CtpInfo.triggerImmediateRouteUpdate();
+ } else if (wasCongested && ! (call CtpCongestion.isCongested())) {
+ call CtpInfo.triggerRouteUpdate();
+ }
+ }
+
command void Packet.clear(message_t* msg) {
call SubPacket.clear(msg);
***************
*** 941,951 ****
}
- static inline bool congested() {
- // A simple predicate for now to determine congestion state of
- // this node.
- return (call SendQueue.size() + 2 >= call SendQueue.maxSize()) ?
- TRUE : FALSE;
- }
-
/* signalled when this neighbor is evicted from the neighbor table */
event void LinkEstimator.evicted(am_addr_t neighbor) {
--- 961,964 ----
***************
*** 974,975 ****
--- 987,1006 ----
}
+
+ /* Rodrigo. This is an alternative
+ event void CtpInfo.ParentCongested(bool congested) {
+ if (congested) {
+ // We've overheard our parent's ECN bit set.
+ startCongestionTimer(CONGESTED_WAIT_WINDOW, CONGESTED_WAIT_OFFSET);
+ parentCongested = TRUE;
+ call CollectionDebug.logEvent(NET_C_FE_CONGESTION_BEGIN);
+ } else {
+ // We've overheard our parent's ECN bit cleared.
+ call CongestionTimer.stop();
+ parentCongested = FALSE;
+ call CollectionDebug.logEventSimple(NET_C_FE_CONGESTION_END, 1);
+ post sendTask();
+ }
+ }
+ */
+
Index: CtpInfo.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/net/ctp/Attic/CtpInfo.nc,v
retrieving revision 1.1.2.4
retrieving revision 1.1.2.5
diff -C2 -d -r1.1.2.4 -r1.1.2.5
*** CtpInfo.nc 26 Oct 2006 19:45:12 -0000 1.1.2.4
--- CtpInfo.nc 27 Oct 2006 18:05:03 -0000 1.1.2.5
***************
*** 63,65 ****
--- 63,75 ----
*/
command void triggerImmediateRouteUpdate();
+
+ /**
+ * Informs the routing engine that a neighbor is congested
+ */
+ command void setNeighborCongested(am_addr_t n, bool congested);
+
+ /**
+ * Returns the currently known state about a neighbor's congestion state
+ */
+ command bool isNeighborCongested(am_addr_t n);
}
Index: CtpP.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/net/ctp/Attic/CtpP.nc,v
retrieving revision 1.1.2.7
retrieving revision 1.1.2.8
diff -C2 -d -r1.1.2.7 -r1.1.2.8
*** CtpP.nc 16 Oct 2006 02:29:00 -0000 1.1.2.7
--- CtpP.nc 27 Oct 2006 18:05:03 -0000 1.1.2.8
***************
*** 77,80 ****
--- 77,81 ----
interface CtpInfo;
+ interface CtpCongestion;
interface RootControl;
}
***************
*** 108,111 ****
--- 109,113 ----
CollectionPacket = Forwarder;
CtpPacket = Forwarder;
+ CtpCongestion = Forwarder;
components new PoolC(message_t, FORWARD_COUNT) as MessagePoolP;
***************
*** 145,148 ****
--- 147,151 ----
Forwarder.CollectionDebug = CollectionDebug;
Forwarder.CtpInfo -> Router;
+ Router.CtpCongestion -> Forwarder;
CtpInfo = Router;
Index: CtpRoutingEngineP.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/net/ctp/Attic/CtpRoutingEngineP.nc,v
retrieving revision 1.1.2.8
retrieving revision 1.1.2.9
diff -C2 -d -r1.1.2.8 -r1.1.2.9
*** CtpRoutingEngineP.nc 26 Oct 2006 19:45:12 -0000 1.1.2.8
--- CtpRoutingEngineP.nc 27 Oct 2006 18:05:03 -0000 1.1.2.9
***************
*** 102,106 ****
interface CtpInfo;
interface StdControl;
! interface CtpRoutingPacket;
interface Init;
}
--- 102,106 ----
interface CtpInfo;
interface StdControl;
! interface CtpRoutingPacket;
interface Init;
}
***************
*** 113,119 ****
interface SplitControl as RadioControl;
interface Timer<TMilli> as BeaconTimer;
! interface Timer<TMilli> as RouteTimer;
interface Random;
interface CollectionDebug;
}
}
--- 113,120 ----
interface SplitControl as RadioControl;
interface Timer<TMilli> as BeaconTimer;
! interface Timer<TMilli> as RouteTimer;
interface Random;
interface CollectionDebug;
+ interface CtpCongestion;
}
}
***************
*** 174,181 ****
void decayInterval() {
if (!state_is_root) {
! currentInterval *= 2;
! if (currentInterval > maxInterval) {
! currentInterval = maxInterval;
! }
}
chooseAdvertiseTime();
--- 175,182 ----
void decayInterval() {
if (!state_is_root) {
! currentInterval *= 2;
! if (currentInterval > maxInterval) {
! currentInterval = maxInterval;
! }
}
chooseAdvertiseTime();
***************
*** 207,214 ****
//start will (re)start the sending of messages
if (!running) {
! running = TRUE;
! resetInterval();
! call RouteTimer.startPeriodic(BEACON_INTERVAL);
! dbg("TreeRoutingCtl","%s running: %d radioOn: %d\n", __FUNCTION__, running, radioOn);
}
return SUCCESS;
--- 208,215 ----
//start will (re)start the sending of messages
if (!running) {
! running = TRUE;
! resetInterval();
! call RouteTimer.startPeriodic(BEACON_INTERVAL);
! dbg("TreeRoutingCtl","%s running: %d radioOn: %d\n", __FUNCTION__, running, radioOn);
}
return SUCCESS;
***************
*** 253,256 ****
--- 254,258 ----
* from neighbor beacons. Two things can cause this info to change:
* neighbor beacons, changes in link estimates, including neighbor eviction */
+ /* TODO: take into account congested state to select parents */
task void updateRouteTask() {
uint8_t i;
***************
*** 263,267 ****
if (state_is_root)
return;
!
best = NULL;
/* Minimum etx found among neighbors, initially infinity */
--- 265,269 ----
if (state_is_root)
return;
!
best = NULL;
/* Minimum etx found among neighbors, initially infinity */
***************
*** 296,299 ****
--- 298,302 ----
atomic {
routeInfo.etx = entry->info.etx;
+ routeInfo.congested = entry->info.congested;
}
continue;
***************
*** 311,314 ****
--- 314,318 ----
}
+
/* Now choose between the current parent and the best neighbor */
if (minEtx != MAX_METRIC) {
***************
*** 325,332 ****
call LinkEstimator.unpinNeighbor(routeInfo.parent);
call LinkEstimator.pinNeighbor(best->neighbor);
! call LinkEstimator.clearDLQ(best->neighbor);
atomic {
routeInfo.parent = best->neighbor;
routeInfo.etx = best->info.etx;
}
}
--- 329,337 ----
call LinkEstimator.unpinNeighbor(routeInfo.parent);
call LinkEstimator.pinNeighbor(best->neighbor);
! call LinkEstimator.clearDLQ(best->neighbor);
atomic {
routeInfo.parent = best->neighbor;
routeInfo.etx = best->info.etx;
+ routeInfo.congested = best->info.congested;
}
}
***************
*** 358,373 ****
return;
}
beaconMsg->parent = routeInfo.parent;
if (state_is_root) {
beaconMsg->etx = routeInfo.etx;
! beaconMsg->options = 0;
! }
! else if (routeInfo.parent == INVALID_ADDR) {
beaconMsg->etx = routeInfo.etx;
! beaconMsg->options = CTP_OPT_PULL;
} else {
! beaconMsg->etx = routeInfo.etx +
evaluateEtx(call LinkEstimator.getLinkQuality(routeInfo.parent));
- beaconMsg->options = 0;
}
--- 363,384 ----
return;
}
+
+ beaconMsg->options = 0;
+
+ /* Congestion notification: am I congested? */
+ if (call CtpCongestion.isCongested()) {
+ beaconMsg->options |= CTP_OPT_ECN;
+ }
+
beaconMsg->parent = routeInfo.parent;
if (state_is_root) {
beaconMsg->etx = routeInfo.etx;
! }
! else if (routeInfo.parent == INVALID_ADDR) {
beaconMsg->etx = routeInfo.etx;
! beaconMsg->options |= CTP_OPT_PULL;
} else {
! beaconMsg->etx = routeInfo.etx +
evaluateEtx(call LinkEstimator.getLinkQuality(routeInfo.parent));
}
***************
*** 375,379 ****
__FUNCTION__,
beaconMsg->parent,
! beaconMsg->etx);
call CollectionDebug.logEventRoute(NET_C_TREE_SENT_BEACON, beaconMsg->parent, 0, beaconMsg->etx);
--- 386,390 ----
__FUNCTION__,
beaconMsg->parent,
! beaconMsg->etx);
call CollectionDebug.logEventRoute(NET_C_TREE_SENT_BEACON, beaconMsg->parent, 0, beaconMsg->etx);
***************
*** 399,403 ****
event void RouteTimer.fired() {
if (radioOn && running)
! post updateRouteTask();
}
--- 410,414 ----
event void RouteTimer.fired() {
if (radioOn && running)
! post updateRouteTask();
}
***************
*** 405,408 ****
--- 416,420 ----
if (radioOn && running) {
if (!tHasPassed) {
+ post updateRouteTask(); //always send the most up to date info
post sendBeaconTask();
remainingInterval();
***************
*** 425,432 ****
am_addr_t from;
ctp_routing_header_t* rcvBeacon;
// Received a beacon, but it's not from us.
if (len != sizeof(ctp_routing_header_t)) {
! dbg("LITest", "%s, received beacon of size %hhu, expected %i\n", __FUNCTION__, len, (int)sizeof(ctp_routing_header_t));
return msg;
--- 437,448 ----
am_addr_t from;
ctp_routing_header_t* rcvBeacon;
+ bool congested;
// Received a beacon, but it's not from us.
if (len != sizeof(ctp_routing_header_t)) {
! dbg("LITest", "%s, received beacon of size %hhu, expected %i\n",
! __FUNCTION__,
! len,
! (int)sizeof(ctp_routing_header_t));
return msg;
***************
*** 436,444 ****
from = call LinkSrcPacket.getSrc(msg);
rcvBeacon = (ctp_routing_header_t*)payload;
dbg("TreeRouting","%s from: %d [ parent: %d etx: %d]\n",
__FUNCTION__, from,
rcvBeacon->parent, rcvBeacon->etx);
! //call CollectionDebug.logEventRoute(NET_C_TREE_RCV_BEACON, rcvBeacon->parent, rcvBeacon->hopcount, rcvBeacon->etx);
//update neighbor table
--- 452,461 ----
from = call LinkSrcPacket.getSrc(msg);
rcvBeacon = (ctp_routing_header_t*)payload;
+ congested = call CtpRoutingPacket.getOption(msg, CTP_OPT_ECN);
dbg("TreeRouting","%s from: %d [ parent: %d etx: %d]\n",
__FUNCTION__, from,
rcvBeacon->parent, rcvBeacon->etx);
! //call CollectionDebug.logEventRoute(NET_C_TREE_RCV_BEACON, rcvBeacon->parent, 0, rcvBeacon->etx);
//update neighbor table
***************
*** 455,463 ****
routingTableUpdateEntry(from, rcvBeacon->parent, rcvBeacon->etx);
}
! if (call CtpRoutingPacket.getOptions(msg) & CTP_OPT_PULL) {
! resetInterval();
! }
//post updateRouteTask();
return msg;
--- 472,481 ----
routingTableUpdateEntry(from, rcvBeacon->parent, rcvBeacon->etx);
+ call CtpInfo.setNeighborCongested(from, congested);
}
! if (call CtpRoutingPacket.getOption(msg, CTP_OPT_PULL)) {
! resetInterval();
! }
//post updateRouteTask();
return msg;
***************
*** 485,489 ****
}
! /* TreeRoutingInspect interface */
command error_t CtpInfo.getParent(am_addr_t* parent) {
if (parent == NULL)
--- 503,507 ----
}
! /* CtpInfo interface */
command error_t CtpInfo.getParent(am_addr_t* parent) {
if (parent == NULL)
***************
*** 516,522 ****
}
-
command void CtpInfo.triggerImmediateRouteUpdate() {
! // Random time in interval 64-127ms
uint16_t time = call Random.rand16();
time &= 0x7;
--- 534,539 ----
}
command void CtpInfo.triggerImmediateRouteUpdate() {
! // Random time in interval 4-11ms
uint16_t time = call Random.rand16();
time &= 0x7;
***************
*** 525,528 ****
--- 542,570 ----
call BeaconTimer.startOneShot(time);
}
+
+ command void CtpInfo.setNeighborCongested(am_addr_t n, bool congested) {
+ uint8_t idx;
+ idx = routingTableFind(n);
+ if (idx < routingTableActive) {
+ routingTable[idx].info.congested = congested;
+ }
+ /* TODO: (this only makes sense if routeUpdateTask takes congestion into
+ * account for selecting routes.)
+ * if (routeInfo.congested && !congested)
+ * post routeUpdateTask()
+ * else if (routeInfo.parent == n && congested) {
+ * post routeUpdateTask()
+ *
+ */
+ }
+
+ command bool CtpInfo.isNeighborCongested(am_addr_t n) {
+ uint8_t idx;
+ idx = routingTableFind(n);
+ if (idx < routingTableActive) {
+ return routingTable[idx].info.congested;
+ }
+ return FALSE;
+ }
/* RootControl interface */
***************
*** 598,601 ****
--- 640,644 ----
uint16_t linkEtx;
linkEtx = evaluateEtx(call LinkEstimator.getLinkQuality(from));
+ //call CollectionDebug.logEventDbg(NET_C_DBG_3, from, parent, call LinkEstimator.getLinkQuality(from));
idx = routingTableFind(from);
***************
*** 667,676 ****
}
! command ctp_options_t CtpRoutingPacket.getOptions(message_t* msg) {
! return getHeader(msg)->options;
}
! command void CtpRoutingPacket.setOptions(message_t* msg, ctp_options_t options) {
! getHeader(msg)->options = options;
}
command am_addr_t CtpRoutingPacket.getParent(message_t* msg) {
--- 710,729 ----
}
! command bool CtpRoutingPacket.getOption(message_t* msg, ctp_options_t opt) {
! return ((getHeader(msg)->options & opt) == opt) ? TRUE : FALSE;
}
!
! command void CtpRoutingPacket.setOption(message_t* msg, ctp_options_t opt) {
! getHeader(msg)->options |= opt;
! }
!
! command void CtpRoutingPacket.clearOption(message_t* msg, ctp_options_t opt) {
! getHeader(msg)->options &= ~opt;
}
+
+ command void CtpRoutingPacket.clearOptions(message_t* msg) {
+ getHeader(msg)->options = 0;
+ }
+
command am_addr_t CtpRoutingPacket.getParent(message_t* msg) {
Index: CtpRoutingPacket.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/net/ctp/Attic/CtpRoutingPacket.nc,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -C2 -d -r1.1.2.2 -r1.1.2.3
*** CtpRoutingPacket.nc 13 Sep 2006 01:41:57 -0000 1.1.2.2
--- CtpRoutingPacket.nc 27 Oct 2006 18:05:03 -0000 1.1.2.3
***************
*** 43,48 ****
interface CtpRoutingPacket {
! command ctp_options_t getOptions(message_t* msg);
! command void setOptions(message_t* msg, ctp_options_t options);
command am_addr_t getParent(message_t* msg);
--- 43,53 ----
interface CtpRoutingPacket {
! /* Allow individual options to be read, set, and reset independently */
! command bool getOption(message_t* msg, ctp_options_t opt);
! command void setOption(message_t* msg, ctp_options_t opt);
! command void clearOption(message_t* msg, ctp_options_t opt);
!
! /* Clear all options */
! command void clearOptions(message_t* msg);
command am_addr_t getParent(message_t* msg);
Index: TreeRouting.h
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/net/ctp/Attic/TreeRouting.h,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -C2 -d -r1.1.2.2 -r1.1.2.3
*** TreeRouting.h 13 Sep 2006 01:41:57 -0000 1.1.2.2
--- TreeRouting.h 27 Oct 2006 18:05:03 -0000 1.1.2.3
***************
*** 15,18 ****
--- 15,19 ----
am_addr_t parent;
uint16_t etx;
+ bool congested;
} route_info_t;
***************
*** 25,28 ****
--- 26,30 ----
ri->parent = INVALID_ADDR;
ri->etx = 0;
+ ri->congested = FALSE;
}
More information about the Tinyos-2-commits
mailing list