M3UA is part of SS7 SIGTRAN protocol stack and it was designed for remote processing of SS7 messages above MTP3 protocol, mostly ISUP and SCCP.
It operates in a gateway client model.
The gateway acts as a MTP User Part and it has the purpose to:
- Listen for the new incoming connections and creating new client's peers.
- Manage the connected clients.
- Inform the clients about route status changed.
- Route the MTP User Part messages to the most eligible clients.
The client acts as a SS7 layer 3 protocol.
The only purpose of this protocol is to provide remote MTP User Part message processing.
In the image above we have one M3UA Gateway, which is interconnected with three SS7 nodes:
- Node 1: represents a SS7 SEP with an ISUP User Part.
- Node 2: represents a SS7 SCCP GT routing node.
- Node 3: represents a general SS7 node.
And three SS7 M3UA Clients which are connected to the M3UA Gateway:
- M3UA CL1: This client will process only ISUP traffic with circuits in range 1-100;
- M3UA CL2: This client will process only SCCP traffic with Global Title equal to 123456789;
- M3UA CL3: This client will process all traffic which comes from point code ITU 1.
As we can see the SS7 User Part traffic will be processed by the connected clients.
But this does not means that all the User Part traffic, at the gateway side, should be processed remotely.
At the gateway side can exist SS7 User Parts that can process the User Part traffic as well.
The figure below exemplifies such an scenario.
As we can see in the image above we have an M3UA gateway which is interconnected with a SS7 SCCP node.
The gateway has only one connected client which will only process SCCP messages which are for SSN 55. The rest of the received SCCP messages will be processed by the SCCP User Part present on the gateway.
Each M3UA client is identified by an ASPID (ASP Identifier), and each client has a list of routing contexts.
A routing contexts represents an id for a specific routing key.
A routing key represents a M3UA routing filter.
A routing key can contain the following fields:
- Routing Context
Unique identifier for this routing key.
When the gateway receives a message and it matches one or more of the following fields it will send the message to the clients that can be identified by the Routing Context of this key.
- OPC (Originating Point Code)
- DPC (Destination Point Code)
- SIF (Service Information Field)
- Network Type (MTP3 Network Indicator)
- CIC (ISUP circuits)
The following fields represents an non protocol standard extension added in YATE:
- GT (SCCP Global Title)
- SSN (SCCP Subsystem Number)
The M3UA routing algorithm is based on a list of routing keys.
When it receives a message it identifies the Routing Contexts than can process the message.
After the processing list has been build it selects the Routing Context that matches most of the fields from a Routing Key and based on the traffic mode it sends the message to the clients that are identified by the selected Routing Context.
Each M3UA client is identified by an ASPID (ASP Identifier).
After a client successfully established the connection with the gateway it sends ASP_UP message with it's ASP_ID.
If the gateway does not detect any conflict between the ASP_ID and the other connected clients ASP_ID's it sends ASP_UP_ACK message back to the client.
After the client received the ASP_UP_ACK message from the gateway it sends ASP_ACTIVE message with a list of routing contexts for the gateway to activate.
After a M3UA gateway receives an ASP_ACTIVE message it tries to activate all the routing contexts present in the ASP_ACTIVE message.
If the newly active requested client operates in a Override traffic mode, the gateway will send MGM_NOTIF Alternate ASP Active message, to all active clients that had an active Routing Context present in the newly active requested client Routing Contexts list.
After the gateway activated as many routing contexts that it can, it replies to the client with an ASP_ACTIVE_ACK message which contains all routing contexts that were activated.
When a M3UA client wishes to become inactive it will send an ASP_INACTIVE message to the gateway with a list of routing contexts that it wishes to inactivate. After the gateway received ASP_INACTIVE message, it will inactivate all requested Routing Contexts and will send ASP_INACTIVE_ACK message back to the client with the list of inactivated Routing Contexts.
After the gateway successfully inactivated a client, it will check if in the list of inactivated Routing Contexts exists at least one active client per Routing Context. If no active client exists for an inactivated Routing Context the gateway will send MGM_NOTIF ASP Pending message to all connected clients except the newly inactivated one, to notify them that if they desire to activate a Routing Context now will be a great time to do it.
M3UA runs over SCTP transport type.
It requires at least two SCTP streams; one for management messages and one for data traffic. But multiple streams can be used for data traffic.
The reserved port for M3UA Gateway to accept incoming connections is 2905. And it uses value of 3 as SCTP payload Protocol Identifier.
Currently YATE can operate as a M3UA Client and as a M3UA Gateway. M3UA is part of ysig YATE library. The methods declaration are located in libs/ysig/yatesig.h file and the implementation in libs/ysig/sigtran.cpp.
The M3UA Client implementation in YATE is seen as a SS7 Layer 3.
[m3ua] ; The component type. Must be ss7-m3ua ; type=ss7-m3ua ; netind2pctype: string: Comma separated list of point code types used to map an ; incoming network indicator to a specific point code type ; This option is required and is used to configure a SS7 MTP3 network ; The list must contain either a singe type or 4 values indicating the point ; code type for International, SpareInternational, National and ReservedNational ; network indicators ; If only a single type is specified it will be used to configure all types of ; network indicators ; See the ISUP pointcodetype option for allowed values ; NOTE: An incoming packet with an unconfigured network indicator will be dropped ; Examples: ; netind2pctype=ITU ; netind2pctype=ITU,ANSI,ITU,ITU ; netind2pctype=ANSI8,ITU,ANSI,ITU ;netind2pctype= ; netindicator: keyword: Default value of Network Indicator bits ; Allowed values: international, spareinternational, national, reservednational ;netindicator=national ; route: string: Build a destination route for the SS7 network ; The format of this option is pointcodetype,label ; This parameter can be repeated to build multiple destination routes ; ; Example: route=ITU,2-2-2 ;route= ; NOTE: route are present for monitoring purpose. ; local: string: Declare a local pointcode for the SS7 network ; The format of this option is pointcodetype,label ; Example: local=ITU,2-2-4 ;local= ; client: The sigtran client that this m3ua should use. ;client= ; routing-context: Integer: The routing context used by this m3ua. ; routing-context=1 ; network-appearance: Integer: The network appearance used by this m3ua ; network-appearance=1 ; daud_timer: Time in milliseconds used to send DAUD messages if a route is not allowed. ; Default to 60000 ; daud_timer=60000 ;[m3ua-client] ; ; type=ss7-m3ua-client ; sig: Reference to sctp transport ; sig=sctp_m3ua ; aspid: Integer: The ASP identifier of this client ; aspid=1
The M3UA client does not respond to status command.
|Status||control M3UA_NAME status||Show the state of this client|
|RoutesStatus||control M3UA_NAME routes_status||Show the routes status|
|Activate||control M3UA_NAME activate||Activate this M3UA|
|Inactivate||control M3UA_NAME inactivate||Inactivate this M3UA|
The M3UA Gateway implementation in YATE is seen as a SS7 User Part.
;[m3ua-gateway] ;type=ss7-m3ua-gateway ; sig The underlying transport of this gateway ;sig=sctp-m3ua-gw ; router: string: Name of the SS7 Router to attach to ; A boolean false value disables attaching a router (unlikely) ;router=ss7router ; network: string: Name of linkset to attach to if router is disabled ; This allows direct connection without MTP management (unlikely) ;network= ; asp_switch: Time interval in milliseconds for this gateway ; to fire bad client configuration protection ;asp_switch=5000 ; asp_ignore: Time interval in milliseconds used by this gateway ;to add all feature overridden client up requests in a blacklist ; default to 600000 ;asp_ignore=600000 ; max_asp_switch : integer. The maximum counter when a client ;up request can be overridden. If this counter has been reached ;and asp_switch timer has not expired, the client override ;protection will be fired. ; Value applied on reload ;max_asp_switch=5 ; expect_asp_id: boolean: True if the gateway should accept asp ;up requests only with asp id. ; Value applied on reload ;expect_asp_id=true ;pc-type: keyword: ITU, ANSI, ANSI8, China, Japan, Japan5; ; The SS7 pointcode type. Default to ITU ; contexts: list; Comma separated list of integers each representing a ;routing context. ; The list can be updated on reload. ; contexts=1,2,3,4,.... ; For each routing context can be specified a set of parameters. ; Available parameters: ; Routing Params ; - opc: integer: Originating pointcode ; - dpc: integer: Destination pointcode ; - sif: integer: Service information field ; - network: keyword : international,spareinternational, national, ; reservednational; MTP3 network indicator ; - cic: list of circuits (like 1,3,5-9) ; - ssn: SCCP Subsystem Number ; - gt: SCCP Global Title ; Other params ; - appearance: integer: Network appearance. ; - priority: integer: MTP3 message priority ; - traffic: keyword: override, loadshare, broadcast; traffic mode; ; default to override ; To specify additional context parameters you need to specify the routing ; context for which the parameter should be applied followed by '.' (dot) and the ; parameter name. (Eg.: 1.opc=1; 2.network=national) ; NOTE: The presence of this parameters is very important for m3ua routing. ; If you specify 2 routing contexts, eg. 1,2 and both have dpc = 2, but routing ; context 2 has opc = 1; then all the messages from the pointcode 1 to ; pointcode 2 will be send to the client with routing context = 2; ; In the MSU parameter list can be specified the routing context of the client that ; should receive the message. ; routing-context=client_context
M3UA Gateway status
The M3UA Gateway status can be shown by running the command “control M3UA-GW-NAME” in rmanager.
M3UA Gateway control
|Activate||control M3UA_GW_NAME activate aspid=x||Activate the client with aspid=x|
|Inactivate||control M3UA_GW_NAME inactivate aspid=x||Inactivate the client with aspid=x|
|Drop||control M3UA_GW_NAME drop aspid=x||Drop the connection from the client with aspid=x|