This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Max gerrit-no-reply at lists.osmocom.orgHello Jenkins Builder,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/1629
to look at the new patch set (#2).
Expand and expose ctrl connection allocation
Add function for allocating CTRL connection to public headers and
replace call to previous static function with it.
Change-Id: I522ed809cbebfd3d7dd08b4ed9137b39ff192e32
---
M include/osmocom/ctrl/control_if.h
M src/ctrl/control_if.c
2 files changed, 38 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/29/1629/2
diff --git a/include/osmocom/ctrl/control_if.h b/include/osmocom/ctrl/control_if.h
index 512ae10..f2af1db 100644
--- a/include/osmocom/ctrl/control_if.h
+++ b/include/osmocom/ctrl/control_if.h
@@ -27,5 +27,5 @@
const char *bind_addr,
uint16_t port,
ctrl_cmd_lookup lookup);
-
+struct ctrl_connection *osmo_ctrl_conn_alloc(void *ctx, void *data);
int ctrl_cmd_handle(struct ctrl_handle *ctrl, struct ctrl_cmd *cmd, void *data);
diff --git a/src/ctrl/control_if.c b/src/ctrl/control_if.c
index df39486..376b7d3 100644
--- a/src/ctrl/control_if.c
+++ b/src/ctrl/control_if.c
@@ -357,7 +357,7 @@
return ret;
}
-static int control_write_cb(struct osmo_fd *bfd, struct msgb *msg)
+int control_write_cb(struct osmo_fd *bfd, struct msgb *msg)
{
int rc;
@@ -368,7 +368,7 @@
return rc;
}
-static struct ctrl_connection *ctrl_connection_alloc(void *ctx)
+struct ctrl_connection *osmo_ctrl_conn_alloc(void *ctx, void *data)
{
struct ctrl_connection *ccon = talloc_zero(ctx, struct ctrl_connection);
if (!ccon)
@@ -379,6 +379,9 @@
INIT_LLIST_HEAD(&ccon->cmds);
INIT_LLIST_HEAD(&ccon->def_cmds);
+
+ ccon->write_queue.bfd.data = data ? data : ccon;
+ ccon->write_queue.write_cb = control_write_cb;
return ccon;
}
@@ -412,19 +415,17 @@
return ret;
}
#endif
- ccon = ctrl_connection_alloc(listen_bfd->data);
+ ctrl = listen_bfd->data;
+ ccon = osmo_ctrl_conn_alloc(listen_bfd->data, ctrl);
if (!ccon) {
LOGP(DLCTRL, LOGL_ERROR, "Failed to allocate.\n");
close(fd);
return -1;
}
- ctrl = listen_bfd->data;
- ccon->write_queue.bfd.data = ctrl;
ccon->write_queue.bfd.fd = fd;
ccon->write_queue.bfd.when = BSC_FD_READ;
ccon->write_queue.read_cb = handle_control_read;
- ccon->write_queue.write_cb = control_write_cb;
ret = osmo_fd_register(&ccon->write_queue.bfd);
if (ret < 0) {
@@ -654,6 +655,36 @@
return ctrl_interface_setup_dynip(data, "127.0.0.1", port, lookup);
}
+struct ctrl_handle *ctrl_interface_connect(void *data, const char *addr,
+ uint16_t port,
+ ctrl_cmd_lookup lookup)
+{
+ int ret;
+ struct ctrl_handle *ctrl;
+
+ ctrl = talloc_zero(data, struct ctrl_handle);
+ if (!ctrl)
+ return NULL;
+
+ INIT_LLIST_HEAD(&ctrl->ccon_list);
+
+ ctrl->data = data;
+ ctrl->lookup = lookup;
+
+ ctrl->listen_fd.cb = NULL;
+ ctrl->listen_fd.data = ctrl;
+ ret = osmo_sock_init_ifd(&ctrl->listen_fd, AF_INET, SOCK_STREAM,
+ IPPROTO_TCP, addr, port, OSMO_SOCK_F_CONNECT);
+ if (ret < 0) {
+ LOGP(DLCTRL, LOGL_ERROR, "Cannot connect to CTRL at %s:%u\n",
+ addr, port);
+ talloc_free(ctrl);
+ return NULL;
+ }
+ LOGP(DLCTRL, LOGL_NOTICE, "CTRL connected to %s:%u\n", addr, port);
+ return ctrl;
+}
+
struct ctrl_handle *ctrl_interface_setup_dynip(void *data,
const char *bind_addr,
uint16_t port,
--
To view, visit https://gerrit.osmocom.org/1629
To unsubscribe, visit https://gerrit.osmocom.org/settings
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I522ed809cbebfd3d7dd08b4ed9137b39ff192e32
Gerrit-PatchSet: 2
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Max <msuraev at sysmocom.de>