Dear All:
Recently I am doing simulations with ns2.30. I found a bug in
wireless-phy.cc, the bug is in the two functions below:
void
WirelessPhy::node_wakeup()
{
if (status_== IDLE)
return;
if (em() == NULL)
return;
if ( NOW > update_energy_time_ && (status_== SLEEP) ) {
//the power consumption when radio goes from SLEEP mode to IDLE mode
em()->DecrTransitionEnergy(T_transition_,P_transition_);
em()->DecrSleepEnergy(NOW-update_energy_time_,
P_sleep_);
status_ = IDLE;
update_energy_time_ = NOW;
// log node energy
if (em()->energy() > 0) {
((MobileNode *)node_)->log_energy(1);
} else {
((MobileNode *)node_)->log_energy(0);
}
}
}
void
WirelessPhy::node_sleep()
{
//
// node_on_= FALSE;
//
if (status_== SLEEP)
return;
if (em() == NULL)
return;
if ( NOW > update_energy_time_ && (status_== IDLE) ) {
//the power consumption when radio goes from IDLE mode to SLEEP mode
em()->DecrTransitionEnergy(T_transition_,P_transition_);
em()->DecrIdleEnergy(NOW-update_energy_time_,
P_idle_);
status_ = SLEEP;
update_energy_time_ = NOW;
// log node energy
if (em()->energy() > 0) {
((MobileNode *)node_)->log_energy(1);
} else {
((MobileNode *)node_)->log_energy(0);
}
}
}
---------------------------------------------------------
in the functions node_wakeup() and node_sleep(), when the conditions (
NOW > update_energy_time_ && (status_== IDLE) ) are satisfied, the variable
status_ can change. During the debug period, I found that there were
situations which satisfied NOW = update_energy_time_ && status_ == IDLE,
under such situations, the variable status_ didn't change and I think it is
wrong not to change the variable status_;
The solutions is to change "NOW > update_energy_time_" to "NOW >=
update_energy_time_".
Then using my test tclscript, I can get different results.
I wonder whether I am right. Any suggestions will be appreciated.
Best regards!
David