Commit Graph

607 Commits

Author SHA1 Message Date
Holger Hans Peter Freyther 17c24c9057 [abis] Properly compare obj_inst->trx_nr to bts->num_trx
* Use >= in this case as we start counting the trx from 0
* This is fixing a problem with multi trx config
2009-12-21 17:00:46 +01:00
Harald Welte b720bd3678 make handover algorithm parameters configurable from VTY 2009-12-21 16:51:50 +01:00
Harald Welte f7c28b099f [handover] Real handover algorithm
This implements the handover algorithm (and associated parameters)
as described in Chapter 8 of the book "Performance Enhancements in
a Frequency |Hopping GSM Network" by Thomas Toftegard Nielsen and Jeroen
Wigard.

The parameters such as averaging windows are configured in struct
gsm_network.  We keep some state to trakc up to 10 neighbors as
they are being reported from the MS.

This has so far only been tested in a network with two BTS that
have each other as neighbor.  Networks with morge neighbors might
encounter bugs.
2009-12-21 13:33:10 +01:00
Harald Welte ade773f441 handover: set old channel to INACTIVE state
After receiving the HANDOVER COMPLETE on the new channel, we mark the
old channel as INACTIVE and try to release it ASAP.
2009-12-21 13:33:10 +01:00
Harald Welte b8bfc567b7 RSL: keep track if a channel is active or not
This allows us to block packets that we have received after the channel
is no longer being used.  This is visible during handover, where we still
receive a measurement report after the MS has switched to the new channel.

This leftover measurement report then attempts to trigger another handover,
which si bogus and will fail - and thus only consumes resources.

With the new LCHAN_S_ACTIVE state, we can check for this when processing
the measurement report.
2009-12-21 13:33:10 +01:00
Harald Welte 38fe2a67e1 meas_rep: utility function for processing of measurement reports
This provides two functions: get_meas_rep_avg() to obtain the sliding
window average of one particular field, and meas_rep_n_out_of_m_be()
to check if at least N out of M measurments are >= BE.
2009-12-21 13:33:10 +01:00
Andreas Eversberg 56315f02bb Fix typo s/memcpy/memcmp in trau_frame.c 2009-12-21 01:18:44 +01:00
Sylvain Munaut f77af1fb30 chan_alloc: Delete T3101 on lchan_free as well
If a RF channel is assigned but no response is ever heard from
the phone, we will receive a CONNECTION FAIL from the BTS,
triggering a RF release freeing the channel. Then sometime later,
T3101 will expire as well and free the channel again ...

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-21 01:11:25 +01:00
Sylvain Munaut d5778fc4c7 [db] Fix queries for unsent SMS
- Need to use sms.id for the ORDER BY since 'subscriber' also has 'id'
- Need to add the join clause between 'SMS' and 'subscriber'
- Add a LIMIT 1 (probably no impact for the db size we're dealing with
here, but with large DB and mysql/postgresql this can help the planner)
- (fix a wrong comment in passing ...)

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-21 01:09:57 +01:00
Harald Welte a4e2d04b35 Fix some compiler warnings regarding missing const in rest_octets.c 2009-12-20 17:08:22 +01:00
Harald Welte 9fb1f1065a fix compiler warning and coding style in rtp_proxy 2009-12-20 17:07:23 +01:00
Harald Welte a037902323 [handover] implement TCH RTP stream handover
This patch takes care of handling the RTP streams / sockets during
an in-call handover from one BTS to another BTS.

It only works in combination with rtp_proxy mode.
2009-12-20 17:04:40 +01:00
Harald Welte a72273e176 rename ipacc_connect_proxy_bind() to rsl_ipacc_mdcx_to_rtpsock()
Our RTP sockets are no longer just for the proxy mode, so having
"proxy" in the function name is really misleading.
2009-12-20 16:53:53 +01:00
Harald Welte 17f5bf64f1 Move RTP socket handling out of signal handlers into abis_rsl
This is not really nice, but we will soon have multiple users of
the CRCX / MDCX / DLCX signals, and we cannot guarantee the ordering
of them.  So as a workaround, we move the RTP socket creation and
deletion into the core abis_rsl codebase.
2009-12-20 15:42:44 +01:00
Harald Welte fe03f0d002 don't enable handover unless RTP Proxy is enabled
We cannot support in-call handover of calls without a RTP proxy,
since at the time of the handover the SSRC, sequence number and
timestamp of the RTP frames change.
2009-12-20 14:35:56 +01:00
Harald Welte edbc0f7aea Introduce new MNCC based proxy mode
Since the MNCC API can now send and receive frames to/from the MNCC
application, we can also implement a proxy this way.  Not at the RTP/UDP packet
level, but at the 'TCH speech frame' level.

