# Opportunistic Multipath Routing in Long-Hop Wireless Sensor Networks
## 3 Energy-Efficient Reliable Multipath Routing Protocol Using Opportunistic Routing
### Bifurcation Transmission Process Based on Opportunistic Routing  
After calculating the number of paths through the path bifurcation decision process, the intermediate node transmits the packet to the destination. In this section, we explain the bifurcation transmission process for a reliable packet transmission. Existing opportunistic routing provides a transmission opportunity to only one neighbor node. However, the proposed scheme provides a transmission opportunity to the same number of neighbor nodes as the number of paths determined in the path branch decision process. To grant an opportunity to a number of neighbors, the intermediate node records the number of paths in the packet. The neighbor nodes can know how many neighbors will be selected. Algorithm 2 describes the bifurcation transmission process to transmit the packet as many as the number of paths from the point of view the receiver. The process consists of two cases: (1) expiring timer and (2) receiving a number of transmissions from other competitors. If the intermediate node decides to bifurcate to \(n\) paths, the intermediate node records the bifurcation number \(n\) in the packet and broadcasts it to the neighbor nodes (line 1). The timer of the neighbor nodes that received the packet would expire sequentially depending on the distance from itself, \(j\), to the destination of the opportunistic routing (line 7). The waiting time \(t\) is calculated as follow. Each neighbor node \(j\) receives a message from intermediate node \(i\) and could predict the distance to the destination and the expected number of hop counts. The node \(j\) divides the distance by the expected number of hop counts and exploits the result as a criterion for waiting time. For example, if the distance from arbitrary node \(j\) to the destination is 500 m and the expected number of hop counts is 5, the waiting time for node \(j\) could be 100 ms. That is, the waiting time \(T_{j}\) of node \(j\) could be computed as follows:  
\[T_{j}=\frac{D_{(j,Dest)}}{H_{(j,Dest)}}\times 10^{k}ms \tag{2}\]  
where \(D_{(j,Dest)}\) is a distance between \(j\) to the destination and \(H_{(j,Dest)}\) is the number of expected hop counts from \(j\) to the destination as \(\left\lceil D_{(j,Dest)}\right\rceil/r\rceil\). \(k\) is exploited to modulate the time duration according to node specifications, network congestion, and various points of consideration for requirements. A smaller \(k\) value leads to a shorter delay to a transmit packet, while a larger \(k\) value could mitigate network congestion. **Case 1 (lines 9-14):** Suppose a timer of an arbitrary node, \(j\), is expired (line 9); then, the node calculates the number of paths, \(n^{\prime}\), by Algorithm 1 (line 10) and inserts \(n^{\prime}\) into the packet \(p_{j}\) (line 11). The intermediate node, \(j\), then broadcasts the packet \(p_{j}\) to its neighbor nodes (line 12) and quits the competition process (line 13). **Case 2 (lines 15-22):** Unlike case 1, node \(j\) could receive packets from other competitors before the timer expires (line 15). In this case, node \(j\) counts the number of transmissions overhearing \(h\) (line 16). If \(h\) is greater than \(n\) (line 17), then the node \(j\) realizes that a sufficient number of paths have been constructed through other competitors. Thus, node \(j\) terminates the timer \(T\) (line 18) and drops the packet \(P_{j}\) (line 19) to prevent unnecessary bifurcation.