Commit Graph

200 Commits

Author SHA1 Message Date
Alexander Huemer ef8934612c fix build if depenedencies are in distinct directories 2015-12-24 16:15:17 +01:00
Harald Welte 7ac7e048b4 add rua_helper.[ch] missing from previous commit 2015-12-24 15:53:30 +01:00
Harald Welte c3851220db hnb-test: Add VTY to manually issue Iuh messages
We can now send Iuh messages with commands like 'hnbap hnb register',
'hnbap ue regiter imsi 12345', 'ranap reset cs', 'ranap reset ps',
and even establish connection-oriented RUA using
'channel cs lu imsi 12345'
2015-12-24 15:41:21 +01:00
Harald Welte f9c9aa5f20 ranap_msg_factory.c: Fix compiler warnings 2015-12-24 15:39:00 +01:00
Harald Welte 57d873392c ranap_msg_factory: use OCTET_STRING_fromBuf() in ranap_new_msg_dt()
When using asn1c, we cannot use buffers allocated elsewhere and/or on
the stack as input into encoding.
2015-12-24 15:33:21 +01:00
Harald Welte ea98b6f6d6 ranap: New ranap_new_msg_initial_ue() funcition
for testing, it is useful if we can also generate an InitialUE
message - even though a HNB-GW only needs to receive it.
2015-12-24 15:09:06 +01:00
Harald Welte afcaac08ee asn1helpers.h: Add missing declarations of functions in asn1helpers.c 2015-12-24 15:03:11 +01:00
Harald Welte b0de90639b hnbgw_rua.c: Incoming context IDs are 24bit wide according to spec
so don't try to decode them to u32, which expects 32bit input values.
2015-12-24 14:10:17 +01:00
Harald Welte c89c2a6e6a RANAP: Replace the last remainng TBCD-STRING with OCTET STRING
in order to work around a bug in asn1c.  When we keep the original
TBCD-STRING, the APER-encoded PLMNidentity always has an extra leading
length byte that the decoder doesn't expect.
2015-12-24 14:07:05 +01:00
Harald Welte 37166a27ca improve logging, remove obsolete FIXMEs, return of non-void functions 2015-12-24 10:12:09 +01:00
Harald Welte bc4560cf18 Implement forwarding of RANAP PAGING from CN to all HNBs 2015-12-24 08:46:58 +01:00
Harald Welte c4338deee9 hnbgw: Bring all parts together
We now have the RUA and SUA parts interconnected by the
context ID mapper, and should be able to pass messages back and forward
between both sides.

Unfortunately this touches a bit of everything, but the structures are
all still very much in flux.  Hopefully they will start to stabilize at
some point soon...
2015-12-24 00:41:45 +01:00
Harald Welte cd5e981490 hnbgw_rua: Don't use msgb as imput, allow more parameters 2015-12-23 22:14:16 +01:00
Harald Welte 90256bad58 Add a context mapper to map RUA ContextIDs <-> SUA Connection IDs 2015-12-23 22:13:53 +01:00
Harald Welte f42317ba9c Introduce DRANAP/DRUA log categories to separate logging 2015-12-23 15:37:17 +01:00
Alexander Huemer f6d0138d76 fix copy/paste mistake in src/Makefile.am 2015-12-23 13:56:23 +01:00
Harald Welte ffa7c0ad39 use msgb_sctp_ppid() from libosmo-netif, remove local declaration 2015-12-23 00:04:05 +01:00
Harald Welte 75a4e65f52 hnbgw: Add SUA client socket towards localhost
This socket doesn't do much yet except to connect to localhost:14001

The host/port needs to be made configurable, and the RUA<->SUA
interfacing needs to be implemented.

Also, we'll need two SUA sockets, one for MSC and one for SGSN.
2015-12-23 00:04:05 +01:00
Daniel Willmann 269b8ac7ee hnbgw: Free msgb when connection is closed 2015-12-22 16:40:46 +01:00
Daniel Willmann 541e429a39 hnbgw_hnbap.c: Clean up after encoding a UE register accept
Need to free the ASN.1 structs after using them to encode the UE
register accept message.
2015-12-22 16:40:46 +01:00
Neels Hofmeyr c51f735b35 really fix src/Makefile.am
Add BUILT_SOURCES to src/Makefile.am.

