M2PA is a peer to peer SS7 layer 2 protocol. It was designed to replace MTP2 protocol in the IP scenarios. M2PA has some advantages over MTP2:
- The traffic is not limited to classical 64 Kb/s SS7 link speed.
- Does not require the endpoints to have a classic SS7 64Kb/s wire between them, because the use of internet for data transport.
An M2PA connections is made between two SS7 nodes, which implies that both nodes must have their own SS7 Point Code.
M2PA can be used when is required to:
- interconnect two SS7 signaling nodes over IP.
- switch the SS7 traffic from a classic TDM to IP based
Note! This can be also done by using M2UA protocol but then no additional layer 3 processing can be done on the gateway part.
For a better understanding of the diferences between M2UA and M2PA you should read the this document.
As MTP2, M2PA has its own link status management procedure which is directly managed by the SS7 layer 3 attached to it.
Link status management
M2PA link states:
- OutOfService - The link is out of service;
- Alignment - The link alignment procedure is starting.
- ProvingNormal - Normal link proving period.
- ProvingEmergency - Emergency link proving period.
- Ready - The link is ready to process and deliver messages.
A M2PA link starts in the OutOfService state. If autostart configuration option is set to true, then the link will automatically start the alignment procedure. If autostart option is set to false then alignment procedure is started when it is requested by attached SS7 layer 3 or when it is manually requested from rmanager.
The image below illustrates the M2PA alignment procedure.
The M2PA protocol was designed to use two SCTP streams. Stream 0 for Link Status Messages and Stream 1 for Data Messages.
Registered port for M2PA protocol is 3565 and it uses the value 5 as protocol identifier in SCTP Payload Data chunk.
Protocol In YATE
M2PA implementation in YATE is located in ysig library. The method's declaration is in libs/ysig/yatesig.h and the implementation in libs/ysig/sigtran.cpp Class name SS7M2PA.
M2PA uses sigtransport module to obtain the transport layer and provides methods to interconnect with SS7 layer 3 protocols.
M2PA uses two SCTP streams. One for Link status messages (stream 0) and one for data messages (stream 1).
A M2PA link can be configured in ysigchan.conf file.
NOTE! M2PA is a created on demand! If it is not referenced by a layer 3 component it will not be created.
[m2pa] type=ss7-m2pa ; Component type sig=m2pa-sctp ; The underlying transport reference to sigtransport.conf t1=45000 ; T1 Alignment ready timer ~45s t2=5000 ; T2 Not Aligned timer ~5s t3=1000 ; T3 Aligned timer ~1s t4=500 ; T4 Proving timer Normal ~8s, Emergency ~0.5s ack_timer= 1000 ; Acknowledge timer ~1s conf_timer=50 ; Confirmation timer 1/2 t4 oos_timer=3000 ; Out Of Service timer wait_oos=500 ; Wait Out Of Service timer conn_test=50000 ; Timer used to declare connection down if conn_threshold is reached conn_threshold=3 ; Maximum number of link fail. If this counter is reached in conn_test interval the underlying transport is restarted max_unack=4 ; Maximum unacknowledged messages, max_unack+1 will force an ACK max_queue_size=256 ; Maximum number of messages send and not acknowledged by remote peer dumpMsg=false ; True to print M2PA messages autostart=true ; True to auto start link alignment
To find the status of a M2PA link you can run the command "status sig links" from rmanager.
M2PA Control commands:
|Pause||control M2PA_NAME pause||Pause this link message delivery|
|Resume||control M2PA_NAME resume||Align this link if it is not already aligned and it can auto start|
|Align||control M2PA_NAME align||Force this to start Align algorithm|
|TransRestart||control M2PA_NAME transport_restart||Force the underlying transport to reconnect the socket|
M2PA Control parameters update
- autostart; autostart=boolean Update autostart flag.
- Link creation failed
The M2PA link will fail to create if the underlying transport could not be created. This mainly happens if the section referenced by sig parameter from configuration does not exist in sigtransport.conf file.
- The link is not created. This can happen for two reasons:
- The link is not referenced by any layer 3 in ysigchan.conf file
- In M2PA configuration section the parameter enable is present with a negative value.
- The link status is OutOfService. The link will be in OutOfService state under the following conditions:
- The link was forced to be in OutOfService state by a rmanager command.
- The “autostart” configuration option is set to false.
- The transport layer could not establish a connection with the remote peer.
- Aborting Alignment. A M2PA link will abort the alignment in the following conditions:
- A message was send and it was not acknowledged by the remote peer before acknowledge timer expired.
- A message with wrong sequence number was received.
- There are to many unacknowledged messages by remote peer.
- The transport layer is down.
- The remote peer requested to go down.
- A rmanager command requested to go down.
NOTE! Under high CPU load and traffic the alignment can be dropped by the remote peer because the system may trigger the M2PA timers with a certain delay.
As for yate SS7 developers please avoid doing any heavy lifting in SigEngine timer tick thread.