pespin has submitted this change. (
https://gerrit.osmocom.org/c/osmo-cbc/+/28736 )
Change subject: Split cbsp/sbcap server socket creation from struct allocation
......................................................................
Split cbsp/sbcap server socket creation from struct allocation
This will be needed when we add client support, since clients will
require the mgr structs to be available during VTY parsing.
Change-Id: I14e49d8d2e603925d7f06a7edb710c0eceb02ea3
---
M include/osmocom/cbc/cbsp_link.h
M include/osmocom/cbc/sbcap_link.h
M src/cbc_data.c
M src/cbsp_link.c
M src/sbcap_link.c
5 files changed, 82 insertions(+), 50 deletions(-)
Approvals:
Jenkins Builder: Verified
fixeria: Looks good to me, but someone else must approve
laforge: Looks good to me, approved
diff --git a/include/osmocom/cbc/cbsp_link.h b/include/osmocom/cbc/cbsp_link.h
index 7fcacdf..9f964e8 100644
--- a/include/osmocom/cbc/cbsp_link.h
+++ b/include/osmocom/cbc/cbsp_link.h
@@ -24,7 +24,8 @@
int (*rx_cb)(struct cbc_cbsp_link *link, struct osmo_cbsp_decoded *dec);
};
-struct cbc_cbsp_mgr *cbc_cbsp_mgr_create(void *ctx);
+struct cbc_cbsp_mgr *cbc_cbsp_mgr_alloc(void *ctx);
+int cbc_cbsp_mgr_open_srv(struct cbc_cbsp_mgr *mgr);
/* a CBSP link with a single (remote) peer connected to us */
struct cbc_cbsp_link {
diff --git a/include/osmocom/cbc/sbcap_link.h b/include/osmocom/cbc/sbcap_link.h
index 5946544..da804a3 100644
--- a/include/osmocom/cbc/sbcap_link.h
+++ b/include/osmocom/cbc/sbcap_link.h
@@ -26,7 +26,8 @@
/* receive call-back; called for every received message */
int (*rx_cb)(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu);
};
-struct cbc_sbcap_mgr *cbc_sbcap_mgr_create(void *ctx);
+struct cbc_sbcap_mgr *cbc_sbcap_mgr_alloc(void *ctx);
+int cbc_sbcap_mgr_open_srv(struct cbc_sbcap_mgr *mgr);
/* an SBc-AP link with a single (remote) peer connected to us */
struct cbc_sbcap_link {
diff --git a/src/cbc_data.c b/src/cbc_data.c
index 5d5a64f..2e350e9 100644
--- a/src/cbc_data.c
+++ b/src/cbc_data.c
@@ -54,6 +54,12 @@
OSMO_ASSERT(cbc->it_q.rest2main);
osmo_fd_register(&cbc->it_q.rest2main->event_ofd);
+ cbc->cbsp.mgr = cbc_cbsp_mgr_alloc(cbc);
+ OSMO_ASSERT(cbc->cbsp.mgr);
+
+ cbc->sbcap.mgr = cbc_sbcap_mgr_alloc(cbc);
+ OSMO_ASSERT(cbc->sbcap.mgr);
+
return cbc;
}
@@ -64,14 +70,14 @@
tall_rest_ctx = talloc_named_const(cbc, 0, "REST");
- if (!(cbc->cbsp.mgr = cbc_cbsp_mgr_create(cbc))) {
+ if ((rc = cbc_cbsp_mgr_open_srv(cbc->cbsp.mgr)) < 0) {
LOGP(DMAIN, LOGL_ERROR, "Error binding CBSP port\n");
- return -EIO;
+ return rc;
}
- if (!(cbc->sbcap.mgr = cbc_sbcap_mgr_create(cbc))) {
+ if ((rc = cbc_sbcap_mgr_open_srv(cbc->sbcap.mgr)) < 0) {
LOGP(DMAIN, LOGL_ERROR, "Error binding SBc-AP port\n");
- return -EIO;
+ return rc;
}
rc = rest_api_init(tall_rest_ctx, cbc->config.ecbe.local_host,
cbc->config.ecbe.local_port);
diff --git a/src/cbsp_link.c b/src/cbsp_link.c
index cd1c308..baf2def 100644
--- a/src/cbsp_link.c
+++ b/src/cbsp_link.c
@@ -225,35 +225,44 @@
osmo_stream_srv_destroy(link->conn);
}
-/* initialize the CBC-side CBSP server */
-struct cbc_cbsp_mgr *cbc_cbsp_mgr_create(void *ctx)
+/*
+ * CBSP Manager
+ */
+struct cbc_cbsp_mgr *cbc_cbsp_mgr_alloc(void *ctx)
{
- struct cbc_cbsp_mgr *cbc = talloc_zero(ctx, struct cbc_cbsp_mgr);
- int rc;
+ struct cbc_cbsp_mgr *mgr;
+
+ mgr = talloc_zero(ctx, struct cbc_cbsp_mgr);
+ OSMO_ASSERT(mgr);
+ mgr->rx_cb = cbc_cbsp_link_rx_cb;
+ INIT_LLIST_HEAD(&mgr->links);
+
+ return mgr;
+}
+
+/* initialize the CBC-side CBSP server */
+int cbc_cbsp_mgr_open_srv(struct cbc_cbsp_mgr *mgr)
+{
char *bind_ip = g_cbc->config.cbsp.local_host;
int bind_port = g_cbc->config.cbsp.local_port;
+ struct osmo_stream_srv_link *srv_link;
+ int rc;
- if (bind_port == -1)
- bind_port = CBSP_TCP_PORT;
-
- OSMO_ASSERT(cbc);
- cbc->rx_cb = cbc_cbsp_link_rx_cb;
- INIT_LLIST_HEAD(&cbc->links);
- cbc->srv_link = osmo_stream_srv_link_create(cbc);
- osmo_stream_srv_link_set_data(cbc->srv_link, cbc);
- osmo_stream_srv_link_set_nodelay(cbc->srv_link, true);
- osmo_stream_srv_link_set_port(cbc->srv_link, bind_port);
+ srv_link = osmo_stream_srv_link_create(mgr);
+ osmo_stream_srv_link_set_data(srv_link, mgr);
+ osmo_stream_srv_link_set_nodelay(srv_link, true);
+ osmo_stream_srv_link_set_port(srv_link, bind_port);
if (bind_ip)
- osmo_stream_srv_link_set_addr(cbc->srv_link, bind_ip);
- osmo_stream_srv_link_set_accept_cb(cbc->srv_link, cbsp_cbc_accept_cb);
- rc = osmo_stream_srv_link_open(cbc->srv_link);
+ osmo_stream_srv_link_set_addr(srv_link, bind_ip);
+ osmo_stream_srv_link_set_accept_cb(srv_link, cbsp_cbc_accept_cb);
+ rc = osmo_stream_srv_link_open(srv_link);
if (rc < 0) {
- osmo_stream_srv_link_destroy(cbc->srv_link);
- talloc_free(cbc);
- return NULL;
+ osmo_stream_srv_link_destroy(srv_link);
+ talloc_free(mgr);
+ return -EIO;
}
+ mgr->srv_link = srv_link;
LOGP(DCBSP, LOGL_NOTICE, "Listening for CBSP at %s\n",
- osmo_stream_srv_link_get_sockname(cbc->srv_link));
-
- return cbc;
+ osmo_stream_srv_link_get_sockname(mgr->srv_link));
+ return 0;
}
diff --git a/src/sbcap_link.c b/src/sbcap_link.c
index 9194509..b4f54c1 100644
--- a/src/sbcap_link.c
+++ b/src/sbcap_link.c
@@ -255,31 +255,46 @@
osmo_stream_srv_destroy(link->conn);
}
-/* initialize the CBC-side SBc-AP server */
-struct cbc_sbcap_mgr *cbc_sbcap_mgr_create(void *ctx)
+/*
+ * CBSP Manager
+ */
+struct cbc_sbcap_mgr *cbc_sbcap_mgr_alloc(void *ctx)
{
- struct cbc_sbcap_mgr *cbc = talloc_zero(ctx, struct cbc_sbcap_mgr);
- int rc;
+ struct cbc_sbcap_mgr *mgr;
+
+ mgr = talloc_zero(ctx, struct cbc_sbcap_mgr);
+ OSMO_ASSERT(mgr);
+ mgr->rx_cb = cbc_sbcap_link_rx_cb;
+ INIT_LLIST_HEAD(&mgr->links);
+
+ return mgr;
+}
+
+/* initialize the CBC-side SBc-AP server */
+int cbc_sbcap_mgr_open_srv(struct cbc_sbcap_mgr *mgr)
+{
int bind_port = g_cbc->config.sbcap.local_port;
+ struct osmo_stream_srv_link *srv_link;
+ int rc;
- if (bind_port == -1)
- bind_port = SBcAP_SCTP_PORT;
-
- OSMO_ASSERT(cbc);
- cbc->rx_cb = cbc_sbcap_link_rx_cb;
- INIT_LLIST_HEAD(&cbc->links);
- cbc->srv_link = osmo_stream_srv_link_create(cbc);
- osmo_stream_srv_link_set_proto(cbc->srv_link, IPPROTO_SCTP);
- osmo_stream_srv_link_set_data(cbc->srv_link, cbc);
- osmo_stream_srv_link_set_nodelay(cbc->srv_link, true);
- osmo_stream_srv_link_set_port(cbc->srv_link, bind_port);
- osmo_stream_srv_link_set_addrs(cbc->srv_link, (const char
**)g_cbc->config.sbcap.local_host,
+ srv_link = osmo_stream_srv_link_create(mgr);
+ osmo_stream_srv_link_set_proto(srv_link, IPPROTO_SCTP);
+ osmo_stream_srv_link_set_data(srv_link, mgr);
+ osmo_stream_srv_link_set_nodelay(srv_link, true);
+ osmo_stream_srv_link_set_port(srv_link, bind_port);
+ osmo_stream_srv_link_set_addrs(srv_link,
+ (const char **)g_cbc->config.sbcap.local_host,
g_cbc->config.sbcap.num_local_host);
- osmo_stream_srv_link_set_accept_cb(cbc->srv_link, sbcap_cbc_accept_cb);
- rc = osmo_stream_srv_link_open(cbc->srv_link);
- OSMO_ASSERT(rc == 0);
+ osmo_stream_srv_link_set_accept_cb(srv_link, sbcap_cbc_accept_cb);
+ rc = osmo_stream_srv_link_open(srv_link);
+ if (rc < 0) {
+ osmo_stream_srv_link_destroy(srv_link);
+ talloc_free(mgr);
+ return -EIO;
+ }
+ mgr->srv_link = srv_link;
LOGP(DSBcAP, LOGL_NOTICE, "Listening for SBc-AP at %s\n",
- osmo_stream_srv_link_get_sockname(cbc->srv_link));
+ osmo_stream_srv_link_get_sockname(mgr->srv_link));
- return cbc;
+ return 0;
}
--
To view, visit
https://gerrit.osmocom.org/c/osmo-cbc/+/28736
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-cbc
Gerrit-Branch: master
Gerrit-Change-Id: I14e49d8d2e603925d7f06a7edb710c0eceb02ea3
Gerrit-Change-Number: 28736
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged