Commit Graph

184 Commits

Author SHA1 Message Date
Holger Hans Peter Freyther 0b7f4b36be [lac] The lac must be 16 bit. Change it in gsm_bts and vty parsing
The LAC can be 16bit of size. the generation of the LAI, struct
gsm_subsriber and the BSC<->MSC was already using it as a
16bit (short) value.

Change struct gsm_bts to parse 16bit and change the vty configuration
parsing code to deal with a short too.
2009-09-30 05:49:26 +02:00
Holger Hans Peter Freyther 3ee5d3e8af [gsm0408] Move paging handling to gsm_04_08_utils.c
Add one method to extract the MI which will allow to load
the gsm_subscriber depending on the MSC/BSC setup and then
use gsm48_handle_paging_resp to finish the paging response
handling.
2009-09-28 12:50:49 +02:00
Holger Hans Peter Freyther adc1478a47 [gsm0408] Move send_siemens_mrpci to gsm_04_08_utils.c 2009-09-28 12:50:49 +02:00
Holger Hans Peter Freyther c4a49e3e2d [bsc] Store the cell_identity in gsm_bts and set it on the SI3 and SI6
Transfering the cell_identity from BSC to MSC is required for the
on-waves.com support. Allow to set the cell_identity in the cfg
file and patch the system information tables to set it.
2009-09-28 06:04:40 +02:00
Holger Hans Peter Freyther 2223025e21 [tmsi] Make the tmsi a 4 octet number
tmsi is four octets long, there is no need to make it a string
and then jump through hoops to convert it to a number. Keep the database
using it as a string to benefit from the NULL handling of the db.

Introduce the reserved tmsi which has all bits set to 1 according
to GSM 03.03 §2.4 and start checking for it and make sure the db
code will never allocate such a tmsi.
2009-09-28 05:14:25 +02:00
Harald Welte 23b710fa4f Merge branch 'master' into encryption 2009-09-27 11:13:55 +02:00
Sylvain Munaut 849f554c87 [gsm_04_08] Fix gsm48_tx_mm_auth_req implementation
It was mainly missing the key_seq field, causing the
command to just be rejected by the ME.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-09-27 11:10:17 +02:00
Harald Welte 4381cfe41b add VTY/configfile command for setting encryption (A5) level
This is just configuring the gsm_network property, nobody uses it yet
2009-08-30 15:47:06 +09:00
Harald Welte 08d91a5b26 A5 support for RSL and 04.08 (not used yet)
This just adds the 04.08 and RSL bits for A5, but not the logic
for performing authentication.

The caller would first set lchan->encr and then call
gsm48_send_rr_ciph_mode(lchan), which encapsulates the 04.08
CIPHERING MODE COMMAND into a RSL ENCRYPTION COMMAND and sends it
to the BTS for execution + forwarding.
2009-08-30 15:37:11 +09:00
Holger Hans Peter Freyther 5d0e56f722 [gsm48] Introduce a gsm48_generate_mid_from_imsi method
Prefix generate_mid_from_tmsi with a gsm48_, create a new method
to binary encode the imsi. Add a unit test for parsing and decoding.

The implementation can parse the data it generated and the
last octet seems to be filled with the end mark.
2009-08-20 13:59:14 +02:00
Holger Hans Peter Freyther d1862d7cf9 [gsm48] Move parsing of the MI from to gsm_04_08_utils.c
The parsing of the IMSI is needed for the MSC part as well. Move
it to the gsm_04_08_utils.c so it can be used.
2009-08-20 13:57:12 +02:00
Holger Hans Peter Freyther e4e8bf4dd0 [subscr] Change the signature... the gsm_network is in the subscr
Remove the extra parameter from the method, the network can be
taken from the subscriber.
2009-08-20 13:56:45 +02:00
Holger Hans Peter Freyther e78074eb07 [debug] Make the hexdump parameter const
This way it can be used from values coming TLVP_VAL.
2009-08-20 13:56:45 +02:00
Holger Hans Peter Freyther 1494a768c1 [bsc] Move the GSM 04.08 helper functions to gsm_04_08_utils.c
The existing gsm_04_08.c implementation is mixing BSC and MSC
behavior. Move some simple parsing and generation functions over
to gsm_04_08_utils.c to allow a different MSC to define the policy.
2009-08-17 09:52:42 +02:00
Harald Welte (local) 026531ec92 store all APDU's received from the MS in the database
This helps us to analyze data such as RRLP location information for
later analysis.
2009-08-16 10:40:10 +02:00
Harald Welte (local) 6eef564e2d add support for APPLICATION INFO RR messages 2009-08-15 23:32:44 +02:00
Harald Welte e903edf580 provide return code from paging_request() function
this enables the caller to detect if the paging request was rejected
by the paging layer, especially in case it is already paging this very
subscriber.

