Commit Graph

3279 Commits

Author SHA1 Message Date
Oliver Smith a299139129 Makefile.am: EXTRA_DIST: debian, contrib/*.spec.in
Change-Id: I13f28041adcc1530e5125775c4533d8ac0a88169
2020-05-22 13:26:19 +02:00
Oliver Smith 6370f5dd6f contrib: integrate RPM spec
Remove OpenSUSE bug report link, set version to @VERSION@, make it build with
CentOS 8 etc.

Related: OS#4550
Change-Id: I59255889740195ec811a947a7130ae0918ea4b4d
2020-05-20 10:29:05 +00:00
Oliver Smith 12f93be607 gsmtap_makemsg_ex: NULL for unknown chan_type
Related: osmo-bts Ic22ab71e520ab44429a93724250d349d16250801
Change-Id: Ib4147a33a75c3cf425c30da8b0678c7fba8a371d
2020-05-20 06:05:38 +00:00
Neels Hofmeyr cf70aa0c40 enable vty xml dumping to stdout
Allow dumping the VTY XML reference (for generating manuals) to a normal FILE*
stream instead of a vty output buffer.

We currently generate the VTY reference by starting the client program,
connecting to the VTY telnet and dumping the reference. That is weirdly
convoluted, especially since there has to be a valid config file that
successfully starts up a minimal set of external links before the reference can
be generated. IMO we should have dumped the XML reference to stdout from the
start, and never to a VTY session.

With this patch, it is trivial to generate the XML VTY reference by a
commandline switch. The client program will set up the entire VTY, and
immediately after parsing the cmdline options but before parsing a config file,
just dumps the reference and doesn't even start establishing local ports. That
would allow generating the XML reference on the fly during the build process of
the manuals, without the need of a docker container or somesuch.

A first implementation of such a commandline switch is `osmo-bsc -X`, added in
I316efedb2c1652791434ecf14a1e261367cd2fb7

This patch jumps through a bit of a hoop to still allow dumping to a VTY buffer
without code dup, to still allow dumping the XML reference through telnet VTY,
until all our programs have implemented an -X switch (TM).

Change-Id: Ic74bbdb6dc5ea05f03c791cc70184861e39cd492
2020-05-18 13:55:08 +02:00
Alexander Chemeris 22630e6827 gsm0808: Implement helper functions for CONFUSION BSSMAP message decoding.
Also add a test for an actual CONFUSION message parsing.

Change-Id: If8afd2d096fb66c6c2f255a08fc1129de3d09cec
2020-05-17 07:32:32 +00:00
Oliver Smith bfeeb1c86c contrib: import RPM spec
Copy the RPM spec file from:
https://build.opensuse.org/project/show/home:mnhauke:osmocom:nightly

Related: OS#4550
Change-Id: Ib329b719fbeaf4618d299fa20514c76fe704cb48
2020-05-16 19:56:54 +00:00
Harald Welte 830b8dbb14 libosmogsm: add Doxygen docs for gsm0502_hop_seq_gen()
This is basically I16d5190b3cdc997c5609b52d41203f10264b017c.

Change-Id: Ife660f00d7a6d3b874ab2e59e34dca2109fa82d8
Related: OS#4546
2020-05-15 17:56:41 +00:00
Sylvain Munaut 63bee45411 libosmogsm: import hopping sequence generation code
This implementation is taken from OsmocomBB, in particular from:

  target/firmware/layer1/rfch.c

Change return type to uint16_t, because neither ARFCN, nor MAI
can be negative. Add prefix 'gsm0502_' to the function's name.

Change-Id: I8aba1578cc9d1bd89d4f5d33a6e8fedc8bea789a
Related: OS#4546
2020-05-15 17:56:41 +00:00
Neels Hofmeyr 534f0f402b cosmetic: apply changes to match struct_endianess.py output
gsm48_pag_resp and gsm48_service_request: omit comments in big endian part.
dtap_header: better segment the substruct.
gsm23041_msg_param_gsm: match up whitespace / comments.

Rationale: the script is a good way to avoid bugs from manually composing the
big endian parts (for example, it detected the missing endian.h include, fixed
in I593cc5e8272469b570559206bb02b6e79797340b). However, it becomes cumbersome
if it creates numerous edits in the source tree, which cause more time spent
for whoever wanted to rather save time with it. So let's keep the code tree
matching that struct's output.

Change-Id: I7432f5337d6589262c31f5186dfd0ac32221c467
2020-05-15 16:13:54 +00:00
Neels Hofmeyr bd5869706d struct_endianess.py: also recognise unnamed substructs
Before this, the new dtap_header substruct construct would end up being split
up in a weird way:

	struct dtap_header {
		uint8_t type;
		union {
			uint8_t link_id;  /* Backward compatibility */
			struct {
				uint8_t dlci_cc:2,
				dlci_spare:3,
				dlci_sapi:3; /* enum gsm0406_dlc_sapi */
			};
		};
		uint8_t length;
	} __attribute__((packed));

