pespin has uploaded this change for review. ( 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(-) git pull ssh://gerrit.osmocom.org:29418/osmo-cbc refs/changes/36/28736/1 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 <pes...@sysmocom.de> Gerrit-MessageType: newchange