author | Alexander Krotov <ilabdsf@yandex.ru> |
Sun, 26 Jul 2015 19:44:32 +0300 | |
changeset 11567 | 6aea6eab3ff3 |
parent 11566 | 85fc8963ab62 |
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 |
|
10968
2d29fee2b7b8
[Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9894
diff
changeset
|
27 |
namespace ns3 { |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
28 |
|
10968
2d29fee2b7b8
[Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9894
diff
changeset
|
29 |
NS_LOG_COMPONENT_DEFINE ("Packet"); |
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); |
11567
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
232 |
ByteTagList byteTagList = m_byteTagList; |
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
233 |
byteTagList.Adjust (-start); |
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
|
234 |
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
|
235 |
uint32_t end = m_buffer.GetSize () - (start + length); |
888
f882ee7eaccf
history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
887
diff
changeset
|
236 |
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
|
237 |
// again, call the constructor directly rather than |
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
238 |
// through Create because it is private. |
11567
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
239 |
return Ptr<Packet> (new Packet (buffer, byteTagList, m_packetTagList, metadata), false); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
240 |
} |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
241 |
|
5224
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
242 |
void |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
243 |
Packet::SetNixVector (Ptr<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 |
m_nixVector = nixVector; |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
246 |
} |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
247 |
|
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
248 |
Ptr<NixVector> |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
249 |
Packet::GetNixVector (void) const |
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 |
return m_nixVector; |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
252 |
} |
06f639d05b8f
Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5074
diff
changeset
|
253 |
|
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
254 |
void |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
255 |
Packet::AddHeader (const Header &header) |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
256 |
{ |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
257 |
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
|
258 |
NS_LOG_FUNCTION (this << header.GetInstanceTypeId ().GetName () << size); |
11551
c84a84dea37a
ByteTagList::AddAtEnd/AddAtStart must be called unconditionally to ensure that newly-added bytes are not tagged when 1. Packet::AddByteTag, 2. Packet::RemoveHeader, 3. Packet.AddHEader
Mathieu Lacage <mathieu.lacage@cutebugs.net>
parents:
11072
diff
changeset
|
259 |
m_buffer.AddAtStart (size); |
11567
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
260 |
m_byteTagList.Adjust (size); |
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
261 |
m_byteTagList.AddAtStart (size); |
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
262 |
header.Serialize (m_buffer.Begin ()); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
263 |
m_metadata.AddHeader (header, size); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
264 |
} |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
265 |
uint32_t |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
266 |
Packet::RemoveHeader (Header &header) |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
267 |
{ |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
268 |
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
|
269 |
NS_LOG_FUNCTION (this << header.GetInstanceTypeId ().GetName () << deserialized); |
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
270 |
m_buffer.RemoveAtStart (deserialized); |
11567
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
271 |
m_byteTagList.Adjust (-deserialized); |
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
272 |
m_metadata.RemoveHeader (header, deserialized); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
273 |
return deserialized; |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
274 |
} |
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
|
275 |
uint32_t |
3738
011897c60e9c
bug 331: constify Packet::PeekHeader
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3553
diff
changeset
|
276 |
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
|
277 |
{ |
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 |
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
|
279 |
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
|
280 |
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
|
281 |
} |
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
282 |
void |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
283 |
Packet::AddTrailer (const Trailer &trailer) |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
284 |
{ |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
285 |
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
|
286 |
NS_LOG_FUNCTION (this << trailer.GetInstanceTypeId ().GetName () << size); |
11567
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
287 |
m_byteTagList.AddAtEnd (GetSize ()); |
11551
c84a84dea37a
ByteTagList::AddAtEnd/AddAtStart must be called unconditionally to ensure that newly-added bytes are not tagged when 1. Packet::AddByteTag, 2. Packet::RemoveHeader, 3. Packet.AddHEader
Mathieu Lacage <mathieu.lacage@cutebugs.net>
parents:
11072
diff
changeset
|
288 |
m_buffer.AddAtEnd (size); |
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
289 |
Buffer::Iterator end = m_buffer.End (); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
290 |
trailer.Serialize (end); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
291 |
m_metadata.AddTrailer (trailer, size); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
292 |
} |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
293 |
uint32_t |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
294 |
Packet::RemoveTrailer (Trailer &trailer) |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
295 |
{ |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
296 |
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
|
297 |
NS_LOG_FUNCTION (this << trailer.GetInstanceTypeId ().GetName () << deserialized); |
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
298 |
m_buffer.RemoveAtEnd (deserialized); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
299 |
m_metadata.RemoveTrailer (trailer, deserialized); |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
300 |
return deserialized; |
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
301 |
} |
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
|
302 |
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
|
303 |
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
|
304 |
{ |
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
|
305 |
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
|
306 |
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
|
307 |
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
|
308 |
} |
2663
dc5314da50aa
remove template methods.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2660
diff
changeset
|
309 |
|
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
310 |
void |
1865
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
311 |
Packet::AddAtEnd (Ptr<const Packet> packet) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
312 |
{ |
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
313 |
NS_LOG_FUNCTION (this << packet << packet->GetSize ()); |
11567
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
314 |
m_byteTagList.AddAtEnd (GetSize ()); |
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
315 |
ByteTagList copy = packet->m_byteTagList; |
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
316 |
copy.AddAtStart (0); |
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
317 |
copy.Adjust (GetSize ()); |
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
318 |
m_byteTagList.Add (copy); |
2992
ba52f937610c
move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
319 |
m_buffer.AddAtEnd (packet->m_buffer); |
1865
829dc1815014
add Packet::Ref/Unref methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1493
diff
changeset
|
320 |
m_metadata.AddAtEnd (packet->m_metadata); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
321 |
} |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
322 |
void |
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
323 |
Packet::AddPaddingAtEnd (uint32_t size) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
324 |
{ |
3158
2a4305eeca93
add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3057
diff
changeset
|
325 |
NS_LOG_FUNCTION (this << size); |
11567
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
326 |
m_byteTagList.AddAtEnd (GetSize ()); |
11551
c84a84dea37a
ByteTagList::AddAtEnd/AddAtStart must be called unconditionally to ensure that newly-added bytes are not tagged when 1. Packet::AddByteTag, 2. Packet::RemoveHeader, 3. Packet.AddHEader
Mathieu Lacage <mathieu.lacage@cutebugs.net>
parents:
11072
diff
changeset
|
327 |
m_buffer.AddAtEnd (size); |
888
f882ee7eaccf
history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
887
diff
changeset
|
328 |
m_metadata.AddPaddingAtEnd (size); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
329 |
} |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
330 |
void |
122
6b8f1eda5c57
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
111
diff
changeset
|
331 |
Packet::RemoveAtEnd (uint32_t size) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
332 |
{ |
3158
2a4305eeca93
add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3057
diff
changeset
|
333 |
NS_LOG_FUNCTION (this << size); |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
334 |
m_buffer.RemoveAtEnd (size); |
888
f882ee7eaccf
history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
887
diff
changeset
|
335 |
m_metadata.RemoveAtEnd (size); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
336 |
} |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
337 |
void |
122
6b8f1eda5c57
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
111
diff
changeset
|
338 |
Packet::RemoveAtStart (uint32_t size) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
339 |
{ |
3158
2a4305eeca93
add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3057
diff
changeset
|
340 |
NS_LOG_FUNCTION (this << size); |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
341 |
m_buffer.RemoveAtStart (size); |
11567
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
342 |
m_byteTagList.Adjust (-size); |
888
f882ee7eaccf
history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
887
diff
changeset
|
343 |
m_metadata.RemoveAtStart (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 |
|
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
346 |
void |
4502 | 347 |
Packet::RemoveAllByteTags (void) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
348 |
{ |
3158
2a4305eeca93
add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3057
diff
changeset
|
349 |
NS_LOG_FUNCTION (this); |
4502 | 350 |
m_byteTagList.RemoveAll (); |
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 |
|
91
8066ef8d9274
add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
90
diff
changeset
|
353 |
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
|
354 |
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
|
355 |
{ |
5938
69bcae35bc81
avoid copying bytes one after the other.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5505
diff
changeset
|
356 |
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
|
357 |
} |
64f1310350e4
add API to get bytes out of a packet without calling PeekData
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3738
diff
changeset
|
358 |
|
4518
31f2881aa214
avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4502
diff
changeset
|
359 |
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
|
360 |
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
|
361 |
{ |
31f2881aa214
avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4502
diff
changeset
|
362 |
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
|
363 |
} |
31f2881aa214
avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4502
diff
changeset
|
364 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
365 |
uint64_t |
122
6b8f1eda5c57
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
111
diff
changeset
|
366 |
Packet::GetUid (void) const |
91
8066ef8d9274
add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
90
diff
changeset
|
367 |
{ |
888
f882ee7eaccf
history -> metadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
887
diff
changeset
|
368 |
return m_metadata.GetUid (); |
91
8066ef8d9274
add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
90
diff
changeset
|
369 |
} |
8066ef8d9274
add packet uid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
90
diff
changeset
|
370 |
|
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
371 |
void |
4502 | 372 |
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
|
373 |
{ |
4502 | 374 |
ByteTagIterator i = GetByteTagIterator (); |
3208
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
375 |
while (i.HasNext ()) |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
376 |
{ |
4502 | 377 |
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
|
378 |
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
|
379 |
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
|
380 |
if (constructor.IsNull ()) |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
381 |
{ |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
382 |
if (i.HasNext ()) |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
383 |
{ |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
384 |
os << " "; |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
385 |
} |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
386 |
continue; |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
387 |
} |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
388 |
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
|
389 |
NS_ASSERT (tag != 0); |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
390 |
os << " "; |
3230
e59680767a04
bug 212: Packet::PrintTags fails
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3208
diff
changeset
|
391 |
item.GetTag (*tag); |
3208
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
392 |
tag->Print (os); |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
393 |
if (i.HasNext ()) |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
394 |
{ |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
395 |
os << " "; |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
396 |
} |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
397 |
delete tag; |
1a754d09c4ba
bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3158
diff
changeset
|
398 |
} |
1241
66f126692f5e
add Packet::PrintTags and move tag documentation to tag.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1150
diff
changeset
|
399 |
} |
66f126692f5e
add Packet::PrintTags and move tag documentation to tag.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1150
diff
changeset
|
400 |
|
11072
0af6dbbb959e
ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents:
11021
diff
changeset
|
401 |
std::string |
0af6dbbb959e
ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents:
11021
diff
changeset
|
402 |
Packet::ToString() const |
0af6dbbb959e
ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents:
11021
diff
changeset
|
403 |
{ |
0af6dbbb959e
ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents:
11021
diff
changeset
|
404 |
std::ostringstream oss; |
0af6dbbb959e
ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents:
11021
diff
changeset
|
405 |
Print (oss); |
0af6dbbb959e
ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents:
11021
diff
changeset
|
406 |
return oss.str(); |
0af6dbbb959e
ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents:
11021
diff
changeset
|
407 |
} |
0af6dbbb959e
ToString method to Packet
Natale Patriciello <natale.patriciello@gmail.com>
parents:
11021
diff
changeset
|
408 |
|
1241
66f126692f5e
add Packet::PrintTags and move tag documentation to tag.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1150
diff
changeset
|
409 |
void |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
410 |
Packet::Print (std::ostream &os) const |
789
1e19322e9012
merge unfinished packet history code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
463
diff
changeset
|
411 |
{ |
2660
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
412 |
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
|
413 |
while (i.HasNext ()) |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
414 |
{ |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
415 |
PacketMetadata::Item item = i.Next (); |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
416 |
if (item.isFragment) |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
417 |
{ |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
418 |
switch (item.type) { |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
419 |
case PacketMetadata::Item::PAYLOAD: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
420 |
os << "Payload"; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
421 |
break; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
422 |
case PacketMetadata::Item::HEADER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
423 |
case PacketMetadata::Item::TRAILER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
424 |
os << item.tid.GetName (); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
425 |
break; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
426 |
} |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
427 |
os << " Fragment [" << item.currentTrimedFromStart<<":" |
2660
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
428 |
<< (item.currentTrimedFromStart + item.currentSize) << "]"; |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
429 |
} |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
430 |
else |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
431 |
{ |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
432 |
switch (item.type) { |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
433 |
case PacketMetadata::Item::PAYLOAD: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
434 |
os << "Payload (size=" << item.currentSize << ")"; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
435 |
break; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
436 |
case PacketMetadata::Item::HEADER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
437 |
case PacketMetadata::Item::TRAILER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
438 |
os << item.tid.GetName () << " ("; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
439 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
440 |
NS_ASSERT (item.tid.HasConstructor ()); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
441 |
Callback<ObjectBase *> constructor = item.tid.GetConstructor (); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
442 |
NS_ASSERT (!constructor.IsNull ()); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
443 |
ObjectBase *instance = constructor (); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
444 |
NS_ASSERT (instance != 0); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
445 |
Chunk *chunk = dynamic_cast<Chunk *> (instance); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
446 |
NS_ASSERT (chunk != 0); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
447 |
chunk->Deserialize (item.current); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
448 |
chunk->Print (os); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
449 |
delete chunk; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
450 |
} |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
451 |
os << ")"; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
452 |
break; |
2660
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
453 |
} |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
454 |
} |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
455 |
if (i.HasNext ()) |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
456 |
{ |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
457 |
os << " "; |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
458 |
} |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
459 |
} |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
460 |
#if 0 |
1d54065d728a
convert Packet::Print to use Chunk::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2647
diff
changeset
|
461 |
// 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
|
462 |
// 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
|
463 |
// 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
|
464 |
// headers' and trailers' Print method as shown above. |
2647
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
465 |
PacketMetadata::ItemIterator i = m_metadata.BeginItem (m_buffer); |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
466 |
while (i.HasNext ()) |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
467 |
{ |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
468 |
PacketMetadata::Item item = i.Next (); |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
469 |
if (item.isFragment) |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
470 |
{ |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
471 |
switch (item.type) { |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
472 |
case PacketMetadata::Item::PAYLOAD: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
473 |
os << "Payload"; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
474 |
break; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
475 |
case PacketMetadata::Item::HEADER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
476 |
case PacketMetadata::Item::TRAILER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
477 |
os << item.tid.GetName (); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
478 |
break; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
479 |
} |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
480 |
os << " Fragment [" << item.currentTrimedFromStart<<":" |
2647
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
481 |
<< (item.currentTrimedFromStart + item.currentSize) << "]"; |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
482 |
} |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
483 |
else |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
484 |
{ |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
485 |
switch (item.type) { |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
486 |
case PacketMetadata::Item::PAYLOAD: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
487 |
os << "Payload (size=" << item.currentSize << ")"; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
488 |
break; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
489 |
case PacketMetadata::Item::HEADER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
490 |
case PacketMetadata::Item::TRAILER: |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
491 |
os << item.tid.GetName () << "("; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
492 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
493 |
NS_ASSERT (item.tid.HasConstructor ()); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
494 |
Callback<ObjectBase *> constructor = item.tid.GetConstructor (); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
495 |
NS_ASSERT (constructor.IsNull ()); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
496 |
ObjectBase *instance = constructor (); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
497 |
NS_ASSERT (instance != 0); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
498 |
Chunk *chunk = dynamic_cast<Chunk *> (instance); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
499 |
NS_ASSERT (chunk != 0); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
500 |
chunk->Deserialize (item.current); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
501 |
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
|
502 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
503 |
std::string attrName = item.tid.GetAttributeName (j); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
504 |
std::string value; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
505 |
bool ok = chunk->GetAttribute (attrName, value); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
506 |
NS_ASSERT (ok); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
507 |
os << attrName << "=" << value; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
508 |
if ((j + 1) < item.tid.GetAttributeN ()) |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
509 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
510 |
os << ","; |
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 |
} |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
513 |
} |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
514 |
os << ")"; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
515 |
break; |
2647
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
516 |
} |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
517 |
} |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
518 |
if (i.HasNext ()) |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
519 |
{ |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
520 |
os << " "; |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
521 |
} |
3e9474e1d77b
implement Packet::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2640
diff
changeset
|
522 |
} |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
523 |
#endif |
789
1e19322e9012
merge unfinished packet history code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
463
diff
changeset
|
524 |
} |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
525 |
|
2639
588221b7f892
replace PacketPrinter with an iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1865
diff
changeset
|
526 |
PacketMetadata::ItemIterator |
588221b7f892
replace PacketPrinter with an iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1865
diff
changeset
|
527 |
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
|
528 |
{ |
2639
588221b7f892
replace PacketPrinter with an iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1865
diff
changeset
|
529 |
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
|
530 |
} |
0190f1b49dc8
re-implement PacketHistory to use the PacketPrinter and work on ItemList::Print
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
790
diff
changeset
|
531 |
|
875
4ebee6ceebb5
rename History::Enable to Packet::EnableMetadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
824
diff
changeset
|
532 |
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
|
533 |
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
|
534 |
{ |
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
535 |
NS_LOG_FUNCTION_NOARGS (); |
883
4d2da35c09b0
PacketHistory -> PacketMetadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
875
diff
changeset
|
536 |
PacketMetadata::Enable (); |
875
4ebee6ceebb5
rename History::Enable to Packet::EnableMetadata
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
824
diff
changeset
|
537 |
} |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
286
diff
changeset
|
538 |
|
3553
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
539 |
void |
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
540 |
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
|
541 |
{ |
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
542 |
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
|
543 |
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
|
544 |
} |
065488d0420c
bug 279: Packets need metadata support for printing without header checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3364
diff
changeset
|
545 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
546 |
uint32_t Packet::GetSerializedSize (void) const |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
547 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
548 |
uint32_t size = 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
549 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
550 |
if (m_nixVector) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
551 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
552 |
// increment total size by the size of the nix-vector |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
553 |
// ensuring 4-byte boundary |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
554 |
size += ((m_nixVector->GetSerializedSize () + 3) & (~3)); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
555 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
556 |
// 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
|
557 |
size += 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
558 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
559 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
560 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
561 |
// if no nix-vector, still have to add 4-bytes |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
562 |
// to account for the entry of total size for |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
563 |
// nix-vector in the buffer |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
564 |
size += 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
565 |
} |
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 |
//Tag size |
9894
ac4e52a91d5d
Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9768
diff
changeset
|
568 |
/// \todo Serialze Tags size |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
569 |
//size += m_tags.GetSerializedSize (); |
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 size of meta-data |
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_metadata.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 meta-data |
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 |
// increment total size by size of buffer |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
579 |
// ensuring 4-byte boundary |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
580 |
size += ((m_buffer.GetSerializedSize () + 3) & (~3)); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
581 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
582 |
// add 4-bytes for entry of total length of buffer |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
583 |
size += 4; |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
584 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
585 |
return size; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
586 |
} |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
587 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
588 |
uint32_t |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
589 |
Packet::Serialize (uint8_t* buffer, uint32_t maxSize) const |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
590 |
{ |
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
591 |
uint32_t* p = reinterpret_cast<uint32_t *> (buffer); |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
592 |
uint32_t size = 0; |
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 |
// if nix-vector exists, serialize it |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
595 |
if (m_nixVector) |
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 |
uint32_t nixSize = m_nixVector->GetSerializedSize (); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
598 |
if (size + nixSize <= maxSize) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
599 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
600 |
// put the total length of nix-vector in the |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
601 |
// buffer. this includes 4-bytes for total |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
602 |
// length itself |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
603 |
*p++ = nixSize + 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
604 |
size += nixSize; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
605 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
606 |
// serialize the nix-vector |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
607 |
uint32_t serialized = |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
608 |
m_nixVector->Serialize (p, nixSize); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
609 |
if (serialized) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
610 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
611 |
// increment p by nixSize bytes |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
612 |
// ensuring 4-byte boundary |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
613 |
p += ((nixSize+3) & (~3)) / 4; |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
614 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
615 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
616 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
617 |
return 0; |
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 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
620 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
621 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
622 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
623 |
} |
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 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
626 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
627 |
// no nix vector, set zero length, |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
628 |
// ie 4-bytes, since it must include |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
629 |
// length for itself |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
630 |
if (size + 4 <= maxSize) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
631 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
632 |
size += 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
633 |
*p++ = 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
634 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
635 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
636 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
637 |
return 0; |
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 |
} |
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 |
// Serialize Tags |
9894
ac4e52a91d5d
Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9768
diff
changeset
|
642 |
/// \todo Serialize Tags |
6113
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 |
// Serialize Metadata |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
645 |
uint32_t metaSize = m_metadata.GetSerializedSize (); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
646 |
if (size + metaSize <= maxSize) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
647 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
648 |
// put the total length of metadata in the |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
649 |
// buffer. this includes 4-bytes for total |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
650 |
// length itself |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
651 |
*p++ = metaSize + 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
652 |
size += metaSize; |
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 |
// serialize the metadata |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
655 |
uint32_t serialized = |
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
656 |
m_metadata.Serialize (reinterpret_cast<uint8_t *> (p), metaSize); |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
657 |
if (serialized) |
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 |
// increment p by metaSize bytes |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
660 |
// ensuring 4-byte boundary |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
661 |
p += ((metaSize+3) & (~3)) / 4; |
6113
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 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
664 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
665 |
return 0; |
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 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
668 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
669 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
670 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
671 |
} |
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 packet contents |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
674 |
uint32_t bufSize = m_buffer.GetSerializedSize (); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
675 |
if (size + bufSize <= maxSize) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
676 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
677 |
// put the total length of the buffer in the |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
678 |
// buffer. this includes 4-bytes for total |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
679 |
// length itself |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
680 |
*p++ = bufSize + 4; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
681 |
size += bufSize; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
682 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
683 |
// serialize the buffer |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
684 |
uint32_t serialized = |
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
685 |
m_buffer.Serialize (reinterpret_cast<uint8_t *> (p), bufSize); |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
686 |
if (serialized) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
687 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
688 |
// increment p by bufSize bytes |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
689 |
// ensuring 4-byte boundary |
9768
bee4f4bf5044
Undo whitespace-only changes, to ease review
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9763
diff
changeset
|
690 |
p += ((bufSize+3) & (~3)) / 4; |
6113
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 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
693 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
694 |
return 0; |
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 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
697 |
else |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
698 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
699 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
700 |
} |
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 |
// Serialized successfully |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
703 |
return 1; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
704 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
705 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
706 |
uint32_t |
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
707 |
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
|
708 |
{ |
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
709 |
NS_LOG_FUNCTION (this); |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
710 |
|
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
711 |
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
|
712 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
713 |
// read nix-vector |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
714 |
NS_ASSERT (!m_nixVector); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
715 |
uint32_t nixSize = *p++; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
716 |
|
6610
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
717 |
// if size less than nixSize, the buffer |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
718 |
// 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
|
719 |
NS_ASSERT (size >= nixSize); |
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
720 |
|
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
721 |
size -= nixSize; |
1144
6442e000420b
finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1142
diff
changeset
|
722 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
723 |
if (nixSize > 4) |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
724 |
{ |
6455
e17da5733c0b
Change nix-vector to use SimpleRefCount instead of Object
Josh Pelkey <jpelkey@gatech.edu>
parents:
6397
diff
changeset
|
725 |
Ptr<NixVector> nix = Create<NixVector> (); |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
726 |
uint32_t nixDeserialized = nix->Deserialize (p, nixSize); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
727 |
if (!nixDeserialized) |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
728 |
{ |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
729 |
// nix-vector not deserialized |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
730 |
// completely |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
731 |
return 0; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
732 |
} |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
733 |
m_nixVector = nix; |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
734 |
// increment p by nixSize ensuring |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
735 |
// 4-byte boundary |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
736 |
p += ((((nixSize - 4) + 3) & (~3)) / 4); |
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
737 |
} |
1144
6442e000420b
finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1142
diff
changeset
|
738 |
|
6442e000420b
finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1142
diff
changeset
|
739 |
// read tags |
9894
ac4e52a91d5d
Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9768
diff
changeset
|
740 |
/// \todo Deserialize Tags |
3039
722cf749a9e3
remove now-unused Tags class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3035
diff
changeset
|
741 |
//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
|
742 |
//buffer.RemoveAtStart (tagsDeserialized); |
1144
6442e000420b
finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1142
diff
changeset
|
743 |
|
6442e000420b
finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1142
diff
changeset
|
744 |
// read metadata |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
745 |
uint32_t metaSize = *p++; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
746 |
|
6610
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
747 |
// if size less than metaSize, the buffer |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
748 |
// 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
|
749 |
NS_ASSERT (size >= metaSize); |
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
750 |
|
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
751 |
size -= metaSize; |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
752 |
|
1144
6442e000420b
finish packet serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1142
diff
changeset
|
753 |
uint32_t metadataDeserialized = |
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
754 |
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
|
755 |
if (!metadataDeserialized) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
756 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
757 |
// meta-data not deserialized |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
758 |
// completely |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
759 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
760 |
} |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
761 |
// increment p by metaSize ensuring |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
762 |
// 4-byte boundary |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
763 |
p += ((((metaSize - 4) + 3) & (~3)) / 4); |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
764 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
765 |
// read buffer contents |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
766 |
uint32_t bufSize = *p++; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
767 |
|
6610
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
768 |
// if size less than bufSize, the buffer |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
769 |
// 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
|
770 |
NS_ASSERT (size >= bufSize); |
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
771 |
|
6d5c1c19bdfe
Bug 992 - Unusual (possibly incorrect assertion) in Packet::Deserialize
Quincy Tse <quincy.tse@gmail.com>
parents:
6549
diff
changeset
|
772 |
size -= bufSize; |
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
773 |
|
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
774 |
uint32_t bufferDeserialized = |
6291
8b3cd8b4d560
change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents:
6167
diff
changeset
|
775 |
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
|
776 |
if (!bufferDeserialized) |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
777 |
{ |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
778 |
// buffer not deserialized |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
779 |
// completely |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
780 |
return 0; |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
781 |
} |
6397
a1608a9a11f3
run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6291
diff
changeset
|
782 |
|
6113
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
783 |
// return zero if did not deserialize the |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
784 |
// number of expected bytes |
0ce37bf4f1c1
Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents:
5938
diff
changeset
|
785 |
return (size == 0); |
1138
27245d50e5e0
use CreateFullCopy and implement Serialize/Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
896
diff
changeset
|
786 |
} |
27245d50e5e0
use CreateFullCopy and implement Serialize/Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
896
diff
changeset
|
787 |
|
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
788 |
void |
4502 | 789 |
Packet::AddByteTag (const Tag &tag) const |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
790 |
{ |
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
791 |
NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ()); |
4502 | 792 |
ByteTagList *list = const_cast<ByteTagList *> (&m_byteTagList); |
3040
e11e106c7c19
Mtag -> Tag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3039
diff
changeset
|
793 |
TagBuffer buffer = list->Add (tag.GetInstanceTypeId (), tag.GetSerializedSize (), |
11567
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
794 |
0, |
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
795 |
GetSize ()); |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
796 |
tag.Serialize (buffer); |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
797 |
} |
4502 | 798 |
ByteTagIterator |
799 |
Packet::GetByteTagIterator (void) const |
|
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
800 |
{ |
11567
6aea6eab3ff3
Make ByteTagList offsets relative to packet start
Alexander Krotov <ilabdsf@yandex.ru>
parents:
11566
diff
changeset
|
801 |
return ByteTagIterator (m_byteTagList.Begin (0, GetSize ())); |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
802 |
} |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
803 |
|
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
804 |
bool |
4502 | 805 |
Packet::FindFirstMatchingByteTag (Tag &tag) const |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
806 |
{ |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
807 |
TypeId tid = tag.GetInstanceTypeId (); |
4502 | 808 |
ByteTagIterator i = GetByteTagIterator (); |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
809 |
while (i.HasNext ()) |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
810 |
{ |
4502 | 811 |
ByteTagIterator::Item item = i.Next (); |
3035
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
812 |
if (tid == item.GetTypeId ()) |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
813 |
{ |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
814 |
item.GetTag (tag); |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
815 |
return true; |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
816 |
} |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
817 |
} |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
818 |
return false; |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
819 |
} |
644bfc099992
a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2992
diff
changeset
|
820 |
|
4502 | 821 |
void |
822 |
Packet::AddPacketTag (const Tag &tag) const |
|
823 |
{ |
|
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
824 |
NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ()); |
4502 | 825 |
m_packetTagList.Add (tag); |
826 |
} |
|
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
827 |
|
4502 | 828 |
bool |
829 |
Packet::RemovePacketTag (Tag &tag) |
|
830 |
{ |
|
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
831 |
NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ()); |
4502 | 832 |
bool found = m_packetTagList.Remove (tag); |
833 |
return found; |
|
834 |
} |
|
9763
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
835 |
bool |
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
836 |
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
|
837 |
{ |
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
838 |
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
|
839 |
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
|
840 |
return found; |
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
841 |
} |
038d5627c5a9
Trim excess copies from PacketTagList::Remove, add PacketTagList::Replace, documentation.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
9192
diff
changeset
|
842 |
|
4502 | 843 |
bool |
844 |
Packet::PeekPacketTag (Tag &tag) const |
|
845 |
{ |
|
846 |
bool found = m_packetTagList.Peek (tag); |
|
847 |
return found; |
|
848 |
} |
|
849 |
void |
|
850 |
Packet::RemoveAllPacketTags (void) |
|
851 |
{ |
|
852 |
NS_LOG_FUNCTION (this); |
|
853 |
m_packetTagList.RemoveAll (); |
|
854 |
} |
|
855 |
||
856 |
void |
|
857 |
Packet::PrintPacketTags (std::ostream &os) const |
|
858 |
{ |
|
859 |
PacketTagIterator i = GetPacketTagIterator (); |
|
860 |
while (i.HasNext ()) |
|
861 |
{ |
|
862 |
PacketTagIterator::Item item = i.Next (); |
|
863 |
NS_ASSERT (item.GetTypeId ().HasConstructor ()); |
|
864 |
Callback<ObjectBase *> constructor = item.GetTypeId ().GetConstructor (); |
|
865 |
NS_ASSERT (!constructor.IsNull ()); |
|
866 |
ObjectBase *instance = constructor (); |
|
867 |
Tag *tag = dynamic_cast<Tag *> (instance); |
|
868 |
NS_ASSERT (tag != 0); |
|
869 |
item.GetTag (*tag); |
|
870 |
tag->Print (os); |
|
871 |
delete tag; |
|
872 |
if (i.HasNext ()) |
|
873 |
{ |
|
874 |
os << " "; |
|
875 |
} |
|
876 |
} |
|
877 |
} |
|
878 |
||
879 |
PacketTagIterator |
|
880 |
Packet::GetPacketTagIterator (void) const |
|
881 |
{ |
|
882 |
return PacketTagIterator (m_packetTagList.Head ()); |
|
883 |
} |
|
884 |
||
1360
7686e996bd1d
add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1241
diff
changeset
|
885 |
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
|
886 |
{ |
7686e996bd1d
add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1241
diff
changeset
|
887 |
packet.Print (os); |
7686e996bd1d
add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1241
diff
changeset
|
888 |
return os; |
7686e996bd1d
add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1241
diff
changeset
|
889 |
} |
7686e996bd1d
add operator << for Packet and TraceContext
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1241
diff
changeset
|
890 |
|
5334
92aafeab5e4f
packet test suite ported to new framework
Pavel Boyko <boyko@iitp.ru>
parents:
5224
diff
changeset
|
891 |
} // namespace ns3 |