Commit Graph

3437 Commits

Author SHA1 Message Date
Alexander Couzens bf95f0fb2e ns2: refactor ns2_prim_status_ind()
Replace parameters nsi + nsei with a single nse pointer.

Change-Id: I35f6381110ba7ba1e013f21120e971362bdff55b
2020-10-03 07:17:54 +00:00
Alexander Couzens 477ffb0e72 ns2: parse the return code of gprs_ns2_ip_bind
Fixes a crash when the bind fails.

Change-Id: I96c8e871a350f8f7b9ba2450bb37b90b535f42e2
2020-10-01 19:33:00 +02:00
Neels Hofmeyr 6b5f1de06d osmo_use_count_to_str: make robust against unused use_count
A use_count struct gets properly initialized once the first use count is added.
Normally, this happens directly at object allocation. Still make sure
osmo_use_count_to_str_*() don't crash on a yet unused struct use_count.

Change-Id: I47b1acc7f13f2557c78e2cbe67d4690709ce795e
2020-09-30 18:48:12 +00:00
Alexander Couzens e9069ebfec gsm_12_21: add osmo_oml_nsvc_address_type for OML NM_ATT_OSMO_NS_LINK_CFG
The NM_ATT_OSMO_NS_LINK_CFG is used for NSVC configuration of osmocom based BTS to support
IPv6 NSVCs.

Change-Id: I9e279bb20940c66eea5196f281184cb4f8a5cc5f
2020-09-30 11:59:28 +00:00
Harald Welte a8b1b2175c logging: Introduce MAX_LOG_SIZE for the magic number 4096
Change-Id: Ia9645098dffecd29242857de8f1aea6b9aca5918
2020-09-29 19:06:22 +02:00
Harald Welte e4d9a2c5eb logging_vty: set osmo_stderr_target to NULL on "no log stderr"
We cannot keep a reference to the old log_target around if we
just destroyed/deleted it.

Change-Id: I98a801cf83347a4422534d020d5ed5e2d1eb5482
2020-09-29 16:58:22 +00:00
Harald Welte c433889bba write_queue: Re-enqueue msgb if write_cb returns -EAGAIN
By adding this functionality, the write_cb() handler can "un-dequeue"
the msgb in case of some error.  The msgb might have been modified
meanwhile, e.g. due to a partial write already pulling some data off
the head of the msgb.

Change-Id: I97bb0d64ec991adf5dd0b3708e0c7cf029e03b5f
2020-09-29 16:58:11 +00:00
Harald Welte f44937834f write_queue: use msgb_{en,de}queue_count()
The write_queue.c implemetation predates the msgb_*queue_count()
functions for maintaining a count alongside witha msgb queue. Let's
migrate over to those implementations.

Change-Id: I0ebd42a50f239dd7e9f663ce4c42824a5c1b3ce7
2020-09-29 16:30:56 +00:00
Harald Welte 66138ccab5 write_queue: Add osmo_wqueue_enqueue_quiet()
Same as osmo_wqueue_enqueue() but without logging queue overruns.

Change-Id: Ic082eb39795b08631284eeb421fef3c28f2e90dc
2020-09-29 16:30:56 +00:00
Vadim Yanitskiy 7f6c87da2f vty/command: reflect global attributes in the XML reference
Given that commands with either/both of the following attributes:

  - CMD_ATTR_DEPRECATED,
  - CMD_ATTR_HIDDEN,

never end up in the XML reference, only CMD_ATTR_IMMEDIATE would
be reflected for commands taking effect immediately as follows:

  <command id='foo'>
    <!-- Global attributes -->
    <attributes scope='global'>
      <attribute doc='This command applies immediately' />
    </attributes>

    <!-- Application specific attributes -->
    <attributes scope='application'>
      <!-- ... -->
    </attributes>

    <params>
      <!-- ... -->
    </params>
  </command>