(And remove a stray space.)
2015-12-22 12:27:02 +01:00
Alexander Huemer fec171d8b4 fix Makefile.am 2015-12-22 12:24:27 +01:00
Harald Welte 71f73a2919 move COPYING file to root directory 2015-12-21 21:01:00 +01:00
Harald Welte ef5055c275 Makefile.am: Try to model the asn1tostruct.py generation dependencies 2015-12-21 17:50:11 +01:00
Harald Welte b2daa0d803 ranap ASN.1: Define IMSI as OCTET STRING to work around asn1c bug
When IMSI is a TBCD-STRING type, and TBCD-STRING is defined as OCTET
STRING, we end up encoding the IMSI the wrong way.  I don't knwo why
that is, but changing it fixed the problem, as described below:

before this commit:
00 17                           PeranentNAS-UE-ID
40                              criticality ignore
0a                              (length)
00                              presence = IMSI
08                              BUG: why the additional length field?
46 23 91 34 70 77 80 f3         IMSI (643219430777083)

after this commit:
00 17                           PeranentNAS-UE-ID
40                              criticality ignore
09                              (length)
50                              presence = IMSI
46 23 91 34 70 77 80 f3         IMSI (643219430777083)
2015-12-19 13:05:19 +01:00
Harald Welte 0a3eafee45 ranap: Don' shift the RAB ID by 3 bits 2015-12-19 02:38:09 +01:00
Harald Welte 94a62d591d ranap: No need for htonl() of IP addresses and the like 2015-12-19 02:37:48 +01:00
Harald Welte b7f67c4b14 ranap: Don't forget ProtocolIE-CointainerPair around ProtocolIE-FieldPair 2015-12-19 02:37:35 +01:00
Harald Welte de9055f142 Makefile.am: Replace .PHONY asn1tostruct.py rules
asn1tostruct.py generates three files.  Try to teach the makefile that
all three of them depend on the .asn source file to ensure they're
re-built whenever the .asn source file changes.
2015-12-18 20:20:51 +01:00
Harald Welte f8db61b554 First compiling (and leak-free) RANAP message generation functions
encoding correctness still needs to be verified at this point.  At least
they generate some binary output without failing somewhere earlier in
the encoding process - and they don't leave any leaked memory behind,
see talloc_report() at the end of test-ranap.c:main().
2015-12-18 20:20:47 +01:00
Harald Welte fcabec3665 implement BIT_STRING_fromBuf() similar to OCTET_STRING_fromBuf() 2015-12-18 17:51:50 +01:00
Harald Welte 16232780d8 ranap_common: Fix error cleanup path while generating IE Pair 2015-12-18 17:22:04 +01:00
Harald Welte 04329dcbdc {hnbap,rua,ranap}_common: check for encoding errors in new_ie() 2015-12-18 15:18:13 +01:00
Harald Welte 629391321f {hnbap,ranap,rua}_common: use FREEMEM(), not free() directly
If we allocate with CALLOC/MALLOC macros, we need to release memory via the
same API.
2015-12-18 14:58:34 +01:00
Harald Welte 8526d158f8 hnbap/rua: Don't usse malloc() directly but use CALLOC() macro 2015-12-18 13:41:39 +01:00
Harald Welte 9c397d4969 ranap: Use CALLOC() macro of libasn1c
we don't use malloc() directly, as that doesn't mix well with
our libasn1c using talloc.
2015-12-18 13:35:58 +01:00
Harald Welte 2676554c92 ranap: Ensure we free any intermediate dynamically allocated memory 2015-12-18 13:35:58 +01:00
Harald Welte d062df5307 test-ranap.c: Further WIP, it now actually compiles 2015-12-18 13:35:58 +01:00
Harald Welte 93690184b0 RANAP: Split FormatInformationParameter / SDUParameterItem
The definition of the above data types as per 3GPP specs results in a
SEQUENCE_OF() an anonymous structure, which is slightly inconvenient to
use.  So let's split the SEQUENCE OF part and the actual definition of
the item in separate types.
2015-12-18 13:35:58 +01:00
Harald Welte 091039d47e test-ranap.c: More WIP code for convoluted RANAP message encoding 2015-12-18 13:35:58 +01:00
Daniel Willmann 141a0baac9 hnb-test: Add an option to transmit multiple UE register/deregister msgs 2015-12-17 18:03:52 +01:00
Daniel Willmann 28b9ec1473 Enable vty command to output talloc report
I don't think I can print this into a string and thus output it via VTY.
In that case it might be smarte to do in a signal handler
2015-12-17 18:02:37 +01:00
Daniel Willmann 5f810f4222 hnbgw_hnbap: Initialize return value and always return something 2015-12-17 17:57:51 +01:00
Daniel Willmann 59d17d8961 hnbap: Free ASN.1 components after they are no longer needed 2015-12-17 17:56:56 +01:00
Daniel Willmann 6637a289da hnb-test: Handle closed connections correctly 2015-12-17 14:47:51 +01:00
Daniel Willmann 19dedbb6b1 hnb-test: Send UE de-register after receiving the UE registration accept 2015-12-17 13:09:37 +01:00
Daniel Willmann 92856e6ef2 hnb-test.c: Remove pdus.h include as it is not used
The messages are constructed so no need to include the binary asn1 data.
2015-12-17 13:09:37 +01:00
Daniel Willmann 3279780557 hnb-test: Add HNBAP category and reduce MAIN loglevel to INFO 2015-12-17 13:09:18 +01:00
Daniel Willmann bded9841b5 hnbgw: Change logging priorities and add HNBAP category
Log hnbap messages to the HNBAP category. Change MAIN category to only
log INFO and above and change SCTP notification message to debug.
2015-12-17 13:09:18 +01:00
Daniel Willmann efceb187aa hnbgw_hnbap: Process UEDeRegister and try to free correct UE 2015-12-17 13:09:18 +01:00
Daniel Willmann 4267a29ee0 hnbgw: Handle closed connections correctly
We still need to clean up the HNB data structures after the connection
is closed
2015-12-17 13:09:18 +01:00
Daniel Willmann 7c27f7b792 hnbgw: Lower level of SCTP notif. msg to debug and set default log level to info 2015-12-17 13:08:32 +01:00
Harald Welte ace1d24d34 ranap_common: Add function to wrap IEs into a RANAP_ProtocolIE_FieldPair_t
The FieldPair is a strange construct of RANAP Radio Access Bearer
assignment, where certain IEs appear in pairs.
2015-12-16 23:07:19 +01:00
Harald Welte 462db35426 hnbap_common: Fix copy+paste mistake (use hnbap msgb allocator) 2015-12-16 23:06:59 +01:00
Harald Welte d328c1a3ac WIP: add some early code for generating required RANAP messages 2015-12-16 23:04:21 +01:00
Harald Welte c16117a22c Add ranap_generate_outcome() function
Ranap has not only successsful and unsuccessful outcome, but also
an unqualified general 'outcome'.
2015-12-16 20:30:11 +01:00
Harald Welte 8dacb07baf {hnbap,rua,ranap}_common.c: Reduce code duplicatioon
There used to be a lot of code duplication between the code to generate
initiating, successfulOutcome and unsuccessfulOutcome messages.  Try to
reduce that by callign a generic function.
2015-12-16 20:27:14 +01:00
Harald Welte cbaaeefe00 {rua,hnbap,ranap}_common: Add missing encoding functions
We used to only have those generator functions that we needed for
the existing hnbgw code; Implement the missing encoders
2015-12-16 20:17:26 +01:00
Harald Welte 08d5da6647 hnbgw: Use the now-compiling RANAP encoder+decoder code
So far, we copy-pasted/cherry-picked individual encoder/decoder
functions as the overall ranap_{encode,decode} didn't compile yet.

