Data Network + IMS ( GMSC )

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)

3. Install YateMMI and products
 
4. Setup Baicell
 
5. YateMMI setup
 

In this example below I configured two YateUCNs just to cover this Test:

 
Network with 2 YateUCNs with GMSC, when YateUCN2 uses GMSC and PGW of the YateUCN1
– Baicell is connected to YateUCN2, and there is no Baicell connected to YateUCN1
– YateUCN2 has GMSC support disabled but uses GMSC from UCN1
– YateUCN2 has PGW support disabled and doesn’t have s8 set; it uses PGW from YateUCN1
– for YateUCN1 route_gmsc_s_cscf_local=no is set in custom in ucn_call_handling-custom.conf in order for the call to work
– both S-CSCF URIs are set in IMS Profile

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.

Unless I set two YateUCNs with different features support, I need a workaround for using both features on same machine.
NetworkBroadcastGatewayInterfaceAddressRoleProtocolsEquipmentServices
10.101.99.165/1610.101.255.255 enp0s3 10.101.99.165 SSH,MGMT YateDRA/YateUCN/
YateHSS
10.1.0.0/1610.1.255.255 enp0s3:1 10.1.99.165 Internal communication SCTPYateSTP/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/1610.25.255.255 enp0s3:25 10.25.99.165PGW S5 YateUCNdata
10.35.0.0/1610.35.255.255 enp0s3:35 10.35.99.165 PGW S8 GTP-c/GTP-uYateUCNdata
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.1tunnel 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.

*** In order for the internet of Subscribers to work, if I don’t set a gateway, then I have to configure a local NAT using iptables. Also I always check that ip_forward is 1.

For the second YateUCN I’ll use this IP plan:

NetworkBroadcastGatewayInterfaceAddressRoleProtocolsEquipmentServices
10.101.33.213/16 10.101.255.255 enp0s3 10.101.33.213 SSH,MGMT YateUCN
10.1.0.0/1610.1.255.255 enp0s3:1 10.1.33.213 Internal communication SCTPYateUCN
10.4.0.0/16 10.4.255.255 enp0s3:4 10.4.33.213 GMSC YateUCN voice
10.25.0.0/1610.25.255.255 enp0s3:25 10.25.33.213PGW S5 YateUCN data
10.35.0.0/1610.35.255.255 enp0s3:35 10.35.33.213 PGW S8 GTP-c/GTP-uYateUCN

data
100.86.0.0/16 tun-pdn 100.86.0.1tunnel 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:

Network Plan (ports, GTs, PCs)

– check information from onboarding form
– for interconnect (external) – info defined in IR21 (GTs, PCs, network type, MCC, MNC,…APN)
Operator NameTest operator
MCC232
MNC03
CC43
NDC (National Destination Code)3323
E.214 MGT (CC+NDC)433323
MSISDN4333230000 – 4333230999
SS7 international PC5162-5166
Declared GT (global title)4333231000 – 4333231009
IMSIs232030001000 – 232030009999
Declared APNinternet.t-mobile.at (just an example for test) because this is the apn defined in the carrier bundle for this MCC/MCN

PC

EquipmentPC
YateSTP5001 – 5010
YateHSS5011
YateUCN15012
YateSMSC5013
YateUCN25166

GT

EquipmentGT
YateSTP –
YateHSS4333231001
YateUCN14333231002
YateSMSC4333231000
YateUCN24333231003
SIGTRAN connections
 
EquipmentPorts
YateSTP10.101.99.165:5010
YateHSS10.101.99.165:5011
YateUCN110.101.99.165:5012
YateSMSC10.101.99.165:5013
YateUCN210.101.99.165:5016
DIAMETER connections
 
EquipmentPorts
YateDRA8890
YateHSS8891
YateUCN18892
YateUCN28893
SIP UCN1

ListenerPorts
VLR SIP ran5061
P-CSCF secured5060
VLR SIP core5071
SIP gmsc5070
SIP UCN2
 
ListenerPorts
VLR SIP ran5061
P-CSCF secured5062
VLR SIP core5071

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
  • 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
  • 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
    • 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
  • 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
  • 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

The SIM cards I use should also contain according information: IMSI, Domain, IMPI, IMPU, SMSP with SMSC GT.