# ABORt: Acknowledgement-Based Opportunistic Routing Protocol for High Data Rate Multichannel WSNs
## 3 Acknowledgement-Based Opportunistic Routing Protocol
### ABORt Next Hop Neighbor Selection and Queue Overflow Avoidance  
ABORt uses acknowledgement (ACK) messages in an opportunistic way to disseminate the routing metric in the network. We modified the default ACK frame and added 2 bytes that contain the routing metric value. When sink 1-hop neighbors transmit a packet to the sink for the first time, they calculate \(D\) and have to transmit it to their neighbors using ACK frame after receiving a packet from these neighbors. When 2-hop neighbors of the sink receive the ACK frames sent by sink 1-hop neighbors, they have the path delay of these neighbors. They select the minimum path delay and add it to their own node delay in order to calculate their path delay. These 2-hop neighbors will also transmit their path delay in ACK frames and the process continues until path delay is calculated by leaf nodes. Once all nodes in the network get a path towards the sink, each node path delay is updated whenever a smaller path delay is received or a new node delay is computed. Note that whenever a node needs to know its neighbor path delay, it has to transmit a data packet to it and waits for ACK that contains the path delay. Nodes that are out of range of the sink node have to forward their data to a next hop neighbor, which will also forward it towards the sink. Depending on nodes' position in the network topology and the used routing metric, some nodes may have several potential next hop neighbors to forward their data towards the sink. Using ABORt, nodes build a top-list of next hop neighbors. Nodes in the top-list will be used for sending frames towards the sink node. For each frame, a next hop is chosen randomly from the top-list. This way, nodes will achieve load balancing among their selected neighbors. The top-list contains neighbors with the smallest routing metric within a certain threshold defined in terms of milliseconds. The choice of this threshold must be done in order to choose most convenient routes and avoid routing loops from occurring. Using a heuristic approach based on simulation results, we fixed this threshold to 2 ms. Results showed that this value avoids routing loops when transmitting data to the neighbors in the top-list. Thus, in what follows, top-lists contain the neighbor with the smallest path delay plus all neighbors that have a path delay that does not exceed the smallest path delay by 2 ms.  
For each data packet, a node will randomly choose one neighbor in the top-list and switches to its reception channel for transmission. The fact that the next hop changes from one packet to another allows load balancing on a per hop basis. In case only one neighbor is available in the top-list, a node has to trigger the top-list update process. This update process consists of transmitting a data packet to each next hop neighbor and receiving the ACK that contains this neighbor path delay. Doing so helps to get the path delay of all potential next hop neighbors and rebuild the top-list in case changes occurred in the routing metrics of neighbors. In order to avoid doing the update process endless when no other path delays are within the threshold, the update process is only triggered after successful transmission of ten data packets to the top-list member. The process ends when all neighbors are visited once. On Figure 2, we present the top-list concept with a 12-node network scenario. The couple \(d/D\) of each node is labelled at its left. Node 9 has four next hop neighbors: nodes 1, 7, 8 and 4. The smallest path delay of 9 is 10 ms via node 4. Its top-list contains 4, 8 and 7. Each time node 9 has to transmit a packet that it randomly chooses one neighbor from its top-list and switches to this neighbor reception channel and transmits the data packet. When the next hop neighbor receives the transmitted packet, it will transmit an ACK that contains, in addition to ACK traditional fields, the node path delay. This ACK also allows all its neighbors that are listening on its reception channel to get the ACK frame and read the updated routing metric value.