As the latter is now finally compiling, we can remove those copies and
link in ranap_{encode,decode}.o
2015-12-16 17:31:43 +01:00
Harald Welte 49695572ba One further RANAP hacking session
This is not development, it is random trial and error hacking.  I really
hate the fact that we have no useful asn.1 code generator and need to
work with hacks like asn1tostruct.py and asn1c without information
object classes :/

This commit is a one-day-long iteration of trial+error, manually editing
and adding the .asn source of RANAP until we get something that in the
end at least compiles and links.  Do I trust the resulting code? No.
But we have no alternative :(
2015-12-16 17:26:05 +01:00
Harald Welte 1989913ba2 RANAP: Add more types/IEs to RANAP-PDU.asn and re-generate C
As asn1c cannot understand information object classes, we cannot compile
RANAP-PDU-Contents.asn but instead need to manually add the respective
infrmation elements to RANAP-PDU.asn.
2015-12-16 13:15:02 +01:00
Harald Welte fd5db064cb Re-add the 'regen' targets lost in the automake transition
This might need a lot of cleanup for out-of-source-tree builds and the
like, but let's not spend time on this now.  The old Makefile also
didn't support that.  But loosing the ability to regenerate the C source
is not an option either.
2015-12-16 13:14:10 +01:00
Harald Welte 3297dbaaa7 rename ASN_MODULE_FILES to ASN_MODULE_SOURCES
... brings us closer to the Makefile.am.sampl generated by asn1c,
facilitating copy+paste.
2015-12-16 13:13:30 +01:00
Daniel Willmann 29b9e00355 Autotoolize the build
Use Autoconf/make for building and autotest for tests
2015-12-15 15:10:31 +01:00
Daniel Willmann a7b02405be hnb-test: Parse UE register accept 2015-12-14 10:37:26 +01:00
Daniel Willmann 9224731379 asn1helpers: Fix 24 bit conversion function and use it in hnbgw_hnbap
The 32 bit int needs to be shifted left one byte so the correct bytes
end up at the beginning of the bit string buffer.
2015-12-14 10:36:36 +01:00
Daniel Willmann 4e31250367 hnb-test: Send UE register request 2015-12-14 10:36:36 +01:00
Daniel Willmann 479cb300ce hnb-test: Send HNB register request and parse the accept 2015-12-14 10:36:36 +01:00
Daniel Willmann 4abdee0803 hnb-test: setsockopt SCTP_EVENTS is needed to get the sctp_sndrcvinfo 2015-12-14 10:36:36 +01:00
Daniel Willmann d6a45b402c asn1helpers: Add 28 bit conversion function and use it for Cell ID
The padding bits in the bit string are at the end and the byte-order is
MSB-first. This means the number needs to be shifted left so the padding
bits are the least significant.
2015-12-14 10:21:51 +01:00
Daniel Willmann a1e202e15e tests/hnb-test: Generate the HNBAP registration request from ASN.1 2015-12-07 17:21:07 +01:00
Daniel Willmann 0e8ef67b7a hnbap_common: Add function to HNBAP generate initiating message
An earlier version was commented out, this function now works like
hnbap_generate_successful_outcome()
2015-12-07 17:19:40 +01:00
Daniel Willmann f3685c2a13 asn1helpers: Add helper to convert u8/u16 to OCTET_STRING 2015-12-07 17:18:56 +01:00
Daniel Willmann 4aeef6c3c4 hnb-test: Send hard-coded HNB register request for now 2015-12-03 17:02:13 +01:00
Daniel Willmann 97374c039b tests: Add hnb-test to connect to hnbgw and tests its functions
Only connects currently
2015-12-03 09:37:58 +01:00
Daniel Willmann 56f6273430 hnbgw: Add VTY commands to show info about connected HNBs and UEs 2015-12-02 12:58:42 +01:00
Daniel Willmann 9a12a4b992 test-helpers: Also print out hexdump of encoded bit string 2015-11-30 16:27:11 +01:00
Daniel Willmann b2548fb1e8 asn1helpers, test-helpers: Use ntoh/hton* to convert integers
Since the asn1_u32/24_to_bitstring functions need to change the source
variable change the signature to clarify that the uint32_t * will be
modified.
2015-11-30 16:24:57 +01:00
Daniel Willmann e2956431e8 test-hnbap: Check CID and Identity Info as well 2015-11-30 16:05:51 +01:00
Daniel Willmann 23c86e38bc test-hnbap: Use different types for UE request and accept IEs 2015-11-30 16:03:36 +01:00
Daniel Willmann e3adf0edc3 asn1helpers: Fix asn1str_to_uX functions
The values are stored big-endian so convert them
2015-11-27 17:53:19 +01:00
Daniel Willmann ea4c088e78 test-hnbap: Test decoding of the hnbap registration request
The 16-bit values are not decoded correctly
2015-11-27 16:14:09 +01:00
Daniel Willmann 1a86955288 tests/test-hnbap: Decode HNBAP UE Register accept as well 2015-11-24 18:11:03 +01:00
Daniel Willmann 39e643a62d tests: Add test-hnbap to test en-/decoding of HNBAP messages
Decode a HNBAP UE register request and check the result.
2015-11-24 18:03:29 +01:00
Daniel Willmann 8ea918d772 tests: Test cropping of string still is NULL-terminated 2015-11-23 15:59:02 +01:00
Daniel Willmann 53018e937c asn1helpers: Ensure that string is NULL-terminated
The buf in an OCTET_STRING_t is not (necessarily) NULL-terminated, so
make sure there is a terminating NULL byte at the end in the resulting
string.
2015-11-23 15:55:46 +01:00
Daniel Willmann ec0e50e148 tests: Test asn1_strncpy function 2015-11-23 15:48:59 +01:00
Daniel Willmann 6e59d413a2 asn1helpers.c: Fix asn1bitstr_to_u32 function
The value in buf is kept in host byte order so no need to swap it
around.
2015-11-23 14:03:04 +01:00
Daniel Willmann 54a9a143f0 tests: Test asn1_u32_to_bitstring and asn1bitstr_to_u32 2015-11-23 14:02:38 +01:00
Daniel Willmann cc5f7cafa2 src/Makefile: Change order of dependencies so a clean checkout builds
There still seem to be some issues with the _decode.o dependencies, but
this will eventually build through.
2015-11-20 19:52:00 +01:00
Harald Welte 0bb1261239 add asn1_u24_to_bitstring()
Sometimes we have a native uint32_t, but we don't want to encode
it to a 4-byte long ASN1 BITSTRING, but rather to one that is only
24 bits.
2015-10-06 22:08:54 +02:00
Harald Welte 4dd16b9643 make asn1bitstr_to_u32() work for sub-32bit bit-strings
IF the ASN1 Bit-string is only 24 bits or even less long,
we might still want to retrieve it as an uint32_t.
2015-10-06 22:08:10 +02:00
Harald Welte 77847ad020 add copyright statement and AGPLv3 headers to source code files 2015-10-06 22:07:04 +02:00
Harald Welte 6286880caa the Context ID is a 24bit number, we cannot use len = 4 bytes! 2015-09-18 01:23:55 +02:00
Harald Welte 1c2ada0e7f ranap: receive/parse DirectTransfer 2015-09-11 20:10:17 +02:00
Harald Welte 80401adcb0 ranap: Parse InitialUE message and hex-print NAS PDU 2015-09-11 19:48:06 +02:00
Harald Welte 0f0ea8112f RUA: hand off RANAP from all PDU types, not just UnitDataTransfer
Also, we now offer a ranap_tx_dt() message for connection-oriented
RANAP transfers.  A far as I understand the RUA spec, on RUA layer,
all operations are Class 2, i.e. without any response/confirmation.
2015-09-11 18:58:28 +02:00
Harald Welte cc27bebd30 ranap: prepare decoding of InitialUE message 2015-09-11 18:45:39 +02:00
Harald Welte 1d2c39d83b various cleanups (compiler warnings, coding style) 2015-09-11 17:49:37 +02:00
Harald Welte 35cbc11757 add unit test for BCD encoding/decoding 2015-09-11 17:36:59 +02:00