Bug 139 - Packet::RemoveTag is misleading
Packet::RemoveTag is misleading
Status: RESOLVED FIXED
Product: ns-3
Classification: Unclassified
Component: network
pre-release
All All
: P3 normal
Assigned To: ns-bugs
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2008-02-14 07:56 UTC by Gustavo J. A. M. Carneiro
Modified: 2008-07-01 13:32 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Gustavo J. A. M. Carneiro 2008-02-14 07:56:46 UTC
Yes, I am frustrated because Packet::RemoveTag has deceived me and made me waste a lot of time.

I had some code that used to do pkt->PeekTag (tag).  It turns out I discovered a case where a packet was being re-routed and the same tag was being re-added.  So I logically decided to switch to pkt->RemoveTag (tag).

After an hour wasted (it was not obvious) in debugging it turned out this was a bad move. Packet::RemoveTag (tag) does not actually copy the tag!

1. Why does Packet::RemoveHeader (header) remove and return the header, but Packet::RemoveTag (tag) only removes the tag; this is very inconsistent...

2. If Packet::RemoveTag only removes the tag, and not return it, why does it take the 'tag' parameter at all?  This is highly misleading... It should instead be Packet::RemoveTag<TAG_TYPE> ().
Comment 1 Gustavo J. A. M. Carneiro 2008-02-14 08:58:28 UTC
Re-titling the bug, after cooling down my frustration :P
Comment 2 Mathieu Lacage 2008-02-14 11:49:52 UTC
(In reply to comment #0)
> Yes, I am frustrated because Packet::RemoveTag has deceived me and made me
> waste a lot of time.
> 
> I had some code that used to do pkt->PeekTag (tag).  It turns out I discovered
> a case where a packet was being re-routed and the same tag was being re-added. 
> So I logically decided to switch to pkt->RemoveTag (tag).
> 
> After an hour wasted (it was not obvious) in debugging it turned out this was a
> bad move. Packet::RemoveTag (tag) does not actually copy the tag!

sounds like a bug since the documentation clearly says it should.

> 
> 1. Why does Packet::RemoveHeader (header) remove and return the header, but
> Packet::RemoveTag (tag) only removes the tag; this is very inconsistent...

Patch to align RemoveTag with RemoveHeader would be welcome. Another option would be, of course, to update the RemoveTag documentation to align it with its current implementation. Either way would be fine with me.


Comment 3 Gustavo J. A. M. Carneiro 2008-02-14 12:49:35 UTC
-> http://code.nsnam.org/ns-3-dev/rev/9df551386a93