Especially for handover, we need this mode as the receiver in the BTS needs a
persistent SSRC and monotonic frame numbers / timestamps.
2009-12-20 14:22:11 +01:00
Harald Welte f88c8a02fc remove hand full of 'extern ipacc_rtp_direct' definitions
and instead declare it in gsm_data.h
2009-12-20 14:18:11 +01:00
Harald Welte 392736d38b RTP Proxy: Fix RTP sequence number and timestamp in case of dropped frames
During handover, we will not send RTP frames for quite some time.  However,
the way the rtp_send code is structured, it will increment the timestamp
with a fixed amount every time we send a frame, independent how much wallclock
time has actually passed.

This code is a hack to update the sequence number and timestamp in case it
seems to be wrong.  It makes handover much more reliable.
2009-12-20 13:36:42 +01:00
Harald Welte 31981a0051 add FIXME to IMSI DETACH INDICATION: we need to release all transactions 2009-12-20 13:21:01 +01:00
Harald Welte 0b7b61c6b7 fix segfault in rrlp code in case of unsuccessful paging
PAGING_COMPLETED can be signalled without an active lchan in
case it was unable to page the repsective subscriber.
2009-12-20 13:20:54 +01:00
Harald Welte 5e68183a20 handover: disable default-printing of every measurement report 2009-12-20 00:07:05 +01:00
Harald Welte ea09002e73 handover: no debug message for ever non-handover measurement report 2009-12-20 00:07:00 +01:00
Harald Welte 9f16c87106 handover: don't create negative lchan use counts
trans_lchan_change() takes care of use counts for us.
2009-12-20 00:06:53 +01:00
Harald Welte aca8f158bc Add RTP support for EFR
This is just the minimal support to receive and send EFR codec
RTP frames.

We are missing the code to convert TRAU frames in EFR format!
2009-12-19 23:09:35 +01:00
Harald Welte da7ab74298 RTP-enable MNCC API for LCR + ip.access
Instead of passing TRAU frames down the MNCC API to the call control
application like MNCC, we now decode the TRAU frame into the actual codec
frame.  We do the same with the RTP packets in case of ip.access and
thus have a unified format of passing codec data from the BTS to
an application, independent of the BTS type.

This is only implemented for V1 full-rate at the moment, and needs
to be fixed.
2009-12-19 22:23:05 +01:00
Harald Welte bc814501e8 [handover] add VTY parameter to enable/disable handover 2009-12-19 21:41:52 +01:00
Harald Welte e786c32bc9 [handover] don't use measurement reports with NCELL=7
NCELL=7 inidicates that there was no neighbor cell info in the SI5
on the SACCH.
2009-12-19 21:29:19 +01:00
Harald Welte 50e7fec9b8 system_information: DEBUGP() SI13/5/6 during startup 2009-12-19 21:29:00 +01:00
Harald Welte e2d0d5fa8c system_information: ip.access wants L2_PLEN, BS-11 doesn't
It seems that depending on the manufacturer, there is a need to include
the L2 pseudo-length in the SI5+SI6 messasges (SACCH FILLING)