would previously become

	struct dtap_header {
		uint8_t type;
		union {
			uint8_t link_id;  /* Backward compatibility */
			struct {
	#if OSMO_IS_LITTLE_ENDIAN
				uint8_t dlci_cc:2,
				dlci_spare:3,
				dlci_sapi:3; /* enum gsm0406_dlc_sapi */
			};
		};
		uint8_t length;
	#elif OSMO_IS_BIG_ENDIAN
	/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */
				uint8_t dlci_sapi:3, dlci_spare:3, dlci_cc:2;
			};
		};
		uint8_t length;
	#endif
	} __attribute__((packed));

now becomes

	struct dtap_header {
		uint8_t type;
		union {
			uint8_t link_id;  /* Backward compatibility */
			struct {
	#if OSMO_IS_LITTLE_ENDIAN
				uint8_t dlci_cc:2,
				dlci_spare:3,
				dlci_sapi:3; /* enum gsm0406_dlc_sapi */
	#elif OSMO_IS_BIG_ENDIAN
	/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */
				uint8_t dlci_sapi:3, dlci_spare:3, dlci_cc:2;
	#endif
			};
		};
		uint8_t length;
	} __attribute__((packed));

Change-Id: I3c4986ebd1e41aad8b279d6132b7e3b2539d7dc5
2020-05-15 16:13:54 +00:00
Neels Hofmeyr 12f109b299 add missing endian.h in gsm_23_041.h
Change-Id: I593cc5e8272469b570559206bb02b6e79797340b
2020-05-15 16:10:09 +00:00
Harald Welte 5785a4a8fc codec: Add functions for AMR s->d bits and d->s bits
These functions implement re-ordering of bits as per TS 06.90 / 26.101
based on the already existing tables we've had in libosmocoding.

Change-Id: Ia4ac2aea2e96f9185f082a07ca64dfc5276efb46
2020-05-14 14:51:22 +02:00
Vadim Yanitskiy ddb7586e9d libosmogsm: cosmetic: add spaces before and after PRIu32
As was pointed out by pespin, some compilers may not like the
lack of spaces around the format macro constants.

Change-Id: I4b6517989030c8e3f6a1bf16c43044e4e9137f40
2020-05-14 09:12:46 +00:00
Alexander Chemeris 2ac8f91ea6 gsm0808_utils: Add gsm0808_get_cipher_reject_cause() back with a deprecation notice.
In Change-Id Idf2b99e9ef014eba26e3d4f0f38c2714d3a0520a we accidentially removed this
symbol, let's re-introduce it.

Change-Id: I9fbcbcc6619ef0c63d3682fc86adc80045baab02
2020-05-14 09:02:39 +00:00
Alexander Chemeris ecfb0d68d7 gsm0808_utils: Fix gsm0808_cause_class() function
Cause class is in bits 5-7 of the cause value.
For the cause value 0x52 old version returned 0xa instead of
a correct 0x5.

