PCMD record format
Learn about the PCMD record format, which is logically divided into several containers that can be present multiple times.
A PCMD record is logically divided into several parts known as containers. Containers are sorted and can be present multiple times. They can be of fixed or variable size and must be divisible by four. If the size is not divisible by four, padding 0s are appended.
- 1248 bytes for standard records
- 1532 bytes for extended records
- 32 bytes for heartbeat records
If the system IP address inserted in the PCMD record is IPv4, the sizes are decreased by 12 bytes. The PCMD record size equals the UDP payload length of the IP packet, if there is just one PCMD record present.
Every PCMD record begins with a header as defined in PCMD record header format. The version of the PCMD record conveyed in the PCMD header changes when either of the following occurs:
- The structure or format of any container changes.
- A new container type is introduced.
The PCMD version for this release is 6.
The following notation specifies the structure of each container. This notation is similar to the 3GPP specifications, with the left side of a byte holding the most significant bit. Four bytes are shown per table row. The leftmost byte is transmitted first.
| bytes: | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
| bits: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
When more than one byte is merged in a single information element, the bit numbering is contiguous and the left is the logically more significant. See HeaderFlags in PCMD record report header2 for an example.
PCMD record header format
The PCMD record header is composed of the PCMD record common header, the PCMD record report header, and the SendingNodeIP container.
| PCMD record common header |
| PCMD record report header2 |
| SendingNodeIP container |
PCMD record common header
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | PCMDVersion=6 | RecordType | RecordLength | |
PCMD record report header2
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | RecordOpeningTime | |||
| 4 | ||||
| 8 | RecordSequenceNumber | |||
| 12 | GwId | MscpGroupId | SendingNodeType | HeaderFlags |
| 16 | Reserved | |||
| 20 | UEid | |||
| 24 | ||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|
| SendingNodeIpV6 | Reserved | ||||||
For descriptions of the PCMD record header container information elements, see Header record IEs.
SendingNodeIP container
The length of the SendingNodeIP container depends on the IP address type:
-
4 bytes for IPv4
- 16 bytes for IPv6
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | Sending node IPv4 | |||
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | Sending node IPv6 | |||
| 4 | ||||
| 8 | ||||
| 12 | ||||
Session PCMD record format
The following tables describe the formats of the Session PCMD and Session Extended PCMD records.
- 1 – appears exactly one time (always present)
- 0 to 1 – appears one time or not at all (optional)
- 0 to n – appears multiple times or not at all (optional)
- 1 to n – appears one or more times (mandatory)
- 0 to 40, 1 to 40 – bounded multiplicity ranges with a fixed maximum number of occurrences
| Container | Multiplicity | Information Elements (IEs) |
|---|---|---|
| PCMD record common header | 1 | Common Header IEs |
| PCMD record report header2 | Report Header2 IEs | |
| SendingNodeIP container | Sending Node IP container IEs | |
| Session PCMD Decoding container 2 | Session Decoding container IEs | |
| Session3 container | Session3 container IEs | |
|
Present only one time, except if another procedure or procedures occur before the original procedure completes; see PCMD record generation for information about a concurrent procedure. |
1 to 3 | Procedure container IEs |
|
Present when the ImeiFlag is set to 1. |
1 | IMEI container IEs |
|
Present when the MsisdnFlag is set to 1. |
MSISDN container IEs | |
| Peer container | Peers container IEs | |
| APN container Present when the ApnFlag is set to 1. |
APN container IEs | |
|
Message_1 container to Message_n container |
0 to 40 | Message container IEs |
|
MessageAI_1 container to MessageAI_n container One MessageAI container is present for every Message container. |
MessageAI container IEs | |
|
Present only when a bearer is involved in the procedure (bearer creation, modification, and deletion). |
0 to 11 | Bearer and QoS Flow container IEs |
|
Present only when a bearer is involved in the procedure (bearer creation, modification, and deletion). |
TEID container IEs | |
|
Present only when a bearer is involved in the procedure (bearer creation, modification, and deletion). |
FTEID IP container IEs | |
| 5G QoS container | 5GC QoS container IEs | |
|
Charging_1 to Charging_n container One Charging container is present if BLC is 0. One Charging container is present for every Bearer container if BLC is 1. |
1 to 11 | Charging container IEs |
| UE IP container | 1 | UE IP container IEs |
| SNSSAI container | 0 to 1 | SNSSAI container IEs |
| Container | Multiplicity | Record format and IE |
|---|---|---|
| PCMD record common header | 1 | Common Header IEs |
| PCMD record report header2 | Report Header2 IEs | |
| SendingNodeIP container | Sending Node IP container IEs | |
| Session PCMD Decoding container 2 | Session Decoding container IEs | |
| Session3 container | Session3 container IEs | |
|
Present only one time, except if another procedure or procedures occur before the original procedure completes; see PCMD record generation for information about a concurrent procedure. |
1 to 3 | Procedure container IEs |
|
Present when the ImeiFlag is set to 1. |
1 | IMEI container IEs |
|
Present when the MsisdnFlag is set to 1. |
MSISDN container IEs | |
| Peer container | Peers container IEs | |
|
Present when the ApnFlag is set to 1. |
APN container IEs | |
|
Present when the ExtendedFlag is set to 1. |
Session extended container IEs | |
|
Message_1 container to Message_n container |
0 to 40 | Message container IEs |
|
MessageAI_1 container to Message AI_n container One MessageAI container is present for every Message container. |
MessageAI container IEs | |
|
Present only when a bearer is involved in the procedure (bearer creation, modification, and deletion). |
0 to 11 | Bearer and QoS Flow container IEs |
|
Present only when a bearer is involved in the procedure (bearer creation, modification, and deletion). |
TEID container IEs | |
|
Present only when a bearer is involved in the procedure (bearer creation, modification, and deletion). |
FTEID IP container IEs | |
|
Present when the ExtendedFlag is set to 1 and when a bearer is involved in the procedure (bearer creation, modification, and deletion). |
Bearer extended container IEs | |
| 5G QoS container | 5GC QoS container IEs | |
|
Charging_1 container to Charging_n container One Charging container is present if BLC is 0. One Charging container is present for every Bearer container if BLC is 1. |
1 to 11 | |
| UE IP container | 1 | UE IP container IEs |
| SNSSAI container | 0 to 1 | SNSSAI container IEs |
Session PCMD Decoding container 2
| Bytes | 0 | 1 | 2 | 3 | |
|---|---|---|---|---|---|
| 0 | MessageNum |
ProcNum (4 bits) |
PeerNum (4 bits) |
Reserved | SessionFlagsV2 |
| 4 | SessionFlags2 | Reserved | |||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|
| BrNum | ApnFlag | ExtendedFlag | ImeiFlag | MsisdnFlag | |||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|
| SnssaiFlag | UliTypeFlag | Reserved | |||||
Session3 container
| Bytes | 0 | 1 | 2 | 3 | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | RatType (4 bits) |
DT (2 bits) |
BLC (1 bit) |
CI (1 bit) |
PDN Type (3 bits) |
Iwki (3 bits) |
Reserved (3 bits) |
UP Selection (6 bits) |
SSCM (2 bits) |
PduSessionId |
In the following table, if the UPSAttributes is 0, the UPSelectionPeer field is not used. The UPSAttributes is always 0 in this release.
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|
| UPSAttributes | UPSelectionPeer | ||||||
Procedure container
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | ProcedureID | ProcedureResult | ProcedureCause | |
| 4 | ProcedureDetailedCause | ProcedureDuration | ||
IMEI container
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | IMEI | |||
| 4 | ||||
MSISDN container
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | MSISDN | |||
| 4 | ||||
Peer container
The Peer container contains at least 1 peer and up to 15 peers maximum, as specified by PeerNum in the Session PCMD Decoding container 2.
Each peer is described by a PeerTypeV2 field and a PeerId field. The following apply for the PeerTypeV2 field:
- Length is 1 byte.
- Padding may be added after the PeerTypeV2 fields to align with a 4-byte boundary.
- Total number of bytes depends on the total number of peers in the record:
- 1 to 4 peers use 4 bytes
- 5 to 8 peers use 8 bytes
- 9 to 12 peers use 12 bytes
- 13 to 15 peers use 16 bytes
In the PeerXTypeV2, the range for X is [5..13]; if x is 13 there is padding (not peer 16).
PeerId field length is 4 bytes (IPv4) or 16 bytes (IPv6 or UUID), as specified by the PeerIdType.
Maximum length of a Peer container is 256 bytes.
In the PeerYId, Y is the PeerNum and the range for Y is [2..15]; if Y is 15 there is padding.
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | Peer1TypeV2 | Peer2TypeV2 or padding | Peer3TypeV2 or padding | Peer4TypeV2 or padding |
| ... | ||||
| 4 - 12 | PeerXTypeV2 | Peer(X+1)TypeV2 or padding | Peer(X+2)TypeV2 or padding | Peer(X+3)TypeV2 or padding |
| 4 - 16 | Peer1Id | |||
| ... | ... | |||
| ... 252 | PeerYId | |||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|
| PeerIdType | PeerType | ||||||
APN container
In the following table, the APN container size is up to 100 bytes, depending on the APN length, and is always a multiple of 4 bytes.
| Bytes | 0 | 1 | 2 | 3 | |
|---|---|---|---|---|---|
| 0 | ApnLength | APN (0 – 2 bytes) | |||
| ... | APN (continued) | ||||
| 96 | (APN continued) | Padding to 4 bytes if needed | |||
Session Extended container
The Session Extended container size is up to 20 bytes, depending on the ULI length, and is always a multiple of 4 bytes; for example, for 5G sessions it can be up to 17 bytes.
| Bytes | 0 | 1 | 2 | 3 | |
|---|---|---|---|---|---|
| 0 | UliLength | ULI | |||
| ... | ULI (continued) | ||||
| 16 | ULI (continued) | Padding to 4 bytes if needed | |||
Message container
There is one Message container for every message that is transmitted or received in the reported procedure. The Message containers are appended in chronological order.
When concurrent procedures are reported, to preserve the chronology the messages of the concurrent procedure are interleaved with the messages of the reported procedure.
| Bits | 31-22 | 21-17 | 16 | 15-0 |
|---|---|---|---|---|
| 0 | MessageMarker_n | ReferencePoint_n | Direction_n | timestampMM_n |
MessageAI container
There is one MessageAI (additional information) container for each Message container. Matching of the MessageAI container to the Message container is performed in the order that the Message containers appear.
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | MessageCauseCode | Padding to 4 bytes at the last MessageAI container | ||
Bearer / QoS Flow container
| Bits | 31-28 | 27-24 | 23-16 | 15-8 | 7 | 6 | 5- 2 | 1 | 0 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | BearerID | LBI | BearerResult | BearerCause | |||||||
| 4 | BearerDetailedCause | Bearer QCI | PVI | PCI | PL | Reserved | 5GQos Flag | ||||
| 8 | FTeidUIp V4BrIdRef (4 bit) | FTeidUIp V6 BrIdRef (4 bit) | 5GTun Ipv4 (1 bit) |
5GTun Ipv6 (1 bit) |
Reserved | ||||||
TEID container
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | TeidU | |||
FTEID IP container
The length of the FTEID IP container shown in the following tables depends on the IP address type:
- 4 bytes for IPv4
- 16 bytes for IPv6
- 20 bytes for IPv4 followed by IPv6
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | FTEID IPv4 | |||
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | FTEID IPv6 | |||
| 4 | ||||
| 8 | ||||
| 12 | ||||
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | FTEID IPv4 and IPv6 | |||
| 4 | ||||
| 8 | ||||
| 12 | ||||
| 16 | ||||
Bearer Extended container
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | Uplink APN-AMBR | |||
| 4 | Downlink APN-AMBR | |||
| 8 | Uplink MBR | |||
| 12 | Downlink MBR | |||
| 16 | Uplink GBR | |||
| 20 | Downlink GBR | |||
5G QoS container
| Bytes | 0 | 1 | 2 | 3 | |||||
|---|---|---|---|---|---|---|---|---|---|
| 0 | QFI (6bit) | RT (2 bit) | PDB (5 bit) | PEB (3 bit) | QNC (1 bit) | RQI (1 bit) | Reserved | ||
| 4 | AW (12 bit) | MBV (12 bit) | Reserved | ||||||
Charging container
There is one Charging container when BLC is 0 and one Charging container for each Bearer container when BLC is 1.
The MAG-c performs the Charging container to Bearer container matching in the order in which the Bearer containers appear.
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | GCID | |||
UE IP container
The length of the UE IP container shown in the following tables depends on the IP address type:
- 4 bytes for IPv4
- 16 bytes for IPv6
- 20 bytes for IPv4 followed by IPv6
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | UE IPv4 | |||
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | UE IPv6 | |||
| 4 | ||||
| 8 | ||||
| 12 | ||||
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | UE IPv4 and IPv6 | |||
| 4 | ||||
| 8 | ||||
| 12 | ||||
| 16 | ||||
SNSSAI container
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | sst | sd | ||
PCMD Heartbeat format
The following table describes the PCMD Heartbeat format.
| PCMD record common header |
| PCMD Heartbeat container |
| SendingNodeIP container |
PCMD Heartbeat container
| Bytes | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | HBSequenceNumber | GwId | HBFlags | |
| 4 | Reserved | |||
| 8 | HBTxTime | |||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|
| SendingNodeIpV6 | Reserved | ||||||