Age | Commit message (Collapse) | Author | Files | Lines |
|
|
|
Use the connect_to_msc method to connect to the MSC and
create structure to handle and forward messages to the
real BSC.
|
|
|
|
Harald actually pointed out that this feature is just NAT. We want
to connect n-real BSCs to one BSC Mux. We will talk the ip.access
protocol and SCCP over of this link.
The mux will drop certain GSM messages (like the reset), it will
replace source local reference (NAT functionality) and it will handle
some GSM08.08 specially.
Get the thing started...
|
|
Currently "write memory" will not store the rtp_base_port of the
network. Fix that by writing it out in write_net. Also set it to
4000 by default in the MGCP and in the BSC.
|
|
|
|
The LAI generation wants to have 16bit unsigned, just keep
them like this already. This means the int32_t will be truncated
inside the get_*_code methods which is better than doing it
somewhere else.
|
|
-1 is assigned in case the variables are not set. This means
it must be a signed type (as the comment says), now really use
a signed type.
|
|
We want to use the real number on the Um... Using the core
network code is totally wrong in this scope...
|
|
* Be able to have a country code in the air but use a different
country code when talking to the core network.
* Now both country and network code can be different on air and
on the MSC communication.
|
|
This is partially reverting 0603c9d9e58b5d29105361a89ab8cb295da29366,
it is true that the ip.access Wireshark dissectors differentiate
TCH/H from TCH/F but in my test I'm unable to send RTP on to the
BTS. It might be that the RTP payload provided in the MDCX is not
the one it will accept with the 0x05 mode. More work needs to be
done to understand this, that is the reason it is comitted to the
on-waves's branch instead of master.
|
|
* Make it possible to have a different MNC in the RSL traffic
than in the core network.
* Introduce the "core network code NUMBER" variable. If it is
set this network code will be used in traffic with the MSC.
* Use the core_network_code number when sending a packet to
the MSC
* Regenerate the LAI (this is where I could have a bug) when
sending packets to the BTS.
* Add size checks.
This is not tested, I might got something wrong.
|
|
* It is the same as local endpoint port
|
|
* Add the new forward audio option
|
|
|
|
With forward IP in the config and early bind on we will
simply forward RTP data on the endpoints from BTS to the
forward IP address.
This is implemented by disabling MGCP functionality when
a forward IP address was specified, setting the forward IP
in the endp->remote and assigning a ci != CI_UNUSED.
Early bind will make sure the sockets are created, the BSC FD's
are registered and then the normal dispatch code will
do the forwarding.
|
|
* For half rate we also need to set the 3rd bit to one
* See GSM08.08 §3.2.2.51 and then §3.2.2.11
|
|
Handover is a high level decision, it can span multiple BSCs
and belongs mostly into the MSC domain.
|
|
Conflicts:
openbsc/include/openbsc/Makefile.am
openbsc/include/openbsc/gsm_data.h
openbsc/src/Makefile.am
openbsc/src/abis_rsl.c
openbsc/src/chan_alloc.c
openbsc/src/gsm_04_08.c
openbsc/src/gsm_data.c
openbsc/src/vty_interface.c
The biggest problem is the moving of the RTP code into
the RSL layer. This may break quite some things...
|
|
For the time being RSL has to know about Layer4 and upwards
and is using the RTP socket class....
|
|
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.
|
|
the statistics will give us some idea about the network load and
performance.
|
|
|
|
TP_VPF_ENHANCED - not in TP_VPF_ABSOLUTE
|
|
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
|
|
it's sufficient if we keep the state of cell barring in one place
|
|
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.
|
|
|
|
Possible crash fixes by preventing accessing the
array out of bounds.
|
|
* Use >= in this case as we start counting the trx from 0
* This is fixing a problem with multi trx config
|
|
|
|
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.
|
|
After receiving the HANDOVER COMPLETE on the new channel, we mark the
old channel as INACTIVE and try to release it ASAP.
|
|
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.
|
|
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.
|
|
|
|
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>
|
|
- 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>
|
|
|
|
|
|
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.
|
|
Our RTP sockets are no longer just for the proxy mode, so having
"proxy" in the function name is really misleading.
|
|
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.
|
|
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.
|
|
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.
|
|
and instead declare it in gsm_data.h
|
|
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.
|
|
|
|
PAGING_COMPLETED can be signalled without an active lchan in
case it was unable to page the repsective subscriber.
|
|
|