<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-cbc/+/22005">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, approved
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Major Documentation update<br><br>* add command line help<br>* add basic user manual<br>* add vty reference manual<br>* install example configuration<br><br>Change-Id: Idf49d7fcee2b11638945baa25064273a7e5e5e61<br>---<br>M .gitignore<br>M Makefile.am<br>M configure.ac<br>M contrib/jenkins.sh<br>A doc/Makefile.am<br>A doc/examples/Makefile.am<br>R doc/examples/osmo-cbc/osmo-cbc.cfg<br>A doc/manuals/Makefile.am<br>A doc/manuals/chapters/counters.adoc<br>A doc/manuals/chapters/overview.adoc<br>A doc/manuals/chapters/running.adoc<br>A doc/manuals/osmocbc-usermanual-docinfo.xml<br>A doc/manuals/osmocbc-usermanual.adoc<br>A doc/manuals/osmocbc-vty-reference.xml<br>A doc/manuals/regen_doc.sh<br>A doc/manuals/vty/cbc_vty_additions.xml<br>M src/cbc_main.c<br>17 files changed, 355 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/.gitignore b/.gitignore</span><br><span>index e01642c..925f48d 100644</span><br><span>--- a/.gitignore</span><br><span>+++ b/.gitignore</span><br><span>@@ -54,6 +54,7 @@</span><br><span> doc/manuals/*__*.png</span><br><span> doc/manuals/*.check</span><br><span> doc/manuals/generated/</span><br><span style="color: hsl(0, 100%, 40%);">-doc/manuals/osmomsc-usermanual.xml</span><br><span style="color: hsl(120, 100%, 40%);">+doc/manuals/osmobsc-usermanual.xml</span><br><span> doc/manuals/common</span><br><span> doc/manuals/build</span><br><span style="color: hsl(120, 100%, 40%);">+doc/manuals/vty/cbc_vty_reference.xml</span><br><span>diff --git a/Makefile.am b/Makefile.am</span><br><span>index 6e0fa11..d292296 100644</span><br><span>--- a/Makefile.am</span><br><span>+++ b/Makefile.am</span><br><span>@@ -1,9 +1,9 @@</span><br><span> AUTOMAKE_OPTIONS = foreign dist-bzip2 1.6</span><br><span> </span><br><span> AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include</span><br><span style="color: hsl(0, 100%, 40%);">-SUBDIRS = src tests contrib</span><br><span style="color: hsl(120, 100%, 40%);">+SUBDIRS = src doc contrib tests</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-EXTRA_DIST = .version git-version-gen doc/examples/osmo-cbc.cfg</span><br><span style="color: hsl(120, 100%, 40%);">+EXTRA_DIST = .version git-version-gen</span><br><span> </span><br><span> AM_DISTCHECK_CONFIGURE_FLAGS = \</span><br><span> --with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)</span><br><span>diff --git a/configure.ac b/configure.ac</span><br><span>index 566f8c4..342eb84 100644</span><br><span>--- a/configure.ac</span><br><span>+++ b/configure.ac</span><br><span>@@ -169,5 +169,8 @@</span><br><span> src/Makefile</span><br><span> contrib/Makefile</span><br><span> tests/Makefile</span><br><span style="color: hsl(120, 100%, 40%);">+ doc/Makefile</span><br><span style="color: hsl(120, 100%, 40%);">+ doc/examples/Makefile</span><br><span style="color: hsl(120, 100%, 40%);">+ doc/manuals/Makefile</span><br><span> contrib/systemd/Makefile</span><br><span> Makefile)</span><br><span>diff --git a/contrib/jenkins.sh b/contrib/jenkins.sh</span><br><span>index ed73b09..e9b976b 100755</span><br><span>--- a/contrib/jenkins.sh</span><br><span>+++ b/contrib/jenkins.sh</span><br><span>@@ -55,8 +55,8 @@</span><br><span> $MAKE distcheck \</span><br><span> || cat-testlogs.sh</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#if [ "$WITH_MANUALS" = "1" ] && [ "$PUBLISH" = "1" ]; then</span><br><span style="color: hsl(0, 100%, 40%);">-# make -C "$base/doc/manuals" publish</span><br><span style="color: hsl(0, 100%, 40%);">-#fi</span><br><span style="color: hsl(120, 100%, 40%);">+if [ "$WITH_MANUALS" = "1" ] && [ "$PUBLISH" = "1" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+ make -C "$base/doc/manuals" publish</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span> </span><br><span> osmo-clean-workspace.sh</span><br><span>diff --git a/doc/Makefile.am b/doc/Makefile.am</span><br><span>new file mode 100644</span><br><span>index 0000000..3cb405e</span><br><span>--- /dev/null</span><br><span>+++ b/doc/Makefile.am</span><br><span>@@ -0,0 +1,4 @@</span><br><span style="color: hsl(120, 100%, 40%);">+SUBDIRS = \</span><br><span style="color: hsl(120, 100%, 40%);">+ examples \</span><br><span style="color: hsl(120, 100%, 40%);">+ manuals \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(NULL)</span><br><span>diff --git a/doc/examples/Makefile.am b/doc/examples/Makefile.am</span><br><span>new file mode 100644</span><br><span>index 0000000..7237c1d</span><br><span>--- /dev/null</span><br><span>+++ b/doc/examples/Makefile.am</span><br><span>@@ -0,0 +1,30 @@</span><br><span style="color: hsl(120, 100%, 40%);">+OSMOCONF_FILES = \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo-cbc/osmo-cbc.cfg</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+osmoconfdir = $(sysconfdir)/osmocom</span><br><span style="color: hsl(120, 100%, 40%);">+osmoconf_DATA = $(OSMOCONF_FILES)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXTRA_DIST = $(OSMOCONF_FILES)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+CFG_FILES = find $(srcdir) -name '*.cfg*' | sed -e 's,^$(srcdir),,'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+dist-hook:</span><br><span style="color: hsl(120, 100%, 40%);">+ for f in $$($(CFG_FILES)); do \</span><br><span style="color: hsl(120, 100%, 40%);">+ j="$(distdir)/$$f" && \</span><br><span style="color: hsl(120, 100%, 40%);">+ mkdir -p "$$(dirname $$j)" && \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(INSTALL_DATA) $(srcdir)/$$f $$j; \</span><br><span style="color: hsl(120, 100%, 40%);">+ done</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+install-data-hook:</span><br><span style="color: hsl(120, 100%, 40%);">+ for f in $$($(CFG_FILES)); do \</span><br><span style="color: hsl(120, 100%, 40%);">+ j="$(DESTDIR)$(docdir)/examples/$$f" && \</span><br><span style="color: hsl(120, 100%, 40%);">+ mkdir -p "$$(dirname $$j)" && \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(INSTALL_DATA) $(srcdir)/$$f $$j; \</span><br><span style="color: hsl(120, 100%, 40%);">+ done</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+uninstall-hook:</span><br><span style="color: hsl(120, 100%, 40%);">+ @$(PRE_UNINSTALL)</span><br><span style="color: hsl(120, 100%, 40%);">+ for f in $$($(CFG_FILES)); do \</span><br><span style="color: hsl(120, 100%, 40%);">+ j="$(DESTDIR)$(docdir)/examples/$$f" && \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(RM) $$j; \</span><br><span style="color: hsl(120, 100%, 40%);">+ done</span><br><span>diff --git a/doc/examples/osmo-cbc.cfg b/doc/examples/osmo-cbc/osmo-cbc.cfg</span><br><span>similarity index 100%</span><br><span>rename from doc/examples/osmo-cbc.cfg</span><br><span>rename to doc/examples/osmo-cbc/osmo-cbc.cfg</span><br><span>diff --git a/doc/manuals/Makefile.am b/doc/manuals/Makefile.am</span><br><span>new file mode 100644</span><br><span>index 0000000..ef90e2b</span><br><span>--- /dev/null</span><br><span>+++ b/doc/manuals/Makefile.am</span><br><span>@@ -0,0 +1,23 @@</span><br><span style="color: hsl(120, 100%, 40%);">+EXTRA_DIST = osmocbc-usermanual.adoc \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmocbc-usermanual-docinfo.xml \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmocbc-vty-reference.xml \</span><br><span style="color: hsl(120, 100%, 40%);">+ regen_doc.sh \</span><br><span style="color: hsl(120, 100%, 40%);">+ chapters \</span><br><span style="color: hsl(120, 100%, 40%);">+ vty</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if BUILD_MANUALS</span><br><span style="color: hsl(120, 100%, 40%);">+ ASCIIDOC = osmocbc-usermanual.adoc</span><br><span style="color: hsl(120, 100%, 40%);">+ ASCIIDOC_DEPS = $(srcdir)/chapters/*.adoc</span><br><span style="color: hsl(120, 100%, 40%);">+ include $(OSMO_GSM_MANUALS_DIR)/build/Makefile.asciidoc.inc</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ VTY_REFERENCE = osmocbc-vty-reference.xml</span><br><span style="color: hsl(120, 100%, 40%);">+ include $(OSMO_GSM_MANUALS_DIR)/build/Makefile.vty-reference.inc</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ BUILT_REFERENCE_XML = $(builddir)/vty/cbc_vty_reference.xml</span><br><span style="color: hsl(120, 100%, 40%);">+ $(builddir)/vty/cbc_vty_reference.xml: $(top_builddir)/src/osmo-cbc</span><br><span style="color: hsl(120, 100%, 40%);">+ mkdir -p $(builddir)/vty</span><br><span style="color: hsl(120, 100%, 40%);">+ $(top_builddir)/src/osmo-cbc --vty-ref-xml > $@</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_REPOSITORY = osmo-cbc</span><br><span style="color: hsl(120, 100%, 40%);">+ include $(OSMO_GSM_MANUALS_DIR)/build/Makefile.common.inc</span><br><span style="color: hsl(120, 100%, 40%);">+endif</span><br><span>diff --git a/doc/manuals/chapters/counters.adoc b/doc/manuals/chapters/counters.adoc</span><br><span>new file mode 100644</span><br><span>index 0000000..e69de29</span><br><span>--- /dev/null</span><br><span>+++ b/doc/manuals/chapters/counters.adoc</span><br><span>diff --git a/doc/manuals/chapters/overview.adoc b/doc/manuals/chapters/overview.adoc</span><br><span>new file mode 100644</span><br><span>index 0000000..2077878</span><br><span>--- /dev/null</span><br><span>+++ b/doc/manuals/chapters/overview.adoc</span><br><span>@@ -0,0 +1,77 @@</span><br><span style="color: hsl(120, 100%, 40%);">+[[overview]]</span><br><span style="color: hsl(120, 100%, 40%);">+== OsmoCBC Overview</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+=== The 3GPP Cell Broadcast Centre</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Within the 3GPP cellular network, the Cell Broadcast Centre is the central</span><br><span style="color: hsl(120, 100%, 40%);">+instance for managing all Cell Broadcast and Emergency Warning functions.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+It acts as a gateway between external applications / users, such as government</span><br><span style="color: hsl(120, 100%, 40%);">+authorities for civil protection, and the various components within the 3GPP</span><br><span style="color: hsl(120, 100%, 40%);">+network to actually deliver those broadcast and/or emergency messages.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[[about]]</span><br><span style="color: hsl(120, 100%, 40%);">+=== About OsmoCBC</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoCBC is the Osmocom implementation of a Cellular Broadcast Centre (CBC). It</span><br><span style="color: hsl(120, 100%, 40%);">+implements:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- the BSC-CBC interface using the CBSP protocol</span><br><span style="color: hsl(120, 100%, 40%);">+- a HTTP/JSON/RESTful interface for external applications</span><br><span style="color: hsl(120, 100%, 40%);">+- a telnet-based command line interface for configuration and introspection called VTY</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoCBC provides mainly the following functionality:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- establishing communication with the various Radio Access Network elements such as BSCs within the network</span><br><span style="color: hsl(120, 100%, 40%);">+- receiving requests to start or remove CBS and ETWS messages from external applications</span><br><span style="color: hsl(120, 100%, 40%);">+- distributing the CBS and/or ETWS messages</span><br><span style="color: hsl(120, 100%, 40%);">+has connection with the various RANs of the 3GPP cellular network</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Future versions of OsmoCBC are expected to contain the RNC-CBC interface</span><br><span style="color: hsl(120, 100%, 40%);">+with the SABP protocol, as well as the MME-CBC interface using the SBcAP</span><br><span style="color: hsl(120, 100%, 40%);">+protocol. Should you be interested in contributing to this effort,</span><br><span style="color: hsl(120, 100%, 40%);">+please contact the author of this document.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+=== CBSP implementation</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+CBSP is a Layer 5 protocol operating on top of TCP/IP, established</span><br><span style="color: hsl(120, 100%, 40%);">+between the CBC and the various BSCs of a cellular network.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+According to 3GPP, the CBSP is typically established from the CBC to the</span><br><span style="color: hsl(120, 100%, 40%);">+BSC. This means that the CBSP operates as TCP client and the BSCs</span><br><span style="color: hsl(120, 100%, 40%);">+operate as TCP servers. The disadvantage of this is that it requires</span><br><span style="color: hsl(120, 100%, 40%);">+the CBC to have out-of-band, prior knowledge about all the BSCs in the</span><br><span style="color: hsl(120, 100%, 40%);">+network, as well as their IP addresses.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoCBC also supports a slightly modified mode of operation, where the</span><br><span style="color: hsl(120, 100%, 40%);">+CBC operates as TCP server, and the BSCs as TCP clients. This means</span><br><span style="color: hsl(120, 100%, 40%);">+that all BSCs need to know the IP address of the CBC. In this situation,</span><br><span style="color: hsl(120, 100%, 40%);">+the CBC doesn't need to know each and every BSC in the network. It</span><br><span style="color: hsl(120, 100%, 40%);">+simply only accepts incoming CBSP connections.</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%);">+=== REST interface</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The REST interface is specified in the JSON schema files</span><br><span style="color: hsl(120, 100%, 40%);">+`cbc.schema.json` and `smscb.schema.json`, which are part of the OsmoCBC</span><br><span style="color: hsl(120, 100%, 40%);">+distribution.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The REST interface currently binds to TCP port 12345 (on INADRR_ANY) and</span><br><span style="color: hsl(120, 100%, 40%);">+can be reached at http://localhost:1234/api/ecbe/v1"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+NOTE:: It is your responsibility to properly secure access to the REST</span><br><span style="color: hsl(120, 100%, 40%);">+interface endpoint to ensure only legitimate users can access it. This</span><br><span style="color: hsl(120, 100%, 40%);">+may be achieved via packet filtering and a reverse HTTP proxy.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+==== POST /api/ecbe/v1/message</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+This command is used to create a new SMSCB or ETWS message inside the CBC.</span><br><span style="color: hsl(120, 100%, 40%);">+The `cbc_messsage` type as specified in the JSON schema.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+==== DELETE /api/ecbe/v1/message/:message_id</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+This command is used to delete an existing SMSCB or ETWS message from the CBC.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The `:message_id` parameter is the decimal integer representation of the</span><br><span style="color: hsl(120, 100%, 40%);">+cbc_message.smscb.message_id that was specified when creating the</span><br><span style="color: hsl(120, 100%, 40%);">+message via the POST command stated above.</span><br><span>diff --git a/doc/manuals/chapters/running.adoc b/doc/manuals/chapters/running.adoc</span><br><span>new file mode 100644</span><br><span>index 0000000..5cbe873</span><br><span>--- /dev/null</span><br><span>+++ b/doc/manuals/chapters/running.adoc</span><br><span>@@ -0,0 +1,21 @@</span><br><span style="color: hsl(120, 100%, 40%);">+== Running OsmoCBC</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The OsmoCBC executable (`osmo-cbc`) offers the following command-line</span><br><span style="color: hsl(120, 100%, 40%);">+arguments:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+=== SYNOPSIS</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+*osmo-cbc* [-h|-V] [-D] [-c 'CONFIGFILE']</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+=== OPTIONS</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+*-h, --help*::</span><br><span style="color: hsl(120, 100%, 40%);">+ Print a short help message about the supported options.</span><br><span style="color: hsl(120, 100%, 40%);">+*-V, --version*::</span><br><span style="color: hsl(120, 100%, 40%);">+ Print the compile-time version number of the program.</span><br><span style="color: hsl(120, 100%, 40%);">+*-D, --daemonize*::</span><br><span style="color: hsl(120, 100%, 40%);">+ Fork the process as a daemon into background.</span><br><span style="color: hsl(120, 100%, 40%);">+*-c, --config-file 'CONFIGFILE'*::</span><br><span style="color: hsl(120, 100%, 40%);">+ Specify the file and path name of the configuration file to be</span><br><span style="color: hsl(120, 100%, 40%);">+ used. If none is specified, use `osmo-bsc.cfg` in the current</span><br><span style="color: hsl(120, 100%, 40%);">+ working directory.</span><br><span>diff --git a/doc/manuals/osmocbc-usermanual-docinfo.xml b/doc/manuals/osmocbc-usermanual-docinfo.xml</span><br><span>new file mode 100644</span><br><span>index 0000000..528635c</span><br><span>--- /dev/null</span><br><span>+++ b/doc/manuals/osmocbc-usermanual-docinfo.xml</span><br><span>@@ -0,0 +1,47 @@</span><br><span style="color: hsl(120, 100%, 40%);">+<revhistory></span><br><span style="color: hsl(120, 100%, 40%);">+ <revision></span><br><span style="color: hsl(120, 100%, 40%);">+ <revnumber>1</revnumber></span><br><span style="color: hsl(120, 100%, 40%);">+ <date>January 4th, 2021</date></span><br><span style="color: hsl(120, 100%, 40%);">+ <authorinitials>HW</authorinitials></span><br><span style="color: hsl(120, 100%, 40%);">+ <revremark></span><br><span style="color: hsl(120, 100%, 40%);">+ Initial version</span><br><span style="color: hsl(120, 100%, 40%);">+ </revremark></span><br><span style="color: hsl(120, 100%, 40%);">+ </revision></span><br><span style="color: hsl(120, 100%, 40%);">+</revhistory></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+<authorgroup></span><br><span style="color: hsl(120, 100%, 40%);">+ <author></span><br><span style="color: hsl(120, 100%, 40%);">+ <firstname>Harald</firstname></span><br><span style="color: hsl(120, 100%, 40%);">+ <surname>Welte</surname></span><br><span style="color: hsl(120, 100%, 40%);">+ <email>hwelte@sysmocom.de</email></span><br><span style="color: hsl(120, 100%, 40%);">+ <authorinitials>HW</authorinitials></span><br><span style="color: hsl(120, 100%, 40%);">+ <affiliation></span><br><span style="color: hsl(120, 100%, 40%);">+ <shortaffil>sysmocom</shortaffil></span><br><span style="color: hsl(120, 100%, 40%);">+ <orgname>sysmocom - s.f.m.c. GmbH</orgname></span><br><span style="color: hsl(120, 100%, 40%);">+ <jobtitle>Managing Director</jobtitle></span><br><span style="color: hsl(120, 100%, 40%);">+ </affiliation></span><br><span style="color: hsl(120, 100%, 40%);">+ </author></span><br><span style="color: hsl(120, 100%, 40%);">+</authorgroup></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+<copyright></span><br><span style="color: hsl(120, 100%, 40%);">+ <year>2021</year></span><br><span style="color: hsl(120, 100%, 40%);">+ <holder>sysmocom - s.f.m.c. GmbH</holder></span><br><span style="color: hsl(120, 100%, 40%);">+</copyright></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+<legalnotice></span><br><span style="color: hsl(120, 100%, 40%);">+ <para></span><br><span style="color: hsl(120, 100%, 40%);">+ Permission is granted to copy, distribute and/or modify this</span><br><span style="color: hsl(120, 100%, 40%);">+ document under the terms of the GNU Free Documentation License,</span><br><span style="color: hsl(120, 100%, 40%);">+ Version 1.3 or any later version published by the Free Software</span><br><span style="color: hsl(120, 100%, 40%);">+ Foundation; with the Invariant Sections being just 'Foreword',</span><br><span style="color: hsl(120, 100%, 40%);">+ 'Acknowledgements' and 'Preface', with no Front-Cover Texts,</span><br><span style="color: hsl(120, 100%, 40%);">+ and no Back-Cover Texts. A copy of the license is included in</span><br><span style="color: hsl(120, 100%, 40%);">+ the section entitled "GNU Free Documentation License".</span><br><span style="color: hsl(120, 100%, 40%);">+ </para></span><br><span style="color: hsl(120, 100%, 40%);">+ <para></span><br><span style="color: hsl(120, 100%, 40%);">+ The Asciidoc source code of this manual can be found at</span><br><span style="color: hsl(120, 100%, 40%);">+ <ulink url="http://git.osmocom.org/osmo-gsm-manuals/"></span><br><span style="color: hsl(120, 100%, 40%);">+ http://git.osmocom.org/osmo-gsm-manuals/</span><br><span style="color: hsl(120, 100%, 40%);">+ </ulink></span><br><span style="color: hsl(120, 100%, 40%);">+ </para></span><br><span style="color: hsl(120, 100%, 40%);">+</legalnotice></span><br><span>diff --git a/doc/manuals/osmocbc-usermanual.adoc b/doc/manuals/osmocbc-usermanual.adoc</span><br><span>new file mode 100644</span><br><span>index 0000000..391a9f1</span><br><span>--- /dev/null</span><br><span>+++ b/doc/manuals/osmocbc-usermanual.adoc</span><br><span>@@ -0,0 +1,29 @@</span><br><span style="color: hsl(120, 100%, 40%);">+:gfdl-enabled:</span><br><span style="color: hsl(120, 100%, 40%);">+:program-name: OsmoCBC</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoCBC User Manual</span><br><span style="color: hsl(120, 100%, 40%);">+====================</span><br><span style="color: hsl(120, 100%, 40%);">+Harald Welte <hwelte@sysmocom.de></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%);">+include::./common/chapters/preface.adoc[]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+include::{srcdir}/chapters/overview.adoc[]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+include::{srcdir}/chapters/running.adoc[]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+include::./common/chapters/counters-overview.adoc[]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+include::{srcdir}/chapters/counters.adoc[]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+include::./common/chapters/vty.adoc[]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+include::./common/chapters/logging.adoc[]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+include::./common/chapters/port_numbers.adoc[]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+include::./common/chapters/bibliography.adoc[]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+include::./common/chapters/glossary.adoc[]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+include::./common/chapters/gfdl.adoc[]</span><br><span>diff --git a/doc/manuals/osmocbc-vty-reference.xml b/doc/manuals/osmocbc-vty-reference.xml</span><br><span>new file mode 100644</span><br><span>index 0000000..8e05aee</span><br><span>--- /dev/null</span><br><span>+++ b/doc/manuals/osmocbc-vty-reference.xml</span><br><span>@@ -0,0 +1,38 @@</span><br><span style="color: hsl(120, 100%, 40%);">+<?xml version="1.0" encoding="UTF-8"?></span><br><span style="color: hsl(120, 100%, 40%);">+<!--</span><br><span style="color: hsl(120, 100%, 40%);">+ ex:ts=2:sw=42sts=2:et</span><br><span style="color: hsl(120, 100%, 40%);">+ -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-</span><br><span style="color: hsl(120, 100%, 40%);">+--></span><br><span style="color: hsl(120, 100%, 40%);">+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN"</span><br><span style="color: hsl(120, 100%, 40%);">+"http://docbook.org/xml/5.0/dtd/docbook.dtd" [</span><br><span style="color: hsl(120, 100%, 40%);">+<!ENTITY chapter-vty SYSTEM "./common/chapters/vty.xml" ></span><br><span style="color: hsl(120, 100%, 40%);">+<!ENTITY sections-vty SYSTEM "generated/docbook_vty.xml" ></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%);">+<book></span><br><span style="color: hsl(120, 100%, 40%);">+ <info></span><br><span style="color: hsl(120, 100%, 40%);">+ <revhistory></span><br><span style="color: hsl(120, 100%, 40%);">+ <revision></span><br><span style="color: hsl(120, 100%, 40%);">+ <revnumber>v1</revnumber></span><br><span style="color: hsl(120, 100%, 40%);">+ <date>6th January 2021</date></span><br><span style="color: hsl(120, 100%, 40%);">+ <authorinitials>hw</authorinitials></span><br><span style="color: hsl(120, 100%, 40%);">+ <revremark>Initial</revremark></span><br><span style="color: hsl(120, 100%, 40%);">+ </revision></span><br><span style="color: hsl(120, 100%, 40%);">+ </revhistory></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ <title>OsmoCBC VTY Reference</title></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ <copyright></span><br><span style="color: hsl(120, 100%, 40%);">+ <year>2021</year></span><br><span style="color: hsl(120, 100%, 40%);">+ </copyright></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ <legalnotice></span><br><span style="color: hsl(120, 100%, 40%);">+ <para>This work is copyright by <orgname>sysmocom - s.f.m.c. GmbH</orgname>. All rights reserved.</span><br><span style="color: hsl(120, 100%, 40%);">+ </para></span><br><span style="color: hsl(120, 100%, 40%);">+ </legalnotice></span><br><span style="color: hsl(120, 100%, 40%);">+ </info></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ <!-- Main chapters--></span><br><span style="color: hsl(120, 100%, 40%);">+ &chapter-vty;</span><br><span style="color: hsl(120, 100%, 40%);">+</book></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>diff --git a/doc/manuals/regen_doc.sh b/doc/manuals/regen_doc.sh</span><br><span>new file mode 100755</span><br><span>index 0000000..c2a5d4c</span><br><span>--- /dev/null</span><br><span>+++ b/doc/manuals/regen_doc.sh</span><br><span>@@ -0,0 +1,17 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/bin/sh -x</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if [ -z "$DOCKER_PLAYGROUND" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+ echo "You need to set DOCKER_PLAYGROUND"</span><br><span style="color: hsl(120, 100%, 40%);">+ exit 1</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SCRIPT=$(realpath "$0")</span><br><span style="color: hsl(120, 100%, 40%);">+MANUAL_DIR=$(dirname "$SCRIPT")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+COMMIT=${COMMIT:-$(git log -1 --format=format:%H)}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+cd "$DOCKER_PLAYGROUND/scripts" || exit 1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OSMO_CBC_BRANCH=$COMMIT ./regen_doc.sh osmo-cbc 4264 \</span><br><span style="color: hsl(120, 100%, 40%);">+ "$MANUAL_DIR/chapters/counters_generated.adoc" \</span><br><span style="color: hsl(120, 100%, 40%);">+ "$MANUAL_DIR/vty/cbc_vty_reference.xml"</span><br><span>diff --git a/doc/manuals/vty/cbc_vty_additions.xml b/doc/manuals/vty/cbc_vty_additions.xml</span><br><span>new file mode 100644</span><br><span>index 0000000..b27bb7d</span><br><span>--- /dev/null</span><br><span>+++ b/doc/manuals/vty/cbc_vty_additions.xml</span><br><span>@@ -0,0 +1,18 @@</span><br><span style="color: hsl(120, 100%, 40%);">+<vtydoc xmlns='urn:osmocom:xml:libosmocore:vty:doc:1.0'></span><br><span style="color: hsl(120, 100%, 40%);">+ <node id='config-cbc'></span><br><span style="color: hsl(120, 100%, 40%);">+ <description>This node allows to configure the CBC. Will enter the CBC specific VTY configuration node.</description></span><br><span style="color: hsl(120, 100%, 40%);">+ <command id='peer NAME'></span><br><span style="color: hsl(120, 100%, 40%);">+ <description></span><br><span style="color: hsl(120, 100%, 40%);">+ Configure a CBC RAN peer (BSC, ...). Will enter a sub-node where parameters about that peer can be configured. The NAME has local significance only (for VTY and logging).</span><br><span style="color: hsl(120, 100%, 40%);">+ </description></span><br><span style="color: hsl(120, 100%, 40%);">+ </command></span><br><span style="color: hsl(120, 100%, 40%);">+ <command id='unknown-peers (accept|reject)'></span><br><span style="color: hsl(120, 100%, 40%);">+ <description></span><br><span style="color: hsl(120, 100%, 40%);">+ Whether or not the CBC should accept incoming CBSP/TCP connections from unknown peers, i.e. such peers that don't have an explicit 'peer' configuration.</span><br><span style="color: hsl(120, 100%, 40%);">+ </description></span><br><span style="color: hsl(120, 100%, 40%);">+ </command></span><br><span style="color: hsl(120, 100%, 40%);">+ </node></span><br><span style="color: hsl(120, 100%, 40%);">+ <node id='config-cbc-peer'></span><br><span style="color: hsl(120, 100%, 40%);">+ <description>This node allows to configure one CBC RAN peer (BSC, ...)</description></span><br><span style="color: hsl(120, 100%, 40%);">+ </node></span><br><span style="color: hsl(120, 100%, 40%);">+</vtydoc></span><br><span>diff --git a/src/cbc_main.c b/src/cbc_main.c</span><br><span>index 77020db..06969e7 100644</span><br><span>--- a/src/cbc_main.c</span><br><span>+++ b/src/cbc_main.c</span><br><span>@@ -74,7 +74,7 @@</span><br><span> };</span><br><span> </span><br><span> static const char cbc_copyright[] =</span><br><span style="color: hsl(0, 100%, 40%);">- "Copyright (C) 2019 by Harald Welte <laforge@gnumonks.org>\r\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "Copyright (C) 2019-2021 by Harald Welte <laforge@gnumonks.org>\r\n"</span><br><span> "License AGPLv3+: GNU Affero GPL Version 3 or later <http://gnu.org/licenses/agpl-3.0.html>\r\n"</span><br><span> "This is free software: you are free ot change and redistribute it.\r\n"</span><br><span> "There is NO WARRANTY, to the extent permitted by law.\r\n\r\n"</span><br><span>@@ -98,18 +98,54 @@</span><br><span> </span><br><span> static void print_help(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- /* FIXME */</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Supported options:\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ printf(" -h --help This text.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ printf(" -D --daemonize Fork the process into a background daemon.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ printf(" -c --config-file filename The config file to use.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ printf(" -V --version Print the version of OsmoMSC.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("\nVTY reference generation:\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ printf(" --vty-ref-mode MODE VTY reference generation mode (e.g. 'expert').\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ printf(" --vty-ref-xml Generate the VTY reference XML output and exit.\n");</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 void handle_long_options(const char *prog_name, const int long_option)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ static int vty_ref_mode = VTY_REF_GEN_MODE_DEFAULT;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ switch (long_option) {</span><br><span style="color: hsl(120, 100%, 40%);">+ case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_ref_mode = get_string_value(vty_ref_gen_mode_names, optarg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (vty_ref_mode < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ fprintf(stderr, "%s: Unknown VTY reference generation "</span><br><span style="color: hsl(120, 100%, 40%);">+ "mode '%s'\n", prog_name, optarg);</span><br><span style="color: hsl(120, 100%, 40%);">+ exit(2);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+ fprintf(stderr, "Generating the VTY reference in mode '%s' (%s)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ get_value_string(vty_ref_gen_mode_names, vty_ref_mode),</span><br><span style="color: hsl(120, 100%, 40%);">+ get_value_string(vty_ref_gen_mode_desc, vty_ref_mode));</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_dump_xml_ref_mode(stdout, (enum vty_ref_gen_mode) vty_ref_mode);</span><br><span style="color: hsl(120, 100%, 40%);">+ exit(0);</span><br><span style="color: hsl(120, 100%, 40%);">+ default:</span><br><span style="color: hsl(120, 100%, 40%);">+ fprintf(stderr, "%s: error parsing cmdline options\n", prog_name);</span><br><span style="color: hsl(120, 100%, 40%);">+ exit(2);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> </span><br><span> static void handle_options(int argc, char **argv)</span><br><span> {</span><br><span> while (1) {</span><br><span> int option_index = 0, c;</span><br><span style="color: hsl(120, 100%, 40%);">+ static int long_option = 0;</span><br><span> static const struct option long_options[] = {</span><br><span> { "help", 0, 0, 'h' },</span><br><span> { "daemonize", 0, 0, 'D' },</span><br><span> { "config-file", 1, 0, 'c' },</span><br><span> { "version", 0, 0, 'V' },</span><br><span style="color: hsl(120, 100%, 40%);">+ { "vty-ref-mode", 1, &long_option, 1},</span><br><span style="color: hsl(120, 100%, 40%);">+ { "vty-ref-xml", 0, &long_option, 2},</span><br><span> { NULL, 0, 0, 0 }</span><br><span> };</span><br><span> </span><br><span>@@ -122,6 +158,9 @@</span><br><span> print_help();</span><br><span> exit(0);</span><br><span> break;</span><br><span style="color: hsl(120, 100%, 40%);">+ case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+ handle_long_options(argv[0], long_option);</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span> case 'D':</span><br><span> cmdline_config.daemonize = true;</span><br><span> break;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-cbc/+/22005">change 22005</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-cbc/+/22005"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-cbc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Idf49d7fcee2b11638945baa25064273a7e5e5e61 </div>
<div style="display:none"> Gerrit-Change-Number: 22005 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>