Commit Graph

19 Commits

Author SHA1 Message Date
Holger Hans Peter Freyther 726e2729fa gprs: Address coverity warning on unchecked return of gprs_ns_tx_reset_ack
Fixes: Coverity CID 1111545
2013-10-25 11:05:10 +02:00
Holger Hans Peter Freyther 7c91bfdd4e gprs: Address coverity warning on unchecked return of gprs_ns_tx_status
We could consider creating a CHECK MACRO that will print a message
in case of a tx failure.

Fixes: Coverity CID 1111544
2013-10-25 11:02:51 +02:00
Holger Hans Peter Freyther 0cccf40860 gprs: Make sure that the buf is NULL terminated at the end
Fixes: Coverity CID 1107253
2013-10-25 11:00:23 +02:00
Jacob Erlbeck 54b8b2dfef gb: Create new NSVC object instead of patching the NSVCI
When a RESET is received on the same link with a different NSVCI from
a BSS on a dynamically created NS connection do not patch the nsvc
object but create a new one instead. Thus the NSVCI is never modified
at a nsvc object after the NS-VC has been established.

Sponsored-by: On-Waves ehf
2013-10-24 10:01:18 +02:00
Jacob Erlbeck ab852ee234 gb: Fix RESET handling with changing NSEI
This modifies the NS stack's behavior to accept RESET and RESET_ACK
NSEI changes for NS-VC dynamically created by RESET messages from
BSSes. This feature is not used for NS-VC configured via VTY or NS-VC
to a SGSN.

Sponsored-by: On-Waves ehf
2013-10-24 10:01:18 +02:00
Jacob Erlbeck 5405a104bb gb: Fix NS RESET/RESET_ACK abnormal cases
This changes the implementations for the reception of RESET and
RESET_ACK to be compatible with 3GPP TS 08.16, 7.3.1:

- Just send a RESET_ACK with correct values back to the SGSN when a
  RESET with an invalid NSVCI or NSEI has been received.
- Check RESET_ACK for matching NSEI and NSVCI.
- Ignore unexpected RESET_ACKs.

In addition, use RESET_ACK from a BSS to update the BSS source
address based on the NSVCI to be tolerant with changing UDP source
addresses/ports.

Sponsored-by: On-Waves ehf
2013-10-24 10:01:18 +02:00
Jacob Erlbeck a52ba0175f gb: Fix gprs_nsvc_delete() to free ctr group
This fixes a SEGV error that happens the next time the statistics
are updated.

