YateUCN replaces the MSC/VLR, SGSN, GGSN and GMSC of a 2G network, and the MME,SGW and PGW of a 4G network.

The main request to configure a node is set_node. You will send it multiple times to an UCN server, depending on the type of node you want to configure.

ucn (MSC/VLR, SGSN, GGSN, MME, SGW, PGW)

You can use it to configure all types of settings or you can use specific requests for each features: set_diameter_node, set_mme_sgsn_node, etc.

Request: set_node

This request is used to configure a YateUCN server. It mainly configures the SS7/Diameter settings, but also access points and other information needed for the ps/eps features.

The main parameters are:

node_type: “ucn” / “stp”

ss7

  • local – information about the local node (the actual YateUCN server that you are configuring). The information about the local node is organized in:
    • common – common settings that will probably be used for all the subnodes. Some of this information are network settings while others are equipment specific
    • vlr/sgsn/mme/pgw (only when configuring node_type ucn). You can override some of the common parameters. Ex: set a different gt for the VLR subnode.
  • linksets – configure the linksets and links to the STP
  • gt_route – configure the GT routes table

access_points – configure the access points that the customers are allowed to use

tunnels – configure the tunnels (GTP) used the the ps/eps service

diameter

  • identities – configure local nodes
  • listeners – configure the listeners
  • connections – configure outgoing connections

s1ap

  • common – configure common/default S1AP parameters
  • listeners – configure the S1AP listeners

restart – boolean. Whether to restart now and apply settings sent in the same request or previously

{ “node_type”: “ucn” / “stp”,
  “ss7”: {
    “local”: {
      “common”: {
          “dialect”: “ITU” / “ANSI”,
          “netindicator”: “national” / “reservednational” / “international”,
          “pointcode”: NNN, // integer representation, range depends on dialect
          “gt”: “NNNNNNNNNN”,
          “ip”: [“x.x.x.x” / “xx:xx::xx”], // Local IP address for signaling protocols
          “nnsf_node”: NNN, // Node Resource Index for Network Node Selection Function
          “nnsf_bits”: N, // Bits used from (P)TMSI for NNSF
          “ip_gtp”: “x.x.x.x” / “xx:xx::xx”, // IP address for GTP
          “def_smsc”: “NNNNNNNNNN”, // optional GT to use instead of malformed SMSC
          “empty_begin”: false / true / 0 / 1, // start SMS delivery with an empty TCAP Begin
      },
      “vlr”: {  // parameters and overrides for UCN/VLR+MSC only
        “nnsf_node”: NNN,  // optional override
        “nnsf_bits”: N,  // optional override
      },
      “sgsn”: {  // parameters and overrides for UCN/SGSN only
        “nnsf_node”: NNN,  // optional override
        “nnsf_bits”: N,  // optional override
     },
     “mme”: {  // parameters and overrides for UCN/MME only
       “identity”: {
          “plmns”: [ “NNNNN”, “NNNNNN”, … ],  // List of MCCMNC
          “tac”: NNN,
          “group”: NNN,
          “code”: NN,  // LTE specific nnsf_node override, must be unique per group, 0 to 255
          “name”: “some-name-here”,  // optional
        },
     },
     “pgw”: {  // parameters and overrides for UCN/PGW only
       “ip_gtp_c”: “x.x.x.x” / “xx:xx::xx”,  // IP address for GTP-C
       “ip_gtp_u”: “x.x.x.x” / “xx:xx::xx”,  // IP address for GTP-U
         },
      },
      “linksets”: [
         { “type”: “MTP3” / “M3UA”,
           “pointcode”: NNN,  // integer representation, range depends on dialect
           “route”: [ NNN, NNN, … ],  // List of PCs in integer representation to route through this STP
           “gt”: [ “NNNNN”, “NNNNN”, … ],  // List of GT prefixes to route through this STP, can be just [ “*” ]
           “ip”: [“x.x.x.x” / “xx:xx::xx”],  // Remote IP address
           “aspid”: NNN               // only for M3UA
           “contexts”: N, N, …     // only for M3UA, comma separated list of context numbers
           “links”: [
               { “port”: ,    // port on the adjacent node
                 “local_ip”: []  // optional local IP address
                 “local_port”:  // optional local port number
               },
               // … other links if necessary
          ]
        },
        // … linkset for the second STP
     ],
  }
  “access_points”: [                  // only for ucn node
        { “name”: “ap-name-without-dots”,
          “tunnel”: “name-of-the-tunnel”,  // must match one entry in tunnels – see below
          “aliases”: “comma, separated, list, of.other.names”,   // optional
          “ipv”: “ipv4” / “ipv6” / “ipv4v6” / “ipv4_or_v6” / “ipv6_or_v4”,
          “qos”: “xx xx xx”, // optional, 2G/3G specific, hex encoded
          “qci”: N, // optional, 4G specific, 1 to 9
          “ordered_delivery”: false / true / 0 / 1, // not recommended – advanced setting
          “charging”: false / true / 0 / 1,
          // Protocol Configuration Options
          “primary_dns_ipv4”: “x.x.x.x”, // optional but likely needed
          “secondary_dns_ipv4”: “x.x.x.x”, // optional
          “primary_dns_ipv6”: “xx:xx::xx”, // optional but likely needed for IPv6 capable APs
          “secondary_dns_ipv6”: “xx:xx::xx”, // optional
          “p_cscf_ipv4”: “x.x.x.x”, // optional but likely needed for AP “ims”
          “p_cscf_ipv6”: “xx:xx::xx”, // optional
          “mtu_ipv4”: NNNN, // optional, 552 to 9216
          “restart_cdr”:NNNNNNN, // optional, 300 to 2678400 seconds. Interval at which CDRs should be restarted for an active data session
          “interim_cdr”:NNNNN // optional, 30 to 86400 seconds. Interval at which interim CDRs should be generated for an active data session
       },
       // … arbitrary number of APs
    ],
     “tunnels”: [                          // only for ucn node
          { “name”: “name-of-the-tunnel”,
            “ipv4_gtpu_address”: “x.x.x.x”, // optional
            “ipv6_gtpu_address”: “xx:xx::xx”, // optional, but at least one of them should be present
            “dscp”: “normal” / “expedited” / … , // search in Socket.cpp for: // DSCP
            “dscp_per_qci”: { // optional
               “N”: “normal” / “expedited” / … , // N can be 1 to 9
               “N”: “normal” / “expedited” / … , // can be repeated multiple times
           },
           // End user IP allocation pools
            “pool_ipv4”: [   // optional
                “x.x.x.x-x.x.x.x”,
                “x.x.x.x-x.x.x.x”, // can be repeated multiple times
           ],
           “pool_ipv6”: [   // optional
               “xx:xx:xx:xx::-xx:xx:xx:xx::”, // only the upper 64 bits can be specified
               “xx:xx:xx:xx::-xx:xx:xx:xx::”, // can be repeated multiple times
           ],
       },
        // … arbitrary number of tunnels
    ]
}

