[GTP/PFCP] Support VRF (#1404)
This commit is contained in:
parent
c2d10772c6
commit
253e2ad98a
|
@ -290,6 +290,7 @@ pool:
|
||||||
#
|
#
|
||||||
# sockopt:
|
# sockopt:
|
||||||
# no_delay : true
|
# no_delay : true
|
||||||
|
# so_bindtodevice : true
|
||||||
#
|
#
|
||||||
sockopt:
|
sockopt:
|
||||||
|
|
||||||
|
|
|
@ -388,6 +388,7 @@ pool:
|
||||||
#
|
#
|
||||||
# sockopt:
|
# sockopt:
|
||||||
# no_delay : true
|
# no_delay : true
|
||||||
|
# so_bindtodevice : true
|
||||||
#
|
#
|
||||||
sockopt:
|
sockopt:
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,12 @@ max:
|
||||||
#
|
#
|
||||||
pool:
|
pool:
|
||||||
|
|
||||||
|
#
|
||||||
|
# sockopt:
|
||||||
|
# so_bindtodevice : true
|
||||||
|
#
|
||||||
|
sockopt:
|
||||||
|
|
||||||
#
|
#
|
||||||
# time:
|
# time:
|
||||||
#
|
#
|
||||||
|
|
|
@ -149,6 +149,13 @@ max:
|
||||||
#
|
#
|
||||||
pool:
|
pool:
|
||||||
|
|
||||||
|
#
|
||||||
|
# sockopt:
|
||||||
|
# no_delay : true
|
||||||
|
# so_bindtodevice : true
|
||||||
|
#
|
||||||
|
sockopt:
|
||||||
|
|
||||||
#
|
#
|
||||||
# time:
|
# time:
|
||||||
#
|
#
|
||||||
|
|
|
@ -498,6 +498,12 @@ max:
|
||||||
#
|
#
|
||||||
pool:
|
pool:
|
||||||
|
|
||||||
|
#
|
||||||
|
# sockopt:
|
||||||
|
# so_bindtodevice : true
|
||||||
|
#
|
||||||
|
sockopt:
|
||||||
|
|
||||||
#
|
#
|
||||||
# time:
|
# time:
|
||||||
#
|
#
|
||||||
|
|
|
@ -220,6 +220,12 @@ max:
|
||||||
#
|
#
|
||||||
pool:
|
pool:
|
||||||
|
|
||||||
|
#
|
||||||
|
# sockopt:
|
||||||
|
# so_bindtodevice : true
|
||||||
|
#
|
||||||
|
sockopt:
|
||||||
|
|
||||||
#
|
#
|
||||||
# time:
|
# time:
|
||||||
#
|
#
|
||||||
|
|
|
@ -187,6 +187,7 @@ static void app_context_prepare(void)
|
||||||
self.sctp.max_initial_timeout = 8000; /* 8 seconds */
|
self.sctp.max_initial_timeout = 8000; /* 8 seconds */
|
||||||
|
|
||||||
self.sockopt.no_delay = true;
|
self.sockopt.no_delay = true;
|
||||||
|
self.sockopt.so_bindtodevice = true;
|
||||||
|
|
||||||
#define MAX_NUM_OF_UE 1024 /* Num of UE per AMF/MME */
|
#define MAX_NUM_OF_UE 1024 /* Num of UE per AMF/MME */
|
||||||
#define MAX_NUM_OF_GNB 64 /* Num of gNB per AMF/MME */
|
#define MAX_NUM_OF_GNB 64 /* Num of gNB per AMF/MME */
|
||||||
|
@ -376,6 +377,9 @@ int ogs_app_context_parse_config(void)
|
||||||
const char *v = ogs_yaml_iter_value(&sockopt_iter);
|
const char *v = ogs_yaml_iter_value(&sockopt_iter);
|
||||||
if (v) self.sockopt.l_linger = atoi(v);
|
if (v) self.sockopt.l_linger = atoi(v);
|
||||||
self.sockopt.l_onoff = true;
|
self.sockopt.l_onoff = true;
|
||||||
|
} else if (!strcmp(sockopt_key, "so_bindtodevice")) {
|
||||||
|
self.sockopt.so_bindtodevice =
|
||||||
|
ogs_yaml_iter_bool(&sockopt_iter);
|
||||||
} else
|
} else
|
||||||
ogs_warn("unknown key `%s`", sockopt_key);
|
ogs_warn("unknown key `%s`", sockopt_key);
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,6 +84,7 @@ typedef struct ogs_app_context_s {
|
||||||
int no_delay;
|
int no_delay;
|
||||||
int l_onoff;
|
int l_onoff;
|
||||||
int l_linger;
|
int l_linger;
|
||||||
|
int so_bindtodevice;
|
||||||
} sockopt;
|
} sockopt;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
|
|
|
@ -338,15 +338,19 @@ int ogs_bind_to_device(ogs_socket_t fd, const char *device)
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
ogs_assert(fd != INVALID_SOCKET);
|
ogs_assert(fd != INVALID_SOCKET);
|
||||||
|
ogs_assert(device);
|
||||||
rc = setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, device, strlen(device)+1);
|
rc = setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, device, strlen(device)+1);
|
||||||
if (rc != OGS_OK) {
|
if (rc != OGS_OK) {
|
||||||
ogs_log_message(OGS_LOG_ERROR, ogs_socket_errno,
|
ogs_log_message(OGS_LOG_ERROR, ogs_socket_errno,
|
||||||
"setsockopt(SOL_SOCKET, SO_BINDTODEVICE, %s) failed",
|
"setsockopt(SOL_SOCKET, SO_BINDTODEVICE, %s) failed", device);
|
||||||
device);
|
ogs_error("You need to grant privileges to use SO_BINDTODEVICE.");
|
||||||
|
ogs_error("OR disable SO_BINDTODEVICE "
|
||||||
|
"in the configuration file as below.");
|
||||||
|
ogs_log_print(OGS_LOG_ERROR, "\nsockopt:\n");
|
||||||
|
ogs_log_print(OGS_LOG_ERROR, " so_bindtodevice : false\n\n");
|
||||||
return OGS_ERROR;
|
return OGS_ERROR;
|
||||||
}
|
}
|
||||||
return OGS_OK;
|
|
||||||
#else
|
|
||||||
return OGS_ERROR;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
return OGS_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,8 +51,8 @@ void ogs_socknode_free(ogs_socknode_t *node)
|
||||||
ogs_assert(node);
|
ogs_assert(node);
|
||||||
|
|
||||||
ogs_freeaddrinfo(node->addr);
|
ogs_freeaddrinfo(node->addr);
|
||||||
if (node->bind_dev)
|
if (node->dev)
|
||||||
ogs_free(node->bind_dev);
|
ogs_free(node->dev);
|
||||||
if (node->poll)
|
if (node->poll)
|
||||||
ogs_pollset_remove(node->poll);
|
ogs_pollset_remove(node->poll);
|
||||||
if (node->sock) {
|
if (node->sock) {
|
||||||
|
@ -103,8 +103,7 @@ void ogs_socknode_remove_all(ogs_list_t *list)
|
||||||
}
|
}
|
||||||
|
|
||||||
int ogs_socknode_probe(
|
int ogs_socknode_probe(
|
||||||
ogs_list_t *list, ogs_list_t *list6, const char *dev, uint16_t port,
|
ogs_list_t *list, ogs_list_t *list6, const char *dev, uint16_t port)
|
||||||
const char *bind_device)
|
|
||||||
{
|
{
|
||||||
#if defined(HAVE_GETIFADDRS)
|
#if defined(HAVE_GETIFADDRS)
|
||||||
ogs_socknode_t *node = NULL;
|
ogs_socknode_t *node = NULL;
|
||||||
|
@ -167,8 +166,8 @@ int ogs_socknode_probe(
|
||||||
|
|
||||||
node = ogs_calloc(1, sizeof(ogs_socknode_t));
|
node = ogs_calloc(1, sizeof(ogs_socknode_t));
|
||||||
node->addr = addr;
|
node->addr = addr;
|
||||||
if (bind_device)
|
if (dev)
|
||||||
node->bind_dev = ogs_strdup(bind_device);
|
node->dev = ogs_strdup(dev);
|
||||||
|
|
||||||
if (addr->ogs_sa_family == AF_INET) {
|
if (addr->ogs_sa_family == AF_INET) {
|
||||||
ogs_assert(list);
|
ogs_assert(list);
|
||||||
|
|
|
@ -35,11 +35,11 @@ typedef struct ogs_socknode_s {
|
||||||
ogs_lnode_t node;
|
ogs_lnode_t node;
|
||||||
|
|
||||||
ogs_sockaddr_t *addr;
|
ogs_sockaddr_t *addr;
|
||||||
|
char *dev; /* !NULL: used with SO_BINDTODEVICE */
|
||||||
|
|
||||||
ogs_sock_t *sock;
|
ogs_sock_t *sock;
|
||||||
void (*cleanup)(ogs_sock_t *sock);
|
void (*cleanup)(ogs_sock_t *sock);
|
||||||
ogs_poll_t *poll;
|
ogs_poll_t *poll;
|
||||||
char *bind_dev; /* !NULL: used with SO_BINDTODEVICE */
|
|
||||||
} ogs_socknode_t;
|
} ogs_socknode_t;
|
||||||
|
|
||||||
ogs_socknode_t *ogs_socknode_new(ogs_sockaddr_t *addr);
|
ogs_socknode_t *ogs_socknode_new(ogs_sockaddr_t *addr);
|
||||||
|
@ -51,8 +51,7 @@ void ogs_socknode_remove(ogs_list_t *list, ogs_socknode_t *node);
|
||||||
void ogs_socknode_remove_all(ogs_list_t *list);
|
void ogs_socknode_remove_all(ogs_list_t *list);
|
||||||
|
|
||||||
int ogs_socknode_probe(
|
int ogs_socknode_probe(
|
||||||
ogs_list_t *list, ogs_list_t *list6, const char *dev, uint16_t port,
|
ogs_list_t *list, ogs_list_t *list6, const char *dev, uint16_t port);
|
||||||
const char *bind_device);
|
|
||||||
int ogs_socknode_fill_scope_id_in_local(ogs_sockaddr_t *sa_list);
|
int ogs_socknode_fill_scope_id_in_local(ogs_sockaddr_t *sa_list);
|
||||||
|
|
||||||
void ogs_socknode_set_cleanup(
|
void ogs_socknode_set_cleanup(
|
||||||
|
|
|
@ -33,7 +33,7 @@ ogs_sock_t *ogs_udp_socket(int family, ogs_socknode_t *node)
|
||||||
return sock;
|
return sock;
|
||||||
}
|
}
|
||||||
|
|
||||||
ogs_sock_t *ogs_udp_server(ogs_socknode_t *node)
|
ogs_sock_t *ogs_udp_server(ogs_socknode_t *node, bool so_bindtodevice)
|
||||||
{
|
{
|
||||||
ogs_sock_t *new = NULL;
|
ogs_sock_t *new = NULL;
|
||||||
ogs_sockaddr_t *addr;
|
ogs_sockaddr_t *addr;
|
||||||
|
@ -54,16 +54,15 @@ ogs_sock_t *ogs_udp_server(ogs_socknode_t *node)
|
||||||
addr = addr->next;
|
addr = addr->next;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ogs_debug("udp_server() [%s]:%d",
|
ogs_debug("udp_server() [%s]:%d", OGS_ADDR(addr, buf), OGS_PORT(addr));
|
||||||
OGS_ADDR(addr, buf), OGS_PORT(addr));
|
if (so_bindtodevice == true && node->dev) {
|
||||||
if(node->bind_dev) {
|
if (ogs_bind_to_device(new->fd, node->dev) != OGS_OK) {
|
||||||
if (ogs_bind_to_device(new->fd, node->bind_dev) != OGS_OK) {
|
|
||||||
ogs_sock_destroy(new);
|
ogs_sock_destroy(new);
|
||||||
addr = addr->next;
|
addr = addr->next;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ogs_debug("udp_server() [%s]:%d bound to device %s",
|
ogs_debug("udp_server() [%s]:%d bound to device %s",
|
||||||
OGS_ADDR(addr, buf), OGS_PORT(addr), node->bind_dev);
|
OGS_ADDR(addr, buf), OGS_PORT(addr), node->dev);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ogs_sock_t *ogs_udp_socket(int family, ogs_socknode_t *node);
|
ogs_sock_t *ogs_udp_socket(int family, ogs_socknode_t *node);
|
||||||
ogs_sock_t *ogs_udp_server(ogs_socknode_t *node);
|
ogs_sock_t *ogs_udp_server(ogs_socknode_t *node, bool so_bindtodevice);
|
||||||
ogs_sock_t *ogs_udp_client(ogs_socknode_t *node);
|
ogs_sock_t *ogs_udp_client(ogs_socknode_t *node);
|
||||||
int ogs_udp_connect(ogs_sock_t *sock, ogs_sockaddr_t *sa_list);
|
int ogs_udp_connect(ogs_sock_t *sock, ogs_sockaddr_t *sa_list);
|
||||||
|
|
||||||
|
|
|
@ -103,9 +103,7 @@ int ogs_gtp_context_parse_config(const char *local, const char *remote)
|
||||||
const char *hostname[OGS_MAX_NUM_OF_HOSTNAME];
|
const char *hostname[OGS_MAX_NUM_OF_HOSTNAME];
|
||||||
uint16_t port = self.gtpc_port;
|
uint16_t port = self.gtpc_port;
|
||||||
const char *dev = NULL;
|
const char *dev = NULL;
|
||||||
const char *bind_dev = NULL;
|
|
||||||
ogs_sockaddr_t *addr = NULL;
|
ogs_sockaddr_t *addr = NULL;
|
||||||
ogs_socknode_t *node = NULL, *node6 = NULL;
|
|
||||||
|
|
||||||
if (ogs_yaml_iter_type(>pc_array) ==
|
if (ogs_yaml_iter_type(>pc_array) ==
|
||||||
YAML_MAPPING_NODE) {
|
YAML_MAPPING_NODE) {
|
||||||
|
@ -163,8 +161,6 @@ int ogs_gtp_context_parse_config(const char *local, const char *remote)
|
||||||
if (v) port = atoi(v);
|
if (v) port = atoi(v);
|
||||||
} else if (!strcmp(gtpc_key, "dev")) {
|
} else if (!strcmp(gtpc_key, "dev")) {
|
||||||
dev = ogs_yaml_iter_value(>pc_iter);
|
dev = ogs_yaml_iter_value(>pc_iter);
|
||||||
} else if (!strcmp(gtpc_key, "bind_dev")) {
|
|
||||||
bind_dev = ogs_yaml_iter_value(>pc_iter);
|
|
||||||
} else
|
} else
|
||||||
ogs_warn("unknown key `%s`", gtpc_key);
|
ogs_warn("unknown key `%s`", gtpc_key);
|
||||||
}
|
}
|
||||||
|
@ -178,17 +174,11 @@ int ogs_gtp_context_parse_config(const char *local, const char *remote)
|
||||||
|
|
||||||
if (addr) {
|
if (addr) {
|
||||||
if (ogs_app()->parameter.no_ipv4 == 0)
|
if (ogs_app()->parameter.no_ipv4 == 0)
|
||||||
node = ogs_socknode_add(
|
ogs_socknode_add(
|
||||||
&self.gtpc_list, AF_INET, addr);
|
&self.gtpc_list, AF_INET, addr);
|
||||||
if (ogs_app()->parameter.no_ipv6 == 0)
|
if (ogs_app()->parameter.no_ipv6 == 0)
|
||||||
node6 = ogs_socknode_add(
|
ogs_socknode_add(
|
||||||
&self.gtpc_list6, AF_INET6, addr);
|
&self.gtpc_list6, AF_INET6, addr);
|
||||||
if (bind_dev) {
|
|
||||||
if (node)
|
|
||||||
node->bind_dev = ogs_strdup(bind_dev);
|
|
||||||
if (node6)
|
|
||||||
node6->bind_dev = ogs_strdup(bind_dev);
|
|
||||||
}
|
|
||||||
ogs_freeaddrinfo(addr);
|
ogs_freeaddrinfo(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,7 +188,7 @@ int ogs_gtp_context_parse_config(const char *local, const char *remote)
|
||||||
NULL : &self.gtpc_list,
|
NULL : &self.gtpc_list,
|
||||||
ogs_app()->parameter.no_ipv6 ?
|
ogs_app()->parameter.no_ipv6 ?
|
||||||
NULL : &self.gtpc_list6,
|
NULL : &self.gtpc_list6,
|
||||||
dev, port, bind_dev);
|
dev, port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,7 +202,7 @@ int ogs_gtp_context_parse_config(const char *local, const char *remote)
|
||||||
NULL : &self.gtpc_list,
|
NULL : &self.gtpc_list,
|
||||||
ogs_app()->parameter.no_ipv6 ?
|
ogs_app()->parameter.no_ipv6 ?
|
||||||
NULL : &self.gtpc_list6,
|
NULL : &self.gtpc_list6,
|
||||||
NULL, self.gtpc_port, NULL);
|
NULL, self.gtpc_port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(local_key, "gtpu")) {
|
} else if (!strcmp(local_key, "gtpu")) {
|
||||||
|
@ -238,7 +228,6 @@ int ogs_gtp_context_parse_config(const char *local, const char *remote)
|
||||||
const char *teid_range = NULL;
|
const char *teid_range = NULL;
|
||||||
const char *network_instance = NULL;
|
const char *network_instance = NULL;
|
||||||
const char *source_interface = NULL;
|
const char *source_interface = NULL;
|
||||||
const char *bind_dev = NULL;
|
|
||||||
|
|
||||||
if (ogs_yaml_iter_type(>pu_array) ==
|
if (ogs_yaml_iter_type(>pu_array) ==
|
||||||
YAML_MAPPING_NODE) {
|
YAML_MAPPING_NODE) {
|
||||||
|
@ -328,8 +317,6 @@ int ogs_gtp_context_parse_config(const char *local, const char *remote)
|
||||||
if (v) port = atoi(v);
|
if (v) port = atoi(v);
|
||||||
} else if (!strcmp(gtpu_key, "dev")) {
|
} else if (!strcmp(gtpu_key, "dev")) {
|
||||||
dev = ogs_yaml_iter_value(>pu_iter);
|
dev = ogs_yaml_iter_value(>pu_iter);
|
||||||
} else if (!strcmp(gtpu_key, "bind_dev")) {
|
|
||||||
bind_dev = ogs_yaml_iter_value(>pu_iter);
|
|
||||||
} else if (!strcmp(gtpu_key,
|
} else if (!strcmp(gtpu_key,
|
||||||
"teid_range_indication")) {
|
"teid_range_indication")) {
|
||||||
teid_range_indication =
|
teid_range_indication =
|
||||||
|
@ -361,15 +348,9 @@ int ogs_gtp_context_parse_config(const char *local, const char *remote)
|
||||||
|
|
||||||
if (addr) {
|
if (addr) {
|
||||||
if (ogs_app()->parameter.no_ipv4 == 0)
|
if (ogs_app()->parameter.no_ipv4 == 0)
|
||||||
node = ogs_socknode_add(&list, AF_INET, addr);
|
ogs_socknode_add(&list, AF_INET, addr);
|
||||||
if (ogs_app()->parameter.no_ipv6 == 0)
|
if (ogs_app()->parameter.no_ipv6 == 0)
|
||||||
node6 = ogs_socknode_add(&list6, AF_INET6, addr);
|
ogs_socknode_add(&list6, AF_INET6, addr);
|
||||||
if (bind_dev) {
|
|
||||||
if (node)
|
|
||||||
node->bind_dev = ogs_strdup(bind_dev);
|
|
||||||
if (node6)
|
|
||||||
node6->bind_dev = ogs_strdup(bind_dev);
|
|
||||||
}
|
|
||||||
ogs_freeaddrinfo(addr);
|
ogs_freeaddrinfo(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,7 +358,7 @@ int ogs_gtp_context_parse_config(const char *local, const char *remote)
|
||||||
rv = ogs_socknode_probe(
|
rv = ogs_socknode_probe(
|
||||||
ogs_app()->parameter.no_ipv4 ? NULL : &list,
|
ogs_app()->parameter.no_ipv4 ? NULL : &list,
|
||||||
ogs_app()->parameter.no_ipv6 ? NULL : &list6,
|
ogs_app()->parameter.no_ipv6 ? NULL : &list6,
|
||||||
dev, port, bind_dev);
|
dev, port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -473,7 +454,7 @@ int ogs_gtp_context_parse_config(const char *local, const char *remote)
|
||||||
rv = ogs_socknode_probe(
|
rv = ogs_socknode_probe(
|
||||||
ogs_app()->parameter.no_ipv4 ? NULL : &list,
|
ogs_app()->parameter.no_ipv4 ? NULL : &list,
|
||||||
ogs_app()->parameter.no_ipv6 ? NULL : &list6,
|
ogs_app()->parameter.no_ipv6 ? NULL : &list6,
|
||||||
NULL, self.gtpu_port, NULL);
|
NULL, self.gtpu_port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -25,7 +25,7 @@ ogs_sock_t *ogs_gtp_server(ogs_socknode_t *node)
|
||||||
ogs_sock_t *gtp;
|
ogs_sock_t *gtp;
|
||||||
ogs_assert(node);
|
ogs_assert(node);
|
||||||
|
|
||||||
gtp = ogs_udp_server(node);
|
gtp = ogs_udp_server(node, ogs_app()->sockopt.so_bindtodevice);
|
||||||
if (gtp) {
|
if (gtp) {
|
||||||
ogs_info("gtp_server() [%s]:%d",
|
ogs_info("gtp_server() [%s]:%d",
|
||||||
OGS_ADDR(node->addr, buf), OGS_PORT(node->addr));
|
OGS_ADDR(node->addr, buf), OGS_PORT(node->addr));
|
||||||
|
|
|
@ -274,7 +274,7 @@ int ogs_pfcp_context_parse_config(const char *local, const char *remote)
|
||||||
NULL : &self.pfcp_list,
|
NULL : &self.pfcp_list,
|
||||||
ogs_app()->parameter.no_ipv6 ?
|
ogs_app()->parameter.no_ipv6 ?
|
||||||
NULL : &self.pfcp_list6,
|
NULL : &self.pfcp_list6,
|
||||||
dev, self.pfcp_port, NULL);
|
dev, self.pfcp_port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,7 +288,7 @@ int ogs_pfcp_context_parse_config(const char *local, const char *remote)
|
||||||
NULL : &self.pfcp_list,
|
NULL : &self.pfcp_list,
|
||||||
ogs_app()->parameter.no_ipv6 ?
|
ogs_app()->parameter.no_ipv6 ?
|
||||||
NULL : &self.pfcp_list6,
|
NULL : &self.pfcp_list6,
|
||||||
NULL, self.pfcp_port, NULL);
|
NULL, self.pfcp_port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(local_key, "subnet")) {
|
} else if (!strcmp(local_key, "subnet")) {
|
||||||
|
|
|
@ -25,7 +25,7 @@ ogs_sock_t *ogs_pfcp_server(ogs_socknode_t *node)
|
||||||
ogs_sock_t *pfcp;
|
ogs_sock_t *pfcp;
|
||||||
ogs_assert(node);
|
ogs_assert(node);
|
||||||
|
|
||||||
pfcp = ogs_udp_server(node);
|
pfcp = ogs_udp_server(node, ogs_app()->sockopt.so_bindtodevice);
|
||||||
if (pfcp) {
|
if (pfcp) {
|
||||||
ogs_info("pfcp_server() [%s]:%d",
|
ogs_info("pfcp_server() [%s]:%d",
|
||||||
OGS_ADDR(node->addr, buf), OGS_PORT(node->addr));
|
OGS_ADDR(node->addr, buf), OGS_PORT(node->addr));
|
||||||
|
|
|
@ -280,7 +280,7 @@ int ogs_sbi_context_parse_config(const char *local, const char *remote)
|
||||||
rv = ogs_socknode_probe(
|
rv = ogs_socknode_probe(
|
||||||
ogs_app()->parameter.no_ipv4 ? NULL : &list,
|
ogs_app()->parameter.no_ipv4 ? NULL : &list,
|
||||||
ogs_app()->parameter.no_ipv6 ? NULL : &list6,
|
ogs_app()->parameter.no_ipv6 ? NULL : &list6,
|
||||||
dev, port, NULL);
|
dev, port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,7 +334,7 @@ int ogs_sbi_context_parse_config(const char *local, const char *remote)
|
||||||
rv = ogs_socknode_probe(
|
rv = ogs_socknode_probe(
|
||||||
ogs_app()->parameter.no_ipv4 ? NULL : &list,
|
ogs_app()->parameter.no_ipv4 ? NULL : &list,
|
||||||
ogs_app()->parameter.no_ipv6 ? NULL : &list6,
|
ogs_app()->parameter.no_ipv6 ? NULL : &list6,
|
||||||
NULL, self.sbi_port, NULL);
|
NULL, self.sbi_port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
|
|
||||||
node = ogs_list_first(&list);
|
node = ogs_list_first(&list);
|
||||||
|
|
|
@ -296,7 +296,7 @@ int amf_context_parse_config(void)
|
||||||
NULL : &self.ngap_list,
|
NULL : &self.ngap_list,
|
||||||
ogs_app()->parameter.no_ipv6 ?
|
ogs_app()->parameter.no_ipv6 ?
|
||||||
NULL : &self.ngap_list6,
|
NULL : &self.ngap_list6,
|
||||||
dev, port, NULL);
|
dev, port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -310,7 +310,7 @@ int amf_context_parse_config(void)
|
||||||
NULL : &self.ngap_list,
|
NULL : &self.ngap_list,
|
||||||
ogs_app()->parameter.no_ipv6 ?
|
ogs_app()->parameter.no_ipv6 ?
|
||||||
NULL : &self.ngap_list6,
|
NULL : &self.ngap_list6,
|
||||||
NULL, self.ngap_port, NULL);
|
NULL, self.ngap_port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(amf_key, "guami")) {
|
} else if (!strcmp(amf_key, "guami")) {
|
||||||
|
|
|
@ -506,7 +506,7 @@ int mme_context_parse_config()
|
||||||
NULL : &self.s1ap_list,
|
NULL : &self.s1ap_list,
|
||||||
ogs_app()->parameter.no_ipv6 ?
|
ogs_app()->parameter.no_ipv6 ?
|
||||||
NULL : &self.s1ap_list6,
|
NULL : &self.s1ap_list6,
|
||||||
dev, port, NULL);
|
dev, port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -520,7 +520,7 @@ int mme_context_parse_config()
|
||||||
NULL : &self.s1ap_list,
|
NULL : &self.s1ap_list,
|
||||||
ogs_app()->parameter.no_ipv6 ?
|
ogs_app()->parameter.no_ipv6 ?
|
||||||
NULL : &self.s1ap_list6,
|
NULL : &self.s1ap_list6,
|
||||||
NULL, self.s1ap_port, NULL);
|
NULL, self.s1ap_port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(mme_key, "gtpc")) {
|
} else if (!strcmp(mme_key, "gtpc")) {
|
||||||
|
|
|
@ -233,7 +233,7 @@ int nssf_context_parse_config(void)
|
||||||
rv = ogs_socknode_probe(
|
rv = ogs_socknode_probe(
|
||||||
ogs_app()->parameter.no_ipv4 ? NULL : &list,
|
ogs_app()->parameter.no_ipv4 ? NULL : &list,
|
||||||
ogs_app()->parameter.no_ipv6 ? NULL : &list6,
|
ogs_app()->parameter.no_ipv6 ? NULL : &list6,
|
||||||
dev, port, NULL);
|
dev, port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -244,7 +244,7 @@ int test_context_parse_config(void)
|
||||||
NULL : &self.ngap_list,
|
NULL : &self.ngap_list,
|
||||||
ogs_app()->parameter.no_ipv6 ?
|
ogs_app()->parameter.no_ipv6 ?
|
||||||
NULL : &self.ngap_list6,
|
NULL : &self.ngap_list6,
|
||||||
dev, port, NULL);
|
dev, port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,7 +258,7 @@ int test_context_parse_config(void)
|
||||||
NULL : &self.ngap_list,
|
NULL : &self.ngap_list,
|
||||||
ogs_app()->parameter.no_ipv6 ?
|
ogs_app()->parameter.no_ipv6 ?
|
||||||
NULL : &self.ngap_list6,
|
NULL : &self.ngap_list6,
|
||||||
NULL, self.ngap_port, NULL);
|
NULL, self.ngap_port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
} if (!strcmp(amf_key, "tai")) {
|
} if (!strcmp(amf_key, "tai")) {
|
||||||
|
@ -628,7 +628,7 @@ int test_context_parse_config(void)
|
||||||
NULL : &self.s1ap_list,
|
NULL : &self.s1ap_list,
|
||||||
ogs_app()->parameter.no_ipv6 ?
|
ogs_app()->parameter.no_ipv6 ?
|
||||||
NULL : &self.s1ap_list6,
|
NULL : &self.s1ap_list6,
|
||||||
dev, port, NULL);
|
dev, port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -642,7 +642,7 @@ int test_context_parse_config(void)
|
||||||
NULL : &self.s1ap_list,
|
NULL : &self.s1ap_list,
|
||||||
ogs_app()->parameter.no_ipv6 ?
|
ogs_app()->parameter.no_ipv6 ?
|
||||||
NULL : &self.s1ap_list6,
|
NULL : &self.s1ap_list6,
|
||||||
NULL, self.s1ap_port, NULL);
|
NULL, self.s1ap_port);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(mme_key, "tai")) {
|
} else if (!strcmp(mme_key, "tai")) {
|
||||||
|
|
|
@ -47,7 +47,7 @@ ogs_socknode_t *test_gtpu_server(int index, int family)
|
||||||
node = ogs_socknode_new(addr);
|
node = ogs_socknode_new(addr);
|
||||||
ogs_assert(node);
|
ogs_assert(node);
|
||||||
|
|
||||||
sock = ogs_udp_server(node);
|
sock = ogs_udp_server(node, false);
|
||||||
ogs_assert(sock);
|
ogs_assert(sock);
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
|
|
|
@ -62,7 +62,7 @@ static void test1_func(abts_case *tc, void *data)
|
||||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||||
server[i] = ogs_socknode_new(addr);
|
server[i] = ogs_socknode_new(addr);
|
||||||
ABTS_PTR_NOTNULL(tc, server[i]);
|
ABTS_PTR_NOTNULL(tc, server[i]);
|
||||||
ogs_udp_server(server[i]);
|
ogs_udp_server(server[i], false, false);
|
||||||
ABTS_PTR_NOTNULL(tc, server[i]->sock);
|
ABTS_PTR_NOTNULL(tc, server[i]->sock);
|
||||||
rv = ogs_getaddrinfo(&addr, AF_INET, "127.0.0.1", PORT+i, AI_PASSIVE);
|
rv = ogs_getaddrinfo(&addr, AF_INET, "127.0.0.1", PORT+i, AI_PASSIVE);
|
||||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||||
|
@ -293,7 +293,7 @@ static void test4_func(abts_case *tc, void *data)
|
||||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||||
node = ogs_socknode_new(addr);
|
node = ogs_socknode_new(addr);
|
||||||
ABTS_PTR_NOTNULL(tc, node);
|
ABTS_PTR_NOTNULL(tc, node);
|
||||||
udp = ogs_udp_server(node);
|
udp = ogs_udp_server(node, false);
|
||||||
ABTS_PTR_NOTNULL(tc, udp);
|
ABTS_PTR_NOTNULL(tc, udp);
|
||||||
poll = ogs_pollset_add(pollset, OGS_POLLIN, udp->fd, test4_handler, tc);
|
poll = ogs_pollset_add(pollset, OGS_POLLIN, udp->fd, test4_handler, tc);
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ static void test1_func(abts_case *tc, void *data)
|
||||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||||
node = ogs_socknode_new(addr);
|
node = ogs_socknode_new(addr);
|
||||||
ABTS_PTR_NOTNULL(tc, node);
|
ABTS_PTR_NOTNULL(tc, node);
|
||||||
udp = ogs_udp_server(node);
|
udp = ogs_udp_server(node, false);
|
||||||
ABTS_PTR_NOTNULL(tc, udp);
|
ABTS_PTR_NOTNULL(tc, udp);
|
||||||
ogs_socknode_free(node);
|
ogs_socknode_free(node);
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ static void test1_func(abts_case *tc, void *data)
|
||||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||||
node = ogs_socknode_new(addr);
|
node = ogs_socknode_new(addr);
|
||||||
ABTS_PTR_NOTNULL(tc, node);
|
ABTS_PTR_NOTNULL(tc, node);
|
||||||
udp = ogs_udp_server(node);
|
udp = ogs_udp_server(node, false);
|
||||||
ABTS_PTR_NOTNULL(tc, udp);
|
ABTS_PTR_NOTNULL(tc, udp);
|
||||||
ogs_socknode_free(node);
|
ogs_socknode_free(node);
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ static void test1_func(abts_case *tc, void *data)
|
||||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||||
node = ogs_socknode_new(addr);
|
node = ogs_socknode_new(addr);
|
||||||
ABTS_PTR_NOTNULL(tc, node);
|
ABTS_PTR_NOTNULL(tc, node);
|
||||||
udp = ogs_udp_server(node);
|
udp = ogs_udp_server(node, false);
|
||||||
ABTS_PTR_NOTNULL(tc, udp);
|
ABTS_PTR_NOTNULL(tc, udp);
|
||||||
ogs_socknode_free(node);
|
ogs_socknode_free(node);
|
||||||
}
|
}
|
||||||
|
@ -154,7 +154,7 @@ static void test3_func(abts_case *tc, void *data)
|
||||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||||
node = ogs_socknode_new(addr);
|
node = ogs_socknode_new(addr);
|
||||||
ABTS_PTR_NOTNULL(tc, node);
|
ABTS_PTR_NOTNULL(tc, node);
|
||||||
udp = ogs_udp_server(node);
|
udp = ogs_udp_server(node, false);
|
||||||
ABTS_PTR_NOTNULL(tc, udp);
|
ABTS_PTR_NOTNULL(tc, udp);
|
||||||
|
|
||||||
test3_thread = ogs_thread_create(test3_main, tc);
|
test3_thread = ogs_thread_create(test3_main, tc);
|
||||||
|
@ -211,7 +211,7 @@ static void test4_func(abts_case *tc, void *data)
|
||||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||||
node = ogs_socknode_new(addr);
|
node = ogs_socknode_new(addr);
|
||||||
ABTS_PTR_NOTNULL(tc, node);
|
ABTS_PTR_NOTNULL(tc, node);
|
||||||
udp = ogs_udp_server(node);
|
udp = ogs_udp_server(node, false);
|
||||||
ABTS_PTR_NOTNULL(tc, udp);
|
ABTS_PTR_NOTNULL(tc, udp);
|
||||||
|
|
||||||
test4_thread = ogs_thread_create(test4_main, tc);
|
test4_thread = ogs_thread_create(test4_main, tc);
|
||||||
|
@ -244,7 +244,7 @@ static void test5_main(void *data)
|
||||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||||
node = ogs_socknode_new(addr);
|
node = ogs_socknode_new(addr);
|
||||||
ABTS_PTR_NOTNULL(tc, node);
|
ABTS_PTR_NOTNULL(tc, node);
|
||||||
udp = ogs_udp_server(node);
|
udp = ogs_udp_server(node, false);
|
||||||
ABTS_PTR_NOTNULL(tc, udp);
|
ABTS_PTR_NOTNULL(tc, udp);
|
||||||
|
|
||||||
rv = ogs_getaddrinfo(&addr, AF_INET6, NULL, PORT, 0);
|
rv = ogs_getaddrinfo(&addr, AF_INET6, NULL, PORT, 0);
|
||||||
|
@ -277,7 +277,7 @@ static void test5_func(abts_case *tc, void *data)
|
||||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||||
node = ogs_socknode_new(addr);
|
node = ogs_socknode_new(addr);
|
||||||
ABTS_PTR_NOTNULL(tc, node);
|
ABTS_PTR_NOTNULL(tc, node);
|
||||||
udp = ogs_udp_server(node);
|
udp = ogs_udp_server(node, false);
|
||||||
ABTS_PTR_NOTNULL(tc, udp);
|
ABTS_PTR_NOTNULL(tc, udp);
|
||||||
|
|
||||||
rv = ogs_getaddrinfo(&addr, AF_INET6, NULL, PORT2, 0);
|
rv = ogs_getaddrinfo(&addr, AF_INET6, NULL, PORT2, 0);
|
||||||
|
@ -396,7 +396,7 @@ static void test7_func(abts_case *tc, void *data)
|
||||||
|
|
||||||
ogs_socknode_remove_all(&list);
|
ogs_socknode_remove_all(&list);
|
||||||
|
|
||||||
rv = ogs_socknode_probe(&list, &list6, NULL, PORT, NULL);
|
rv = ogs_socknode_probe(&list, &list6, NULL, PORT);
|
||||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||||
|
|
||||||
ogs_socknode_remove_all(&list);
|
ogs_socknode_remove_all(&list);
|
||||||
|
|
|
@ -38,7 +38,7 @@ ogs_socknode_t *test_epdg_server(uint16_t port)
|
||||||
node = ogs_socknode_new(addr);
|
node = ogs_socknode_new(addr);
|
||||||
ogs_assert(node);
|
ogs_assert(node);
|
||||||
|
|
||||||
sock = ogs_udp_server(node);
|
sock = ogs_udp_server(node, false);
|
||||||
ogs_assert(sock);
|
ogs_assert(sock);
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
|
|
Loading…
Reference in New Issue