See section 3.2.2.5 Cause of TS 08.08 for the details.

Change-Id: I46646740c5daaafe20123e709f26dd1d2c1b6f8d
2020-05-13 00:46:00 +03:00
Alexander Chemeris fdfe25b105 gsm0808: Make a function to extract Cause IE publicly available.
Function gsm0808_get_cipher_reject_cause() was previously available
in private gsm0808_utils.h. In practice, the exact same code is useful
to extract Cause IE value from any of the many other BSSMAP messages
which use it.

So let's rename it to gsm0808_get_cause() and make it avilable
to everyone to use.

Change-Id: Idf2b99e9ef014eba26e3d4f0f38c2714d3a0520a
2020-05-13 00:46:00 +03:00
Philipp Maier 3c0a87ca4b gsm0505_amr_dtx: add missing value strings
The value string array that explain the type of the AMR DTX / SID
frames is incomplete, lets add the missing strings.

Change-Id: If9e80b4bd8bdc31323c7c276155b2538e20a99be
Related: OS#2978
2020-05-12 18:13:30 +00:00
Philipp Maier dc02c066fd logging: do not allow multiple calls of log_init()
calling log_init() multiple times would lead into memory leaks. The
function should only be called once on startup of the process. Lets make
sure that it does not get called multiple times by accident.

Change-Id: Ibb300e4c9b04767581116ab530b2e6a9a195db08
2020-05-12 17:51:25 +02:00
Philipp Maier dcad1c55ba logging: use LOGL_NOTICE when no loglevel is set
when the API user of libosmocores logging infrastructure does not set a
pre-defined logging level in struct log_info_cat, the result would be an
invalid logging level. In order to avoid problems with that and to spare
all the additional .loglevel = LOGL_NOTICE (API users are advised to use
LOGL_NOTICE as default) lines in the user code lets check the logging
level on startup and set LOGL_NOTICE if there is no logging level set.

Change-Id: Ib9e180261505062505fc4605a98023910f76cde6
Related: OS#2577
2020-05-12 17:47:27 +02:00
Neels Hofmeyr 555bb1b276 gsm_04_08.h: fix big endian structs
Affected:
 - struct gsm48_range_1024
 - struct gsm48_range_512
 - struct gsm48_range_256
 - struct gsm48_range_128

In commit [1], the automatic little-to-big-endian compatibility by
struct_endianness.py introduced doubled little/big endian struct listings by
accident, resulting in a wrong big endian structure (due to double reversal in
the original big endian part). Remove the old conditionals around the new
automatic ones to fix the structs for big endian.

[1] Ia0b99d76932aeb03e93bd0c62d3bf025dec5f9d2

Change-Id: Iaccdd4a204841209f5eb50f336b30962ff00da0b
2020-05-12 11:51:42 +00:00
Philipp Maier 6a90c723fb exec: osmo_system_nowait2: initalize *pw pointer with NULL
The pointer *pw is only populated when the the parameter *user is given,
otherwise it remains uninitalized while it is used later when the
previleges are being dropped.

Change-Id: Idec7041e9ea17a252aefbf6fa90091ae17fd4fcd
Fixes: CID#209895
2020-05-12 11:03:51 +00:00
Harald Welte 3edd70c1f1 usb: Add osmo_libusb_find_open_claim() all-in-one API
This function offers the highest level of API among all libosmousb
helper functions. It is intended as a one-stop shop for everything
related to grabbing an interface.

Change-Id: I748ded6cc7b73a73625588bd7a34a017a905b6bf
2020-05-12 05:43:21 +00:00
Harald Welte 508fad90e4 README.md: We don't build libosmotrau. The latter is in libosmo-abis.git
Change-Id: Ida773c9611075cc02f017eb5606f94a65cac8533
2020-05-12 05:43:21 +00:00
Harald Welte ecc5233906 README.md: fix typo (coore -> core)
Change-Id: Ib2bc61cfd9f24d2093b7e101e8987864a7279fb6
2020-05-12 05:43:21 +00:00
Alexander Chemeris a5b1b86a33 gsm0808: Fix encoding of the SAPI_N_REJECT BSSMAP message.
See TS 08.08 section 3.2.1.34 SAPI "n" REJECT:
1) DLCI is a TV element, not V.
2) Cause is a TLV element and we have a special function to encode it.

