<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/19864">View Change</a></p><div style="white-space:pre-wrap">Approvals:
fixeria: Looks good to me, approved
Jenkins Builder: Verified
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">CBSP: rewrite the CBSP link setup and 'cbc' VTY section<br><br>Firstly, make CBSP server and client mutually exclusive: Do not allow osmo-bsc<br>to be configured as CBC client *and* CBC server at the same time.<br>cbsp_link.c expects at most one CBSP link to be established, and, upon sending<br>CBSP messages, probes whether to send the message to a CBSP server or client<br>link. When both listen-port and remote-ip are configured (regardless of an<br>actual CBSP connection), osmo-bsc gets confused about where to send CBSP<br>messages.<br><br>One solution would be more accurate probing for an actual established TCP<br>connection. But the simpler and less confusing solution is to force the user to<br>configure only server or only client mode, never both.<br><br>Introduce 'cbc' / 'mode (server|client|disabled)'.<br><br>Secondly, clarify the 'cbc' config structure into distinct 'server' and<br>'client' subnodes. Refactor the 'cbc' VTY node in such a way that the IP<br>addresses for server and client mode can remain configured when the CBSP link<br>is switched between server/client/disabled modes.<br><br>To implement the above, switch the struct bsc_cbc_link to use osmo_sockaddr_str<br>for address configuration.<br><br>Related: OS#4702<br>Related: I7eea0dd39de50ed80af79e0f10c836b8685d8644 (osmo-ttcn3-hacks)<br>Related: I9e9760121265b3661f1c179610e975cf7a0873f1 (docker-playground)<br>Change-Id: Icaa2775cc20a99227dabe38a775ff808b374cf98<br>---<br>M include/osmocom/bsc/smscb.h<br>M include/osmocom/bsc/vty.h<br>M src/osmo-bsc/bsc_init.c<br>M src/osmo-bsc/cbsp_link.c<br>A tests/cbc.vty<br>5 files changed, 358 insertions(+), 110 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/smscb.h b/include/osmocom/bsc/smscb.h</span><br><span>index 22a258d..c7002f6 100644</span><br><span>--- a/include/osmocom/bsc/smscb.h</span><br><span>+++ b/include/osmocom/bsc/smscb.h</span><br><span>@@ -2,6 +2,7 @@</span><br><span> #include <osmocom/bsc/gsm_data.h></span><br><span> </span><br><span> #include <osmocom/core/msgb.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/sockaddr_str.h></span><br><span> #include <osmocom/netif/stream.h></span><br><span> #include <osmocom/gsm/cbsp.h></span><br><span> </span><br><span>@@ -27,21 +28,25 @@</span><br><span> uint8_t slot_count);</span><br><span> void bts_cbch_timer_schedule(struct gsm_bts *bts);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+enum bsc_cbc_link_mode {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSC_CBC_LINK_MODE_DISABLED = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSC_CBC_LINK_MODE_SERVER,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSC_CBC_LINK_MODE_CLIENT,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+extern const struct value_string bsc_cbc_link_mode_names[];</span><br><span style="color: hsl(120, 100%, 40%);">+static inline const char *bsc_cbc_link_mode_name(enum bsc_cbc_link_mode val)</span><br><span style="color: hsl(120, 100%, 40%);">+{ return get_value_string(bsc_cbc_link_mode_names, val); }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+extern const struct osmo_sockaddr_str bsc_cbc_default_server_local_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* cbsp_link.c */</span><br><span> struct bsc_cbc_link {</span><br><span> struct gsm_network *net;</span><br><span style="color: hsl(0, 100%, 40%);">- struct {</span><br><span style="color: hsl(0, 100%, 40%);">- /* hostname/IP of CBC */</span><br><span style="color: hsl(0, 100%, 40%);">- char *cbc_hostname;</span><br><span style="color: hsl(0, 100%, 40%);">- /* TCP port (Default: 48049) of CBC */</span><br><span style="color: hsl(0, 100%, 40%);">- int cbc_port;</span><br><span style="color: hsl(0, 100%, 40%);">- /* local listening port (0 for disabling local server) */</span><br><span style="color: hsl(0, 100%, 40%);">- int listen_port;</span><br><span style="color: hsl(0, 100%, 40%);">- /* local listening hostname/IP */</span><br><span style="color: hsl(0, 100%, 40%);">- char *listen_hostname;</span><br><span style="color: hsl(0, 100%, 40%);">- } config;</span><br><span style="color: hsl(120, 100%, 40%);">+ enum bsc_cbc_link_mode mode;</span><br><span> /* for handling inbound TCP connections */</span><br><span> struct {</span><br><span style="color: hsl(120, 100%, 40%);">+ struct osmo_sockaddr_str local_addr;</span><br><span> struct osmo_stream_srv *srv;</span><br><span> struct osmo_stream_srv_link *link;</span><br><span> char *sock_name;</span><br><span>@@ -49,6 +54,7 @@</span><br><span> } server;</span><br><span> /* for handling outbound TCP connections */</span><br><span> struct {</span><br><span style="color: hsl(120, 100%, 40%);">+ struct osmo_sockaddr_str remote_addr;</span><br><span> struct osmo_stream_cli *cli;</span><br><span> char *sock_name;</span><br><span> struct msgb *msg;</span><br><span>diff --git a/include/osmocom/bsc/vty.h b/include/osmocom/bsc/vty.h</span><br><span>index 10ce16b..ba44f5e 100644</span><br><span>--- a/include/osmocom/bsc/vty.h</span><br><span>+++ b/include/osmocom/bsc/vty.h</span><br><span>@@ -25,6 +25,8 @@</span><br><span> OM2K_CON_GROUP_NODE,</span><br><span> BSC_NODE,</span><br><span> CBC_NODE,</span><br><span style="color: hsl(120, 100%, 40%);">+ CBC_SERVER_NODE,</span><br><span style="color: hsl(120, 100%, 40%);">+ CBC_CLIENT_NODE,</span><br><span> };</span><br><span> </span><br><span> struct log_info;</span><br><span>diff --git a/src/osmo-bsc/bsc_init.c b/src/osmo-bsc/bsc_init.c</span><br><span>index 22eba50..e722199 100644</span><br><span>--- a/src/osmo-bsc/bsc_init.c</span><br><span>+++ b/src/osmo-bsc/bsc_init.c</span><br><span>@@ -129,11 +129,11 @@</span><br><span> osmo_timer_schedule(&net->t3122_chan_load_timer, T3122_CHAN_LOAD_SAMPLE_INTERVAL, 0);</span><br><span> </span><br><span> net->cbc->net = net;</span><br><span style="color: hsl(0, 100%, 40%);">- /* no cbc_hostname: client not started by default */</span><br><span style="color: hsl(0, 100%, 40%);">- net->cbc->config.cbc_port = CBSP_TCP_PORT;</span><br><span style="color: hsl(0, 100%, 40%);">- /* listen_port == -1: server not started by default */</span><br><span style="color: hsl(0, 100%, 40%);">- net->cbc->config.listen_port = -1;</span><br><span style="color: hsl(0, 100%, 40%);">- net->cbc->config.listen_hostname = talloc_strdup(net->cbc, "127.0.0.1");</span><br><span style="color: hsl(120, 100%, 40%);">+ net->cbc->mode = BSC_CBC_LINK_MODE_DISABLED;</span><br><span style="color: hsl(120, 100%, 40%);">+ net->cbc->server.local_addr = bsc_cbc_default_server_local_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* For CBSP client mode: default remote CBSP server port is CBSP_TCP_PORT == 48049. Leave the IP address unset.</span><br><span style="color: hsl(120, 100%, 40%);">+ * Also leave the local bind for the CBSP client disabled (unconfigured). */</span><br><span style="color: hsl(120, 100%, 40%);">+ net->cbc->client.remote_addr = (struct osmo_sockaddr_str){ .port = CBSP_TCP_PORT, };</span><br><span> </span><br><span> return net;</span><br><span> </span><br><span>diff --git a/src/osmo-bsc/cbsp_link.c b/src/osmo-bsc/cbsp_link.c</span><br><span>index d93bd1a..d587675 100644</span><br><span>--- a/src/osmo-bsc/cbsp_link.c</span><br><span>+++ b/src/osmo-bsc/cbsp_link.c</span><br><span>@@ -35,6 +35,19 @@</span><br><span> * TCP port, we expect the CBC to connect to us. If neither of the two is configured,</span><br><span> * CBSP is effectively disabled */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+const struct value_string bsc_cbc_link_mode_names[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ { BSC_CBC_LINK_MODE_DISABLED, "disabled" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { BSC_CBC_LINK_MODE_SERVER, "server" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { BSC_CBC_LINK_MODE_CLIENT, "client" },</span><br><span style="color: hsl(120, 100%, 40%);">+ {}</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const struct osmo_sockaddr_str bsc_cbc_default_server_local_addr = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .af = AF_INET,</span><br><span style="color: hsl(120, 100%, 40%);">+ .ip = "127.0.0.1",</span><br><span style="color: hsl(120, 100%, 40%);">+ .port = CBSP_TCP_PORT,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*********************************************************************************</span><br><span> * CBSP Server (inbound TCP connection from CBC)</span><br><span> *********************************************************************************/</span><br><span>@@ -195,7 +208,7 @@</span><br><span> struct bsc_cbc_link *cbc = bsc_gsmnet->cbc;</span><br><span> </span><br><span> /* shut down client, if no longer configured */</span><br><span style="color: hsl(0, 100%, 40%);">- if (cbc->client.cli && !cbc->config.cbc_hostname) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (cbc->client.cli && cbc->mode != BSC_CBC_LINK_MODE_CLIENT) {</span><br><span> LOGP(DCBS, LOGL_NOTICE, "Stopping CBSP client\n");</span><br><span> osmo_stream_cli_close(cbc->client.cli);</span><br><span> osmo_stream_cli_destroy(cbc->client.cli);</span><br><span>@@ -203,7 +216,7 @@</span><br><span> }</span><br><span> </span><br><span> /* shut down server, if no longer configured */</span><br><span style="color: hsl(0, 100%, 40%);">- if (cbc->config.listen_port == -1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (cbc->mode != BSC_CBC_LINK_MODE_SERVER) {</span><br><span> if (cbc->server.srv || cbc->server.link)</span><br><span> LOGP(DCBS, LOGL_NOTICE, "Stopping CBSP server\n");</span><br><span> if (cbc->server.srv) {</span><br><span>@@ -217,10 +230,16 @@</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* start client, if configured */</span><br><span style="color: hsl(0, 100%, 40%);">- if (cbc->config.cbc_hostname) {</span><br><span style="color: hsl(0, 100%, 40%);">- LOGP(DCBS, LOGL_NOTICE, "Starting CBSP Client (to CBC at %s:%u)\n",</span><br><span style="color: hsl(0, 100%, 40%);">- cbc->config.cbc_hostname, cbc->config.cbc_port);</span><br><span style="color: hsl(120, 100%, 40%);">+ switch (cbc->mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+ case BSC_CBC_LINK_MODE_CLIENT:</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!osmo_sockaddr_str_is_nonzero(&cbc->client.remote_addr)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DCBS, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+ "Cannot start CBSP in client mode: invalid remote-ip or -port in 'cbc' / 'client')\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DCBS, LOGL_NOTICE, "Starting CBSP Client (to CBC at " OSMO_SOCKADDR_STR_FMT ")\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_SOCKADDR_STR_FMT_ARGS(&cbc->client.remote_addr));</span><br><span> if (!cbc->client.cli) {</span><br><span> cbc->client.cli = osmo_stream_cli_create(cbc);</span><br><span> osmo_stream_cli_set_data(cbc->client.cli, cbc);</span><br><span>@@ -229,32 +248,44 @@</span><br><span> osmo_stream_cli_set_read_cb(cbc->client.cli, cbsp_client_read_cb);</span><br><span> }</span><br><span> /* CBC side */</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_stream_cli_set_addr(cbc->client.cli, cbc->config.cbc_hostname);</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_stream_cli_set_port(cbc->client.cli, cbc->config.cbc_port);</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_stream_cli_set_addr(cbc->client.cli, cbc->client.remote_addr.ip);</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_stream_cli_set_port(cbc->client.cli, cbc->client.remote_addr.port);</span><br><span> /* Close/Reconnect? */</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_stream_cli_open(cbc->client.cli);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(120, 100%, 40%);">+ if (osmo_stream_cli_open(cbc->client.cli) < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DCBS, LOGL_ERROR, "Cannot open CBSP client link to " OSMO_SOCKADDR_STR_FMT "\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_SOCKADDR_STR_FMT_ARGS(&cbc->client.remote_addr));</span><br><span style="color: hsl(120, 100%, 40%);">+ return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ return 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* start server, if configured */</span><br><span style="color: hsl(0, 100%, 40%);">- if (cbc->config.listen_port != -1) {</span><br><span style="color: hsl(0, 100%, 40%);">- LOGP(DCBS, LOGL_NOTICE, "Starting CBSP Server (bound to %s:%u)\n",</span><br><span style="color: hsl(0, 100%, 40%);">- cbc->config.listen_hostname, cbc->config.listen_port);</span><br><span style="color: hsl(120, 100%, 40%);">+ case BSC_CBC_LINK_MODE_SERVER:</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!osmo_sockaddr_str_is_set(&cbc->server.local_addr)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DCBS, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+ "Cannot start CBSP in server mode: invalid local-ip or -port in 'cbc' / 'server')\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DCBS, LOGL_NOTICE, "Starting CBSP Server (listening at " OSMO_SOCKADDR_STR_FMT ")\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_SOCKADDR_STR_FMT_ARGS(&cbc->server.local_addr));</span><br><span> if (!cbc->server.link) {</span><br><span> LOGP(DCBS, LOGL_NOTICE, "Creating CBSP Server\n");</span><br><span> cbc->server.link = osmo_stream_srv_link_create(cbc);</span><br><span> osmo_stream_srv_link_set_data(cbc->server.link, cbc);</span><br><span> osmo_stream_srv_link_set_accept_cb(cbc->server.link, cbsp_srv_link_accept_cb);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- osmo_stream_srv_link_set_addr(cbc->server.link, cbc->config.listen_hostname);</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_stream_srv_link_set_port(cbc->server.link, cbc->config.listen_port);</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_stream_srv_link_set_addr(cbc->server.link, cbc->server.local_addr.ip);</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_stream_srv_link_set_port(cbc->server.link, cbc->server.local_addr.port);</span><br><span> </span><br><span> if (osmo_stream_srv_link_open(cbc->server.link) < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">- LOGP(DCBS, LOGL_ERROR, "Cannot open CBSP Server link on %s:%u\n",</span><br><span style="color: hsl(0, 100%, 40%);">- cbc->config.listen_hostname, cbc->config.listen_port);</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DCBS, LOGL_ERROR, "Cannot open CBSP Server link at " OSMO_SOCKADDR_STR_FMT ")\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_SOCKADDR_STR_FMT_ARGS(&cbc->server.local_addr));</span><br><span style="color: hsl(120, 100%, 40%);">+ return -1;</span><br><span> }</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+ return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ default:</span><br><span style="color: hsl(120, 100%, 40%);">+ return 0;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- return 0;</span><br><span> }</span><br><span> </span><br><span> /*! Encode + Transmit a 'decoded' CBSP message over given CBC link</span><br><span>@@ -301,60 +332,71 @@</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_cbc_remote_ip, cfg_cbc_remote_ip_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "remote-ip A.B.C.D",</span><br><span style="color: hsl(0, 100%, 40%);">- "IP Address of the Cell Broadcast Centre\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "IP Address of the Cell Broadcast Centre\n")</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_cbc_mode, cfg_cbc_mode_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "mode (server|client|disabled)",</span><br><span style="color: hsl(120, 100%, 40%);">+ "Set OsmoBSC as CBSP server or client\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "CBSP Server: listen for inbound TCP connections from a remote Cell Broadcast Centre\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "CBSP Client: establish outbound TCP connection to a remote Cell Broadcast Centre\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "Disable CBSP link\n")</span><br><span> {</span><br><span> struct bsc_cbc_link *cbc = vty_cbc_data(vty);</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_talloc_replace_string(cbc, &cbc->config.cbc_hostname, argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">- return CMD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_cbc_no_remote_ip, cfg_cbc_no_remote_ip_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "no remote-ip",</span><br><span style="color: hsl(0, 100%, 40%);">- NO_STR "Remove IP address of CBC; disables outbound CBSP connections\n")</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct bsc_cbc_link *cbc = vty_cbc_data(vty);</span><br><span style="color: hsl(0, 100%, 40%);">- talloc_free(cbc->config.cbc_hostname);</span><br><span style="color: hsl(0, 100%, 40%);">- cbc->config.cbc_hostname = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ cbc->mode = get_string_value(bsc_cbc_link_mode_names, argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(cbc->mode >= 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ bsc_cbc_link_restart();</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_cbc_remote_port, cfg_cbc_remote_port_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_cbc_server, cfg_cbc_server_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "server", "Configure OsmoBSC's CBSP server role\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ vty->node = CBC_SERVER_NODE;</span><br><span style="color: hsl(120, 100%, 40%);">+ return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_cbc_server_local_ip, cfg_cbc_server_local_ip_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "local-ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(120, 100%, 40%);">+ "Set IP Address to listen on for inbound CBSP from a Cell Broadcast Centre\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "IPv4 address\n" "IPv6 address\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct bsc_cbc_link *cbc = vty_cbc_data(vty);</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_sockaddr_str_from_str(&cbc->server.local_addr, argv[0], cbc->server.local_addr.port);</span><br><span style="color: hsl(120, 100%, 40%);">+ return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_cbc_server_local_port, cfg_cbc_server_local_port_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "local-port <1-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+ "Set TCP port to listen on for inbound CBSP from a Cell Broadcast Centre\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "CBSP port number (Default: " OSMO_STRINGIFY_VAL(CBSP_TCP_PORT) ")\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct bsc_cbc_link *cbc = vty_cbc_data(vty);</span><br><span style="color: hsl(120, 100%, 40%);">+ cbc->server.local_addr.port = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_cbc_client, cfg_cbc_client_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "client", "Configure OsmoBSC's CBSP client role\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ vty->node = CBC_CLIENT_NODE;</span><br><span style="color: hsl(120, 100%, 40%);">+ return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_cbc_client_remote_ip, cfg_cbc_client_remote_ip_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "remote-ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(120, 100%, 40%);">+ "Set IP Address of the Cell Broadcast Centre, to establish CBSP link to\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "IPv4 address\n" "IPv6 address\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct bsc_cbc_link *cbc = vty_cbc_data(vty);</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_sockaddr_str_from_str(&cbc->client.remote_addr, argv[0], cbc->client.remote_addr.port);</span><br><span style="color: hsl(120, 100%, 40%);">+ return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_cbc_client_remote_port, cfg_cbc_client_remote_port_cmd,</span><br><span> "remote-port <1-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">- "TCP Port number of the Cell Broadcast Centre (Default: 48049)\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "TCP Port number of the Cell Broadcast Centre (Default: 48049)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+ "Set TCP port of the Cell Broadcast Centre, to establish CBSP link to\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "CBSP port number (Default: " OSMO_STRINGIFY_VAL(CBSP_TCP_PORT) ")\n")</span><br><span> {</span><br><span> struct bsc_cbc_link *cbc = vty_cbc_data(vty);</span><br><span style="color: hsl(0, 100%, 40%);">- cbc->config.cbc_port = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">- return CMD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_cbc_listen_port, cfg_cbc_listen_port_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "listen-port <1-65535>",</span><br><span style="color: hsl(0, 100%, 40%);">- "Local TCP port at which BSC listens for incoming CBSP connections from CBC\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Local TCP port at which BSC listens for incoming CBSP connections from CBC\n")</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct bsc_cbc_link *cbc = vty_cbc_data(vty);</span><br><span style="color: hsl(0, 100%, 40%);">- cbc->config.listen_port = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">- return CMD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_cbc_no_listen_port, cfg_cbc_no_listen_port_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "no listen-port",</span><br><span style="color: hsl(0, 100%, 40%);">- NO_STR "Remove CBSP Listen Port; disables inbound CBSP connections\n")</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct bsc_cbc_link *cbc = vty_cbc_data(vty);</span><br><span style="color: hsl(0, 100%, 40%);">- cbc->config.listen_port = -1;</span><br><span style="color: hsl(0, 100%, 40%);">- return CMD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_cbc_listen_ip, cfg_cbc_listen_ip_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "listen-ip A.B.C.D",</span><br><span style="color: hsl(0, 100%, 40%);">- "Local IP Address where BSC listens for incoming CBC connections (Default: 0.0.0.0)\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Local IP Address where BSC listens for incoming CBC connections\n")</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct bsc_cbc_link *cbc = vty_cbc_data(vty);</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_talloc_replace_string(cbc, &cbc->config.listen_hostname, argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ cbc->client.remote_addr.port = atoi(argv[0]);</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -364,23 +406,56 @@</span><br><span> 1,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static struct cmd_node cbc_server_node = {</span><br><span style="color: hsl(120, 100%, 40%);">+ CBC_SERVER_NODE,</span><br><span style="color: hsl(120, 100%, 40%);">+ "%s(config-cbc-server)# ",</span><br><span style="color: hsl(120, 100%, 40%);">+ 1,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static struct cmd_node cbc_client_node = {</span><br><span style="color: hsl(120, 100%, 40%);">+ CBC_CLIENT_NODE,</span><br><span style="color: hsl(120, 100%, 40%);">+ "%s(config-cbc-client)# ",</span><br><span style="color: hsl(120, 100%, 40%);">+ 1,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int config_write_cbc(struct vty *vty)</span><br><span> {</span><br><span> struct bsc_cbc_link *cbc = vty_cbc_data(vty);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ bool default_server_local;</span><br><span style="color: hsl(120, 100%, 40%);">+ bool default_client_remote;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ default_server_local = !osmo_sockaddr_str_cmp(&cbc->server.local_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+ &bsc_cbc_default_server_local_addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ default_client_remote = !osmo_sockaddr_str_is_set(&cbc->client.remote_addr);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* If all reflects default values, skip the 'cbc' section */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (cbc->mode == BSC_CBC_LINK_MODE_DISABLED</span><br><span style="color: hsl(120, 100%, 40%);">+ && default_server_local</span><br><span style="color: hsl(120, 100%, 40%);">+ && default_client_remote)</span><br><span style="color: hsl(120, 100%, 40%);">+ return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> vty_out(vty, "cbc%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, " mode %s%s", bsc_cbc_link_mode_name(cbc->mode), VTY_NEWLINE);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (cbc->config.cbc_hostname) {</span><br><span style="color: hsl(0, 100%, 40%);">- vty_out(vty, " remote-ip %s%s", cbc->config.cbc_hostname, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">- vty_out(vty, " remote-port %u%s", cbc->config.cbc_port, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">- } else</span><br><span style="color: hsl(0, 100%, 40%);">- vty_out(vty, " no remote-ip%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!default_server_local) {</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, " server%s", VTY_NEWLINE);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (cbc->config.listen_port >= 0) {</span><br><span style="color: hsl(0, 100%, 40%);">- vty_out(vty, " listen-port %u%s", cbc->config.listen_port, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">- vty_out(vty, " listen-ip %s%s", cbc->config.listen_hostname, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">- } else</span><br><span style="color: hsl(0, 100%, 40%);">- vty_out(vty, " no listen-port%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (strcmp(cbc->server.local_addr.ip, bsc_cbc_default_server_local_addr.ip))</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, " local-ip %s%s", cbc->server.local_addr.ip, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (cbc->server.local_addr.port != bsc_cbc_default_server_local_addr.port)</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, " local-port %u%s", cbc->server.local_addr.port, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!default_client_remote) {</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, " client%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (osmo_sockaddr_str_is_set(&cbc->client.remote_addr)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, " remote-ip %s%s", cbc->client.remote_addr.ip, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (cbc->client.remote_addr.port != CBSP_TCP_PORT)</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, " remote-port %u%s", cbc->client.remote_addr.port, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> </span><br><span> return 0;</span><br><span> }</span><br><span>@@ -391,34 +466,43 @@</span><br><span> {</span><br><span> struct bsc_cbc_link *cbc = vty_cbc_data(vty);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (!cbc->config.cbc_hostname)</span><br><span style="color: hsl(0, 100%, 40%);">- vty_out(vty, "CBSP Client Config: Disabled%s", VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">- else {</span><br><span style="color: hsl(0, 100%, 40%);">- vty_out(vty, "CBSP Client Config: CBC IP=%s, CBC Port=%u%s",</span><br><span style="color: hsl(0, 100%, 40%);">- cbc->config.cbc_hostname, cbc->config.cbc_port, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">- vty_out(vty, "CBSP Client Connection: %s%s",</span><br><span style="color: hsl(0, 100%, 40%);">- cbc->client.sock_name ? cbc->client.sock_name : "Disconnected", VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- if (cbc->config.listen_port < 0)</span><br><span style="color: hsl(0, 100%, 40%);">- vty_out(vty, "CBSP Server Config: Disabled%s\n", VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">- else {</span><br><span style="color: hsl(0, 100%, 40%);">- vty_out(vty, "CBSP Server Config: Listen IP=%s, Port=%u%s\n",</span><br><span style="color: hsl(0, 100%, 40%);">- cbc->config.listen_hostname, cbc->config.listen_port, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ switch (cbc->mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+ case BSC_CBC_LINK_MODE_DISABLED:</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, "CBSP link is disabled%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ case BSC_CBC_LINK_MODE_SERVER:</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, "OsmoBSC is configured as CBSP Server on " OSMO_SOCKADDR_STR_FMT "%s",</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_SOCKADDR_STR_FMT_ARGS(&cbc->server.local_addr), VTY_NEWLINE);</span><br><span> vty_out(vty, "CBSP Server Connection: %s%s",</span><br><span> cbc->server.sock_name ? cbc->server.sock_name : "Disconnected", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ case BSC_CBC_LINK_MODE_CLIENT:</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, "OsmoBSC is configured as CBSP Client to remote CBC at " OSMO_SOCKADDR_STR_FMT "%s",</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_SOCKADDR_STR_FMT_ARGS(&cbc->client.remote_addr), VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, "CBSP Client Connection: %s%s",</span><br><span style="color: hsl(120, 100%, 40%);">+ cbc->client.sock_name ? cbc->client.sock_name : "Disconnected", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span> }</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span> void cbc_vty_init(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- install_element(VIEW_NODE, &show_cbc_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element_ve(&show_cbc_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> install_element(CONFIG_NODE, &cfg_cbc_cmd);</span><br><span> install_node(&cbc_node, config_write_cbc);</span><br><span style="color: hsl(0, 100%, 40%);">- install_element(CBC_NODE, &cfg_cbc_remote_ip_cmd);</span><br><span style="color: hsl(0, 100%, 40%);">- install_element(CBC_NODE, &cfg_cbc_no_remote_ip_cmd);</span><br><span style="color: hsl(0, 100%, 40%);">- install_element(CBC_NODE, &cfg_cbc_remote_port_cmd);</span><br><span style="color: hsl(0, 100%, 40%);">- install_element(CBC_NODE, &cfg_cbc_listen_port_cmd);</span><br><span style="color: hsl(0, 100%, 40%);">- install_element(CBC_NODE, &cfg_cbc_no_listen_port_cmd);</span><br><span style="color: hsl(0, 100%, 40%);">- install_element(CBC_NODE, &cfg_cbc_listen_ip_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(CBC_NODE, &cfg_cbc_mode_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(CBC_NODE, &cfg_cbc_server_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_node(&cbc_server_node, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(CBC_SERVER_NODE, &cfg_cbc_server_local_ip_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(CBC_SERVER_NODE, &cfg_cbc_server_local_port_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(CBC_NODE, &cfg_cbc_client_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_node(&cbc_client_node, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(CBC_CLIENT_NODE, &cfg_cbc_client_remote_ip_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(CBC_CLIENT_NODE, &cfg_cbc_client_remote_port_cmd);</span><br><span> }</span><br><span>diff --git a/tests/cbc.vty b/tests/cbc.vty</span><br><span>new file mode 100644</span><br><span>index 0000000..2cad609</span><br><span>--- /dev/null</span><br><span>+++ b/tests/cbc.vty</span><br><span>@@ -0,0 +1,156 @@</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC> ### CBSP link config</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC> list</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+ show cbc</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC> enable</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC# list</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+ show cbc</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC# show running-config</span><br><span style="color: hsl(120, 100%, 40%);">+... !cbc</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC# show cbc</span><br><span style="color: hsl(120, 100%, 40%);">+CBSP link is disabled</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC# configure terminal</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config)# cbc</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc)# list</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+ mode (server|client|disabled)</span><br><span style="color: hsl(120, 100%, 40%);">+ server</span><br><span style="color: hsl(120, 100%, 40%);">+ client</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc)# ?</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+ mode Set OsmoBSC as CBSP server or client</span><br><span style="color: hsl(120, 100%, 40%);">+ server Configure OsmoBSC's CBSP server role</span><br><span style="color: hsl(120, 100%, 40%);">+ client Configure OsmoBSC's CBSP client role</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc)# mode ?</span><br><span style="color: hsl(120, 100%, 40%);">+ server CBSP Server: listen for inbound TCP connections from a remote Cell Broadcast Centre</span><br><span style="color: hsl(120, 100%, 40%);">+ client CBSP Client: establish outbound TCP connection to a remote Cell Broadcast Centre</span><br><span style="color: hsl(120, 100%, 40%);">+ disabled Disable CBSP link</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc)# server</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-server)# list</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+ local-ip (A.B.C.D|X:X::X:X)</span><br><span style="color: hsl(120, 100%, 40%);">+ local-port <1-65535></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-server)# ?</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+ local-ip Set IP Address to listen on for inbound CBSP from a Cell Broadcast Centre</span><br><span style="color: hsl(120, 100%, 40%);">+ local-port Set TCP port to listen on for inbound CBSP from a Cell Broadcast Centre</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-server)# local-ip ?</span><br><span style="color: hsl(120, 100%, 40%);">+ A.B.C.D IPv4 address</span><br><span style="color: hsl(120, 100%, 40%);">+ X:X::X:X IPv6 address</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-server)# local-port ?</span><br><span style="color: hsl(120, 100%, 40%);">+ <1-65535> CBSP port number (Default: 48049)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-server)# local-ip 1.2.3.4</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-server)# local-port 12345</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-server)# show running-config</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+cbc</span><br><span style="color: hsl(120, 100%, 40%);">+ mode disabled</span><br><span style="color: hsl(120, 100%, 40%);">+ server</span><br><span style="color: hsl(120, 100%, 40%);">+ local-ip 1.2.3.4</span><br><span style="color: hsl(120, 100%, 40%);">+ local-port 12345</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-server)# local-port 48049</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-server)# show running-config</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+cbc</span><br><span style="color: hsl(120, 100%, 40%);">+ mode disabled</span><br><span style="color: hsl(120, 100%, 40%);">+ server</span><br><span style="color: hsl(120, 100%, 40%);">+ local-ip 1.2.3.4</span><br><span style="color: hsl(120, 100%, 40%);">+... !local-port</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-server)# local-ip ::1</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-server)# show running-config</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+cbc</span><br><span style="color: hsl(120, 100%, 40%);">+ mode disabled</span><br><span style="color: hsl(120, 100%, 40%);">+ server</span><br><span style="color: hsl(120, 100%, 40%);">+ local-ip ::1</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-server)# do show cbc</span><br><span style="color: hsl(120, 100%, 40%);">+CBSP link is disabled</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-server)# exit</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc)# client</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-client)# list</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+ remote-ip (A.B.C.D|X:X::X:X)</span><br><span style="color: hsl(120, 100%, 40%);">+ remote-port <1-65535></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-client)# ?</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+ remote-ip Set IP Address of the Cell Broadcast Centre, to establish CBSP link to</span><br><span style="color: hsl(120, 100%, 40%);">+ remote-port Set TCP port of the Cell Broadcast Centre, to establish CBSP link to</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-client)# remote-ip ?</span><br><span style="color: hsl(120, 100%, 40%);">+ A.B.C.D IPv4 address</span><br><span style="color: hsl(120, 100%, 40%);">+ X:X::X:X IPv6 address</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-client)# remote-port ?</span><br><span style="color: hsl(120, 100%, 40%);">+ <1-65535> CBSP port number (Default: 48049)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-client)# remote-ip 1.2.3.4</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-client)# remote-port 12345</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-client)# show running-config</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+cbc</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+ client</span><br><span style="color: hsl(120, 100%, 40%);">+ remote-ip 1.2.3.4</span><br><span style="color: hsl(120, 100%, 40%);">+ remote-port 12345</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-client)# remote-port 48049</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-client)# show running-config</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+cbc</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+ client</span><br><span style="color: hsl(120, 100%, 40%);">+ remote-ip 1.2.3.4</span><br><span style="color: hsl(120, 100%, 40%);">+... !remote-port</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-client)# remote-ip 1:2:3:4::5</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-client)# show running-config</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+cbc</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+ client</span><br><span style="color: hsl(120, 100%, 40%);">+ remote-ip 1:2:3:4::5</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-client)# do show cbc</span><br><span style="color: hsl(120, 100%, 40%);">+CBSP link is disabled</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc-client)# exit</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc)# mode server</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc)# do show cbc</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC is configured as CBSP Server on [::1]:48049</span><br><span style="color: hsl(120, 100%, 40%);">+CBSP Server Connection: Disconnected</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc)# mode client</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc)# do show cbc</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC is configured as CBSP Client to remote CBC at [1:2:3:4::5]:48049</span><br><span style="color: hsl(120, 100%, 40%);">+CBSP Client Connection: Disconnected</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc)# mode disabled</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-cbc)# do show cbc</span><br><span style="color: hsl(120, 100%, 40%);">+CBSP link is disabled</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/19864">change 19864</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bsc/+/19864"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Icaa2775cc20a99227dabe38a775ff808b374cf98 </div>
<div style="display:none"> Gerrit-Change-Number: 19864 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>