GSOC2017Lte

From Nsnam
Revision as of 06:45, 27 August 2017 by Krotov (Talk | contribs) (Updated phase 1 and phase 2 sections, added empty final report section)

Jump to: navigation, search

Main Page - Current Development - Developer FAQ - Tools - Related Projects - Project Ideas - Summer Projects

Installation - Troubleshooting - User FAQ - HOWTOs - Samples - Models - Education - Contributed Code - Papers

Return to GSoC 2017 Accepted Projects page.

Project overview

  • Project name: Enabling LTE CA handover to secondary cell
  • Abstract: The goal of the project is to implement handover to secondary cell, i.e. implement the ability to switch primary cell and reconfigure secondary carriers over RRC in runtime.

Technical Approach

In current LTE carrier aggregation (CA) model of ns-3 the handover among different component carriers is not supported. This is because the current LTE CA model does not treat different component carriers as different cells. Additionally, the primary component carrier is fixed and there is no procedure that allows change of a primary component carrier. In order to allow handover among component carriers, it is necessary to enhance SAP interfaces between RRC and component carrier manager (CCM), and also between CCM and lower layers (MAC, PHY) to allow change of primary component carrier, and also to extend the model so that each component carrier is treated as independent cell.

Currently cells have several identifiers. Firstly, according to LTE specifications, each cell has its own Cell ID. UE can learn this ID by communicating with eNB, so it always corresponds to Cell ID on eNB. Secondly, for the needs of scheduler, which is implemented according to LTE Femtocell Scheduler API, each cell is identified internally within eNB by its 8-bit identifier (componentCarrierId).

On the one hand, UE is unnecessarily aware of eNB configuration. componentCarrierIds are configured by LteHelper, so PHYs on eNB and UE correspond one-to-one. However, they don't have to, and it may be convenient to reserve componentCarrierId = 0 for primary CC on each UE. It is even possible that number of PHYs on eNB and UE is not equal. On the other hand, entities such as LteEnbNetDevice have "CellId" attributes, which correspond to "primary" component carrier. As "primary" component carrier is a property of UE, not eNB, it is necessary to remove such attributes.

As distinction between primary and secondary carrier is done on each UE, any flags that identify primary carrier should be removed from eNB and scenario configuration. For example, ComponentCarrier class has "PrimaryCarrier" boolean attribute which should be removed.

General plan is as follows:

  1. Improve architecture of LTE CA to make sure secondary cells are treated the same way as primary cells by eNB and frequency channels can be switched easily on UE.
  2. Implement minimally feasible version of handover procedure on eNB and UE and write unit tests for this procedure.
  3. Implement necessary signalling on RRC to make handover negotiation possible.
  4. Implement handover algorithm to make automatic handover possible.
  5. Write a scenario to validate implemented functionality and provide an example of usage for implemented functionality.

Milestones and Deliverables

Phase 1 (May 30, 2017 - June 30, 2017)

In Phase 1 I made UEs receive secondary cell configuration over the wireless channel during initial cell selection instead of requiring them to be preconfigured and made it possible to use any of the component carriers as primary, including scenarios where different UEs have different primary component carriers.

  1. Made LteHelper create one SpectrumChannel for all carrier frequencies to allow PHYs to switch frequency without need to change the channel object.
  2. Assigned different physical cell IDs to different component carriers of the same eNB.
  3. Extended UeManager to track which cell ID is the primary component carrier for attached UE instead of assuming that primary cell is always on some fixed frequency.
  4. Fixed serialization of RRC messages carrying secondary component carrier configuration and modified UE RRC to read it during initial connection configuration.
  5. Made eNB transmit SIB1 (SystemInformationBlockType1) and SIB2 messages on all frequencies.
  6. Implemented test suite lte-test-secondary-cell-selection.cc to test that UE can attach to any component carrier (not just the 0-th one) during initial cell selection. Run it with ./test.py -s lte-secondary-cell-selection
  7. Implemented test suite lte-test-aggregation-throughput-scale.cc to test that throughput scales linearly with number of CCs. It proves that initial configuration is correct in both downlink and uplink channels as UE transmits CQI (channel quality indicator) in uplink and eNB transmits data to UE in downlink using high MCS. Run it with ./test.py -s lte-aggregation-throughput-scale

Report and code review:

Code is already merged upstream:

Phase 2 (June 30, 2017 - July 24, 2017)

In phase 2 I made it possible to trigger UE handover with and without enabled CA (carrier aggregation) in inter-eNB, intra-eNB, inter-frequency and intra-frequency scenarios. Previously only inter-eNB intra-frequency handover was supported and only in non-CA scenarios.

  1. Modified EPC code to make it possible to identify eNB by any of its cell IDs instead of the first one.
  2. Made sure LteEnbRrcProtocolIdeal is able to deliver messages regardless of which CellId is used.
  3. Extended API to make it possible to specify target component carrier for handover.
  4. Extended existing test suite test-lte-handover-delay.cc to make it possible to change the number of CCs. This test implements inter-eNB intra-frequency handover scenario and checks that delay is within limits. Run it with ./test.py -s lte-handover-delay
  5. Implemented a test suite lte-test-primary-cell-change.cc to extensively test all mentioned above handover cases (inter/intra-eNB, inter/intra-frequency, various number of CCs). Run it with ./test.py -s lte-primary-cell-change

Report and code review:

Code passed review and is ready for merge.

Phase 3 (July 28, 2017 - August 21, 2017)

  1. Improve CCM↔MAC interface on UE to make sure CCM has enough information to make decision about reconfiguration. Implement some example algorithm, such as round robin with a predefined time period that will decide when to handover. Write a test scenario or example showing how to use it.
  2. Implement some more realistic algorithm or, even better, integrate existing event-based handover algorithms.

Final report