Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- init[n] = 1; // Node is on the current backoff
- nodebusy[n] = 1; // Node busy
- if (node[n].BackoffPeriod == 1)
- {
- node[n].State = 3; // Switch to carrier sensing in the next slot
- node[n].BackoffPeriod--;
- }
- else
- {
- node[n].State = 2; // Stay in the backoff state
- node[n].BackoffPeriod--; // Decrease Backoff
- }
- break;
- if (node[n].carrier_sensing == 1 && chbusy == 0) // If channel is idle AND doing carrier sensing
- {
- node[n].carrier_sensing--;
- node[n].State = 4; // Switch to Tx state in the next slot
- chbusy_cnt++; // make channel busy
- }
- else // Channel is BUSY
- {
- ` // -----------------------------------------------`
- node[n].k++;
- if (node[n].k <= 5) {
- node[n] = Node_init(node[n], node[n].k);
- init[n] = 0;
- }
- else { //k is over limited
- node[n]= Node_init(node[n], min_k); //drop data
- init[n] = 0;
- tx_failure++;
- total_pkt++;
- }
- }
- break;
- // ******************** Tx state *************************
- case 4:
- if (tx_cnt[n] == TxCntInit)
- {
- tx_cnt[n]--; // Stay same state in the next slot
- }
- else if (tx_cnt[n] == 1)
- {
- //--------------------------------------------------
- if (chbusy > 1) { //collision 둘 이상의 채널이 사용 중
- chbusy_cnt--;
- tx_cnt[n] = TxCntInit; //initialize
- tx_failure++;
- total_pkt++;
- node[n].State = 6;
- }
- else if (chbusy == 1) { //오직 한 노드만이 채널을 사용 중
- tx_cnt[n] = TxCntInit; //initialize
- node[n].State = 5;
- chbusy_cnt--;
- }
- else {
- chbusy_cnt = 0;
- printf("error alaramn");
- exit(1);
- }
- }
- else
- {
- tx_cnt[n]--; // Stay same state in the next slot
- }
- break;
- // ******************** Rx state *************************
- case 5:
- if (chbusy == 0)
- {
- chbusy_cnt++; // Make CHANNEL BUSY for ACK transmission in the next slot
- }
- else
- {
- //------------------------ ----------------------------
- //if (chbusy == 1)
- //{
- if (rx_cnt[n] == RxCntInit && idle == 0) { //make an idle before sending ACK
- idle = 1;
- }
- else if (rx_cnt[n] == 1) { //successful
- rx_cnt[n]=RxCntInit;
- total_pkt++;
- nodebusy[n] = 0;
- node[n] = Node_init(node[n], min_k); //reinitialize
- init[n] = 0;
- idle = 0;
- chbusy_cnt--;
- }
- else {
- rx_cnt[n]--;
- }
- //}
- //else if (chbusy > 1) {
- // chbusy_cnt--;
- /// rx_cnt[n] = RxCntInit; //initialize
- // tx_failure++;
- // total_pkt++;
- // node[n].State = 6;
- //}
- //else {
- // chbusy_cnt = 0;
- // printf("errror alarm2n");
- // exit(1);
- //}
- }
- break;
- // ******************** Time OUT state *************************
- case 6:
- if (node[n].TimeOut == 1)
- {
- // -------------------------------------------------
- init[n] = 0;
- node[n] = Node_init(node[n], min_k); //reinitialize
- }
- else
- {
- node[n].TimeOut--;
- }
- break;
- } // END: (( switch (node[n].State) ))
- } // END: Node loop
- chbusy = chbusy_cnt;
- } // END: simulation time
Add Comment
Please, Sign In to add comment