Hello,
I have created an EtherSwitch model to replace the EtherLink.
However, I got two problems:
1) In original EtherLink model, each Interface has only one
txlink, so when Interface::recvPacket(packet) is called by
its peer, txlink->transmit(packet) is returned. But in
the EtherSwitch model, each Interface has N-1 txlinks(N is
# of systems), so function recvPacket(packet) must
determine
which txlink is needed to transmit the packet. I tried to
find the destination information in the packet. I looked
through base/inet.hh and found the function dst() can
return
the destination address, so I wrote the following codes:
IpPtr p = IpPtr(packet);
uint32_t ip_address = p->dst();
But the simulator exited with error when it ran the
above codes. Can anyone know how to get the destination
information from the packet?
2) similar to the above problem. In original EtherLink model,
when Interface::isBusy() is called, it just returns
txlink->busy() since it has only one txlink. But in the
EtherSwitch model, isBusy doesn't know which txlink
is needed to transmit the packet and the worse is no packet
can be used to determine the destination. One feasible
solution is make sure all txlinks are free before a packet
is transmitted although only one txlink is used. My
question is how to modify the original code in order to
replace isBusy() by isBusy(packet).
Xin
_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users