In the case of SMS / 04.11, we used to have a memory leak of struct gsm_sms's,
since we would only free them from the paging succeeded/expired callbacks.
2009-08-15 03:16:17 +02:00
Harald Welte (local) 15920de8ce add 'show subscriber cache' vty command to debug subscriber refcount leaks 2009-08-14 20:27:16 +02:00
Harald Welte (local) daef606502 respect the link_id, not only the SAPI from SMS code
SMS related messages are all sent over SAPI=3.  But in addition
to that, we also need to send it over the correct link identifier,
i.e. SACCH or main signalling channel
2009-08-14 11:41:12 +02:00
Harald Welte (local) aa9dc19ca7 remove FIRST_CONTACT signal, the subscriber flag is sufficient 2009-08-13 13:49:51 +02:00
Harald Welte (local) 0e451d0f2e add 'ms max power' vty command to set the maximum MS power in dBm 2009-08-13 10:14:26 +02:00
Harald Welte 7984d5c260 add functions to send AUTH REQ and REJECT 2009-08-12 22:56:50 +02:00
Jan Luebbe 9eca37f93c fix problems with tmsi uniqueness in the subscriber table 2009-08-12 22:22:42 +02:00
Jan Luebbe ebcce2aae1 allocate an extension when creating the subscriber 2009-08-12 22:22:20 +02:00
Jan Luebbe 31bef49be2 token support in the DB 2009-08-12 22:21:56 +02:00
Jan Luebbe b0dfc31d7d flag new subscriber structs in memory and send a signal 2009-08-12 21:03:00 +02:00
Harald Welte (local) 5dececfa41 implement bts->cell_barred feature, configurable in VTY 2009-08-12 20:55:00 +02:00
Harald Welte (local) 69de397ff4 add a authorization policy field to the network and VTY
this is not being used yet
2009-08-12 20:53:36 +02:00
Harald Welte 4321feeb20 siemens vendor specific message type and IE definitions 2009-08-10 17:40:43 +02:00
Harald Welte fc0d952602 introduce bts->chan_alloc_reverse flag
The channel allocator can be set in ascending or descending order.

Ascnending means we first try to allocate channels on TRX0, then TRX1, etc.
Descending means we first try to allocate cahnnels on TRXn, then n-1 down to 0.
2009-08-10 13:46:55 +02:00
Harald Welte 21bd3a52f1 move chcomb4pchan to public abis_nm_chcomb4pchan() function 2009-08-10 12:21:22 +02:00
Daniel Willmann 65f68fa961 Add {create, delete}-bport1 and bport0-{star, multidrop} to bs11-config
This adds the possibility to bs11-config to add the second bport and
change the line config to star or multidrop.
2009-08-10 11:49:36 +02:00
Harald Welte 5b570676cd add new 'is_siemens_bts()' function 2009-08-10 10:08:01 +02:00
Harald Welte 31c489390c make rsl_siemens_mrpci() use struct rsl_mrpci 2009-08-10 10:07:33 +02:00
Harald Welte 67fa91bf42 Add function to generate siemens-specific MRPCI RSL message
MRPCI (MS RF Power Indicator) informs the BTS about the power
capabilities of the MS.
2009-08-10 09:51:40 +02:00
Holger Hans Peter Freyther 34e97495a6 misc: Add prototypes to header files, include more header files
Fix various warnings about implicit declarations of functions.
2009-08-10 07:54:02 +02:00
Holger Hans Peter Freyther bc621c2e1e misc: Fix make distcheck
Add some missing header files
2009-08-10 06:48:54 +02:00
Harald Welte b7e8116bfa add T3101 to release lchan in case MS never responds to IMMEDIATE ASSIGN 2009-08-10 00:26:10 +02:00
Harald Welte 4198561305 add SMS CP timer TC1* to tear down lchan in case MS never responds to CP-DATA 2009-08-10 00:24:32 +02:00
Harald Welte 39c7debc9c verify bs11 channel combination constraints 2009-08-09 21:49:48 +02:00
Harald Welte cf845cb8d3 add comments about channel combinations 2009-08-09 21:49:37 +02:00
Harald Welte 1e0a8ea4d5 Merge branch 'master' into config_file
Conflicts:
	openbsc/src/vty_interface.c
