Left: | ||
Right: |
LEFT | RIGHT |
---|---|
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ | 1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
2 /* | 2 /* |
3 * Copyright (c) 2013 Mohammed J.F. Alenazi | 3 * Copyright (c) 2013 Mohammed J.F. Alenazi |
4 * | 4 * |
5 * This program is free software; you can redistribute it and/or modify | 5 * This program is free software; you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 2 as | 6 * it under the terms of the GNU General Public License version 2 as |
7 * published by the Free Software Foundation; | 7 * published by the Free Software Foundation; |
8 * | 8 * |
9 * This program is distributed in the hope that it will be useful, | 9 * This program is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 14 matching lines...) Expand all Loading... | |
25 * | 25 * |
26 * Work supported by King Saud University and | 26 * Work supported by King Saud University and |
27 * the ITTC at The University of Kansas. | 27 * the ITTC at The University of Kansas. |
28 */ | 28 */ |
29 | 29 |
30 #include "epidemic-packet.h" | 30 #include "epidemic-packet.h" |
31 #include "ns3/address-utils.h" | 31 #include "ns3/address-utils.h" |
32 #include "ns3/log.h" | 32 #include "ns3/log.h" |
33 #include "ns3/packet.h" | 33 #include "ns3/packet.h" |
34 | 34 |
35 /** | |
36 * \file | |
37 * \ingroup epidemic | |
38 * ns3::Epidemic::TypeHeader, ns3::Epidemic::EpidemicSummaryVectorHeader | |
39 * and ns3::Epidemic::EpidemicHeader implementations. | |
40 */ | |
41 | |
42 namespace ns3 { | |
43 | |
35 NS_LOG_COMPONENT_DEFINE ("EpidemicPacket"); | 44 NS_LOG_COMPONENT_DEFINE ("EpidemicPacket"); |
Peter Barnes
2015/02/03 01:25:46
Should be after namespace ns3 {
mjf.alenazi
2015/04/26 22:56:07
Done.
| |
36 namespace ns3 { | 45 |
Peter Barnes
2015/02/03 01:25:46
Before namespace ns3 {:
/**
* \file
* \ingroup
mjf.alenazi
2015/04/26 22:56:07
Done.
| |
37 namespace Epidemic { | 46 namespace Epidemic { |
38 | 47 |
39 | 48 |
40 | 49 |
41 | 50 |
42 NS_OBJECT_ENSURE_REGISTERED (TypeHeader); | 51 NS_OBJECT_ENSURE_REGISTERED (TypeHeader); |
43 | 52 |
44 | 53 |
45 TypeHeader::TypeHeader (MessageType t) | 54 TypeHeader::TypeHeader (MessageType t) |
46 : m_type (t), | 55 : m_type (t), |
47 m_valid (true) | 56 m_valid (true) |
48 { | 57 { |
49 } | 58 } |
50 | 59 |
51 TypeHeader::~TypeHeader () | 60 TypeHeader::~TypeHeader () |
52 { | 61 { |
53 } | 62 } |
54 TypeId | 63 TypeId |
55 TypeHeader::GetTypeId () | 64 TypeHeader::GetTypeId () |
56 { | 65 { |
57 static TypeId tid = | 66 static TypeId tid = |
58 TypeId ("ns3::epidemic::TypeHeader").SetParent<Header> ().AddConstructor< | 67 TypeId ("ns3::Epidemic::TypeHeader") |
Peter Barnes
2015/02/03 01:25:46
"ns3::Epidemic::…" [Capitalize Epidemic]
.SetParen
mjf.alenazi
2015/04/26 22:56:07
Done.
| |
68 .SetParent<Header> () | |
69 .AddConstructor< | |
59 TypeHeader> (); | 70 TypeHeader> (); |
Peter Barnes
2015/04/28 23:42:33
Merge with previous line, so template argument is
mjf.alenazi
2017/05/13 23:57:15
Done.
| |
60 return tid; | 71 return tid; |
61 } | 72 } |
62 | 73 |
63 TypeId | 74 TypeId |
64 TypeHeader::GetInstanceTypeId () const | 75 TypeHeader::GetInstanceTypeId () const |
65 { | 76 { |
66 return GetTypeId (); | 77 return GetTypeId (); |
67 } | 78 } |
68 | 79 |
69 void TypeHeader::SetMessageType (MessageType type) | 80 void TypeHeader::SetMessageType (MessageType type) |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
153 return m_type == type; | 164 return m_type == type; |
154 } | 165 } |
155 | 166 |
156 std::ostream & | 167 std::ostream & |
157 operator<< (std::ostream & os, TypeHeader const & h) | 168 operator<< (std::ostream & os, TypeHeader const & h) |
158 { | 169 { |
159 h.Print (os); | 170 h.Print (os); |
160 return os; | 171 return os; |
161 } | 172 } |
162 | 173 |
163 NS_OBJECT_ENSURE_REGISTERED (EpidemicSummaryVectorHeader); | 174 NS_OBJECT_ENSURE_REGISTERED (SummaryVectorHeader); |
164 | 175 |
165 EpidemicSummaryVectorHeader::EpidemicSummaryVectorHeader (size_t size) | 176 SummaryVectorHeader::SummaryVectorHeader (size_t size) |
166 { | 177 { |
167 NS_LOG_FUNCTION (this << size); | 178 NS_LOG_FUNCTION (this << size); |
168 m_packets.reserve (size); | 179 m_packets.reserve (size); |
169 } | 180 } |
170 | 181 |
171 EpidemicSummaryVectorHeader::~EpidemicSummaryVectorHeader () | 182 SummaryVectorHeader::~SummaryVectorHeader () |
172 { | 183 { |
173 NS_LOG_FUNCTION (this); | 184 NS_LOG_FUNCTION (this); |
174 } | 185 } |
175 | 186 |
176 TypeId | 187 TypeId |
177 EpidemicSummaryVectorHeader::GetTypeId (void) | 188 SummaryVectorHeader::GetTypeId (void) |
178 { | 189 { |
179 static TypeId tid = | 190 static TypeId tid = |
180 TypeId ("ns3::epidemic::EpidemicSummaryVectorHeader").SetParent< | 191 TypeId ("ns3::Epidemic::SummaryVectorHeader") |
Peter Barnes
2015/02/03 01:25:46
"ns3::Epidemic::…"
.SetParent…
.AddConstructor...
mjf.alenazi
2015/04/26 22:56:07
Done.
| |
181 Header> ().AddConstructor<EpidemicSummaryVectorHeader> (); | 192 .SetParent<Header> () |
193 .AddConstructor<SummaryVectorHeader> (); | |
182 return tid; | 194 return tid; |
183 } | 195 } |
184 | 196 |
185 TypeId | 197 TypeId |
186 EpidemicSummaryVectorHeader::GetInstanceTypeId () const | 198 SummaryVectorHeader::GetInstanceTypeId () const |
187 { | 199 { |
188 return GetTypeId (); | 200 return GetTypeId (); |
189 } | 201 } |
190 | 202 |
191 uint32_t | 203 uint32_t |
192 EpidemicSummaryVectorHeader::GetSerializedSize () const | 204 SummaryVectorHeader::GetSerializedSize () const |
193 { | 205 { |
194 return sizeof(uint32_t) + (uint32_t) m_packets.size () * sizeof (uint32_t); | 206 return sizeof(uint32_t) + (uint32_t) m_packets.size () * sizeof (uint32_t); |
195 } | 207 } |
196 | 208 |
197 void | 209 void |
198 EpidemicSummaryVectorHeader::Serialize (Buffer::Iterator i) const | 210 SummaryVectorHeader::Serialize (Buffer::Iterator i) const |
199 { | 211 { |
200 i.WriteHtonU32 (m_packets.size ()); | 212 i.WriteHtonU32 (m_packets.size ()); |
201 | 213 |
202 for (std::vector<uint32_t>::const_iterator j = m_packets.begin (); | 214 for (std::vector<uint32_t>::const_iterator j = m_packets.begin (); |
203 j != m_packets.end (); ++j) | 215 j != m_packets.end (); ++j) |
204 { | 216 { |
205 i.WriteHtonU32 (*j); | 217 i.WriteHtonU32 (*j); |
206 } | 218 } |
207 | 219 |
208 } | 220 } |
209 | 221 |
210 uint32_t | 222 uint32_t |
211 EpidemicSummaryVectorHeader::Deserialize (Buffer::Iterator start) | 223 SummaryVectorHeader::Deserialize (Buffer::Iterator start) |
212 { | 224 { |
213 Buffer::Iterator i = start; | 225 Buffer::Iterator i = start; |
214 uint32_t sm_length = i.ReadNtohU32 (); | 226 uint32_t sm_length = i.ReadNtohU32 (); |
215 m_packets.reserve (sm_length); | 227 m_packets.reserve (sm_length); |
216 for (uint32_t j = 0; j < sm_length; ++j) | 228 for (uint32_t j = 0; j < sm_length; ++j) |
217 { | 229 { |
218 uint32_t tmp = i.ReadNtohU32 (); | 230 uint32_t tmp = i.ReadNtohU32 (); |
219 m_packets.push_back (tmp); | 231 m_packets.push_back (tmp); |
220 } | 232 } |
221 uint32_t dist = i.GetDistanceFrom (start); | 233 uint32_t dist = i.GetDistanceFrom (start); |
222 NS_ASSERT (dist == GetSerializedSize ()); | 234 NS_ASSERT (dist == GetSerializedSize ()); |
223 | 235 |
224 return dist; | 236 return dist; |
225 } | 237 } |
226 | 238 |
227 | 239 |
228 std::ostream & | 240 std::ostream & |
229 operator<< (std::ostream & os, EpidemicSummaryVectorHeader const & packet) | 241 operator<< (std::ostream & os, SummaryVectorHeader const & packet) |
230 { | 242 { |
231 packet.Print (os); | 243 packet.Print (os); |
232 return os; | 244 return os; |
233 } | 245 } |
234 | 246 |
235 | 247 |
236 void | 248 void |
237 EpidemicSummaryVectorHeader::Print (std::ostream &os) const | 249 SummaryVectorHeader::Print (std::ostream &os) const |
238 { | 250 { |
239 os << " Summary_vector header with size: " << m_packets.size () | 251 os << " Summary_vector header with size: " << m_packets.size () |
240 << "\nGlobal IDs:\n" << "NodeID:PacketID\n"; | 252 << "\nGlobal IDs:\n" << "NodeID:PacketID\n"; |
241 for (std::vector<uint32_t>::const_iterator j = m_packets.begin (); | 253 for (std::vector<uint32_t>::const_iterator j = m_packets.begin (); |
242 j != m_packets.end (); ++j) | 254 j != m_packets.end (); ++j) |
243 { | 255 { |
244 uint32_t a; | 256 uint32_t a; |
245 uint32_t b; | 257 uint32_t b; |
246 a = (uint32_t)((*j & 0xFFFF0000) >> 16); | 258 a = (uint32_t)((*j & 0xFFFF0000) >> 16); |
247 b = (uint32_t)(*j & 0xFFFF); | 259 b = (uint32_t)(*j & 0xFFFF); |
248 Ipv4Address new_addr = Ipv4Address (a); | 260 Ipv4Address new_addr = Ipv4Address (a); |
249 os << new_addr << ":" << b << std::endl; | 261 os << new_addr << ":" << b << std::endl; |
250 } | 262 } |
251 } | 263 } |
252 | 264 |
253 void | 265 void |
254 EpidemicSummaryVectorHeader::Add (const uint32_t pkt_ID) | 266 SummaryVectorHeader::Add (const uint32_t pkt_ID) |
255 { | 267 { |
256 NS_LOG_FUNCTION (this << pkt_ID); | 268 NS_LOG_FUNCTION (this << pkt_ID); |
257 m_packets.push_back (pkt_ID); | 269 m_packets.push_back (pkt_ID); |
258 } | 270 } |
259 | 271 |
260 size_t | 272 size_t |
261 EpidemicSummaryVectorHeader::Size (void) const | 273 SummaryVectorHeader::Size (void) const |
262 { | 274 { |
263 return m_packets.size (); | 275 return m_packets.size (); |
264 } | 276 } |
265 | 277 |
266 | 278 |
267 bool | 279 bool |
268 EpidemicSummaryVectorHeader::Contains (const uint32_t pkt_ID) const | 280 SummaryVectorHeader::Contains (const uint32_t pkt_ID) const |
269 { | 281 { |
270 bool contained = ( std::find (m_packets.begin (), m_packets.end (), pkt_ID) | 282 bool contained = ( std::find (m_packets.begin (), m_packets.end (), pkt_ID) |
271 != m_packets.end () ); | 283 != m_packets.end () ); |
272 return contained; | 284 return contained; |
273 } | 285 } |
274 | 286 |
275 | 287 |
276 NS_OBJECT_ENSURE_REGISTERED (EpidemicHeader); | 288 NS_OBJECT_ENSURE_REGISTERED (EpidemicHeader); |
277 | 289 |
278 EpidemicHeader::EpidemicHeader (uint32_t pkt_ID, uint32_t hopCount, | |
Peter Barnes
2015/02/03 01:25:46
Remove this constructor; it's not needed.
mjf.alenazi
2015/04/26 22:56:07
Done.
| |
279 Time timeStamp) | |
280 : m_packetID (pkt_ID), | |
281 m_hopCount (hopCount), | |
282 m_timeStamp (timeStamp) | |
283 { | |
284 NS_LOG_FUNCTION (this << hopCount << timeStamp); | |
285 } | |
286 EpidemicHeader::~EpidemicHeader () | 290 EpidemicHeader::~EpidemicHeader () |
287 { | 291 { |
288 } | 292 } |
289 | 293 |
290 | 294 |
291 void | 295 void |
292 EpidemicHeader::SetPacketID (uint32_t pktID) | 296 EpidemicHeader::SetPacketID (uint32_t pktID) |
293 { | 297 { |
294 NS_LOG_FUNCTION (this << pktID); | 298 NS_LOG_FUNCTION (this << pktID); |
295 m_packetID = pktID; | 299 m_packetID = pktID; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
328 Time EpidemicHeader::GetTimeStamp () const | 332 Time EpidemicHeader::GetTimeStamp () const |
329 { | 333 { |
330 return m_timeStamp; | 334 return m_timeStamp; |
331 } | 335 } |
332 | 336 |
333 | 337 |
334 TypeId | 338 TypeId |
335 EpidemicHeader::GetTypeId (void) | 339 EpidemicHeader::GetTypeId (void) |
336 { | 340 { |
337 static TypeId tid = | 341 static TypeId tid = |
338 TypeId ("ns3::epidemic::EpidemicHeader") | 342 TypeId ("ns3::Epidemic::EpidemicHeader") |
Peter Barnes
2015/02/03 01:25:46
"ns3::Epidemic::…"
mjf.alenazi
2015/04/26 22:56:07
Done.
| |
339 .SetParent<Header> () | 343 .SetParent<Header> () |
340 .AddConstructor<EpidemicHeader> (); | 344 .AddConstructor<EpidemicHeader> (); |
341 return tid; | 345 return tid; |
342 } | 346 } |
343 | 347 |
344 TypeId | 348 TypeId |
345 EpidemicHeader::GetInstanceTypeId () const | 349 EpidemicHeader::GetInstanceTypeId () const |
346 { | 350 { |
347 return GetTypeId (); | 351 return GetTypeId (); |
348 } | 352 } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
385 | 389 |
386 void | 390 void |
387 EpidemicHeader::Print (std::ostream &os) const | 391 EpidemicHeader::Print (std::ostream &os) const |
388 { | 392 { |
389 os << " Packet ID: " << m_packetID << " Hop count: " << m_hopCount | 393 os << " Packet ID: " << m_packetID << " Hop count: " << m_hopCount |
390 << " TimeStamp: " << m_timeStamp; | 394 << " TimeStamp: " << m_timeStamp; |
391 | 395 |
392 } | 396 } |
393 } //end namespace epidemic | 397 } //end namespace epidemic |
394 } //end namespace ns3 | 398 } //end namespace ns3 |
LEFT | RIGHT |