UDP interface is changed

This commit is contained in:
Sukchan Lee
2019-05-30 21:14:54 +09:00
parent 550be1cd95
commit 2267a59cc3
12 changed files with 58 additions and 62 deletions

View File

@@ -28,7 +28,7 @@ int gtp_server(ogs_socknode_t *snode)
char buf[OGS_ADDRSTRLEN]; char buf[OGS_ADDRSTRLEN];
ogs_assert(snode); ogs_assert(snode);
snode->sock = ogs_udp_server(snode->addr); ogs_udp_server(snode);
ogs_assert(snode->sock); ogs_assert(snode->sock);
ogs_info("gtp_server() [%s]:%d", ogs_info("gtp_server() [%s]:%d",
@@ -37,21 +37,6 @@ int gtp_server(ogs_socknode_t *snode)
return OGS_OK; return OGS_OK;
} }
int gtp_client(gtp_node_t *gnode)
{
char buf[OGS_ADDRSTRLEN];
ogs_assert(gnode);
gnode->sock = ogs_udp_client(gnode->sa_list);
ogs_assert(gnode->sock);
memcpy(&gnode->conn, &gnode->sock->remote_addr, sizeof gnode->conn);
ogs_info("gtp_client() [%s]:%d",
OGS_ADDR(gnode->sa_list, buf), OGS_PORT(gnode->sa_list));
return OGS_OK;
}
int gtp_connect(ogs_sock_t *ipv4, ogs_sock_t *ipv6, gtp_node_t *gnode) int gtp_connect(ogs_sock_t *ipv4, ogs_sock_t *ipv6, gtp_node_t *gnode)
{ {
ogs_sockaddr_t *addr; ogs_sockaddr_t *addr;

View File

@@ -27,7 +27,6 @@ extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
int gtp_server(ogs_socknode_t *snode); int gtp_server(ogs_socknode_t *snode);
int gtp_client(gtp_node_t *gnode);
int gtp_connect(ogs_sock_t *ipv4, ogs_sock_t *ipv6, gtp_node_t *gnode); int gtp_connect(ogs_sock_t *ipv4, ogs_sock_t *ipv6, gtp_node_t *gnode);
ogs_sock_t *gtp_local_sock_first(ogs_list_t *list); ogs_sock_t *gtp_local_sock_first(ogs_list_t *list);

View File

@@ -95,12 +95,16 @@ int mme_gtp_close()
ogs_list_for_each(&mme_self()->gtpc_list, snode) ogs_list_for_each(&mme_self()->gtpc_list, snode)
{ {
ogs_pollset_remove(snode->poll); ogs_pollset_remove(snode->poll);
#if 0
ogs_sock_destroy(snode->sock); ogs_sock_destroy(snode->sock);
#endif
} }
ogs_list_for_each(&mme_self()->gtpc_list6, snode) ogs_list_for_each(&mme_self()->gtpc_list6, snode)
{ {
ogs_pollset_remove(snode->poll); ogs_pollset_remove(snode->poll);
#if 0
ogs_sock_destroy(snode->sock); ogs_sock_destroy(snode->sock);
#endif
} }
return OGS_OK; return OGS_OK;

View File

@@ -45,7 +45,9 @@ void s1ap_delete(ogs_socknode_t *snode)
ogs_assert(snode); ogs_assert(snode);
ogs_pollset_remove(snode->poll); ogs_pollset_remove(snode->poll);
#if 0 /* FIXME */
s1ap_closesocket(snode->sock); s1ap_closesocket(snode->sock);
#endif
} }
int s1ap_send(ogs_sock_t *sock, ogs_pkbuf_t *pkbuf, int s1ap_send(ogs_sock_t *sock, ogs_pkbuf_t *pkbuf,

View File

@@ -315,23 +315,31 @@ int pgw_gtp_close()
ogs_list_for_each(&pgw_self()->gtpc_list, snode) ogs_list_for_each(&pgw_self()->gtpc_list, snode)
{ {
ogs_pollset_remove(snode->poll); ogs_pollset_remove(snode->poll);
#if 0
ogs_sock_destroy(snode->sock); ogs_sock_destroy(snode->sock);
#endif
} }
ogs_list_for_each(&pgw_self()->gtpc_list6, snode) ogs_list_for_each(&pgw_self()->gtpc_list6, snode)
{ {
ogs_pollset_remove(snode->poll); ogs_pollset_remove(snode->poll);
#if 0
ogs_sock_destroy(snode->sock); ogs_sock_destroy(snode->sock);
#endif
} }
ogs_list_for_each(&pgw_self()->gtpu_list, snode) ogs_list_for_each(&pgw_self()->gtpu_list, snode)
{ {
ogs_pollset_remove(snode->poll); ogs_pollset_remove(snode->poll);
#if 0
ogs_sock_destroy(snode->sock); ogs_sock_destroy(snode->sock);
#endif
} }
ogs_list_for_each(&pgw_self()->gtpu_list6, snode) ogs_list_for_each(&pgw_self()->gtpu_list6, snode)
{ {
ogs_pollset_remove(snode->poll); ogs_pollset_remove(snode->poll);
#if 0
ogs_sock_destroy(snode->sock); ogs_sock_destroy(snode->sock);
#endif
} }
for (dev = pgw_dev_first(); dev; dev = pgw_dev_next(dev)) for (dev = pgw_dev_first(); dev; dev = pgw_dev_next(dev))

View File

@@ -320,23 +320,31 @@ int sgw_gtp_close()
ogs_list_for_each(&sgw_self()->gtpc_list, snode) ogs_list_for_each(&sgw_self()->gtpc_list, snode)
{ {
ogs_pollset_remove(snode->poll); ogs_pollset_remove(snode->poll);
#if 0
ogs_sock_destroy(snode->sock); ogs_sock_destroy(snode->sock);
#endif
} }
ogs_list_for_each(&sgw_self()->gtpc_list6, snode) ogs_list_for_each(&sgw_self()->gtpc_list6, snode)
{ {
ogs_pollset_remove(snode->poll); ogs_pollset_remove(snode->poll);
#if 0
ogs_sock_destroy(snode->sock); ogs_sock_destroy(snode->sock);
#endif
} }
ogs_list_for_each(&sgw_self()->gtpu_list, snode) ogs_list_for_each(&sgw_self()->gtpu_list, snode)
{ {
ogs_pollset_remove(snode->poll); ogs_pollset_remove(snode->poll);
#if 0
ogs_sock_destroy(snode->sock); ogs_sock_destroy(snode->sock);
#endif
} }
ogs_list_for_each(&sgw_self()->gtpu_list6, snode) ogs_list_for_each(&sgw_self()->gtpu_list6, snode)
{ {
ogs_pollset_remove(snode->poll); ogs_pollset_remove(snode->poll);
#if 0
ogs_sock_destroy(snode->sock); ogs_sock_destroy(snode->sock);
#endif
} }
return OGS_OK; return OGS_OK;

View File

@@ -77,32 +77,33 @@ int testenb_s1ap_close(ogs_sock_t *sock)
return OGS_OK; return OGS_OK;
} }
ogs_sock_t *testenb_gtpu_server(const char *ipstr) ogs_socknode_t *testenb_gtpu_server(const char *ipstr)
{ {
int rv; int rv;
ogs_sockaddr_t *addr = NULL; ogs_socknode_t *node = NULL;
ogs_sock_t *sock = NULL; ogs_sock_t *sock = NULL;
rv = ogs_getaddrinfo(&addr, AF_UNSPEC, ipstr, GTPV1_U_UDP_PORT, 0); node = ogs_socknode_new(AF_UNSPEC, ipstr, GTPV1_U_UDP_PORT, 0);
ogs_assert(rv == OGS_OK); ogs_assert(node);
sock = ogs_udp_server(addr); sock = ogs_udp_server(node);
ogs_assert(sock); ogs_assert(sock);
ogs_freeaddrinfo(addr); return node;
return sock;
} }
ogs_pkbuf_t *testenb_gtpu_read(ogs_sock_t *sock) ogs_pkbuf_t *testenb_gtpu_read(ogs_socknode_t *node)
{ {
int rc = 0; int rc = 0;
ogs_pkbuf_t *recvbuf = ogs_pkbuf_alloc(NULL, MAX_SDU_LEN); ogs_pkbuf_t *recvbuf = ogs_pkbuf_alloc(NULL, MAX_SDU_LEN);
ogs_pkbuf_put(recvbuf, MAX_SDU_LEN); ogs_pkbuf_put(recvbuf, MAX_SDU_LEN);
ogs_assert(node);
ogs_assert(node->sock);
while(1) while(1)
{ {
rc = ogs_recv(sock->fd, recvbuf->data, recvbuf->len, 0); rc = ogs_recv(node->sock->fd, recvbuf->data, recvbuf->len, 0);
if (rc == -2) if (rc == -2)
{ {
continue; continue;
@@ -125,7 +126,7 @@ ogs_pkbuf_t *testenb_gtpu_read(ogs_sock_t *sock)
return recvbuf; return recvbuf;
} }
int testenb_gtpu_send(ogs_sock_t *sock, ogs_pkbuf_t *sendbuf) int testenb_gtpu_send(ogs_socknode_t *node, ogs_pkbuf_t *sendbuf)
{ {
int rv; int rv;
ogs_hash_index_t *hi = NULL; ogs_hash_index_t *hi = NULL;
@@ -136,7 +137,8 @@ int testenb_gtpu_send(ogs_sock_t *sock, ogs_pkbuf_t *sendbuf)
ogs_sockaddr_t sgw; ogs_sockaddr_t sgw;
ssize_t sent; ssize_t sent;
ogs_assert(sock); ogs_assert(node);
ogs_assert(node->sock);
hi = mme_ue_first(); hi = mme_ue_first();
ogs_assert(hi); ogs_assert(hi);
@@ -167,7 +169,7 @@ int testenb_gtpu_send(ogs_sock_t *sock, ogs_pkbuf_t *sendbuf)
sgw.sin.sin_addr.s_addr = bearer->sgw_s1u_ip.addr; sgw.sin.sin_addr.s_addr = bearer->sgw_s1u_ip.addr;
} }
sent = ogs_sendto(sock->fd, sendbuf->data, sendbuf->len, 0, &sgw); sent = ogs_sendto(node->sock->fd, sendbuf->data, sendbuf->len, 0, &sgw);
ogs_pkbuf_free(sendbuf); ogs_pkbuf_free(sendbuf);
if (sent < 0 || sent != sendbuf->len) if (sent < 0 || sent != sendbuf->len)
return OGS_ERROR; return OGS_ERROR;
@@ -175,10 +177,9 @@ int testenb_gtpu_send(ogs_sock_t *sock, ogs_pkbuf_t *sendbuf)
return OGS_OK; return OGS_OK;
} }
int testenb_gtpu_close(ogs_sock_t *sock) void testenb_gtpu_close(ogs_socknode_t *node)
{ {
ogs_sock_destroy(sock); ogs_socknode_free(node);
return OGS_OK;
} }

View File

@@ -15,10 +15,10 @@ ogs_pkbuf_t *testenb_s1ap_read(ogs_sock_t *sock);
int testenb_s1ap_send(ogs_sock_t *sock, ogs_pkbuf_t *sendbuf); int testenb_s1ap_send(ogs_sock_t *sock, ogs_pkbuf_t *sendbuf);
int testenb_s1ap_close(ogs_sock_t *sock); int testenb_s1ap_close(ogs_sock_t *sock);
ogs_sock_t *testenb_gtpu_server(const char *ipstr); ogs_socknode_t *testenb_gtpu_server(const char *ipstr);
ogs_pkbuf_t *testenb_gtpu_read(ogs_sock_t *sock); ogs_pkbuf_t *testenb_gtpu_read(ogs_socknode_t *node);
int testenb_gtpu_send(ogs_sock_t *sock, ogs_pkbuf_t *sendbuf); int testenb_gtpu_send(ogs_socknode_t *node, ogs_pkbuf_t *sendbuf);
int testenb_gtpu_close(ogs_sock_t *sock); void testenb_gtpu_close(ogs_socknode_t *node);
int tests1ap_build_setup_req( int tests1ap_build_setup_req(
ogs_pkbuf_t **pkbuf, S1AP_ENB_ID_PR present, uint32_t enb_id, ogs_pkbuf_t **pkbuf, S1AP_ENB_ID_PR present, uint32_t enb_id,

View File

@@ -18,7 +18,7 @@ static void attach_test1(abts_case *tc, void *data)
{ {
int rv; int rv;
ogs_sock_t *sock; ogs_sock_t *sock;
ogs_sock_t *gtpu; ogs_socknode_t *gtpu;
ogs_pkbuf_t *sendbuf; ogs_pkbuf_t *sendbuf;
ogs_pkbuf_t *recvbuf; ogs_pkbuf_t *recvbuf;
s1ap_message_t message; s1ap_message_t message;
@@ -439,8 +439,7 @@ static void attach_test1(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, rv); ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* eNB disonncect from SGW */ /* eNB disonncect from SGW */
rv = testenb_gtpu_close(gtpu); testenb_gtpu_close(gtpu);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(300); ogs_msleep(300);
return; return;
@@ -463,8 +462,7 @@ out:
ABTS_INT_EQUAL(tc, OGS_OK, rv); ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* eNB disonncect from SGW */ /* eNB disonncect from SGW */
rv = testenb_gtpu_close(gtpu); testenb_gtpu_close(gtpu);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
#endif #endif
} }
@@ -1164,7 +1162,7 @@ static void attach_test4(abts_case *tc, void *data)
{ {
int rv; int rv;
ogs_sock_t *sock; ogs_sock_t *sock;
ogs_sock_t *gtpu; ogs_socknode_t *gtpu;
ogs_pkbuf_t *sendbuf; ogs_pkbuf_t *sendbuf;
ogs_pkbuf_t *recvbuf; ogs_pkbuf_t *recvbuf;
s1ap_message_t message; s1ap_message_t message;
@@ -1345,8 +1343,7 @@ static void attach_test4(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, rv); ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* eNB disonncect from SGW */ /* eNB disonncect from SGW */
rv = testenb_gtpu_close(gtpu); testenb_gtpu_close(gtpu);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(300); ogs_msleep(300);
} }
@@ -1355,7 +1352,6 @@ static void attach_test5(abts_case *tc, void *data)
{ {
int rv; int rv;
ogs_sock_t *sock; ogs_sock_t *sock;
ogs_sock_t *gtpu;
ogs_pkbuf_t *sendbuf; ogs_pkbuf_t *sendbuf;
ogs_pkbuf_t *recvbuf; ogs_pkbuf_t *recvbuf;
s1ap_message_t message; s1ap_message_t message;

View File

@@ -13,7 +13,7 @@ static void handover_test1(abts_case *tc, void *data)
{ {
int rv; int rv;
ogs_sock_t *sock1, *sock2; ogs_sock_t *sock1, *sock2;
ogs_sock_t *gtpu1, *gtpu2; ogs_socknode_t *gtpu1, *gtpu2;
ogs_pkbuf_t *sendbuf; ogs_pkbuf_t *sendbuf;
ogs_pkbuf_t *recvbuf; ogs_pkbuf_t *recvbuf;
s1ap_message_t message; s1ap_message_t message;
@@ -314,11 +314,8 @@ static void handover_test1(abts_case *tc, void *data)
mongoc_collection_destroy(collection); mongoc_collection_destroy(collection);
/* eNB disonncect from SGW */ /* eNB disonncect from SGW */
rv = testenb_gtpu_close(gtpu2); testenb_gtpu_close(gtpu2);
ABTS_INT_EQUAL(tc, OGS_OK, rv); testenb_gtpu_close(gtpu1);
rv = testenb_gtpu_close(gtpu1);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Two eNB disonncect from MME */ /* Two eNB disonncect from MME */
rv = testenb_s1ap_close(sock2); rv = testenb_s1ap_close(sock2);
@@ -334,7 +331,7 @@ static void handover_test2(abts_case *tc, void *data)
{ {
int rv; int rv;
ogs_sock_t *sock1, *sock2; ogs_sock_t *sock1, *sock2;
ogs_sock_t *gtpu1, *gtpu2; ogs_socknode_t *gtpu1, *gtpu2;
ogs_pkbuf_t *sendbuf; ogs_pkbuf_t *sendbuf;
ogs_pkbuf_t *recvbuf; ogs_pkbuf_t *recvbuf;
s1ap_message_t message; s1ap_message_t message;
@@ -824,11 +821,8 @@ static void handover_test2(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, rv); ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* eNB disonncect from SGW */ /* eNB disonncect from SGW */
rv = testenb_gtpu_close(gtpu1); testenb_gtpu_close(gtpu1);
ABTS_INT_EQUAL(tc, OGS_OK, rv); testenb_gtpu_close(gtpu2);
rv = testenb_gtpu_close(gtpu2);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(300); ogs_msleep(300);
} }

View File

@@ -14,7 +14,7 @@ static void test1_func(abts_case *tc, void *data)
{ {
int rv; int rv;
ogs_sock_t *sock; ogs_sock_t *sock;
ogs_sock_t *gtpu; ogs_socknode_t *gtpu;
ogs_pkbuf_t *sendbuf; ogs_pkbuf_t *sendbuf;
ogs_pkbuf_t *recvbuf; ogs_pkbuf_t *recvbuf;
s1ap_message_t message; s1ap_message_t message;
@@ -254,8 +254,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, rv); ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* eNB disonncect from SGW */ /* eNB disonncect from SGW */
rv = testenb_gtpu_close(gtpu); testenb_gtpu_close(gtpu);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(300); ogs_msleep(300);
} }