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) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC) | 3 * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC) |
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 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 MakeUintegerAccessor (&LteEnbMac::m_raResponseWindowSize), | 332 MakeUintegerAccessor (&LteEnbMac::m_raResponseWindowSize), |
333 MakeUintegerChecker<uint8_t> (2, 10)) | 333 MakeUintegerChecker<uint8_t> (2, 10)) |
334 .AddTraceSource ("DlScheduling", | 334 .AddTraceSource ("DlScheduling", |
335 "Information regarding DL scheduling.", | 335 "Information regarding DL scheduling.", |
336 MakeTraceSourceAccessor (&LteEnbMac::m_dlScheduling), | 336 MakeTraceSourceAccessor (&LteEnbMac::m_dlScheduling), |
337 "ns3::LteEnbMac::DlSchedulingTracedCallback") | 337 "ns3::LteEnbMac::DlSchedulingTracedCallback") |
338 .AddTraceSource ("UlScheduling", | 338 .AddTraceSource ("UlScheduling", |
339 "Information regarding UL scheduling.", | 339 "Information regarding UL scheduling.", |
340 MakeTraceSourceAccessor (&LteEnbMac::m_ulScheduling), | 340 MakeTraceSourceAccessor (&LteEnbMac::m_ulScheduling), |
341 "ns3::LteEnbMac::UlSchedulingTracedCallback") | 341 "ns3::LteEnbMac::UlSchedulingTracedCallback") |
| 342 .AddAttribute ("ComponentCarrierId", |
| 343 "ComponentCarrier Id, needed to reply on the appropriate sap.
", |
| 344 UintegerValue (0), |
| 345 MakeUintegerAccessor (&LteEnbMac::m_componentCarrierId), |
| 346 MakeUintegerChecker<uint8_t> (0,4)) |
342 ; | 347 ; |
343 | 348 |
344 return tid; | 349 return tid; |
345 } | 350 } |
346 | 351 |
347 | 352 |
348 LteEnbMac::LteEnbMac () | 353 LteEnbMac::LteEnbMac (): |
| 354 m_ulCcmMacSapUser (0) |
349 { | 355 { |
350 NS_LOG_FUNCTION (this); | 356 NS_LOG_FUNCTION (this); |
351 m_macSapProvider = new EnbMacMemberLteMacSapProvider<LteEnbMac> (this); | 357 m_macSapProvider = new EnbMacMemberLteMacSapProvider<LteEnbMac> (this); |
352 m_cmacSapProvider = new EnbMacMemberLteEnbCmacSapProvider (this); | 358 m_cmacSapProvider = new EnbMacMemberLteEnbCmacSapProvider (this); |
353 m_schedSapUser = new EnbMacMemberFfMacSchedSapUser (this); | 359 m_schedSapUser = new EnbMacMemberFfMacSchedSapUser (this); |
354 m_cschedSapUser = new EnbMacMemberFfMacCschedSapUser (this); | 360 m_cschedSapUser = new EnbMacMemberFfMacCschedSapUser (this); |
355 m_enbPhySapUser = new EnbMacMemberLteEnbPhySapUser (this); | 361 m_enbPhySapUser = new EnbMacMemberLteEnbPhySapUser (this); |
| 362 m_ulCcmMacSapProvider = new MemberLteUlCcmMacSapProvider<LteEnbMac> (this); |
356 } | 363 } |
357 | 364 |
358 | 365 |
359 LteEnbMac::~LteEnbMac () | 366 LteEnbMac::~LteEnbMac () |
360 { | 367 { |
361 NS_LOG_FUNCTION (this); | 368 NS_LOG_FUNCTION (this); |
362 } | 369 } |
363 | 370 |
364 void | 371 void |
365 LteEnbMac::DoDispose () | 372 LteEnbMac::DoDispose () |
366 { | 373 { |
367 NS_LOG_FUNCTION (this); | 374 NS_LOG_FUNCTION (this); |
368 m_dlCqiReceived.clear (); | 375 m_dlCqiReceived.clear (); |
369 m_ulCqiReceived.clear (); | 376 m_ulCqiReceived.clear (); |
370 m_ulCeReceived.clear (); | 377 m_ulCeReceived.clear (); |
371 m_dlInfoListReceived.clear (); | 378 m_dlInfoListReceived.clear (); |
372 m_ulInfoListReceived.clear (); | 379 m_ulInfoListReceived.clear (); |
373 m_miDlHarqProcessesPackets.clear (); | 380 m_miDlHarqProcessesPackets.clear (); |
374 delete m_macSapProvider; | 381 delete m_macSapProvider; |
375 delete m_cmacSapProvider; | 382 delete m_cmacSapProvider; |
376 delete m_schedSapUser; | 383 delete m_schedSapUser; |
377 delete m_cschedSapUser; | 384 delete m_cschedSapUser; |
378 delete m_enbPhySapUser; | 385 delete m_enbPhySapUser; |
| 386 delete m_ulCcmMacSapProvider; |
379 } | 387 } |
380 | 388 |
381 | 389 |
382 void | 390 void |
383 LteEnbMac::SetFfMacSchedSapProvider (FfMacSchedSapProvider* s) | 391 LteEnbMac::SetFfMacSchedSapProvider (FfMacSchedSapProvider* s) |
384 { | 392 { |
385 m_schedSapProvider = s; | 393 m_schedSapProvider = s; |
386 } | 394 } |
387 | 395 |
388 FfMacSchedSapUser* | 396 FfMacSchedSapUser* |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 m_enbPhySapProvider = s; | 443 m_enbPhySapProvider = s; |
436 } | 444 } |
437 | 445 |
438 | 446 |
439 LteEnbPhySapUser* | 447 LteEnbPhySapUser* |
440 LteEnbMac::GetLteEnbPhySapUser () | 448 LteEnbMac::GetLteEnbPhySapUser () |
441 { | 449 { |
442 return m_enbPhySapUser; | 450 return m_enbPhySapUser; |
443 } | 451 } |
444 | 452 |
| 453 void |
| 454 LteEnbMac::SetLteUlCcmMacSapUser (LteUlCcmMacSapUser* s) |
| 455 { |
| 456 m_ulCcmMacSapUser = s; |
| 457 } |
| 458 |
| 459 |
| 460 LteUlCcmMacSapProvider* |
| 461 LteEnbMac::GetLteUlCcmMacSapProvider () |
| 462 { |
| 463 return m_ulCcmMacSapProvider; |
| 464 } |
445 | 465 |
446 | 466 |
447 void | 467 void |
448 LteEnbMac::DoSubframeIndication (uint32_t frameNo, uint32_t subframeNo) | 468 LteEnbMac::DoSubframeIndication (uint32_t frameNo, uint32_t subframeNo) |
449 { | 469 { |
450 NS_LOG_FUNCTION (this << " EnbMac - frame " << frameNo << " subframe " << subf
rameNo); | 470 NS_LOG_FUNCTION (this << " EnbMac - frame " << frameNo << " subframe " << subf
rameNo); |
451 | 471 |
452 // Store current frame / subframe number | 472 // Store current frame / subframe number |
453 m_frameNo = frameNo; | 473 m_frameNo = frameNo; |
454 m_subframeNo = subframeNo; | 474 m_subframeNo = subframeNo; |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 m_schedSapProvider->SchedUlCqiInfoReq (m_ulCqiReceived.at (i)); | 577 m_schedSapProvider->SchedUlCqiInfoReq (m_ulCqiReceived.at (i)); |
558 } | 578 } |
559 m_ulCqiReceived.clear (); | 579 m_ulCqiReceived.clear (); |
560 ·· | 580 ·· |
561 // Send BSR reports to the scheduler | 581 // Send BSR reports to the scheduler |
562 if (m_ulCeReceived.size () > 0) | 582 if (m_ulCeReceived.size () > 0) |
563 { | 583 { |
564 FfMacSchedSapProvider::SchedUlMacCtrlInfoReqParameters ulMacReq; | 584 FfMacSchedSapProvider::SchedUlMacCtrlInfoReqParameters ulMacReq; |
565 ulMacReq.m_sfnSf = ((0x3FF & frameNo) << 4) | (0xF & subframeNo); | 585 ulMacReq.m_sfnSf = ((0x3FF & frameNo) << 4) | (0xF & subframeNo); |
566 ulMacReq.m_macCeList.insert (ulMacReq.m_macCeList.begin (), m_ulCeReceived
.begin (), m_ulCeReceived.end ()); | 586 ulMacReq.m_macCeList.insert (ulMacReq.m_macCeList.begin (), m_ulCeReceived
.begin (), m_ulCeReceived.end ()); |
| 587 NS_LOG_DEBUG (this << " bsr Size Before erasing in SubFrameIndication Func
tion " << (uint16_t) m_ulCeReceived.size ()); |
| 588 NS_LOG_DEBUG (this << "CHECK ulMacReq.m_macCeList size SubFrameIndication
Function " << (uint16_t) ulMacReq.m_macCeList.size ()); |
567 m_ulCeReceived.erase (m_ulCeReceived.begin (), m_ulCeReceived.end ()); | 589 m_ulCeReceived.erase (m_ulCeReceived.begin (), m_ulCeReceived.end ()); |
568 m_schedSapProvider->SchedUlMacCtrlInfoReq (ulMacReq); | 590 m_schedSapProvider->SchedUlMacCtrlInfoReq (ulMacReq); |
569 } | 591 } |
570 | 592 |
571 | 593 |
572 // Get uplink transmission opportunities | 594 // Get uplink transmission opportunities |
573 uint32_t ulSchedFrameNo = m_frameNo; | 595 uint32_t ulSchedFrameNo = m_frameNo; |
574 uint32_t ulSchedSubframeNo = m_subframeNo; | 596 uint32_t ulSchedSubframeNo = m_subframeNo; |
575 // NS_LOG_DEBUG (this << " sfn " << frameNo << " sbfn " << subframeNo); | 597 // NS_LOG_DEBUG (this << " sfn " << frameNo << " sbfn " << subframeNo); |
576 if (ulSchedSubframeNo + (m_macChTtiDelay + UL_PUSCH_TTIS_DELAY) > 10) | 598 if (ulSchedSubframeNo + (m_macChTtiDelay + UL_PUSCH_TTIS_DELAY) > 10) |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
656 NS_ASSERT (dlcqi.m_rnti != 0); | 678 NS_ASSERT (dlcqi.m_rnti != 0); |
657 m_dlCqiReceived.push_back (dlcqi); | 679 m_dlCqiReceived.push_back (dlcqi); |
658 | 680 |
659 } | 681 } |
660 | 682 |
661 | 683 |
662 void | 684 void |
663 LteEnbMac::ReceiveBsrMessage (MacCeListElement_s bsr) | 685 LteEnbMac::ReceiveBsrMessage (MacCeListElement_s bsr) |
664 { | 686 { |
665 NS_LOG_FUNCTION (this); | 687 NS_LOG_FUNCTION (this); |
| 688 //send to LteUlCcmMacSapUser |
| 689 //m_ulCeReceived.push_back (bsr); // this to called when LteUlCcmSapProvider::
ReportMacCeToScheduler is called |
| 690 m_ulCcmMacSapUser->UlReceiveMacCe (bsr, m_componentCarrierId); |
| 691 } |
666 | 692 |
667 m_ulCeReceived.push_back (bsr); | 693 void |
| 694 LteEnbMac::DoReportMacCeToScheduler (MacCeListElement_s bsr) |
| 695 { |
| 696 NS_LOG_FUNCTION (this); |
| 697 NS_LOG_DEBUG (this << " bsr Size " << (uint16_t) m_ulCeReceived.size ()); |
| 698 //send to LteUlCcmMacSapUser |
| 699 m_ulCeReceived.push_back (bsr); // this to called when LteUlCcmSapProvider::Re
portMacCeToScheduler is called |
| 700 NS_LOG_DEBUG (this << " bsr Size after push_back " << (uint16_t) m_ulCeReceive
d.size ()); |
668 } | 701 } |
669 | 702 |
670 | 703 |
671 void | 704 void |
672 LteEnbMac::DoReceivePhyPdu (Ptr<Packet> p) | 705 LteEnbMac::DoReceivePhyPdu (Ptr<Packet> p) |
673 { | 706 { |
674 NS_LOG_FUNCTION (this); | 707 NS_LOG_FUNCTION (this); |
675 LteRadioBearerTag tag; | 708 LteRadioBearerTag tag; |
676 p->RemovePacketTag (tag); | 709 p->RemovePacketTag (tag); |
677 | 710 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
711 uint16_t rnti = tag.GetRnti (); | 744 uint16_t rnti = tag.GetRnti (); |
712 uint8_t lcid = tag.GetLcid (); | 745 uint8_t lcid = tag.GetLcid (); |
713 std::map <uint16_t, std::map<uint8_t, LteMacSapUser*> >::iterator rntiIt = m_r
lcAttached.find (rnti); | 746 std::map <uint16_t, std::map<uint8_t, LteMacSapUser*> >::iterator rntiIt = m_r
lcAttached.find (rnti); |
714 NS_ASSERT_MSG (rntiIt != m_rlcAttached.end (), "could not find RNTI" << rnti); | 747 NS_ASSERT_MSG (rntiIt != m_rlcAttached.end (), "could not find RNTI" << rnti); |
715 std::map<uint8_t, LteMacSapUser*>::iterator lcidIt = rntiIt->second.find (lcid
); | 748 std::map<uint8_t, LteMacSapUser*>::iterator lcidIt = rntiIt->second.find (lcid
); |
716 //NS_ASSERT_MSG (lcidIt != rntiIt->second.end (), "could not find LCID" << lci
d); | 749 //NS_ASSERT_MSG (lcidIt != rntiIt->second.end (), "could not find LCID" << lci
d); |
717 | 750 |
718 //Receive PDU only if LCID is found | 751 //Receive PDU only if LCID is found |
719 if (lcidIt != rntiIt->second.end ()) | 752 if (lcidIt != rntiIt->second.end ()) |
720 { | 753 { |
721 (*lcidIt).second->ReceivePdu (p); | 754 (*lcidIt).second->ReceivePdu (p, rnti, lcid); |
722 } | 755 } |
723 } | 756 } |
724 | 757 |
725 | 758 |
726 | 759 |
727 // //////////////////////////////////////////// | 760 // //////////////////////////////////////////// |
728 // CMAC SAP | 761 // CMAC SAP |
729 // //////////////////////////////////////////// | 762 // //////////////////////////////////////////// |
730 | 763 |
731 void | 764 void |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
786 FfMacCschedSapProvider::CschedUeReleaseReqParameters params; | 819 FfMacCschedSapProvider::CschedUeReleaseReqParameters params; |
787 params.m_rnti = rnti; | 820 params.m_rnti = rnti; |
788 m_cschedSapProvider->CschedUeReleaseReq (params); | 821 m_cschedSapProvider->CschedUeReleaseReq (params); |
789 m_rlcAttached.erase (rnti); | 822 m_rlcAttached.erase (rnti); |
790 m_miDlHarqProcessesPackets.erase (rnti); | 823 m_miDlHarqProcessesPackets.erase (rnti); |
791 } | 824 } |
792 | 825 |
793 void | 826 void |
794 LteEnbMac::DoAddLc (LteEnbCmacSapProvider::LcInfo lcinfo, LteMacSapUser* msu) | 827 LteEnbMac::DoAddLc (LteEnbCmacSapProvider::LcInfo lcinfo, LteMacSapUser* msu) |
795 { | 828 { |
796 NS_LOG_FUNCTION (this); | 829 NS_LOG_FUNCTION (this << lcinfo.rnti << (uint16_t) lcinfo.lcId); |
797 | 830 |
798 std::map <LteFlowId_t, LteMacSapUser* >::iterator it; | 831 std::map <LteFlowId_t, LteMacSapUser* >::iterator it; |
799 ·· | 832 ·· |
800 LteFlowId_t flow (lcinfo.rnti, lcinfo.lcId); | 833 LteFlowId_t flow (lcinfo.rnti, lcinfo.lcId); |
801 ·· | 834 ·· |
802 std::map <uint16_t, std::map<uint8_t, LteMacSapUser*> >::iterator rntiIt = m_r
lcAttached.find (lcinfo.rnti); | 835 std::map <uint16_t, std::map<uint8_t, LteMacSapUser*> >::iterator rntiIt = m_r
lcAttached.find (lcinfo.rnti); |
803 NS_ASSERT_MSG (rntiIt != m_rlcAttached.end (), "RNTI not found"); | 836 NS_ASSERT_MSG (rntiIt != m_rlcAttached.end (), "RNTI not found"); |
804 std::map<uint8_t, LteMacSapUser*>::iterator lcidIt = rntiIt->second.find (lcin
fo.lcId); | 837 std::map<uint8_t, LteMacSapUser*>::iterator lcidIt = rntiIt->second.find (lcin
fo.lcId); |
805 if (lcidIt == rntiIt->second.end ()) | 838 if (lcidIt == rntiIt->second.end ()) |
806 { | 839 { |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
925 // MAC SAP | 958 // MAC SAP |
926 // //////////////////////////////////////////// | 959 // //////////////////////////////////////////// |
927 | 960 |
928 | 961 |
929 void | 962 void |
930 LteEnbMac::DoTransmitPdu (LteMacSapProvider::TransmitPduParameters params) | 963 LteEnbMac::DoTransmitPdu (LteMacSapProvider::TransmitPduParameters params) |
931 { | 964 { |
932 NS_LOG_FUNCTION (this); | 965 NS_LOG_FUNCTION (this); |
933 LteRadioBearerTag tag (params.rnti, params.lcid, params.layer); | 966 LteRadioBearerTag tag (params.rnti, params.lcid, params.layer); |
934 params.pdu->AddPacketTag (tag); | 967 params.pdu->AddPacketTag (tag); |
| 968 params.componentCarrierId = m_componentCarrierId; |
935 // Store pkt in HARQ buffer | 969 // Store pkt in HARQ buffer |
936 std::map <uint16_t, DlHarqProcessesBuffer_t>::iterator it = m_miDlHarqProcess
esPackets.find (params.rnti); | 970 std::map <uint16_t, DlHarqProcessesBuffer_t>::iterator it = m_miDlHarqProcess
esPackets.find (params.rnti); |
937 NS_ASSERT (it != m_miDlHarqProcessesPackets.end ()); | 971 NS_ASSERT (it != m_miDlHarqProcessesPackets.end ()); |
938 NS_LOG_DEBUG (this << " LAYER " << (uint16_t)tag.GetLayer () << " HARQ ID " <<
(uint16_t)params.harqProcessId); | 972 NS_LOG_DEBUG (this << " LAYER " << (uint16_t)tag.GetLayer () << " HARQ ID " <<
(uint16_t)params.harqProcessId); |
939 ·· | 973 ·· |
940 //(*it).second.at (params.layer).at (params.harqProcessId) = params.pdu;//->Co
py (); | 974 //(*it).second.at (params.layer).at (params.harqProcessId) = params.pdu;//->Co
py (); |
941 (*it).second.at (params.layer).at (params.harqProcessId)->AddPacket (params.pd
u); | 975 (*it).second.at (params.layer).at (params.harqProcessId)->AddPacket (params.pd
u); |
942 m_enbPhySapProvider->SendMacPdu (params.pdu); | 976 m_enbPhySapProvider->SendMacPdu (params.pdu); |
943 } | 977 } |
944 | 978 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
996 if (ind.m_buildDataList.at (i).m_dci.m_ndi.at (k) == 1) | 1030 if (ind.m_buildDataList.at (i).m_dci.m_ndi.at (k) == 1) |
997 { | 1031 { |
998 // New Data -> retrieve it from RLC | 1032 // New Data -> retrieve it from RLC |
999 uint16_t rnti = ind.m_buildDataList.at (i).m_rnti; | 1033 uint16_t rnti = ind.m_buildDataList.at (i).m_rnti; |
1000 uint8_t lcid = ind.m_buildDataList.at (i).m_rlcPduList.at (j).
at (k).m_logicalChannelIdentity; | 1034 uint8_t lcid = ind.m_buildDataList.at (i).m_rlcPduList.at (j).
at (k).m_logicalChannelIdentity; |
1001 std::map <uint16_t, std::map<uint8_t, LteMacSapUser*> >::itera
tor rntiIt = m_rlcAttached.find (rnti); | 1035 std::map <uint16_t, std::map<uint8_t, LteMacSapUser*> >::itera
tor rntiIt = m_rlcAttached.find (rnti); |
1002 NS_ASSERT_MSG (rntiIt != m_rlcAttached.end (), "could not find
RNTI" << rnti); | 1036 NS_ASSERT_MSG (rntiIt != m_rlcAttached.end (), "could not find
RNTI" << rnti); |
1003 std::map<uint8_t, LteMacSapUser*>::iterator lcidIt = rntiIt->s
econd.find (lcid); | 1037 std::map<uint8_t, LteMacSapUser*>::iterator lcidIt = rntiIt->s
econd.find (lcid); |
1004 NS_ASSERT_MSG (lcidIt != rntiIt->second.end (), "could not fin
d LCID" << lcid); | 1038 NS_ASSERT_MSG (lcidIt != rntiIt->second.end (), "could not fin
d LCID" << lcid); |
1005 NS_LOG_DEBUG (this << " rnti= " << rnti << " lcid= " << (uint3
2_t) lcid << " layer= " << k); | 1039 NS_LOG_DEBUG (this << " rnti= " << rnti << " lcid= " << (uint3
2_t) lcid << " layer= " << k); |
1006 (*lcidIt).second->NotifyTxOpportunity (ind.m_buildDataList.at
(i).m_rlcPduList.at (j).at (k).m_size, k, ind.m_buildDataList.at (i).m_dci.m_har
qProcess); | 1040 (*lcidIt).second->NotifyTxOpportunity (ind.m_buildDataList.at
(i).m_rlcPduList.at (j).at (k).m_size, k, ind.m_buildDataList.at (i).m_dci.m_har
qProcess, m_componentCarrierId, rnti, lcid); |
1007 } | 1041 } |
1008 else | 1042 else |
1009 { | 1043 { |
1010 if (ind.m_buildDataList.at (i).m_dci.m_tbsSize.at (k) > 0) | 1044 if (ind.m_buildDataList.at (i).m_dci.m_tbsSize.at (k) > 0) |
1011 { | 1045 { |
1012 // HARQ retransmission -> retrieve TB from HARQ buffer | 1046 // HARQ retransmission -> retrieve TB from HARQ buffer |
1013 std::map <uint16_t, DlHarqProcessesBuffer_t>::iterator it
= m_miDlHarqProcessesPackets.find (ind.m_buildDataList.at (i).m_rnti); | 1047 std::map <uint16_t, DlHarqProcessesBuffer_t>::iterator it
= m_miDlHarqProcessesPackets.find (ind.m_buildDataList.at (i).m_rnti); |
1014 NS_ASSERT (it != m_miDlHarqProcessesPackets.end ()); | 1048 NS_ASSERT (it != m_miDlHarqProcessesPackets.end ()); |
1015 Ptr<PacketBurst> pb = (*it).second.at (k).at ( ind.m_build
DataList.at (i).m_dci.m_harqProcess); | 1049 Ptr<PacketBurst> pb = (*it).second.at (k).at ( ind.m_build
DataList.at (i).m_dci.m_harqProcess); |
1016 for (std::list<Ptr<Packet> >::const_iterator j = pb->Begin
(); j != pb->End (); ++j) | 1050 for (std::list<Ptr<Packet> >::const_iterator j = pb->Begin
(); j != pb->End (); ++j) |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1203 else | 1237 else |
1204 { | 1238 { |
1205 NS_FATAL_ERROR (" HARQ functionality not implemented"); | 1239 NS_FATAL_ERROR (" HARQ functionality not implemented"); |
1206 } | 1240 } |
1207 } | 1241 } |
1208 m_dlInfoListReceived.push_back (params); | 1242 m_dlInfoListReceived.push_back (params); |
1209 } | 1243 } |
1210 | 1244 |
1211 | 1245 |
1212 } // namespace ns3 | 1246 } // namespace ns3 |
OLD | NEW |