Thanks to Dieter for pointing this out.
2009-12-19 21:26:54 +01:00
Harald Welte 479015bc1f don't print measurement reports that have no cells 2009-12-19 18:35:56 +01:00
Harald Welte 51cec5f725 measurement report parsing: NO-NCELL-M of 7 tells us no neighbors 2009-12-19 18:35:56 +01:00
Harald Welte 5e3d91bff7 ip.access: Keep a full copy of local and remote IP/PORT in lchan
Keeping all parameters for each RTP connection in the abis_ip member of
lchan will help us with actual TCH handover later on.
2009-12-19 18:35:56 +01:00
Harald Welte f314f6899b add --help message about --rtp-proxy argument 2009-12-19 18:35:56 +01:00
Sylvain Munaut b9f3dce0ae Never allocate transaction ID 7
According to GSM 04.07 11.2.3.1.3 , TID 7 is "reserved
for future extensions".

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-19 03:22:30 +01:00
Sylvain Munaut ea3f674710 Fix subscr ref leak for multi CM SERV REQ
Multiple CM SERVICE REQUEST can happen on a single RR
connection, in this case, since the subscr reference is
tracked through lchan->subscr and will only be put'd once
on lchan_free, we need to make sure we don't get several
reference ....

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-19 03:22:25 +01:00
Sylvain Munaut feaca92fc0 Use 'new' rather than 'unknown' when starting transaction
'unknown' has a negative connotation for a case that's totally
normal so refer to it as 'new' so it doesn't sound like a problem.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-19 03:22:16 +01:00
Sylvain Munaut c56a14181c Fix transaction_id displayed in debug message
In SMS debug messages, we always display the transaction ID
as if we were 'sending' the message.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-19 03:22:04 +01:00
Sylvain Munaut 1d9efd6c9c Fix typos in debug message / comments
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-19 03:21:51 +01:00
Harald Welte 18750cf1df [handover] lchan use count handling in case of trans_lchan_change() 2009-12-18 14:51:48 +01:00
Harald Welte a9fa8dca33 [handover]: make sure the new lchan keeps the subscriber pointer of the old lchan
also, ensure that we don't print debug messages about handover in non-handover
channel activation cases.
2009-12-18 14:50:08 +01:00
Harald Welte 6f7a5a7843 handover: use correct handover lookup function 2009-12-18 11:52:03 +01:00
Harald Welte 386cd2b777 for now we only do handover of TCH channels 2009-12-18 11:49:20 +01:00
Harald Welte e47f96b80c fix segfault in case of handover timer expiration 2009-12-18 11:49:03 +01:00
Harald Welte b1d4c8ed9d logging: introduce log levels at caller site
This introduces a new LOGP() macro together with LOGL_* definition to
support multiple log levels (severities) throughout the codebase.

Please note that the actual logging system does not use them yet,
in this patch we simply introduce the new macros at the caller site.
2009-12-17 23:10:46 +01:00
Harald Welte 6670681251 don't try multiple concurrent handovers for 1 channel 2009-12-17 22:23:21 +01:00
Harald Welte 7cb7a73b4f [vty] ensure we mark fd in writefd once we vty_out() something 2009-12-17 21:59:28 +01:00
Harald Welte fe18d5cba4 call trans_lchan_change() from ho_gsm48_ho_compl() 2009-12-17 17:14:43 +01:00
Harald Welte cc9beb5366 introduce trans_lchan_change() to update transaction about lchan change 2009-12-17 17:13:28 +01:00
Harald Welte 8d77b9540a [handover] first functional handover implementation
With this commit, we can successfully hand over a channel from one cell to
another cell.  We implement asynchronous intra-BSC (but inter-BTS) handover.

Changes:
* introduce new DHO log category
* extend rsl_chan_activate_lchan() with argument for HO reference
* introduce actual minimal handover decision making in handover_decision.c
* various fixes to bsc_handover_start() in  handover_logic.c
2009-12-17 00:31:10 +01:00
Harald Welte 7a7a0d5428 make handover reference a function call argument 2009-12-17 00:25:18 +01:00
Harald Welte 33e6597720 assign measurement report lchan member after memset'ing it 2009-12-16 23:29:34 +01:00
Harald Welte 73ddaeddd2 measurement report: correctly parse BSIC of first neighbor cell 2009-12-16 23:29:12 +01:00
Harald Welte 88a412ac80 ip.access: Keep OML/RSL up/down state per-bts for multi-BTS setups 2009-12-16 17:32:37 +01:00
Harald Welte 6739dfb705 print measurement reports more verbosely 2009-12-16 16:52:07 +01:00
Harald Welte a2f74b8477 04.08: fix off-by-one error while parsing measurement results 2009-12-16 16:49:21 +01:00
Harald Welte 680e2eccef fix bug in bitvec resulting in all bits being set to 0xff 2009-12-16 15:59:24 +01:00
Harald Welte 152b6261f8 [system_information] Print more debugging about what's going on 2009-12-16 11:57:48 +01:00
Harald Welte d12b0fdf51 introduce cache of 6 last recently received measurement reports for each lchan 2009-12-15 21:36:05 +01:00
Harald Welte 0b12103965 add BSIC parameter to gsm_bts_neighbor()
When looking for the gsm_bts of a neighbor cell, use BSIC and ARFCN
tuple rather than just ARFCN for better identification purpose.
2009-12-15 00:21:31 +01:00
Harald Welte 84874c9005 Implement gsm_bts_neighbor() function to determine neighbor BTS
We will need this for the actual handover algorithm implementation, as we will
only know the current BTS and the BCCH ARFCN of the strongest cell in the
measurement reports.  Using this new function, we can resolve the matching
gsm_bts.
2009-12-14 22:33:02 +01:00
Harald Welte f1dae1924a 04.08 MEAS REP: Convert relative cell number to ARFCN
Since we are keeping a bitvec of the neighbor cells, we can now use
bitvec_get_nth_set_bit() to determine the ARFCN for each reported
cell in the 04.08 MEASUREMENT REPORT.
2009-12-14 22:24:28 +01:00
Harald Welte 7f73a1ac58 bitvec: Introduce bitvec_get_nth_set_bit() function
This is particularly important for determining the ARFCN for cells
reported in 04.08 MEAS REP.
2009-12-14 22:23:27 +01:00
Harald Welte 6c40def716 system_information: use bitvec to generate frequency lists
We use a 1024-bit-sized bitvec to generate the BA and neighbor frequency list.

