aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/tests
AgeCommit message (Collapse)AuthorFilesLines
2014-07-22gprs: Parse PTMSI and update TLLI accordinglyJacob Erlbeck1-10/+12
This commit adds code to parse the PTMSI in network originated messages - Attach Accept, - Routing Area Update Accept, and - P-TMSI Reallocation Command (see below) to keep track of the TLLI identifying the LLC connection. The P_TMSI Realloc Command specific code is not being tested yet, so a corresponding notice is logged when such a message will be received. NOTE: The gbproxy will lose the TLLI when the MS doesn't receive/use the message (normally the SGSN remembers the old TLLI for some time to avoid this kind of problem). If this happens the MS will probably restart the procedure and the network will have to answer again eventually using one of the above messages which will re-associate the IMSI with the TLLI before the MS can send a PDP Context Request message. Ticket: OW#1192 Sponsored-by: On-Waves ehf
2014-07-22gprs: Add TLV parse functionsJacob Erlbeck2-0/+237
This adds a set of function that parse a single tlv, lv, tv, or v encoded information element. They are complementary to the *_put functions defined in libosmocore's tlv.h file. The functions update the data and data_len fields unless they are a 'match' function and the tag field doesn't match. Sponsored-by: On-Waves ehf
2014-07-22gprs: Fix TLLI cache size computationJacob Erlbeck1-8/+4
Currently the enabled_tllis_count field isn't always decremented when an element is removed from the TLLI cache list. This patch adds the missing update and also adjusts the counter accordingly. Sponsored-by: On-Waves ehf
2014-07-22gprs/test: Rearrange for PTMSI parsingJacob Erlbeck2-34/+199
Add TLLI cache output to gbprox_dump_peers() to include this info into the test output. Separate RA Update Req message handling from Attach Request handling. Note: There is no test case for the P-TMSI Reallocation Command yet. Sponsored-by: On-Waves ehf
2014-07-22gprs: Add counters related to LLC layer patchingJacob Erlbeck1-0/+4
This commit adds the following counters: - attach-reqs: Number of Attach Request messages - attach-rejs: Number of Attach Reject messages - tlli-cache: Size of the TLLI cache Sponsored-by: On-Waves ehf
2014-07-22gprs: Track IMSI/TLLI to control APN patchingJacob Erlbeck2-7/+16
This patch adds IMSI/TLLI connection tracking and uses it to control APN patching based on the IMSI. TLLI entries can expire based on age and/or by limiting the TLLI list size. VTY config-gbproxy: no core-access-point-name disable APN patching core-access-point-name none remove APN if present core-access-point-name APN replace APN if present core-access-point-name none match-imsi RE remove if IMSI matches core-access-point-name APN match-imsi RE replace if IMSI matches tlli-list max-age SECONDS expire after SECONDS no tlli-list max-age don't expire by age tlli-list max-length N keep N entries only no tlli-list max-length don't limit list length RE is an extended regular expression, e.g. ^12345|^23456 Ticket: OW#1192 Sponsored-by: On-Waves ehf
2014-07-22gprs: Store gbproxy patching state per peerJacob Erlbeck2-20/+14
Currently, all patching state is stored globally in the gbproxy. Thus the feature cannot be used safely with a concentrating gbproxy (NAT). This patch moves the state and relevant counters to the gbprox_peer structure. It adds code to resolve the corresponding peer when packets are received by looking at BVCI, NSEI, and BSSGP IEs (BVCI, RAI/LAI/LAC) when the peer is not passed to the gbprox_patch_bssgp_message() function. Test cases are also added for the SGSN->BSS case including test cases with invalid identifiers. Note that this patch should make it possible to use RAI patching at a NAT gbproxy as long as the messages are not encrypted. Ticket: OW#1185 Sponsored-by: On-Waves ehf
2014-07-22gprs/test: Add Detach messages to testJacob Erlbeck2-3/+74
This patch adds a Detach Request (MO) / Detach Accept sequence to the test, followed by another (here invalid) Act PDP Context Req which should be APN patched. Sponsored-by: On-Waves ehf
2014-07-22gprs/test: Added GMM Info and fixed TLLIJacob Erlbeck2-8/+36
Add a DTAP GMM Information message with an IMSI in the BSSGP header to enable the association between IMSI and TLLI. The TLLI of the Routing Area Update messages is set to foreign. Sponsored-by: On-Waves ehf
2014-07-22gprs: Add APN patch support for LLC/GSM messagesJacob Erlbeck2-9/+14
Patch the APN in every 'Activate PDP Context Request' message to the value given by the 'core-access-point-name' command. If the command is given without an APN, the whole APN IE will be removed. If the command is being prefixed by a 'no', the APN IE remains unmodified. The patch mode 'llc-gsm' is added to selectively enable the patching of LLC session management messages. This is enabled implicitely by the patch mode 'llc'. Note that the patch mode should not be set to a value not enabling the patching of LLC GSM messages ('llc-gsm', 'llc', and 'default' are sufficient to patch 'Activate PDP Context Request' messages). Ticket: OW#1192 Sponsored-by: On-Waves ehf
2014-07-22gprs: Add MCC/MNC patch support for LLC/GMM messagesJacob Erlbeck1-8/+8
This patch extends the BSSGP patch code to also patch LLC information elements along with MCC/MNC patching support for the following messages: - Attach Request - Attach Accept - Routing Area Update Request - Routing Area Update Accept - P-TMSI reallocation command Note that encrypted packets will not be patched. Ticket: OW#1185 Sponsored-by: On-Waves ehf
2014-07-22gprs: Implement BSSGP MCC/MNC patchingJacob Erlbeck3-14/+22
This adds a feature to patch the BSSGP MNC/MCC fields of messages going to and coming from the SGSN. To enable this feature, the gbproxy's VTY commands 'core-mobile-country-code' and/or 'core-mobile-network-code' must be used. All packets to the SGSN are patched to match the configured values. Packets received from the SGSN are patched to the corresponding values as last seen from the BSS side. Note that this will probably not work with a gbproxy used for several BSS simultaneously. Note also, that MCC/MNC contained in a LLC IE will not be patched. Ticket: OW#1185 Sponsored-by: On-Waves ehf
2014-07-22gprs/test: Make test output more readableJacob Erlbeck2-274/+159
This patch makes a few changes to improve readability: - change the sendto() hexdump to start with NS instead of BSSGP - use more specific message descriptions instead of 'UNITDATA' - add a title line per test Sponsored-by: On-Waves ehf
2014-07-22mgcp: Change API to remove memory management from the nameHolger Hans Peter Freyther2-7/+2
Jacob pointed out that "free_endp" refers to the memory of the endpoint being freed. What we want is actually a way to release an endpoint (and the resource it allocated) or in the case of the testcase/testapp initialize the data structure correctly. Introduce two names for that.
2014-07-22mgcp: Fix/test the case of a time jump and the resyncHolger Hans Peter Freyther1-0/+47
In case the sender didn't send a couple of frames we will have a time gap that is bigger than the accepted delta. Add a new testcase for this and update the next_time.
2014-07-22mgcp: Add a testcase for 160->80 ptime handlingHolger Hans Peter Freyther1-0/+19
2014-07-22mgcp: Initialise next_time in case the initial timestamp is not 0.Holger Hans Peter Freyther1-4/+6
2014-07-22mgcp: Document transcoding semantic and follow itHolger Hans Peter Freyther2-15/+81
Transcoding from GSM to PCMA can lead to the MGCP MGW sending two PCMA packages with the same sequence number and timestamp. Once with the encoded audio and once completely empty. This is because "state->dst_packet_duration" is 0 in most cases (unless a ptime is forced) and we attempt to encode audio even if there are not enough samples. The encode_audio return will return 0 in that case which is not trated as an error by the mgcp network code. Handle rc == 0 specially and document the semantic.
2014-07-22mgcp: Fix/test reading/writing the sequence numberHolger Hans Peter Freyther2-7/+59
The sequence number was read from the wrong place and then the wrong byte order conversion routine was used so we ended up wirting 0x00, 0x00 into the patched sequence number. Add a testcase for that.
2014-07-22mgcp: Capture the return value of the of the transcode functionHolger Hans Peter Freyther2-192/+205
2014-07-22mgcp: Do not use errx as finding a test failure is too hardHolger Hans Peter Freyther1-6/+12
It took me a long time to figure out that errx just exits and the test output didn't indicate that the application was exited early. Use a printf and good old abort in case of a failure.
2014-07-22mgcp: Re-factor testcase to separate test and setupHolger Hans Peter Freyther1-54/+64
Separate the test from the code necessary for the setup. This is somehow inspired by the PhExample framework of Pharo.
2014-07-07gprs/test: Increase stderr log levelJacob Erlbeck1-4/+20
Enable the generation of more log messages. Sponsored-by: On-Waves ehf
2014-07-07gbproxy_test: Provide enough disabled categories to please valgrindHolger Hans Peter Freyther1-1/+6
An empty log_info is not enough. We need to make sure that at least DLGLOBAL is present. Instead of doing that make sure that we have enough entries. ==26163== Conditional jump or move depends on uninitialised value(s) ==26163== at 0x403B289: osmo_vlogp (logging.c:290) ==26163== by 0x403B3DA: logp2 (logging.c:339) ==26163== by 0x804D027: gbprox_relay2bvci (gb_proxy.c:347) ==26163== by 0x804D3CF: gbprox_rx_sig_from_sgsn (gb_proxy.c:589) ==26163== by 0x804DBFC: gbprox_rcvmsg (gb_proxy.c:685) ==26163== by 0x4052CB0: gprs_ns_process_msg (gprs_ns.c:669) ==26163== by 0x4052F70: gprs_ns_rcvmsg (gprs_ns.c:1053) ==26163== by 0x804BB49: gprs_process_message (gbproxy_test.c:488) ==26163== by 0x804BC4C: send_ns_unitdata (gbproxy_test.c:210) ==26163== by 0x804BDE8: send_bssgp_reset_ack (gbproxy_test.c:243) ==26163== by 0x804B54F: main (gbproxy_test.c:863) ==26163==
2014-07-07mgcp: Verify that the force-ptime is written back to the fileHolger Hans Peter Freyther1-0/+22
When the command was added it was not verified that. Add a very basic MGCP VTY test and test that the string appears in the config.
2014-07-07gbproxy_test: Reset the gbproxy before we reset GPRS NSHolger Hans Peter Freyther1-3/+3
The peers are (talloc) children of the GPRS NS. This means the peers (and the rate counters) are currently being deleted twice. ==23446== Invalid write of size 4 ==23446== at 0x403C243: rate_ctr_group_alloc (linuxlist.h:66) ==23446== by 0x4050974: gprs_nsvc_create (gprs_ns.c:209) ==23446== by 0x405320D: gprs_ns_instantiate (gprs_ns.c:1330) ==23446== by 0x804ABEB: main (gbproxy_test.c:666) ==23446== Address 0x4300694 is 52 bytes inside a block of size 784 free'd ==23446== at 0x4029DA8: free (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) ==23446== by 0x4041B9D: _talloc_free (talloc.c:609) ==23446== by 0x4043292: talloc_free (talloc.c:578) ==23446== by 0x40532D3: gprs_ns_destroy (gprs_ns.c:1363) ==23446== by 0x804ABD7: main (gbproxy_test.c:660)
2014-07-07gbproxy_test: Simplify the test setup by sharing codeHolger Hans Peter Freyther1-30/+24
2014-07-07gprs/test: Add additional gbproxy testsJacob Erlbeck2-1/+460
This adds a test case with several messages to test BSSGP patching. New messages: - BSSGP/DTAP Attach Request - BSSGP/DTAP Attach Accept - BSSGP/DTAP Routing Area Update Request - BSSGP/DTAP Routing Area Update Accept - BSSGP/DTAP Activate PDP Context Request - BSSGP SUSPEND - BSSGP SUSPEND ACK Sponsored-by: On-Waves ehf
2014-07-07gprs/test: Add connect_sgsn() functionJacob Erlbeck1-10/+11
This function abstracts identical code sequences that are used at multiple places. Sponsored-by: On-Waves ehf
2014-07-07gprs/test: Remove verbose parameter of gbprox_dump_* functionsJacob Erlbeck1-26/+26
This parameter is not used (the methods are always called with an argument of 1 in the third position). Thus the parameter is removed completely. Sponsored-by: On-Waves ehf
2014-06-15gprs: Use area terms LAI/RAI as defined in GSM 03.03Jacob Erlbeck1-60/+60
Currently the terms 'Routing area code' (RAC) and 'Location area code' (LAC) are used in several places where 'Routing area identification' (RAI) or 'Location area identification' (LAI) are meant in fact. This patch replaces RAC/LAC by RAI/LAI and 'code' by 'identification' at these places. Note that RAI := MCC MNC LAC RAC, and LAI := MCC MNC LAC (see GSM 03.03, sections 4.1 and 4.2). Sponsored-by: On-Waves ehf
2014-06-15mgcp: Fix SDP formatting of fmtp_extra (Coverity)Jacob Erlbeck1-24/+0
Currently when ftmp_extra is set, a doubled a=rtpmap line is emitted instead of the fmtp_extra info. This patch fixes replaces the formerly copied and pasted but not modified snprintf parameters by the correct ones. Fixes: Coverity CID 1220873 Sponsored-by: On-Waves ehf
2014-06-15mgcp/test: Add test case using the fmtp_extra infoJacob Erlbeck2-0/+69
Add tests setting the fmtp_extra field to check the response generation. This triggers a bug found by Coverity. Addresses: Coverity CID 1220873 Sponsored-by: On-Waves ehf
2014-06-05mgcp: Set net_end audio params in recvonly modeJacob Erlbeck2-0/+12
Currently, if there is no SDP data in the MGCP message received from the net, the fields containing audio encoding information are not set in net_end. So in recvonly mode transcoding would not be set up correctly. This patch changes the implementation of the code handling CRCX and MDCX to use the codec signalled in the MGCP local connection options (field 'a:') if there isn't any SDP data. This is only halfway negotiation, because the codec is used blindly and not matched against the supported ones. Sponsored-by: On-Waves ehf
2014-06-05mgcp: Move transcoding to libmgcpJacob Erlbeck2-2/+2
This patch moves the files relevant to transcoding from src/osmo-bsc_mgcp to src/libmgcp and src/include/openbsc. Makefiles and include directives are being updated accordingly. Sponsored-by: On-Waves ehf
2014-06-05mgcp/test: Add test cases for transcoding and repackingJacob Erlbeck5-3/+935
This patch adds test cases for transcoding and repacking. Sponsored-by: On-Waves ehf
2014-06-04gprs/test: Use valid MCC/MNC for BVC RESETJacob Erlbeck2-110/+110
The code currently uses an encoded sequence of (hex) 10 20 30 40 50 60 as RAI, for which no bijective mapping to the set of representations MCC-MNC-LAC-RAC exists. This patch changes the hard-coded RAI to 11 22 33 40 50 60 which maps to 112-332-16464-96 (and vice-versa). Sponsored-by: On-Waves ehf
2014-05-28channel_test: Return a positive number to claim it was pagedHolger Hans Peter Freyther1-1/+4
This addresses an ASAN issue where the request was already deleted by our callback function. (gdb) where #0 0xb69e7810 in __asan_report_error () from /usr/lib/i386-linux-gnu/libasan.so.0 #1 0xb69e0aff in __asan_report_store4 () from /usr/lib/i386-linux-gnu/libasan.so.0 #2 0x0804ea64 in subscr_send_paging_request (subscr=subscr@entry=0xb5103cb0) at gsm_subscriber.c:212 #3 0x0804edac in subscr_get_channel (subscr=subscr@entry=0xb5103cb0, type=type@entry=2, cbfn=cbfn@entry=0x804969d <subscr_cb>, param=param@entry=0x2342) at gsm_subscriber.c:246 #4 0x080498f7 in main (argc=1, argv=0xbffff804) at channel_test.c:77 Breakpoint 3, subscr_paging_dispatch (hooknum=hooknum@entry=101, event=event@entry=200, msg=msg@entry=0x1323, data=<optimized out>, data@entry=0x8063900 <s_conn>, param=<optimized out>, param@entry=0xb5103cb0) at gsm_subscriber.c:126 126 llist_del(&request->entry); (gdb) b llist_del (gdb) bt #0 subscr_paging_dispatch (hooknum=hooknum@entry=101, event=event@entry=200, msg=msg@entry=0x1323, data=<optimized out>, data@entry=0x8063900 <s_conn>, param=<optimized out>, param@entry=0xb5103cb0) at gsm_subscriber.c:126 #1 0x0804e8a9 in subscr_paging_cb (hooknum=101, event=200, msg=0x1323, data=0x8063900 <s_conn>, param=0xb5103cb0) at gsm_subscriber.c:187 #2 0x080497e9 in paging_request (bts=0xb5b03e70, subscriber=subscriber@entry=0xb5103cb0, type=2, cbfn=cbfn@entry=0x804e881 <subscr_paging_cb>, data=data@entry=0xb5103cb0) at channel_test.c:51 #3 0x0804ea39 in subscr_send_paging_request (subscr=subscr@entry=0xb5103cb0) at gsm_subscriber.c:207 #4 0x0804edac in subscr_get_channel (subscr=subscr@entry=0xb5103cb0, type=type@entry=2, cbfn=cbfn@entry=0x804969d <subscr_cb>, param=param@entry=0x2342) at gsm_subscriber.c:246 #5 0x080498f7 in main (argc=1, argv=0xbffff804) at channel_test.c:77 (gdb) q
2014-05-22mgcp: Add proper length checking for line handlingHolger Hans Peter Freyther1-0/+1
In ae1997248ccb4fba1394267d3051082dfd85448a the handwritten tokenizer was replaced with strtok_r. As part of this change the structural checking of MGCP parameters was stopped. This means that a code like "line + 3" might access beyond the first NUL and be possibly behind the msgb. Manually add size checking again. Manually jumping to the error label is not possible anymore as it has been removed. The result is that invalid lines will be skipped. This is matching the general approach by the IETF RFCs to be permissive in data being received.
2014-05-22mgcp: add voice muxer supportPablo Neira Ayuso3-4/+4
This patch adds the voice muxer. You can use this to batch RTP traffic to reduce bandwidth comsuption. Basically, osmux transforms RTP flows to a compact batch format, that is later on decompacted to its original form. Port UDP/1984 is used for the muxer traffic between osmo-bsc_nat and osmo-bsc_mgcp (in the BSC side). This feature depends on libosmo-netif, which contains the osmux core support. Osmux is requested on-demand via the MGCP CRCX/MDCX messages (using the vendor-specific extension X-Osmux: on) coming from the BSC-NAT, so you can selectively enable osmux per BSC from one the bsc-nat.cfg file, so we have a centralized point to enable/disable osmux. First thing you need to do is to accept requests to use Osmux, this can be done from VTY interface of osmo-bsc_nat and osmo-bsc_mgcp by adding the following line: mgcp ... osmux on osmux batch-factor 4 This just initializes the osmux engine. You still have to specify what BSC uses osmux from osmo-bsc_nat configuration file: ... bsc 1 osmux on bsc 2 ... bsc 3 osmux on In this case, bsc 1 and 3 should use osmux if possible, bsc 2 does not have osmux enabled. Thus, you can selectively enable osmux depending on the BSC, and we have a centralized point for configuration from the bsc-nat to enable osmux on demand, as suggested by Holger. At this moment, this patch contains heavy debug logging for each RTP packet that can be removed later to save cycles. The RTP ssrc/seqnum/timestamp is randomly allocated for each MDCX that is received to configure an endpoint.
2014-05-01db: Fix next fall-out with make distcheckHolger Hans Peter Freyther2-1/+2
2014-04-30db: Add testcase for the db migration.Holger Hans Peter Freyther5-2/+40
2014-04-30db: Add testcase for storing/loading/comparing a smsHolger Hans Peter Freyther1-0/+61
Use the already created subscriber, create a sms and read it back from the subscriber.
2014-04-24ctrl: Extend the testcase for using '09' as numbers on the interfaceHolger Hans Peter Freyther1-0/+43
Verify that '0X' numbers are parsed correctly from the wire interface.
2014-03-23sgsn/ctrl: Add ctrl interface, implement listing subscribersHolger Hans Peter Freyther1-0/+23
Add the control interface with no hierachy right now and implement the first command to list IMSI + Context Address of active sessions. sgsn_cmd_handle could share more code with bsc variant. Fixes: SYS#264, SYS#265
2014-03-23nitb/ctrl: Implement a command to list all active subscribersHolger Hans Peter Freyther1-0/+7
This is only useful for small networks. List the IMSI and MSISDN of all active subscribers. Fixes: SYS#266
2014-03-23nitb/ctrl: Implement creating and deleting subscribersHolger Hans Peter Freyther1-1/+9
Sadly there is no proper foreign key relationship on the tables that related to the Subscriber. This means we can't use a DELETE with Cascade and need to delete everything by hand. To make things worse maybe the SMS/Paging code is still using the subscriber making the operation more dangerous. I had added NULL checks for sender_id/receiver_id at 30C3 so we should not crash in this situation. Fixes: SYS#274
2014-03-23nitb/ctrl: Add command to add/modify a subscriber to the databaseHolger Hans Peter Freyther1-0/+32
The test has been manually verified. Executing the select for the subscribers showed: sqlite> select * from Subscriber; 1|2014-03-23 12:12:46|2014-03-23 12:19:09|2620345||445567|1||0| This created a subscriber with the right IMSI, MSISDN and has it authorized. Fixes: SYS#275
2014-03-23nitb/ctrl: Add ctrl command to set the TRX max_power_reductionHolger Hans Peter Freyther1-0/+20
In case the BTS is connected the new attribute should be set through OML. This is left as a todo item. Addresses: SYS#267
2014-03-20mncc: Complete definitions for all speech traffic frames at MNCC interfaceAndreas Eversberg1-1/+1
The new definitions are: half rate and AMR Change of definition name for bad frame, because it applies to all types of traffic, not only TCH/F. Increase MNCC interface version to 4. Version 3 is skipped, because it was used by older version of Linux-Call-Router which is incompatible with the current version of the MNCC interface.