|
|
| 52 |
|
52 |
|
| 53 |
} |
53 |
} |
| 54 |
|
54 |
|
| 55 |
Reservation::Reservation (std::list<std::pair <Ptr<Packet>, UanAddress > > &list, uint8_t frameNo, uint32_t maxPkts) |
55 |
Reservation::Reservation (std::list<std::pair <Ptr<Packet>, Mac8Address > > &list, uint8_t frameNo, uint32_t maxPkts) |
| 56 |
: m_frameNo (frameNo), |
56 |
: m_frameNo (frameNo), |
| 57 |
m_retryNo (0), |
57 |
m_retryNo (0), |
| 58 |
m_transmitted (false) |
58 |
m_transmitted (false) |
|
|
| 75 |
|
75 |
|
| 76 |
Reservation::~Reservation () |
76 |
Reservation::~Reservation () |
| 77 |
{ |
77 |
{ |
| 78 |
std::list<std::pair <Ptr<Packet>, UanAddress > >::iterator it; |
78 |
std::list<std::pair <Ptr<Packet>, Mac8Address > >::iterator it; |
| 79 |
for (it = m_pktList.begin (); it != m_pktList.end (); it++) |
79 |
for (it = m_pktList.begin (); it != m_pktList.end (); it++) |
| 80 |
{ |
80 |
{ |
| 81 |
it->first = Ptr<Packet> ((Packet *) 0); |
81 |
it->first = Ptr<Packet> ((Packet *) 0); |
|
|
| 95 |
return m_length; |
95 |
return m_length; |
| 96 |
} |
96 |
} |
| 97 |
|
97 |
|
| 98 |
const std::list<std::pair <Ptr<Packet>, UanAddress > > & |
98 |
const std::list<std::pair <Ptr<Packet>, Mac8Address > > & |
| 99 |
Reservation::GetPktList (void) const |
99 |
Reservation::GetPktList (void) const |
| 100 |
{ |
100 |
{ |
| 101 |
return m_pktList; |
101 |
return m_pktList; |
|
|
| 187 |
m_phy->Clear (); |
187 |
m_phy->Clear (); |
| 188 |
m_phy = 0; |
188 |
m_phy = 0; |
| 189 |
} |
189 |
} |
| 190 |
std::list<std::pair <Ptr<Packet>, UanAddress > >::iterator it; |
190 |
std::list<std::pair <Ptr<Packet>, Mac8Address > >::iterator it; |
| 191 |
for (it = m_pktQueue.begin (); it != m_pktQueue.end (); it++) |
191 |
for (it = m_pktQueue.begin (); it != m_pktQueue.end (); it++) |
| 192 |
{ |
192 |
{ |
| 193 |
it->first = 0; |
193 |
it->first = 0; |
|
|
| 276 |
return 1; |
276 |
return 1; |
| 277 |
} |
277 |
} |
| 278 |
|
278 |
|
| 279 |
Address |
|
|
| 280 |
UanMacRc::GetAddress (void) |
| 281 |
{ |
| 282 |
return m_address; |
| 283 |
} |
| 284 |
|
| 285 |
void |
| 286 |
UanMacRc::SetAddress (UanAddress addr) |
| 287 |
{ |
| 288 |
m_address = addr; |
| 289 |
} |
| 290 |
|
| 291 |
bool |
279 |
bool |
| 292 |
UanMacRc::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber) |
280 |
UanMacRc::Enqueue (Ptr<Packet> packet, uint16_t protocolNumber, const Address &dest) |
| 293 |
{ |
281 |
{ |
| 294 |
if (protocolNumber > 0) |
282 |
if (protocolNumber > 0) |
| 295 |
{ |
283 |
{ |
|
|
| 302 |
return false; |
290 |
return false; |
| 303 |
} |
291 |
} |
| 304 |
|
292 |
|
| 305 |
m_pktQueue.push_back (std::make_pair (packet, UanAddress::ConvertFrom (dest))); |
293 |
m_pktQueue.push_back (std::make_pair (packet, Mac8Address::ConvertFrom (dest))); |
| 306 |
|
294 |
|
| 307 |
switch (m_state) |
295 |
switch (m_state) |
| 308 |
{ |
296 |
{ |
|
|
| 325 |
} |
313 |
} |
| 326 |
|
314 |
|
| 327 |
void |
315 |
void |
| 328 |
UanMacRc::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb) |
316 |
UanMacRc::SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> cb) |
| 329 |
{ |
317 |
{ |
| 330 |
m_forwardUpCb = cb; |
318 |
m_forwardUpCb = cb; |
| 331 |
} |
319 |
} |
|
|
| 337 |
m_phy->SetReceiveOkCallback (MakeCallback (&UanMacRc::ReceiveOkFromPhy, this)); |
325 |
m_phy->SetReceiveOkCallback (MakeCallback (&UanMacRc::ReceiveOkFromPhy, this)); |
| 338 |
} |
326 |
} |
| 339 |
|
327 |
|
| 340 |
Address |
|
|
| 341 |
UanMacRc::GetBroadcast (void) const |
| 342 |
{ |
| 343 |
return UanAddress::GetBroadcast (); |
| 344 |
} |
| 345 |
|
| 346 |
void |
328 |
void |
| 347 |
UanMacRc::ReceiveOkFromPhy (Ptr<Packet> pkt, double sinr, UanTxMode mode) |
329 |
UanMacRc::ReceiveOkFromPhy (Ptr<Packet> pkt, double sinr, UanTxMode mode) |
| 348 |
{ |
330 |
{ |
| 349 |
NS_UNUSED (sinr); |
331 |
NS_UNUSED (sinr); |
| 350 |
UanHeaderCommon ch; |
332 |
UanHeaderCommon ch; |
| 351 |
pkt->RemoveHeader (ch); |
333 |
pkt->RemoveHeader (ch); |
| 352 |
if (ch.GetDest () == m_address || ch.GetDest () == UanAddress::GetBroadcast ()) |
334 |
if (ch.GetDest () == m_address || ch.GetDest () == Mac8Address::GetBroadcast ()) |
| 353 |
{ |
335 |
{ |
| 354 |
m_rxLogger (pkt, mode); |
336 |
m_rxLogger (pkt, mode); |
| 355 |
} |
337 |
} |
|
|
| 363 |
NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Node " << m_address << " UanMacRc Receiving DATA packet from PHY"); |
345 |
NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Node " << m_address << " UanMacRc Receiving DATA packet from PHY"); |
| 364 |
UanHeaderRcData dh; |
346 |
UanHeaderRcData dh; |
| 365 |
pkt->RemoveHeader (dh); |
347 |
pkt->RemoveHeader (dh); |
| 366 |
m_forwardUpCb (pkt, ch.GetSrc ()); |
348 |
m_forwardUpCb (pkt, ch.GetProtocolNumber (), ch.GetSrc ()); |
| 367 |
} |
349 |
} |
| 368 |
break; |
350 |
break; |
| 369 |
case TYPE_RTS: |
351 |
case TYPE_RTS: |
|
|
| 394 |
} |
376 |
} |
| 395 |
|
377 |
|
| 396 |
UanHeaderRcCts ctsh; |
378 |
UanHeaderRcCts ctsh; |
| 397 |
ctsh.SetAddress (UanAddress::GetBroadcast ()); |
379 |
ctsh.SetAddress (Mac8Address::GetBroadcast ()); |
| 398 |
while (pkt->GetSize () > 0) |
380 |
while (pkt->GetSize () > 0) |
| 399 |
{ |
381 |
{ |
| 400 |
pkt->RemoveHeader (ctsh); |
382 |
pkt->RemoveHeader (ctsh); |
|
|
| 469 |
|
451 |
|
| 470 |
Time frameDelay = Seconds (0); |
452 |
Time frameDelay = Seconds (0); |
| 471 |
|
453 |
|
| 472 |
const std::list<std::pair <Ptr<Packet>, UanAddress > > l = it->GetPktList (); |
454 |
const std::list<std::pair <Ptr<Packet>, Mac8Address > > l = it->GetPktList (); |
| 473 |
std::list<std::pair <Ptr<Packet>, UanAddress > >::const_iterator pit; |
455 |
std::list<std::pair <Ptr<Packet>, Mac8Address > >::const_iterator pit; |
| 474 |
pit = l.begin (); |
456 |
pit = l.begin (); |
| 475 |
|
457 |
|
| 476 |
|
458 |
|
|
|
| 580 |
} |
562 |
} |
| 581 |
if (ah.GetNoNacks () > 0) |
563 |
if (ah.GetNoNacks () > 0) |
| 582 |
{ |
564 |
{ |
| 583 |
const std::list<std::pair <Ptr<Packet>, UanAddress > > l = it->GetPktList (); |
565 |
const std::list<std::pair <Ptr<Packet>, Mac8Address > > l = it->GetPktList (); |
| 584 |
std::list<std::pair <Ptr<Packet>, UanAddress > >::const_iterator pit; |
566 |
std::list<std::pair <Ptr<Packet>, Mac8Address > >::const_iterator pit; |
| 585 |
pit = l.begin (); |
567 |
pit = l.begin (); |
| 586 |
|
568 |
|
| 587 |
const std::set<uint8_t> &nacks = ah.GetNackedFrames (); |
569 |
const std::set<uint8_t> &nacks = ah.GetNackedFrames (); |
|
|
| 635 |
{ |
617 |
{ |
| 636 |
Ptr<Packet> pkt = Create<Packet> (0); |
618 |
Ptr<Packet> pkt = Create<Packet> (0); |
| 637 |
pkt->AddHeader (CreateRtsHeader (res)); |
619 |
pkt->AddHeader (CreateRtsHeader (res)); |
| 638 |
pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING)); |
620 |
pkt->AddHeader (UanHeaderCommon (m_address, Mac8Address::GetBroadcast (), static_cast<uint8_t>(TYPE_GWPING), 0)); |
| 639 |
NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Sending first GWPING " << *pkt); |
621 |
NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Sending first GWPING " << *pkt); |
| 640 |
SendPacket (pkt,m_currentRate + m_numRates); |
622 |
SendPacket (pkt,m_currentRate + m_numRates); |
| 641 |
} |
623 |
} |
|
|
| 666 |
res.IncrementRetry (); |
648 |
res.IncrementRetry (); |
| 667 |
|
649 |
|
| 668 |
pkt->AddHeader (CreateRtsHeader (res)); |
650 |
pkt->AddHeader (CreateRtsHeader (res)); |
| 669 |
pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING)); |
651 |
pkt->AddHeader (UanHeaderCommon (m_address, Mac8Address::GetBroadcast (), static_cast<uint8_t> (TYPE_GWPING), 0)); |
| 670 |
|
652 |
|
| 671 |
SendPacket (pkt,m_currentRate + m_numRates); |
653 |
SendPacket (pkt,m_currentRate + m_numRates); |
| 672 |
m_resList.push_back (res); |
654 |
m_resList.push_back (res); |
|
|
| 699 |
{ |
681 |
{ |
| 700 |
Ptr<Packet> pkt = Create<Packet> (0); |
682 |
Ptr<Packet> pkt = Create<Packet> (0); |
| 701 |
pkt->AddHeader (CreateRtsHeader (res)); |
683 |
pkt->AddHeader (CreateRtsHeader (res)); |
| 702 |
pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS)); |
684 |
pkt->AddHeader (UanHeaderCommon (m_address, Mac8Address::GetBroadcast (), static_cast<uint8_t> (TYPE_RTS), 0)); |
| 703 |
SendPacket (pkt,m_currentRate + m_numRates); |
685 |
SendPacket (pkt,m_currentRate + m_numRates); |
| 704 |
} |
686 |
} |
| 705 |
m_state = RTSSENT; |
687 |
m_state = RTSSENT; |
|
|
| 762 |
res.IncrementRetry (); |
744 |
res.IncrementRetry (); |
| 763 |
m_resList.push_back (res); |
745 |
m_resList.push_back (res); |
| 764 |
pkt->AddHeader (CreateRtsHeader (res)); |
746 |
pkt->AddHeader (CreateRtsHeader (res)); |
| 765 |
pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS)); |
747 |
pkt->AddHeader (UanHeaderCommon (m_address, Mac8Address::GetBroadcast (), static_cast<uint8_t> (TYPE_RTS), 0)); |
| 766 |
SendPacket (pkt,m_currentRate + m_numRates); |
748 |
SendPacket (pkt,m_currentRate + m_numRates); |
| 767 |
|
749 |
|
| 768 |
} |
750 |
} |