Set S1AP example:

“s1ap”: {
   “common”: {
       “streams”: 5
   },
   “listeners”: [
      {
         “local_ip”: “192.168.168.194”,
      },
      {
         “local_ip”: “192.168.168.194”,
         “local_port”: 36413,
         “streams”: 2,
         “payload”: 19,
         “dscp”: “expedited”,
         “sctp_params”: {
           “max_retrans”: 3
          }
       }
   ]
}

Request: set_mme_sgsn_node

This request allows configuring of the MME/SGSN node of the YateUCN.

>{
“request” : “set_mme_sgsn_node”,
“node” : “ucn”,
“params” : {
   // MME parameters
    “identity”: {
      “plmns”: [NNNNN, NNNNN, …], // Comma separated array of supported PLMNs in MCCMNC form
      “group”: NNNNN, // 0 – 65535
      “tac”: NNNNN, // 0 – 65535
      “code”: NNN, // 0 -255
      “name”: “Name_of_MME” // string
    },
    “integrity_algos”: “128-EIA1,128-EIA2,128-EIA3”, // Comma separated list of integrity algorithms activated for NAS
    “cipher_algos”: “EEA0,128-EEA1,128-EEA2,128-EEA1”, // Comma separated list of encryption algorithms activated for NAS
    “enb_cipher_algos”:”EEA0,128-EEA1,128-EEA2,128-EEA1?, // Comma separated list of encryption algorithms to announce to the ENBs
    “enb_integrity_algos”:”128-EIA1,128-EIA2,128-EIA3?, // Comma separated list of integrity algorithms to announce to the ENBs
    “cs_plmn”:”NNNNN”, // string, optional. PLMN Identity for CS combined attach. Defaults to selected LTE PLMN
    “cs_lac”:NNNNN, // integer, 0 – 65533. Location Area Code for CS combined attach
    // SGSN parameters
    “nnsf_bits”: NN, // integer, 0 – 10. Number of P-TMSI bits allocated for Network Node Selection Function
    “nnsf_node”: NNN, // integer, 0 – 225 when SGSN is combined with MME, 0 – (2^nnsf_bits – 1) otherwise. Node index for Network Node Selection Function
     // Common MME/SGSN paramters
    “restart_cdr”: NNNNNNN, // optional, 300 to 2678400 seconds. Interval at which CDRs should be restarted for an active data session
    “interim_cdr”: NNNNN // optional, 30 to 86400 seconds. Interval at which interim CDRs should be generated for an active data session
    “local_pdn”: true/false, // Only allow the embedded PGW to provide any PDN connectivity
    “extra_params”: { // extra parameters used for configuration
    “enb_cipher_algos”:”EEA0,128-EEA1,128-EEA2,128-EEA1?, // Comma separated list of encryption algorithms to announce to the ENBs
    “enb_integrity_algos”:”128-EIA1,128-EIA2,128-EIA3?, // Comma separated list of integrity algorithms to announce to the ENBs
  },
  “gtps”:{ // configure S1 and S5 GTP interfaces
    “s1”:[ // configure S1 (RAN-side) GTP interfaces. Array of GTP endpoints that are to be configured. Setting at least one GTP endpoint is mandatory
      {
         “name”:”ran”, // optional, name of endpoint to be created
         “ipv4_gtpu_address” : “x.x.x.x”, // IPv4 address for GTP-u
         “ipv4_gtpc_address” : “x.x.x.x”, // IPv4 address for GTP-c. If not provided, it will be the same address as for GTP-u
         “ipv6_gtpu_address” : “xx:xx::xx”, // IPv6 address for GTP-u
         “ipv6_gtpc_address” : “xx:xx::xx”, // IPv6 address for GTP-c.
         “dscp” : “normal” / “expedited” / … , // search in Socket.cpp for: // DSCP
         “gtpc_dscp”: “normal” / “expedited” / … , // same as DSCP, overrides “dscp” value for GTP-c
         “gtpu_dscp”: “normal” / “expedited” / … // same as DSCP, overrides “dscp” value for GTP-u
      },
      {
           … // other S1 GTP endpoint
      }
    ],
     “s5”: [ // configure S5 GTP interfaces. Array of GTP endpoints to be configured. If a remote PGW is used for PDN connectivity, at least one GTP endpoint is mandatory
      {
         “name”: “core”, // optional, name of endpoint to be created
         “ipv4_gtpu_address” : “x.x.x.x”, // IPv4 address for GTP-u
         “ipv4_gtpc_address” : “x.x.x.x”, // IPv4 address for GTP-c. If not provided, it will be the same address as for GTP-u
         “ipv6_gtpu_address” : “xx:xx::xx”, // IPv6 address for GTP-u
         “ipv6_gtpc_address” : “xx:xx::xx”, // IPv6 address for GTP-c.
         “dscp” : “normal” / “expedited” / … , // search in Socket.cpp for: // DSCP
         “gtpc_dscp”: “normal” / “expedited” / … , // same as DSCP, overrides “dscp” value for GTP-c
         “gtpu_dscp”: “normal” / “expedited” / … , // same as DSCP, overrides “dscp” value for GTP-u
         “gtpc_v2”:true
      },
     {
         … // other S5 GTP endpoint
      }
    ]
   }
  }
}

