Commit Graph

936 Commits

Author SHA1 Message Date
Holger Hans Peter Freyther 4cffc45cbc [rest_octets] Change data_len to the sizes of the spec
Is that right?
2010-01-07 15:48:27 +01:00
Daniel Willmann 6a9fa7308d [bs11_config] Add pll-setvalue and pll-workvalue commands
These commands let you change the PLL set and work values. Many thanks
to Dieter Spaar for figuring out how to do this!
Now you can just reset your PLL work value if it drifts away due to your
E1 card.
Use it like this: bs11_config pll-workvalue 1000
2010-01-07 14:03:22 +01:00
Daniel Willmann f904fa80ee [bs11_config] Whitespace changes so the help text looks nice 2010-01-07 14:03:22 +01:00
Daniel Willmann 7b1dd748ea [abis_nm] Add abis_nm_bs11_set_pll function to change the set/work value
Whether this function changes the set or the work value depends on your
type of login. In FACTORY login it changes the set value, in FIELD login
it changes the work value (which is what is used by the BS11 to tune the
frequency).
2010-01-07 14:03:22 +01:00
Daniel Willmann 4b054c8788 [abis_nm] Add abis_nm_bs11_infield_logon to logon as user field
As this user you are able to set the PLL work value which is especially
useful if your BS11 got detuned by an inaccurate oscillator in your E1
card.
2010-01-07 14:03:22 +01:00
Daniel Willmann 493db4ee3d [abis_nm] Add generic abis_nm_bs11_logon function
Factoring out common logon functionality will allow us to logon as
different user. abis_nm_bs11_factory_logon now uses this function.
2010-01-07 14:03:21 +01:00
Sylvain Munaut ef24dff2a2 [signal] Differentiate paging success from expiration in SS_PAGING
This is useful information to know and actually fixes a segfault
in rllp.c where lchan is accessed even tough it could be NULL in
case of failure.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-07 10:37:40 +01:00
Sylvain Munaut 65542c7f59 abis_nm: Consider a STATE CHG without avail_status as an empty avail_status
At least some nanoBTS 139 send the last even (going online) as
'enabled' 'unlocked' but no avail status IE (which I guess mean an empty
set, the doc 12.21 isn't that clear about that).

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-07 10:36:24 +01:00
Holger Hans Peter Freyther b3fc1eb53c [vty] Move db usage out of the libbsc (fork dumping of subscr) (2nd part)
Follow up on 424c4f0e29. As pointed out
by Sylvain on the mailinglist I need to remove this here as well.

Do not call db.c code from code that is located in libbsc.a
2010-01-06 09:44:09 +01:00
Holger Hans Peter Freyther b91a106932 [si] Go through the system_information structs and add static_asserts
The structs are correct, the problem is coming from the rest octets
2010-01-06 06:38:14 +01:00
Holger Hans Peter Freyther 424c4f0e29 [vty] Move db usage out of the libbsc (fork dumping of subscr)
vty_interface.c is part of libbsc.a but it started to use code
which is found in db.c recently. Fork the subscriber dumping and
provide more information on the layer3+ (MSC) commands. This
is restoring the separation again.
2010-01-06 06:00:40 +01:00
Harald Welte (local) 0b11414f38 print full lchan name when recycling it 2010-01-03 11:02:54 +01:00
Sylvain Munaut 4719307f50 gsm_data: Move auth related structure earlier
This is gonna be needed by the next commit ...

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:54:30 +01:00
Sylvain Munaut d7c9e5cad8 encryption: Import a GPL comp128 implementation
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:54:07 +01:00
Sylvain Munaut 8608e7c133 gsm_04_08: Add RAND debug output in gsm48_tx_mm_auth_req
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:53:39 +01:00
Sylvain Munaut bd55a6dd31 gsm_04_08: Specify key_seq when calling gsm48_tx_mm_auth_req
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:53:22 +01:00
Sylvain Munaut 99792900e8 vty: Add command to set auth algo & Ki for a subscriber
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:51:55 +01:00
Sylvain Munaut af29264039 vty: dump subscriber authentication (a3/a8) infos if available
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:51:03 +01:00
Sylvain Munaut 062d5efc5c db: Add methods to set auth{info,tuple} for a subscriber
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:50:34 +01:00
Sylvain Munaut c5f488b6bc db: Add declaration for get_auth{info,tuple_for_subscriber
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:50:03 +01:00
Sylvain Munaut e1cb4debb0 db: Fix bad size comparison when retrieving Ki
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:48:42 +01:00
Sylvain Munaut c863cbb171 gsm_data: Fix sres to be 4 bytes
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:48:23 +01:00
Sylvain Munaut 70881b7e8a db: Add issued/use_count/key_seq fields to AuthTuples
Theses will be useful to know if we can reuse the tuples or if
we should renew. The 'issued' is currently purely informative.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:17:35 +01:00
Sylvain Munaut 77d334ac4d db: Fix type of algorithm_id (NUMERIC -> INTEGER)
This fixes a DB warning and no need for NUMERIC here.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:16:15 +01:00
Sylvain Munaut deebb113ac db: Fix missing commas in AuthTuples table creation
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:13:14 +01:00
Sylvain Munaut 1f6c11fda8 abis_nm: Introduce & use a nm_is_running function to test gsm_nm_state
This returns true if the gsm_nm_state can be considered 'running'.
Note that we also accept availability==0xff (which is a code for
no value) because according to 12.21 it is perfectly valid.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:11:24 +01:00
Sylvain Munaut 15e1024e49 update .gitignore
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:11:07 +01:00
Sylvain Munaut 504807001d silent_call: Add option to choose channel type
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:10:47 +01:00
Sylvain Munaut b6c273e9e3 vty: Register logging_set_log_level_cmd
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:10:00 +01:00
Sylvain Munaut 7de67960e7 [bsc_init] Send OPSTART if SITE_MANAGER reports off-line
The exact sequence the states the BTS goes through is slightly
different for one of the nanoBTS 139 I have and it needs this
to start.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-01-03 10:07:11 +01:00
Harald Welte 730bc653d1 hlrstat: Print numeric MCC/MNC in case no name is available 2010-01-01 15:08:38 +01:00
Harald Welte 510087752e introduce and implement silent_call_reroute() and silent_call_rx()
Thise two functions are interfacing with the 04.08 layer 3 to
determine if a particular message should be handled inside
the OpenBSC layer 3, or if it should be handled in the silent call
handler.
2010-01-01 10:59:20 +01:00
Harald Welte 83579ca8ff keep 'silent call' state in struct lchan
This enables us to reliably detect if a lchan is part of a silent
call or not.
2010-01-01 10:59:19 +01:00
Holger Hans Peter Freyther f31e4745bb [misc] Utilize rf_locking by setting the nm_state.administrative
* On start the vty code will call the abis_nm method and this
  will set the administrative state to unlock/lock
* During startup the BTS will report its state as well and would
  possible overwrite the set administrative. We are only going
  to update the administrative if it was 0 before. This appears
  to work on all of my tests. In case this will not be the case
  for others we will have to split the administrative into two
  sets one for the BTS and one for the BSC.
2009-12-31 03:05:52 +01:00
Holger Hans Peter Freyther f7dbd589ab [ipaccess] Remove some code duplication in the recently added firmware flashing.
Share the creation of the sw_load.
2009-12-30 09:32:05 +01:00
Holger Hans Peter Freyther 7992867f4b [abis] Refactor sw descr generation to a new methods
* This is used in sw_load_init and sw_load_end and both needs
  to be touche for every BTS. Move it into a common method.
* This was only verified on the nanoBTS.
2009-12-30 09:25:30 +01:00
Holger Hans Peter Freyther 1356c08cc8 [abis] Dispatch a IPAC restart ACK/NACK signal
* Add the NACK version to the list
* Dispatch the signal when we receive the message
* Handle it in ipaccess-config by exiting the application
2009-12-30 09:00:01 +01:00
Holger Hans Peter Freyther 2e83782b1c [ipaccess] Restart only after setting the OML IP, software load
* Do not issue the restart right aways if we have OML IP or
  software load in the queue (hint, we need a real queue of operations
  to carry out... with one big state machine)
* Change the signal_data of ipacc ACK/NACK to contain the msg type
  and the bts pointer.
* Issue a restart for software load and OML and use the BTS pointer
  we got out of the new signal data.
2009-12-30 08:38:43 +01:00
Holger Hans Peter Freyther f9811defe2 [ipaccess] Make SW activation work by filling out sw_load1 and sw_load2
We are filling sw_load1 with the information found with type
0x1000 and sw_load2 with type 0x2001. It appears from the protocol
traces that these information is not extracted from them. We also
need to include the \0 from the string.

With this firmware flashing seems to work.
2009-12-30 08:11:18 +01:00
Holger Hans Peter Freyther 322127413e [ipaccess] Close the firmware file as well 2009-12-30 07:33:23 +01:00
Holger Hans Peter Freyther dade8980e3 [ipaccess] Move firmware analysis into the ipaccess-config utility
* This turns ipaccess-firmware.c into a plain helper, fix the
  ipaccess name...
2009-12-30 07:08:39 +01:00
Holger Hans Peter Freyther 1f71d9c4c0 [ipaccess] Document the software argument for firmware loading 2009-12-30 06:55:38 +01:00
Holger Hans Peter Freyther af351a21f2 [ipaccess] Start using talloc in the firmware code
* We are not leaking anything... *yeah*, talloc rocks
2009-12-30 06:42:17 +01:00
Holger Hans Peter Freyther 0183edd18c [ipaccess] Change the name to be slightly better.. 2009-12-30 06:42:16 +01:00
Holger Hans Peter Freyther c9f8a6dca3 [ipaccess] Expose the sub header list as well.. 2009-12-30 06:42:16 +01:00
Holger Hans Peter Freyther 4a98cad85e [ipaccess] Turn firmware parsing into a routine so it can be used
* text3 seems to be a version as the text content starts
  with a 'v'
* move the sdp_firmware into the ipaccess.h and declare
  the function. The headers are returned through a list.
2009-12-30 06:42:16 +01:00
Holger Hans Peter Freyther 8f99562474 [ipaccess] Add return values to the analyze_file 2009-12-30 06:42:16 +01:00
Holger Hans Peter Freyther 67b05d590b [ipaccess] There is only one second magic number
* The second magic number is only a short and it is
  the same for all of my cases
* This also means that the first and second header
  are the same which means the unknown 8 byte are
  header and file size... and the 122 bytes are
  actually multiple strings (just all empty on the
  outermost SDP). Adding the strings left us with 120
  bytes so we have two bytes of unknown usage..
* This is now capable of parsing outer and inner SDP
  files and print their header.
2009-12-30 04:40:52 +01:00
Holger Hans Peter Freyther 1684e79365 [ipaccess] Allow to parse the second magic2 as well
* The internal SDP appears to have a different magic number
  than the first entry and a slightly different packet format
* There are 8 byte of binary for at the beginning and the header
  ends with a table pointing to some strings and then the actual
  firmware follows.
* We currently only parse the strings of that header.
2009-12-30 04:40:52 +01:00
Holger Hans Peter Freyther b1414d99c4 [ipaccess] Start the parser recursively...
* Start parsing the sub SDPs with the same analyze method
2009-12-30 04:40:52 +01:00
Holger Hans Peter Freyther 1029f84435 [ipaccess] Read the " SDP" and version first and then the rest of the header
Read everything we need to determine the version first and then
the rest. This will allow to be able to poke into the other SDP
bits.
2009-12-30 04:40:51 +01:00
Holger Hans Peter Freyther e29be15ac5 [ipaccess] The firmware format is recursive...
The something3 points to the next start of the SDP
entry. The four bytes in front of the " SDP" are not
known and just discarded. Prepare to be able to
recursively parse the SDP header...
2009-12-30 04:40:51 +01:00
Holger Hans Peter Freyther 086ffa51b4 [abis] Add ACK signal and send it on SET NVATTR ACK
* Add the signal definition to signal.h
* Dispatch the signal from abis_nm.c
* Handle it in ipaccess-config.c and say we are done with work
2009-12-30 04:40:50 +01:00
Holger Hans Peter Freyther e5198967a6 [ipaccess] Use the right variable... *sigh*
* I will refactor all this in the future..
2009-12-30 04:40:49 +01:00
Harald Welte (local) 93f4207ce6 ipaccess-config: re-enable DNM logging, add support for multi-TRX 2009-12-29 11:00:48 +01:00
Harald Welte (local) d48f4ebb24 rsl: add new 'gsm_trx_name()' function and use it 2009-12-29 11:00:41 +01:00
Harald Welte (local) 7971d3d281 ipaccess input: Print BTS number that has disappeared 2009-12-29 11:00:37 +01:00
Harald Welte (local) 5fe33189a9 rsl_sendmsg: Print message in case trx == NULL 2009-12-29 11:00:27 +01:00
Harald Welte (local) 82ff397e31 export the 'trx_is_usable() function and use it from paging
this ensures we don't send paging requests to currently inactive transceivers.
2009-12-29 11:00:18 +01:00
Harald Welte 1887f9d153 Introduce gsm_lchans_name() for human readable lchan state name
Also, use this new function to dump lchan state on VTY and to
improve readability of RSL log messages.
2009-12-29 10:53:25 +01:00
Harald Welte 8e93b7908f RSL: Introduce LCHAN_S_REL_REQ state
This state will help us to differentiate between channels where we have
requested the release, and channels that are actually released.
2009-12-29 10:53:25 +01:00
Holger Hans Peter Freyther ebdcee27b8 [ipaccess] Start reading the header entry
* Read the entry and print it out
2009-12-29 08:38:12 +01:00
Holger Hans Peter Freyther 07a4026b38 [ipaccess] Start figuring out what the header entry is meaning.. 2009-12-29 08:38:12 +01:00
Holger Hans Peter Freyther c823c89c76 [ipaccess] Use the u_intX_t types in the firmware tool 2009-12-29 08:38:12 +01:00
Holger Hans Peter Freyther 567b3261d9 [ipaccess] Attempt to read the header entries.. 2009-12-29 08:38:12 +01:00
Holger Hans Peter Freyther 46a920c36c [ipaccess] Do not pick in the wrong headers...
I must have picked in the wrong section of these
files... There are some kind of header entries
that are all 138 byte long and this is the total
length...
2009-12-29 08:38:12 +01:00
Holger Hans Peter Freyther 0b864db429 [ipaccess] Send a NVATTR to activate the new software after load end
* The struct is similiar to the one in abis_nm..
* The generation of the data is similiar to sw_end_load and sw_init_load
  and we should unite this..
2009-12-28 16:40:44 +01:00
Holger Hans Peter Freyther c7aabcad1b [ipaccess] Handle LoadAbort coming from the BTS.
* Be bale to abort the load when the BTS is rejecting the file..
2009-12-28 16:40:44 +01:00
Harald Welte (local) 66169152f6 vty: replace'logging level' numeric value with human readable string 2009-12-28 13:42:55 +01:00
Harald Welte (local) 7b37d9710d set the TRX nominal power by default and/or VTY 2009-12-28 13:42:47 +01:00
Harald Welte (local) 19ef62a0a5 Introduce and use gsm_lchan_name() in addition to gsm_ts_name()
In many cases we actually want a name / unique ID for the lchan,
not just for the on-air timeslot... especially in SDCCH/8 case,
where 8 SDCCHs share one timeslot...
2009-12-28 13:42:33 +01:00
Harald Welte (local) 9538efc8a7 RLL: print human-readable value of RLM CAUSE in ERROR IND 2009-12-28 13:42:03 +01:00
Harald Welte (local) 3e46031f52 Introduce new ACT_REQ state to prevent race condition during channel allocation
When we allocate a channel, we send the RSL CHAN ACT REQ and wait until we get
a CHAN ACT ACK.  Only the ACK will change the state, so there is a race where
we allocate that same channel to a different channel request before we get
the ACT ACK.

Introducing a new ACT_REQ state resolves this issue.
2009-12-28 13:41:16 +01:00
Harald Welte (local) ccd8845449 rename gsm_lchan_name() to gsm_lchant_name() 2009-12-28 13:41:06 +01:00
Harald Welte (local) 2f5df85c26 fix segfault in CHAN RQD log message 2009-12-28 13:40:39 +01:00
Harald Welte (local) 91b603db57 correctly print chan act nack error 2009-12-28 13:40:32 +01:00
Harald Welte (local) 28f1d37380 print TS name when out of resources during CHAN RQD 2009-12-28 13:40:12 +01:00
Harald Welte (local) 9fcf6d78b7 correction of RTP timestamps is a NOTICE event, not debug 2009-12-28 13:38:23 +01:00
Harald Welte (local) b29b57a198 include BTS and TRX number in TRX overload message report 2009-12-28 13:38:18 +01:00
Holger Hans Peter Freyther 8f31a8fdae [abis] Set rc to 0 to avoid running into a warning about unknown states
When we have received the End Ack we are just doing nothing as we
are done. This means rc remains -1 and we will print a warning but
there is no need to have a warning...
2009-12-28 11:48:12 +01:00
Holger Hans Peter Freyther 326a632c46 [ipacess] Implement sw_load_end for the nanoBTS
* This should be shared with the sw_load_init routines
  as it is the about the same.
2009-12-28 11:45:43 +01:00
Holger Hans Peter Freyther c5dc0f7ac7 [ipaccess] Properly increment the segs_in_window
Somehow this should be done in the fill method..
2009-12-28 11:28:51 +01:00
Holger Hans Peter Freyther 5a2291e96a [ipaccess] No need to use fdopen for the file (that was leaked too) 2009-12-28 10:23:56 +01:00
Holger Hans Peter Freyther 71bc11e757 [ipaccess] Implement the Load Segment messages... 2009-12-28 10:04:26 +01:00
Holger Hans Peter Freyther 64d9ddde5d [abis] Warn if sw_load_segment is not implemented for the given bts type 2009-12-28 09:21:18 +01:00
Holger Hans Peter Freyther cf269a7f85 [ipaccess] Send the correct Software Load Init for the ipaccess BTS
* The FOM header needs to be different. We need to address the
  base station transceiver, bts, trx set to 0 and ts to 255
* We need to transfer the the \0 of 'id' and 'version'
* We need to issue a NM_ATT_SW_DESCR (just the value)
* We need to use 16bit length for the other two ids..
* After this our Software Load Init is getting an Ack.
2009-12-28 09:05:16 +01:00
Holger Hans Peter Freyther a6faea83e0 [ipaccess] Verify the SDP header before flashing
Print a big fat warning that we do not carefully check the
firmware as the format is not known and that flashing could
be dangerous..
2009-12-28 09:05:16 +01:00
Holger Hans Peter Freyther ab2c8b109d [ipaccess] Start flashing once the BTS has started enough...
Strictly speaking we would only need to start the Site Manager
and could probably start flashing afterwards but it is more easy
to have one config path...
2009-12-28 09:05:16 +01:00
Holger Hans Peter Freyther f413a0811a [ipaccess] Add firmware download option to ipaccess-config
This will mostly work like the downloading in bs11_config
and is based on the bs11_config state machine as well. Once
it is working we can see how to unite both implementations.
2009-12-28 09:05:15 +01:00
Holger Hans Peter Freyther 30b9ecda33 [ipaccess] Verify the size part of the header 2009-12-27 14:07:40 +01:00
Holger Hans Peter Freyther a25b20c174 [ipaccess] Call it ipaccess-firmware 2009-12-27 14:07:40 +01:00
Harald Welte f6f2ef9d24 move get_string_value() und get_value_string() into debug.c
this makes bsc_mgcp and ipaccess-proxy compile again
2009-12-27 11:24:55 +01:00
Sylvain Munaut 258e2f9a9c gsm_04_11: Support for implicit CP-ACK in case of multi-SMS
See GSM 04.11 Chapter 5.4 for details. The idea is that when
multi-SMS are mobile originated, it's possible the CP-ACK of
the previous transaction to be lost and the reception of a
new CP-DATA for a new transaction should close previous transaction
"as-if" we had received the CP-ACK ...

Note that testing is hard since it's an exceptional condition that's
hard to create. I tested by temporarly disabling CP-ACK processing
and checked it worked as expected.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-27 01:09:41 +01:00
Harald Welte (local) 73b82bbf92 print TS name in RLL ERR IND 2009-12-26 22:48:25 +01:00
Harald Welte (local) fc05750cd8 [rsl] correctly print handover detect and connection fail 2009-12-26 22:48:21 +01:00
Harald Welte (local) 198d5ad6f4 print LAC and BTS number when showing location update reject 2009-12-26 22:48:16 +01:00
Harald Welte (local) 93c6284772 fix missing space in log message 2009-12-26 22:48:12 +01:00
Harald Welte (local) b79bdd99e5 [debug] add new 'logging level' command to set loglevel more user friendly 2009-12-26 22:48:09 +01:00
Harald Welte (local) 47df39931c generate INFO events for CC SETUP and LOC UPD REJ 2009-12-26 22:48:00 +01:00
Harald Welte (local) 240ce88185 add 'get_string_value()' as inverse function of 'get_value_string()' 2009-12-26 22:47:55 +01:00
Harald Welte (local) 441e483bd4 [db] A new subscriber is an INFO event, not NOTICE 2009-12-26 22:47:48 +01:00
Harald Welte (local) 1f3ecd4050 'classmark1' is not an integer field in the database 2009-12-26 22:47:43 +01:00
Harald Welte (local) 6589858167 [meas rep] fix parsing of BSIC in third reported neighbor cell 2009-12-26 22:47:33 +01:00
Harald Welte 7c639a05a3 [handover] print INFO message when doing handover 2009-12-26 00:29:18 +01:00
Harald Welte 303e5e0314 [meas rep] print the neighbor index when debugp'ing a neigh cell meas 2009-12-26 00:29:05 +01:00
Harald Welte eaa95d545e fix off-by-one error when mapping from meas rep to neighbor cell 2009-12-26 00:28:45 +01:00
Harald Welte 950eca9b76 [meas_rep] Add raw neighbor index into per-cell parsed meas rep 2009-12-26 00:28:37 +01:00
Harald Welte a06c35e9e3 [meas rep] cosmetic cleanup 2009-12-26 00:28:27 +01:00
Harald Welte 469b001b19 [meas rep] Correctly parse neighbor cell index of first reported neighbor cell 2009-12-26 00:28:23 +01:00
Sylvain Munaut 42a5652eb2 system_information: Fix BCCH Allocation when only 1 BTS present
The current code used the variable bitmap format, but
that's not possible since in this format the base ARFCN is
part of the set. That lead to a neighbor list containing ARFCN 0.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-24 15:11:00 +01:00
Sylvain Munaut d6c35f6e8a gsm_04_11: Release SMS transaction only after starting next one.
This ensures that we don't re-use the same transaction ID.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-24 15:10:06 +01:00
Sylvain Munaut c4052cf9a8 gsm_04_11: In gsm411_send_sms_lchan fix transaction id error handling
We need transaction_id to be a int (as returned by trans_assign_trans_id)
to detect the error condition -1.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-24 15:10:01 +01:00
Sylvain Munaut 926fcecc2d transaction: Change id allocator method to be 'circular'
The idea is to find the highest used id and try to get the
next. This way when there are transactions back to back with
an overlap, we go 0 1 2 3 4 5 6 0 1 2 ...

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-24 15:09:55 +01:00
Harald Welte d0cf7ba687 introduce multiple log levels (DEBUG/INFO/NOTICE/ERROR) to SMS code 2009-12-24 15:08:18 +01:00
Harald Welte 2e6d4684ff add (and use) new subscr_name() function to get name or IMSI 2009-12-24 14:50:24 +01:00
Harald Welte 844eab1df5 rsl: fix "CONNECTION FAIL: RELEASING" message 2009-12-24 14:49:07 +01:00
Harald Welte 8410597dd7 [debug] Change the default log level to LOGL_NOTICE
This marks the departure from printing all the debug messages to the console by
default.  We only print NOTICE and WARNING level messages by default

If you're interested in more details, you need to enable it via command
line options or the VTY
2009-12-24 13:48:33 +01:00
Harald Welte 77563daf79 Add LOGL_INFO messages about subscriber attach/detach 2009-12-24 13:48:14 +01:00
Harald Welte 19a3f0b120 print ARFCN, LAC and CID when bootstrapping RSL 2009-12-24 13:39:34 +01:00
Harald Welte fb33957405 properly check for EAGAIN in recv() calls
If recv() has no more messages on a non-blocking socket, errno will be EAGAIN,
not the return value!
2009-12-24 13:35:18 +01:00
Harald Welte e98d4278d0 [handover] CRCX ACK without HO reference is normal, not an error 2009-12-24 13:27:02 +01:00
Harald Welte da956931fa if we recv() from an abis-ip socket, don't consider -EAGAIN an error 2009-12-24 12:49:43 +01:00
Harald Welte 5b8ed4398e [logging] differentiate DEBUG, NOTICE and ERROR log levels in NM and RSL 2009-12-24 12:20:20 +01:00
Harald Welte 5d24ba1eb4 don't print directly to stderr, use LOGP() 2009-12-24 12:13:17 +01:00
Harald Welte 50720e76fe 04_08: Differentiate between DEBUG and ERROR messages
also, don't use stderr directly anymore
2009-12-24 11:50:20 +01:00
Harald Welte d0c19148dd [debug] Introduce DREF debug category for reference counting 2009-12-24 11:46:44 +01:00
Harald Welte ae1f159dc4 Converrt the database later to use DEBUGP/LOGP instead of stderr 2009-12-24 11:39:51 +01:00
Harald Welte 0b906d0e1a db: coding style cleanup 2009-12-24 11:39:51 +01:00
Holger Hans Peter Freyther 426da090db [ipaccess] Move ipaccess utilities into a dedicated subdirectory 2009-12-24 11:28:29 +01:00
Holger Hans Peter Freyther 9094cbaf9c [ipaccess] Spend some more time on figuring out the format 2009-12-24 11:28:29 +01:00
Harald Welte 7ed2529c5b debug: add missing va_end() 2009-12-24 11:14:03 +01:00
Harald Welte aa8989c4d5 debug: workaround for strange va_list corruption bug 2009-12-24 11:12:11 +01:00
Harald Welte aa6c9ca48b debug: make sure we always zero-terminate after snprintf() 2009-12-24 11:11:54 +01:00
Harald Welte 3cefa9aaa0 vty: sub-divide talloc contexts and include them in talloc report
The VTY code makes so many allocations that a full report is
simply too long to provide any useful information.  So we sub-divide
it in multiple contexts, and report only one level deep at SIGURS1.

We also introduce SIGUSR2 for the full detailed VTY report.
2009-12-24 10:51:56 +01:00
Sylvain Munaut 28f811c87f db: Fix compile warning, declare db_sms_get_unsent_by_subscr
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2009-12-24 10:13:46 +01:00
Harald Welte 4c70454bae channel allocator: don't allocate channels of unavalable TRXs
In case we have multiple TRX configured, but not all of them are
actually active/operational, we should not try to allocate channels
from such transceivers.
2009-12-24 10:10:16 +01:00
Harald Welte 02cbff09df fix typo in talloc_ctx causing counters not to show up in talloc report 2009-12-24 10:07:36 +01:00
Harald Welte d6847a940a use enum for operational state 2009-12-24 10:06:33 +01:00
Harald Welte 026a6c3389 counter: create their own talloc context for better readability 2009-12-24 10:04:09 +01:00
Harald Welte 30d2ebddd6 move msgb talloc context into talloc_ctx.c
This keeps the ordering right, independent of link ordering, it
will ensure that the talloc dump will also catch msgb related
memory leaks.
2009-12-24 09:43:25 +01:00
Harald Welte 09f7ad0ff7 fix merge artefact from db.c 2009-12-24 09:42:07 +01:00
Harald Welte 5c706bbaf2 Merge remote branch 'origin/master' 2009-12-24 09:38:38 +01:00
Harald Welte 3606cc5765 [authentication] Code for retrieving authentication data from SQL DB
This is the first step towards supporting actual A3/A8 authentication.
2009-12-24 09:37:34 +01:00
Harald Welte a16ef3d23f ipaccess-proxy: Fix two memory leaks 2009-12-23 23:35:51 +01:00
Harald Welte 61cc306a55 debug: Fix typo DMM -> DNM (we don't need DMM twice)
This prevented NM related log messages from showing up at stderr
2009-12-23 23:03:57 +01:00
Harald Welte afdca0f3df input/ipaccess: Differentiate between LOGL_ERROR and DEBUG
also: make sure we properly reset the OML/RSL UP flags on a dead socket.
2009-12-23 23:01:56 +01:00
Harald Welte 87ed5cd4ad introduce #defines for ip.access RSL and OML UDP ports 2009-12-23 22:47:53 +01:00
Harald Welte 2ca7c31429 Add ipaccess-proxy, a proxy for ip.access A-bis over IP
This proxy allows us to restart OpenBSC while the BTS's are kept
running with their CCCH/BCCH alive.  This is very useful to
make sure the phones don't roam to other networks while restarting
OpenBSC.

The proxy also intrduces UDP sockets for injecting UDP packets
into the A-bis data stream.
2009-12-23 22:44:04 +01:00
Harald Welte b7bcb79bea Fix segfault in case BTS has more TRX than we have configured 2009-12-23 18:24:31 +01:00
Holger Hans Peter Freyther bf2bdc6e84 [ipaccess] The next byte appears to be size...
Using okteta to display the size in bigendian and
then selecting from the start to the " SDP" I get
the same number...
2009-12-23 13:09:27 +01:00
Holger Hans Peter Freyther e0d2ff4c2e [ipaccess] The second four bytes appear to be always the same 2009-12-23 13:03:12 +01:00
Holger Hans Peter Freyther 65d67dc222 [ipaccess] Start adding a tool that analyzes the ipaccess header
So far I have not much idea about the format. It is starting with
the magic byte and the header is spanning until the next occurence
of the " SDP" marker.
2009-12-23 12:52:30 +01:00
Holger Hans Peter Freyther 66e8219f96 [sw_load] It turns out there is a header that needs to be read
The magic " SDP" is occuring twice in the file. The first time
seems to be the file header and the second time it is with the
payload. We will need to parse this somehow...
2009-12-23 08:06:31 +01:00
Holger Hans Peter Freyther e7ff91342e [sw_load] For the nanoBTS just open the firmware
* The two version strings are not in an easy to parse header
  and from my trace it appears like the whole file is sent
  to the BTS. So just open the firmware file..
2009-12-23 07:26:57 +01:00
Holger Hans Peter Freyther 004e055cfd [ipacess-config] Remove one of my bogus debugging statements 2009-12-23 05:31:36 +01:00
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 5dbd71e31d [sccp] Provide dummy db_store_counter... 2009-12-23 05:13:48 +01:00
Holger Hans Peter Freyther 3b05a7affa [channel] Compile statistics.c into the test. 2009-12-23 05:13:29 +01:00
Holger Hans Peter Freyther f9b1f30558 [debug] Make the test case compile and it is still passing 2009-12-23 05:08:12 +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