osmo-mgw[master]: osmo-mgw: Use libosmocore socket abstraction

2018-01-08 Thread Harald Welte

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

2018-01-08 Thread Harald Welte
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

2017-11-21 Thread Neels Hofmeyr

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

2017-11-20 Thread Max

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

2017-11-17 Thread Harald Welte
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

2017-11-17 Thread Harald Welte

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