Change-Id: I8476c1163c23a9a52641987acf3df0b8c49d8f7b
Related: SYS#4937
2020-09-28 13:03:52 +07:00
Vadim Yanitskiy 4a96b7c7b9 vty/command: introduce new attribute CMD_ATTR_IMMEDIATE
This attribute indicates that a VTY command applies immediately.

Change-Id: Ia185dfd0c89214dc893af70736ff01dca3a7627e
Related: SYS#4937
2020-09-28 12:44:33 +07:00
Pau Espin 470cc12447 cosmetic: Fix typo in API doc
Change-Id: I2c8f61768f96eda8d9f3e9b867a7e9625f4f6078
2020-09-27 12:58:23 +02:00
Alexander Couzens 772ca6195e ns2: fix a msg leak when receiving REJECTED messages
Change-Id: I7edc53c29c3dd09c395a275ceb8648b8eb19c06c
2020-09-26 19:58:50 +00:00
Daniel Willmann 4fb27a80d2 gprs_ns2: Make reason const
Change-Id: Ia0db18703d9fd137a5c5fe4474e2d76868a9af9d
2020-09-25 15:39:46 +02:00
Alexander Couzens 1301012837 ns2: refactor handle_nsip_read/handle_nsfrgre_read
Might be more readable.

Change-Id: Ib2dbcae55a8c7a973cfa1123784f509708de7f3b
2020-09-25 09:46:31 +00:00
Alexander Couzens 1f0625f214 ns2: vty: fix behavior of vtyvc_by_nsei when vtyvc isn't found
Fixes the parsing of persistent nsvcs.

Change-Id: I297409f557f17df680ac76018b4202eb99713021
2020-09-25 09:45:24 +00:00
Alexander Couzens ffd49d0757 ns2: ns2_recv_vc: remove unused parameter nsi
Change-Id: I0dbc079e83d37de01a4260442363ed5fdcd51d28
2020-09-25 09:45:24 +00:00
Alexander Couzens 38b19e88bb ns2: refactor nsvc_by_ functions
gprs_ns2_nsvc_by_sockaddr_nsei is doing the lookup within a NSE.
gprs_ns2_nsvc_by_sockaddr_bind is doing the lookup within a bind.
Make both function look similiar and take similiar arguments.

Change-Id: Ia499fc279013668abe7348e578a0768f7d16faf9
2020-09-25 09:45:24 +00:00
Alexander Couzens c1cd333072 ns2: check the specific bit of NS SDU Control bits
Change-Id: I9632abe70585cb7aff2602590453d903dd88b48a
2020-09-25 09:45:24 +00:00
Alexander Couzens c82c40aa53 ns2: vty: add missing docs for IPv6 address
Change-Id: I0ac04e1352ceadb7b787bcb3358c70e5bfd7c65b
2020-09-24 23:32:18 +00:00
Alexander Couzens 89acdef892 ns2: remove bssgp specific msgb->cb parts
There shouldn't be any knowledge of the upper layer in the NS layer.
The PCU / SGSN / gbproxy have to add the pointer when parsing the primitives.

