The Signalling Field Element Coding list defined in 3.2.3 is used in
"Old BSS to New BSS Information" and "New BSS to old BSS Information"
IEs. However, the former IE (Old->New Info) defines 2 extra Field
Elements in 3.2.2.58 (3GPP TS 48.008 version 16.0.0 Release 16) not
present in 3.2.3.
Related: SYS#5337
Change-Id: I4db3f7974887e4c798a30c5b51a19472ceeee27d
e7dfeac8dc introduced a regression in the block/unblock check
as it was using the priv->initiate_block instead of priv->om_blocked.
The initiate_block tracks who is responsible to unblock the NSVC.
Fixes: e7dfeac8dc ("gprs_ns2_vty: print a response to vty `nsvc <nsvci> (block|unblock|reset)")
Change-Id: I516faea223e30b120a297faed10636daa554be8a
The library specific sub-systems are kind of special, because their
position in the 'osmo_log_info' may vary depending on the number of
application specific sub-systems. This is why their associated
constant values (like DLGLOBAL) are negative, and this is what
the LOGP() macro expects as the first argument.
Before this change, invoking 'logp' command with any library
specific logging sub-system would result in getting messages
printed with the fall-back DLGLOBAL sub-systems.
Change-Id: If86563e169fe1243adfa7b09c9d65d9f88c8a99e
This will be used by osmo-bts-omldummy to parse features strings from
the cmdline.
Note that osmo_bts_feature_name() already exists to return the longer
descriptive value_strings from osmo_bts_features_descs (_descs!).
Luckily that misses the plural 'features' in the name, so that I can
still add a properly named osmo_bts_features_name() function that only
returns the name, matching the common pattern used in osmocom code.
Related: SYS#4895
Change-Id: I699cd27512887d64d824be680303e70fff3677c1
The function osmo_bts_feature_name() is ill-named for two reasons:
- it returns descriptive text instead of just a string representation of
the name.
- The enum is named "osmo_bts_features", so the function name lacks the
"s" for "features".
Rationale: An upcoming patch adds a function to return just the name,
properly called osmo_bts_features_name(), so deprecate the weirdly named
one first.
Change-Id: I9dfdb5e81037b6000effbd340af4e5db0dcfd69c
This is a partial revert of b27b352e ("stats: Use a global index for
stat item values"). Now that osmo_stat_item_get_next correctly returns
how many values have been skipped, we can use the accurate asserts on
its return value again.
Fix the initial values of next_id_a,b (1 instead of 0), so we don't get
a skipped value on the first read. This is needed, because b27b352e
refactored osmo_stat_item_get_next to have the next id as parameter
instead of the last read one, and the initial value was not adjusted in
the tests.
Related: OS#5088
Change-Id: I9d4cda2487a62f52361c24058363dfa90e502c63
Fix counting of values missed because of FIFO overflow in
osmo_stat_item_get_next(), by assigning a new item value id effectively
as item->value[n + 1].id = item->value[n].id + 1, instead of increasing
a global_value_id that is shared between all items and groups. With
global_value_id, the count of values missed was wrong for one item, as
soon as a new value was added to another item.
This partially reverts b27b352e ("stats: Use a global index for stat
item values") from 2015, right after stats was added to libosmocore. It
was supposed to make multiple readers (reporters) possible, which could
read independently from stat_item (and later added comments explain it
like that). But this remained unused, stats has implemented multiple
reporters by reading all stat_items once and sending the same data to
all enabled reporters. The patch caused last_value_index in struct
osmo_stat_item to always remain at -1.
Replace this unused last_value_index with stats_next_id, so stats can
store the item-specific next_id in the struct again. It appears that
stats is the only direct user of osmo_stat_item, but if there are
others, they can bring their own item-specific next_id: functions in
stat_item.c still accept a next_id argument.
Related: OS#5088
Change-Id: Ie65dcdf52c8fc3d916e20d7f0455f6223be6b64f
A SNS configuration can be done over a NSVC, however this initial NSVC doesn't
need to be part of the configuration.
Those NSVC need to be removed when the configuration is done.
This wrong behaviour can be seen in the vty `show ns` on
NSEI 00001: UDP, ALIVE
FSM Instance Name: 'GPRS-NS2-SNS-BSS(NSE00001-SNS)[0x55c72c09b420]', ID: 'NSE00001-SNS'
Log-Level: 'DEBUG', State: 'CONFIGURED'
Maximum number of remote NS-VCs: 8192, IPv4 Endpoints: 8192, IPv6 Endpoints: 8192
Local IPv4 Endpoints:
10.0.0.1:23000, Signalling Weight: 1, Data Weight: 1
Remote IPv4 Endpoints:
10.0.2.2:23000, Signalling Weight: 1, Data Weight: 0
10.0.2.2:23001, Signalling Weight: 0, Data Weight: 1
3 NS-VC:
NSVCI none: UNBLOCKED DYNAMIC data_weight=1 sig_weight=0 udp)[10.0.0.1]:23000<>[10.0.2.2]:23000
NSVCI none: UNBLOCKED DYNAMIC data_weight=0 sig_weight=1 udp)[10.0.0.1]:23000<>[10.0.2.2]:23001
NSVCI none: UNCONFIGURED DYNAMIC data_weight=1 sig_weight=1 udp)[10.0.0.1]:23000<>[10.0.2.2]:8888
The UNCONFIGURED NSVC should not be present in when SNS is in CONFIGURED.
Related: SYS#5416
Change-Id: I4045ac6c033ae084743b17a16eef4fcff76589b9
The SNS fsms also track the NSE however since the NSVC
starts now in ALIVE for SNS the SNS must check when synchronize
the alive state when entering the ST_CONFIGURED.
Related: SYS#5416
Change-Id: Ib6a1cc1fd84959e69c07b72ef780642205d2cd18
The start_procedure() can't be called after ns2_nse_notify_unblocked()
because ns2_nse_notify_unblocked() might free the nsvc.
Otherwise the fsm will do use-after-free on the NSVC memory.
Related: SYS#5416
Change-Id: If97dfd123eefd71fc6c3fe886a243a21784aeeb4
Let osmo_stat_item_get_next, osmo_stat_item_discard,
osmo_stat_item_discard_all consistently refer to their next_id arg as
such (and not idx or next_idx). It refers to an ID (item->values[i].id),
not an index (item->values[i]), and it is always the next one, never the
current one.
Do the same change for _index/_idx variables in stats.c, which are used
as arguments to these functions. Replace rd_ with next_id_ in
stats_test.c, too.
Related: OS#5088
Change-Id: I5dd566b08dff7174d1790f49abd2d6ac020e120e
Prior to this patch, we would unconditionally allocate new memory
for the local SNS IP endpoints. This results in a memory leak
on every SNS-SIZE procedure.
Let's move to talloc_realloc() which recycles any previously allocated
memory.
Change-Id: I12cb670e087c6d6190f3f5bf8483ea62008ae06f
Some projects don't necessarily have RPM packaging yet. Hence, avoid
running into unexpected check results in that case.
Related: OS#5094
Change-Id: Id306256af1ab3bf081b7df5a6c271628e3b8715c
We may very well have any number of binds configured, but which
are not part of the current NSE. When creating the "full mesh" of
NS-VCs after SNS-CONFIG, we must only iterate over those binds that
are part of the NSE (or 'ipa-sns-default bind' in cae of SGSN role),
but not over all the other binds that may exist in the system.
Closes: OS#5092
Change-Id: Ida361fa02ad1d86844d54c8f0664c996ed28e30a
dump_nse() should only print persistant NSE when persistant_only
argument is set. A NSE can be persistant or dynamic configured.
Depending on the NSE all NS-VC must be the same as the NSE.
Change-Id: Ibd2c6962eda39a850ab61cf347063934378d2fdc
The binds also print a list of associated NSVC when
dumping the bind.
However the binds using their own representation of
printing the NSVC which is different to `show ns entities`.
Use the same function to print NS-VC.
Before:
NSVCI 00000: udp)[127.0.0.1]:23000<>[127.0.0.1]:22000
After:
NSVCI none: UNCONFIGURED DYNAMIC data_weight=1 sig_weight=1 udp)[127.0.0.1]:23000<>[127.0.0.1]:22000
Change-Id: If31ec6c1c07dc134ab1ddeb915bc89747c7be048
Introduce 2 new logging sub systems for signal and unit data.
Unify log messages so all log messages look similiar.
Log also Rx PDUs. Ensure dropped Tx packets (BLOCK/RESET on SNS)
contain *Tx*.
Change-Id: I34b8fde2955ecc010d1dcd9512e1bba9211e2c0d
This fixes some bug introduced in Change-Id I1638f04ba45fef3ba0b237948dff6022267141fb
Related: OS#3373
Change-Id: Ic0873e63f1f046b674c7898480ff070a18a7abc7
the previous commit fixed the state transition, but also caused
neither Tns-alive nor Tns-test to run
Change-Id: I07ea3fd5cec3d4acf4051930a1a3c746d6fd597c
In the IP-SNS SGSN role, we need to inform the BSS of our local
IP endpoints. For statically configured NSEs, those are explicitly
stated on a per-NSE level.
For dynamically created IP-SNS NSEs, we are adding a new VTY
command, using which the administrator can configure which binds
should be advertised as IP endpoints to such BSS.
Change-Id: Id01c29b07e9203c9305f2129361a4f5aaefa2c52
Related: OS#3373
As per 3GPP TS 48.016 section 6.2.4.1, we need to perform some
consistency checks during the SNS-SIZE procedure. Let's implement them.
Change-Id: I1638f04ba45fef3ba0b237948dff6022267141fb
Related: OS#3373
It is the SGSN's job to ensure sufficient NS-VC capacity. As the SGSN
doesn't tell the BSS, we should not make assumptions of only 4.
Change-Id: I41f493643cf51d7853959ab9c7bbc0ffae4e1f4b
The SNS-SIZE sent from BSS to SGSN contains the actual number of local
IP endpoints on the BSS side, and not the maximum number of remote IP
endpoints supported.
Change-Id: I62a8bca4a3f7c47bcb9f292b045fa867d8877a09
In BSS role, we can clear local + remote endpoints when sending
SNS-CONFIG, as we are first.
In SGSN role, we must not clear remote endpoints when sending
SNS-CONFIG, as we are last, and the BSS has just previously told
us its IP endpoints in the BSS-originated SNS-CONFIG.
Change-Id: I58549707ac5a3a0aae5f9348ed76f16c09ad3e46
Related: OS#3373