2009-08-09 19:55:21 +02:00
Harald Welte 2ebabca32a new db_sms_get_unsent_for_subscr() function
The function retrieves the oldest not-yet-sent SM for the given subscriber
2009-08-09 19:05:21 +02:00
Harald Welte 1a6f79818e move search for existing lchan for subscriber to new function
There's now a new function called 'lchan_for_subscr()' which can be
used to determine if there is any existing lchan for this subscriber.
2009-08-09 18:52:33 +02:00
Harald Welte cb8f443399 implement proper SAPI3 handling for SMS
SM's need to be transferred over their own RLL connection on SAPI3, rather than
the default SAPI0 connection that we're using for signalling like 04.08
RR/MM/CC.

This is not that much of a problem in the case of SMS SUBMIT from the MS to
the netwrok.  In that case, the MS will start its primary RLL connection
with SAPI3, and we can just respond with SAPI3.

However, in the case of SMS DELIVER to a MS, we first page the MS, it then
establishes SAPI0.  We then need to explicitly request the establishment of
a SAPI3 RLL connection, before we can send CP-DATA with our RP-DATA and DELIVER
RPDU

Now that we have the bsc_rll.c code, we can actually wait for a paging
response, and from the paging response request the establishment of the SAPI3
connection.  We will be called back once that connection is open and can
successively start transmission of the SM.
2009-08-09 14:59:02 +02:00
Harald Welte ce2eb871e1 fix SMS RP message type definitions to reflect SMMA and MT ERROR 2009-08-09 14:58:21 +02:00
Harald Welte 66b6a8dde0 move ms_pwr utility function to gsm_utils.c
also, they should both take the gsm_band parameter, not a BTS
2009-08-09 14:45:18 +02:00
Harald Welte e122855f3c define data structure for gsm48_cell_sel_par IEI of SI3 / SI4 2009-08-09 14:38:32 +02:00
Harald Welte edcc527371 Add new BSC RLL layer of code
A caller can call rll_establish(lchan, link_id) and a callback to the GSM RLL
code.  He will get called back if the RLL link is established or receives some
error message, or the establishment times out.

We need this for proper SMS implementation, where we need to restablish a SAPI3
RLL link before transmitting the actual CP-DATA messages.
2009-08-09 13:47:35 +02:00
Harald Welte 42581829ec the actual config file code (not just config files)
this was missing from commit a08a9acdb6
2009-08-08 16:12:58 +02:00
Harald Welte 76042188e0 first 'working' SMS implementation
we now have the full path from the MS into the database (SUBMIT), as well as
back from the database to the MS (DELIVER).  The database gets correctly
updated once a SMS has been successfully delivered.

What's still missing is the periodic scan over all undelivered messages,
trying to deliver them to the respective MS.  So far, you have to manually
trigger this on the telnet interface with 'sms send pending 1'
2009-08-08 16:03:15 +02:00
Harald Welte 1d014a5dfc parse_btstype() can use const qualifier 2009-08-08 15:38:29 +02:00
Harald Welte d2dc1de9d9 start using the RLL RELEASE procedures
So far, we immediately disable the RF channel without following a proper
RLL RELEASE procedure.  This patch changes this.

If we locally terminate the connection, the channel allocator now triggers a
RLL RELEASE REQuest, which is responsed by the MS with a RLL RELEASE CONFirm,
based on which we send the RF CHANnel RELease to the BTS.

If the MS terminates the connection, we receive a RLL RELEASE INDication,
based on which we trigger RF CHANnel RELease to the BTS.
2009-08-08 13:15:07 +02:00
Harald Welte c7310385ca implement nanoBTS frequency error test
This helps us to detect the frequency error of BS-11 if it is located
next to the nanoBTS 900.

If 'ipaccess-config -l' is called, it will produce a report like
<0020> ipaccess-config.c:85 TEST REPORT: test_no=0x42 test_res=0
<0020> ipaccess-config.c:108 ==> ARFCN  220, Frequency Error     22
<0020> ipaccess-config.c:108 ==> ARFCN    1, Frequency Error    -37
<0020> ipaccess-config.c:108 ==> ARFCN   10, Frequency Error      0
<0020> ipaccess-config.c:108 ==> ARFCN   20, Frequency Error     11
<0020> ipaccess-config.c:108 ==> ARFCN   53, Frequency Error      5
<0020> ipaccess-config.c:108 ==> ARFCN   63, Frequency Error     -4
<0020> ipaccess-config.c:108 ==> ARFCN   84, Frequency Error     11
<0020> ipaccess-config.c:108 ==> ARFCN  101, Frequency Error      0
<0020> ipaccess-config.c:108 ==> ARFCN  123, Frequency Error    -52

