aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2015-12-17ns: Force a defined state when sending NS RESETzecke/release/0.7-devJacob Erlbeck3-0/+108
Currently the state is assumed to remain the same while the reset procedure is active. While this works correctly in general, a single unexpected BLOCK_ACK or UNBLOCK_ACK can change the state but will not stop the reset procedure. The leads to repeated RESET messages, where the corresponding RESET_ACK is ignored. This is a stable state which can only be left by manual intervention or by reception of a RESET message from the peer. This commit changes the RESET timeout handler to set the state to BLOCKED/RESET when sending the new NS RESET message. Note that this should ensure a clean restart even if the state has been screwed up. It does not fix the handling of BLOCK_ACK or UNBLOCK_ACK in abnormal cases. Addresses: gprs_ns.c:349 NSEI=8895 Tx NS RESET (NSVCI=8895, cause=O&M intervention) gprs_ns.c:878 NSVCI=8895 Rx NS RESET ACK (NSEI=8895, NSVCI=8895) gprs_ns.c:887 NS RESET ACK Discarding unexpected message for NS-VCI 8895 from SGSN NSEI=8895 Ticket: OW#1551 Sponsored-by: On-Waves ehf
2015-03-27bssgp: Handle BSSGP STATUS messagesJacob Erlbeck4-16/+103
Currently incoming BSSGP STATUS messages are just logged and no other action is taken. This makes it impossible for higher layers to react to failures which are indicated by corresponding STATUS messages unless a timeout is triggered as a result of that failure later on. This commit adds a bssgp_rx_status() function and calls it on incoming STATUS messages. That function logs a message, increments the new BSSGP_CTR_STATUS counter if the bctx context exists and invokes an NM_STATUS status indication. The latter will allow the application to handle failures immediately. Since all STATUS messages should be handled, the function is already called in bssgp_rcvmsg and the message is no longer handled in (and will not reach) bssgp_rx_sign and bssgp_rx_ptp. Ticket: OW#1414 Sponsored-by: On-Waves ehf
2015-03-27bssgp: Don't reply with STATUS when receiving a PtP STATUS messageJacob Erlbeck1-0/+2
Currently each incoming PtP BSSGP STATUS message is handled as 'not yet implemented' and a BSSGP STATUS message (cause BSSGP_CAUSE_PROTO_ERR_UNSPEC) is sent back to the peer. This will cause endless messages loops if both peers use this BSSGP stack implementation. This does not apply to signalling messages. This commit changes the implementation of bssgp_rx_ptp() to just do logging in this case. Sponsored-by: On-Waves ehf
2015-03-27bssgp: Fix VTY command 'show bssgp nsei N'Jacob Erlbeck1-1/+1
Currently this command segfaults (at least when ASAN is enabled), because when getting the NSEI the index to argv is wrong and out of bounds. This patch fixes the offset. Sponsored-by: On-Waves ehf
2015-03-27gprs: Don't discard SUSPEND/RESUME in bssgp_rcvmsgJacob Erlbeck3-20/+30
Currently sending SUSPEND/RESUME messages to this function (like it is done in the osmo-sgsn) results in STATUS messages complaining about an unknown BVCI. The reason is, that these messages rely on a TLLI/RAI pair to identify the context and do not contain an explicit BVCI. This patch modifies bssgp_rcvmsg() to only complain about and unknown BVCI if one is given but a matching context is not found (except for RESET messages). The ctx argument is removed from the functions handling SUSPEND and RESUME since it will always be NULL then. Sponsored-by: On-Waves ehf
2015-03-27gprs/test: Add BSSGP testsJacob Erlbeck4-2/+168
This patch adds a test suite for the BSSGP protocol. The first (and only) test checks the handling of BSSGP SUSPEND/RESUME. Sponsored-by: On-Waves ehf
2015-03-27gprs-ns/test: Check the nsvc state explicitelyJacob Erlbeck1-0/+7
This patch extends test_sgsn_reset_invalid_state by assertions to check that nscv->state and nsvc->remote_state have been set as expected. Sponsored-by: On-Waves ehf
2015-03-27gprs-ns/test: Re-add return value check for gprs_nsvc_resetHolger Hans Peter Freyther1-1/+3
The return value check has been removed in the commit 'Use gprs_nsvc_reset instead of gprs_ns_tx_reset', because gprs_nsvc_reset had no return value then. Since a compatible return value has been added by 'Let gprs_nsvc_reset return a value', the former patch is partly reverted by this commit. The printf is now an OSMO_ASSERT. The commit message was taken from Jacob. Sponsored-by: On-Waves ehf
2015-03-27gprs-ns: Fix reset state handlingJacob Erlbeck3-11/+27
Currently the NS-VC's state is updated from within gprs_ns_tx_reset, which can lead to an inconsistent state when the RESET_ACK is lost. In this state, the NSE_S_RESET bit is set but the Tns-reset timer is not started. This patch moves the state update into gprs_nsvc_reset. This way, the state flags are consistent with the timer. Addresses: SGSN -> BSS NS_ALIVE BSS -> SGSN NS_ALIVE_ACK BSS -> SGSN BVC_RESET SGSN -> BSS NS_STATUS, Cause: NS-VC blocked, NS VCI: 0x65 and there is no BSS->SGSN NS_ALIVE Ticket: OW#1213 Sponsored-by: On-Waves ehf
2015-03-27gprs-ns: Let gprs_nsvc_reset return a valueJacob Erlbeck2-3/+8
Currently gprs_nsvc_reset does not return any value. This patch changes the function to return an integer, where a value less than zero indicates an error. The value is taken from the gprs_ns_tx_reset function. In case of failure, an error message is logged. Sponsored-by: On-Waves ehf
2015-03-27gprs-ns/test: Add test_sgsn_reset_invalid_stateJacob Erlbeck2-0/+163
This tests the behaviour for a certain combination of messages and packet losses that can put the NS-VC object into an undefined state. In that state, the peer's ALIVE messages are properly answered, but the local test procedure has stopped, incoming unitdata PDUs are answered by STATUS(NS-VC blocked) and the unblocking procedure is not initiated. Ticket: OW#1312 Sponsored-by: On-Waves ehf
2015-03-27gprs-ns/test: Add expire_nsvc_timerJacob Erlbeck1-0/+15
This function forces the expiration of the timer within struct gprs_nsvc. It is meant to be used for controlled (and faster) timer expiration in unit tests. The timer_mode of the expired timer is returned (or -1 if the timer wasn't active). Sponsored-by: On-Waves ehf
2015-03-27gprs-ns/test: Save the last PDU type sentJacob Erlbeck1-0/+4
This records the PDU type of the last message sent to the remote peer in the global variable sent_pdu_type, which can then be used in assertions. Note that sent_pdu_type will remain unchanged if no message has been sent via sendto. Sponsored-by: On-Waves ehf
2015-03-27gprs-ns/test: Use gprs_nsvc_reset instead of gprs_ns_tx_resetJacob Erlbeck2-22/+13
Currently gprs_ns_tx_reset is used to let the NS stack generate NS_RESET message. This is not adjusting the nsvc state properly. This patch uses gprs_nsvc_reset instead which starts the full reset procedure. Sponsored-by: On-Waves ehf
2014-09-25misc: Look into the build directory for generated filesHolger Hans Peter Freyther4-4/+4
the bits/crc files are not inside the sourcedirectory but will end in the build directory. Go and look there as well. This somehow doesn't fail with make distcheck but when building for Yocto Dizzy.
2014-09-23gprs: Set bssgph field in bssgp_msgb_alloc()Jacob Erlbeck1-1/+3
Currently the bssgph field is not set when using the bssgp_tx_* functions. This hinders unit testing of generated messages. This patch initializes the bssgph field directly after allocation a new bssgp msgb in bssgp_msgb_alloc() so that it is set by default. Sponsored-by: On-Waves ehf
2014-09-23gprs: Fix bssgp_rcvmsg to handle signalling msgs with BVCI IEJacob Erlbeck1-3/+7
Currently BSSGP messages with an NS BVCI of 0 (signalling) are discarded if they aren't RESET messages. Thus valid signalling messages (e.g. BLOCK) are not handled properly, because the BVCI IE is ignored if it present. Instead a STATUS message referring to BVCI 0 (instead of the BVCI used in the BLOCK message) is returned. This patch changes the implementation to use the BVCI contained in the BVCI IE if that is present in a signalling message. It fixes BSSGP BLOCK/UNBLOCK for the osmo-sgsn. Note that signalling messages without an BVCI IE (e.g. SUSPEND/RESUME) are still rejected. Ticket: OW#1205 Sponsored-by: On-Waves ehf
2014-09-23gprs: Fix and check BVCI in BSSGP STATUS messagesJacob Erlbeck2-1/+15
Currently the BVCI is not set in all invocations to bssgp_tx_status() when the cause is UNKNOWN_BVCI. This patch adds the argument where it is missing. It also adds a check for compliance (GSM 08.18, 10.4.14.1) to bssgp_tx_status() to emit errors when the following requirement is not fulfilled: The BVCI must be included if (and only if) the cause is either "BVCI blocked" or "BVCI unknown". Sponsored-by: On-Waves ehf
2014-09-11Fix copyright header in gan.cHarald Welte1-4/+4
When I wrote the gan.c, I used the wrong copyright/license header (AGPLv3+ intead of GPLv2+). This was a mistake and is fixed hereby.
2014-09-11add missing copyright statements to source code filesHarald Welte5-0/+106
Some source code files didn't have the usual copyright and licence statement at their top. I'm adding them baesed on information in the commitlog.
2014-09-08debian: Depend on the right version of libosmogsm as wellHolger Hans Peter Freyther1-1/+1
2014-09-08debian: Depend on libosmocore5 for the legacy packageHolger Hans Peter Freyther1-1/+1
2014-09-08debian: fix build errors with libosmogsm and libosmoctrlCiaby3-2/+9
libosmogsm: the transition from 5 to 6 wasn't done properly. Fixed version number. libosmoctrl: missing definition in debian/control and also missing libosmoctrl0.install.
2014-09-02logging: Document the ABI breakage in the release todoHolger Hans Peter Freyther1-0/+1
In commit fb84f325b8e672ba7ca1a961f4ef01f4d011e33d the ABI was broken, let's add the required entry.
2014-08-29msgfile: Fix memleak in the test and release the listHolger Hans Peter Freyther1-0/+1
2014-08-25logging: Add ability to save/print current log filtersHarald Welte3-3/+23
This enables the persistent configuration of let's say 'log filter imsi 012345678' for a given log file in the config file.
2014-08-24gsm48.h: define the reserved TMSI in libosmocore, not openbscHarald Welte1-0/+3
2014-08-24add port number 4238 for BTS control interfaceHarald Welte2-0/+2
2014-08-24libctrl: Add support for 'deferred control commands'Harald Welte3-0/+92
Sometimes a control interface command cannot be processed and responded immediately, but we need to process it asynchronously. In order to support this, we introduce the 'ctrl_cmd_def', which represents such a deferred command. It is created by the service implementing the command using ctrl_cmd_def_make(), and a response is later sent using ctrl_cmd_def_send(). ctrl_cmd_def_is_zombie() must be called to handle the case where the control connection has disconnected/died between receiving the command and sending the response.
2014-08-21ctrl: Attempt fix the build on FreeBSD and add include fileHolger Hans Peter Freyther1-0/+1
IPPROTO_TCP is defined in netinet/in.h. Include it and hope the build is fixed for FreeBSD.
2014-08-21prepare for 0.7.0 release0.7.0Harald Welte5-5/+11
2014-08-21Convert recently-introduced header files to #pragma onceHarald Welte3-13/+3
2014-08-21New <osmocom/ctrl/ports.h> file listing tcp ports for CTRL interfaceHarald Welte2-0/+8
2014-08-21rename controlif_setup() to ctrl_interface_setup()Harald Welte2-4/+4
which means that all control interface related functions now have the common ctrl_ prefix.
2014-08-21libctrl: Make two internal helper functions staticHarald Welte1-2/+2
2014-08-21libctrl: Move bulk of control node lookup inti libosmoctrlHarald Welte2-7/+134
The control interface user now only has to register a very short node lookup function callback. This function is optional, and only required if hierarchical command lookup should be supported.
2014-08-21libctrl: remove 'struct gsm_network' referencesHarald Welte2-9/+6
libctrl doesn't need any knowledge about the type of the user-private data that it gets passed upon setup time and includes on callbacks.
2014-08-21libctrl: remove bsc-specific declarationHarald Welte1-1/+0
this was moved by accident when importing the code from openbsc.
2014-08-21libctrl: adopt to recent ipaccess/ipa naming changeHarald Welte1-2/+3
2014-08-21libctrl: autotools build system integrationHarald Welte5-7/+27
Now we actually build the recently-imported libctrl
2014-08-21libctrl: Add DLCTRL as logging context for the control interfaceHarald Welte4-29/+35
... and make libctrl code use it
2014-08-21libctrl: remove reference to bsc_replace_string()Harald Welte2-1/+8
... and rather introduce a general osmo_talloc_replace_string() to libosmocore.
2014-08-21libctrl: Avoid using external tall_bsc_ctxHarald Welte1-6/+6
Instead of using one flat talloc context (and one that is specific to openbsc), we should attach the objects to whatever parent context they are being used in.
2014-08-21libctrl: remove openbsc headers, convert from make_sock to libosmocoreHarald Welte4-23/+14
2014-08-21libctrl: Remove reference to 'DNAT' in favor of 'DCTRL'Harald Welte1-1/+1
2014-08-21libctr: rename/move control interface to libosmocore naming schemeHarald Welte5-0/+0
2014-08-21ctrl: Allow the value to contain spaces. No need to split the stringHolger Hans Peter Freyther1-1/+1
2014-08-21ctrl: Use CTRL_CMD_DEFINE_STRUCT in CTRL_CMD_DEFINE_RANGEHolger Hans Peter Freyther1-6/+1
Jacob pointed out that I didn't convert CTRL_CMD_DEFINE_RANGE. This patch is doing it now.
2014-08-21ctrl: Reduce code duplication and add a define to create the structHolger Hans Peter Freyther1-13/+10
This has been pointed out by Jacob and removes two more duplicates of the struct. For the unused CTRL_CMD_DEFINE_STRING macro there will be no verify command.
2014-08-21ctrl: Remove the param parameter as it was never used/implementedHolger Hans Peter Freyther2-6/+0