## 4 Cross Layer Adaptation of Check Intervals  
We propose Cross Layer Adaptation of Check intervals (CLAC), an approach which consists in exploiting cross-layer information to adapt the check intervals according to the delays incurred by packets along a path. This technique allows us to maintain the duty cycle of the nodes without introducing additional energy costs. The basic idea is to improve synchronization among the nodes and, as a consequence, use energy more efficiently. CLAC exploits information from the application, routing, and MAC layers. At the application layer the programmer statically configures a duty cycle (DC) representing the activity level of the nodes. Figure 4: BoX-MAC behavior with communication delays. Based on DC, the MAC layer configures the check interval, \(\tau_{check}\); For instance BoX-MAC computes \(\tau_{check}\) as follows:  
\[\tau_{check}=\frac{(DUTY\_ON\_TIME)\times(100-DC)}{(DC)} \tag{3}\]  
where DUTY_ON_TIME is a constant that stands for the minimal time the radio is kept on in each activation, and DC is expressed as the percentage of activity with respect to the length of the total period. DC represents the minimum time of activity regardless of the network conditions. The maximum time of activity depends on the traffic load and therefore it is a priori unknown (BoX-MAC maintains the radio on when it detects channel activity). Equation (3) shows the inverse relationship between DC and \(\tau_{check}\): a higher DC implies a smaller \(\tau_{check}\). DC is established statically according to the frequency with which the application operates data sampling and transmission. For the sake of simplicity we assume that DC is the same for all of the nodes. CLAC also exploits the information about the route from a node \(i_{j}\) to a node \(i_{k}\) as computed by CTP. Specifically, CLAC uses information about the position occupied by each node within the path to estimate the delay accumulated by a packet traveling along the path in each hop between \(i_{j}\) and \(i_{k}\), then it recomputes \(\tau_{check}\) at each hop according to this delay. In our approach the delays are adaptive because routes can dynamically change, which implies a different node ordering. In multi-hop scenarios, as those addressed in this paper, each hop in the path introduces a certain delay, \(\gamma(i_{k})\), which stands for the total delay (including transmission time) experienced by a packet at the node \(i_{k}\) within the path from \(i_{1}\) to \(i_{m}\). The delay experienced by a packet along the path between \(i_{j}\) and \(i_{k}\) is the sum of the delays introduced by every one of the nodes that compose the path. The discussion of the value taken by \(\gamma\) is deferred to Subsections 4.1 and 4.2. Assuming that we know the value of \(\gamma\), the total delay of a packet at a node \(i_{k}\) is:  
\[D(i_{k})=\sum_{i_{j}=1}^{order(i_{k})}\gamma(i_{j}) \tag{4}\]  
where \(D(i_{k})\) represents the delay accumulated by a packet before reaching node \(i_{k}\) within the path(\(i_{1}\),\(i_{m}\)). Note that \(D(i_{k})\) increases with the number of hops between \(i_{1}\) and \(i_{k}\). Thus, the first node \(i_{1}\) in the path generates the packet and introduces a delay that is propagated to the second hop, \(i_{2}\), which is affected by this delay. \(i_{2}\) propagates both this delay as well as the delay introduced by itself further down to node \(i_{3}\). The delay for receiving the packet in \(i_{3}\) is the sum of all of the delays of the previous hops (in our case \(i_{1}\) and \(i_{2}\)). In general, node \(i_{k}\) must update its check interval as follows:  
\[\tau_{new\_check}=D(i_{k})+\tau_{check} \tag{5}\]  
This update slightly shifts the current \(\tau_{check}\) of node \(i_{k}\) by a value \(D(i_{k})\) to obtain its next check interval. It is important to note that increasing the check interval involves a slight decrease in DC, which in turn could lead to packet loss.