Further clean-up in osmo-sgsn -> osmo-gbproxy migration

* fix manuals builds, including vty reference generation
* fix vty tests
* remove manuals from osmo-sgsn
* update .gitreview
* update osmoappdesc.py

Related: OS#4992
Change-Id: I80439ab0d21a3fb33f38da42acbfe3fbb0941b91
This commit is contained in:
Harald Welte 2021-01-31 19:36:06 +01:00 committed by Oliver Smith
parent 29532c2a06
commit 936dfd720a
23 changed files with 390 additions and 3992 deletions

View File

@ -1,3 +1,3 @@
[gerrit]
host=gerrit.osmocom.org
project=osmo-sgsn
project=osmo-gbproxy

View File

@ -9,9 +9,9 @@ AM_CPPFLAGS = \
$(NULL)
SUBDIRS = \
doc \
include \
src \
doc \
contrib \
tests \
$(NULL)

View File

@ -1,23 +1,26 @@
EXTRA_DIST = osmosgsn-usermanual.adoc \
osmosgsn-usermanual-docinfo.xml \
osmosgsn-vty-reference.xml \
EXTRA_DIST = \
osmogbproxy-usermanual.adoc \
osmogbproxy-usermanual-docinfo.xml \
regen_doc.sh \
chapters \
vty \
osmogbproxy-vty-reference.xml \
vty-osmogbproxy \
chapters \
regen_doc.sh \
vty \
$(NULL)
if BUILD_MANUALS
ASCIIDOC = osmosgsn-usermanual.adoc osmogbproxy-usermanual.adoc
ASCIIDOC_DEPS = $(srcdir)/chapters/*.adoc
ASCIIDOC = osmogbproxy-usermanual.adoc
include $(OSMO_GSM_MANUALS_DIR)/build/Makefile.asciidoc.inc
osmogbproxy-usermanual.pdf: $(srcdir)/chapters/*.adoc #$(srcdir)/chapters/*.dot
VTY_REFERENCE = osmogbproxy-vty-reference.xml
BUILT_REFERENCE_XML = $(builddir)/vty/gbproxy_vty_reference.xml
$(builddir)/vty/gbproxy_vty_reference.xml: $(top_builddir)/src/osmo-gbproxy
mkdir -p $(builddir)/vty
$(top_builddir)/src/osmo-gbproxy --vty-ref-xml > $@
VTY_REFERENCE = osmosgsn-vty-reference.xml osmogbproxy-vty-reference.xml
include $(OSMO_GSM_MANUALS_DIR)/build/Makefile.vty-reference.inc
OSMO_REPOSITORY = osmo-sgsn
OSMO_REPOSITORY = osmo-gbproxy
include $(OSMO_GSM_MANUALS_DIR)/build/Makefile.common.inc
endif

View File

@ -1,378 +0,0 @@
== Configuring OsmoSGSN
Contrary to other network elements (like OsmoBSC, OsmoNITB), the
OsmoSGSN has a relatively simple configuration.
On the one hand, this is primary because the PCU configuration happens
from the BSC side.
On the other hand, it is because the Gb interface does not need an
explicit configuration of each PCU connecting to the SGSN. The
administrator only has to ensure that the NS and BSSGP layer identities
(NSEI, NSVCI, BVCI) are unique for each PCU connecting to the SGSN.
=== Configuring the Gp interface
The Gp interface is the GTP-C and GTP-U based interface between the SGSN
and the GGSNs. It is implemented via UDP on well-known source and
destination ports.
When an MS requests establishment of a PDP context, it specifies the APN
(Access Point Name) to which the context shall be established. This APN
determines which GGSN shall be used, and that in turn determines which
external IP network the MS will be connected to.
There are two modes in which GGSNs can be configured:
. static GGSN/APN configuration
. dynamic GGSN/APN configuration
==== Static GGSN/APN configuration
In this mode, there is a static list of GGSNs and APNs configured in
OsmoSGSN via the VTY / config file.
This is a non-standard method outside of the 3GPP specifications for the
SGSN, and is typically only used in private/small GPRS networks without
any access to a GRX.
.Example: Static GGSN/APN configuration (single catch-all GGSN)
----
OsmoSGSN(config-sgsn)# gtp local-ip 172.0.0.1 <1>
OsmoSGSN(config-sgsn)# ggsn 0 remote-ip 127.0.0.2 <2>
OsmoSGSN(config-sgsn)# ggsn 0 gtp-version 1 <3>
OsmoSGSN(config-sgsn)# apn * ggsn 0 <4>
----
<1> Configure the local IP address at the SGSN used for Gp/GTP
<2> Specify the remote IP address of the GGSN (for GGSN 0)
<3> Specify the GTP protocol version used for GGSN 0
<4> Route all APN names to GGSN 0
==== Dynamic GGSN/APN configuration
In this mode, the SGSN will use a DNS-based method to perform the lookup
from the APN (as specified by the MS) towards the GGSN IP address.
This is the official method as per the 3GPP specifications for the SGSN,
and what is used on GRX.
.Example: Dynamic GGSN/APN configuration
----
OsmoSGSN(config-sgsn)# gtp local-ip 192.168.0.11 <1>
OsmoSGSN(config-sgsn)# ggsn dynamic <2>
OsmoSGSN(config-sgsn)# grx-dns-add 1.2.3.4 <3>
----
<1> Configure the local IP address at the SGSN used for Gp/GTP
<2> Enable the dynamic GGSN resolving mode
<3> Specify the IP address of a DNS server for APN resolution
[[auth-pol]]
=== Authorization Policy
The authorization policy controls by which rules a subscriber is accepted or
rejected. The possible options range from accepting just all subscribers without
further checking, to a fine grained access-control, handled by an external HLR.
accept-all:: All subscribers that attempt to attach to the GPRS network are
accepted without further checking. This option is intended to be used for
testing in a controlled environment only. A wide-open network may attract
subscribers from foreign networks and disrupt their service. It is highly
recommended to pick one of the options below.
remote:: This option allows to connect OsmoSGSN to an external HLR via the
GSUP protocol. This will be the preferred option in larger networks.
acl-only:: If no external HLR is available, the network operator has the
option to control the access using an access control list. The access control
list contains the IMSI numbers of the allowed subscribers. This method offers
fine grained access control and is ideal for small networks and lab test
environments.
closed:: This policy mode softens the strict *acl-only* only mode by also
implicitly accepting home network subscribers. The decision is made by the MCC
and MNC part of the IMSI number. The combination of MCC and MNC fully identifies
a subscribers home network, also known as a Home Network Identity (HNI, i.e.
MCC and MNC found at the start of the IMSI, e.g. MCC 901 and MNC 700 with
IMSI 901700000003080).
NOTE: The policy mode *closed* must not be confused with the equally named
policy that is defined for osmo-nitb!
.Example: Assign or change authorization policy
----
OsmoSGSN> enable
OsmoSGSN# configure terminal
OsmoSGSN(config)# sgsn
OsmoSGSN(config-sgsn)# auth-policy acl-only <1>
OsmoSGSN(config-sgsn)# write <2>
Configuration saved to sgsn.cfg
OsmoSGSN(config-sgsn)# end
OsmoSGSN# disable
OsmoSGSN>
----
<1> 'acl-only' is selected as authorization policy
<2> Saves current changes to cofiguration to make this policy
persistent
.Example: Access control list
----
sgsn
auth-policy acl-only <1>
imsi-acl add 001010000000003
imsi-acl add 001010000000002
imsi-acl add 001010000000001
imsi-acl add 901700000000068 <2>
----
<1> Set the authorization policy
<2> Add as many subscribers as required
=== Subscriber Configuration
As opposed to OsmoNITB, OsmoSGSN does not feature a built-in HLR.
It can thus operate only in the following two modes:
. Accessing an external HLR (or HLR gateway) via the GSUP protocol
. Accepting subscribers based on internal ACL (access control list),
see also <<auth-pol>>
==== Accessing an external HLR via GSUP
The non-standard GSUP protocol was created to provide OsmoSGSN with
access to an external HLR while avoiding the complexities of the
TCAP/MAP protocol stack commonly used by HLRs.
A custom HLR could either directly implement GSUP, or an external gateway
can be used to convert GSUP to the respective MAP operations.
The primitives/operations of GSUP are modelled to have a 1:1
correspondence to their MAP counterparts. However, the encoding is much
simplified by use of a binary TLV encoding similar to Layer 3 of
GSM/GPRS.
GSUP performs a challenge-response authentication protocol called OAP,
which uses the standard MILENAGE algorithm for mutual authentication
between OsmoSGSN and the HLR/HLR-GW.
[[sgsn-ex-gsup]]
.Example: Using an external HLR via GSUP
----
OsmoSGSN(config-sgsn)# gsup remote-ip 2.3.4.5 <1>
OsmoSGSN(config-sgsn)# gsup remote-port 10000 <2>
OsmoSGSN(config-sgsn)# gsup oap-k 000102030405060708090a0b0c0d0e0f <3>
OsmoSGSN(config-sgsn)# gsup oap-opc 101112131415161718191a1b1c1d1e1f <4>
----
<1> Configure the IP address of the (remote) HLR or HLR-GW
<2> Configure the TCP port of the (remote) HLR or HLR-GW
<3> Specify the OAP shared key
<4> Specify the OAP shared OPC
=== CDR configuration
OsmoSGSN can write a text log file containing CDR (call data records),
which are commonly used for accounting/billing purpose.
.Example: CDR log file configuration
----
OsmoSGSN(config-sgsn)# cdr filename /var/log/osmosgsn.cdr
OsmoSGSN(config-sgsn)# cdr interval 600 <1>
----
<1> Periodically log existing PDP contexts every 600 seconds (10 min)
The CDR file is a simple CSV file including a header line naming the
individual fields of each CSV line.
==== CDR CTRL interface
Independently of whether logging CDR to a file is enabled or not, OsmoSGSN can
also provide delivery of CDR through the CTRL interface. CDR are sent by means
of TRAP messages with variable name _cdr-v1_, and its value is filled using the
same CSV line format as in the log file, but without CSV header line.
.Example: CDR delivery through CTRL TRAP messages
----
OsmoSGSN(config-sgsn)# cdr trap
----
==== CDR Format
[[sgsn-cdr]]
.Description of CSV fields in OsmoSGSN CDR file
[options="header",cols="15%,85%"]
|===
|Field Name|Description
|timestamp|Timestamp in YYYYMMDDhhmmssXXX where XXX are milli-seconds
|imsi|IMSI causing this CDR
|imei|IMEI causing this CDR
|msisdn|MSISDN causing this CDR (if known)
|cell_id|Cell ID in which the MS was registered last
|lac|Location Area Code in which the MS was registered last
|hlr|HLR of the subscriber
|event|Possible events are explained below in <<sgsn-cdr-event>>
|===
If the _event_ field describes a pdp context related action (starts with
_pdp-_), then the following extra CSV fields are appended to the line:
[[sgsn-cdr-pdp]]
.Description of extra CSV fields for pdp context related events
[options="header",cols="15%,85%"]
|===
|Field Name|Description
|pdp_duration|duration of the PDP context so far
|ggsn_addr|GGSN related to the PDP context
|sgsn_addr|SGSN related to the PDP context
|apni|APN identifier of the PDP context
|eua_addr|IP address allocated to the PDP context
|vol_in|Number of bytes in MO direction
|vol_out|Number of bytes in MT direction
|charging_id|Related charging ID
|===
[[sgsn-cdr-event]]
.Description of OsmoSGSN CDR Events
[options="header",cols="15%,85%"]
|===
|Event|Description
|attach|GMM ATTACH COMPLETE about to be sent to MS
|update|GMM ROUTING AREA UPDATE COMPLETE about to be sent to MS
|detach|GMM DETACH REQUEST received from MS
|free|Release of the MM context memory
|pdp-act|GTP CREATE PDP CONTEXT CONFIRM received from GGSN
|pdp-deact|GTP DELETE PDP CONTEXT CONFIRM received from GGSN
|pdp-terminate|Forced PDP context termination during MM context release
|pdp-free|Release of the PDP context memory
|pdp-periodic|Triggered by periodic timer, see VTY cmd _cdr interval_
|===
=== User traffic compression
In order to save GPRS bandwith, OsmoSGSN implements header and data
compression schemes which will reduce the packet length.
==== Header compression
On TCP/IP connections, each packet is prepended with a fairly long TCP/IP
header. The header contains a lot of static information that never changes
throughout the connection. (source and destination address, port numbers etc.)
OsmoSGSN implements a TCP/IP header compression scheme called RFC1144, also
known as SLHC. This type of header compression removes the TCP/IP header
entirely and replaces it with a shorter version, that only contains the
information that is absolutely necessary to identify and check the packet.
The receiving part then restores the original header and forwards it to higher
layers.
*compression rfc1144 passive*::
TCP/IP header compression has to be actively requested by the modem. The
network will not promote compression by itself. This is the recommended mode
of operation.
*compression rfc1144 active slots <1-256>*::
TCP/IP header compression is actively promoted by the network. Modems may still
actively request different compression parameters or reject the offered
compression parameters entirely. The number of slots is the maximum number
of packet headers per subscriber that can be stored in the codebook.
.Example: Accept compression if requested
----
sgsn
compression rfc1144 passive
----
.Example: Actively promote compression
----
sgsn
compression rfc1144 active slots 8
----
.Example: Turn off compression
----
sgsn
no compression rfc1144
----
NOTE: The usage of TCP/IP options may disturb the RFC1144 header compression
scheme. TCP/IP options may render RFC1144 ineffective if variable data is
encoded into the option section of the TCP/IP packet. (e.g. TCP option 8,
Timestamp)
==== Data compression
Data compression works on the raw packet data, including the header part of the
packet. If enabled, header compression is applied first before data compression
is applied. OsmoSGSN implements the V.42bis data compression scheme.
*compression v42bis passive*::
V42bis data compression has to be actively requested by the modem. The network
will not promote compression by itself. This is the recommended mode of
operation.
*compression v42bis active direction (ms|sgsn|both) codewords <512-65535> strlen <6-250>*::
V42bis data compression is actively promoted by the network. Modems may still
actively request different compression parameters or reject the offered
compression parameters entirely. The direction configures which sides are
allowed to send compressed packets. For most cases, compressing 'both'
directions will be the preferred option. The following to parameters configure
the codebook size by the maxium number ('codewords') and size ('strlen') of
entries.
.Example: Accept compression if requested
----
sgsn
compression v42bis passive
----
.Example: Actively promote compression
----
sgsn
compression v42bis active direction both codewords 512 strlen 20
----
.Example: Turn off compression
----
sgsn
no compression v42bis
----
=== Encryption
Encryption can be enabled if the auth-policy is set to remote and the
HLR subscriber entries contain the keys of the SIM card. See
<<sgsn-ex-gsup>> on how to connect to an external HLR.
.Example: Turn on encryption (GEA3)
----
sgsn
encryption GEA3
----
.Example: Turn off encryption (GEA0)
----
sgsn
encryption GEA0
----
=== Configure SCCP/M3UA to accept _IuPS_ links
OsmoSGSN acts as client to contact an STP instance and establish an SCCP/M3UA
link.
An example configuration of OsmoSGSN's SCCP link:
----
cs7 instance 0
point-code 0.23.4
asp asp-clnt-OsmoSGSN 2905 0 m3ua
remote-ip 127.0.0.1
sctp-role client
as as-clnt-OsmoSGSN m3ua
asp asp-clnt-OsmoSGSN
routing-key 0 0.23.4
----
This configuration is explained in detail in <<cs7_config>>.

View File

@ -1,23 +0,0 @@
[[control]]
== Control interface
The actual protocol is described in <<common-control-if>>, the variables
common to all programs using it are described in <<ctrl_common_vars>>. Here we
describe variables specific to OsmoSGSN.
.Variables available over control interface
[options="header",width="100%",cols="20%,5%,5%,50%,20%"]
|===
|Name|Access|Trap|Value|Comment
|subscriber-list-active-v1|RO|No|"<imsi>,<addr>"|See <<subs>> for details.
|===
[[subs]]
=== subscriber-list-active-v1
Return the list of active subscribers as a concatenated set of pairs "<imsi>",
"addr" where first element of the pair is subscriber's IMSI and the second
element (which might be empty) is the subscriber's address. The address value
might be "none", "invalid" and "PPP" in addition to actual IP address. In case
of IP address it will be prefixed with "IPv4" or "IPv6" string depending on the
version of IP protocol.

View File

@ -1,4 +0,0 @@
[[counters]]
== Counters
include::./counters_generated.adoc[]

View File

@ -1,52 +1,10 @@
// autogenerated by show asciidoc counters
These counters and their description based on OsmoSGSN 1.4.0.31-05fe (OsmoSGSN).
These counters and their description are based on OsmoGbProxy UNKNOWN-dirty (OsmoGbProxy).
=== Rate Counters
// generating tables for rate_ctr_group
// rate_ctr_group table BSSGP Peer Statistics
.bssgp:bss_ctx - BSSGP Peer Statistics
[options="header"]
|===
| Name | Reference | Description
| packets:in | <<bssgp:bss_ctx_packets:in>> | Packets at BSSGP Level ( In)
| packets:out | <<bssgp:bss_ctx_packets:out>> | Packets at BSSGP Level (Out)
| bytes:in | <<bssgp:bss_ctx_bytes:in>> | Bytes at BSSGP Level ( In)
| bytes:out | <<bssgp:bss_ctx_bytes:out>> | Bytes at BSSGP Level (Out)
| blocked | <<bssgp:bss_ctx_blocked>> | BVC Blocking count
| discarded | <<bssgp:bss_ctx_discarded>> | BVC LLC Discarded count
| status | <<bssgp:bss_ctx_status>> | BVC Status count
|===
// rate_ctr_group table SGSN Overall Statistics
.sgsn - SGSN Overall Statistics
[options="header"]
|===
| Name | Reference | Description
| llc:dl_bytes | <<sgsn_llc:dl_bytes>> | Count sent LLC bytes before giving it to the bssgp layer
| llc:ul_bytes | <<sgsn_llc:ul_bytes>> | Count successful received LLC bytes (encrypt & fcs correct)
| llc:dl_packets | <<sgsn_llc:dl_packets>> | Count successful sent LLC packets before giving it to the bssgp layer
| llc:ul_packets | <<sgsn_llc:ul_packets>> | Count successful received LLC packets (encrypt & fcs correct)
| gprs:attach_requested | <<sgsn_gprs:attach_requested>> | Received attach requests
| gprs:attach_accepted | <<sgsn_gprs:attach_accepted>> | Sent attach accepts
| gprs:attach_rejected | <<sgsn_gprs:attach_rejected>> | Sent attach rejects
| gprs:detach_requested | <<sgsn_gprs:detach_requested>> | Received detach requests
| gprs:detach_acked | <<sgsn_gprs:detach_acked>> | Sent detach acks
| gprs:routing_area_requested | <<sgsn_gprs:routing_area_requested>> | Received routing area requests
| gprs:routing_area_requested | <<sgsn_gprs:routing_area_requested>> | Sent routing area acks
| gprs:routing_area_requested | <<sgsn_gprs:routing_area_requested>> | Sent routing area rejects
| pdp:activate_requested | <<sgsn_pdp:activate_requested>> | Received activate requests
| pdp:activate_rejected | <<sgsn_pdp:activate_rejected>> | Sent activate rejects
| pdp:activate_accepted | <<sgsn_pdp:activate_accepted>> | Sent activate accepts
| pdp:request_activated | <<sgsn_pdp:request_activated>> | unused
| pdp:request_activate_rejected | <<sgsn_pdp:request_activate_rejected>> | unused
| pdp:modify_requested | <<sgsn_pdp:modify_requested>> | unused
| pdp:modify_accepted | <<sgsn_pdp:modify_accepted>> | unused
| pdp:dl_deactivate_requested | <<sgsn_pdp:dl_deactivate_requested>> | Sent deactivate requests
| pdp:dl_deactivate_accepted | <<sgsn_pdp:dl_deactivate_accepted>> | Sent deactivate accepted
| pdp:ul_deactivate_requested | <<sgsn_pdp:ul_deactivate_requested>> | Received deactivate requests
| pdp:ul_deactivate_accepted | <<sgsn_pdp:ul_deactivate_accepted>> | Received deactivate accepts
|===
// rate_ctr_group table NSVC Peer Statistics
.ns:nsvc - NSVC Peer Statistics
[options="header"]
@ -54,17 +12,47 @@ These counters and their description based on OsmoSGSN 1.4.0.31-05fe (OsmoSGSN).
| Name | Reference | Description
| packets:in | <<ns:nsvc_packets:in>> | Packets at NS Level ( In)
| packets:out | <<ns:nsvc_packets:out>> | Packets at NS Level (Out)
| packets:out:drop | <<ns:nsvc_packets:out:drop>> | Dropped Packets (Out)
| bytes:in | <<ns:nsvc_bytes:in>> | Bytes at NS Level ( In)
| bytes:out | <<ns:nsvc_bytes:out>> | Bytes at NS Level (Out)
| bytes:out:drop | <<ns:nsvc_bytes:out:drop>> | Dropped Bytes (Out)
| blocked | <<ns:nsvc_blocked>> | NS-VC Block count
| unblocked | <<ns:nsvc_unblocked>> | NS-VC Unblock count
| dead | <<ns:nsvc_dead>> | NS-VC gone dead count
| replaced | <<ns:nsvc_replaced>> | NS-VC replaced other count
| nsei-chg | <<ns:nsvc_nsei-chg>> | NS-VC changed NSEI count
| inv-nsvci | <<ns:nsvc_inv-nsvci>> | NS-VCI was invalid count
| inv-nsei | <<ns:nsvc_inv-nsei>> | NSEI was invalid count
| lost:alive | <<ns:nsvc_lost:alive>> | ALIVE ACK missing count
| lost:reset | <<ns:nsvc_lost:reset>> | RESET ACK missing count
|===
// rate_ctr_group table GBProxy Peer Statistics
.gbproxy:peer - GBProxy Peer Statistics
[options="header"]
|===
| Name | Reference | Description
| blocked | <<gbproxy:peer_blocked>> | BVC Block
| unblocked | <<gbproxy:peer_unblocked>> | BVC Unblock
| dropped | <<gbproxy:peer_dropped>> | BVC blocked, dropped packet
| inv-nsei | <<gbproxy:peer_inv-nsei>> | NSEI mismatch
| tx-err | <<gbproxy:peer_tx-err>> | NS Transmission error
|===
// rate_ctr_group table GBProxy Global Statistics
.gbproxy:global - GBProxy Global Statistics
[options="header"]
|===
| Name | Reference | Description
| inv-bvci | <<gbproxy:global_inv-bvci>> | Invalid BVC Identifier
| inv-lai | <<gbproxy:global_inv-lai>> | Invalid Location Area Identifier
| inv-rai | <<gbproxy:global_inv-rai>> | Invalid Routing Area Identifier
| inv-nsei | <<gbproxy:global_inv-nsei>> | No BVC established for NSEI
| proto-err:bss | <<gbproxy:global_proto-err:bss>> | BSSGP protocol error (BSS )
| proto-err:sgsn | <<gbproxy:global_proto-err:sgsn>> | BSSGP protocol error (SGSN)
| not-supp:bss | <<gbproxy:global_not-supp:bss>> | Feature not supported (BSS )
| not-supp:sgsn | <<gbproxy:global_not-supp:sgsn>> | Feature not supported (SGSN)
| restart:sgsn | <<gbproxy:global_restart:sgsn>> | Restarted RESET procedure (SGSN)
| tx-err:sgsn | <<gbproxy:global_tx-err:sgsn>> | NS Transmission error (SGSN)
| error | <<gbproxy:global_error>> | Other error
| mod-peer-err | <<gbproxy:global_mod-peer-err>> | Patch error: no peer
|===
== Osmo Stat Items
// generating tables for osmo_stat_items
@ -76,6 +64,14 @@ NSVC Peer Statistics
| Name | Reference | Description | Unit
| alive.delay | <<ns.nsvc_alive.delay>> | ALIVE response time | ms
|===
NS Bind Statistics
// osmo_stat_item_group table NS Bind Statistics
.ns.bind - NS Bind Statistics
[options="header"]
|===
| Name | Reference | Description | Unit
| tx_backlog_length | <<ns.bind_tx_backlog_length>> | Transmit backlog length | packets
|===
== Osmo Counters
// generating tables for osmo_counters

View File

@ -1,109 +0,0 @@
[[chapter_introduction]]
== Overview
[[intro_overview]]
=== About OsmoSGSN
OsmoSGSN is the Osmocom implementation of the GPRS SGSN (Serving Gprs
Support Node) element inside the GPRS network. The SGSN plays a similar
central function to the GPRS network as the MSC plays in the GSM
network.
The SGSN is connected on the downlink side to Gb interfaces of the BSS,
specifically the PCU inside the BSS. The SGSN is further connected by
the GTP protocol to the GGSN which terminates the tunnels towards the
external packet data network (e.g. IPv4).
OsmoSGSN supports both a PCU that is co-located with(in) the BTS, as
well as a PCU that is co-located with(in) the BSC. In combination with
OsmoNITB/OsmoBSC/OsmoBTS, the PCU is co-located within the BTS.
[[fig-gprs-pcubts]]
.GPRS network architecture with PCU in BTS
[graphviz]
----
digraph G {
rankdir=LR;
MS0 [label="MS"];
MS1 [label="MS"];
MS0->BTS [label="Um"];
MS1->BTS [label="Um"];
BTS->BSC [label="Abis"];
BSC->MSC [label="A"];
BTS->PCU [label="pcu_sock"];
PCU->SGSN [label="Gb"];
SGSN->GGSN [label="GTP"];
}
----
=== Software Components
OsmoSGSN contains a variety of different software components, which
we'll quickly describe in this section.
==== Gb Implementation
OsmoSGSN implements the ETSI/3GPP specified Gb interface, including TS
08.16 (NS), TS 08.18 (BSSGP) and TS 08.64 (LLC) protocols. As transport
layers for NS, it supports NS/IP (NS encapsulated in UDP/IP), as well as
NS/FR/GRE/IP. The latter is provided in order to use a Router with
Ethernet and Frame Relay interface to convert to actual physical Frame
Relay medium, which is not directly supported by OsmoSGSN.
The actual Gb Implementation is part of the libosmogb library, which is
in turn part of the libosmocore software package. This allows the same
Gb implementation to be used from osmo-pcu, osmo-gbproxy as well as
OsmoSGSN.
==== GTP Implementation
OsmoSGSN uses the libgtp implementation originating from OsmoGGSN. It
supports both GTPv0 and GTPv1.
==== GMM Implementation
The GPRS Mobility Management implementation is quite simplistic at this
point. It supports the GPRS ATTACH and GPRS ROUTING AREA UPDATE
procedures, as well as GPRS ATTACH and GPRS DETACH.
==== LLC Implementation
The LLC (Logical Link Control) implementation of OsmoSGSN only supports
non-acknowledged mode, as this is the most common use case in real-world
GPRS networks.
It does support both TCP/IP header compression according to RFC1144 and
payload compression according to V.42bis
The LLC implementation does support LLC encryption with ciphers GEA3 and GEA4.
For encryption to work the auth policy needs to be set to remote and the SGSN
connected to an HLR containing the subscriber data including key material.
Other auth policys will not work with encryption.
==== Session Management Implementation
The session management procedures ACTIVATE PDP CONTEXT and DEACTIVATE
PDP CONTEXT are supported. However, no MODIFY PDP CONTEXT and no
Network-initiated PDP context activation is possible. This is again
covering the predominant use cases and configurations in GPRS real-world
networks while skipping the more esoteric features.
Multiple PDP contexts can be attached by a single MS.
Multiple GGSNs can be configured and routing to a GGSN can be configured based
on APN. Dynamic lookup of GGSNs though DNS-based APN resolving is also possible.
=== Limitations
At the time of writing, OsmoSGSN still has a number of limitations,
which are a result of the demand-driven Open Source development model.
If you require any of those features, please consider implementing and
contributing them, or contracting the existing OsmoSGSN developers for
performing that work.
Known Limitations include:
* No paging coordination between SGSN and MSC
* No SMS over Ps support

View File

@ -1,35 +0,0 @@
== Running OsmoSGSN
The OsmoSGSN executable (`osmo-sgsn`) offers the following command-line
options:
=== SYNOPSIS
*osmo-sgsn* [-h|-V] [-d 'DBGMASK'] [-D] [-c 'CONFIGFILE'] [-s] [-e 'LOGLEVEL']
=== OPTIONS
*-h, --help*::
Print a short help message about the supported options
*-V, --version*::
Print the compile-time version number of the OsmoSGSN program
*-d, --debug 'DBGMASK','DBGLEVELS'*::
Set the log subsystems and levels for logging to stderr. This
has mostly been superseded by VTY-based logging configuration,
see <<logging>> for further information.
*-D, --daemonize*::
Fork the process as a daemon into background.
*-c, --config-file 'CONFIGFILE'*::
Specify the file and path name of the configuration file to be
used. If none is specified, use `osmo_sgsn.cfg` in the current
working directory.
*-s, --disable-color*::
Disable colors for logging to stderr. This has mostly been
deprecated by VTY based logging configuration, see <<logging>>
for more information.
*-e, --log-level 'LOGLEVEL'*::
Set the global log level for logging to stderr. This has mostly
been deprecated by VTY based logging configuration, see
<<logging>> for more information.

View File

@ -25,7 +25,7 @@ include::./common/chapters/gb.adoc[]
include::./common/chapters/control_if.adoc[]
//include::{srcdir}/chapters/counters.adoc[]
include::{srcdir}/chapters/counters_generated.adoc[]
include::./common/chapters/port_numbers.adoc[]

View File

@ -6,7 +6,7 @@
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN"
"http://docbook.org/xml/5.0/dtd/docbook.dtd" [
<!ENTITY chapter-vty SYSTEM "./common/chapters/vty.xml" >
<!ENTITY sections-vty SYSTEM "generated/docbook_osmogbproxy-vty-reference.xml" >
<!ENTITY sections-vty SYSTEM "generated/docbook_vty.xml" >
]>
<book>

View File

@ -1,54 +0,0 @@
<revhistory>
<revision>
<revnumber>1</revnumber>
<date>January 13, 2013</date>
<authorinitials>HW</authorinitials>
<revremark>
Initial version.
</revremark>
</revision>
<revision>
<revnumber>2</revnumber>
<date>February 2016</date>
<authorinitials>HW</authorinitials>
<revremark>
Conversion to asciidoc, removal of sysmoBTS specific parts.
</revremark>
</revision>
</revhistory>
<authorgroup>
<author>
<firstname>Harald</firstname>
<surname>Welte</surname>
<email>hwelte@sysmocom.de</email>
<authorinitials>HW</authorinitials>
<affiliation>
<shortaffil>sysmocom</shortaffil>
<orgname>sysmocom - s.f.m.c. GmbH</orgname>
<jobtitle>Managing Director</jobtitle>
</affiliation>
</author>
</authorgroup>
<copyright>
<year>2013-2016</year>
<holder>sysmocom - s.f.m.c. GmbH</holder>
</copyright>
<legalnotice>
<para>
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License,
Version 1.3 or any later version published by the Free Software
Foundation; with no Invariant Sections, no Front-Cover Texts,
and no Back-Cover Texts. A copy of the license is included in
the section entitled "GNU Free Documentation License".
</para>
<para>
The Asciidoc source code of this manual can be found at
<ulink url="http://git.osmocom.org/osmo-gsm-manuals/">
http://git.osmocom.org/osmo-gsm-manuals/
</ulink>
</para>
</legalnotice>

View File

@ -1,40 +0,0 @@
:gfdl-enabled:
OsmoSGSN User Manual
====================
Harald Welte <hwelte@sysmocom.de>
include::./common/chapters/preface.adoc[]
include::{srcdir}/chapters/overview.adoc[]
include::{srcdir}/chapters/running.adoc[]
include::{srcdir}/chapters/control.adoc[]
include::./common/chapters/vty.adoc[]
include::./common/chapters/logging.adoc[]
include::{srcdir}/chapters/configuration.adoc[]
include::./common/chapters/cs7-config.adoc[]
include::./common/chapters/gb.adoc[]
include::./common/chapters/control_if.adoc[]
include::./common/chapters/oap.adoc[]
include::./common/chapters/gsup.adoc[]
include::{srcdir}/chapters/counters.adoc[]
include::./common/chapters/port_numbers.adoc[]
include::./common/chapters/bibliography.adoc[]
include::./common/chapters/glossary.adoc[]
include::./common/chapters/gfdl.adoc[]

View File

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
ex:ts=2:sw=42sts=2:et
-*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
-->
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN"
"http://docbook.org/xml/5.0/dtd/docbook.dtd" [
<!ENTITY chapter-vty SYSTEM "./common/chapters/vty.xml" >
<!ENTITY sections-vty SYSTEM "generated/docbook_vty.xml" >
]>
<book>
<info>
<revhistory>
<revision>
<revnumber>v1</revnumber>
<date>13th January 2013</date>
<authorinitials>hw</authorinitials>
<revremark>Initial</revremark>
</revision>
<revision>
<revnumber>v2</revnumber>
<date>5th March 2014</date>
<authorinitials>hf</authorinitials>
<revremark>Update to match osmo-bsc version 0.13.0-305</revremark>
</revision>
</revhistory>
<title>OsmoSGSN VTY Reference</title>
<copyright>
<year>2013-2014</year>
</copyright>
<legalnotice>
<para>This work is copyright by <orgname>sysmocom - s.f.m.c. GmbH</orgname>. All rights reserved.
</para>
</legalnotice>
</info>
<!-- Main chapters-->
&chapter-vty;
</book>

View File

@ -51,27 +51,24 @@ interact_vty() {
}
DIR="$(cd "$(dirname "$0")"; pwd)"
echo $DIR
cd "$DIR"
require_osmo_interact_vty
interact_vty \
"update_vty_reference" \
"vty/sgsn_vty_reference.xml" \
4245 \
osmo-sgsn -c "../examples/osmo-sgsn/osmo-sgsn.cfg"
interact_vty \
"update_vty_reference" \
"vty-osmogbproxy/gbproxy_vty_reference.xml" \
"vty/gbproxy_vty_reference.xml" \
4246 \
osmo-gbproxy -c "../examples/osmo-gbproxy/osmo-gbproxy.cfg"
sleep 5
interact_vty \
"update_counters" \
"chapters/counters_generated.adoc" \
4245 \
osmo-sgsn -c "../examples/osmo-sgsn/osmo-sgsn.cfg"
4246 \
osmo-gbproxy -c "../examples/osmo-gbproxy/osmo-gbproxy.cfg"
echo "Done with all"

View File

@ -7,9 +7,25 @@
<param name='help' doc='Description of the interactive help system' />
</params>
</command>
<command id='list'>
<command id='list [with-flags]'>
<params>
<param name='list' doc='Print command list' />
<param name='[with-flags]' doc='Also print the VTY attribute flags' />
</params>
</command>
<command id='show vty-attributes'>
<params>
<param name='show' doc='Show running system information' />
<param name='vty-attributes' doc='List of VTY attributes' />
</params>
</command>
<command id='show vty-attributes (application|library|global)'>
<params>
<param name='show' doc='Show running system information' />
<param name='vty-attributes' doc='List of VTY attributes' />
<param name='application' doc='Application specific attributes only' />
<param name='library' doc='Library specific attributes only' />
<param name='global' doc='Global attributes only' />
</params>
</command>
<command id='write terminal'>
@ -67,9 +83,10 @@
<param name='online-help' doc='Online help' />
</params>
</command>
<command id='enable'>
<command id='enable [expert-mode]'>
<params>
<param name='enable' doc='Turn on privileged mode command' />
<param name='[expert-mode]' doc='Enable the expert mode (show hidden commands)' />
</params>
</command>
<command id='terminal length &lt;0-512&gt;'>
@ -188,13 +205,13 @@
<param name='MASK' doc='List of logging categories to log, e.g. &apos;abc:mno:xyz&apos;. Available log categories depend on the specific application, refer to the &apos;logging level&apos; command. Optionally add individual log levels like &apos;abc,1:mno,3:xyz,5&apos;, where the level numbers are LOGL_DEBUG=1 LOGL_INFO=3 LOGL_NOTICE=5 LOGL_ERROR=7 LOGL_FATAL=8' />
</params>
</command>
<command id='logging level (|gprs|ns|bssgp|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp|lstats|lgsup|loap|lss7|lsccp|lsua|lm3ua|lmgcp|ljibuf|lrspro) (debug|info|notice|error|fatal)'>
<command id='logging level (|gprs|ns|obj|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp|lstats|lgsup|loap|lss7|lsccp|lsua|lm3ua|lmgcp|ljibuf|lrspro|lns|lbssgp) (debug|info|notice|error|fatal)'>
<params>
<param name='logging' doc='Configure logging' />
<param name='level' doc='Set the log level for a specified category' />
<param name='gprs' doc='GPRS Packet Service' />
<param name='ns' doc='GPRS Network Service (NS)' />
<param name='bssgp' doc='GPRS BSS Gateway Protocol (BSSGP)' />
<param name='obj' doc='GbProxy object allocation/release' />
<param name='lglobal' doc='Library-internal global log family' />
<param name='llapd' doc='LAPD in libosmogsm' />
<param name='linp' doc='A-bis Intput Subsystem' />
@ -214,6 +231,8 @@
<param name='lmgcp' doc='libosmo-mgcp Media Gateway Control Protocol' />
<param name='ljibuf' doc='libosmo-netif Jitter Buffer' />
<param name='lrspro' doc='Remote SIM protocol' />
<param name='lns' doc='GPRS NS layer' />
<param name='lbssgp' doc='GPRS BSSGP layer' />
<param name='debug' doc='Log debug messages and higher levels' />
<param name='info' doc='Log informational messages and higher levels' />
<param name='notice' doc='Log noticeable messages and higher levels' />
@ -253,12 +272,12 @@
<param name='force-all' doc='Release any globally forced log level set with &apos;logging level force-all &lt;level&gt;&apos;' />
</params>
</command>
<command id='logp (|gprs|ns|bssgp|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp|lstats|lgsup|loap|lss7|lsccp|lsua|lm3ua|lmgcp|ljibuf|lrspro) (debug|info|notice|error|fatal) .LOGMESSAGE'>
<command id='logp (|gprs|ns|obj|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp|lstats|lgsup|loap|lss7|lsccp|lsua|lm3ua|lmgcp|ljibuf|lrspro|lns|lbssgp) (debug|info|notice|error|fatal) .LOGMESSAGE'>
<params>
<param name='logp' doc='Print a message on all log outputs; useful for placing markers in test logs' />
<param name='gprs' doc='GPRS Packet Service' />
<param name='ns' doc='GPRS Network Service (NS)' />
<param name='bssgp' doc='GPRS BSS Gateway Protocol (BSSGP)' />
<param name='obj' doc='GbProxy object allocation/release' />
<param name='lglobal' doc='Library-internal global log family' />
<param name='llapd' doc='LAPD in libosmogsm' />
<param name='linp' doc='A-bis Intput Subsystem' />
@ -278,6 +297,8 @@
<param name='lmgcp' doc='libosmo-mgcp Media Gateway Control Protocol' />
<param name='ljibuf' doc='libosmo-netif Jitter Buffer' />
<param name='lrspro' doc='Remote SIM protocol' />
<param name='lns' doc='GPRS NS layer' />
<param name='lbssgp' doc='GPRS BSSGP layer' />
<param name='debug' doc='Log debug messages and higher levels' />
<param name='info' doc='Log informational messages and higher levels' />
<param name='notice' doc='Log noticeable messages and higher levels' />
@ -365,10 +386,49 @@
<param name='rate-counters' doc='Show all rate counters' />
</params>
</command>
<command id='show gbproxy [stats]'>
<command id='show fsm NAME'>
<params>
<param name='show' doc='Show running system information' />
<param name='fsm' doc='Show information about finite state machines' />
<param name='NAME' doc='Display information about a single named finite state machine' />
</params>
</command>
<command id='show fsm all'>
<params>
<param name='show' doc='Show running system information' />
<param name='fsm' doc='Show information about finite state machines' />
<param name='all' doc='Display a list of all registered finite state machines' />
</params>
</command>
<command id='show fsm-instances NAME'>
<params>
<param name='show' doc='Show running system information' />
<param name='fsm-instances' doc='Show information about finite state machine instances' />
<param name='NAME' doc='Display a list of all FSM instances of the named finite state machine' />
</params>
</command>
<command id='show fsm-instances all'>
<params>
<param name='show' doc='Show running system information' />
<param name='fsm-instances' doc='Show information about finite state machine instances' />
<param name='all' doc='Display a list of all FSM instances of all finite state machine' />
</params>
</command>
<command id='show gbproxy bvc (bss|sgsn) [stats]'>
<params>
<param name='show' doc='Show running system information' />
<param name='gbproxy' doc='Display information about the Gb proxy' />
<param name='bvc' doc='Show BSSGP Virtual Connections' />
<param name='bss' doc='Display BSS-side BVCs' />
<param name='sgsn' doc='Display SGSN-side BVCs' />
<param name='[stats]' doc='Show statistics' />
</params>
</command>
<command id='show gbproxy cell [stats]'>
<params>
<param name='show' doc='Show running system information' />
<param name='gbproxy' doc='Display information about the Gb proxy' />
<param name='cell' doc='Show GPRS Cell Information' />
<param name='[stats]' doc='Show statistics' />
</params>
</command>
@ -379,43 +439,41 @@
<param name='links' doc='Show logical links' />
</params>
</command>
<command id='show ns'>
<command id='show gbproxy tlli-cache'>
<params>
<param name='show' doc='Show running system information' />
<param name='ns' doc='Display information about the NS protocol' />
<param name='gbproxy' doc='Display information about the Gb proxy' />
<param name='tlli-cache' doc='Show TLLI cache entries' />
</params>
</command>
<command id='show ns stats'>
<command id='show gbproxy imsi-cache'>
<params>
<param name='show' doc='Show running system information' />
<param name='ns' doc='Display information about the NS protocol' />
<param name='stats' doc='Include statistics' />
<param name='gbproxy' doc='Display information about the Gb proxy' />
<param name='imsi-cache' doc='Show IMSI cache entries' />
</params>
</command>
<command id='show ns persistent'>
<command id='show nri all'>
<params>
<param name='show' doc='Show running system information' />
<param name='ns' doc='Display information about the NS protocol' />
<param name='persistent' doc='Show only persistent NS' />
<param name='nri' doc='Mapping of Network Resource Indicators to this SGSN, for SGSN pooling' />
<param name='all' doc='Show all SGSNs' />
</params>
</command>
<command id='show ns (nsei|nsvc) &lt;0-65535&gt; [stats]'>
<command id='show nri nsei &lt;0-65535&gt;'>
<params>
<param name='show' doc='Show running system information' />
<param name='ns' doc='Display information about the NS protocol' />
<param name='nsei' doc='Select one NSE by its NSE Identifier' />
<param name='nsvc' doc='Select one NSE by its NS-VC Identifier' />
<param name='&lt;0-65535&gt;' doc='The Identifier of selected type' />
<param name='[stats]' doc='Include Statistics' />
<param name='nri' doc='Mapping of Network Resource Indicators to this SGSN, for SGSN pooling' />
<param name='nsei' doc='Identify SGSN by NSEI' />
<param name='&lt;0-65535&gt;' doc='NSEI of the SGSN' />
</params>
</command>
<command id='logging filter nsvc (nsei|nsvci) &lt;0-65535&gt;'>
<command id='logging filter bvc bvci &lt;0-65535&gt;'>
<params>
<param name='logging' doc='Configure logging' />
<param name='filter' doc='Filter log messages' />
<param name='nsvc' doc='Filter based on NS Virtual Connection' />
<param name='nsei' doc='Identify NS-VC by NSEI' />
<param name='nsvci' doc='Identify NS-VC by NSVCI' />
<param name='bvc' doc='Filter based on BSSGP VC' />
<param name='bvci' doc='Identify BVC by BVCI' />
<param name='&lt;0-65535&gt;' doc='Numeric identifier' />
</params>
</command>
@ -587,13 +645,13 @@
<param name='MASK' doc='List of logging categories to log, e.g. &apos;abc:mno:xyz&apos;. Available log categories depend on the specific application, refer to the &apos;logging level&apos; command. Optionally add individual log levels like &apos;abc,1:mno,3:xyz,5&apos;, where the level numbers are LOGL_DEBUG=1 LOGL_INFO=3 LOGL_NOTICE=5 LOGL_ERROR=7 LOGL_FATAL=8' />
</params>
</command>
<command id='logging level (|gprs|ns|bssgp|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp|lstats|lgsup|loap|lss7|lsccp|lsua|lm3ua|lmgcp|ljibuf|lrspro) (debug|info|notice|error|fatal)'>
<command id='logging level (|gprs|ns|obj|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp|lstats|lgsup|loap|lss7|lsccp|lsua|lm3ua|lmgcp|ljibuf|lrspro|lns|lbssgp) (debug|info|notice|error|fatal)'>
<params>
<param name='logging' doc='Configure logging' />
<param name='level' doc='Set the log level for a specified category' />
<param name='gprs' doc='GPRS Packet Service' />
<param name='ns' doc='GPRS Network Service (NS)' />
<param name='bssgp' doc='GPRS BSS Gateway Protocol (BSSGP)' />
<param name='obj' doc='GbProxy object allocation/release' />
<param name='lglobal' doc='Library-internal global log family' />
<param name='llapd' doc='LAPD in libosmogsm' />
<param name='linp' doc='A-bis Intput Subsystem' />
@ -613,6 +671,8 @@
<param name='lmgcp' doc='libosmo-mgcp Media Gateway Control Protocol' />
<param name='ljibuf' doc='libosmo-netif Jitter Buffer' />
<param name='lrspro' doc='Remote SIM protocol' />
<param name='lns' doc='GPRS NS layer' />
<param name='lbssgp' doc='GPRS BSSGP layer' />
<param name='debug' doc='Log debug messages and higher levels' />
<param name='info' doc='Log informational messages and higher levels' />
<param name='notice' doc='Log noticeable messages and higher levels' />
@ -652,12 +712,12 @@
<param name='force-all' doc='Release any globally forced log level set with &apos;logging level force-all &lt;level&gt;&apos;' />
</params>
</command>
<command id='logp (|gprs|ns|bssgp|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp|lstats|lgsup|loap|lss7|lsccp|lsua|lm3ua|lmgcp|ljibuf|lrspro) (debug|info|notice|error|fatal) .LOGMESSAGE'>
<command id='logp (|gprs|ns|obj|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp|lstats|lgsup|loap|lss7|lsccp|lsua|lm3ua|lmgcp|ljibuf|lrspro|lns|lbssgp) (debug|info|notice|error|fatal) .LOGMESSAGE'>
<params>
<param name='logp' doc='Print a message on all log outputs; useful for placing markers in test logs' />
<param name='gprs' doc='GPRS Packet Service' />
<param name='ns' doc='GPRS Network Service (NS)' />
<param name='bssgp' doc='GPRS BSS Gateway Protocol (BSSGP)' />
<param name='obj' doc='GbProxy object allocation/release' />
<param name='lglobal' doc='Library-internal global log family' />
<param name='llapd' doc='LAPD in libosmogsm' />
<param name='linp' doc='A-bis Intput Subsystem' />
@ -677,6 +737,8 @@
<param name='lmgcp' doc='libosmo-mgcp Media Gateway Control Protocol' />
<param name='ljibuf' doc='libosmo-netif Jitter Buffer' />
<param name='lrspro' doc='Remote SIM protocol' />
<param name='lns' doc='GPRS NS layer' />
<param name='lbssgp' doc='GPRS BSSGP layer' />
<param name='debug' doc='Log debug messages and higher levels' />
<param name='info' doc='Log informational messages and higher levels' />
<param name='notice' doc='Log noticeable messages and higher levels' />
@ -764,10 +826,61 @@
<param name='rate-counters' doc='Show all rate counters' />
</params>
</command>
<command id='show gbproxy [stats]'>
<command id='stats report'>
<params>
<param name='stats' doc='Stats related commands' />
<param name='report' doc='Manurally trigger reporting of stats' />
</params>
</command>
<command id='stats reset'>
<params>
<param name='stats' doc='Stats related commands' />
<param name='reset' doc='Reset all stats' />
</params>
</command>
<command id='show fsm NAME'>
<params>
<param name='show' doc='Show running system information' />
<param name='fsm' doc='Show information about finite state machines' />
<param name='NAME' doc='Display information about a single named finite state machine' />
</params>
</command>
<command id='show fsm all'>
<params>
<param name='show' doc='Show running system information' />
<param name='fsm' doc='Show information about finite state machines' />
<param name='all' doc='Display a list of all registered finite state machines' />
</params>
</command>
<command id='show fsm-instances NAME'>
<params>
<param name='show' doc='Show running system information' />
<param name='fsm-instances' doc='Show information about finite state machine instances' />
<param name='NAME' doc='Display a list of all FSM instances of the named finite state machine' />
</params>
</command>
<command id='show fsm-instances all'>
<params>
<param name='show' doc='Show running system information' />
<param name='fsm-instances' doc='Show information about finite state machine instances' />
<param name='all' doc='Display a list of all FSM instances of all finite state machine' />
</params>
</command>
<command id='show gbproxy bvc (bss|sgsn) [stats]'>
<params>
<param name='show' doc='Show running system information' />
<param name='gbproxy' doc='Display information about the Gb proxy' />
<param name='bvc' doc='Show BSSGP Virtual Connections' />
<param name='bss' doc='Display BSS-side BVCs' />
<param name='sgsn' doc='Display SGSN-side BVCs' />
<param name='[stats]' doc='Show statistics' />
</params>
</command>
<command id='show gbproxy cell [stats]'>
<params>
<param name='show' doc='Show running system information' />
<param name='gbproxy' doc='Display information about the Gb proxy' />
<param name='cell' doc='Show GPRS Cell Information' />
<param name='[stats]' doc='Show statistics' />
</params>
</command>
@ -778,17 +891,55 @@
<param name='links' doc='Show logical links' />
</params>
</command>
<command id='show gbproxy tlli-cache'>
<params>
<param name='show' doc='Show running system information' />
<param name='gbproxy' doc='Display information about the Gb proxy' />
<param name='tlli-cache' doc='Show TLLI cache entries' />
</params>
</command>
<command id='show gbproxy imsi-cache'>
<params>
<param name='show' doc='Show running system information' />
<param name='gbproxy' doc='Display information about the Gb proxy' />
<param name='imsi-cache' doc='Show IMSI cache entries' />
</params>
</command>
<command id='show nri all'>
<params>
<param name='show' doc='Show running system information' />
<param name='nri' doc='Mapping of Network Resource Indicators to this SGSN, for SGSN pooling' />
<param name='all' doc='Show all SGSNs' />
</params>
</command>
<command id='show nri nsei &lt;0-65535&gt;'>
<params>
<param name='show' doc='Show running system information' />
<param name='nri' doc='Mapping of Network Resource Indicators to this SGSN, for SGSN pooling' />
<param name='nsei' doc='Identify SGSN by NSEI' />
<param name='&lt;0-65535&gt;' doc='NSEI of the SGSN' />
</params>
</command>
<command id='logging filter bvc bvci &lt;0-65535&gt;'>
<params>
<param name='logging' doc='Configure logging' />
<param name='filter' doc='Filter log messages' />
<param name='bvc' doc='Filter based on BSSGP VC' />
<param name='bvci' doc='Identify BVC by BVCI' />
<param name='&lt;0-65535&gt;' doc='Numeric identifier' />
</params>
</command>
<command id='delete-gbproxy-peer &lt;0-65534&gt; bvci &lt;2-65534&gt;'>
<params>
<param name='delete-gbproxy-peer' doc='Delete a GBProxy peer by NSEI and optionally BVCI' />
<param name='delete-gbproxy-peer' doc='Delete a GBProxy bvc by NSEI and optionally BVCI' />
<param name='&lt;0-65534&gt;' doc='NSEI number' />
<param name='bvci' doc='Only delete peer with a matching BVCI' />
<param name='bvci' doc='Only delete bvc with a matching BVCI' />
<param name='&lt;2-65534&gt;' doc='BVCI number' />
</params>
</command>
<command id='delete-gbproxy-peer &lt;0-65534&gt; (only-bvc|only-nsvc|all) [dry-run]'>
<params>
<param name='delete-gbproxy-peer' doc='Delete a GBProxy peer by NSEI and optionally BVCI' />
<param name='delete-gbproxy-peer' doc='Delete a GBProxy bvc by NSEI and optionally BVCI' />
<param name='&lt;0-65534&gt;' doc='NSEI number' />
<param name='only-bvc' doc='Only delete BSSGP connections (BVC)' />
<param name='only-nsvc' doc='Only delete dynamic NS connections (NS-VC)' />
@ -796,75 +947,6 @@
<param name='[dry-run]' doc='Show what would be deleted instead of actually deleting' />
</params>
</command>
<command id='delete-gbproxy-link &lt;0-65534&gt; (tlli|imsi|sgsn-nsei) IDENT'>
<params>
<param name='delete-gbproxy-link' doc='Delete a GBProxy logical link entry by NSEI and identification' />
<param name='&lt;0-65534&gt;' doc='NSEI number' />
<param name='tlli' doc='Delete entries with a matching TLLI (hex)' />
<param name='imsi' doc='Delete entries with a matching IMSI' />
<param name='sgsn-nsei' doc='Delete entries with a matching SGSN NSEI' />
<param name='IDENT' doc='Identification to match' />
</params>
</command>
<command id='delete-gbproxy-link &lt;0-65534&gt; (stale|de-registered)'>
<params>
<param name='delete-gbproxy-link' doc='Delete a GBProxy logical link entry by NSEI and identification' />
<param name='&lt;0-65534&gt;' doc='NSEI number' />
<param name='stale' doc='Delete stale entries' />
<param name='de-registered' doc='Delete de-registered entries' />
</params>
</command>
<command id='show ns'>
<params>
<param name='show' doc='Show running system information' />
<param name='ns' doc='Display information about the NS protocol' />
</params>
</command>
<command id='show ns stats'>
<params>
<param name='show' doc='Show running system information' />
<param name='ns' doc='Display information about the NS protocol' />
<param name='stats' doc='Include statistics' />
</params>
</command>
<command id='show ns persistent'>
<params>
<param name='show' doc='Show running system information' />
<param name='ns' doc='Display information about the NS protocol' />
<param name='persistent' doc='Show only persistent NS' />
</params>
</command>
<command id='show ns (nsei|nsvc) &lt;0-65535&gt; [stats]'>
<params>
<param name='show' doc='Show running system information' />
<param name='ns' doc='Display information about the NS protocol' />
<param name='nsei' doc='Select one NSE by its NSE Identifier' />
<param name='nsvc' doc='Select one NSE by its NS-VC Identifier' />
<param name='&lt;0-65535&gt;' doc='The Identifier of selected type' />
<param name='[stats]' doc='Include Statistics' />
</params>
</command>
<command id='logging filter nsvc (nsei|nsvci) &lt;0-65535&gt;'>
<params>
<param name='logging' doc='Configure logging' />
<param name='filter' doc='Filter log messages' />
<param name='nsvc' doc='Filter based on NS Virtual Connection' />
<param name='nsei' doc='Identify NS-VC by NSEI' />
<param name='nsvci' doc='Identify NS-VC by NSVCI' />
<param name='&lt;0-65535&gt;' doc='Numeric identifier' />
</params>
</command>
<command id='nsvc (nsei|nsvci) &lt;0-65535&gt; (block|unblock|reset)'>
<params>
<param name='nsvc' doc='Perform an operation on a NSVC' />
<param name='nsei' doc='NSEI to identify NS-VC Identifier (NS-VCI)' />
<param name='nsvci' doc='NS-VC Identifier (NS-VCI)' />
<param name='&lt;0-65535&gt;' doc='The NSEI' />
<param name='block' doc='Initiate BLOCK procedure' />
<param name='unblock' doc='Initiate UNBLOCK procedure' />
<param name='reset' doc='Initiate RESET procedure' />
</params>
</command>
</node>
<node id='config'>
<name>config</name>
@ -1052,6 +1134,20 @@
<param name='syslog' doc='Logging via syslog' />
</params>
</command>
<command id='log systemd-journal [raw]'>
<params>
<param name='log' doc='Configure logging sub-system' />
<param name='systemd-journal' doc='Logging to systemd-journal' />
<param name='[raw]' doc='Offload rendering of the meta information (location, category) to systemd' />
</params>
</command>
<command id='no log systemd-journal'>
<params>
<param name='no' doc='Negate a command or set its defaults' />
<param name='log' doc='Configure logging sub-system' />
<param name='systemd-journal' doc='Logging to systemd-journal' />
</params>
</command>
<command id='log gsmtap [HOSTNAME]'>
<params>
<param name='log' doc='Configure logging sub-system' />
@ -1089,11 +1185,11 @@
<param name='log' doc='Report to the logger' />
</params>
</command>
<command id='stats interval &lt;1-65535&gt;'>
<command id='stats interval &lt;0-65535&gt;'>
<params>
<param name='stats' doc='Configure stats sub-system' />
<param name='interval' doc='Set the reporting interval' />
<param name='&lt;1-65535&gt;' doc='Interval in seconds' />
<param name='&lt;0-65535&gt;' doc='Interval in seconds (0 disables the reporting interval)' />
</params>
</command>
<command id='gbproxy'>
@ -1101,9 +1197,11 @@
<param name='gbproxy' doc='Configure the Gb proxy' />
</params>
</command>
<command id='ns'>
<command id='sgsn nsei &lt;0-65534&gt;'>
<params>
<param name='ns' doc='Configure the GPRS Network Service' />
<param name='sgsn' doc='Configure the SGSN' />
<param name='nsei' doc='NSEI to be used in the connection with the SGSN' />
<param name='&lt;0-65534&gt;' doc='The NSEI' />
</params>
</command>
</node>
@ -1181,13 +1279,13 @@
<param name='[last]' doc='Log source file info at the end of a log line. If omitted, log source file info just before the log text.' />
</params>
</command>
<command id='logging level (|gprs|ns|bssgp|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp|lstats|lgsup|loap|lss7|lsccp|lsua|lm3ua|lmgcp|ljibuf|lrspro) (debug|info|notice|error|fatal)'>
<command id='logging level (|gprs|ns|obj|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp|lstats|lgsup|loap|lss7|lsccp|lsua|lm3ua|lmgcp|ljibuf|lrspro|lns|lbssgp) (debug|info|notice|error|fatal)'>
<params>
<param name='logging' doc='Configure logging' />
<param name='level' doc='Set the log level for a specified category' />
<param name='gprs' doc='GPRS Packet Service' />
<param name='ns' doc='GPRS Network Service (NS)' />
<param name='bssgp' doc='GPRS BSS Gateway Protocol (BSSGP)' />
<param name='obj' doc='GbProxy object allocation/release' />
<param name='lglobal' doc='Library-internal global log family' />
<param name='llapd' doc='LAPD in libosmogsm' />
<param name='linp' doc='A-bis Intput Subsystem' />
@ -1207,6 +1305,8 @@
<param name='lmgcp' doc='libosmo-mgcp Media Gateway Control Protocol' />
<param name='ljibuf' doc='libosmo-netif Jitter Buffer' />
<param name='lrspro' doc='Remote SIM protocol' />
<param name='lns' doc='GPRS NS layer' />
<param name='lbssgp' doc='GPRS BSSGP layer' />
<param name='debug' doc='Log debug messages and higher levels' />
<param name='info' doc='Log informational messages and higher levels' />
<param name='notice' doc='Log noticeable messages and higher levels' />
@ -1246,16 +1346,6 @@
<param name='force-all' doc='Release any globally forced log level set with &apos;logging level force-all &lt;level&gt;&apos;' />
</params>
</command>
<command id='logging filter nsvc (nsei|nsvci) &lt;0-65535&gt;'>
<params>
<param name='logging' doc='Configure logging' />
<param name='filter' doc='Filter log messages' />
<param name='nsvc' doc='Filter based on NS Virtual Connection' />
<param name='nsei' doc='Identify NS-VC by NSEI' />
<param name='nsvci' doc='Identify NS-VC by NSVCI' />
<param name='&lt;0-65535&gt;' doc='Numeric identifier' />
</params>
</command>
</node>
<node id='config-stats'>
<name>config-stats</name>
@ -1325,6 +1415,12 @@
<param name='disable' doc='Disable the reporter' />
</params>
</command>
<command id='flush-period &lt;0-65535&gt;'>
<params>
<param name='flush-period' doc='Configure stats sub-system' />
<param name='&lt;0-65535&gt;' doc='Send all stats even if they have not changed (i.e. force the flush)every N-th reporting interval. Set to 0 to disable regular flush (default).' />
</params>
</command>
</node>
<node id='config-line'>
<name>config-line</name>
@ -1347,280 +1443,95 @@
</params>
</command>
</node>
<node id='config-ns'>
<name>config-ns</name>
<command id='nse &lt;0-65535&gt; nsvci &lt;0-65534&gt;'>
<node id='config-gbproxy'>
<name>config-gbproxy</name>
<command id='pool bvc-flow-control-ratio &lt;1-100&gt;'>
<params>
<param name='nse' doc='Persistent NS Entity' />
<param name='&lt;0-65535&gt;' doc='NS Entity ID (NSEI)' />
<param name='nsvci' doc='NS Virtual Connection' />
<param name='&lt;0-65534&gt;' doc='NS Virtual Connection ID (NSVCI)' />
<param name='pool' doc='SGSN Pool related configuration' />
<param name='bvc-flow-control-ratio' doc='Ratio of BSS-advertised bucket size + leak rate advertised to each SGSN' />
<param name='&lt;1-100&gt;' doc='Ratio of BSS-advertised bucket size + leak rate advertised to each SGSN (Percent)' />
</params>
</command>
<command id='nse &lt;0-65535&gt; remote-ip A.B.C.D'>
<command id='nri bitlen &lt;0-15&gt;'>
<attributes scope='global'>
<attribute doc='This command applies immediately' flag='!' />
</attributes>
<params>
<param name='nse' doc='Persistent NS Entity' />
<param name='&lt;0-65535&gt;' doc='NS Entity ID (NSEI)' />
<param name='remote-ip' doc='Remote IP Address' />
<param name='A.B.C.D' doc='Remote IP Address' />
<param name='nri' doc='Mapping of Network Resource Indicators to this SGSN, for SGSN pooling' />
<param name='bitlen' doc='Set number of bits that an NRI has, to extract from TMSI identities (always starting just after the TMSI&apos;s most significant octet).' />
<param name='&lt;0-15&gt;' doc='bit count (0 disables) pooling)' />
</params>
</command>
<command id='nse &lt;0-65535&gt; remote-port &lt;0-65535&gt;'>
<command id='nri null add &lt;0-32767&gt; [&lt;0-32767&gt;]'>
<attributes scope='global'>
<attribute doc='This command applies immediately' flag='!' />
</attributes>
<params>
<param name='nse' doc='Persistent NS Entity' />
<param name='&lt;0-65535&gt;' doc='NS Entity ID (NSEI)' />
<param name='remote-port' doc='Remote UDP Port' />
<param name='&lt;0-65535&gt;' doc='Remote UDP Port Number' />
<param name='nri' doc='Mapping of Network Resource Indicators to this SGSN, for SGSN pooling' />
<param name='null' doc='Define NULL-NRI values that cause re-assignment of an MS to a different SGSN, for SGSN pooling.' />
<param name='add' doc='Add NULL-NRI value (or range)' />
<param name='&lt;0-32767&gt;' doc='First value of the NRI value range, should not surpass the configured &apos;nri bitlen&apos;.' />
<param name='[&lt;0-32767&gt;]' doc='Last value of the NRI value range, should not surpass the configured &apos;nri bitlen&apos; and be larger than the first value; if omitted, apply only the first value.' />
</params>
</command>
<command id='nse &lt;0-65535&gt; fr-dlci &lt;16-1007&gt;'>
<command id='nri null del &lt;0-32767&gt; [&lt;0-32767&gt;]'>
<attributes scope='global'>
<attribute doc='This command applies immediately' flag='!' />
</attributes>
<params>
<param name='nse' doc='Persistent NS Entity' />
<param name='&lt;0-65535&gt;' doc='NS Entity ID (NSEI)' />
<param name='fr-dlci' doc='Frame Relay DLCI' />
<param name='&lt;16-1007&gt;' doc='Frame Relay DLCI Number' />
</params>
</command>
<command id='nse &lt;0-65535&gt; encapsulation (udp|framerelay-gre)'>
<params>
<param name='nse' doc='Persistent NS Entity' />
<param name='&lt;0-65535&gt;' doc='NS Entity ID (NSEI)' />
<param name='encapsulation' doc='Encapsulation for NS' />
<param name='udp' doc='UDP/IP Encapsulation' />
<param name='framerelay-gre' doc='Frame-Relay/GRE/IP Encapsulation' />
</params>
</command>
<command id='nse &lt;0-65535&gt; remote-role (sgsn|bss)'>
<params>
<param name='nse' doc='Persistent NS Entity' />
<param name='&lt;0-65535&gt;' doc='NS Entity ID (NSEI)' />
<param name='remote-role' doc='Remote NSE Role' />
<param name='sgsn' doc='Remote Peer is SGSN' />
<param name='bss' doc='Remote Peer is BSS' />
</params>
</command>
<command id='no nse &lt;0-65535&gt;'>
<params>
<param name='no' doc='Delete Persistent NS Entity' />
<param name='nse' doc='Delete Persistent NS Entity' />
<param name='&lt;0-65535&gt;' doc='NS Entity ID (NSEI)' />
</params>
</command>
<command id='timer (tns-block|tns-block-retries|tns-reset|tns-reset-retries|tns-test|tns-alive|tns-alive-retries|tsns-prov) &lt;0-65535&gt;'>
<params>
<param name='timer' doc='Network Service Timer' />
<param name='tns-block' doc='(un)blocking Timer (Tns-block) timeout' />
<param name='tns-block-retries' doc='(un)blocking Timer (Tns-block) number of retries' />
<param name='tns-reset' doc='Reset Timer (Tns-reset) timeout' />
<param name='tns-reset-retries' doc='Reset Timer (Tns-reset) number of retries' />
<param name='tns-test' doc='Test Timer (Tns-test) timeout' />
<param name='tns-alive' doc='Alive Timer (Tns-alive) timeout' />
<param name='tns-alive-retries' doc='Alive Timer (Tns-alive) number of retries' />
<param name='tsns-prov' doc='SNS Provision Timer (Tsns-prov) timeout' />
<param name='&lt;0-65535&gt;' doc='Timer Value' />
</params>
</command>
<command id='encapsulation udp local-ip A.B.C.D'>
<params>
<param name='encapsulation' doc='NS encapsulation options' />
<param name='udp' doc='NS over UDP Encapsulation' />
<param name='local-ip' doc='Set the IP address on which we listen for NS/UDP' />
<param name='A.B.C.D' doc='IP Address' />
</params>
</command>
<command id='encapsulation udp local-port &lt;0-65535&gt;'>
<params>
<param name='encapsulation' doc='NS encapsulation options' />
<param name='udp' doc='NS over UDP Encapsulation' />
<param name='local-port' doc='Set the UDP port on which we listen for NS/UDP' />
<param name='&lt;0-65535&gt;' doc='UDP port number' />
</params>
</command>
<command id='encapsulation udp dscp &lt;0-255&gt;'>
<params>
<param name='encapsulation' doc='NS encapsulation options' />
<param name='udp' doc='NS over UDP Encapsulation' />
<param name='dscp' doc='Set DSCP/TOS on the UDP socket' />
<param name='&lt;0-255&gt;' doc='DSCP Value' />
</params>
</command>
<command id='encapsulation framerelay-gre enabled (1|0)'>
<params>
<param name='encapsulation' doc='NS encapsulation options' />
<param name='framerelay-gre' doc='NS over Frame Relay over GRE Encapsulation' />
<param name='enabled' doc='Enable or disable Frame Relay over GRE' />
<param name='1' doc='Enable' />
<param name='0' doc='Disable' />
</params>
</command>
<command id='encapsulation framerelay-gre local-ip A.B.C.D'>
<params>
<param name='encapsulation' doc='NS encapsulation options' />
<param name='framerelay-gre' doc='NS over Frame Relay over GRE Encapsulation' />
<param name='local-ip' doc='Set the IP address on which we listen for NS/FR/GRE' />
<param name='A.B.C.D' doc='IP Address' />
<param name='nri' doc='Mapping of Network Resource Indicators to this SGSN, for SGSN pooling' />
<param name='null' doc='Define NULL-NRI values that cause re-assignment of an MS to a different SGSN, for SGSN pooling.' />
<param name='del' doc='Remove NRI value or range from the NRI mapping for this MSC' />
<param name='&lt;0-32767&gt;' doc='First value of the NRI value range, should not surpass the configured &apos;nri bitlen&apos;.' />
<param name='[&lt;0-32767&gt;]' doc='Last value of the NRI value range, should not surpass the configured &apos;nri bitlen&apos; and be larger than the first value; if omitted, apply only the first value.' />
</params>
</command>
</node>
<node id='config-gbproxy'>
<name>config-gbproxy</name>
<command id='sgsn nsei &lt;0-65534&gt;'>
<node id='config-sgsn'>
<name>config-sgsn</name>
<command id='name NAME'>
<params>
<param name='sgsn' doc='SGSN information' />
<param name='nsei' doc='NSEI to be used in the connection with the SGSN' />
<param name='&lt;0-65534&gt;' doc='The NSEI' />
<param name='name' doc='Configure the SGSN' />
<param name='NAME' doc='Name the SGSN' />
</params>
</command>
<command id='core-mobile-country-code &lt;1-999&gt;'>
<command id='allow-attach'>
<attributes scope='global'>
<attribute doc='This command applies immediately' flag='!' />
</attributes>
<params>
<param name='core-mobile-country-code' doc='Use this country code for the core network' />
<param name='&lt;1-999&gt;' doc='MCC value' />
<param name='allow-attach' doc='Allow this SGSN to attach new subscribers (default).' />
</params>
</command>
<command id='core-mobile-network-code &lt;1-999&gt;'>
<params>
<param name='core-mobile-network-code' doc='Use this network code for the core network' />
<param name='&lt;1-999&gt;' doc='NCC value' />
</params>
</command>
<command id='match-imsi (patching|routing) .REGEXP'>
<params>
<param name='match-imsi' doc='Restrict actions to certain IMSIs' />
<param name='patching' doc='Patch MS related information elements on match only' />
<param name='routing' doc='Route to the secondary SGSN on match only' />
<param name='.REGEXP' doc='Regular expression for the IMSI match' />
</params>
</command>
<command id='core-access-point-name (APN|none)'>
<params>
<param name='core-access-point-name' doc='Use this access point name (APN) for the backbone' />
<param name='APN' doc='Replace APN by this string' />
<param name='none' doc='Remove APN' />
</params>
</command>
<command id='secondary-sgsn nsei &lt;0-65534&gt;'>
<params>
<param name='secondary-sgsn' doc='Route matching LLC connections to a second SGSN (Experimental)' />
<param name='nsei' doc='NSEI to be used in the connection with the SGSN' />
<param name='&lt;0-65534&gt;' doc='The NSEI' />
</params>
</command>
<command id='patch-ptmsi'>
<params>
<param name='patch-ptmsi' doc='Patch P-TMSI/TLLI' />
</params>
</command>
<command id='acquire-imsi'>
<params>
<param name='acquire-imsi' doc='Acquire the IMSI before establishing a LLC connection (Experimental)' />
</params>
</command>
<command id='link-list clean-stale-timer &lt;1-999999&gt;'>
<params>
<param name='link-list' doc='Set TLLI list parameters' />
<param name='clean-stale-timer' doc='Periodic timer to clean stale links' />
<param name='&lt;1-999999&gt;' doc='Frequency at which the periodic timer is fired (in seconds)' />
</params>
</command>
<command id='link-list max-age &lt;1-999999&gt;'>
<params>
<param name='link-list' doc='Set TLLI list parameters' />
<param name='max-age' doc='Limit maximum age' />
<param name='&lt;1-999999&gt;' doc='Maximum age in seconds' />
</params>
</command>
<command id='link-list max-length &lt;1-99999&gt;'>
<params>
<param name='link-list' doc='Set TLLI list parameters' />
<param name='max-length' doc='Limit list length' />
<param name='&lt;1-99999&gt;' doc='Maximum number of logical links in the list' />
</params>
</command>
<command id='link-list keep-mode (never|re-attach|identified|always)'>
<params>
<param name='link-list' doc='Set TLLI list parameters' />
<param name='keep-mode' doc='How to keep entries for detached logical links' />
<param name='never' doc='Discard entry immediately after detachment' />
<param name='re-attach' doc='Keep entry if a re-attachment has be requested' />
<param name='identified' doc='Keep entry if it associated with an IMSI' />
<param name='always' doc='Don&apos;t discard entries after detachment' />
</params>
</command>
<command id='link stored-msgs-max-length &lt;1-99999&gt;'>
<params>
<param name='link' doc='Set TLLI parameters' />
<param name='stored-msgs-max-length' doc='Limit list length' />
<param name='&lt;1-99999&gt;' doc='Maximum number of msgb stored in the logical link waiting to acquire its IMSI' />
</params>
</command>
<command id='no core-mobile-country-code'>
<command id='no allow-attach'>
<attributes scope='global'>
<attribute doc='This command applies immediately' flag='!' />
</attributes>
<params>
<param name='no' doc='Negate a command or set its defaults' />
<param name='core-mobile-country-code' doc='Use this country code for the core network' />
<param name='allow-attach' doc='Do not assign new subscribers to this MSC. Useful if an MSC in an MSC pool is configured to off-load subscribers. The MSC will still be operational for already IMSI-Attached subscribers, but the NAS node selection function will skip this MSC for new subscribers' />
</params>
</command>
<command id='no core-mobile-network-code'>
<command id='nri add &lt;0-32767&gt; [&lt;0-32767&gt;]'>
<attributes scope='global'>
<attribute doc='This command applies immediately' flag='!' />
</attributes>
<params>
<param name='no' doc='Negate a command or set its defaults' />
<param name='core-mobile-network-code' doc='Use this network code for the core network' />
<param name='nri' doc='Mapping of Network Resource Indicators to this SGSN, for SGSN pooling' />
<param name='add' doc='Add NRI value or range to the NRI mapping for this MSC' />
<param name='&lt;0-32767&gt;' doc='First value of the NRI value range, should not surpass the configured &apos;nri bitlen&apos;.' />
<param name='[&lt;0-32767&gt;]' doc='Last value of the NRI value range, should not surpass the configured &apos;nri bitlen&apos; and be larger than the first value; if omitted, apply only the first value.' />
</params>
</command>
<command id='no match-imsi'>
<command id='nri del &lt;0-32767&gt; [&lt;0-32767&gt;]'>
<attributes scope='global'>
<attribute doc='This command applies immediately' flag='!' />
</attributes>
<params>
<param name='no' doc='Negate a command or set its defaults' />
<param name='match-imsi' doc='Restrict actions to certain IMSIs' />
</params>
</command>
<command id='no core-access-point-name'>
<params>
<param name='no' doc='Negate a command or set its defaults' />
<param name='core-access-point-name' doc='Use this access point name (APN) for the backbone' />
</params>
</command>
<command id='no secondary-sgsn'>
<params>
<param name='no' doc='Negate a command or set its defaults' />
<param name='secondary-sgsn' doc='Route matching LLC connections to a second SGSN (Experimental)' />
</params>
</command>
<command id='no patch-ptmsi'>
<params>
<param name='no' doc='Negate a command or set its defaults' />
<param name='patch-ptmsi' doc='Patch P-TMSI/TLLI' />
</params>
</command>
<command id='no acquire-imsi'>
<params>
<param name='no' doc='Negate a command or set its defaults' />
<param name='acquire-imsi' doc='Acquire the IMSI before establishing a LLC connection (Experimental)' />
</params>
</command>
<command id='no link-list clean-stale-timer'>
<params>
<param name='no' doc='Negate a command or set its defaults' />
<param name='link-list' doc='Set TLLI list parameters' />
<param name='clean-stale-timer' doc='Periodic timer to clean stale links' />
</params>
</command>
<command id='no link-list max-age'>
<params>
<param name='no' doc='Negate a command or set its defaults' />
<param name='link-list' doc='Set TLLI list parameters' />
<param name='max-age' doc='Limit maximum age' />
</params>
</command>
<command id='no link-list max-length'>
<params>
<param name='no' doc='Negate a command or set its defaults' />
<param name='link-list' doc='Set TLLI list parameters' />
<param name='max-length' doc='Limit list length' />
</params>
</command>
<command id='no link stored-msgs-max-length'>
<params>
<param name='no' doc='Negate a command or set its defaults' />
<param name='link' doc='Set TLLI parameters' />
<param name='stored-msgs-max-length' doc='Limit list length' />
<param name='nri' doc='Mapping of Network Resource Indicators to this SGSN, for SGSN pooling' />
<param name='del' doc='Remove NRI value or range from the NRI mapping for this MSC' />
<param name='&lt;0-32767&gt;' doc='First value of the NRI value range, should not surpass the configured &apos;nri bitlen&apos;.' />
<param name='[&lt;0-32767&gt;]' doc='Last value of the NRI value range, should not surpass the configured &apos;nri bitlen&apos; and be larger than the first value; if omitted, apply only the first value.' />
</params>
</command>
</node>

View File

@ -1,6 +0,0 @@
<vtydoc xmlns='urn:osmocom:xml:libosmocore:vty:doc:1.0'>
<node id='config-sgsn'>
<description>Configure the remote GGSN, access-control and other
attributes of the SGSN</description>
</node>
</vtydoc>

File diff suppressed because it is too large Load Diff

View File

@ -17,17 +17,13 @@
app_configs = {
"gbproxy": ["doc/examples/osmo-gbproxy/osmo-gbproxy.cfg"],
"sgsn": ["doc/examples/osmo-sgsn/osmo-sgsn.cfg"],
"gtphub": ["doc/examples/osmo-gtphub/osmo-gtphub-1iface.cfg"]
}
apps = [(4246, "src/gbproxy/osmo-gbproxy", "OsmoGbProxy", "gbproxy"),
(4245, "src/sgsn/osmo-sgsn", "OsmoSGSN", "sgsn"),
(4253, "src/gtphub/osmo-gtphub", "OsmoGTPhub", "gtphub")
apps = [(4246, "src/osmo-gbproxy", "OsmoGbProxy", "gbproxy"),
]
vty_command = ["./src/sgsn/osmo-sgsn", "-c",
"doc/examples/osmo-sgsn/osmo-sgsn.cfg"]
vty_command = ["./src/osmo-gbproxy", "-c",
"doc/examples/osmo-gbproxy/osmo-gbproxy.cfg"]
vty_app = apps[1]
vty_app = apps[0]

View File

@ -131,12 +131,42 @@ static void print_help()
printf(" -T --timestamp Prefix every log line with a timestamp\n");
printf(" -V --version. Print the version.\n");
printf(" -e --log-level number. Set a global loglevel.\n");
printf("\nVTY reference generation:\n");
printf(" --vty-ref-mode MODE VTY reference generation mode (e.g. 'expert').\n");
printf(" --vty-ref-xml Generate the VTY reference XML output and exit.\n");
}
static void handle_long_options(const char *prog_name, const int long_option)
{
static int vty_ref_mode = VTY_REF_GEN_MODE_DEFAULT;
switch (long_option) {
case 1:
vty_ref_mode = get_string_value(vty_ref_gen_mode_names, optarg);
if (vty_ref_mode < 0) {
fprintf(stderr, "%s: Unknown VTY reference generation "
"mode '%s'\n", prog_name, optarg);
exit(2);
}
break;
case 2:
fprintf(stderr, "Generating the VTY reference in mode '%s' (%s)\n",
get_value_string(vty_ref_gen_mode_names, vty_ref_mode),
get_value_string(vty_ref_gen_mode_desc, vty_ref_mode));
vty_dump_xml_ref_mode(stdout, (enum vty_ref_gen_mode) vty_ref_mode);
exit(0);
default:
fprintf(stderr, "%s: error parsing cmdline options\n", prog_name);
exit(2);
}
}
static void handle_options(int argc, char **argv)
{
while (1) {
int option_index = 0, c;
static int long_option = 0;
static struct option long_options[] = {
{ "help", 0, 0, 'h' },
{ "debug", 1, 0, 'd' },
@ -146,6 +176,8 @@ static void handle_options(int argc, char **argv)
{ "timestamp", 0, 0, 'T' },
{ "version", 0, 0, 'V' },
{ "log-level", 1, 0, 'e' },
{ "vty-ref-mode", 1, &long_option, 1 },
{ "vty-ref-xml", 0, &long_option, 2 },
{ 0, 0, 0, 0 }
};
@ -159,6 +191,9 @@ static void handle_options(int argc, char **argv)
print_usage();
print_help();
exit(0);
case 0:
handle_long_options(argv[0], long_option);
break;
case 's':
log_set_use_color(osmo_stderr_target, 0);
break;

View File

@ -56,11 +56,11 @@ vty-python-test: $(BUILT_SOURCES)
vty-transcript-test:
osmo_verify_transcript_vty.py -v \
-n OsmoGbProxy -p 4246 \
-r "$(top_builddir)/src/gbproxy/osmo-gbproxy -c $(top_srcdir)/doc/examples/osmo-gbproxy/osmo-gbproxy.cfg" \
-r "$(top_builddir)/src/osmo-gbproxy -c $(top_srcdir)/doc/examples/osmo-gbproxy/osmo-gbproxy.cfg" \
$(U) $${T:-$(srcdir)/osmo-gbproxy_test-nodes.vty}
osmo_verify_transcript_vty.py -v \
-n OsmoGbProxy -p 4246 \
-r "$(top_builddir)/src/gbproxy/osmo-gbproxy -c $(top_srcdir)/doc/examples/osmo-gbproxy/osmo-gbproxy-pool.cfg" \
-r "$(top_builddir)/src/osmo-gbproxy -c $(top_srcdir)/doc/examples/osmo-gbproxy/osmo-gbproxy-pool.cfg" \
$(U) $${T:-$(srcdir)/osmo-gbproxy-pool_test-nodes.vty}
rm -f $(builddir)/sms.db $(builddir)/gsn_restart

View File

@ -71,11 +71,11 @@ class TestVTYBase(unittest.TestCase):
class TestVTYGbproxy(TestVTYBase):
def vty_command(self):
return ["./src/gbproxy/osmo-gbproxy", "-c",
return ["./src/osmo-gbproxy", "-c",
"doc/examples/osmo-gbproxy/osmo-gbproxy.cfg"]
def vty_app(self):
return (4246, "./src/gbproxy/osmo-gbproxy", "OsmoGbProxy", "gbproxy")
return (4246, "./src/osmo-gbproxy", "OsmoGbProxy", "gbproxy")
def testVtyTree(self):
self.vty.enable()
@ -114,180 +114,11 @@ class TestVTYGbproxy(TestVTYBase):
self.assertTrue(res.find('Deleted 0 BVC') >= 0)
self.assertTrue(res.find('NSEI not found') >= 0)
class TestVTYSGSN(TestVTYBase):
def vty_command(self):
return ["./src/sgsn/osmo-sgsn", "-c",
"doc/examples/osmo-sgsn/osmo-sgsn-accept-all.cfg"]
def vty_app(self):
return (4245, "./src/sgsn/osmo-sgsn", "OsmoSGSN", "sgsn")
def testVtyTree(self):
self.vty.enable()
self.assertTrue(self.vty.verify('configure terminal', ['']))
self.assertEqual(self.vty.node(), 'config')
self.checkForEndAndExit()
self.assertTrue(self.vty.verify('ns', ['']))
self.assertEqual(self.vty.node(), 'config-ns')
self.checkForEndAndExit()
self.assertTrue(self.vty.verify('exit', ['']))
self.assertEqual(self.vty.node(), 'config')
self.assertTrue(self.vty.verify('sgsn', ['']))
self.assertEqual(self.vty.node(), 'config-sgsn')
self.checkForEndAndExit()
self.assertTrue(self.vty.verify('exit', ['']))
self.assertEqual(self.vty.node(), 'config')
def testVtyShow(self):
res = self.vty.command("show ns")
self.assertTrue(res.find('0 NS-VC:') >= 0)
self.assertTrue(self.vty.verify('show bssgp', ['']))
self.assertTrue(self.vty.verify('show bssgp stats', ['']))
self.assertTrue(self.vty.verify('show bssgp nsei 123', ['']))
self.assertTrue(self.vty.verify('show bssgp nsei 123 stats', ['']))
self.assertTrue(self.vty.verify('show sgsn', [' GSN: signalling 127.0.0.1, user traffic 127.0.0.1']))
self.assertTrue(self.vty.verify('show mm-context all', ['']))
self.assertTrue(self.vty.verify('show mm-context imsi 000001234567', ['No MM context for IMSI 000001234567']))
self.assertTrue(self.vty.verify('show pdp-context all', ['']))
res = self.vty.command("show sndcp")
self.assertTrue(res.find('State of SNDCP Entities') >= 0)
res = self.vty.command("show llc")
self.assertTrue(res.find('State of LLC Entities') >= 0)
def testVtyAuth(self):
self.vty.enable()
self.assertTrue(self.vty.verify('configure terminal', ['']))
self.assertEqual(self.vty.node(), 'config')
self.assertTrue(self.vty.verify('sgsn', ['']))
self.assertEqual(self.vty.node(), 'config-sgsn')
self.assertTrue(self.vty.verify('auth-policy accept-all', ['']))
res = self.vty.command("show running-config")
self.assertTrue(res.find('auth-policy accept-all') > 0)
self.assertTrue(self.vty.verify('auth-policy acl-only', ['']))
res = self.vty.command("show running-config")
self.assertTrue(res.find('auth-policy acl-only') > 0)
self.assertTrue(self.vty.verify('auth-policy closed', ['']))
res = self.vty.command("show running-config")
self.assertTrue(res.find('auth-policy closed') > 0)
self.assertTrue(self.vty.verify('gsup remote-ip 127.0.0.4', ['']))
self.assertTrue(self.vty.verify('gsup remote-port 2222', ['']))
self.assertTrue(self.vty.verify('auth-policy remote', ['']))
res = self.vty.command("show running-config")
self.assertTrue(res.find('auth-policy remote') > 0)
def testVtySubscriber(self):
self.vty.enable()
res = self.vty.command('show subscriber cache')
self.assertTrue(res.find('1234567890') < 0)
self.assertTrue(self.vty.verify('update-subscriber imsi 1234567890 create', ['']))
res = self.vty.command('show subscriber cache')
self.assertTrue(res.find('1234567890') >= 0)
self.assertTrue(res.find('Authorized: 0') >= 0)
self.assertTrue(self.vty.verify('update-subscriber imsi 1234567890 update-location-result ok', ['']))
res = self.vty.command('show subscriber cache')
self.assertTrue(res.find('1234567890') >= 0)
self.assertTrue(res.find('Authorized: 1') >= 0)
self.assertTrue(self.vty.verify('update-subscriber imsi 1234567890 cancel update-procedure', ['']))
res = self.vty.command('show subscriber cache')
self.assertTrue(res.find('1234567890') >= 0)
self.assertTrue(self.vty.verify('update-subscriber imsi 1234567890 destroy', ['']))
res = self.vty.command('show subscriber cache')
self.assertTrue(res.find('1234567890') < 0)
def testVtyGgsn(self):
self.vty.enable()
self.assertTrue(self.vty.verify('configure terminal', ['']))
self.assertEqual(self.vty.node(), 'config')
self.assertTrue(self.vty.verify('sgsn', ['']))
self.assertEqual(self.vty.node(), 'config-sgsn')
self.assertTrue(self.vty.verify('ggsn 0 remote-ip 127.99.99.99', ['']))
self.assertTrue(self.vty.verify('ggsn 0 gtp-version 1', ['']))
self.assertTrue(self.vty.verify('apn * ggsn 0', ['']))
self.assertTrue(self.vty.verify('apn apn1.test ggsn 0', ['']))
self.assertTrue(self.vty.verify('apn apn1.test ggsn 1', ['% a GGSN with id 1 has not been defined']))
self.assertTrue(self.vty.verify('apn apn1.test imsi-prefix 123456 ggsn 0', ['']))
self.assertTrue(self.vty.verify('apn apn2.test imsi-prefix 123456 ggsn 0', ['']))
res = self.vty.command("show running-config")
self.assertTrue(res.find('ggsn 0 remote-ip 127.99.99.99') >= 0)
self.assertTrue(res.find('ggsn 0 gtp-version 1') >= 0)
self.assertTrue(res.find('apn * ggsn 0') >= 0)
self.assertTrue(res.find('apn apn1.test ggsn 0') >= 0)
self.assertTrue(res.find('apn apn1.test imsi-prefix 123456 ggsn 0') >= 0)
self.assertTrue(res.find('apn apn2.test imsi-prefix 123456 ggsn 0') >= 0)
def testVtyEasyAPN(self):
self.vty.enable()
self.assertTrue(self.vty.verify('configure terminal', ['']))
self.assertEqual(self.vty.node(), 'config')
self.assertTrue(self.vty.verify('sgsn', ['']))
self.assertEqual(self.vty.node(), 'config-sgsn')
res = self.vty.command("show running-config")
self.assertEqual(res.find("apn internet"), -1)
self.assertTrue(self.vty.verify("access-point-name internet.apn", ['']))
res = self.vty.command("show running-config")
self.assertTrue(res.find("apn internet.apn ggsn 0") >= 0)
self.assertTrue(self.vty.verify("no access-point-name internet.apn", ['']))
res = self.vty.command("show running-config")
self.assertEqual(res.find("apn internet"), -1)
def testVtyCDR(self):
self.vty.enable()
self.assertTrue(self.vty.verify('configure terminal', ['']))
self.assertEqual(self.vty.node(), 'config')
self.assertTrue(self.vty.verify('sgsn', ['']))
self.assertEqual(self.vty.node(), 'config-sgsn')
res = self.vty.command("show running-config")
self.assertTrue(res.find("no cdr filename") > 0)
self.vty.command("cdr filename bla.cdr")
res = self.vty.command("show running-config")
self.assertEqual(res.find("no cdr filename"), -1)
self.assertTrue(res.find(" cdr filename bla.cdr") > 0)
self.vty.command("no cdr filename")
res = self.vty.command("show running-config")
self.assertTrue(res.find("no cdr filename") > 0)
self.assertEqual(res.find(" cdr filename bla.cdr"), -1)
res = self.vty.command("show running-config")
self.assertTrue(res.find(" cdr interval 600") > 0)
self.vty.command("cdr interval 900")
res = self.vty.command("show running-config")
self.assertTrue(res.find(" cdr interval 900") > 0)
self.assertEqual(res.find(" cdr interval 600"), -1)
def testVtyTimers(self):
self.vty.enable()
self.assertTrue(self.vty.verify('configure terminal', ['']))
self.assertEqual(self.vty.node(), 'config')
self.assertTrue(self.vty.verify('sgsn', ['']))
self.assertEqual(self.vty.node(), 'config-sgsn')
for t in [3312, 3322, 3350, 3360, 3370, 3313, 3314, 3316, 3385, 3395, 3397]:
self.assertTrue(self.vty.verify('timer t%d 10' % t, ['']))
def add_gbproxy_test(suite, workdir):
if not os.path.isfile(os.path.join(workdir, "src/gbproxy/osmo-gbproxy")):
print("Skipping the Gb-Proxy test")
return
assert os.path.isfile(os.path.join(workdir, "src/osmo-gbproxy"))
test = unittest.TestLoader().loadTestsFromTestCase(TestVTYGbproxy)
suite.addTest(test)
def add_sgsn_test(suite, workdir):
if not os.path.isfile(os.path.join(workdir, "src/sgsn/osmo-sgsn")):
print("Skipping the SGSN test")
return
test = unittest.TestLoader().loadTestsFromTestCase(TestVTYSGSN)
suite.addTest(test)
if __name__ == '__main__':
import argparse
import sys
@ -319,7 +150,6 @@ if __name__ == '__main__':
print("Running tests for specific VTY commands")
suite = unittest.TestSuite()
add_gbproxy_test(suite, workdir)
add_sgsn_test(suite, workdir)
if args.test_name:
osmoutil.pick_tests(suite, *args.test_name)