Commit Graph

581 Commits

Author SHA1 Message Date
Holger Hans Peter Freyther 079353ad1f [statistics] Do the syncing to db from within the bsc_hack
Change the counters_store_db function to be a generic for_each
function taking a function pointer and data. Use that in bsc_hack
to store it to the DB.

This is removing the DB requirement and will allow to handle
the counter values in different ways without making the counter
list public.

I verified that the syncing is still taking place.
2009-12-23 05:30:47 +01:00
Holger Hans Peter Freyther 6fced2fd0a [statistics] Make counter_db_store internal
Do not expose DB functionality on this level
2009-12-23 05:16:13 +01:00
Holger Hans Peter Freyther b61e3b2158 Import the new logging architecture
This is the new logging architecture, including

* support for multiuple logging targets like stderr and vty
* log levels in addition to categories/subsystems
* filtering based on imsi, i.e. only see events for one subscriber
* dynamically change log level for each category for each vty
2009-12-22 22:32:51 +01:00
Harald Welte e2b8eceee7 pretty-print statistics in 'show statistics' 2009-12-22 21:47:48 +01:00
Harald Welte 8387a49e39 print last measurement report during 'show lchan' 2009-12-22 21:43:14 +01:00
Harald Welte f9a43c45ea fix sql table creation for 'Counters' table 2009-12-22 21:40:42 +01:00
Harald Welte ffa55a4e87 statistics: Introduce 'struct counter' instead of using unsigned long
This has the advantage that counters can be added all over the code
very easily, while having only one routine that stores all of the
current counter values to the database.  The counters are synced
every 60 seconds, providing relatively fine grained statistics
about the network usage as time passes by.
2009-12-22 20:42:40 +01:00
Harald Welte 4983921af1 [gsm_04_11] Replace hardcoded transaction_id by real allocation
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-22 13:45:58 +01:00
Sylvain Munaut 4010f1e6f4 bts: Allow config of RACH control parameters tx-integer & max retrans
Tweaking theses can be useful especially tx-integer that influence
both the spread of rach attemps and the delay between two attemps.

Looking up GSM 04.08 3.3.1.1.2 & 10.5.2.29 can help determine good
values. The default are choosed with a wide spacing between attemps
(tx integer = 9 -> T=12 & S=217 (non-combined CCCH/SDCCH) or 115 (for
combined CCCH/SDCCH)). This alleviates the problem of responding to
several RACH attempts by a same MS, allocating several RF channels when
only 1 is needed.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-22 13:43:26 +01:00
Sylvain Munaut ff1f19e199 Implement a better sending of pending SMS
The previous implementation had some shortcomings:
 - If the MIN ID given was not the exact id of the first unsent SMS,
 it would try to submit the same sms several time until id++ finally
 made id go to the next one.
 - If a subscriber had several SMS pending it would try to submit
 them individually (only to get rejected because a paging for that
 subscriber was already in progress)

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-22 13:22:29 +01:00
Harald Welte 9c4f6b5dca missing semicolon at end of statement 2009-12-22 13:16:27 +01:00
Harald Welte b908cb7e0e Display current channel usage load in 'show bts' and 'show network'
This is just the load at one given instant.  We definitely also want to see
some averages and record the measurements in a database later.
2009-12-22 13:11:28 +01:00
Holger Hans Peter Freyther c80210641a [vty] Document the various T??? we are ausing.
Provide a small individual documentation string.
2009-12-22 08:27:21 +01:00
Holger Hans Peter Freyther 0a64603db9 [misc] Move handover into libmsc.a
Handover is a high level decision, it can span multiple BSCs
and belongs mostly into the MSC domain.
2009-12-22 08:19:42 +01:00
Holger Hans Peter Freyther 4f5456c040 [misc] Move rtp_proxy.c into the libbsc.c
For the time being RSL has to know about Layer4 and upwards
and is using the RTP socket class....
2009-12-22 07:48:20 +01:00
Holger Hans Peter Freyther 92ffd926ef [gsm48] Move gsm48_parse_meas_rep to gsm_04_08_utils
Move the function over to the _utils side as handover
measurement is compiled into libbsc and we don't want
to end up with linking errors.
2009-12-22 07:45:17 +01:00
Harald Welte 24ff6ee0a3 keep some internal statistics inside OpenBSC
the statistics will give us some idea about the network load and
performance.
2009-12-22 00:41:05 +01:00
Harald Welte a992a36d5f it's LOGL_ERROR, not LOG_ERROR 2009-12-21 23:44:40 +01:00
Steffen Neubauer ac0c13c02c [sms] bugfix: additional functionality indicator only appears in TP_VPF_ENHANCED - not in TP_VPF_ABSOLUTE 2009-12-21 23:27:54 +01:00
Harald Welte 73d4fce151 make sure bootstrap_bts() only contains static initialization
values that might change at runtime are moved to set_system_infos()
which we might now also call at runtime to update the BTS with
changes in the SI
2009-12-21 23:12:19 +01:00
Harald Welte 713550120c remove duplicate flag for cell barring
it's sufficient if we keep the state of cell barring in one place
2009-12-21 23:08:18 +01:00
Harald Welte 1394fea03f ipaccess: Fix two minor bugs regarding multi-TRX setup
we need to set newbfd->priv_nr to 2+trx_id, rather than keeping
it '2' all the time, as it is used to look-up the e1i_ts when
we receive a packet.  A constant '2' would always match to TRX 0.

we also need to keep one separate bit for each TRX state in order
to properly generate the EVT_E1_TEI_UP event for trx > 0.
2009-12-21 23:01:33 +01:00
Harald Welte 6a22c0135a [gprs] SI 13 should only be generated on C0 (BCCH-carrying TRX) 2009-12-21 19:10:55 +01:00
Holger Hans Peter Freyther 306b7219ac [abis] Do not access an array with N elements at index N
Possible crash fixes by preventing accessing the
array out of bounds.
2009-12-21 17:06:07 +01:00
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