更改MAC 802_3的ns2代码以关闭冲突检测

问题描述

过去几周我一直在进行ns2仿真,需要更改ns-2.35 / mac / mac-802_3.cc中的实现以关闭碰撞检测。

这是发生碰撞时运行的代码-


void Mac802_3::collision(Packet *p) {

    PRNT_MAC_FUNCS(this);

    if (mhIFS_.busy()) mhIFS_.cancel();

    double ifstime= netif_->txtime(int((IEEE_8023_JAMSIZE+IEEE_8023_IFS_BITS)/8.0)); //jam time + ifs
    mhIFS_.schedule(ifstime);

    switch(state_) {
    case MAC_SEND:
      // If mac trace feature is on generate a collision trace for this packet. 
            if (trace_)
               drop(p);
            else
               Packet::free(p);
        if (mhSend_.busy()) mhSend_.cancel();
        if (!mhRetx_.busy()) {
            /* schedule retransmissions */
            if (!mhRetx_.schedule(ifstime)) {
                p= mhRetx_.packet();
                hdr_cmn *th = hdr_cmn::access(p);
                HDR_CMN(p)->size() -= (ETHER_HDR_LEN + HDR_MAC(p)->padding_);
                fprintf(stderr,"BEB limit exceeded:Dropping packet %d\n",th->uid());
                                fflush(stderr);
                drop(p); // drop if backed off far enough
                mhRetx_.reset();
            }
        }
        break;
    case MAC_RECV:
            Packet::free(p);
        // more than 2 packets collisions possible
        if (mhRecv_.busy()) mhRecv_.cancel();
        break;
    default:
        assert("SHOULD NEVER HAPPEN" == 0);
    }
}

我尝试注释.cancel()部分,以避免在检测到冲突时取消传输。但这不能按预期方式工作,并且网络上的吞吐量为零。有人可以指导我如何实现这一目标吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)