This bitvec is still generated from the list of all BTS's inside the BSC, but
this patch is the first step to generalize this, i.e. generate arbitrary
neighbor lists.
2009-12-14 22:07:14 +01:00
Harald Welte d57f163bd4 bitvec updates and code simplification
* introduce a new bitvec_get_bit_pos() function to determine the bit value
  at a given position inside a bit vector
* make sure bitvec_{get,set}_bit_pos() share code as possible
2009-12-14 22:04:31 +01:00
Harald Welte da760d3d19 [system_information] fix bit map 0 frequency list generation
Our frequency lists for GSM900 were completely wrong, as the bit map 0
encoding was not used correctly.  This patch should fix it.
2009-12-14 20:25:05 +01:00
Harald Welte 1e191c59f6 fix compiler warnings in gsm_04_08.c 2009-12-14 17:51:15 +01:00
Harald Welte ade7a14e75 make sure BSIC is patched into NM tables before initializing BS11 2009-12-14 17:49:52 +01:00
Harald Welte 3d23db43a4 [PATCH] fix MM INFO parsing in vty_interface 2009-12-14 17:49:15 +01:00
Harald Welte 648b6ce083 Add VTY setting for whether or not to sending MM INFO 2009-12-14 09:00:24 +01:00
Harald Welte 37600be76c fix segfault in token_auth on SS_SUBSCR != ATTACH 2009-12-13 12:56:47 +01:00
Harald Welte 7659de1bcb introduce new signal every time we get a mobile identity 2009-12-13 12:39:18 +01:00
Harald Welte eab84a112c [RRLP] make RRLP mode configurable from config file
We now support different RRLP modes (including "none" to disable RRLP),
you can configure it via "rrlp mode" in the "network" section of
openbsc.cfg.
2009-12-13 10:53:12 +01:00
Harald Welte 09b7e7fa43 Gracefully reject non-speech calls
As we currently really only deal with voice/speech calls and don't
support FAX and DATA (CSD) calls, we now gracefully reject them.
2009-12-12 21:36:53 +01:00
Harald Welte 487e6befb8 make speech calls with NECI=1 work
Fix minor bug with speech calls in case of NECI=1
2009-12-12 21:16:38 +01:00
Harald Welte b83d938565 [04.08] use lchan_auto_release to quickly close channel
In some cases, we can try to close the lchan a bit faster than our
lchan release timeout:
* After we've sent LOC UPD ACCEPT and MM INFO
* After a phone has confirmed the RELEASE of a call
2009-12-12 21:00:48 +01:00
Harald Welte 210c850a36 If we're trying to allocate TCH/H but don't have it, fallback to TCH/F
The rationale is as following:

If we have NECI=1, then the phone will request a channel with CHREQ
"0100xxxx Originating speech call from dual-rate mobile station when TCH/H is
 sufficient and supported by the MS for speech calls", then we will try to
allocate a TCH/H [as it is sufficient].

