<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>