Change-Id: Id7edb8feb96436ba170383fc62d43ceb16955d53
2020-09-25 01:06:36 +02:00
Alexander Couzens 495b4a7cdb gb/gprs_bssgb: ensure the fc timer has been stopped when freeing bssgp_bvc
Change-Id: Id03ebef31bb513e2b3b5bc709a91e9352ebbbc79
2020-09-24 13:52:18 +00:00
Alexander Couzens 6a2c0740b1 gb/gprs_bssgb: check if talloc failed on btsctx->fc
Change-Id: I1cfccc2cb696d9e95f590b99559d0a987031adfe
2020-09-24 15:51:46 +02:00
Vadim Yanitskiy 349d3480a6 vty: cosmetic: fix missing curly braces in vty_describe_command()
Change-Id: I1585ee70a3db77aa8737f9463c4d0665f4e90d90
2020-09-22 19:29:28 +00:00
Vadim Yanitskiy f909d336c3 vty: cosmetic: s/width/cmd_width/g in vty_describe_command()
Change-Id: Ifcf5f7be925c5421040d3cac2c4c5e4dd497c0f5
2020-09-22 19:29:28 +00:00
Vadim Yanitskiy aade232c54 vty: cosmetic: drop redundant 'break' statements
Change-Id: I54ee7c3c6fe16a413d0e1128c7358ff6e4b76c6a
2020-09-22 19:29:28 +00:00
Pau Espin 53fbc67d4e osmo_strlcpy: Clarify length calculation
Change-Id: I78dc7b87d5b42595c0b1392fce61606eae8f6ec8
2020-09-22 19:28:14 +00:00
Pau Espin c29d513a2b osmo_strlcpy: Avoid calling memcpy with size=0
Change-Id: Ic84af86d33c8a20f06036b13d0a10cf312582f0d
2020-09-22 19:28:14 +00:00
Daniel Willmann 4692a1c3bf gsm_08_16.h: Add missing header
utils.h is needed for struct value_string
This probably never caused a problem because every file including
gsm_08_16.h also included utils.h, but we should still include the file
here.

Change-Id: Iae09b4e8e42be6c371fb34279b7981db2af8cf4c
2020-09-21 16:06:37 +02:00
Vadim Yanitskiy 34e94f3c3a vty: print program specific attributes in the XML reference
Change-Id: I1f35368ba9178e1454f2e3ddfcad9d96576143ef
Related: SYS#4937
2020-09-20 09:57:44 +00:00
Vadim Yanitskiy 7f1ecd9eb4 vty: add program specific attributes to VTY commands
Change-Id: I2c6c7b317b2b28ce70784c0cabd1b913e721be02
Related: SYS#4937
2020-09-20 09:57:44 +00:00
Neels Hofmeyr 9277b97d0b add osmo_use_count_to_str_c()
So far there is only osmo_use_count_name_buf(). Also provide a use count to
string using a talloc context, allowing to use OTC_SELECT.

- instead of foo_name(), rather use foo_to_str().
- osmo_use_count_name_buf() returns the buf and not the chars_needed. So add
  osmo_use_count_to_str_buf() with a signature that is usable by
  OSMO_NAME_C_IMPL().
- provide osmo_use_count_to_str_c() using OSMO_NAME_C_IMPL().

Change-Id: I1d2e7ee979f8c316ef99f7c65675b36d092ddfca
2020-09-20 09:51:32 +00:00
Harald Welte b40cfdc54b gprs_ns2: Mark gprs_ns2_validate_* as static
They are all called indirectly via gprs_ns2_validate(), so mark them
as static.

Change-Id: I8425ed3da32019b86cf12d3c27132f07d931cf27
2020-09-18 23:14:36 +02:00
Harald Welte 92ad029e1a ns2: Use NULL and not '0' when returning a NULL-Pointer
Change-Id: I9458e6dcf8133fbcfbc89437e58aad049a6d432b
2020-09-18 23:14:36 +02:00
Harald Welte 5bef2cc4bd ns2: Improve/extend doxygen comments for new ns2 implementation
I was reading through the code and noticed many functions not
documented yet, or with incomplete documentation. Change that.

Change-Id: I85a2419604a9fd9ff3c4828a7463e222652f77bf
2020-09-18 23:14:36 +02:00
Harald Welte 158143f0fa ipaccess.h: Add more enum values and 'official' names
Originally we only learned about the protocol from looking at hexdumps
without any specification or the like.

Due to a GPL request to ip.acecss, we actually do have an 'official'
resource: The packet-ipa.c from their wireshark-1.0.6ipa27.tar.gz

Let's use its contents to complete our definitions here.

