Left: | ||
Right: |
OLD | NEW |
---|---|
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) 2009 University of Washington | 3 * Copyright (c) 2009 University of Washington |
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 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
178 | 178 |
179 void | 179 void |
180 UanMacRcGw::SetAddress (UanAddress addr) | 180 UanMacRcGw::SetAddress (UanAddress addr) |
181 { | 181 { |
182 m_address = addr; | 182 m_address = addr; |
183 } | 183 } |
184 | 184 |
185 bool | 185 bool |
186 UanMacRcGw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolN umber) | 186 UanMacRcGw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolN umber) |
187 { | 187 { |
188 NS_UNUSED(dest); | |
189 NS_UNUSED(protocolNumber); | |
188 NS_LOG_WARN ("RCMAC Gateway transmission to acoustic nodes is not yet implemen ted"); | 190 NS_LOG_WARN ("RCMAC Gateway transmission to acoustic nodes is not yet implemen ted"); |
189 return false; | 191 return false; |
190 } | 192 } |
191 | 193 |
192 void | 194 void |
193 UanMacRcGw::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb) | 195 UanMacRcGw::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb) |
194 { | 196 { |
195 m_forwardUpCb = cb; | 197 m_forwardUpCb = cb; |
196 } | 198 } |
197 | 199 |
198 void | 200 void |
199 UanMacRcGw::AttachPhy (Ptr<UanPhy> phy) | 201 UanMacRcGw::AttachPhy (Ptr<UanPhy> phy) |
200 { | 202 { |
201 m_phy = phy; | 203 m_phy = phy; |
202 phy->SetReceiveOkCallback (MakeCallback (&UanMacRcGw::ReceivePacket, this)); | 204 phy->SetReceiveOkCallback (MakeCallback (&UanMacRcGw::ReceivePacket, this)); |
203 phy->SetReceiveErrorCallback (MakeCallback (&UanMacRcGw::ReceiveError, this)); | 205 phy->SetReceiveErrorCallback (MakeCallback (&UanMacRcGw::ReceiveError, this)); |
204 } | 206 } |
205 | 207 |
206 void | 208 void |
207 UanMacRcGw::ReceiveError (Ptr<Packet> pkt, double sinr) | 209 UanMacRcGw::ReceiveError (Ptr<Packet> pkt, double sinr) |
208 { | 210 { |
211 NS_UNUSED(sinr); | |
209 } | 212 } |
210 | 213 |
211 Address | 214 Address |
212 UanMacRcGw::GetBroadcast (void) const | 215 UanMacRcGw::GetBroadcast (void) const |
213 { | 216 { |
214 return UanAddress::GetBroadcast (); | 217 return UanAddress::GetBroadcast (); |
215 } | 218 } |
216 | 219 |
217 void | 220 void |
218 UanMacRcGw::ReceivePacket (Ptr<Packet> pkt, double sinr, UanTxMode mode) | 221 UanMacRcGw::ReceivePacket (Ptr<Packet> pkt, double sinr, UanTxMode mode) |
219 { | 222 { |
223 NS_UNUSED(sinr); | |
220 UanHeaderCommon ch; | 224 UanHeaderCommon ch; |
221 pkt->PeekHeader (ch); | 225 pkt->PeekHeader (ch); |
222 | 226 |
223 if (ch.GetDest () == m_address || ch.GetDest () == UanAddress::GetBroadcast () ) | 227 if (ch.GetDest () == m_address || ch.GetDest () == UanAddress::GetBroadcast () ) |
224 { | 228 { |
225 m_rxLogger (pkt, mode); | 229 m_rxLogger (pkt, mode); |
226 } | 230 } |
227 else | 231 else |
228 { | 232 { |
229 return; | 233 return; |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
377 | 381 |
378 // Before fast CTS/ACK(below) | 382 // Before fast CTS/ACK(below) |
379 double cycleSeconds = winSize + (totalFrames + 1.0) * m_sifs.GetSeconds () + m _ctsSizeG * 8.0 / dataRate + (m_ctsSizeN + m_ackSize) * 8.0 * numRts / dataRate; | 383 double cycleSeconds = winSize + (totalFrames + 1.0) * m_sifs.GetSeconds () + m _ctsSizeG * 8.0 / dataRate + (m_ctsSizeN + m_ackSize) * 8.0 * numRts / dataRate; |
380 | 384 |
381 Time ctsTxTimeG = Seconds (m_ctsSizeG * 8.0 / dataRate); | 385 Time ctsTxTimeG = Seconds (m_ctsSizeG * 8.0 / dataRate); |
382 Time ctsTxTimeTotal = Seconds (m_ctsSizeN * 8.0 * numRts / dataRate) + ctsTxTi meG; | 386 Time ctsTxTimeTotal = Seconds (m_ctsSizeN * 8.0 * numRts / dataRate) + ctsTxTi meG; |
383 if (numRts == 0) | 387 if (numRts == 0) |
384 { | 388 { |
385 UanHeaderRcCtsGlobal ctsg; | 389 UanHeaderRcCtsGlobal ctsg; |
386 ctsg.SetWindowTime (Seconds (effWinSize)); | 390 ctsg.SetWindowTime (Seconds (effWinSize)); |
387 ctsg.SetRateNum (m_currentRateNum); | 391 ctsg.SetRateNum (static_cast<uint16_t>(m_currentRateNum)); |
388 ctsg.SetRetryRate (m_currentRetryRate); | 392 ctsg.SetRetryRate (m_currentRetryRate); |
389 ctsg.SetTxTimeStamp (Simulator::Now ()); | 393 ctsg.SetTxTimeStamp (Simulator::Now ()); |
390 | 394 |
391 UanHeaderCommon ch (m_address, UanAddress::GetBroadcast (), UanMacRc::TYPE _CTS); | 395 UanHeaderCommon ch (m_address, UanAddress::GetBroadcast (), UanMacRc::TYPE _CTS); |
392 Ptr<Packet> p = Create<Packet> (); | 396 Ptr<Packet> p = Create<Packet> (); |
393 p->AddHeader (ctsg); | 397 p->AddHeader (ctsg); |
394 p->AddHeader (ch); | 398 p->AddHeader (ch); |
395 SendPacket (p, m_currentRateNum); | 399 SendPacket (p, m_currentRateNum); |
396 | 400 |
397 | 401 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
433 ctsh.SetRetryNo (req.retryNo); | 437 ctsh.SetRetryNo (req.retryNo); |
434 ctsh.SetDelayToTx (arrivalTime); | 438 ctsh.SetDelayToTx (arrivalTime); |
435 cts->AddHeader (ctsh); | 439 cts->AddHeader (ctsh); |
436 | 440 |
437 NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << | 441 NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << |
438 " GW Scheduling reception for " << (uint32_t) req.numFrames << | 442 " GW Scheduling reception for " << (uint32_t) req.numFrames << |
439 " frames at " << (Simulator::Now () + arrivalTime).GetSecond s () << " (delaytiltx of " << arrivalTime.GetSeconds () << ") Total length is " << req.length << " with txtime " << req.length * 8 / dataRate << " seconds"); | 443 " frames at " << (Simulator::Now () + arrivalTime).GetSecond s () << " (delaytiltx of " << arrivalTime.GetSeconds () << ") Total length is " << req.length << " with txtime " << req.length * 8 / dataRate << " seconds"); |
440 } | 444 } |
441 | 445 |
442 UanHeaderRcCtsGlobal ctsg; | 446 UanHeaderRcCtsGlobal ctsg; |
443 ctsg.SetRateNum (m_currentRateNum); | 447 ctsg.SetRateNum (static_cast<uint16_t>(m_currentRateNum)); |
444 ctsg.SetRetryRate (m_currentRetryRate); | 448 ctsg.SetRetryRate (m_currentRetryRate); |
445 ctsg.SetWindowTime (Seconds (effWinSize)); | 449 ctsg.SetWindowTime (Seconds (effWinSize)); |
446 ctsg.SetTxTimeStamp (Simulator::Now ()); | 450 ctsg.SetTxTimeStamp (Simulator::Now ()); |
447 UanHeaderCommon ch; | 451 UanHeaderCommon ch; |
448 ch.SetDest (UanAddress::GetBroadcast ()); | 452 ch.SetDest (UanAddress::GetBroadcast ()); |
449 ch.SetSrc (m_address); | 453 ch.SetSrc (m_address); |
450 ch.SetType (UanMacRc::TYPE_CTS); | 454 ch.SetType (UanMacRc::TYPE_CTS); |
451 cts->AddHeader (ctsg); | 455 cts->AddHeader (ctsg); |
452 cts->AddHeader (ch); | 456 cts->AddHeader (ch); |
453 SendPacket (cts, m_currentRateNum); | 457 SendPacket (cts, m_currentRateNum); |
(...skipping 21 matching lines...) Expand all Loading... | |
475 | 479 |
476 Time ackTime = Seconds (m_ackSize * 8.0 / m_phy->GetMode (m_currentRateNum).Ge tDataRateBps ()); | 480 Time ackTime = Seconds (m_ackSize * 8.0 / m_phy->GetMode (m_currentRateNum).Ge tDataRateBps ()); |
477 | 481 |
478 std::map<UanAddress, AckData>::iterator it = m_ackData.begin (); | 482 std::map<UanAddress, AckData>::iterator it = m_ackData.begin (); |
479 for (; it != m_ackData.end (); it++) | 483 for (; it != m_ackData.end (); it++) |
480 { | 484 { |
481 UanAddress dest = (*it).first; | 485 UanAddress dest = (*it).first; |
482 AckData &data = (*it).second; | 486 AckData &data = (*it).second; |
483 | 487 |
484 std::list<uint32_t> toNack; | 488 std::list<uint32_t> toNack; |
485 for (uint32_t i = 0; i < data.expFrames; i++) | 489 for (uint32_t i = 0; i < data.expFrames; i++) |
Fedwar
2017/12/19 14:07:38
expFrames is defined as uint8_t,
therefore I woul
ammo6818-vandals.uidaho.edu
2017/12/23 06:03:46
changed as noted.
| |
486 { | 490 { |
487 if (data.rxFrames.find (i) == data.rxFrames.end ()) | 491 if (data.rxFrames.find (static_cast<uint8_t>(i)) == data.rxFrames.end ()) |
488 { | 492 { |
489 toNack.push_back (i); | 493 toNack.push_back (i); |
490 } | 494 } |
491 } | 495 } |
492 UanHeaderCommon ch; | 496 UanHeaderCommon ch; |
493 ch.SetDest (dest); | 497 ch.SetDest (dest); |
494 ch.SetSrc (m_address); | 498 ch.SetSrc (m_address); |
495 ch.SetType (UanMacRc::TYPE_ACK); | 499 ch.SetType (UanMacRc::TYPE_ACK); |
496 UanHeaderRcAck ah; | 500 UanHeaderRcAck ah; |
497 ah.SetFrameNo (data.frameNo); | 501 ah.SetFrameNo (data.frameNo); |
498 std::list<uint32_t>::iterator nit = toNack.begin (); | 502 std::list<uint32_t>::iterator nit = toNack.begin (); |
499 for (; nit != toNack.end (); nit++) | 503 for (; nit != toNack.end (); nit++) |
500 { | 504 { |
501 ah.AddNackedFrame (*nit); | 505 ah.AddNackedFrame (static_cast<uint8_t>(*nit)); |
502 } | 506 } |
503 | 507 |
504 Ptr<Packet> ack = Create<Packet> (); | 508 Ptr<Packet> ack = Create<Packet> (); |
505 ack->AddHeader (ah); | 509 ack->AddHeader (ah); |
506 ack->AddHeader (ch); | 510 ack->AddHeader (ch); |
507 Simulator::Schedule (nextAck, &UanMacRcGw::SendPacket, this, ack, m_curren tRateNum); | 511 Simulator::Schedule (nextAck, &UanMacRcGw::SendPacket, this, ack, m_curren tRateNum); |
508 nextAck = nextAck + ackTime + m_sifs; | 512 nextAck = nextAck + ackTime + m_sifs; |
509 } | 513 } |
510 m_ackData.clear (); | 514 m_ackData.clear (); |
511 Simulator::Schedule (nextAck, &UanMacRcGw::StartCycle, this); | 515 Simulator::Schedule (nextAck, &UanMacRcGw::StartCycle, this); |
(...skipping 27 matching lines...) Expand all Loading... | |
539 break; | 543 break; |
540 } | 544 } |
541 NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " GW sending " << type << " p acket with size " << pkt->GetSize () << " to " << ch.GetDest () << " at rate " < < rate); | 545 NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " GW sending " << type << " p acket with size " << pkt->GetSize () << " to " << ch.GetDest () << " at rate " < < rate); |
542 m_phy->SendPacket (pkt, rate); | 546 m_phy->SendPacket (pkt, rate); |
543 } | 547 } |
544 | 548 |
545 | 549 |
546 double | 550 double |
547 UanMacRcGw::ComputeAlpha (uint32_t totalFrames, uint32_t totalBytes, uint32_t n, uint32_t a, double deltaK) | 551 UanMacRcGw::ComputeAlpha (uint32_t totalFrames, uint32_t totalBytes, uint32_t n, uint32_t a, double deltaK) |
548 { | 552 { |
549 | 553 NS_UNUSED(n); |
550 double alpha; | 554 double alpha; |
551 double lrae = m_rtsSize * 8.0 * a * std::exp (1.0); | 555 double lrae = m_rtsSize * 8.0 * a * std::exp (1.0); |
552 if (totalFrames == 0) | 556 if (totalFrames == 0) |
553 { | 557 { |
554 | 558 |
555 alpha = (2.0 * lrae + 8.0 * m_rtsSize - std::sqrt (m_ctsSizeG * 8.0 * 8.0 * m_rtsSize + 2 * 8.0 * m_ctsSizeG * 8.0 * m_rtsSize * a * std::exp (1.0)) ) / | 559 alpha = (2.0 * lrae + 8.0 * m_rtsSize - std::sqrt (m_ctsSizeG * 8.0 * 8.0 * m_rtsSize + 2 * 8.0 * m_ctsSizeG * 8.0 * m_rtsSize * a * std::exp (1.0)) ) / |
556 (2 * lrae + 8.0 * m_rtsSize - 8.0 * m_ctsSizeG); | 560 (2 * lrae + 8.0 * m_rtsSize - 8.0 * m_ctsSizeG); |
557 } | 561 } |
558 else | 562 else |
559 { | 563 { |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
636 { | 640 { |
637 return ComputeExpS (a, ld, GetExpPdk ()); | 641 return ComputeExpS (a, ld, GetExpPdk ()); |
638 } | 642 } |
639 | 643 |
640 uint32_t | 644 uint32_t |
641 UanMacRcGw::CompExpMinIndex (uint32_t n, uint32_t k) | 645 UanMacRcGw::CompExpMinIndex (uint32_t n, uint32_t k) |
642 { | 646 { |
643 double sum = 0; | 647 double sum = 0; |
644 for (uint32_t i = 1; i <= n - k + 1; i++) | 648 for (uint32_t i = 1; i <= n - k + 1; i++) |
645 { | 649 { |
646 double nChK = NchooseK (n, k); | 650 double nChK = static_cast<double>(NchooseK (n, k)); |
647 double p = (nChK > 0) ? (NchooseK (n - i, k - 1) / nChK) : DBL_MAX; | 651 double p = (nChK > 0) ? (static_cast<double>(NchooseK (n - i, k - 1)) / nC hK) : DBL_MAX; |
648 sum += p * i; | 652 sum += p * i; |
649 } | 653 } |
650 return (uint32_t)(sum + 0.5); | 654 return (uint32_t)(sum + 0.5); |
651 } | 655 } |
652 | 656 |
653 double | 657 double |
654 UanMacRcGw::ComputePiK (uint32_t a, uint32_t n, uint32_t k) | 658 UanMacRcGw::ComputePiK (uint32_t a, uint32_t n, uint32_t k) |
655 { | 659 { |
656 double nck = (double) NchooseK (n, k); | 660 double nck = (double) NchooseK (n, k); |
657 return nck * std::pow ( (std::exp ( (double) a / (double) n) - 1.0), (double) k) * std::exp (-( (double) a)); | 661 return nck * std::pow ( (std::exp ( (double) a / (double) n) - 1.0), (double) k) * std::exp (-( (double) a)); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
724 } | 728 } |
725 | 729 |
726 int64_t | 730 int64_t |
727 UanMacRcGw::AssignStreams (int64_t stream) | 731 UanMacRcGw::AssignStreams (int64_t stream) |
728 { | 732 { |
729 NS_LOG_FUNCTION (this << stream); | 733 NS_LOG_FUNCTION (this << stream); |
730 return 0; | 734 return 0; |
731 } | 735 } |
732 | 736 |
733 } // namespace ns3 | 737 } // namespace ns3 |
OLD | NEW |