However, if there are no free TCH/H slots on the BTS, we abandon and can't
handle the MO call at all :(
2009-12-12 20:58:20 +01:00
Harald Welte 9385c11727 If we establish a TCH/H voice call, the reason is CALL, not OTHER 2009-12-12 20:57:52 +01:00
Harald Welte 9e2748ed3a [RSL] print human-readable channel type during channel allocation failure 2009-12-12 20:53:23 +01:00
Harald Welte 7322528ca1 [VTY] add more cell reselection parameters to VTY
allow setting of 'cell reselection hysteresis' and 'rxlev access min' from VTY
for experiments with cell reselection.
2009-12-12 18:17:25 +01:00
Harald Welte 1d8dbc4630 print some more RF related information about BTS in VTY 2009-12-12 15:38:16 +01:00
Harald Welte 4bb4738d21 utility functions to convert RXLEV into dBm and vice versa 2009-12-12 15:37:54 +01:00
Harald Welte 854b9b33af fix some integer underflows in MS power calculation 2009-12-12 14:21:16 +01:00
Harald Welte 49685d7bdd Merge remote branch 'origin/master' 2009-12-12 14:11:09 +01:00
Harald Welte d6aa52488a add warning about accept-all network on non-barred cells 2009-12-12 13:44:19 +01:00
Harald Welte 4669f3d9c8 fix compile warning in db.c 2009-12-09 19:19:45 +01:00
Harald Welte 24766091d8 mark lchan2chan_nr() using a 'const' parameter
which fixes some compile warnings at some callers.
2009-12-09 19:18:32 +01:00
Harald Welte 7bcb893eb7 remove execute permission from abis_nm.c 2009-12-06 12:23:47 +05:30
Harald Welte 1085c097e3 location updating reject cause now specified on VTY rather than command line argument 2009-12-06 12:22:59 +05:30
Holger Hans Peter Freyther f49fac2785 [bsc_hack] Ignore the sigpipe...
We might read or write on the OML link when the BTS is
reset and will get SIGPIPE interrupt and be gone... Just
ignore the SIGPIPE we will get the "exception" on the next
run of bsc_select and kill the (old) OML link.
2009-12-06 04:25:05 +01:00
Steffen Neubauer ad69d7f8b2 [sms] trivial: Removed unneeded double check in unbcdify 2009-12-05 12:07:12 +05:30
Harald Welte a897bf3ded [system_information] fix BCCH list generation for GSM900
We have to make sure to skip the global list header
2009-12-05 11:58:24 +05:30
Harald Welte 1dfd0e254a [BS11] don't put invalid channel combination into the config file 2009-12-04 11:23:12 +05:30
Harald Welte d6575f9d29 ip.access: add nanoBTS channel combination constraints 2009-12-02 02:45:23 +05:30
Harald Welte 0603c9d9e5 ip.access speech mode for TCH/H channels 2009-12-02 01:58:23 +05:30
Harald Welte 2c82899135 move RTP socket information from timeslot to lchan
With ip.access, in case of TCH/H, we have one RTP stream for each half-slot
(lchan), not just one per on-air timeslot.  This is quite different from
a classic BTS where the TRAU frames of the two TCH/H channels would be
part of the same 16k sub-slot in a E1 timeslot.
2009-12-02 01:56:49 +05:30
Harald Welte a43f789a0a Replace template-based SYSTEM INFORMATION with real implementation
Before this commit, OpenBSC used templates for the SYSTEM INFO
1, 2, 3, 4, 5 and 6 messages.  Those templates were patched in
various places to reflect the network config like ARFCN.

Now, we actually generate those SI messages ourselves, using
values from the configuration file, and even calculating neighbor
cell lists.

All bts'es that you have configured in OpenBSC will end up in
the neighbor cell list - which should be more than sufficient for
the current small-single-site networks.
2009-12-01 18:04:30 +05:30
Harald Welte 29b9cf8446 make use of new S_GLOBAL_SHUTDOWN signal to properly close pcap_fd
This avoids broken pcap files with partial packets due to non-flushed
buffers.
2009-12-01 17:58:32 +05:30
Harald Welte 3961fcc031 Introduce new S_GLOBAL_SHUTDOWN signal
This is used to notify various parts of OpenBSC that we're shutting
down.
2009-12-01 17:58:26 +05:30
Harald Welte b84ddfc22f Assign default values for T3101 and T3113
Without those default values, old config files will no longer work
after commit 23975e718f
2009-12-01 17:36:54 +05:30
Harald Welte dbb1d88359 [handover] export measurement reports via signal
This patch introduces the S_LCHAN_MEAS_REP signal which is used to export
measurement reports as input to the yet-to-be-written handover algorithm.
2009-11-30 19:16:47 +01:00