微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决更改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 举报,一经查实,本站将立刻删除。