[Ns-developers] packet tags
George Riley
riley at ece.gatech.edu
Thu Jul 10 11:42:19 PDT 2008
Another important consideration of the design for Tags is that they
are "serializable", meaning we can send a packet (with tags) from
one simulator to another in a distributed environment. I believe Hagen
has been trying to figure out how to make this work, and (I believe
again)
not had much luck. So when re-designing, please keep this requirement
in mind.
George
--------------------------------------------------
George Riley
Associate Professor
Georgia Tech
Electrical and Computer Engineering
riley at ece.gatech.edu
404-894-4767
Klaus Advanced Computing Building
Room 3360
266 Ferst Drive
Atlanta, Georgia 30332-0765
ECE4110 Web page:
http://users.ece.gatech.edu/~riley/ece4110/
ECE4112 Web page:
http://users.ece.gatech.edu/~riley/ece4112/
On Jul 10, 2008, at 1:24 PM, Mathieu Lacage wrote:
> Hi all,
>
> A couple of weeks before release 3.1, we eventually got to rewrite the
> tag support in ns-3 packets and, it turns out that the result is still
> not exactly what everyone expected so, this email is an attempt to
> summarize what use-cases I think ns-3 should solve. I have also
> included
> a couple of possible solutions but, just to be clear, none of these
> make
> me especially happy so, this is really an open question I think.
>
> 1) Use cases
> -------------
>
> There are really two conflicting major use-cases for packet tags:
> a) temporary ancillary data attached to packets as they flow up and
> down the stack.
> b) long-term metadata attached to a packet as it travels through a
> simulation and crosses multiple nodes.
>
> Examples of a) are:
> - a QoS class id to make sure that some packets end up in the right
> outgoing queues at the wifi layer (AC_BE vs AC_VO, etc.). This is a
> sort
> of cross-layer signaling scheme where the application notifies the MAC
> layer of a per-packet information and where you don't want to plumb
> the
> extra per-packet information throughout every function in the stack.
>
> - the source ipv4 address of a packet received: as a packet goes up
> the stack, higher layers of the code need to have access to different
> values coming from lower layers. There are cases where it is easier to
> pass these values explicitely in every function call and propagate
> them
> but there are also cases where it is really damn convenient to store
> them in the incoming packet instead.
>
> Examples of b) are:
> - a flow id which allows you to figure out which application
> generated
> a specific packet anywhere the packet ends up being.
> - a timestamp which allows you to figure out when the packet went
> through a specific location in the system (for example, when it was
> generated at the application layer).
>
> In the case of a), it is possible that, if the packet is forwarded
> across multiple nodes, it will have different values for the same
> 'tag'
> over its course in each node. In the case of b) the value stored in
> the
> 'tag' is immutable and will never change once set until the packet is
> destroyed.
>
> To summrize, in the case of a), you most likely want to cleanup all
> tags
> before forwarding the packet across node boundaries. In the case of
> b),
> you never want to do this.
>
> 2) What can we do about this ?
> ------------------------------
>
> It is now clear to me that we have two conflicting use-cases so, I
> have
> a hard time figuring out how to support both within the same
> framework.
> Right now, I would say that we need two different 'tags' facilities
> so,
> the only question is, how do we provide them ?
>
> a) Add a second tagging system to packets
> -----------------------------------------
>
> We could do that and support Packet::AddTemporaryTag and
> Packet::AddForeverTag.
>
> b) define a second tagging system outside of packets
> ----------------------------------------------------
>
> We could also define a TemporaryTags class and store arbitrary data in
> it and, pass this class up and down the stack together with every
> packet.
>
> Pros: it is trivial to 'cleanup' the tags when you cross a node
> boundary: you don't propagate the associated TemporaryTags class.
>
> Cons: changes the whole stack because we need to add an extra argument
> to every function which takes a Packet.
>
> At this point, I can't make myself like any solution so, comments
> would
> be welcome.
>
> regards,
> Mathieu
>
More information about the Ns-developers
mailing list