Change-Id: I033afe556c06427d06ac55c4f78854a45e41aae6
2020-05-12 01:14:03 +03:00
Pau Espin d05def0885 Drop old BSC references in fd check configure option
Change-Id: I053c2bfe461aa82085e7dac1cdcc95dd77219949
2020-05-11 17:24:16 +00:00
Kirill Zakharenko 0ae0fa1623 statsd: fix rendering for groups with idx==0
while skipping `0` might be visually pleasant for non-repeating groups, e.g.:
    bsc.assignment.completed

it makes metrics parsing very awkward for repeating groups, e.g.:
    bts.chreq.total
    bts.1.chreq.total
    bts.2.chreq.total

and since nobody's going to look at raw statsd stream anyway,
we can live with some extra zeroes

Change-Id: Id294202fbcebe0b6b155c7f267b2da73af20adf4
2020-05-10 00:32:44 +03:00
Alexander Chemeris f5bdef4efd stats: Change timer to timerfd to make it a true interval timer.
Previously the interval between stats flushes would slowly increase
which would lead to reporting time jitter and confuse a timescale
database.

Change-Id: I23d8b5157ef8a9833ba16a81d9b28a126f303c30
2020-05-09 16:25:48 +03:00
Alexander Chemeris dfebf405e5 stats: Support regular stats flush
Reliable monitoring requires regular flush of all stat values, even
if they have not changed. Otherwise (1) the monitoring app has to
maintain state and (2) can go out of sync if it's restarted while
the app is still running.

Change-Id: I04f1e7bdf0d6f20e4f15571e94191de61c47ddad
2020-05-09 08:08:53 +00:00
Alexander Chemeris f203ed3add stats: Fix documentation for osmo_stats_set_interval()
Change-Id: Ie07a03251d6fe9d40b62815feb51ec8af9ed7c95
2020-05-09 08:08:53 +00:00
Alexander Chemeris 161adeec84 stats: Move cfg_stats_interval_cmd() function.
cfg_stats_interval_cmd() function was (probably mistakenly)
inserted between cfg_stats_reporter_statsd_cmd() and
cfg_no_stats_reporter_statsd_cmd() function which makes no sense.
Move it below the cfg_no_stats_reporter_log_cmd() to follow the order
of the osmo_stats_vty_add_cmds() function calls.

Change-Id: I1ecec7025e95cf5ffc21ae3b1c75cf6da8c58de2
2020-05-09 08:08:53 +00:00
Alexander Chemeris e8ec214a77 select: Fix typo in a comment Osmcoom->Osmocom
Change-Id: I6fb4d20d149abc724d477420b5eba482a0b63259
2020-05-09 00:37:09 +00:00
Harald Welte 3a6bedf1e5 sim: When decoding SW, take application specific SW into account
So far we only looked at SW definitions of the card profile. However,
if we have a currently selected application, we also must check
that application for SW definitions.

This breaks ABI and API all over the place, but as there are no
known users beyond osmo-sim-test, this is acceptable.

