Contents
Data Network +IMS (GMSC)
In this guide I present how to set up Data Network for IMS support in YateMMI step by step.
The IPs / GTs / MSISDNs and any other resources are internal conventions and don’t map to real settings in any way for this MCC/MNC operator.
Before setting up everything in YateMMI, I write an IP plan and a Network Plan. Then, I install the YateMMI and Yate Products, I setup Baicell, followed finally by the YateMMI set-up. Following every step in this order:
1. IP Plan
2. Network Plan (ports, GTs, PCs)
In this example below I configured two YateUCNs just to cover this Test:
IP Plan
I can configure various interfaces on Virtual Machines using VLAN or IP Aliases. I usually prefer the method with IP Aliases, as I will present below.
I need to create multiple interfaces due to the fact that GTP does not accept to change ports, this is done when having both PGW and SGSN on same server.
| Network | Broadcast | Gateway | Interface | Address | Role | Protocols | Equipment | Services |
|---|---|---|---|---|---|---|---|---|
| 10.101.99.165/16 | 10.101.255.255 | enp0s3 | 10.101.99.165 | SSH,MGMT | YateDRA/YateUCN/ YateHSS | |||
| 10.1.0.0/16 | 10.1.255.255 | enp0s3:1 | 10.1.99.165 | Internal communication | SCTP | YateSTP/YateDRA/YateSMSC/ YateUCN/HSS | ||
| 10.4.0.0/16 | 10.4.255.255 | enp0s3:4 | 10.4.99.165 | GMSC | YateUCN | voice | ||
| 10.30.0.0/16* | 10.30.255.255* | enp0s3:30* | 10.30.99.165* | SGi* | YateUCN* | data* | ||
| 10.25.0.0/16 | 10.25.255.255 | enp0s3:25 | 10.25.99.165 | PGW S5 | YateUCN | data | ||
| 10.35.0.0/16 | 10.35.255.255 | enp0s3:35 | 10.35.99.165 | PGW S8 | GTP-c/GTP-u | YateUCN | data | |
| 10.37.0.0/16** | 10.37.255.255** | enp0s3:37** | 10.37.99.165** | RAN/SMPP
Other services ** | YateUCN/YateSMSC** | SMS** | ||
| 100.84.0.0/16 | tun-pdn | 100.84.0.1 | tunnel | YateUCN | ||||
| 100.74.0.0/16 | tun-ims | 100.74.0.2 | tunnel | YateUCN | ||||
| subscribers IP range: 100.84.0.2 - 100.84.255.254 | ||||||||
| ims: 100.74.0.3 - 100.74.255.254 | ||||||||
* I use it when building a network but I didn’t need it for my tests.
** This is the recommended option but in my tests I use the MGMT IP (10.101.99.165) for RAN.
For the second YateUCN I’ll use this IP plan:
| Network | Broadcast | Gateway | Interface | Address | Role | Protocols | Equipment | Services |
|---|---|---|---|---|---|---|---|---|
| 10.101.33.213/16 | 10.101.255.255 | enp0s3 | 10.101.33.213 | SSH,MGMT | YateUCN | |||
| 10.1.0.0/16 | 10.1.255.255 | enp0s3:1 | 10.1.33.213 | Internal communication | SCTP | YateUCN | ||
| 10.4.0.0/16 | 10.4.255.255 | enp0s3:4 | 10.4.33.213 | GMSC | YateUCN | voice | ||
| 10.25.0.0/16 | 10.25.255.255 | enp0s3:25 | 10.25.33.213 | PGW S5 | YateUCN | data | ||
| 10.35.0.0/16 | 10.35.255.255 | enp0s3:35 | 10.35.33.213 | PGW S8 | GTP-c/GTP-u | YateUCN
| data | |
| 100.86.0.0/16 | tun-pdn | 100.86.0.1 | tunnel | YateUCN | ||||
| 100.76.0.0/16 | tun-ims | 100.76.0.2 | tunnel | YateUCN | ||||
| subscribers IP range: 100.86.0.2 - 100.86.255.254 | ||||||||
| ims: 100.76.0.3 - 100.76.255.254 | ||||||||
Notes:
I wrote a full guide of how to generate multiple interfaces using aliases, access it from this link: Multiple interfaces using aliases.
Network Plan (ports, GTs, PCs)
| Operator Name | Test operator |
| MCC | 232 |
| MNC | 03 |
| CC | 43 |
| NDC (National Destination Code) | 3323 |
| E.214 MGT (CC+NDC) | 433323 |
| MSISDN | 4333230000 – 4333230999 |
| SS7 international PC | 5162-5166 |
| Declared GT (global title) | 4333231000 – 4333231009 |
| IMSIs | 232030001000 – 232030009999 |
| Declared APN | internet.t-mobile.at (just an example for test) because this is the apn defined in the carrier bundle for this MCC/MCN |
PC
| Equipment | PC |
| YateSTP | 5001 – 5010 |
| YateHSS | 5011 |
| YateUCN1 | 5012 |
| YateSMSC | 5013 |
| YateUCN2 | 5166 |
GT
| Equipment | GT |
| YateSTP | – |
| YateHSS | 4333231001 |
| YateUCN1 | 4333231002 |
| YateSMSC | 4333231000 |
| YateUCN2 | 4333231003 |
| Equipment | Ports |
| YateSTP | 10.101.99.165:5010 |
| YateHSS | 10.101.99.165:5011 |
| YateUCN1 | 10.101.99.165:5012 |
| YateSMSC | 10.101.99.165:5013 |
| YateUCN2 | 10.101.99.165:5016 |
| Equipment | Ports |
| YateDRA | 8890 |
| YateHSS | 8891 |
| YateUCN1 | 8892 |
| YateUCN2 | 8893 |
| Listener | Ports |
| VLR SIP ran | 5061 |
| P-CSCF secured | 5060 |
| VLR SIP core | 5071 |
| SIP gmsc | 5070 |
| Listener | Ports |
| VLR SIP ran | 5061 |
| P-CSCF secured | 5062 |
| VLR SIP core | 5071 |
Install MMI and products
After creating the IP pan and the Network plan, I install YateMMI and the products I need.
Setup Baicell
For the next step, I setup the Baicell according to my configurations.
MMI Setup
After the preparation steps are done, I start adding all the info in YateMMI.
When I set up YateMMI, I carefully check that I pass through all the necessary steps:
- 1. Network Settings
- 2. Editing Network Settings
- 3. Equipment / Core
- 4. Profile Management
- 5. Subscriber Management
Network Settings
General:
MCC, MNC,CC,NDC based on known network info
MSISDN prefixes: 433323 (based on declared values)
SS7, Diameter and IMS support are enabled
SS7 step:
Dialect: ANSI
Netindicator: international
Connection type: M2PA
GT prefixes: 4333231 (based on declared values)
SMSC GT: 4333231000 (based on declared values)
DIAMETER step:
For the Diameter step, I check if the suggested value for Diameter Realms and IMS Domain are based on MCC and MNC.
APNs step:
- add internet.t-mobile.at APN
- IP version – iPv4v6
- QoS true
- Primary DNS IPv4 – 192.168.168.1 (this is used by our team for tests, in production usually the APNs Primary DNS IPv4 is 8.8.8.8)
- Aliases – internet.apn.epc.mnc003.mcc232.3gppnetwork.org
- QCI – 9
- GGSN/PGW Address (for S8 interface) – 10.35.99.165 (the IP used to build S8 interface in YateUCN1)
- add IMS APN
- IP version – iPv4v6
- QoS true
- P-CSCF IPv4 (this will be set from each YateUCN equipment from its APNs step)
- IMS Subsystem: checked
- GGSN/PGW Address (for S8 interface) 10.35.99.165 (the IP used to build S8 interface in YateUCN1)
Notes:
If I want to use IMS I have to configure a set of parameters for YateUCN/YateUCN5G. Check my guide guide for setting up IMS here.
Edit Network Settings
Node Params > YateUCN
- I check that my configuration parameters are as follows:
- Generate routing for S-CSCF URIs -> true (this is relevant if multiple YateUCNs are set)
- MME features ->default suggested value (Advertise IMS support is mandatory to be included for IMS setup)
- Combined: true (default suggested value)
- Fake CSFB: true (default suggested value)
- Fake CSFB no reg: true (this needs to be manually activated and it’s essential for IMS setup)
- PLMN: 23203 (default suggested value)
- LAC: 100 (default suggested value)
Node Params > YateHSS
- Since I’m configuring two YateUCNs, in the HSS step, I go to “Advanced” settings and make sure to configure this parameter:
- Route IMS -> true (otherwise, when the call is performed, it will search for CS reg instead of IMS reg)
Equipment / Core
YateSTP1
- Management interface IP* 10.101.99.165
- SS7 step
- Pointcode 5162
- IP 10.1.99.165
YateDRA1
- IP 10.101.99.165
- Diameter step
- Identity epc.mnc003.mcc232.3gppnetwork.org/dra1.epc.mnc003.mcc232.3gppnetwork.org – relay
- Listener 10.1.99.165
- Local port 8890
- Transport SCTP
- Accept rule – custom regexp – ^epc\.mnc003\.mcc232\.3gppnetwork\.org/
YateHSS1
- IP 10.101.99.165
- SS7 step
- Pointcode 5163
- GT 4333231001
- Local IP 10.1.99.165
- Local port 5011
- Remote port 5001
- Diameter step
- YateHSS/HLR Identity epc.mnc003.mcc232.3gppnetwork.org/hss1.epc.mnc003.mcc232.3gppnetwork.org
- Local IP(s)* 10.1.99.165
- Local Port 8891
- HSS
- Route IMS -> inherited (true)
YateSMSC1
- General settings
- IP 10.101.99.165
- Diameter support disable
- SMPP Server & Client support – not configured
- SS7 step
- Pointcode* 5164
- Global title* 4333231000 (this GT should also be set on SIMs)
- Local IP* 10.1.99.165
- Local Port 5013
- Remote Port 5003
YateUCN1
- General settings
- Management interface IP* 10.101.99.165
- GMSC support enabled
- GGSN/PGW support enabled
- SS7 step
- Pointcode* 5165
- Global title* 4333231002
- Local IP* 10.1.99.165
- Local Port 5012
- Remote Port 5002
- Diameter step
- YateUCN Identity epc.mnc003.mcc232.3gppnetwork.org/ucn1.epc.mnc003.mcc232.3gppnetwork.org
- Default priority 1
- Default realm 1
(if I don’t set the default priority and realm, diameter connection won’t work) - Local IP(s)* 10.1.99.165
- Local Port 8892
- MME/SGSN step
- NNSF node: 1 (same value as Code from MME identity – in the below section)
- MME configuration – Inherited (default settings set in YateUCN Node Params from Network Settings)
- Combine attach – Inherited (default settings set in YateUCN Node Params from Network Settings & Fake CSFB no reg is checked)
- PLMNS: 23203
- TAC: 1
- Group: 1
- Code: 1
- Name (Optional Identity MME Name to be sent to each eNodeB on S1Setup)
- S1AP SCTP -> Local IP: 10.101.99.165
- Local PDN (advanced setting): disabled
(If I want PGW set on same server, I disable ‘Local PDN’ from advanced settings MME step in YateUCN, otherwise PGW will be ignored.)
- VLR/CSCF step
- GW call: sip/sip:*@10.4.99.165:5070
- GW Connection name: core (based on SIP listener role – if I don’t set it, call won’t work properly)
- Always GMSC: true
- VLR sip listener
- Role RAN
- IPv4 address 10.101.99.165
- Type UDP
- Port 5061
- VLR sip listener
- Role core
- IPv4 address 10.4.99.165 (same IP interface with GMSC)
- Type UDP
- Port 5071
- P-CSCF listener
- IPv4 address 100.74.0.2 (same as IPv4 Interface in GGSN/PGW step -> Tunnels -> tun-ims)
- Type UDP, TCP
- Secure true
- Secure port 5062
- Generate routing for S-CSCF URIs – inherited (true)
- S-CSCF SIP URI – sip:ucn1.ims.mnc003.mcc232.3gppnetwork.org ( I also set the SIP URI in the IMS Profile as S-CSCF)
- Accounts step
- SIP Listeners
- Role GMSC
- IPv4 address 10.4.99.165
- Type UDP
- Port 5070 (same with GW call)
The type of ‘gmsc’ and ‘core’ SIP listeners should be ‘udp’.
- GMSC step
- In Route GMSC (in this setup only ‘gmsc’ is enough, I don’t need it for ‘core’)
- HLR GT 4333231001 (the GT from the HLR)
- No Unknown true
- Route IMS true
- Camel phases phase1, phase2
- GGSN/PGW step
- Tunnels
- tun-pdn
- IPv4 Pool 100.84.0.2 – 100.84.255.254
- IPv4 Interface 100.84.0.1/16 (local NAT was used)
- Interface MTU 1400
- tun-ims
- IPv4 Pool 100.74.0.3 – 100.74.255.254
- IPv4 Interface 100.74.0.2/16 (same as IPv4 Interface in VLR/CSCF step -> P-CSCF listener)
- Interface MTU 1400
- tun-pdn
- Tunnels
- GTP step
- S1 GTP interface(s)
- IPv4 GTP-U address 10.101.99.165
- S5 GTP interface(s)
- IPv4 GTP-U address 10.25.99.165
- S8/Gp/Gn GTP
- Name: internal
- IPv4 GTP-U address 10.35.99.165
- S1 GTP interface(s)
- APNs step
- PGW selection (internet.t-mobile.at) – 10.35.99.165 (from My Network/Local S8) – this is the default selection due to APN settings in Network Settings
- PGW selection (IMS) – 10.35.99.165 ( from My Network/Local S8) – this is the default selection due to APN settings in Network Settings
- P-CSCF IPv4 (IMS) 100.74.0.2 (Local P-CSCF)
YateUCN2
- General settings
- Management interface IP* 10.101.33.213
- GMSC support enabled
- GGSN/PGW support disabled
- SS7 step
- Pointcode* 5165
- Global title* 4333231003
- Local IP* 10.1.33.213
- Local Port 5016
- Remote Port 5006
- Diameter step
- YateUCN Identity epc.mnc003.mcc232.3gppnetwork.org/ucn2.epc.mnc003.mcc232.3gppnetwork.org
- Default priority 1
- Default realm 1
(if I didn’t set the default priority and realm, diameter connection won’t work) - Local IP(s)* 10.1.33.213
- Local Port 8893
- MME/SGSN step
- NNSF node: 1 (same value as Code from MME identity – in the below section)
- MME configuration – Inherited (default settings set in YateUCN Node Params from Network Settings)
- Combine attach – Inherited (default settings set in YateUCN Node Params from Network Settings & Fake CSFB no reg is checked)
- PLMNS: 23203
- TAC: 2
- Group: 2
- Code: 2
- Name (Optional Identity MME Name to be sent to each eNodeB on S1Setup)
- S1AP SCTP -> Local IP: 10.1.33.213
- Local PDN (advanced setting): disabled – we want to use the PGW from the UCN1
(If I want PGW set on same server, I will disable ‘Local PDN’ from advanced settings MME step in YateUCN, otherwise PGW will be ignored.)
- VLR/CSCF step
- GW call: sip/sip:*@10.4.99.165:5070 (gmsc listener from UCN1)
- GW Connection name: core (based on SIP listener role – if I don’t set it, call won’t work properly)
- Always GMSC: true
- VLR sip listener
- Role ran
- IPv4 address 10.101.33.213
- Type UDP
- Port 5061
- Role core
- IPv4 address 10.4.33.213 (same IP interface with GMSC)
- Type UDP
- Port 5071
- Role ran
- P-CSCF listener
- IPv4 address 100.76.0.2
- Type UDP, TCP
- Secure true
- Secure port 5062
- Generate routing for S-CSCF URIs – inherited (true)
- S-CSCF SIP URI – sip:ucn2.ims.mnc003.mcc232.3gppnetwork.org ( I also set the SIP URI in the IMS Profile as S-CSCF)
- Accounts step
- SIP Listeners
- Role GMSC
- IPv4 address 10.4.33.213
- Type UDP
- Port 5070 (same with GW call)
The type of ‘gmsc’ and ‘core’ SIP listeners should be ‘udp’.
- Tunnels
- tun-pdn
- IPv4 Pool 100.86.0.2 – 100.86.255.254
- IPv4 Interface 100.86.0.1/16 (local NAT was used)
- Interface MTU 1400
- tun-ims
- IPv4 Pool 100.76.0.3 – 100.76.255.254
- IPv4 Interface 100.76.0.2/16
- Interface MTU 1400
- tun-pdn
- GTP step
- S1 GTP interface(s)
- IPv4 GTP-U address 10.101.33.213
- S5 GTP interface(s)
- IPv4 GTP-U address 10.101.33.213
- S8/Gp/Gn GTP
- I do not set it since PGW is disabled
- S1 GTP interface(s)
- APNs step
- P-CSCF IPv4 (ims) 100.76.0.2 (Local P-CSCF)
Notes:
- If I set GMSC, then I will set the parameter of the in call handle configuration file ‘route_gmsc_s_cscf_local‘ to ‘no’. Current default value of the parameter is “yes”. While enabled, the route will be handled by the ucn_vlr module. Otherwise the call is routed outside using SIP.
In order for the call to work on IMS network with GMSC I need to set in ucn_call_handling-custom.conf:
[general]
route_gmsc_s_cscf_local=no
Profile Management
SIM Profile
- I choose to add default profiles (using ‘Add default profile’ button)
PS Profile
- APN name is the one requested by the Baicell
EPS Profile
- Default EPS Profile: APN name is the one requested by the Baicell
IMS Profile
- Checking Domain and S-CSCF field values
- Ex.:
- Domain: ims.mnc003.mcc232.3gppnetwork.org
- S-CSCF: sip:ucn1.ims.mnc003.mcc232.3gppnetwork.org (same as set in UCN – VLR/CSCF step)
Subscriber Management
SIM
- Import SIMs (I use decrypt key if needed) with SIM Profile – DefaultISIM
- Add MSISDN to each SIM (Ex. 43332300008) with IMSI; ICCI; IMS Profile = DefaultIMS; Active = true; IMPI and IMPU.
- Edit IMPI and IMPU to each SIM
- Ex.
- IMPI – Private Identity : 232030000020008@ims.mnc003.mcc232.3gppnetwork.org
- IMPU – Public Identity : sip:232030000020008@ims.mnc003.mcc232.3gppnetwork.org
- Ex.
The SIM cards I use should also contain according information: IMSI, Domain, IMPI, IMPU, SMSP with SMSC GT.