Guest User

Untitled

a guest
Dec 15th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.57 KB | None | 0 0
  1. init[n] = 1; // Node is on the current backoff
  2. nodebusy[n] = 1; // Node busy
  3.  
  4. if (node[n].BackoffPeriod == 1)
  5. {
  6. node[n].State = 3; // Switch to carrier sensing in the next slot
  7. node[n].BackoffPeriod--;
  8. }
  9. else
  10. {
  11. node[n].State = 2; // Stay in the backoff state
  12. node[n].BackoffPeriod--; // Decrease Backoff
  13. }
  14.  
  15. break;
  16.  
  17. if (node[n].carrier_sensing == 1 && chbusy == 0) // If channel is idle AND doing carrier sensing
  18. {
  19. node[n].carrier_sensing--;
  20. node[n].State = 4; // Switch to Tx state in the next slot
  21. chbusy_cnt++; // make channel busy
  22. }
  23. else // Channel is BUSY
  24. {
  25. ` // -----------------------------------------------`
  26.  
  27. node[n].k++;
  28. if (node[n].k <= 5) {
  29. node[n] = Node_init(node[n], node[n].k);
  30. init[n] = 0;
  31. }
  32. else { //k is over limited
  33. node[n]= Node_init(node[n], min_k); //drop data
  34. init[n] = 0;
  35. tx_failure++;
  36. total_pkt++;
  37.  
  38. }
  39.  
  40. }
  41.  
  42. break;
  43.  
  44. // ******************** Tx state *************************
  45. case 4:
  46. if (tx_cnt[n] == TxCntInit)
  47. {
  48. tx_cnt[n]--; // Stay same state in the next slot
  49. }
  50. else if (tx_cnt[n] == 1)
  51. {
  52. //--------------------------------------------------
  53. if (chbusy > 1) { //collision 둘 이상의 채널이 사용 중
  54. chbusy_cnt--;
  55. tx_cnt[n] = TxCntInit; //initialize
  56. tx_failure++;
  57. total_pkt++;
  58. node[n].State = 6;
  59.  
  60. }
  61. else if (chbusy == 1) { //오직 한 노드만이 채널을 사용 중
  62. tx_cnt[n] = TxCntInit; //initialize
  63. node[n].State = 5;
  64. chbusy_cnt--;
  65.  
  66. }
  67. else {
  68. chbusy_cnt = 0;
  69. printf("error alaramn");
  70. exit(1);
  71. }
  72.  
  73. }
  74. else
  75. {
  76. tx_cnt[n]--; // Stay same state in the next slot
  77. }
  78.  
  79. break;
  80.  
  81. // ******************** Rx state *************************
  82. case 5:
  83.  
  84. if (chbusy == 0)
  85. {
  86. chbusy_cnt++; // Make CHANNEL BUSY for ACK transmission in the next slot
  87. }
  88. else
  89. {
  90. //------------------------ ----------------------------
  91. //if (chbusy == 1)
  92. //{
  93. if (rx_cnt[n] == RxCntInit && idle == 0) { //make an idle before sending ACK
  94. idle = 1;
  95. }
  96. else if (rx_cnt[n] == 1) { //successful
  97. rx_cnt[n]=RxCntInit;
  98. total_pkt++;
  99. nodebusy[n] = 0;
  100. node[n] = Node_init(node[n], min_k); //reinitialize
  101. init[n] = 0;
  102. idle = 0;
  103. chbusy_cnt--;
  104. }
  105. else {
  106. rx_cnt[n]--;
  107. }
  108. //}
  109. //else if (chbusy > 1) {
  110. // chbusy_cnt--;
  111. /// rx_cnt[n] = RxCntInit; //initialize
  112. // tx_failure++;
  113. // total_pkt++;
  114. // node[n].State = 6;
  115.  
  116. //}
  117. //else {
  118. // chbusy_cnt = 0;
  119. // printf("errror alarm2n");
  120. // exit(1);
  121. //}
  122.  
  123.  
  124. }
  125. break;
  126.  
  127. // ******************** Time OUT state *************************
  128. case 6:
  129.  
  130. if (node[n].TimeOut == 1)
  131. {
  132. // -------------------------------------------------
  133. init[n] = 0;
  134. node[n] = Node_init(node[n], min_k); //reinitialize
  135. }
  136. else
  137. {
  138. node[n].TimeOut--;
  139. }
  140. break;
  141. } // END: (( switch (node[n].State) ))
  142. } // END: Node loop
  143.  
  144. chbusy = chbusy_cnt;
  145. } // END: simulation time
Add Comment
Please, Sign In to add comment