[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ns] [NS] fix the bug in snoop
version: ns-2.1b8a
problem: couldn't get correct result when using snoop
bug: "Snoop::handle()" in "snoop.cc" didn't process ARP request
fix: add ARP request processing as LL does
/*---- original "Snoop::handle()" in "snoop.cc" ---*/
void
Snoop::handle(Event *e)
{
Packet *p = (Packet *) e;
packet_t type = hdr_cmn::access(p)->ptype();
//int seq = hdr_tcp::access(p)->seqno();
int prop = SNOOP_PROPAGATE; // by default; propagate ack or packet
Scheduler& s = Scheduler::instance();
//hdr_ll *llh = hdr_ll::access(p);
if (hdr_cmn::access(p)->error()) {
parent_->drop(p); // drop packet if it's been corrupted
return;
}
if (type == PT_ACK)
prop = snoop_ack(p);
else if (type == PT_TCP) /* XXX what about TELNET? */
snoop_wless_data(p);
if (prop == SNOOP_PROPAGATE)
s.schedule(recvtarget_, e, parent_->delay());
else { // suppress ack
/* printf("---- %f suppressing ack %d\n", s.clock(), seq);*/
//int seq = hdr_tcp::access(p)->seqno();
Packet::free(p);
}
}
/*=======================================================================================*/
/*---- fixed "Snoop::handle()" in "snoop.cc" ---*/
void
Snoop::handle(Event *e)
{
Packet *p = (Packet *) e;
packet_t type = hdr_cmn::access(p)->ptype();
//int seq = hdr_tcp::access(p)->seqno();
int prop = SNOOP_PROPAGATE; // by default; propagate ack or packet
Scheduler& s = Scheduler::instance();
//hdr_ll *llh = hdr_ll::access(p);
if (hdr_cmn::access(p)->error()) {
parent_->drop(p); // drop packet if it's been corrupted
return;
}
if (type == PT_ACK)
prop = snoop_ack(p);
else if (type == PT_TCP) /* XXX what about TELNET? */
snoop_wless_data(p);
if (prop == SNOOP_PROPAGATE)
{
/*------- process ARP request, refer to "ll.cc". 07/18/2001, wang, [email protected] -------*/
if (type == PT_ARP) parent_->arp_table()->arpinput(p, this->parent_);
else s.schedule(recvtarget_, e, parent_->delay());
}
else { // suppress ack
/* printf("---- %f suppressing ack %d\n", s.clock(), seq);*/
//int seq = hdr_tcp::access(p)->seqno();
Packet::free(p);
}
}