Addresses:
 Program terminated with signal 11, Segmentation fault.
 #0  0xb7711fa5 in rate_ctr_group_intv (grp=<optimized out>) at
 rate_ctr.c:107
 107             for (i = 0; i < grp->desc->num_ctr; i++) {
 #0  0xb7711fa5 in rate_ctr_group_intv (grp=<optimized out>) at
     rate_ctr.c:107
 #1  rate_ctr_timer_cb (data=0x0) at rate_ctr.c:129
 #2  0xb770ec59 in osmo_timers_update () at timer.c:243
 #3  0xb770ef7a in osmo_select_main (polling=0) at select.c:133
 #4  0x08049987 in main (argc=3, argv=0xbfba8084) at
     gb_proxy_main.c:306

Sponsored-by: On-Waves ehf
2013-10-24 10:01:18 +02:00
Jacob Erlbeck bf0219654b gb: Fix gprs_active_nsvc_by_nsei()
The state matching condition is inverted. This is corrected by this
fix.

Sponsored-by: On-Waves ehf
2013-10-17 14:45:27 +02:00
Jacob Erlbeck 5e6d679df3 gb: Fix gprs_ns_rx_reset to not create NS-VC duplicates
Under special circumstances (see below) receiving a NS-RESET leads to
duplicated NS-VC entries.

This happens when the source port of a NS-VC changes to a new one
that has already been used by another NS-VC.

This patch changes gprs_ns_rx_reset() to check for this case and to
use the existing NS-VC object. The NS-VC object that was associated
with the source address before is detached from this source but kept
in the NS-VC list so that it can be reattached when a correspondent
NS-RESET is received later on. Meanwhile it will have a cleared link
layer address which will not match a real link info.

A new counter NS_CTR_REPLACED is incremented each time when the NS-VC
object is replacing another one. A new signal S_NS_REPLACED is added
which gets dispatched in this case, too.

Another new counter NS_CTR_NSEI_CHG is incremented each time when the
NSEI of a NS-VC object (with fixed NSVCI) changes.

Ticket: OW#874
Sponsored-by: On-Waves ehf
2013-10-15 10:20:34 +02:00
Jacob Erlbeck 96550e0321 gb: Add functions to access the LL part of the NS-VC objects
Adds the functions gprs_ns_ll_copy() and gprs_ns_ll_clear(). Renames
gprs_ns_format_peer() to gprs_ns_ll_str(). All of these functions
uniformly access the link layer part within the NS-VC objects.

Sponsored-by: On-Waves ehf
2013-10-15 09:48:41 +02:00
Jacob Erlbeck 6901715124 gb: When sending on a NS-VC group use the first active NS-VC
Currently this first NS-VC with a matching NSEI is always used to
send a UNITDATA message via gprs_ns_sendmsg(). If the NS-VC found is
either dead or blocked, an error is returned.

This patch changes to code to skip blocked or dead NS-VCs while
searching and return the error if no usable NS-VC is found. This
makes it possible to have several NS-VCs per connection group.

Sponsored-by: On-Waves ehf
2013-10-14 13:35:43 +02:00
Jacob Erlbeck b6390f9bd8 gb: Use the NS-VCI to find an existing NS-VC
Currently when a NS-RESET is recevied over a link that has not yet
been associated with a NS-VC, the NSEI is used to find an existing
NS-VC. If one is found, the reset procedure is initiated.

This behaviour is not conformant with 3GPP TS 08.16 (see chapter
4.2.3) which allows to use several NS-VC between two endpoints in
parallel.

The patch changes the implementation to use the NSVCI instead
of the NSEI to search for an existing NS-VC object.

Ticket: OW#874
Sponsored-by: On-Waves ehf
2013-10-08 14:51:17 +02:00
Jacob Erlbeck 05395a63b7 gb: Fix NS-RESET response message order
According to 3GPP TS 08.16, 7.3 "Reset procedure" the entity
receiving a NS-RESET PDU responds with a NS-RESET-ACK and 'then'
starts the test procedure which essentially means, that a NS-ALIVE
gets sent and a timer is started.

Currently the NS-ALIVE is sent before the NS-RESET-ACK.

This patch fixes the implementation by reversing the order in which
these messages are sent.

Sponsored-by: On-Waves ehf
2013-10-08 14:51:13 +02:00
Jacob Erlbeck 84cdc70e0b gb: Separate nsvc creation from NS message processing
This patch refactors gprs_ns_rcvmsg() by moving the parts relevant to
the NS messages into the new functions gprs_ns_vc_create() (nsvc
object creation) and gprs_ns_process_msg() (main NS automaton). These
do not contain code that directly depends on the link layer (they
call other functions that still do). This reduces the gprs_ns_rcvmsg()
function to calling these two functions and optionally setting up the
link layer specific fields of the nsvc.

Sponsored-by: On-Waves ehf
2013-10-08 14:50:46 +02:00
Holger Hans Peter Freyther c62a1bf4d5 libosmogb: Add function to close NS instance without destroying it 2013-07-06 23:36:16 +02:00
Holger Hans Peter Freyther 2c3393d9e3 gprs_ns: Allow to set the DSCP for the UDP socket.
Allow to tag the NS service with a custom DSCP.
2013-03-25 12:06:36 +01:00
Andreas Eversberg aaccdac55d Fix: gprs_ns_destroy() now frees all NSVCs and its timers
Freeing memory of registered timers and file descriptors cause corrupt
lists.
2012-09-29 20:36:31 +02:00
Holger Hans Peter Freyther 3c16de2954 freebsd: Make libgb compile on FreeBSD
Include header files for recfrom/AF_INET and include a
struct ip_hdr as it is not available on *BSD.
2012-07-12 14:13:41 +02:00
Harald Welte 641f7cee5d libosmogb: move files to proper location and fix build 2012-06-17 23:05:26 +08:00