osmo-mgw[master]: osmo-mgw: Use libosmocore socket abstraction
Patch Set 4: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/4900 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I39d47b8a27f683060a2facf2dbecff8d00c19ce9 Gerrit-PatchSet: 4 Gerrit-Project: osmo-mgw Gerrit-Branch: master Gerrit-Owner: Harald Welte Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Max Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: dexter Gerrit-HasComments: No
[MERGED] osmo-mgw[master]: osmo-mgw: Use libosmocore socket abstraction
Harald Welte has submitted this change and it was merged. Change subject: osmo-mgw: Use libosmocore socket abstraction .. osmo-mgw: Use libosmocore socket abstraction There's no need for us to use the sockets API directly: We have pretty nice socket helper functions in libosmocore, let's make use of them. Change-Id: I39d47b8a27f683060a2facf2dbecff8d00c19ce9 --- M src/libosmo-mgcp-client/mgcp_client.c M src/libosmo-mgcp/mgcp_network.c M src/osmo-mgw/mgw_main.c 3 files changed, 36 insertions(+), 118 deletions(-) Approvals: Max: Looks good to me, but someone else must approve Neels Hofmeyr: Looks good to me, but someone else must approve Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/src/libosmo-mgcp-client/mgcp_client.c b/src/libosmo-mgcp-client/mgcp_client.c index 7e07d00..9fc414d 100644 --- a/src/libosmo-mgcp-client/mgcp_client.c +++ b/src/libosmo-mgcp-client/mgcp_client.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -448,7 +449,6 @@ int mgcp_client_connect(struct mgcp_client *mgcp) { - int on; struct sockaddr_in addr; struct osmo_wqueue *wq; int rc; @@ -460,46 +460,19 @@ wq = &mgcp->wq; - wq->bfd.fd = socket(AF_INET, SOCK_DGRAM, 0); - if (wq->bfd.fd < 0) { - LOGP(DLMGCP, LOGL_FATAL, "Failed to create UDP socket errno: %d\n", errno); - return -errno; - } - - on = 1; - if (setsockopt(wq->bfd.fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0) { + rc = osmo_sock_init2_ofd(&wq->bfd, AF_INET, SOCK_DGRAM, IPPROTO_UDP, +mgcp->actual.local_addr, mgcp->actual.local_port, +mgcp->actual.remote_addr, mgcp->actual.remote_port, +OSMO_SOCK_F_BIND | OSMO_SOCK_F_CONNECT); + if (rc < 0) { LOGP(DLMGCP, LOGL_FATAL, -"Failed to initialize socket for MGCP GW: %s\n", -strerror(errno)); - rc = -errno; +"Failed to initialize socket %s:%u -> %s:%u for MGCP GW: %s\n", +mgcp->actual.local_addr, mgcp->actual.local_port, +mgcp->actual.remote_addr, mgcp->actual.remote_port, strerror(errno)); goto error_close_fd; } - /* bind socket */ - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - inet_aton(mgcp->actual.local_addr, &addr.sin_addr); - addr.sin_port = htons(mgcp->actual.local_port); - if (bind(wq->bfd.fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) { - LOGP(DLMGCP, LOGL_FATAL, -"Failed to bind for MGCP GW to %s %u\n", -mgcp->actual.local_addr, mgcp->actual.local_port); - rc = -errno; - goto error_close_fd; - } - - /* connect to the remote */ inet_aton(mgcp->actual.remote_addr, &addr.sin_addr); - addr.sin_port = htons(mgcp->actual.remote_port); - if (connect(wq->bfd.fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { - LOGP(DLMGCP, LOGL_FATAL, -"Failed to connect to MGCP GW at %s %u: %s\n", -mgcp->actual.remote_addr, mgcp->actual.remote_port, -strerror(errno)); - rc = -errno; - goto error_close_fd; - } - mgcp->remote_addr = htonl(addr.sin_addr.s_addr); osmo_wqueue_init(wq, 10); @@ -508,11 +481,6 @@ wq->read_cb = mgcp_do_read; wq->write_cb = mgcp_do_write; - if (osmo_fd_register(&wq->bfd) != 0) { - LOGP(DLMGCP, LOGL_FATAL, "Failed to register BFD\n"); - rc = -EIO; - goto error_close_fd; - } LOGP(DLMGCP, LOGL_INFO, "MGCP GW connection: %s:%u -> %s:%u\n", mgcp->actual.local_addr, mgcp->actual.local_port, mgcp->actual.remote_addr, mgcp->actual.remote_port); diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c index ac7dc67..bd6bec9 100644 --- a/src/libosmo-mgcp/mgcp_network.c +++ b/src/libosmo-mgcp/mgcp_network.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include @@ -1118,41 +1117,17 @@ * \returns 0 on success, -1 on ERROR */ int mgcp_create_bind(const char *source_addr, struct osmo_fd *fd, int port) { - struct sockaddr_in addr; - int on = 1; + int rc; - fd->fd = socket(AF_INET, SOCK_DGRAM, 0); - if (fd->fd < 0) { - LOGP(DRTP, LOGL_ERROR, "failed to create UDP port (%s:%i).\n", -source_addr, port); - return -1; - } else { - LOGP(DRTP, LOGL_DEBUG, -"created UDP port (%s:%i).\n", source_addr, port); - } - - if (setsockopt(fd->fd,
osmo-mgw[master]: osmo-mgw: Use libosmocore socket abstraction
Patch Set 3: Code-Review+1 (1 comment) https://gerrit.osmocom.org/#/c/4900/3/src/osmo-mgw/mgw_main.c File src/osmo-mgw/mgw_main.c: Line 301: perror("Gateway failed to bind"); (this error reporting is different from the others... even though the patch is adopting the previous style, shouldn't this be LOGP with addr+port, possibly strerror()? After all we LOGP on success a few lines further down) -- To view, visit https://gerrit.osmocom.org/4900 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I39d47b8a27f683060a2facf2dbecff8d00c19ce9 Gerrit-PatchSet: 3 Gerrit-Project: osmo-mgw Gerrit-Branch: master Gerrit-Owner: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Max Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: dexter Gerrit-HasComments: Yes
osmo-mgw[master]: osmo-mgw: Use libosmocore socket abstraction
Patch Set 3: Code-Review+1 -- To view, visit https://gerrit.osmocom.org/4900 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I39d47b8a27f683060a2facf2dbecff8d00c19ce9 Gerrit-PatchSet: 3 Gerrit-Project: osmo-mgw Gerrit-Branch: master Gerrit-Owner: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Max Gerrit-HasComments: No
[PATCH] osmo-mgw[master]: osmo-mgw: Use libosmocore socket abstraction
Hello Jenkins Builder, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/4900 to look at the new patch set (#2). osmo-mgw: Use libosmocore socket abstraction There's no need for us to use the sockets API directly: We have pretty nice socket helper functions in libosmocore, let's make use of them. Change-Id: I39d47b8a27f683060a2facf2dbecff8d00c19ce9 --- M src/libosmo-mgcp-client/mgcp_client.c M src/libosmo-mgcp/mgcp_network.c M src/osmo-mgw/mgw_main.c 3 files changed, 36 insertions(+), 118 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/00/4900/2 diff --git a/src/libosmo-mgcp-client/mgcp_client.c b/src/libosmo-mgcp-client/mgcp_client.c index 2047637..726ac63 100644 --- a/src/libosmo-mgcp-client/mgcp_client.c +++ b/src/libosmo-mgcp-client/mgcp_client.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -390,7 +391,6 @@ int mgcp_client_connect(struct mgcp_client *mgcp) { - int on; struct sockaddr_in addr; struct osmo_wqueue *wq; int rc; @@ -402,46 +402,19 @@ wq = &mgcp->wq; - wq->bfd.fd = socket(AF_INET, SOCK_DGRAM, 0); - if (wq->bfd.fd < 0) { - LOGP(DLMGCP, LOGL_FATAL, "Failed to create UDP socket errno: %d\n", errno); - return -errno; - } - - on = 1; - if (setsockopt(wq->bfd.fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0) { + rc = osmo_sock_init2_ofd(&wq->bfd, AF_INET, SOCK_DGRAM, IPPROTO_UDP, +mgcp->actual.local_addr, mgcp->actual.local_port, +mgcp->actual.remote_addr, mgcp->actual.remote_port, +OSMO_SOCK_F_BIND | OSMO_SOCK_F_CONNECT); + if (rc < 0) { LOGP(DLMGCP, LOGL_FATAL, -"Failed to initialize socket for MGCP GW: %s\n", -strerror(errno)); - rc = -errno; +"Failed to initialize socket %s:%u -> %s:%u for MGCP GW: %s\n", +mgcp->actual.local_addr, mgcp->actual.local_port, +mgcp->actual.remote_addr, mgcp->actual.remote_port, strerror(errno)); goto error_close_fd; } - /* bind socket */ - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - inet_aton(mgcp->actual.local_addr, &addr.sin_addr); - addr.sin_port = htons(mgcp->actual.local_port); - if (bind(wq->bfd.fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) { - LOGP(DLMGCP, LOGL_FATAL, -"Failed to bind for MGCP GW to %s %u\n", -mgcp->actual.local_addr, mgcp->actual.local_port); - rc = -errno; - goto error_close_fd; - } - - /* connect to the remote */ inet_aton(mgcp->actual.remote_addr, &addr.sin_addr); - addr.sin_port = htons(mgcp->actual.remote_port); - if (connect(wq->bfd.fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { - LOGP(DLMGCP, LOGL_FATAL, -"Failed to connect to MGCP GW at %s %u: %s\n", -mgcp->actual.remote_addr, mgcp->actual.remote_port, -strerror(errno)); - rc = -errno; - goto error_close_fd; - } - mgcp->remote_addr = htonl(addr.sin_addr.s_addr); osmo_wqueue_init(wq, 10); @@ -450,11 +423,6 @@ wq->read_cb = mgcp_do_read; wq->write_cb = mgcp_do_write; - if (osmo_fd_register(&wq->bfd) != 0) { - LOGP(DLMGCP, LOGL_FATAL, "Failed to register BFD\n"); - rc = -EIO; - goto error_close_fd; - } LOGP(DLMGCP, LOGL_INFO, "MGCP GW connection: %s:%u -> %s:%u\n", mgcp->actual.local_addr, mgcp->actual.local_port, mgcp->actual.remote_addr, mgcp->actual.remote_port); diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c index d51b829..302289d 100644 --- a/src/libosmo-mgcp/mgcp_network.c +++ b/src/libosmo-mgcp/mgcp_network.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include @@ -1109,41 +1108,17 @@ * \returns 0 on success, -1 on ERROR */ int mgcp_create_bind(const char *source_addr, struct osmo_fd *fd, int port) { - struct sockaddr_in addr; - int on = 1; + int rc; - fd->fd = socket(AF_INET, SOCK_DGRAM, 0); - if (fd->fd < 0) { - LOGP(DRTP, LOGL_ERROR, "failed to create UDP port (%s:%i).\n", -source_addr, port); - return -1; - } else { - LOGP(DRTP, LOGL_DEBUG, -"created UDP port (%s:%i).\n", source_addr, port); - } - - if (setsockopt(fd->fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0) { - LOGP(DRTP, LOGL_ERROR, -"failed to set socket options (%s:%i).\n", source_addr, -
[PATCH] osmo-mgw[master]: osmo-mgw: Use libosmocore socket abstraction
Review at https://gerrit.osmocom.org/4900 osmo-mgw: Use libosmocore socket abstraction There's no need for us to use the sockets API directly: We have pretty nice socket helper functions in libosmocore, let's make use of them. Change-Id: I39d47b8a27f683060a2facf2dbecff8d00c19ce9 --- M src/osmo-mgw/mgw_main.c 1 file changed, 21 insertions(+), 46 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/00/4900/1 diff --git a/src/osmo-mgw/mgw_main.c b/src/osmo-mgw/mgw_main.c index e21baa8..75bdfe0 100644 --- a/src/osmo-mgw/mgw_main.c +++ b/src/osmo-mgw/mgw_main.c @@ -45,6 +45,7 @@ #include #include #include +#include #include #include @@ -250,8 +251,8 @@ int main(int argc, char **argv) { - struct sockaddr_in addr; - int on = 1, rc; + unsigned int flags; + int rc; tall_bsc_ctx = talloc_named_const(NULL, 1, "mgcp-callagent"); msgb_talloc_ctx_init(tall_bsc_ctx, 0); @@ -289,53 +290,27 @@ cfg->reset_cb = mgcp_rsip_cb; /* we need to bind a socket */ - if (rc == 0) { - cfg->gw_fd.bfd.when = BSC_FD_READ; - cfg->gw_fd.bfd.cb = read_call_agent; - cfg->gw_fd.bfd.fd = socket(AF_INET, SOCK_DGRAM, 0); - if (cfg->gw_fd.bfd.fd < 0) { - perror("Gateway failed to listen"); - return -1; - } + flags = OSMO_SOCK_F_BIND; + if (cfg->call_agent_addr) + flags |= OSMO_SOCK_F_CONNECT; - setsockopt(cfg->gw_fd.bfd.fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); - - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_port = htons(cfg->source_port); - inet_aton(cfg->source_addr, &addr.sin_addr); - - if (bind(cfg->gw_fd.bfd.fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) { - perror("Gateway failed to bind"); - return -1; - } - - cfg->gw_fd.bfd.data = msgb_alloc(4096, "mgcp-msg"); - if (!cfg->gw_fd.bfd.data) { - fprintf(stderr, "Gateway memory error.\n"); - return -1; - } - - if (cfg->call_agent_addr) { - addr.sin_port = htons(2727); - inet_aton(cfg->call_agent_addr, &addr.sin_addr); - if (connect(cfg->gw_fd.bfd.fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) { - LOGP(DLMGCP, LOGL_ERROR, "Failed to connect to: '%s'. errno: %d\n", -cfg->call_agent_addr, errno); - close(cfg->gw_fd.bfd.fd); - cfg->gw_fd.bfd.fd = -1; - return -1; - } - } - - if (osmo_fd_register(&cfg->gw_fd.bfd) != 0) { - LOGP(DLMGCP, LOGL_FATAL, "Failed to register the fd\n"); - return -1; - } - - LOGP(DLMGCP, LOGL_NOTICE, "Configured for MGCP.\n"); + rc = osmo_sock_init2_ofd(&cfg->gw_fd.bfd, AF_INET, SOCK_DGRAM, IPPROTO_UDP, + cfg->source_addr, cfg->source_port, + cfg->call_agent_addr, cfg->call_agent_addr ? 2727 : 0, flags); + if (rc < 0) { + perror("Gateway failed to bind"); + return -1; } + cfg->gw_fd.bfd.cb = read_call_agent; + cfg->gw_fd.bfd.data = msgb_alloc(4096, "mgcp-msg"); + if (!cfg->gw_fd.bfd.data) { + fprintf(stderr, "Gateway memory error.\n"); + return -1; + } + + LOGP(DLMGCP, LOGL_NOTICE, "Configured for MGCP.\n"); + /* initialisation */ srand(time(NULL)); -- To view, visit https://gerrit.osmocom.org/4900 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I39d47b8a27f683060a2facf2dbecff8d00c19ce9 Gerrit-PatchSet: 1 Gerrit-Project: osmo-mgw Gerrit-Branch: master Gerrit-Owner: Harald Welte