A CSG cell is one that most subscribers cannot camp on. The restriction is announced in system information. Two fields carry it. This page collects those fields, the messages that report a CSG cell to the network, and the conformance tests that exercise them.
- What Makes a Cell a CSG Cell
- PCI Range Reserved for CSG
- RRC Messages Related to CSG
- Conformance Test Requirement
- Reference
What Makes a Cell a CSG Cell
One boolean settles it and one identity says which group. Both travel in SIB1, which every UE reads before it can camp anywhere. The table below gives the two combinations a reader meets most often.
CSG is a set of user (UEs, Subscribers) which allowed for a specific cell (usually femto cell). The cell with CSG Indication set to be 'TRUE' is called CSG cell is called 'CSG Cell'.
Non CSG Cell (Ordinary Cell) allows any UE to camp on as long as the UE has proper PLMN info and the cell is not barred, but CSG Cell allows only UEs belonging to a specific CSG.
You may ask how a cell declare "I am CSG cell" or "I am a Normal Cell". You can do it by using two information elements in System Information BlockType 1 (SIB1) as shown below.
|
SIB1 IE |
Normal Cell |
CSG Cell |
|
csg-Indication |
FALSE |
TRUE |
|
csg-Identity |
Absent |
Present |
csg-Indication is a plain BOOLEAN : 36.331 makes it mandatory inside cellAccessRelatedInfo, so every SIB1 carries it.TRUE does not simply mean closed : 36.331 reads it as the UE being allowed in only if the cell is a CSG member cell. Manual CSG selection and limited service are the two exceptions it names.csg-Identity is the group number : 36.331 calls it the identity of the Closed Subscriber Group the cell belongs to.The identity is 27 bits wide : that is just over 134 million values.The identity is optional and the indication is not : the ASN.1 does not tie one field to the other.So the two columns are the common cases : a message carrying an identity with the indication set to FALSE is legal.
Both fields sit in the first branch of SIB1, beside the PLMN list and the cell identity. The listing below is that message as the current release defines it.
Following is based on
SystemInformationBlockType1 ::= SEQUENCE {
cellAccessRelatedInfo SEQUENCE {
plmn-IdentityList PLMN-IdentityList,
trackingAreaCode TrackingAreaCode,
cellIdentity CellIdentity,
cellBarred ENUMERATED {barred, notBarred},
intraFreqReselection ENUMERATED {allowed, notAllowed},
csg-Indication BOOLEAN,
csg-Identity CSG-Identity OPTIONAL -- Need OR
},
cellSelectionInfo SEQUENCE {
q-RxLevMin Q-RxLevMin,
q-RxLevMinOffset INTEGER (1..8) OPTIONAL -- Need OP
},
p-Max P-Max OPTIONAL, -- Need OP
freqBandIndicator FreqBandIndicator,
schedulingInfoList SchedulingInfoList,
tdd-Config TDD-Config OPTIONAL, -- Cond TDD
si-WindowLength ENUMERATED {
ms1, ms2, ms5, ms10, ms15, ms20,
ms40},
systemInfoValueTag INTEGER (0..31),
nonCriticalExtension SystemInformationBlockType1-v890-IEs OPTIONAL
}
CSG-Identity ::= BIT STRING (SIZE (27))
PCI Range Reserved for CSG
A UE that is not a member should not spend time reading system information from cells it cannot use. Reserving a block of physical cell identities lets it skip those cells by PCI alone, before it decodes anything.
A Network can allocate a certain range of PCI (Physical Cell ID) to be reserved for CSG. This can be defined by SIB4. There are two information elements in SIB 4, csg-PhysCellIdRange.start and csg-PhysCellIdRange.range. If csg-PhysCellIdRange.start = n, csg-PhysCellIdRange.range = K. The PCI is distributed between Normal Cell and CSG cell as shown below.
|
PCI for Normal Cell |
PCI for CSG Cell |
PCI for Normal Cell |
|
1 2 3 4 5 6 7 ... |
n n+1 n+2 ... n+K |
... 500 501 502 503 |
The field is csg-PhysCellIdRange in SIB4 : 36.331 gives it the type PhysCellIdRange and marks it Cond CSG.The range has two parts : start is the lowest physical cell identity in the range. The range field says how many identities it covers.The count includes start : 36.331 says n4 corresponds with 4 and n8 with 8, counting from start.An absent range means one identity : the UE applies the value 1, so only the identity in start applies.The enumeration is coarse : n4, n8, n12, n16, n24, n32, n48, n64, n84, n96, n128, n168, n252 and n504.n504 covers the whole space : a physical cell identity runs from 0 to 503. So the largest value reserves every one of them.The SIB4 decode further down sets start to 0 and range to n4 : that reserves physical cell identities 0, 1, 2 and 3.
If you go into details, this is also pretty complicated concept. I will leave it up to you to find details from other source as follows.
- Fixed Mobile Convergence Forum : Member CSG cell (If this link does not work, try here)
- Novel Mobile Radio Research (nomor) : LTE Home Node Bs and its enhancements in Release 9
- Qualcomm : 3GPP Femtocells: Architecture and Protocols
The reserved block is one field with two parts. The second part is an enumeration rather than a count. The definition below is short enough to read whole.
Following is based on
PhysCellIdRange ::= SEQUENCE {
start PhysCellId,
range ENUMERATED {
n4, n8, n12, n16, n24, n32, n48, n64, n84,
n96, n128, n168, n252, n504, spare2,
spare1} OPTIONAL -- Need OP
}
PhysCellId ::= INTEGER (0..503)
RRC Messages Related to CSG
Five messages carry a CSG field, and each carries it for a different reason. Two broadcast the cell's own status, one names the home eNB, and two are sent by the UE. The decodes below show where the field sits in each of them.
Followings are RRC messages and information elements which are related to CSG operation. For now, I would give you just list of RRC messages and format. I will describe later on how these messages interplay.
The first decode is the one every UE reads. The two fields marked in red are the ones the table further up turns into a yes or a no.
SystemInformationBlockType1 as a decoder renders it, with the CSG fields marked in red by the author. The values are the decoder's own and none of them has been corrected.
+-c1 ::= CHOICE [systemInformationBlockType1]
+-systemInformationBlockType1 ::= SEQUENCE [000]
+-cellAccessRelatedInfo ::= SEQUENCE [1]
| +-plmn-IdentityList ::= SEQUENCE OF SIZE(1..6) [1]
| +-trackingAreaCode ::= BIT STRING SIZE(16) [0000000000000000]
| +-cellIdentity ::= BIT STRING SIZE(28) [0000000000000000000000000000]
| +-cellBarred ::= ENUMERATED [barred]
| +-intraFreqReselection ::= ENUMERATED [allowed]
| +-csg-Indication ::= BOOLEAN [TRUE]
| +-csg-Identity ::= BIT STRING SIZE(27) [000000000000000000000000000] OPTIONAL:Exist
+-cellSelectionInfo ::= SEQUENCE [0]
+-p-Max ::= INTEGER OPTIONAL:Omit
+-freqBandIndicator ::= INTEGER (1..64) [1]
+-schedulingInfoList ::= SEQUENCE OF SIZE(1..maxSI-Message[32]) [1]
+-tdd-Config ::= SEQUENCE OPTIONAL:Omit
+-si-WindowLength ::= ENUMERATED [ms1]
+-systemInfoValueTag ::= INTEGER (0..31) [0]
+-nonCriticalExtension ::= SEQUENCE OPTIONAL:Omit
The tree follows the listing above field for field : the order inside cellAccessRelatedInfo is the same in both.OPTIONAL:Exist is the decoder speaking, not the specification : it says the optional field is present in this message.This decode is a closed cell : csg-Indication reads TRUE and csg-Identity is there to name the group.
The next decode carries the reserved identity block. SIB4 travels inside a SystemInformation message rather than on its own. That is why the tree starts two levels higher.
SystemInformationBlockType4 carried in a SystemInformation message, rendered by the same decoder and quoted as recorded.
+-c1 ::= CHOICE [systemInformation]
+-systemInformation ::= SEQUENCE
+-criticalExtensions ::= CHOICE [systemInformation-r8]
+-systemInformation-r8 ::= SEQUENCE [0]
+-sib-TypeAndInfo ::= SEQUENCE OF SIZE(1..maxSIB[32]) [1]
| +- ::= CHOICE [sib4]
| +-sib4 ::= SEQUENCE [001]
| +-intraFreqNeighCellList ::= SEQUENCE OF OPTIONAL:Omit
| +-intraFreqBlackCellList ::= SEQUENCE OF OPTIONAL:Omit
| +-csg-PhysCellIdRange ::= SEQUENCE [1] OPTIONAL:Exist
| | +-start ::= INTEGER (0..503) [0]
| | +-range ::= ENUMERATED [n4] OPTIONAL:Exist
| +-EXTENSION ::= SEQUENCE [0]
| +-lateNonCriticalExtension ::= OCTET STRING OPTIONAL:Omit
+-nonCriticalExtension ::= SEQUENCE OPTIONAL:Omit
csg-PhysCellIdRange is present here : start is 0 and range is n4. So the reserved block is 0 to 3.The neighbour lists are both omitted : a SIB4 can carry the CSG range and nothing else.One field name has since changed : 36.331 v19.3.0 calls the second list intraFreqExcludedCellList where this decode reads intraFreqBlackCellList.The decode is left as it was recorded : it is a record of what one tool printed, so the old name stays.
The third decode is the smallest system information block on the page. It carries one field. That field is for a person to read rather than for the UE to act on.
SystemInformationBlockType9 carried in a SystemInformation message, quoted as recorded.
+-c1 ::= CHOICE [systemInformation]
+-systemInformation ::= SEQUENCE
+-criticalExtensions ::= CHOICE [systemInformation-r8]
+-systemInformation-r8 ::= SEQUENCE [0]
+-sib-TypeAndInfo ::= SEQUENCE OF SIZE(1..maxSIB[32]) [1]
| +- ::= CHOICE [sib9]
| +-sib9 ::= SEQUENCE [1]
| +-hnb-Name ::= OCTET STRING SIZE(1..48) [000....000] OPTIONAL:Exist
| +-EXTENSION ::= SEQUENCE [0]
| +-lateNonCriticalExtension ::= OCTET STRING OPTIONAL:Omit
+-nonCriticalExtension ::= SEQUENCE OPTIONAL:Omit
hnb-Name is the only field : 36.331 says it carries the name of the home eNB, coded in UTF-8.Its length runs from 1 to 48 octets : a variable number of bytes per character, so the character count is lower.The field is optional : a home eNB can broadcast SIB9 without a name. Many do not broadcast SIB9 at all.
The fourth decode reverses the direction. The three above are broadcast by the cell. This one is sent by the UE on its own initiative.
ProximityIndication as the decoder renders it, quoted as recorded.
+-c1 ::= CHOICE [proximityIndication-r9]
+-proximityIndication-r9 ::= SEQUENCE
+-criticalExtensions ::= CHOICE [c1]
+-c1 ::= CHOICE [proximityIndication-r9]
+-proximityIndication-r9 ::= SEQUENCE [1]
+-type-r9 ::= ENUMERATED [entering] // entering or leaving
+-carrierFreq-r9 ::= CHOICE [eutra-r9] // eutra or utra
| +-eutra-r9 ::= INTEGER (0..maxEARFCN[65535]) [0]
+-nonCriticalExtension ::= SEQUENCE [00] OPTIONAL:Exist
+-lateNonCriticalExtension ::= OCTET STRING OPTIONAL:Omit
+-nonCriticalExtension ::= SEQUENCE OPTIONAL:Omit
36.331 gives the message one job : it says the UE is entering or leaving the proximity of one or more CSG member cells.It travels on SRB1 : the logical channel is DCCH and the direction is UE to E-UTRAN.type-r9 has two values : entering and leaving, and this decode carries entering.carrierFreq-r9 names the RAT as well as the frequency : the choice offers eutra-r9 and utra-r9, and this decode uses eutra-r9.The message saves the UE from searching : the network can order measurements only when the UE is near a cell it belongs to.
The last decode is an ordinary measurement report with two extra fields. They appear only when the reported neighbour is a CSG cell. That is why they sit inside an extension rather than in the main body.
MeasurementReport as the decoder renders it, quoted as recorded.
+-c1 ::= CHOICE [measurementReport]
+-measurementReport ::= SEQUENCE
+-criticalExtensions ::= CHOICE [c1]
+-c1 ::= CHOICE [measurementReport-r8]
+-measurementReport-r8 ::= SEQUENCE [1]
+-measResults ::= SEQUENCE [1]
| +-measId ::= INTEGER (1..maxMeasId[32]) [1]
| +-measResultPCell ::= SEQUENCE
| | +-rsrpResult ::= INTEGER (0..97) [0]
| | +-rsrqResult ::= INTEGER (0..34) [0]
| +-measResultNeighCells ::= CHOICE [measResultListEUTRA] OPTIONAL:Exist
| | +-measResultListEUTRA ::= SEQUENCE OF SIZE(1..maxCellReport[8]) [1]
| | +-MeasResultEUTRA ::= SEQUENCE [0]
| | +-physCellId ::= INTEGER (0..503) [0]
| | +-cgi-Info ::= SEQUENCE OPTIONAL:Omit
| | +-measResult ::= SEQUENCE [00]
| | +-rsrpResult ::= INTEGER OPTIONAL:Omit
| | +-rsrqResult ::= INTEGER OPTIONAL:Omit
| | +-EXTENSION ::= SEQUENCE [1]
| | +-VERSION-BRACKETS1 ::= SEQUENCE [1] OPTIONAL:Exist
| | +-additionalSI-Info-r9 ::= SEQUENCE [11] OPTIONAL:Exist
| | +-csg-MemberStatus-r9 ::= ENUMERATED [member] OPTIONAL:Exist
| | +-csg-Identity-r9 ::= BIT STRING SIZE(27)
[000000000000000000000000000] OPTIONAL:Exist
| +-EXTENSION ::= SEQUENCE [00]
| +-VERSION-BRACKETS1 ::= SEQUENCE OPTIONAL:Omit
| +-VERSION-BRACKETS2 ::= SEQUENCE OPTIONAL:Omit
+-nonCriticalExtension ::= SEQUENCE [11] OPTIONAL:Exist
+-lateNonCriticalExtension ::= OCTET STRING SIZE(ALIGNED) OPTIONAL:Exist
+-nonCriticalExtension ::= SEQUENCE OPTIONAL:Exist
The two fields live in additionalSI-Info-r9 : 36.331 gives it csg-MemberStatus-r9 and csg-Identity-r9, both optional.csg-MemberStatus says whether the UE belongs : 36.331 describes it as whether or not the UE is a member of the CSG of the neighbour cell.Its enumeration has one value : member. A non-member is reported by leaving the field out.The reporting rule is in the procedure text : the UE includes the identity when the cell broadcasts one. It sets the status to member when the cell is a member cell.This decode reports a member cell : csg-MemberStatus-r9 reads member and csg-Identity-r9 is present beside it.The network needs both : an identity without a membership answer would not tell it whether a handover to that cell can succeed.
Conformance Test Requirement
A test list is a quick way to see what a feature has to survive. Almost every case below is a cell reselection or a manual selection. That is where CSG membership shows itself to a user.
Followings are the list of test cases defined in 36.523-1 which are directly related to CSG.
6.3 Closed Subscriber Group cells
- 6.3.1 Inter-Frequency cell reselection/From E-UTRA RRC_IDLE non CSG cell to E-UTRA RRC_IDLE CSG cell
- 6.3.2 Inter-RAT cell reselection/From GSM_Idle/GPRS Packet_Idle to E-UTRA idle CSG cell
- 6.3.3 Inter-RAT cell reselection/From UTRA_Idle to E-UTRA RRC_IDLE CSG cell
- 6.3.4 Inter-RAT cell reselection/From UTRA_PCH state to E-UTRA RRC_IDLE CSG Cell
- 6.3.5 Manual support for CSG ID selection
- 6.3.6 Ignoring CSG cells in cell selection/reselection when allowed CSG list is empty or not supported
- 6.3.7 Inter-RAT Cell reselection from E-UTRA idle non-CSG cell to a UTRA CSG Cell
- 6.3.8 Inter-RAT CSG Cell Reselection from E-UTRA CSG cell to UTRA CSG Cell
- 6.3.9 Manual CSG ID selection across PLMNs
- 6.3.10 Intra-Frequency cell selection/From E-UTRA_Idle to E-UTRA RRC_IDLE/CSG cell on same PLMN as previously visted CSG cell
- 6.3.11 Inter-RAT cell reselection/From UTRA_Idle to E-UTRA RRC_IDLE/CSG cell
- 6.3.12 Inter-RAT cell selection/From E-UTRA RRC_IDLE to UTRA_Idle/CSG cell on same PLMN as previously visited CSG Cell
Seven of the twelve are reselection cases : from E-UTRA, from GSM and GPRS idle, from UTRA idle and from a UTRA PCH state.Two more are cell selection rather than reselection : 6.3.10 and 6.3.12, both of them on a PLMN the UE visited before.Two of them are manual selection : 6.3.5 for CSG ID selection and 6.3.9 for the same thing across PLMNs.One is the empty list case : 6.3.6 checks that CSG cells are ignored when the allowed CSG list is empty or unsupported.Four of the twelve are now void : 36.523-1 v19.3.0 marks 6.3.8, 6.3.10, 6.3.11 and 6.3.12 as Void.One title has changed : 6.3.4 now reads UTRA CELL_PCH state rather than UTRA_PCH state.The clause itself survives : 6.3 is still Closed Subscriber Group cells. The first seven cases are still there.
Reference
The two specifications below are the ones this page was checked against, in the versions named. The links inside the sections above are the author's own.
- 36.331 : 3GPP - E-UTRA; Radio Resource Control (RRC); Protocol specification, v19.3.0. The source of SystemInformationBlockType1, PhysCellIdRange, SystemInformationBlockType9, ProximityIndication and AdditionalSI-Info-r9.
- 36.523-1 : 3GPP - E-UTRA and EPC; User Equipment (UE) conformance specification; Part 1, v19.3.0. Clause 6.3 is Closed Subscriber Group cells. Only its table of contents was read, which is where the case titles and the void markers are.