where in this case the ARFCN 123 is the BS-11 with a frequency error
larger than all the other (regular) BTS in the vicinity.
2009-08-08 00:02:36 +02:00
Harald Welte bd30506628 Merge branch 'master' into sms 2009-08-07 00:33:03 +02:00
Harald Welte 65da9125df add function declaration for gsm_pchan_parse() 2009-08-07 00:32:22 +02:00
Harald Welte 99a452a197 Merge branch 'master' into sms 2009-08-06 19:20:22 +02:00
Harald Welte 1989c089da add function for performing 'CONNECT MULTI-DROP LINK" as per GSM 12.21
don't be confused, BS-11 does not need this.  But since I wrote the code
before knowing that, I can just as well commit it.
2009-08-06 17:58:31 +02:00
Harald Welte 63589bef52 add HARDCODED_BTSn_TS to define the base TS for each BTS 2009-08-06 17:38:10 +02:00
Harald Welte 2da8629b7c parse and decode Siemens specific T_MSRFPCI message 2009-08-04 02:31:05 +02:00
Harald Welte ed640c4519 add ip.access specific channel combinations 2009-08-01 18:23:01 +02:00
Harald Welte ea5cf30d15 issue a signal once a subscriber is attached or detached 2009-07-29 23:14:15 +02:00
Harald Welte e34e117ff1 Merge branch 'master' into sms 2009-07-29 18:05:54 +02:00
Harald Welte 9943c5bbac generalize channel activation / channel mode modify
* we only need one piece of code to calculate rsl_ie_chan_mode from
  our run-time data structures (gsm_lchan)
* add some more channel modes for TCH/H and data
* use enum's to make the compiler warn us about unhandled enum values
* make sure the caller determines the (signalling,speech,data) mode
2009-07-29 15:41:29 +02:00
Harald Welte 16f3b84476 comments about the bearer_capability structure 2009-07-29 11:39:02 +02:00
Harald Welte 5072be9491 bearer capability definitions 2009-07-29 11:38:46 +02:00
Harald Welte 2f33d01aaf Merge branch 'master' into sms 2009-07-28 18:40:45 +02:00
Harald Welte 805f64486b add RTP proxy mode for ip.access
Up until now, we only supported direct RTP streams between ip.access BTS.
With this commit, the user can specify '-P' to the command line to enable
a RTP/RTCP proxy inside OpenBSC.  The nanoBTS will then send all their voice
data to OpenBSC, which will relay it to the respective destination BTS (which
can be the same BTS).

The default behaviour remains unchanged.  Without '-P' on the command line,
RTP/RTCP is exchanged directly.
2009-07-28 18:25:29 +02:00
Harald Welte 5e98a5366e send a [new] signal in case of IPAC_DISCONNECT_INDication 2009-07-28 18:02:05 +02:00
Harald Welte 9869c0a0c8 implement human-readable RSL cause printing 2009-07-28 17:58:09 +02:00
Harald Welte ead7a7b320 add new rtp_proxy code, but not use it yet
The rtp_proxy.[ch] code is intended to be used as a transparent
RTP/RTCP proxy, relaying the media streams from one ip.access BTS
to another.  In an 'ideal' network, this is obviously not needed,
since the BTS's can send those streams directly between each other.

