4G/LTE - X2





X2, X2AP, X2AP Service


X2 is the name of the interface that connects one eNB to another eNB as indicated in the illustration below. You can guess there will be a lot of information or messages running along this interface (basically connection line). As you know, almost any data/message exchange you would need some type of protocol. In real network, there are cases where multiple eNB from different vendor are connected. For those eNBs from multiple vendors to properly communicate each other, they would need some common communication protocol. This protocol for communication along X2 interface is called X2AP (X2 Application Protocol). Also you would know from experience, there are some speciall hardware or software or application at each end of any communication. These application that sits at the end of X2 interface (basically within eNB) is called X2AP Service.



X2AP has many different functions as summarized below and the main contents of this page is go through each of these functions. (This list came from 3GPP 36.423).




What are the most common information carried over X2 ?


Following informations would be the most common type of information that are being exchanged between one eNB and another eNB over X2 interface.

  • Handover related Information
  • load or interference related information



How to setup an X2 between one eNB and another eNB ?


In order for a eNB to make a connection to another eNB, first it has to know which eNBs located around itself. How an eNB knows the information about other eNBs around it ?

There are roughly two types of methods being used for this as listed below.

  • By predefined configuration
  • By Automatic Neighbor Relation Function (ANRF)

In ANRF, eNB uses UEs which are connected to it in order to find neighbouring eNBs. It can instruct UE to read the global cell identity (CGI) of neighbouing eNB and report them to the serving eNB. Actually ANRF can be a good example of SON (Self Organizing Network).


Once a eNB find neighbouring eNBs and decided to which one it want to connect, it finds the IP address of the destination eNB and establish TNL (Transport Network Layer). Then you may ask "How an eNB can figure out the IP of a neighbouring eNB ?". Also.. here you can think of roughly two methods.

  • By predefined configuration
  • By some kind of automatic method. For example, it can query the IP over S1 interface.


Once a TNL between two eNBs are established, the eNB send X2 SETUP REQUEST message to the other eNB and the other eNB respond with X2 SETUP RESPONSE message as shown below.


< 36.423 Figure X2 Setup, successful operation >


What kind of information is carried by X2 Setup Request message ? Some important information carried by this message are as follows (The other party would send similar information via X2 Setup Response message) :

  • Physical Cell IDs for the cell it manages
  • Frequency Band
  • Tracking Area Identity and/or the associated PLMN
  • Neighbour Information (Optional)
  • Number of Antenna Ports (Optional)
  • PRACH Configuration (Optional)
  • MBSFN Subframe Info (Optional)
  • CSG ID (mandatory if the eNB is CSG Cell or Hybrid Cell)
  • MultibandInfoList (Optional)



    X2SetupRequest ::= SEQUENCE {

      protocolIEs ProtocolIE-Container {{X2SetupRequest-IEs}},




    X2SetupRequest-IEs X2AP-PROTOCOL-IES ::= {

      { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory} |

      { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory} |

      { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional},




    GlobalENB-ID ::= SEQUENCE {

      pLMN-Identity PLMN-Identity,

      eNB-ID ENB-ID,

      iE-Extensions ProtocolExtensionContainer { {GlobalENB-ID-ExtIEs} } OPTIONAL,




    ENB-ID ::= CHOICE {

      macro-eNB-ID BIT STRING (SIZE (20)),

      home-eNB-ID BIT STRING (SIZE (28)),




    ServedCells ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE {



    ServedCell-Information ::= SEQUENCE {

      pCI PCI,

      cellId ECGI,

      tAC TAC,

      broadcastPLMNs BroadcastPLMNs-Item,

      eUTRA-Mode-Info EUTRA-Mode-Info,

      iE-Extensions ProtocolExtensionContainer { {ServedCell-Information-ExtIEs} } OPTIONAL,




    Neighbour-Information ::= SEQUENCE (SIZE (0..maxnoofNeighbours)) OF SEQUENCE {

      eCGI ECGI,

      pCI PCI,


      iE-Extensions ProtocolExtensionContainer { {Neighbour-Information-ExtIEs} } OPTIONAL,




    GUGroupIDList ::= SEQUENCE (SIZE (1..maxPools)) OF GU-Group-ID


    GU-Group-ID ::= SEQUENCE {

      pLMN-Identity PLMN-Identity,

      mME-Group-ID MME-Group-ID,

      iE-Extensions ProtocolExtensionContainer { {GU-Group-ID-ExtIEs} } OPTIONAL,






    X2SetupResponse ::= SEQUENCE {

      protocolIEs ProtocolIE-Container {{X2SetupResponse-IEs}},



    X2SetupResponse-IEs X2AP-PROTOCOL-IES ::= {

      { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory} |

      { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory} |

      { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}|

      { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },




    CriticalityDiagnostics ::= SEQUENCE {




      id-handoverPreparation ProcedureCode ::= 0

      id-handoverCancel ProcedureCode ::= 1

      id-loadIndication ProcedureCode ::= 2

      id-errorIndication ProcedureCode ::= 3

      id-snStatusTransfer ProcedureCode ::= 4

      id-uEContextRelease ProcedureCode ::= 5

      id-x2Setup ProcedureCode ::= 6

      id-reset ProcedureCode ::= 7

      id-eNBConfigurationUpdate ProcedureCode ::= 8

      id-resourceStatusReportingInitiation ProcedureCode ::= 9

      id-resourceStatusReporting ProcedureCode ::= 10

      id-privateMessage ProcedureCode ::= 11

      id-mobilitySettingsChange ProcedureCode ::= 12

      id-rLFIndication ProcedureCode ::= 13

      id-handoverReport ProcedureCode ::= 14

      id-cellActivation ProcedureCode ::= 15


    TriggeringMessage ::= ENUMERATED {






    Criticality ::= ENUMERATED {






    CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF

      SEQUENCE {

      iECriticality Criticality,

      iE-ID ProtocolIE-ID,

      typeOfError TypeOfError,

      iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL,





Communication over X2 for Mobility


Following illustration is duplicated from The LTE Network Architecture - A Comprehensive Tutorial (Alcatel Lucent Whitepaper)




Communication over X2 for Load/Interference Information


A eNB frequently exchanges with Neighbouring eNBs about Load and Interference related information for Load balencing or Interference Management (e.g, Interference Coordination as in ABS configuration for eICIC).

How often they exchanges these information would depend on the purpose of these information exchange. There are roughly two kinds of purpose of these information as listed below.

  • Load Balancing :  The frequency of this information exchange is relatively low.
  • RRM Optimization (e.g, Interference Coordination) : The frequency of this information exchange is relatively high (once in every tens of milliseconds).

This information is carried by a X2 message Load Indication as shown below.


< 36.423 Figure Load Indication, successful operation >


You can figure out exact contents of informations carried by Load Information from ASN structure of the message as listed below.