Algorithm 3. SCH Selection (SCHS) | |
Run at any MCH node (e.g., u) | |
Input: the hello messages of all neighbors | |
Output: SCH confirmation message | |
1. | for each entry (IDv, dv,u) in Lu,nei do initialize the label variable lv as “uninvited” |
2. | SMmax = 0; IDsch = maximum number |
3. | for each entry (IDv, dv,u) in Lu,nei do |
4. | if (dv,u ≤ Ru,intra) and (lv == “uninvited”) then |
5. | Compute node v’s SCH eligibility metric SMv,u according to the Formula (8) |
6. | if (SMmax < SMv,u) or (SMmax == SMv,u && IDv < IDsch) then {SMmax = SMv,u; IDsch = IDv} |
7. | end if |
8. | end for |
9. | Send the “SCH invitation message” to the neighbor IDsch |
10. | if eavesdrop the “SCH acceptance message” from the invited node (i.e., IDsch) that does not accept its (i.e., u’s) invitation then |
11. | Change the value of the invited node’s label variable as “invited” |
12. | Go to step 2 |
13. | end if |
14. | if receive the “SCH acceptance message” from the invited node (i.e., IDsch) that accepts its (i.e., u’s) invitation then |
15. | Broadcast the “SCH confirmation message” at its maximum transmission power |
16. | end if |
Run at any non-MCH node (e.g., v) Input: the hello messages of all neighbors Output: SCH acceptance message |
|
17. | if receive the first “SCH invitation message” from any MCH (e.g., w) then |
18. | dmin = dv,w; IDmch = IDw |
19. | Set the timer tζ as ζ |
20. | while the timer tζ does not expire do |
21. | if receive the “SCH invitation message” from any MCH (e.g., u) then |
22. | if (dv,u < dmin) then {dmin = dv,u; IDmch = IDu} |
23. | end if |
24. | end while |
25. | Send the “SCH acceptance message” to the neighbor IDmch |
26. | Set the timer tθ as θ |
27. | Initialize FLAG as true |
28. | while the timer tθ does not expire do |
29. | if receive the “SCH confirmation message” from a MCH that selects itself (e.g., v) as SCH then FLAG = false |
30. | end while |
31. | if (FLAG == true) then move to the next step (determining cluster members and selecting FCHs) |
32. | end if |