author | Peter D. Barnes, Jr. <barnes26@llnl.gov> |
Wed, 14 Nov 2012 00:03:41 -0800 | |
branch | ptl |
changeset 9768 | bee4f4bf5044 |
parent 9763 | 038d5627c5a9 |
child 9894 | ac4e52a91d5d |
permissions | -rw-r--r-- |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
2 |
/* |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
3 |
* Copyright (c) 2005,2006 INRIA |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
4 |
* |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
5 |
* This program is free software; you can redistribute it and/or modify |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
6 |
* it under the terms of the GNU General Public License version 2 as |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation; |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
8 |
* |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
9 |
* This program is distributed in the hope that it will be useful, |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
12 |
* GNU General Public License for more details. |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
13 |
* |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
14 |
* You should have received a copy of the GNU General Public License |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
15 |
* along with this program; if not, write to the Free Software |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
16 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
17 |
* |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
18 |
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
19 |
*/ |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
20 |
#include "packet.h" |
286
57e6a2006962
convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
239
diff
changeset
|
21 |
#include "ns3/assert.h" |
3158
2a4305eeca93
add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3057
diff
changeset
|
22 |
#include "ns3/log.h" |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
23 |
#include "ns3/simulator.h" |
5334
92aafeab5e4f
packet test suite ported to new framework
Pavel Boyko <boyko@iitp.ru>
parents:
5224
diff
changeset
|
24 |
#include <string> |
9063
32755d0516f4
Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents:
7256
diff
changeset
|
25 |
#include <cstdarg> |
3158
2a4305eeca93
add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3057
diff
changeset
|
26 |
|
2a4305eeca93
add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3057
diff
changeset
|
27 |
NS_LOG_COMPONENT_DEFINE ("Packet"); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
28 |
|
16
99e833adbb46
change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
9
diff
changeset
|
29 |
namespace ns3 { |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
30 |
|
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
31 |
uint32_t Packet::m_globalUid = 0; |
91
8066ef8d9274
add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
90
diff
changeset
|
32 |
|
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
33 |
TypeId |
4502 | 34 |
ByteTagIterator::Item::GetTypeId (void) const |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
35 |
{ |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
36 |
return m_tid; |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
37 |
} |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
38 |
uint32_t |
4502 | 39 |
ByteTagIterator::Item::GetStart (void) const |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
40 |
{ |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
41 |
return m_start; |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
42 |
} |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
43 |
uint32_t |
4502 | 44 |
ByteTagIterator::Item::GetEnd (void) const |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
45 |
{ |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
46 |
return m_end; |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
47 |
} |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
48 |
void |
4502 | 49 |
ByteTagIterator::Item::GetTag (Tag &tag) const |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
50 |
{ |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
51 |
if (tag.GetInstanceTypeId () != GetTypeId ()) |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
52 |
{ |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
53 |
NS_FATAL_ERROR ("The tag you provided is not of the right type."); |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
54 |
} |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
55 |
tag.Deserialize (m_buffer); |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
56 |
} |
4502 | 57 |
ByteTagIterator::Item::Item (TypeId tid, uint32_t start, uint32_t end, TagBuffer buffer) |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
58 |
: m_tid (tid), |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
59 |
m_start (start), |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
60 |
m_end (end), |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
61 |
m_buffer (buffer) |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
62 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
63 |
} |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
64 |
bool |
4502 | 65 |
ByteTagIterator::HasNext (void) const |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
66 |
{ |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
67 |
return m_current.HasNext (); |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
68 |
} |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
69 |
ByteTagIterator::Item |
4502 | 70 |
ByteTagIterator::Next (void) |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
71 |
{ |
4502 | 72 |
ByteTagList::Iterator::Item i = m_current.Next (); |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
73 |
return ByteTagIterator::Item (i.tid, |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
74 |
i.start-m_current.GetOffsetStart (), |
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
75 |
i.end-m_current.GetOffsetStart (), |
4502 | 76 |
i.buf); |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
77 |
} |
4502 | 78 |
ByteTagIterator::ByteTagIterator (ByteTagList::Iterator i) |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
79 |
: m_current (i) |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
80 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
81 |
} |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
82 |
|
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
83 |
|
4502 | 84 |
PacketTagIterator::PacketTagIterator (const struct PacketTagList::TagData *head) |
85 |
: m_current (head) |
|
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
86 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
87 |
} |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
88 |
bool |
4502 | 89 |
PacketTagIterator::HasNext (void) const |
90 |
{ |
|
91 |
return m_current != 0; |
|
92 |
} |
|
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
93 |
PacketTagIterator::Item |
4502 | 94 |
PacketTagIterator::Next (void) |
95 |
{ |
|
96 |
NS_ASSERT (HasNext ()); |
|
97 |
const struct PacketTagList::TagData *prev = m_current; |
|
98 |
m_current = m_current->next; |
|
99 |
return PacketTagIterator::Item (prev); |
|
100 |
} |
|
101 |
||
102 |
PacketTagIterator::Item::Item (const struct PacketTagList::TagData *data) |
|
103 |
: m_data (data) |
|
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
104 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
105 |
} |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
106 |
TypeId |
4502 | 107 |
PacketTagIterator::Item::GetTypeId (void) const |
108 |
{ |
|
109 |
return m_data->tid; |
|
110 |
} |
|
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
111 |
void |
4502 | 112 |
PacketTagIterator::Item::GetTag (Tag &tag) const |
113 |
{ |
|
114 |
NS_ASSERT (tag.GetInstanceTypeId () == m_data->tid); |
|
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
115 |
tag.Deserialize (TagBuffer ((uint8_t*)m_data->data, |
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
116 |
(uint8_t*)m_data->data |
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
117 |
+ PacketTagList::TagData::MAX_SIZE)); |
4502 | 118 |
} |
119 |
||
120 |
||
1865
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
121 |
Ptr<Packet> |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
122 |
Packet::Copy (void) const |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
123 |
{ |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
124 |
// we need to invoke the copy constructor directly |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
125 |
// rather than calling Create because the copy constructor |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
126 |
// is private. |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
127 |
return Ptr<Packet> (new Packet (*this), false); |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
128 |
} |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
129 |
|
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
130 |
Packet::Packet () |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
131 |
: m_buffer (), |
4502 | 132 |
m_byteTagList (), |
133 |
m_packetTagList (), |
|
6167 | 134 |
/* The upper 32 bits of the packet id in |
135 |
* metadata is for the system id. For non- |
|
136 |
* distributed simulations, this is simply |
|
137 |
* zero. The lower 32 bits are for the |
|
138 |
* global UID |
|
139 |
*/ |
|
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
140 |
m_metadata (static_cast<uint64_t> (Simulator::GetSystemId ()) << 32 | m_globalUid, 0), |
5505
c0ac392289c3
replace RefCountBase with SimpleRefCount<> to avoid duplicate refcounting implementations.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5334
diff
changeset
|
141 |
m_nixVector (0) |
91
8066ef8d9274
add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
90
diff
changeset
|
142 |
{ |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
143 |
m_globalUid++; |
91
8066ef8d9274
add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
90
diff
changeset
|
144 |
} |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
145 |
|
1865
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
146 |
Packet::Packet (const Packet &o) |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
147 |
: m_buffer (o.m_buffer), |
4502 | 148 |
m_byteTagList (o.m_byteTagList), |
149 |
m_packetTagList (o.m_packetTagList), |
|
5505
c0ac392289c3
replace RefCountBase with SimpleRefCount<> to avoid duplicate refcounting implementations.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5334
diff
changeset
|
150 |
m_metadata (o.m_metadata) |
5224
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
151 |
{ |
6457
9dd21e4198f8
undelete copy method in nix-vector
Josh Pelkey <jpelkey@gatech.edu>
parents:
6455
diff
changeset
|
152 |
o.m_nixVector ? m_nixVector = o.m_nixVector->Copy () |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
153 |
: m_nixVector = 0; |
5224
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
154 |
} |
1865
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
155 |
|
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
156 |
Packet & |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
157 |
Packet::operator = (const Packet &o) |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
158 |
{ |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
159 |
if (this == &o) |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
160 |
{ |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
161 |
return *this; |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
162 |
} |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
163 |
m_buffer = o.m_buffer; |
4502 | 164 |
m_byteTagList = o.m_byteTagList; |
165 |
m_packetTagList = o.m_packetTagList; |
|
1865
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
166 |
m_metadata = o.m_metadata; |
6457
9dd21e4198f8
undelete copy method in nix-vector
Josh Pelkey <jpelkey@gatech.edu>
parents:
6455
diff
changeset
|
167 |
o.m_nixVector ? m_nixVector = o.m_nixVector->Copy () |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
168 |
: m_nixVector = 0; |
1865
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
169 |
return *this; |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
170 |
} |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
171 |
|
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
172 |
Packet::Packet (uint32_t size) |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
173 |
: m_buffer (size), |
4502 | 174 |
m_byteTagList (), |
175 |
m_packetTagList (), |
|
6167 | 176 |
/* The upper 32 bits of the packet id in |
177 |
* metadata is for the system id. For non- |
|
178 |
* distributed simulations, this is simply |
|
179 |
* zero. The lower 32 bits are for the |
|
180 |
* global UID |
|
181 |
*/ |
|
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
182 |
m_metadata (static_cast<uint64_t> (Simulator::GetSystemId ()) << 32 | m_globalUid, size), |
5505
c0ac392289c3
replace RefCountBase with SimpleRefCount<> to avoid duplicate refcounting implementations.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5334
diff
changeset
|
183 |
m_nixVector (0) |
91
8066ef8d9274
add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
90
diff
changeset
|
184 |
{ |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
185 |
m_globalUid++; |
91
8066ef8d9274
add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
90
diff
changeset
|
186 |
} |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
187 |
Packet::Packet (uint8_t const *buffer, uint32_t size, bool magic) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
188 |
: m_buffer (0, false), |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
189 |
m_byteTagList (), |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
190 |
m_packetTagList (), |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
191 |
m_metadata (0,0), |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
192 |
m_nixVector (0) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
193 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
194 |
NS_ASSERT (magic); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
195 |
Deserialize (buffer, size); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
196 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
197 |
|
239
e194d619534b
add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
150
diff
changeset
|
198 |
Packet::Packet (uint8_t const*buffer, uint32_t size) |
e194d619534b
add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
150
diff
changeset
|
199 |
: m_buffer (), |
4502 | 200 |
m_byteTagList (), |
201 |
m_packetTagList (), |
|
6167 | 202 |
/* The upper 32 bits of the packet id in |
203 |
* metadata is for the system id. For non- |
|
204 |
* distributed simulations, this is simply |
|
205 |
* zero. The lower 32 bits are for the |
|
206 |
* global UID |
|
207 |
*/ |
|
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
208 |
m_metadata (static_cast<uint64_t> (Simulator::GetSystemId ()) << 32 | m_globalUid, size), |
5505
c0ac392289c3
replace RefCountBase with SimpleRefCount<> to avoid duplicate refcounting implementations.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5334
diff
changeset
|
209 |
m_nixVector (0) |
239
e194d619534b
add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
150
diff
changeset
|
210 |
{ |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
211 |
m_globalUid++; |
239
e194d619534b
add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
150
diff
changeset
|
212 |
m_buffer.AddAtStart (size); |
e194d619534b
add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
150
diff
changeset
|
213 |
Buffer::Iterator i = m_buffer.Begin (); |
e194d619534b
add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
150
diff
changeset
|
214 |
i.Write (buffer, size); |
e194d619534b
add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
150
diff
changeset
|
215 |
} |
e194d619534b
add packet constructor which accepts payload buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
150
diff
changeset
|
216 |
|
4502 | 217 |
Packet::Packet (const Buffer &buffer, const ByteTagList &byteTagList, |
218 |
const PacketTagList &packetTagList, const PacketMetadata &metadata) |
|
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
219 |
: m_buffer (buffer), |
4502 | 220 |
m_byteTagList (byteTagList), |
221 |
m_packetTagList (packetTagList), |
|
1865
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
222 |
m_metadata (metadata), |
5505
c0ac392289c3
replace RefCountBase with SimpleRefCount<> to avoid duplicate refcounting implementations.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5334
diff
changeset
|
223 |
m_nixVector (0) |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
224 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
225 |
} |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
226 |
|
1865
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
227 |
Ptr<Packet> |
122
6b8f1eda5c57
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
111
diff
changeset
|
228 |
Packet::CreateFragment (uint32_t start, uint32_t length) const |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
229 |
{ |
3158
2a4305eeca93
add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3057
diff
changeset
|
230 |
NS_LOG_FUNCTION (this << start << length); |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
231 |
Buffer buffer = m_buffer.CreateFragment (start, length); |
819
3bae75040589
calculate the correct size of header and trailer to remove from buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
806
diff
changeset
|
232 |
NS_ASSERT (m_buffer.GetSize () >= start + length); |
3bae75040589
calculate the correct size of header and trailer to remove from buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
806
diff
changeset
|
233 |
uint32_t end = m_buffer.GetSize () - (start + length); |
888
f882ee7eaccf
history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
887
diff
changeset
|
234 |
PacketMetadata metadata = m_metadata.CreateFragment (start, end); |
1865
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
235 |
// again, call the constructor directly rather than |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
236 |
// through Create because it is private. |
4502 | 237 |
return Ptr<Packet> (new Packet (buffer, m_byteTagList, m_packetTagList, metadata), false); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
238 |
} |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
239 |
|
5224
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
240 |
void |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
241 |
Packet::SetNixVector (Ptr<NixVector> nixVector) |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
242 |
{ |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
243 |
m_nixVector = nixVector; |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
244 |
} |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
245 |
|
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
246 |
Ptr<NixVector> |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
247 |
Packet::GetNixVector (void) const |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
248 |
{ |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
249 |
return m_nixVector; |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
250 |
} |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
251 |
|
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
252 |
void |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
253 |
Packet::AddHeader (const Header &header) |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
254 |
{ |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
255 |
uint32_t size = header.GetSerializedSize (); |
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
256 |
NS_LOG_FUNCTION (this << header.GetInstanceTypeId ().GetName () << size); |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
257 |
uint32_t orgStart = m_buffer.GetCurrentStartOffset (); |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
258 |
bool resized = m_buffer.AddAtStart (size); |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
259 |
if (resized) |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
260 |
{ |
4502 | 261 |
m_byteTagList.AddAtStart (m_buffer.GetCurrentStartOffset () + size - orgStart, |
262 |
m_buffer.GetCurrentStartOffset () + size); |
|
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
263 |
} |
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
264 |
header.Serialize (m_buffer.Begin ()); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
265 |
m_metadata.AddHeader (header, size); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
266 |
} |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
267 |
uint32_t |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
268 |
Packet::RemoveHeader (Header &header) |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
269 |
{ |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
270 |
uint32_t deserialized = header.Deserialize (m_buffer.Begin ()); |
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
271 |
NS_LOG_FUNCTION (this << header.GetInstanceTypeId ().GetName () << deserialized); |
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
272 |
m_buffer.RemoveAtStart (deserialized); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
273 |
m_metadata.RemoveHeader (header, deserialized); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
274 |
return deserialized; |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
275 |
} |
3364
8e6ac6061680
implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3301
diff
changeset
|
276 |
uint32_t |
3738
011897c60e9c
bug 331: constify Packet::PeekHeader
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3553
diff
changeset
|
277 |
Packet::PeekHeader (Header &header) const |
3364
8e6ac6061680
implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3301
diff
changeset
|
278 |
{ |
8e6ac6061680
implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3301
diff
changeset
|
279 |
uint32_t deserialized = header.Deserialize (m_buffer.Begin ()); |
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
280 |
NS_LOG_FUNCTION (this << header.GetInstanceTypeId ().GetName () << deserialized); |
3364
8e6ac6061680
implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3301
diff
changeset
|
281 |
return deserialized; |
8e6ac6061680
implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3301
diff
changeset
|
282 |
} |
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
283 |
void |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
284 |
Packet::AddTrailer (const Trailer &trailer) |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
285 |
{ |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
286 |
uint32_t size = trailer.GetSerializedSize (); |
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
287 |
NS_LOG_FUNCTION (this << trailer.GetInstanceTypeId ().GetName () << size); |
3237
57d9fc10f15d
a few new testcases, bug fixes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3230
diff
changeset
|
288 |
uint32_t orgStart = m_buffer.GetCurrentStartOffset (); |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
289 |
bool resized = m_buffer.AddAtEnd (size); |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
290 |
if (resized) |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
291 |
{ |
4502 | 292 |
m_byteTagList.AddAtEnd (m_buffer.GetCurrentStartOffset () - orgStart, |
293 |
m_buffer.GetCurrentEndOffset () - size); |
|
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
294 |
} |
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
295 |
Buffer::Iterator end = m_buffer.End (); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
296 |
trailer.Serialize (end); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
297 |
m_metadata.AddTrailer (trailer, size); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
298 |
} |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
299 |
uint32_t |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
300 |
Packet::RemoveTrailer (Trailer &trailer) |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
301 |
{ |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
302 |
uint32_t deserialized = trailer.Deserialize (m_buffer.End ()); |
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
303 |
NS_LOG_FUNCTION (this << trailer.GetInstanceTypeId ().GetName () << deserialized); |
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
304 |
m_buffer.RemoveAtEnd (deserialized); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
305 |
m_metadata.RemoveTrailer (trailer, deserialized); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
306 |
return deserialized; |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
307 |
} |
3364
8e6ac6061680
implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3301
diff
changeset
|
308 |
uint32_t |
8e6ac6061680
implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3301
diff
changeset
|
309 |
Packet::PeekTrailer (Trailer &trailer) |
8e6ac6061680
implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3301
diff
changeset
|
310 |
{ |
8e6ac6061680
implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3301
diff
changeset
|
311 |
uint32_t deserialized = trailer.Deserialize (m_buffer.End ()); |
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
312 |
NS_LOG_FUNCTION (this << trailer.GetInstanceTypeId ().GetName () << deserialized); |
3364
8e6ac6061680
implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3301
diff
changeset
|
313 |
return deserialized; |
8e6ac6061680
implement Packet::PeekHeader and Packet::PeekTrailer to avoid evil workarounds when receiving tcp packets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3301
diff
changeset
|
314 |
} |
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
315 |
|
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
316 |
void |
1865
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
317 |
Packet::AddAtEnd (Ptr<const Packet> packet) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
318 |
{ |
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
319 |
NS_LOG_FUNCTION (this << packet << packet->GetSize ()); |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
320 |
uint32_t aStart = m_buffer.GetCurrentStartOffset (); |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
321 |
uint32_t bEnd = packet->m_buffer.GetCurrentEndOffset (); |
2992
ba52f937610c
move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
322 |
m_buffer.AddAtEnd (packet->m_buffer); |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
323 |
uint32_t appendPrependOffset = m_buffer.GetCurrentEndOffset () - packet->m_buffer.GetSize (); |
4502 | 324 |
m_byteTagList.AddAtEnd (m_buffer.GetCurrentStartOffset () - aStart, |
325 |
appendPrependOffset); |
|
326 |
ByteTagList copy = packet->m_byteTagList; |
|
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
327 |
copy.AddAtStart (m_buffer.GetCurrentEndOffset () - bEnd, |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
328 |
appendPrependOffset); |
4502 | 329 |
m_byteTagList.Add (copy); |
1865
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
330 |
m_metadata.AddAtEnd (packet->m_metadata); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
331 |
} |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
332 |
void |
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
333 |
Packet::AddPaddingAtEnd (uint32_t size) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
334 |
{ |
3158
2a4305eeca93
add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3057
diff
changeset
|
335 |
NS_LOG_FUNCTION (this << size); |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
336 |
uint32_t orgEnd = m_buffer.GetCurrentEndOffset (); |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
337 |
bool resized = m_buffer.AddAtEnd (size); |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
338 |
if (resized) |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
339 |
{ |
4502 | 340 |
m_byteTagList.AddAtEnd (m_buffer.GetCurrentEndOffset () - orgEnd, |
341 |
m_buffer.GetCurrentEndOffset () - size); |
|
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
342 |
} |
888
f882ee7eaccf
history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
887
diff
changeset
|
343 |
m_metadata.AddPaddingAtEnd (size); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
344 |
} |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
345 |
void |
122
6b8f1eda5c57
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
111
diff
changeset
|
346 |
Packet::RemoveAtEnd (uint32_t size) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
347 |
{ |
3158
2a4305eeca93
add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3057
diff
changeset
|
348 |
NS_LOG_FUNCTION (this << size); |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
349 |
m_buffer.RemoveAtEnd (size); |
888
f882ee7eaccf
history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
887
diff
changeset
|
350 |
m_metadata.RemoveAtEnd (size); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
351 |
} |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
352 |
void |
122
6b8f1eda5c57
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
111
diff
changeset
|
353 |
Packet::RemoveAtStart (uint32_t size) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
354 |
{ |
3158
2a4305eeca93
add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3057
diff
changeset
|
355 |
NS_LOG_FUNCTION (this << size); |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
356 |
m_buffer.RemoveAtStart (size); |
888
f882ee7eaccf
history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
887
diff
changeset
|
357 |
m_metadata.RemoveAtStart (size); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
358 |
} |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
359 |
|
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
360 |
void |
4502 | 361 |
Packet::RemoveAllByteTags (void) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
362 |
{ |
3158
2a4305eeca93
add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3057
diff
changeset
|
363 |
NS_LOG_FUNCTION (this); |
4502 | 364 |
m_byteTagList.RemoveAll (); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
365 |
} |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
366 |
|
90
d670ba9f726e
replace pointers with references
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
54
diff
changeset
|
367 |
uint8_t const * |
122
6b8f1eda5c57
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
111
diff
changeset
|
368 |
Packet::PeekData (void) const |
90
d670ba9f726e
replace pointers with references
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
54
diff
changeset
|
369 |
{ |
4483
b7faa7398d1e
add missing log call
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4448
diff
changeset
|
370 |
NS_LOG_FUNCTION (this); |
4486
e12cbd513b47
bug 572: Tag offsets not updated in Packet::PeekData
Pavel Boyko <boyko@iitp.ru>
parents:
4484
diff
changeset
|
371 |
uint32_t oldStart = m_buffer.GetCurrentStartOffset (); |
e12cbd513b47
bug 572: Tag offsets not updated in Packet::PeekData
Pavel Boyko <boyko@iitp.ru>
parents:
4484
diff
changeset
|
372 |
uint8_t const * data = m_buffer.PeekData (); |
e12cbd513b47
bug 572: Tag offsets not updated in Packet::PeekData
Pavel Boyko <boyko@iitp.ru>
parents:
4484
diff
changeset
|
373 |
uint32_t newStart = m_buffer.GetCurrentStartOffset (); |
4502 | 374 |
|
4486
e12cbd513b47
bug 572: Tag offsets not updated in Packet::PeekData
Pavel Boyko <boyko@iitp.ru>
parents:
4484
diff
changeset
|
375 |
// Update tag offsets if buffer offsets were changed |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
376 |
const_cast<ByteTagList &>(m_byteTagList).AddAtStart (newStart - oldStart, newStart); |
4486
e12cbd513b47
bug 572: Tag offsets not updated in Packet::PeekData
Pavel Boyko <boyko@iitp.ru>
parents:
4484
diff
changeset
|
377 |
return data; |
90
d670ba9f726e
replace pointers with references
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
54
diff
changeset
|
378 |
} |
d670ba9f726e
replace pointers with references
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
54
diff
changeset
|
379 |
|
91
8066ef8d9274
add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
90
diff
changeset
|
380 |
uint32_t |
3764
64f1310350e4
add API to get bytes out of a packet without calling PeekData
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3738
diff
changeset
|
381 |
Packet::CopyData (uint8_t *buffer, uint32_t size) const |
64f1310350e4
add API to get bytes out of a packet without calling PeekData
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3738
diff
changeset
|
382 |
{ |
5938
69bcae35bc81
avoid copying bytes one after the other.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5505
diff
changeset
|
383 |
return m_buffer.CopyData (buffer, size); |
3764
64f1310350e4
add API to get bytes out of a packet without calling PeekData
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3738
diff
changeset
|
384 |
} |
64f1310350e4
add API to get bytes out of a packet without calling PeekData
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3738
diff
changeset
|
385 |
|
4518
31f2881aa214
avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4502
diff
changeset
|
386 |
void |
7256
b04ba6772f8c
rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents:
6968
diff
changeset
|
387 |
Packet::CopyData (std::ostream *os, uint32_t size) const |
4518
31f2881aa214
avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4502
diff
changeset
|
388 |
{ |
31f2881aa214
avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4502
diff
changeset
|
389 |
return m_buffer.CopyData (os, size); |
31f2881aa214
avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4502
diff
changeset
|
390 |
} |
31f2881aa214
avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4502
diff
changeset
|
391 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
392 |
uint64_t |
122
6b8f1eda5c57
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
111
diff
changeset
|
393 |
Packet::GetUid (void) const |
91
8066ef8d9274
add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
90
diff
changeset
|
394 |
{ |
888
f882ee7eaccf
history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
887
diff
changeset
|
395 |
return m_metadata.GetUid (); |
91
8066ef8d9274
add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
90
diff
changeset
|
396 |
} |
8066ef8d9274
add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
90
diff
changeset
|
397 |
|
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
398 |
void |
4502 | 399 |
Packet::PrintByteTags (std::ostream &os) const |
1241
66f126692f5e
add Packet::PrintTags and move tag documentation to tag.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1150
diff
changeset
|
400 |
{ |
4502 | 401 |
ByteTagIterator i = GetByteTagIterator (); |
3208
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
402 |
while (i.HasNext ()) |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
403 |
{ |
4502 | 404 |
ByteTagIterator::Item item = i.Next (); |
3208
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
405 |
os << item.GetTypeId ().GetName () << " [" << item.GetStart () << "-" << item.GetEnd () << "]"; |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
406 |
Callback<ObjectBase *> constructor = item.GetTypeId ().GetConstructor (); |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
407 |
if (constructor.IsNull ()) |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
408 |
{ |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
409 |
if (i.HasNext ()) |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
410 |
{ |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
411 |
os << " "; |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
412 |
} |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
413 |
continue; |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
414 |
} |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
415 |
Tag *tag = dynamic_cast<Tag *> (constructor ()); |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
416 |
NS_ASSERT (tag != 0); |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
417 |
os << " "; |
3230
e59680767a04
bug 212: Packet::PrintTags fails
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3208
diff
changeset
|
418 |
item.GetTag (*tag); |
3208
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
419 |
tag->Print (os); |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
420 |
if (i.HasNext ()) |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
421 |
{ |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
422 |
os << " "; |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
423 |
} |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
424 |
delete tag; |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
425 |
} |
1241
66f126692f5e
add Packet::PrintTags and move tag documentation to tag.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1150
diff
changeset
|
426 |
} |
66f126692f5e
add Packet::PrintTags and move tag documentation to tag.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1150
diff
changeset
|
427 |
|
66f126692f5e
add Packet::PrintTags and move tag documentation to tag.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1150
diff
changeset
|
428 |
void |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
429 |
Packet::Print (std::ostream &os) const |
789
1e19322e9012
merge unfinished packet history code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
463
diff
changeset
|
430 |
{ |
2660
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
431 |
PacketMetadata::ItemIterator i = m_metadata.BeginItem (m_buffer); |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
432 |
while (i.HasNext ()) |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
433 |
{ |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
434 |
PacketMetadata::Item item = i.Next (); |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
435 |
if (item.isFragment) |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
436 |
{ |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
437 |
switch (item.type) { |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
438 |
case PacketMetadata::Item::PAYLOAD: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
439 |
os << "Payload"; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
440 |
break; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
441 |
case PacketMetadata::Item::HEADER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
442 |
case PacketMetadata::Item::TRAILER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
443 |
os << item.tid.GetName (); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
444 |
break; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
445 |
} |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
446 |
os << " Fragment [" << item.currentTrimedFromStart<<":" |
2660
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
447 |
<< (item.currentTrimedFromStart + item.currentSize) << "]"; |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
448 |
} |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
449 |
else |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
450 |
{ |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
451 |
switch (item.type) { |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
452 |
case PacketMetadata::Item::PAYLOAD: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
453 |
os << "Payload (size=" << item.currentSize << ")"; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
454 |
break; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
455 |
case PacketMetadata::Item::HEADER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
456 |
case PacketMetadata::Item::TRAILER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
457 |
os << item.tid.GetName () << " ("; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
458 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
459 |
NS_ASSERT (item.tid.HasConstructor ()); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
460 |
Callback<ObjectBase *> constructor = item.tid.GetConstructor (); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
461 |
NS_ASSERT (!constructor.IsNull ()); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
462 |
ObjectBase *instance = constructor (); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
463 |
NS_ASSERT (instance != 0); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
464 |
Chunk *chunk = dynamic_cast<Chunk *> (instance); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
465 |
NS_ASSERT (chunk != 0); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
466 |
chunk->Deserialize (item.current); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
467 |
chunk->Print (os); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
468 |
delete chunk; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
469 |
} |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
470 |
os << ")"; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
471 |
break; |
2660
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
472 |
} |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
473 |
} |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
474 |
if (i.HasNext ()) |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
475 |
{ |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
476 |
os << " "; |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
477 |
} |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
478 |
} |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
479 |
#if 0 |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
480 |
// The code below will work only if headers and trailers |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
481 |
// define the right attributes which is not the case for |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
482 |
// now. So, as a temporary measure, we use the |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
483 |
// headers' and trailers' Print method as shown above. |
2647
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
484 |
PacketMetadata::ItemIterator i = m_metadata.BeginItem (m_buffer); |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
485 |
while (i.HasNext ()) |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
486 |
{ |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
487 |
PacketMetadata::Item item = i.Next (); |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
488 |
if (item.isFragment) |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
489 |
{ |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
490 |
switch (item.type) { |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
491 |
case PacketMetadata::Item::PAYLOAD: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
492 |
os << "Payload"; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
493 |
break; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
494 |
case PacketMetadata::Item::HEADER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
495 |
case PacketMetadata::Item::TRAILER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
496 |
os << item.tid.GetName (); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
497 |
break; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
498 |
} |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
499 |
os << " Fragment [" << item.currentTrimedFromStart<<":" |
2647
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
500 |
<< (item.currentTrimedFromStart + item.currentSize) << "]"; |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
501 |
} |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
502 |
else |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
503 |
{ |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
504 |
switch (item.type) { |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
505 |
case PacketMetadata::Item::PAYLOAD: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
506 |
os << "Payload (size=" << item.currentSize << ")"; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
507 |
break; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
508 |
case PacketMetadata::Item::HEADER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
509 |
case PacketMetadata::Item::TRAILER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
510 |
os << item.tid.GetName () << "("; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
511 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
512 |
NS_ASSERT (item.tid.HasConstructor ()); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
513 |
Callback<ObjectBase *> constructor = item.tid.GetConstructor (); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
514 |
NS_ASSERT (constructor.IsNull ()); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
515 |
ObjectBase *instance = constructor (); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
516 |
NS_ASSERT (instance != 0); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
517 |
Chunk *chunk = dynamic_cast<Chunk *> (instance); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
518 |
NS_ASSERT (chunk != 0); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
519 |
chunk->Deserialize (item.current); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
520 |
for (uint32_t j = 0; j < item.tid.GetAttributeN (); j++) |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
521 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
522 |
std::string attrName = item.tid.GetAttributeName (j); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
523 |
std::string value; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
524 |
bool ok = chunk->GetAttribute (attrName, value); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
525 |
NS_ASSERT (ok); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
526 |
os << attrName << "=" << value; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
527 |
if ((j + 1) < item.tid.GetAttributeN ()) |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
528 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
529 |
os << ","; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
530 |
} |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
531 |
} |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
532 |
} |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
533 |
os << ")"; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
534 |
break; |
2647
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
535 |
} |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
536 |
} |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
537 |
if (i.HasNext ()) |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
538 |
{ |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
539 |
os << " "; |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
540 |
} |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
541 |
} |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
542 |
#endif |
789
1e19322e9012
merge unfinished packet history code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
463
diff
changeset
|
543 |
} |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
544 |
|
2639
588221b7f892
replace PacketPrinter with an iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1865
diff
changeset
|
545 |
PacketMetadata::ItemIterator |
588221b7f892
replace PacketPrinter with an iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1865
diff
changeset
|
546 |
Packet::BeginItem (void) const |
806
0190f1b49dc8
re-implement PacketHistory to use the PacketPrinter and work on ItemList::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
790
diff
changeset
|
547 |
{ |
2639
588221b7f892
replace PacketPrinter with an iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1865
diff
changeset
|
548 |
return m_metadata.BeginItem (m_buffer); |
806
0190f1b49dc8
re-implement PacketHistory to use the PacketPrinter and work on ItemList::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
790
diff
changeset
|
549 |
} |
0190f1b49dc8
re-implement PacketHistory to use the PacketPrinter and work on ItemList::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
790
diff
changeset
|
550 |
|
875
4ebee6ceebb5
rename History::Enable to Packet::EnableMetadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
824
diff
changeset
|
551 |
void |
3553
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
552 |
Packet::EnablePrinting (void) |
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
553 |
{ |
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
554 |
NS_LOG_FUNCTION_NOARGS (); |
883
4d2da35c09b0
PacketHistory -> PacketMetadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
875
diff
changeset
|
555 |
PacketMetadata::Enable (); |
875
4ebee6ceebb5
rename History::Enable to Packet::EnableMetadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
824
diff
changeset
|
556 |
} |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
557 |
|
3553
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
558 |
void |
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
559 |
Packet::EnableChecking (void) |
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
560 |
{ |
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
561 |
NS_LOG_FUNCTION_NOARGS (); |
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
562 |
PacketMetadata::EnableChecking (); |
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
563 |
} |
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
564 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
565 |
uint32_t Packet::GetSerializedSize (void) const |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
566 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
567 |
uint32_t size = 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
568 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
569 |
if (m_nixVector) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
570 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
571 |
// increment total size by the size of the nix-vector |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
572 |
// ensuring 4-byte boundary |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
573 |
size += ((m_nixVector->GetSerializedSize () + 3) & (~3)); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
574 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
575 |
// add 4-bytes for entry of total length of nix-vector |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
576 |
size += 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
577 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
578 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
579 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
580 |
// if no nix-vector, still have to add 4-bytes |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
581 |
// to account for the entry of total size for |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
582 |
// nix-vector in the buffer |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
583 |
size += 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
584 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
585 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
586 |
//Tag size |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
587 |
//XXX |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
588 |
//size += m_tags.GetSerializedSize (); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
589 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
590 |
// increment total size by size of meta-data |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
591 |
// ensuring 4-byte boundary |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
592 |
size += ((m_metadata.GetSerializedSize () + 3) & (~3)); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
593 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
594 |
// add 4-bytes for entry of total length of meta-data |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
595 |
size += 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
596 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
597 |
// increment total size by size of buffer |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
598 |
// ensuring 4-byte boundary |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
599 |
size += ((m_buffer.GetSerializedSize () + 3) & (~3)); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
600 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
601 |
// add 4-bytes for entry of total length of buffer |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
602 |
size += 4; |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
603 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
604 |
return size; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
605 |
} |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
606 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
607 |
uint32_t |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
608 |
Packet::Serialize (uint8_t* buffer, uint32_t maxSize) const |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
609 |
{ |
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
610 |
uint32_t* p = reinterpret_cast<uint32_t *> (buffer); |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
611 |
uint32_t size = 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
612 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
613 |
// if nix-vector exists, serialize it |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
614 |
if (m_nixVector) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
615 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
616 |
uint32_t nixSize = m_nixVector->GetSerializedSize (); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
617 |
if (size + nixSize <= maxSize) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
618 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
619 |
// put the total length of nix-vector in the |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
620 |
// buffer. this includes 4-bytes for total |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
621 |
// length itself |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
622 |
*p++ = nixSize + 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
623 |
size += nixSize; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
624 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
625 |
// serialize the nix-vector |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
626 |
uint32_t serialized = |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
627 |
m_nixVector->Serialize (p, nixSize); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
628 |
if (serialized) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
629 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
630 |
// increment p by nixSize bytes |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
631 |
// ensuring 4-byte boundary |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
632 |
p += ((nixSize+3) & (~3)) / 4; |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
633 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
634 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
635 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
636 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
637 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
638 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
639 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
640 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
641 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
642 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
643 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
644 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
645 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
646 |
// no nix vector, set zero length, |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
647 |
// ie 4-bytes, since it must include |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
648 |
// length for itself |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
649 |
if (size + 4 <= maxSize) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
650 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
651 |
size += 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
652 |
*p++ = 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
653 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
654 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
655 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
656 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
657 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
658 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
659 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
660 |
// Serialize Tags |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
661 |
// XXX |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
662 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
663 |
// Serialize Metadata |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
664 |
uint32_t metaSize = m_metadata.GetSerializedSize (); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
665 |
if (size + metaSize <= maxSize) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
666 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
667 |
// put the total length of metadata in the |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
668 |
// buffer. this includes 4-bytes for total |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
669 |
// length itself |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
670 |
*p++ = metaSize + 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
671 |
size += metaSize; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
672 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
673 |
// serialize the metadata |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
674 |
uint32_t serialized = |
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
675 |
m_metadata.Serialize (reinterpret_cast<uint8_t *> (p), metaSize); |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
676 |
if (serialized) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
677 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
678 |
// increment p by metaSize bytes |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
679 |
// ensuring 4-byte boundary |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
680 |
p += ((metaSize+3) & (~3)) / 4; |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
681 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
682 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
683 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
684 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
685 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
686 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
687 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
688 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
689 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
690 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
691 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
692 |
// Serialize the packet contents |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
693 |
uint32_t bufSize = m_buffer.GetSerializedSize (); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
694 |
if (size + bufSize <= maxSize) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
695 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
696 |
// put the total length of the buffer in the |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
697 |
// buffer. this includes 4-bytes for total |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
698 |
// length itself |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
699 |
*p++ = bufSize + 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
700 |
size += bufSize; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
701 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
702 |
// serialize the buffer |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
703 |
uint32_t serialized = |
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
704 |
m_buffer.Serialize (reinterpret_cast<uint8_t *> (p), bufSize); |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
705 |
if (serialized) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
706 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
707 |
// increment p by bufSize bytes |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
708 |
// ensuring 4-byte boundary |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
709 |
p += ((bufSize+3) & (~3)) / 4; |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
710 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
711 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
712 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
713 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
714 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
715 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
716 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
717 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
718 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
719 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
720 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
721 |
// Serialized successfully |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
722 |
return 1; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
723 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
724 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
725 |
uint32_t |
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
726 |
Packet::Deserialize (const uint8_t* buffer, uint32_t size) |
1138
27245d50e5e0
use CreateFullCopy and implement Serialize/Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
896
diff
changeset
|
727 |
{ |
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
728 |
NS_LOG_FUNCTION (this); |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
729 |
|
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
730 |
const uint32_t* p = reinterpret_cast<const uint32_t *> (buffer); |
1144
6442e000420b
finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1142
diff
changeset
|
731 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
732 |
// read nix-vector |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
733 |
NS_ASSERT (!m_nixVector); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
734 |
uint32_t nixSize = *p++; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
735 |
|
6610
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
736 |
// if size less than nixSize, the buffer |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
737 |
// will be overrun, assert |
6610
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
738 |
NS_ASSERT (size >= nixSize); |
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
739 |
|
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
740 |
size -= nixSize; |
1144
6442e000420b
finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1142
diff
changeset
|
741 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
742 |
if (nixSize > 4) |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
743 |
{ |
6455
e17da5733c0b
Change nix-vector to use SimpleRefCount instead of Object
Josh Pelkey <jpelkey@gatech.edu>
parents:
6397
diff
changeset
|
744 |
Ptr<NixVector> nix = Create<NixVector> (); |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
745 |
uint32_t nixDeserialized = nix->Deserialize (p, nixSize); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
746 |
if (!nixDeserialized) |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
747 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
748 |
// nix-vector not deserialized |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
749 |
// completely |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
750 |
return 0; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
751 |
} |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
752 |
m_nixVector = nix; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
753 |
// increment p by nixSize ensuring |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
754 |
// 4-byte boundary |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
755 |
p += ((((nixSize - 4) + 3) & (~3)) / 4); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
756 |
} |
1144
6442e000420b
finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1142
diff
changeset
|
757 |
|
6442e000420b
finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1142
diff
changeset
|
758 |
// read tags |
3039
722cf749a9e3
remove now-unused Tags class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3035
diff
changeset
|
759 |
//XXX |
722cf749a9e3
remove now-unused Tags class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3035
diff
changeset
|
760 |
//uint32_t tagsDeserialized = m_tags.Deserialize (buffer.Begin ()); |
722cf749a9e3
remove now-unused Tags class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3035
diff
changeset
|
761 |
//buffer.RemoveAtStart (tagsDeserialized); |
1144
6442e000420b
finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1142
diff
changeset
|
762 |
|
6442e000420b
finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1142
diff
changeset
|
763 |
// read metadata |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
764 |
uint32_t metaSize = *p++; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
765 |
|
6610
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
766 |
// if size less than metaSize, the buffer |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
767 |
// will be overrun, assert |
6610
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
768 |
NS_ASSERT (size >= metaSize); |
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
769 |
|
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
770 |
size -= metaSize; |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
771 |
|
1144
6442e000420b
finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1142
diff
changeset
|
772 |
uint32_t metadataDeserialized = |
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
773 |
m_metadata.Deserialize (reinterpret_cast<const uint8_t *> (p), metaSize); |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
774 |
if (!metadataDeserialized) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
775 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
776 |
// meta-data not deserialized |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
777 |
// completely |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
778 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
779 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
780 |
// increment p by metaSize ensuring |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
781 |
// 4-byte boundary |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
782 |
p += ((((metaSize - 4) + 3) & (~3)) / 4); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
783 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
784 |
// read buffer contents |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
785 |
uint32_t bufSize = *p++; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
786 |
|
6610
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
787 |
// if size less than bufSize, the buffer |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
788 |
// will be overrun, assert |
6610
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
789 |
NS_ASSERT (size >= bufSize); |
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
790 |
|
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
791 |
size -= bufSize; |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
792 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
793 |
uint32_t bufferDeserialized = |
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
794 |
m_buffer.Deserialize (reinterpret_cast<const uint8_t *> (p), bufSize); |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
795 |
if (!bufferDeserialized) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
796 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
797 |
// buffer not deserialized |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
798 |
// completely |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
799 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
800 |
} |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
801 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
802 |
// return zero if did not deserialize the |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
803 |
// number of expected bytes |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
804 |
return (size == 0); |
1138
27245d50e5e0
use CreateFullCopy and implement Serialize/Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
896
diff
changeset
|
805 |
} |
27245d50e5e0
use CreateFullCopy and implement Serialize/Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
896
diff
changeset
|
806 |
|
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
807 |
void |
4502 | 808 |
Packet::AddByteTag (const Tag &tag) const |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
809 |
{ |
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
810 |
NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ()); |
4502 | 811 |
ByteTagList *list = const_cast<ByteTagList *> (&m_byteTagList); |
3040
e11e106c7c19
Mtag -> Tag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3039
diff
changeset
|
812 |
TagBuffer buffer = list->Add (tag.GetInstanceTypeId (), tag.GetSerializedSize (), |
4502 | 813 |
m_buffer.GetCurrentStartOffset (), |
814 |
m_buffer.GetCurrentEndOffset ()); |
|
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
815 |
tag.Serialize (buffer); |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
816 |
} |
4502 | 817 |
ByteTagIterator |
818 |
Packet::GetByteTagIterator (void) const |
|
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
819 |
{ |
4502 | 820 |
return ByteTagIterator (m_byteTagList.Begin (m_buffer.GetCurrentStartOffset (), m_buffer.GetCurrentEndOffset ())); |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
821 |
} |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
822 |
|
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
823 |
bool |
4502 | 824 |
Packet::FindFirstMatchingByteTag (Tag &tag) const |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
825 |
{ |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
826 |
TypeId tid = tag.GetInstanceTypeId (); |
4502 | 827 |
ByteTagIterator i = GetByteTagIterator (); |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
828 |
while (i.HasNext ()) |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
829 |
{ |
4502 | 830 |
ByteTagIterator::Item item = i.Next (); |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
831 |
if (tid == item.GetTypeId ()) |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
832 |
{ |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
833 |
item.GetTag (tag); |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
834 |
return true; |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
835 |
} |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
836 |
} |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
837 |
return false; |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
838 |
} |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
839 |
|
4502 | 840 |
void |
841 |
Packet::AddPacketTag (const Tag &tag) const |
|
842 |
{ |
|
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
843 |
NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ()); |
4502 | 844 |
m_packetTagList.Add (tag); |
845 |
} |
|
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
846 |
|
4502 | 847 |
bool |
848 |
Packet::RemovePacketTag (Tag &tag) |
|
849 |
{ |
|
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
850 |
NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ()); |
4502 | 851 |
bool found = m_packetTagList.Remove (tag); |
852 |
return found; |
|
853 |
} |
|
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
854 |
bool |
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
855 |
Packet::ReplacePacketTag (Tag &tag) |
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
856 |
{ |
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
857 |
NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ()); |
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
858 |
bool found = m_packetTagList.Replace (tag); |
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
859 |
return found; |
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
860 |
} |
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
861 |
|
4502 | 862 |
bool |
863 |
Packet::PeekPacketTag (Tag &tag) const |
|
864 |
{ |
|
865 |
bool found = m_packetTagList.Peek (tag); |
|
866 |
return found; |
|
867 |
} |
|
868 |
void |
|
869 |
Packet::RemoveAllPacketTags (void) |
|
870 |
{ |
|
871 |
NS_LOG_FUNCTION (this); |
|
872 |
m_packetTagList.RemoveAll (); |
|
873 |
} |
|
874 |
||
875 |
void |
|
876 |
Packet::PrintPacketTags (std::ostream &os) const |
|
877 |
{ |
|
878 |
PacketTagIterator i = GetPacketTagIterator (); |
|
879 |
while (i.HasNext ()) |
|
880 |
{ |
|
881 |
PacketTagIterator::Item item = i.Next (); |
|
882 |
NS_ASSERT (item.GetTypeId ().HasConstructor ()); |
|
883 |
Callback<ObjectBase *> constructor = item.GetTypeId ().GetConstructor (); |
|
884 |
NS_ASSERT (!constructor.IsNull ()); |
|
885 |
ObjectBase *instance = constructor (); |
|
886 |
Tag *tag = dynamic_cast<Tag *> (instance); |
|
887 |
NS_ASSERT (tag != 0); |
|
888 |
item.GetTag (*tag); |
|
889 |
tag->Print (os); |
|
890 |
delete tag; |
|
891 |
if (i.HasNext ()) |
|
892 |
{ |
|
893 |
os << " "; |
|
894 |
} |
|
895 |
} |
|
896 |
} |
|
897 |
||
898 |
PacketTagIterator |
|
899 |
Packet::GetPacketTagIterator (void) const |
|
900 |
{ |
|
901 |
return PacketTagIterator (m_packetTagList.Head ()); |
|
902 |
} |
|
903 |
||
1360
7686e996bd1d
add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1241
diff
changeset
|
904 |
std::ostream& operator<< (std::ostream& os, const Packet &packet) |
7686e996bd1d
add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1241
diff
changeset
|
905 |
{ |
7686e996bd1d
add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1241
diff
changeset
|
906 |
packet.Print (os); |
7686e996bd1d
add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1241
diff
changeset
|
907 |
return os; |
7686e996bd1d
add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1241
diff
changeset
|
908 |
} |
7686e996bd1d
add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1241
diff
changeset
|
909 |
|
5334
92aafeab5e4f
packet test suite ported to new framework
Pavel Boyko <boyko@iitp.ru>
parents:
5224
diff
changeset
|
910 |
} // namespace ns3 |