The C++ class LL derives from the LinkDelay class. Since it is a duplex object, it keeps a separate pointer for the send target, sendtarget, and the receive target, recvtarget. It also defines the methods recvfrom() and sendto() to handle the incoming and outgoing packets respectively.
class LL : public LinkDelay {
public:
LL();
virtual void recv(Packet* p, Handler* h);
virtual Packet* sendto(Packet* p, Handler* h = 0);
virtual Packet* recvfrom(Packet* p);
inline int seqno() { return seqno_; }
inline int ackno() { return ackno_; }
inline int macDA() { return macDA_; }
inline Queue *ifq() { return ifq_; }
inline NsObject* sendtarget() { return sendtarget_; }
inline NsObject* recvtarget() { return recvtarget_; }
protected:
int command(int argc, const char*const* argv);
void handle(Event* e) { recv((Packet*)e, 0); }
inline virtual int arp (int ip_addr) { return ip_addr; }
int seqno_; // link-layer sequence number
int ackno_; // ACK received so far
int macDA_; // destination MAC address
Queue* ifq_; // interface queue
NsObject* sendtarget_; // for outgoing packet
NsObject* recvtarget_; // for incoming packet
LanRouter* lanrouter_; // for lookups of the next hop
};