Change-Id: Ic1f2b32c72d162f31b422293d2a361d528443f01
2020-09-18 16:11:38 +02:00
Vadim Yanitskiy ecaf5faa79 gsm0808: fix: do not encode invalid encryption algorithm
According to 3GPP TS 48.008, section 3.2.2.44, the Chosen Encryption
Algorithm IE, which may be included in the following messages:

  - 3.2.1.2   ASSIGNMENT COMPLETE
  - 3.2.1.8   HANDOVER REQUEST
  - 3.2.1.10  HANDOVER REQUEST ACKNOWLEDGE
  - 3.2.1.12  HANDOVER COMPLETE
  - 3.2.1.25  HANDOVER PERFORMED
  - 3.2.1.31  CIPHER MODE COMPLETE

is coded as follows:

  0000 0001   No encryption used
  0000 0010   GSM A5/1
  0000 0011   GSM A5/2
  0000 0100   GSM A5/3
  0000 0101   GSM A5/4
  0000 0110   GSM A5/5
  0000 0111   GSM A5/6
  0000 1000   GSM A5/7

basically A5/X => X + 1.  All other values are Reserved for future
international use.  As can be seen, value 0x00 is RFU.  Passing
this value to some encoding functions would result in a PDU with
this IE omitted.  Although, some functions would still encode
Chosen Encryption Algorithm IE with this RFU value.

Let's ensure that all functions behave consistently.

