[Click] Implementing a packet cache for selective ACKs and ReTx
Ashish Sharma
ashishs.sharma at gmail.com
Wed Oct 28 06:08:13 EDT 2009
Hi,
I am trying to implement a bulk acknowledgement scheme with selective
retransmits for wireless. I have implemented a TDMA based MAC for wireless
wherein a node sends multiple packets during its slot. Instead of per-packet
802.11 acks, I am trying to implement a piggy-backed bulk ACK scheme where
the recipient responds with a bitmap of the received packets that it is
trying to acknowledge. For this I have implemented my own sequence number
management in a separate header.
The issue is, that after I assign it my custom sequence number, I need to
create a copy of the packet along with all the headers and data so that it
can be retransmitted at a later time if it is not ACKed by the recipient.
My question is how do I do this, since Packet::clone shares the data with
the original packet (which is killed after being send to ToDevice ?) and
with Packet::uniqueify() I can only create one copy? Documentation in
packet.cc mentions that
Packet *p = ...;
if (WritablePacket *q = p->uniqueify()) {
Packet *p2 = q->clone();
assert(p2);
}
is buggy and WritablePacket::clone() is discouraged.
My function looks something like this:
Packet * BulkAckManager::handle_outgoing_pkt(Packet *p,..) {
WritablePacket *p_out = p->uniqueify();
if (p_out) {
// Put sequence number in p_out->bulk_ack_hdr;
* WritablePacket *q_copy = p_out->clone(); *or *
p_out->uniqueify()*or *p->uniqueify(*);
insert_in_cache(seq_num, q_copy);
return p_out;
}
}
Packet * BulkAckManager::Retransmit(seq_num) {
Packet* p_retx = fetch_from_cache(seq_num);
return p_retx;
}
I have tried p_out->clone(), p_out->uniqueify and p->uniqueify and each
time I get a Seg Fault when trying to retransmit this packet at a later
stage.
I will be grateful for any suggestions. Thanks for your time.
Ashish
P.S. : I looked at snooptcp.cc and it also maintains a packet cache,
however I believe it never modifies the packets, so
WritablePacket->uniqueify followed by another copy is not required there.
More information about the click
mailing list