aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
AgeCommit message (Collapse)AuthorFilesLines
2015-07-01nat: Provide access to /dev/urandom for the codeHolger Hans Peter Freyther2-0/+12
Instead of doing open/read/close all the time, open the FD in the beginning and keep it open. To scare me even more I have seen /dev/urandom actually providing a short read and then blocking but it seems to be the best way to get the random byes we need for authentication. So one should/could run the cheap random generator on the system (e.g. haveged) or deal with the NAT process to block.
2015-07-01bsc/nat: Fix the structure of the identity request messageHolger Hans Peter Freyther4-8/+28
Unfortunately the basic structure of the response is broken. There is a two byte length followed by data. The concept of a 'tag' happens to be the first byte of the data. This means we want to write strlen of the token, then we want to write the NUL and then we need to account for the tag in front. Introduce a flag if the new or old format should be used. This will allow to have new BSCs talk to old NATs without an additional change. In the long run we can clean that up.
2015-07-01nat: Close the connection after we couldn't find the userHolger Hans Peter Freyther1-0/+1
In case the token was not correct, just close the connection. It is not clear that forcing a new TCP connection is going to give us any extra security here. But with the upcoming auth handling it does make sense to have both case look similar.
2015-07-01nat: Factor out the config by token searchHolger Hans Peter Freyther3-19/+32
In the upcoming authentication improvements it is nice to separate the finding of the config from the post-allow handling of it.
2015-07-01nat: Add size check for the payloadHolger Hans Peter Freyther1-1/+1
The msgb will always have these bytes but it is better practice to verify that the message really has space for the two bytes.
2015-06-20bts: Arfcn can never be smaller than 0Holger Hans Peter Freyther1-2/+1
Remove the condition because it can never be true. Fixes: Coverity CID#1307793
2015-06-19build: avoid spurious hard dependency on libosmo-sccpAndreas Rottmann1-3/+0
In the libfilter source code, which is built regardless of --enable-nat, headers from libosmo-sccp were used, thus causing a build failure (see below) when building without --enable-nat, and libosmo-sccp not being installed (or being installed in a prefix not otherwise included in the build). The build fails like this: In file included from ../../../src/libfilter/bsc_msg_filter.c:27:0: ../../../include/openbsc/bsc_nat_sccp.h:27:37: fatal error: osmocom/sccp/sccp_types.h: No such file or directory As the includes seem not to be actually needed, this change fixes the issue by just omitting them.
2015-06-19Fix "make distcheck"Andreas Rottmann1-1/+1
Running "make distcheck" failed trying to generate ".version" into the read-only unpacked source directory. Actually shipping ".version" in the tarball fixes that.
2015-06-19Fix build wrt. missing CFLAGS constituentsAndreas Rottmann7-7/+8
When libosmo-netif and/or libosmo-abis are installed in distinct prefixes, the build failed with non-found headers.
2015-06-19Fix GSM900 ARFCN range checkMichael McTernan1-2/+2
Allow ARFCN 0 to be used in GSM900 band.
2015-06-15bsc: Attempt to fix crash when sending a SCCP CREF messageHolger Hans Peter Freyther1-1/+1
There was no context for the SCCP CREF message and this means that the msc_con was a plain NULL pointer that was dereferenced and the application would crash. Use the new API to pass the incoming MSC Connection which sould be used for the SCCP CREF message as context. The code has not been fed with an actual SCCP CR message.
2015-06-02sgsn: Simplify finding/using the first address of the resultHolger Hans Peter Freyther1-7/+2
The loop was used to print all returned addresses but we can simply pick the first one. This is fixing a coverity issue that the loop will be executed eaxactly once (and that was on purpose). Simplify the code and just take the first element (which might be NULL). Fixes: Coverity CID#1302852
2015-06-02sgsn: seleted_apn_str might be NULL do not strcpyHolger Hans Peter Freyther1-1/+4
The subscriber might simply not be allowed to use the APN that was specified. So selected_apn_str might very well be NULL. Fixes: Coverity CID#1302853
2015-06-02sgsn: Check the return value of osmo_fd_registerHolger Hans Peter Freyther1-1/+2
We can't do much in case the fd is failing to be registered. There should be a timeout that is catching this and it might be able to repair it self. Fixes: Coverity CID#1302854
2015-06-02libbsc: Move SIs update/generation for a BTS into a separate function.Alexander Chemeris3-14/+27
The code to do that doesn't belong to the control interface, so abstract it out to a separate function gsm_bts_set_system_infos(). [hfreyther: Fix the coding style...]
2015-06-01sgsn: Do not search the name with the "domain" name attached to itHolger Hans Peter Freyther1-1/+1
In case the query for "hostname" will fail c-ares will append the domain name of /etc/resolv.conf and query again. We don't want that so claim we provide a list of domain names and then don't provide any. I didn't intend to have pushed the c-ares code to master yet.
2015-05-29gsm_04_08: Use osmo_assert for transt->conn and conn only in case of paging ↵Ivan Kluchnikov1-1/+1
succeeded setup_trig_pag_evt function can receive parameter conn = NULL, if T3113 expires.
2015-05-29ggsn: The id is a uint32_t don't print it as signedHolger Hans Peter Freyther2-3/+3
This was noticed as I started to use UINT32_MAX for dynamically created GGSNs.
2015-05-25sgsn: Allow to specify the DNS servers that should be usedHolger Hans Peter Freyther3-1/+26
If no server is specified the default list will be used. This allows to separate the servers for the local network and GRX from each other.
2015-05-25sgsn: Allow to resolve the IPv4 address of a GGSN through DNSHolger Hans Peter Freyther8-21/+232
For real networks we need to check if the requested APN string is allowed and then resolve the GGSN address through DNS. There are countries with two or three digit MNCs and one could either try to keep a list of countries that have two/three digits or just try both of them. I have opted for the later for the ease of the implementation. C-Ares doesn't allow to cancel a request so we will need to have the MMCTX and the Lookup have different lifetimes. We simply set ->mmctx to NULL in case the MMCTX dies more early. The selected and verified apn_str will be copied into the out parameter. In case no static APN/GGSN config is present and the dynamic mode is enabled a request will be made.
2015-05-25sgsn: Integrate c-ares with the osmocom event loopHolger Hans Peter Freyther4-6/+196
c-ares is an asynchronous DNS resolver and we need it to resolve the GGSN address. This is integrating the library into our infrastructure. We will create and maintain a list of registered FDs (c-ares is currently only using one of them) and (re-)schedule the timer after events occurred.
2015-05-25sgsn: Create a copy of the msgb for later usageHolger Hans Peter Freyther1-3/+35
When needing to do an asynchronous DNS query we need to keep the TLV data around. So create a wrapper that takes a copy of it and frees it after the call. I can change the code to add an out parameter to decide if the msgb should be freed or not. Pick network failure in case the msgb could not be cloned in the hope the MS will retry then.
2015-05-25sgsn: Re-factor the activate PDP code for future changesHolger Hans Peter Freyther1-24/+39
A real SGSN will dynamically resolve the APN name into the GGSN IP Address. This means that after we have collected all information we need to start to resolve the GGSN and then can continue.
2015-05-25sgsn: Deal with no static ggsn being configured at allHolger Hans Peter Freyther1-0/+7
In case no static ggsn is configured the code would crash with the assumption that there is always such a GGSN.
2015-05-25sgsn: If there is a subscr don't allow an empty listHolger Hans Peter Freyther2-6/+6
This is a left-over from the initial system where no PDP was provided by the system. For now if there is a subscr attached and no PDP context provisioned. He is not allowed to have a data connection. Update the testcase to create the pdp list entry more early with a wildcard and then change it to a specific match.
2015-05-24sgsn: Extract the hlr Number into the mm contextHolger Hans Peter Freyther4-5/+48
Include the hlr-Number of the subscriber in the CDR. This is useful for debugging and understanding which equipment was used during the test. In contrast to the MSISDN the '+' is emitted as the number must be in international format already.
2015-05-24gsup: Copy the hlr-Number and use it during purgeHolger Hans Peter Freyther3-0/+23
Copy the hlr-Number into the sgsn_data and use it during the purgeMS. There is no unit test that looks at the data we send so I manually verified this by looking at the output. Below is the output of the test that purges the subscriber. <000f> gprs_subscriber.c:170 SUBSCR(123456789012345) Sending GSUP, will send: 0c 01 08 21 43 65 87 09 21 43 f5 09 07 91 83 61 26 31 23 f3
2015-05-24gsup: Decode/Encode the hlr-Number in the GSUP messageHolger Hans Peter Freyther3-0/+13
Implement it similar to the msisdn_enc/msisdn_enc_len and extend the testcase to include it as well.
2015-05-24gsup: Add the HLR-Number as type and use it for UpdateLocation ResHolger Hans Peter Freyther1-0/+24
The HLR-Number can be passed from the MAP Proxy to the SGSN and can then be used for the CDR module or passed during the purgeMS operation.
2015-05-22sgsn: Change the selection mode to verifiedHolger Hans Peter Freyther1-2/+2
We have verified/selected the APN. Either based on the subscriber data, a global APN match. But at least this SGSN has looked at what the MS has asked for and then selected a matching GGSN.
2015-05-22sgsn: Reserved bits should be set to 1Holger Hans Peter Freyther1-1/+1
Bits 3 to 8 are spare bits and should be set to 1 in etsi specifications. Do that.
2015-05-17Replace ad-hoc function with generic one from libosmocoreMax1-12/+2
Signed-off-by: Max <max.suraev@fairwaves.co>
2015-05-17sgsn: Clear LAC/RAC value for the routing area identityHolger Hans Peter Freyther1-1/+5
Clear LAC/RAC with pre-defined value in the RAI. 3GPP 29.060 v7.17.0 section 7.3.1 page 23: "The SGSN may include the Routeing Area Identity (RAI) of the SGSN where the MS is registered. The MCC and MNC components shall be populated with the MCC and MNC, respectively, of the SGSN where the MS is registered. The LAC and RAC components shall be populated by the SGSN with the value of 'FFFE' and 'FF', respectively.”
2015-05-17sgsn: Give the IMEI to the GGSN for analysisHolger Hans Peter Freyther1-0/+6
Most SGSNs pass the IMEI(SV). We currently only enquire about the IMEI and then pad the 'SV' with 1111b (thanks to the encoding routine). Sadly it insists on always writing the length which means we have to memmove the data around by a single octet. Manually verified using the pcu-emu and looking at the trace using wireshark.
2015-05-17sgsn: Encode the ULI for the PDP context creation ackHolger Hans Peter Freyther1-1/+6
Give the GGSN another opportunity to determine which tarif to apply for the SGSN/subscriber. This code assumes tha the RAN is a GERAN system but the assumption has been made in other places as well.
2015-05-17sgsn: Always include the routing area identityHolger Hans Peter Freyther1-0/+5
For PDP context creation we always want to include the RAI for the current mmctx. This might help commercial GGSNs to determine which charging to apply.
2015-05-17cdr: Remember the charging id supplied by the GGSNHolger Hans Peter Freyther2-3/+6
The charging_id is provided by the GGSN. Copy it into the CDR part of the data structure so it will remain present until after the pdp context has been deleted.
2015-05-06sgsn: Add VTY configuration for the CDR moduleHolger Hans Peter Freyther2-0/+64
Make it possible to set a filename to use for the CDR. By default no CDR will be generated. Forbid to set the interval of 0 seconds as this will cause a lot of work. Add a very basic VTY test.
2015-05-06sgsn: Create an initial and limited CDR moduleHolger Hans Peter Freyther6-1/+281
This is consuming the new signals and allows to install several different CDR/observing/event/audit modules in the future. For getting the bytes in/out the code would have had to undo what the rate counter is doing and at the same time adding a "total" to the ratecounter didn't look like a good idea, the same went for making it a plain counter. Begin writing the values one by one and open/closing a new FILE for every log messages. This is not efficient but easily deals with external truncation/rotation of the file (no fstat for and checking the links and size). As usual we will wait and see if this is an issue. Add some new members to our PDP context structure to see what it is about.
2015-05-06sgsn: Add various signals consumed by CDR or other client codeHolger Hans Peter Freyther4-2/+80
2015-05-06sgsn: Extract the MSISDN from the subscr data structureHolger Hans Peter Freyther2-0/+38
In case there is a subscr attached to the MM context and there is an encoded MSISDN we will attempt to decode it and in case of an international number prepend a '+'. Assume that the array size of gsm_mmcc_called->number is as big as ctx->msisdn for the strncpy.
2015-05-06sgsn: Make the free function internalHolger Hans Peter Freyther2-2/+1
All calls should and do go through the sgsn_mm_ctx_cleanup_free function.
2015-05-05sgsn: Show the QoS that has been assignedHolger Hans Peter Freyther1-1/+2
2015-05-05sgsn: Dump the E164 (encoded) assigned to the subscriberHolger Hans Peter Freyther1-0/+5
2015-05-05sgsn: Handle different levels of QoSHolger Hans Peter Freyther1-5/+12
If QoS is only three bytes it does not include the allocation/ retention policy. Otherwise it does. Copy it depending on that. We should have a macro for the clamping to reduce code duplication. The insanity does come from the MAP data and this seems to be the easiest in terms of complexity. It is an array of bytes that is transported from MAPProxy to the SGSN and then simply forwarded. The case of more than three bytes is neither unit nor manually tested so far.
2015-05-05sgsn: Store subscribed QoS and attempt to use itHolger Hans Peter Freyther5-4/+41
sgsn_create_pdp_ctx should use the subscribed QoS. When selecting the PDP context we inject the QoS to be used into the TLV structure and use it during the request. Assume a "qos-Subscribed" structure only with three bytes and prepend the Allocation/Retention policy to the request.
2015-05-05sgsn: Copy the msisdn to the sgsn_data and use it in PDP activationHolger Hans Peter Freyther4-2/+36
The MSISDN should be present for "security" reasons in the first activation of a PDP context. Take the encoded MSISDN, store it for future use and then put it into the PDP activation request. The MM Context contains a field for a decoded MSISDN already. As we need to forward the data to the GGSN I want to avoid having to store TON and NPI in another place. Simply store the data in the encoded form.
2015-05-05gsup: Extract the QoS fieldHolger Hans Peter Freyther3-1/+15
Add roundtrip test for the new QoS IE. It will be consumed in later commits.
2015-05-05gsup: Extract the new MSISDN stringHolger Hans Peter Freyther3-0/+17
Extract the new MSISDN IE from the GSUP message and verify that it is read/written to the message.
2015-05-05gsup: Specify the QoS service for the PDP infoHolger Hans Peter Freyther1-0/+22
QoS is a mess. In MAP there is qos-Subscribed which is then extended using ext-QoS-Subscribed, ext2-QoS-Subscribed, ext3-QoS-Subscribed and maybe even ext4-QoS-Subscribed by now. The MAP ASN1 files defined how these need to be "linearized". Instead of copying this I have decided to include the two semantics with/without the Allocation/Retention policy using the size of the data.