Change-Id: If10e433a8174eabe6aa6d2c2937bf9cf5d14d7c9
2020-09-18 08:41:57 +00:00
Harald Welte 7da6ace594 gprs_ns2_sns: Fix compilation on Debian 8
[  198s]     for (unsigned i = 0; i < gss->num_ip6_remote; i++) {
[  198s]     ^
[  198s] gprs_ns2_sns.c: In function 'ns2_sns_st_configured_change':
[  198s] gprs_ns2_sns.c:1053:3: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
[  198s]    for (int i = 0; i < num_v4; i++) {
[  198s]    ^
[  198s] gprs_ns2_sns.c:1067:3: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
[  198s]    for (int i = 0; i < num_v6; i++) {
[  198s]    ^
[  198s] Makefile:535: recipe for target 'gprs_ns2_sns.lo' failed

Change-Id: I4b7c576fcdf9d35f85e00ad076af7c48d5eb34a5
2020-09-18 09:48:05 +02:00
Alexander Couzens 48f6386717 libgb/ns: allow to create NS_ALIVE NSVC
Change-Id: I562c3ac4a8baaa2c97852bbd6a5a10ba1f144004
2020-09-15 13:55:24 +02:00
Alexander Couzens 6a161497cf Gb: add a second NS implementation
Reimplement NS with FSM.

Change-Id: I3525beef205588dfab9d3880a34115f1a2676e48
2020-09-15 11:54:41 +00:00
Neels Hofmeyr f6db765327 bitXXgen: add osmo_loadXXbe_ext_2() to get right-adjusted values
As shown in the recently added bitgen_test.c, using osmo_loadXXbe_ext() with a
smaller n produces results aligned on the most significant bytes, which is
cumbersome, since it does not return a previously stored value. This problem
exists only for the big-endian functions, the little-endian osmo_loadXXle_ext()
properly return values adjusted on the least significant octets.

Add osmo_loadXXbe_ext_2() variants that properly right-adjust the returned
value. Prominently highlight this behavior in API doc. Test the new functions
in bitgen_test.c.

For example, this eases handling of 24bit integers (e.g. loaded from buffer to
uint32_t, and stored into buffer from uint32_t). Also explicitly show this 24
bit case in bitgen_test.c

Change-Id: I2806df6f0f7bf1ad705d52fa386d4525b892b928
2020-09-14 11:53:46 +00:00
Neels Hofmeyr 6862cd38a5 bitXXgen: add bitgen_test.c
The autogenerated bitXXgen.h headers for osmo_load16le_ext() thru
osmo_store64_be() are not actually tested at all. Add a test.

The test output shows that the osmo_load*be_ext for a shorter len do not return
nicely matching results. A practical example showing the difficulty in storing
and loading 24bit integer values as/from big-endian:

	uint8_t buf[4];
	memset(buf, 0, sizeof(buf));
	osmo_store32be_ext(0x00112233, buf, 3); // stores 11 22 33
	printf("%s\n", osmo_hexdump(buf, 4));
	uint32_t r = osmo_load32be_ext(buf, 3); // returns 0x11223300, not 0x00112233
	printf("0x%x\n", r);

output is:

	11 22 33 00
	0x11223300

In contrast, the little-endian variant properly aligns the loaded bytes on the
least significant octet:

	uint8_t buf[4];
	memset(buf, 0, sizeof(buf));
	osmo_store32le_ext(0x00112233, buf, 3); // stores 33 22 11
	printf("%s\n", osmo_hexdump(buf, 4));
	uint32_t r = osmo_load32le_ext(buf, 3); // returns 0x00112233 as expected
	printf("0x%x\n", r);

output for le is:

	33 22 11 00
	0x112233

Change-Id: I5542ace54376a206aa8574812d4c742c86c293b4
2020-09-14 11:53:46 +00:00
Neels Hofmeyr c0ac4e37c9 bitXXgen: ensure not reading/storing past valid size
Add OSMO_ASSERT()s to ensure bounds checking.

For example, for osmo_store32le_ext(), passing n > 5 would read past the end of
the uint32_t. Similarly, osmo_load32le_ext() for n > 4 would write past the
uint32_t's end.

Change-Id: I2dc21582cd8a679b6624cefbc0c1678b093a3d08
2020-09-14 11:53:46 +00:00
Pau Espin 6407c822ae logging: Avoid printing OSMO_LOGCOLOR_END if no color was used
There's no point in printing that code if no color was used in first
place, and looks strange when using logging with color enabled but no
color assigned to the category printing lines.

Only affected unit test output by this fix is osmo-bts'x
tx_power_test.c, which has been fixed in osmo-bts.git Change-Id
I5aa95997c8df4ce5ba8271acae99c45f68b96e11.

Change-Id: Ie38cc639d7f4acd908f357e5bfb3ced07147583e
2020-09-14 08:45:01 +00:00
Vadim Yanitskiy e0ed147984 vty: fix 'Unsigned compared against 0' generate_cpu_hex_mask()
Change-Id: I49549439d5bbfbb83954ba92957304b03062d003
Fixes: CID#212137
2020-09-11 20:14:34 +07:00
Vadim Yanitskiy b89114b3fa logging: fix memleak in log_target_create_file()
Change-Id: If16d8c6417698bbb5cf87716f9507c7256aeaecb
2020-09-09 05:00:15 +07:00
Vadim Yanitskiy 04f4271704 logging: fix log_target_destroy(): properly close syslog
Change-Id: I122445e8ee842b5f807d21a272520648660e7e65
2020-09-09 04:47:45 +07:00
Vadim Yanitskiy 744236b96e logging: refactor and simplify log_target_destroy()
Change-Id: Ic6b9906e6fd24de6af9c869348c100d9ef6a7df6
2020-09-09 04:42:22 +07:00
Alexander Couzens 0f36421ba8 add osmo_sockaddr_local_ip() to determine the local address for a remote.
Similiar to osmo_sock_local_ip but for osmo_sockaddr.

Change-Id: I9cd2c5ceb28183e2fd2d28f9c9088c3fcac643d2
2020-09-07 16:22:21 +02:00
Alexander Couzens 3b688835b0 gb/common_vty: use void *
As long the filter doesn't look into the nsvc/bvc structs
there is no need to use the type.
Further it allows to use the same code for NS1 and NS2.

Change-Id: I9b9a70f382a94f1d41142060d5db569f9df865ac
2020-09-07 07:50:58 +00:00