() INPUT: data block |
() OUTPUT: encoded packets delivery |
() Upon receiving a data block of size do |
() encodes packets to generate encoded packets; |
() set the frame sequence number of the first encoded packet to ; |
() // used to notice the overhearing nodes that the sender will transmit frames subsequently |
() set the frame sequence number of the second packet to , and so on till last to “1”; |
() // also used to notice the overhearing nodes the frame number transmitted subsequently |
() set the “immediate ACK” field of the first frame as well as the last to “1”, others to “0”; |
() find the next hop (receiver) in routing table; |
() while (the state of the receiver ≤1) then |
() put off delivery; |
() endwhile |
() if (the state of the receiver >1) & (backoff_timer is timeout) then |
() switch to sending state and transmit the first frame; // start one transmission stage |
() switch to receiving state; // waiting for the ACK |
() if (receive the ACK for the first frame with “0” in the index field) then |
() switch to sending state and send the other frames subsequently; |
() set backoff_time = ; |
() switch to receiving state; // waiting for ACK for the block |
() // the first transmission stage for the block is over. |
() if (receive the ACK for the block) then |
() if ( frames of the block are unrecovered successfully, ) then |
() set ; |
() goto line (); |
() endif |
() else (not receive the ACK for the block) |
() if (the state of the receiver >1) & (backoff_timer is timeout) then |
() switch to sending state and send the last frames again; |
() switch to receiving state; // waiting for ACK for the block again; |
() else |
() goto line (); |
() endif |
() goto line (); |
() endif |
() else (not receive the ACK for the first frame) |
() set backoff_time = ; |
() goto line (); |
() endif |
() endif |
() endupon |