Change-Id: I3a1d60898529c173f73587e34c155660ba5f5fb1
2020-05-05 19:41:12 +00:00
Vadim Yanitskiy c9eab828ea rest_octets: fix encoding of 3G Early Classmark Sending Restriction
Change-Id: I6df515a00518fabb3eb8f65054addd3aead14bfe
Relates: OS#3075
2020-05-05 02:03:51 +07:00
Harald Welte 9892945ec2 gsm_29_118.h: Fix compilation with gcc-10
this causes problems when compiling user applications
/usr/bin/ld: ../../src/libvlr/libvlr.a(vlr_lu_fsm.o):/usr/local/include/osmocom/gsm/protocol/gsm_29_118.h:184: multiple definition of `sgsap_ie_tlvdef'; msc_main.o:/usr/local/include/osmocom/gsm/protocol/gsm_29_118.h:184: first defined here

Change-Id: Iaa1d36c7a9bb64aa84ee85fa3e40f6b3560fe693
2020-05-02 19:43:49 +00:00
Pau Espin 47eb4e18d0 configure.ac: Fix HAVE_CLOCK_GETTIME undef when func in -lrt
AC_SEARCH_LIBS was finding the function correctly, but later on
AC_CHECK_FUNCS was not including the found LIBRARY_RT so the function
was not found, and hence HAVE_CLOCK_GETTIME ended up undefined (which in
turns disables support for osmo_clock_gettime() API).
This happened in systems like the soekris where the clock_gettime sybmol
is available in external lib -lrt.

Let's avoid double-checking for the function twice, and simply define
HAVE_CLOCK_GETTIME when AC_SEARCH_LIBS succeeds (the success action is
guaranteed to be called even if there's no extra lib required).

Change-Id: Iced1e0542cee6beb9f08f5299aad49fab142cfb4
2020-05-01 16:51:26 +02:00
Pau Espin d87d6f1778 gsm_04_06.h: Remove repeated egprs header struct definitions
Each struct already contains different definition based on endianess, so
there's no reason to re-define all of them again based on endianess.
Probably at some point somebody run the script
./contrib/struct_endianess.py on those structures but forgot to remove
the old way of supporting differnet endianess.

Change-Id: Ibd002e52979950e09013767fa643b2a3c52dfea9
2020-04-28 12:13:08 +02:00
Harald Welte 1f48b93999 gsm0503_parity: Fix compilation with gcc-10
/usr/bin/ld: .libs/gsm0503_coding.o:/home/laforge/projects/git/libosmocore/src/coding/../../include/osmocom/coding/gsm0503_parity.h:16: multiple definition of `gsm0503_mcs_crc12'; .libs/gsm0503_parity.o:/home/laforge/projects/git/libosmocore/src/coding/../../include/osmocom/coding/gsm0503_parity.h:16: first defined here

Change-Id: I15945bbf59c873e50154c40fed0ba3d6b4d7c399
2020-04-20 18:18:50 +02:00
Harald Welte 100e44ed49 timerfd: call osmo_fd_unregister() when closing on read error
Change-Id: I8513126286083ebf02d14043cf072c8297878dd7
2020-04-19 08:27:27 +00:00
Eric Wild 06747d5720 timer.c: make timers thread safe
This is implicitly used by the libosmocore select abstraction, which
might be used in multiple threads at the same time.

Change-Id: I5a3802c94af6ff0315f1553f20870342d51ce726
2020-04-19 02:21:05 +02:00
Harald Welte a70ac85f5b select.c: Introduce support for signalfd
The signalfd(2) mechanism of Linux allows signals to be delivered
and processed via normal file descriptor I/O.  This avoids any of the
usual problems about re-entrancy of signal processing, as signals can
be processed from the osmocom select() loop abstraction just like any
other event.

Change-Id: If8d89dd1f6989e1cd9b9367fad954d65f91ada30
2020-04-18 21:16:12 +02:00
Harald Welte f3cc731d40 exec: Introduce osmo_system_nowait2() to allow specify a user
For a process running as root, it may be desirable to drop privileges
down to a normal user  before executing an external command.  Let's
add a new API function for that.

Change-Id: If1431f930f72a8d6c1d102426874a11b7a2debd9
2020-04-18 15:06:59 +02:00
Pau Espin e7d0d70ce7 tests/coding_test: Fix test_pdtch() results
When switching the l2 structures passes to test_pdtch() to be constant,
it was noted that output of the test changes. This happens because same
array is tested several times with different length, incrementing each
time. Since the test was modifying the input array directly, it means
each new run of test_pdtch() the array was further modified.
Upon constifying the structures, we copy the array and hence only modify
the required bits each time.