However, for debugging, 'lawful interception', transcoding or interfacing
a TRAU/E1 based BTS, we actually need to process those RTP streams
ourselves.
2009-07-28 00:01:58 +02:00
Harald Welte f3efc597d1 further steps towards better, transaction based SMS 2009-07-27 20:11:35 +02:00
Harald Welte 0803b98cc0 move definition of 'struct gsm_trans' to transaction.h 2009-07-26 14:24:11 +02:00
Harald Welte b8b4073e18 look-up by (subscriber, protocol, transaction_id) tuple
... rather than the previous incomplete (lchan, transaction_id) tuple
2009-07-23 21:58:40 +02:00
Harald Welte b49248bf48 move allocating new transaction_ids to transaction.c 2009-07-23 21:39:00 +02:00
Harald Welte 78283ef151 move allocating new transaction_ids to transaction.c 2009-07-23 21:36:44 +02:00
Harald Welte c072ad6e29 add missing files to git 2009-07-23 21:25:48 +02:00
Harald Welte 9ee4825bbf add missing files to git 2009-07-23 21:25:08 +02:00
Harald Welte 88f0425197 Merge branch 'master' into sms 2009-07-23 21:24:28 +02:00
Harald Welte 39e2eadc99 centralize the code that needs to deal with transaction_id
There were many places in the code where we had to explicitly
reference the transaction_id and put it into a packet.  By introducing
and optional gsm_trans parameter to gsm48_sendmsg(), we can implement
this code once rather than dozens of time.
2009-07-23 21:13:03 +02:00
Harald Welte 761e944182 make sure subscr->net is always set
since a subscriber is an element of the gsm_network, we have to ensure
subscr->net is always set correctly.  We do this by using gsm_network
as an argument to all functions that resolve or create a subscriber.
2009-07-23 19:21:02 +02:00
Harald Welte b3c3faee94 remove bogus 'network' member of 'struct gsm_transaction'
Since a transaction is associated to a gsm_subscriber, and the subsciber
is part of a network, we don't need to have a dedicated transaction->network
pointer.
2009-07-23 19:10:19 +02:00
Harald Welte aa0b29c265 gms_transactions data model reorganization
This changeset factors out gsm_transaction as something independent
of call control in preparation to re-use the code from SMS.  A
transaction is uniquely identified by either its callref, or by
a tuple of (transaction_id, protocol, subscriber).
2009-07-23 19:10:12 +02:00
Harald Welte 596fed40f0 remove bogus 'network' member of 'struct gsm_transaction'
Since a transaction is associated to a gsm_subscriber, and the subsciber
is part of a network, we don't need to have a dedicated transaction->network
pointer.
2009-07-23 19:06:52 +02:00
Harald Welte dcaf5654db gms_transactions data model reorganization
This changeset factors out gsm_transaction as something independent
of call control in preparation to re-use the code from SMS.  A
transaction is uniquely identified by either its callref, or by
a tuple of (transaction_id, protocol, subscriber).
2009-07-23 18:56:43 +02:00
Harald Welte 9176bd46e3 make sure subscr->net is always set
since a subscriber is an element of the gsm_network, we have to ensure
subscr->net is always set correctly.  We do this by using gsm_network
as an argument to all functions that resolve or create a subscriber.
2009-07-23 18:46:00 +02:00
Harald Welte ae05d247af Merge branch 'master' into sms 2009-07-19 18:49:15 +02:00
Harald Welte ae0f2362bb send DEACTIVATE SACCH when sending RR CHANEL RELEASE
As per specification, we first send the RR CHANNEL RELEASE to the MS,
and then tell the BTS to disable the SACCH on that channel.
2009-07-19 18:36:49 +02:00
Harald Welte a1f0ac7eb3 yet again some more ip.access RSL definitions + parsing 2009-07-12 21:59:04 +02:00
Harald Welte 0427a9f31a add some more ip.access RTP related definitions 2009-07-12 11:17:16 +02:00
Harald Welte d83a127bb3 add more ipaccess 12.21 object classes, NSVC only exists once 2009-07-12 10:56:06 +02:00
Harald Welte 20855547bf rename ip.access structure field members and variables
to reflect that we now know their true names/meanings
2009-07-12 09:50:35 +02:00
Harald Welte 86c162dce8 give ip.access RSL IE's their proper names 2009-07-12 09:45:05 +02:00
Harald Welte 0efe9b7006 more ip.access abis_nm attributes
we also rename some existing attributes to reflect reality
2009-07-12 09:33:54 +02:00
Harald Welte 539bc608bd Merge branch 'master' into sms 2009-07-09 23:54:34 +02:00
Holger Hans Peter Freyther a7cd9fc0d1 ipacess-config: Handle NVATTR NACKs in ipaccess-config
Currently we send the attribute changes in a send and forget
fashion. But sometimes the nanoBTS is sending us a NACK, e.g
with a invalid unit id. Start handling the NACK and provide
an error message to the user. The error message is not yet
describing the cause of the error but this is a slight progress
to the previous silent failure.
2009-07-08 23:13:58 +02:00
Harald Welte f0465bd6cb Merge branch 'master' into sms 2009-07-05 14:10:01 +02:00
Harald Welte c2e302dc84 Store classmark1/2/3 in equipment SQL table
For further evaluation/analysis, this patch stores the classmark 1, 2 and 3
values of every equipment in the SQL database.  We can use this non-volatile
data to determine the supported features for each handset that we've ever
seen on our network.
2009-07-05 14:08:13 +02:00
Harald Welte be3e3784dc further SMS work
* implement ID based lookup of gsm_subscriber from database
* look-up recipient and sender subscribers from database
2009-07-05 14:06:41 +02:00
Harald Welte b9c758b2ac more SMS improvements
* describe data structures in gsm_04_11.h
* increae LCHAN RELEASE TIMEOUT for case of long SMS
* convert header field in sql table from NUMERIC to BLOB
* initial handling for validity period
* send RP ERROR messages with meaningful RP CAUSE in case of error
2009-07-05 14:02:46 +02:00