forked from acouzens/open5gs
pgw is done
This commit is contained in:
parent
60ac1dbfe6
commit
e7d3d2f4da
|
@ -917,6 +917,7 @@ status_t mme_context_parse_config()
|
|||
else if (!strcmp(gtpc_key, "apn"))
|
||||
{
|
||||
apn = yaml_iter_value(>pc_iter);
|
||||
printf("apn = [%s]\n", apn);
|
||||
}
|
||||
else
|
||||
d_warn("unknown key `%s`", gtpc_key);
|
||||
|
|
|
@ -3,7 +3,11 @@
|
|||
#include "core_pool.h"
|
||||
#include "core_index.h"
|
||||
#include "core_lib.h"
|
||||
|
||||
#include <mongoc.h>
|
||||
#include <yaml.h>
|
||||
#include "yaml_helper.h"
|
||||
|
||||
|
||||
#include "fd_lib.h"
|
||||
#include "gtp_path.h"
|
||||
|
@ -136,7 +140,7 @@ static status_t pgw_context_validation()
|
|||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t pgw_context_parse_config()
|
||||
status_t pgw_context_parse_old_config()
|
||||
{
|
||||
status_t rv;
|
||||
config_t *config = &context_self()->config;
|
||||
|
@ -169,6 +173,7 @@ status_t pgw_context_parse_config()
|
|||
{
|
||||
self.fd_conf_path = bson_iter_utf8(&pgw_iter, &length);
|
||||
}
|
||||
#if 0
|
||||
else if (!strcmp(pgw_key, "NETWORK"))
|
||||
{
|
||||
bson_iter_t network_iter;
|
||||
|
@ -220,8 +225,10 @@ status_t pgw_context_parse_config()
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
else if (!strcmp(pgw_key, "UE_NETWORK"))
|
||||
{
|
||||
#if 0
|
||||
int ue_network_index = 0;
|
||||
bson_iter_t ue_network_array;
|
||||
|
||||
|
@ -297,6 +304,7 @@ status_t pgw_context_parse_config()
|
|||
} while(
|
||||
BSON_ITER_HOLDS_ARRAY(&pgw_iter) &&
|
||||
bson_iter_next(&ue_network_array));
|
||||
#endif
|
||||
}
|
||||
else if (!strcmp(pgw_key, "DNS") &&
|
||||
BSON_ITER_HOLDS_DOCUMENT(&pgw_iter))
|
||||
|
@ -325,6 +333,357 @@ status_t pgw_context_parse_config()
|
|||
}
|
||||
}
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t pgw_context_parse_config()
|
||||
{
|
||||
status_t rv;
|
||||
config_t *config = &context_self()->config;
|
||||
yaml_document_t *document = NULL;
|
||||
yaml_iter_t root_iter;
|
||||
|
||||
d_assert(config, return CORE_ERROR,);
|
||||
document = config->document;
|
||||
d_assert(document, return CORE_ERROR,);
|
||||
|
||||
rv = pgw_context_prepare();
|
||||
if (rv != CORE_OK) return rv;
|
||||
|
||||
yaml_iter_init(&root_iter, document);
|
||||
while(yaml_iter_next(&root_iter))
|
||||
{
|
||||
const char *root_key = yaml_iter_key(&root_iter);
|
||||
d_assert(root_key, return CORE_ERROR,);
|
||||
if (!strcmp(root_key, "pgw"))
|
||||
{
|
||||
yaml_iter_t pgw_iter;
|
||||
yaml_iter_recurse(&root_iter, &pgw_iter);
|
||||
while(yaml_iter_next(&pgw_iter))
|
||||
{
|
||||
const char *pgw_key = yaml_iter_key(&pgw_iter);
|
||||
d_assert(pgw_key, return CORE_ERROR,);
|
||||
if (!strcmp(pgw_key, "freeDiameter"))
|
||||
{
|
||||
self.fd_conf_path = yaml_iter_value(&pgw_iter);
|
||||
}
|
||||
else if (!strcmp(pgw_key, "gtpc"))
|
||||
{
|
||||
yaml_iter_t gtpc_array, gtpc_iter;
|
||||
yaml_iter_recurse(&pgw_iter, >pc_array);
|
||||
do
|
||||
{
|
||||
#if 0
|
||||
pgw_gtpc_t *gtpc = NULL;
|
||||
#endif
|
||||
int family = AF_UNSPEC;
|
||||
const char *hostname = NULL;
|
||||
c_uint16_t port = GTPV2_C_UDP_PORT;
|
||||
|
||||
if (yaml_iter_type(>pc_array) == YAML_MAPPING_NODE)
|
||||
{
|
||||
memcpy(>pc_iter, >pc_array,
|
||||
sizeof(yaml_iter_t));
|
||||
}
|
||||
else if (yaml_iter_type(>pc_array) ==
|
||||
YAML_SEQUENCE_NODE)
|
||||
{
|
||||
if (!yaml_iter_next(>pc_array))
|
||||
break;
|
||||
yaml_iter_recurse(>pc_array, >pc_iter);
|
||||
}
|
||||
|
||||
while(yaml_iter_next(>pc_iter))
|
||||
{
|
||||
const char *gtpc_key =
|
||||
yaml_iter_key(>pc_iter);
|
||||
d_assert(gtpc_key,
|
||||
return CORE_ERROR,);
|
||||
if (!strcmp(gtpc_key, "family"))
|
||||
{
|
||||
const char *v = yaml_iter_value(>pc_iter);
|
||||
if (v) family = atoi(v);
|
||||
if (family != AF_UNSPEC &&
|
||||
family != AF_INET && family != AF_INET6)
|
||||
{
|
||||
d_warn("Ignore family(%d) : AF_UNSPEC(0), "
|
||||
"AF_INET(2), AF_INET6(30) ", family);
|
||||
family = AF_UNSPEC;
|
||||
}
|
||||
}
|
||||
else if (!strcmp(gtpc_key, "hostname"))
|
||||
{
|
||||
hostname = yaml_iter_value(>pc_iter);
|
||||
#if 1
|
||||
if (hostname)
|
||||
self.gtpc_addr = inet_addr(hostname);
|
||||
#endif
|
||||
}
|
||||
else if (!strcmp(gtpc_key, "port"))
|
||||
{
|
||||
const char *v = yaml_iter_value(>pc_iter);
|
||||
if (v) port = atoi(v);
|
||||
}
|
||||
else
|
||||
d_warn("unknown key `%s`", gtpc_key);
|
||||
}
|
||||
|
||||
#if 0
|
||||
gtpc = pgw_gtpc_add(family, hostname, port);
|
||||
d_assert(gtpc, return CORE_ERROR,);
|
||||
#endif
|
||||
|
||||
} while(yaml_iter_type(>pc_array) == YAML_SEQUENCE_NODE);
|
||||
}
|
||||
else if (!strcmp(pgw_key, "gtpu"))
|
||||
{
|
||||
yaml_iter_t gtpu_array, gtpu_iter;
|
||||
yaml_iter_recurse(&pgw_iter, >pu_array);
|
||||
do
|
||||
{
|
||||
#if 0
|
||||
pgw_gtpu_t *gtpu = NULL;
|
||||
#endif
|
||||
int family = AF_UNSPEC;
|
||||
const char *hostname = NULL;
|
||||
c_uint16_t port = GTPV1_U_UDP_PORT;
|
||||
|
||||
if (yaml_iter_type(>pu_array) == YAML_MAPPING_NODE)
|
||||
{
|
||||
memcpy(>pu_iter, >pu_array,
|
||||
sizeof(yaml_iter_t));
|
||||
}
|
||||
else if (yaml_iter_type(>pu_array) ==
|
||||
YAML_SEQUENCE_NODE)
|
||||
{
|
||||
if (!yaml_iter_next(>pu_array))
|
||||
break;
|
||||
yaml_iter_recurse(>pu_array, >pu_iter);
|
||||
}
|
||||
|
||||
while(yaml_iter_next(>pu_iter))
|
||||
{
|
||||
const char *gtpu_key =
|
||||
yaml_iter_key(>pu_iter);
|
||||
d_assert(gtpu_key,
|
||||
return CORE_ERROR,);
|
||||
if (!strcmp(gtpu_key, "family"))
|
||||
{
|
||||
const char *v = yaml_iter_value(>pu_iter);
|
||||
if (v) family = atoi(v);
|
||||
if (family != AF_UNSPEC &&
|
||||
family != AF_INET && family != AF_INET6)
|
||||
{
|
||||
d_warn("Ignore family(%d) : AF_UNSPEC(0), "
|
||||
"AF_INET(2), AF_INET6(30) ", family);
|
||||
family = AF_UNSPEC;
|
||||
}
|
||||
}
|
||||
else if (!strcmp(gtpu_key, "hostname"))
|
||||
{
|
||||
hostname = yaml_iter_value(>pu_iter);
|
||||
#if 1
|
||||
if (hostname)
|
||||
self.gtpu_addr = inet_addr(hostname);
|
||||
#endif
|
||||
}
|
||||
else if (!strcmp(gtpu_key, "port"))
|
||||
{
|
||||
const char *v = yaml_iter_value(>pu_iter);
|
||||
if (v) port = atoi(v);
|
||||
}
|
||||
else
|
||||
d_warn("unknown key `%s`", gtpu_key);
|
||||
}
|
||||
|
||||
#if 0
|
||||
gtpu = pgw_gtpu_add(family, hostname, port);
|
||||
d_assert(gtpu, return CORE_ERROR,);
|
||||
#endif
|
||||
|
||||
} while(yaml_iter_type(>pu_array) == YAML_SEQUENCE_NODE);
|
||||
}
|
||||
else if (!strcmp(pgw_key, "pdn"))
|
||||
{
|
||||
yaml_iter_t pdn_array, pdn_iter;
|
||||
yaml_iter_recurse(&pgw_iter, &pdn_array);
|
||||
do
|
||||
{
|
||||
c_uint32_t addr = 0;
|
||||
c_uint8_t bits = 0;
|
||||
const char *dev = NULL;
|
||||
const char *apn = NULL;
|
||||
|
||||
d_assert(self.num_of_ue_network <=
|
||||
MAX_NUM_OF_UE_NETWORK, return CORE_ERROR,);
|
||||
if (yaml_iter_type(&pdn_array) == YAML_MAPPING_NODE)
|
||||
{
|
||||
memcpy(&pdn_iter, &pdn_array, sizeof(yaml_iter_t));
|
||||
}
|
||||
else if (yaml_iter_type(&pdn_array) ==
|
||||
YAML_SEQUENCE_NODE)
|
||||
{
|
||||
if (!yaml_iter_next(&pdn_array))
|
||||
break;
|
||||
yaml_iter_recurse(&pdn_array, &pdn_iter);
|
||||
}
|
||||
|
||||
while(yaml_iter_next(&pdn_iter))
|
||||
{
|
||||
const char *pdn_key = yaml_iter_key(&pdn_iter);
|
||||
d_assert(pdn_key,
|
||||
return CORE_ERROR,);
|
||||
if (!strcmp(pdn_key, "addr"))
|
||||
{
|
||||
yaml_iter_t addr_iter;
|
||||
yaml_iter_recurse(&pdn_iter, &addr_iter);
|
||||
d_assert(yaml_iter_type(&addr_iter) !=
|
||||
YAML_MAPPING_NODE, return CORE_ERROR,);
|
||||
|
||||
do
|
||||
{
|
||||
char *v = NULL;
|
||||
|
||||
#if 0
|
||||
d_assert(pdn->num_of_addr <=
|
||||
MAX_NUM_OF_PDN_ADDR,
|
||||
return CORE_ERROR,);
|
||||
#endif
|
||||
|
||||
if (yaml_iter_type(&addr_iter) ==
|
||||
YAML_SEQUENCE_NODE)
|
||||
{
|
||||
if (!yaml_iter_next(&addr_iter))
|
||||
break;
|
||||
}
|
||||
|
||||
v = (char *)yaml_iter_value(&addr_iter);
|
||||
if (v)
|
||||
{
|
||||
char *str = strsep(&v, "/");
|
||||
if (str)
|
||||
{
|
||||
addr = inet_addr(str);
|
||||
bits = atoi(v);
|
||||
}
|
||||
}
|
||||
} while(
|
||||
yaml_iter_type(&addr_iter) ==
|
||||
YAML_SEQUENCE_NODE);
|
||||
}
|
||||
else if (!strcmp(pdn_key, "dev"))
|
||||
{
|
||||
dev = yaml_iter_value(&pdn_iter);
|
||||
}
|
||||
else if (!strcmp(pdn_key, "apn"))
|
||||
{
|
||||
apn = yaml_iter_value(&pdn_iter);
|
||||
d_warn("Not implemented");
|
||||
}
|
||||
else
|
||||
d_warn("unknown key `%s`", pdn_key);
|
||||
}
|
||||
|
||||
if (addr && bits)
|
||||
{
|
||||
self.ue_network[self.num_of_ue_network].ipv4.addr =
|
||||
addr;
|
||||
self.ue_network[self.num_of_ue_network].ipv4.bits =
|
||||
bits;
|
||||
self.ue_network[self.num_of_ue_network].if_name =
|
||||
dev;
|
||||
self.num_of_ue_network++;
|
||||
}
|
||||
else
|
||||
{
|
||||
d_warn("Ignore pdn : addr(0x%x), bits(%d)",
|
||||
addr, bits);
|
||||
}
|
||||
} while(yaml_iter_type(&pdn_array) == YAML_SEQUENCE_NODE);
|
||||
}
|
||||
else if (!strcmp(pgw_key, "dns"))
|
||||
{
|
||||
int count = 0;
|
||||
yaml_iter_t dns_iter;
|
||||
yaml_iter_recurse(&pgw_iter, &dns_iter);
|
||||
d_assert(yaml_iter_type(&dns_iter) !=
|
||||
YAML_MAPPING_NODE, return CORE_ERROR,);
|
||||
|
||||
do
|
||||
{
|
||||
const char *v = NULL;
|
||||
|
||||
if (yaml_iter_type(&dns_iter) ==
|
||||
YAML_SEQUENCE_NODE)
|
||||
{
|
||||
if (!yaml_iter_next(&dns_iter))
|
||||
break;
|
||||
}
|
||||
|
||||
v = yaml_iter_value(&dns_iter);
|
||||
if (v)
|
||||
{
|
||||
if (count == 0)
|
||||
{
|
||||
self.primary_dns_addr = inet_addr(v);
|
||||
}
|
||||
else if (count == 1)
|
||||
{
|
||||
self.secondary_dns_addr = inet_addr(v);
|
||||
}
|
||||
else
|
||||
d_warn("Ignored %d DNS(%s)", count, v);
|
||||
}
|
||||
|
||||
count++;
|
||||
} while(
|
||||
yaml_iter_type(&dns_iter) ==
|
||||
YAML_SEQUENCE_NODE);
|
||||
}
|
||||
else if (!strcmp(pgw_key, "dns6"))
|
||||
{
|
||||
int count = 0;
|
||||
yaml_iter_t dns6_iter;
|
||||
yaml_iter_recurse(&pgw_iter, &dns6_iter);
|
||||
d_assert(yaml_iter_type(&dns6_iter) !=
|
||||
YAML_MAPPING_NODE, return CORE_ERROR,);
|
||||
|
||||
do
|
||||
{
|
||||
const char *v = NULL;
|
||||
|
||||
if (yaml_iter_type(&dns6_iter) ==
|
||||
YAML_SEQUENCE_NODE)
|
||||
{
|
||||
if (!yaml_iter_next(&dns6_iter))
|
||||
break;
|
||||
}
|
||||
|
||||
v = yaml_iter_value(&dns6_iter);
|
||||
if (v)
|
||||
{
|
||||
if (count == 0)
|
||||
{
|
||||
}
|
||||
else if (count == 1)
|
||||
{
|
||||
}
|
||||
else
|
||||
d_warn("Ignored %d DNS(%s)", count, v);
|
||||
}
|
||||
|
||||
count++;
|
||||
} while(
|
||||
yaml_iter_type(&dns6_iter) ==
|
||||
YAML_SEQUENCE_NODE);
|
||||
}
|
||||
else
|
||||
d_warn("unknown key `%s`", pgw_key);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rv = pgw_context_validation();
|
||||
if (rv != CORE_OK) return rv;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
db_uri: "mongodb://localhost/nextepc"
|
||||
db_uri: mongodb://localhost/nextepc
|
||||
|
||||
logger:
|
||||
file: "@LOCALSTATE_DIR@/log/nextepc/nextepc.log"
|
||||
file: @LOCALSTATE_DIR@/log/nextepc/nextepc.log
|
||||
trace:
|
||||
s1ap: 1
|
||||
nas: 1
|
||||
|
@ -19,24 +19,24 @@ parameter:
|
|||
# prefer_ipv4: true
|
||||
|
||||
mme:
|
||||
freeDiameter: "mme.conf"
|
||||
freeDiameter: mme.conf
|
||||
|
||||
s1ap:
|
||||
- hostname: "127.0.0.1"
|
||||
- hostname: "::1"
|
||||
- hostname: 127.0.0.1
|
||||
- hostname: ::1
|
||||
gtpc:
|
||||
- hostname: "127.0.0.1"
|
||||
- hostname: 127.0.0.1
|
||||
|
||||
gummei:
|
||||
- plmn_id:
|
||||
mcc: "001"
|
||||
mnc: "01"
|
||||
mcc: 001
|
||||
mnc: 01
|
||||
mme_gid: 2
|
||||
mme_code: 1
|
||||
tai:
|
||||
- plmn_id:
|
||||
mcc: "001"
|
||||
mnc: "01"
|
||||
mcc: 001
|
||||
mnc: 01
|
||||
tac: 12345
|
||||
|
||||
security:
|
||||
|
@ -44,26 +44,34 @@ mme:
|
|||
ciphering_order : [ EEA0, EEA1, EEA2 ]
|
||||
|
||||
hss:
|
||||
freeDiameter: "hss.conf"
|
||||
freeDiameter: hss.conf
|
||||
|
||||
sgw:
|
||||
gtpc:
|
||||
- hostname: "127.0.0.2"
|
||||
- hostname: 127.0.0.2
|
||||
gtpu:
|
||||
- hostname: "127.0.0.2"
|
||||
- hostname: 127.0.0.2
|
||||
|
||||
pgw:
|
||||
freeDiameter: "pgw.conf"
|
||||
freeDiameter: pgw.conf
|
||||
|
||||
gtpc:
|
||||
- hostname: "127.0.0.3"
|
||||
- hostname: 127.0.0.3
|
||||
|
||||
gtpu:
|
||||
- hostname: "127.0.0.3"
|
||||
- hostname: 127.0.0.3
|
||||
|
||||
pdn:
|
||||
- pool: "45.45.0.1/16"
|
||||
dns: ["8.8.8.8", "4.4.4.4"]
|
||||
# interface: pgwtun
|
||||
- addr: 45.45.0.1/16
|
||||
dev: pgwtun
|
||||
|
||||
dns:
|
||||
- 8.8.8.8
|
||||
- 8.8.4.4
|
||||
|
||||
dns6:
|
||||
- 2001:4860:4860::8888
|
||||
- 2001:4860:4860::8844
|
||||
|
||||
pcrf:
|
||||
freeDiameter: "pcrf.conf"
|
||||
|
|
|
@ -0,0 +1,270 @@
|
|||
db_uri: mongodb://localhost/nextepc
|
||||
|
||||
logger:
|
||||
file: @LOCALSTATE_DIR@/log/nextepc/nextepc.log
|
||||
trace:
|
||||
s1ap: 1
|
||||
nas: 1
|
||||
diameter: 1
|
||||
gtp: 1
|
||||
others: 1
|
||||
|
||||
#
|
||||
# Disable use of IPv4 addresses (only IPv6)
|
||||
# o Type : boolean
|
||||
# o Default : IPv6 enabled
|
||||
#
|
||||
# <Example>
|
||||
# no_ipv4: true
|
||||
#
|
||||
#
|
||||
# Disable use of IPv6 addresses (only IPv4)
|
||||
# o Type : boolean
|
||||
# o Default : IPv6 enabled
|
||||
#
|
||||
# <Example>
|
||||
# no_ipv6: true
|
||||
#
|
||||
#
|
||||
# Prefer IPv4 instead of IPv6 for estabishing new GTP connections.
|
||||
# o Type : boolean
|
||||
# o Default : IPv6 is attempted first.
|
||||
#
|
||||
# <Example>
|
||||
# prefer_ipv4: true
|
||||
#
|
||||
#
|
||||
# Disable load of EPC elements (Only applicable `nextepc-epcd`)
|
||||
# o Type : boolean
|
||||
# o Default : load all HSS/SGW/PGW/PCRF/MME element
|
||||
#
|
||||
# <Example>
|
||||
# no_hss: true
|
||||
# no_sgw: true
|
||||
# no_pgw: true
|
||||
# no_pcrf: true
|
||||
#
|
||||
parameter:
|
||||
|
||||
mme:
|
||||
freeDiameter: mme.conf
|
||||
|
||||
#
|
||||
# Specify local addresses the S1AP server must bind to
|
||||
# o 'family' Type : enum
|
||||
# 0 : AF_UNSPEC
|
||||
# 2 : AF_INET
|
||||
# 30 : AF_INET6
|
||||
# o Default : liston on all address available
|
||||
#
|
||||
# <Example>
|
||||
#
|
||||
# o Single S1AP Server(0.0.0.0:36412)
|
||||
# s1ap:
|
||||
# - family: 2
|
||||
#
|
||||
# o Multiple S1AP Server(127.0.0.1:36412, [::1]:36413)
|
||||
# s1ap:
|
||||
# - family: 2
|
||||
# hostname: localhost
|
||||
# - hostname: ::1
|
||||
# port: 36413
|
||||
#
|
||||
s1ap:
|
||||
|
||||
gtpc:
|
||||
- family: 2
|
||||
hostname: localhost
|
||||
- family: 30
|
||||
hostname: localhost
|
||||
|
||||
#
|
||||
# Specify GUMMEI
|
||||
#
|
||||
# <Example>
|
||||
#
|
||||
# o Multiple GUMMEI
|
||||
# gummei:
|
||||
# - plmn_id:
|
||||
# mcc: 001
|
||||
# mnc: 01
|
||||
# mme_gid: 2
|
||||
# mme_code: 1
|
||||
# - plmn_id:
|
||||
# - mcc: 002
|
||||
# mnc: 02
|
||||
# - mcc: 003
|
||||
# mnc: 03
|
||||
# mme_gid: [3, 4]
|
||||
# mme_code:
|
||||
# - 2
|
||||
# - 3
|
||||
#
|
||||
gummei:
|
||||
plmn_id:
|
||||
mcc: 001
|
||||
mnc: 01
|
||||
mme_gid: 2
|
||||
mme_code: 1
|
||||
|
||||
#
|
||||
# Specify TAI
|
||||
#
|
||||
# <Example>
|
||||
#
|
||||
# o Multiple TAI
|
||||
# tai:
|
||||
# - plmn_id:
|
||||
# mcc: 001
|
||||
# mnc: 01
|
||||
# tac: 12345
|
||||
# - plmn_id:
|
||||
# mcc: 002
|
||||
# mnc: 02
|
||||
# tac: 12346
|
||||
#
|
||||
tai:
|
||||
plmn_id:
|
||||
mcc: 001
|
||||
mnc: 01
|
||||
tac: 12345
|
||||
|
||||
security:
|
||||
integrity_order : [ EIA1, EIA2, EIA0 ]
|
||||
ciphering_order : [ EEA0, EEA1, EEA2 ]
|
||||
|
||||
hss:
|
||||
freeDiameter: hss.conf
|
||||
|
||||
sgw:
|
||||
gtpc:
|
||||
- hostname: 127.0.0.2
|
||||
- hostname: ::2
|
||||
|
||||
#
|
||||
# Specify local addresses the GTP-U server must bind to
|
||||
# o 'family' Type : enum
|
||||
# 0 : AF_UNSPEC
|
||||
# 2 : AF_INET
|
||||
# 30 : AF_INET6
|
||||
# o Default : liston on all address available
|
||||
#
|
||||
#
|
||||
# <Example>
|
||||
#
|
||||
# o Multiple GTP-U Server([::]:2152)
|
||||
# gtpu:
|
||||
# - family: 30
|
||||
#
|
||||
# o Multiple GTP-U Server(127.0.0.1:2153, [::1]:2152)
|
||||
# gtpu:
|
||||
# - family: 2
|
||||
# hostname: localhost
|
||||
# port: 2153
|
||||
# - hostname: ::1
|
||||
#
|
||||
gtpu:
|
||||
|
||||
pgw:
|
||||
freeDiameter: pgw.conf
|
||||
|
||||
#
|
||||
# ------------------------ MME --------------------------
|
||||
#
|
||||
# Specify default PGW addresses the GTP-C must connect to
|
||||
# o 'family' Type : enum
|
||||
# 0 : AF_UNSPEC
|
||||
# 2 : AF_INET
|
||||
# 30 : AF_INET6
|
||||
# o Default : None
|
||||
#
|
||||
# <NOTE>
|
||||
# o only first address is attempted. Others are ignored.
|
||||
# o if HSS provide PGW addresss(per-UE),
|
||||
# it overwrites configuration.
|
||||
#
|
||||
# <Example>
|
||||
#
|
||||
# o 127.0.0.3:2123 is attempted. [::3]:2123 is ignored.
|
||||
# gtpc:
|
||||
# - hostname: 127.0.0.3
|
||||
# - hostname: ::3
|
||||
#
|
||||
# o [::3]:2123 is attempted. [127.0.0.3]:2123 is ignored.
|
||||
# gtpc:
|
||||
# - hostname: ::3
|
||||
# - hostname: 127.0.0.3
|
||||
#
|
||||
#
|
||||
# ------------------------ PGW --------------------------
|
||||
#
|
||||
# Specify local addresses the GTP-C server must bind to
|
||||
# o 'family' Type : enum
|
||||
# 0 : AF_UNSPEC
|
||||
# 2 : AF_INET
|
||||
# 30 : AF_INET6
|
||||
# o Default : liston on all address available
|
||||
#
|
||||
# <Example>
|
||||
#
|
||||
# o Single GTP-C Server(127.0.0.3:2123)
|
||||
# gtpu:
|
||||
# hostname: 127.0.0.3
|
||||
#
|
||||
# o Multiple GTP-C Server(127.0.0.3:2124, [::3]:2123)
|
||||
# gtpu:
|
||||
# - hostname: 127.0.0.3
|
||||
# port: 2124
|
||||
# - hostname: ::3
|
||||
#
|
||||
gtpc:
|
||||
- hostname: 127.0.0.3
|
||||
- hostname: ::3
|
||||
|
||||
gtpu:
|
||||
- hostname: 127.0.0.3
|
||||
- hostname: ::3
|
||||
|
||||
#
|
||||
# Specify PDN network with UE IP pool
|
||||
#
|
||||
# <Example>
|
||||
#
|
||||
# o Multiple IPv4 Pool
|
||||
# pdn:
|
||||
# addr:
|
||||
# - 45.45.0.1/16
|
||||
# - 46.46.0.1/16
|
||||
#
|
||||
# o Multiple Interface
|
||||
# pdn:
|
||||
# - addr: 45.45.0.1/16
|
||||
# dev: pgwtun1
|
||||
# - addr:
|
||||
# - 46.46.0.1/16
|
||||
# - 47.47.0.1/16
|
||||
# dev: pgwtun2
|
||||
#
|
||||
# o Pool allocated per-APN
|
||||
# pdn:
|
||||
# - addr: 45.45.0.1/16
|
||||
# dev: pgwtun1
|
||||
# apn : internet
|
||||
# - addr:
|
||||
# - 46.46.0.1/16
|
||||
# - 47.47.0.1/16
|
||||
# dev: pgwtun2
|
||||
# apn : volte
|
||||
#
|
||||
pdn:
|
||||
addr: 45.45.0.1/16
|
||||
|
||||
dns:
|
||||
- 8.8.8.8
|
||||
- 8.8.4.4
|
||||
dns6:
|
||||
- 2001:4860:4860::8888
|
||||
- 2001:4860:4860::8844
|
||||
|
||||
pcrf:
|
||||
freeDiameter: "pcrf.conf"
|
|
@ -39,12 +39,11 @@ static void attach_test1(abts_case *tc, void *data)
|
|||
char *_initial_context_setup_request =
|
||||
"00090080d8000006 00000005c0010000 9d00080002000100 42000a183e800000"
|
||||
"603e800000001800 8086000034008080 450009200f807f00 0002000000017127"
|
||||
"45c2015402074202 49064000f1105ba0 00485221c1010909 08696e7465726e65"
|
||||
"4db5d98302074202 49064000f1105ba0 00485221c1010909 08696e7465726e65"
|
||||
"7405012d2d00025e 06fefeeeee030327 2980c22304030000 0480211002000010"
|
||||
"8106080808088306 04040404000d0408 080808000d040404 0404500bf600f110"
|
||||
"8106080808088306 08080404000d0408 080808000d040808 0404500bf600f110"
|
||||
"0002010000000153 12172c5949640125 006b000518000c00 00004900203311c6"
|
||||
"03c6a6d67f695e5a c02bb75b381b693c 3893a6d932fd9182 3544e3e79b000000"
|
||||
"0000000000000000 00";
|
||||
"03c6a6d67f695e5a c02bb75b381b693c 3893a6d932fd9182 3544e3e79b";
|
||||
char *_emm_information =
|
||||
"000b402a00000300 000005c00100009d 000800020001001a 001413279fcc7266"
|
||||
"0307614771304112 527563490100";
|
||||
|
|
Loading…
Reference in New Issue