The same configuration can be obtained through the set_node request by putting the all parameters of the params object from the set_mme_sgsn_node in a mme_sgsn object, except for extra_params. See example below:

{
  “request” : “set_node”,
  “node” : “ucn”,
  “params”: {
    “mme_sgsn”:{
      “identity”: {
        “plmns”: [NNNNN, NNNNN, …],
        “group”: NNNNN,
        “tac”: NNNNN,
        …
      },
      “nnsf_bits”: NN,
      “nnsf_node”: NNN,
      “restart_cdr”: NNNNNNN,
      “interim_cdr”: NNNNN,
      “local_pdn”: true/false,
      “gtps”:{
        “s1”:[
           {
             “ipv4_gtpu_address” : “x.x.x.x”,
             “dscp” : “expedited”
           },
           {
             “name”:”other”,
             “ipv4_gtpu_address” : “x.x.x.x”,
             “dscp” : “expedited”,
             “gtpc_v2”:true
           }
         ],
         “s5”: [
           {
             “ipv4_gtpu_address” : “x.x.x.x”,
             “ipv4_gtpc_address” : “x.x.x.x”,
             “dscp” : “expedited”
            }
          ]
        }
     },
     “extra_params”:{
       “enb_cipher_algos”:”EEA0?,
       “enb_integrity_algos:””128-EIA1,128-EIA2”
     }
  }
}

Request: set_numbers

Only for the UCN node.

{ “type”: “roaming”/”handover”,
  “numbers”: [ .. ]
}