Change-Id: Iffd0ca3669eb8d0d2e80d754fc8acbf72f1bebe8
2020-04-17 10:15:05 +00:00
Pau Espin ce28d2ebba tests/coding: Test decoding of DL EGPRS data packet
Change-Id: Ide23a484b980995f24092d1cfbf062aed58fdf61
2020-04-17 10:15:05 +00:00
Harald Welte e616cbad62 ports.h: Add 4268 for UECUPS VTY
Change-Id: I6c53654f06fac6b6b196be88178a918d38e91e46
2020-04-17 10:37:53 +02:00
Philipp Maier 898c9c6af8 dtx: add decoding for AMR-DTX frames
gsm0503_coding contains AMR decoder functions for HR and FR. Those can
only decode AMR payload frames but not amr DTX frames. Lets add
functionality to detect DTX frames. Also lets add decoding for SID_UPDATE
frames as well as error checking for the SID frame recognition patterns.

Related: OS#2978
Change-Id: I2bbdb39ea20461ca08b2e6f1a33532cb55cd5195
2020-04-14 13:22:44 +00:00
Eric Wild 099c8340ed configure.ac: fix libtool issue with clang and sanitizer
As pointed out at https://github.com/libexpat/libexpat/issues/312
libtool does not play nice with clang sanitizer builds at all.
For those builds LD shoud be set to clang too (and LDFLAGS needs the
sanitizer flags as well), because the clang compiler driver knows how
linking to the sanitizer libs works, but then at a later stage libtool
fails to actually produce the shared libraries and the build fails. This
is fixed by this patch.

Addtionally LD_LIBRARY_PATH has no effect on conftest runs during
configure time, so the rpath needs to be set to the asan library path to
ensure the configure run does not fail due to a missing asan library,
i.e.:

SANS='-fsanitize=memory -fsanitize-recover=all -shared-libsan'
export CC=clang-10
ASANPATH=$(dirname `$CC -print-file-name=libclang_rt.asan-x86_64.so`)
export LDFLAGS="-Wl,-rpath,$ASANPATH $SANS $LDFLAGS"

Change-Id: I8ebd9c6d4efda41c7c8196f963d1f04d65160754
2020-04-11 18:31:59 +00:00
Pau Espin d1cd527541 gsm0503_tables: Document USF encoding tables
Change-Id: I596c10960bd1ff1b1ec14ad953ce5e1ed040d35a
2020-04-07 13:26:59 +02:00
Pau Espin 63ebc368af gsm0503_coding: Fix USF encoding in MCS1-4
osmo-gsm-tester raised an ASan warning in osmo-bts-trx  during execution
of a test with EGPRS enabled and a modem connecting to it (see OS#4483
for full trace):
==12388==ERROR: AddressSanitizer: global-buffer-overflow on address 0x7fa20b9ab8d0 at pc 0x7fa20b982894 bp 0x7ffdfea8b9c0 sp 0x7ffdfea8b9b8
READ of size 1 at 0x7fa20b9ab8d0 thread T0
 #0 0x7fa20b982893 in gsm0503_mcs1_dl_interleave /home/osmocom-build/jenkins/workspace/osmo-gsm-tester_build-osmo-bts/libosmocore/src/coding/gsm0503_interleaving.c:165

Function gsm0503_mcs1_dl_interleave() was being passed the 6-bit USF
encoding while clrearly expecting a 12 element array. TS 05.03 5.1.5.1.2
"USF precoding" also clearly states that 12bit encoding is to be used
for MCS1-4.

Fixes: OS#4483
Change-Id: I94db14de770070b17894a9071aa14391d26e776c
2020-04-07 13:15:38 +02:00
Pau Espin f62f073c79 gsm0503_coding: Fix misleading comment UL vs DL
Change-Id: I563c60271e218f9953e26f9bf0304d442c6acd43
2020-04-07 13:12:21 +02:00