migrate osmo-hnbgw to libosmo-sigtran's SCCP/M3UA

libosmo-sigtran now has a "proper" SCCP/M3UA stack, so we can make our hnb-gw
3GPP compliant by switching from the old SUA code to the new universal SCCP
user API with support for (currently) M3UA and SUA.

Main changes:

Use one cn_link to STP: We will connect to the core network using an (Osmo)STP
instance that routes to MSC and SGSN, so we want one SCCP link instead of two.
The only difference between IuCS and IuPS is a different remote osmo_sccp_addr.

This has various effects through the messaging code; the patch is a bit larger
than I would like, but it is hard to separate out truly independent smaller
changes.

CS or PS domain was previously flagged in the separate cn_link, as ctx pointer
for two separate sccp_sap_up()s. Now there's just one such ctx, so determine
is_ps from the RANAP Domain Indicator, or from the conn's hnbgw_context_map:

- Add is_ps to context_map_alloc_by_hnb().
- To find a matching context, the RUA ID alone is no longer sufficient, also
  match is_ps (possible optimization todo: separate lists).

We would send separate CS or PS Reset messages based on the cn_link, instead
send both CS and PS Reset at the same time for the single cn_link. This could
be adjusted to detect presence of MSC or SGSN instead.

Pending: adjust the VTY config to reflect that there is only one remote
address. Place a TODO comment for that.

Smaller changes:

rua_to_scu(): populate called and calling addresses for N_CONNECT and
N_UNITDATA.

Remove DSUA.

Don't build dummy_cn, which is still implemented on SUA. Mark todo to maybe
re-include it based on M3UA later.

In hnbgw_cnlink, place sccp related items in a separate sub-struct.

Do not keep an llist of cn_links, just have the one. Remove iteration and list
management.

Change jenkins script to build libosmo-sccp master.

Patch-by: hwelte, nhofmeyr
Change-Id: I8ac15fa2fd25bedb26297177e416976a5389b573
10 files changed
tree: 1eb1f62c8c8e8d9ccbf37a24a84be57703ba65df
  1. asn1/
  2. contrib/
  3. doc/
  4. include/
  5. pcap/
  6. specs/
  7. src/
  8. .gitignore
  9. configure.ac
  10. COPYING
  11. git-version-gen
  12. libosmo-ranap.pc.in
  13. Makefile.am
  14. move-asn1-header-files.sh
  15. README.md
README.md

osmo-iuh - Osmocom Iuh and HNB-GW implementation

This repository contains a C-language implementation of the 3GPP Iuh interface, together with a HNB-GW (Home NodeB Gateway). You can use it to interface Iuh-speaking femtocells/small cells to Iu-speaking MSCs and SGSNs.

It is part of the Osmocom Open Source Mobile Communications project.

Homepage

The official homepage of the project is https://osmocom.org/projects/osmohnbgw/wiki

GIT Repository

You can clone from the official libosmocore.git repository using

git clone git://git.osmocom.org/osmo-iuh.git

There is a cgit interface at http://git.osmocom.org/osmo-iuh/

Documentation

There is currently no documentation beyond the wiki available on the homepage. We would love to see somebody contributing a manual that can be part of the osmo-gsm-manuals suite.

Mailing List

Discussions related to osmo-iuh are happening on the openbsc@lists.osmocom.org mailing list, please see https://lists.osmocom.org/mailman/listinfo/openbsc for subscription options and the list archive.

Please observe the Osmocom Mailing List Rules when posting.

Contributing

Our coding standards are described at https://osmocom.org/projects/cellular-infrastructure/wiki/Coding_standards

We us a gerrit based patch submission/review process for managing contributions. Please see https://osmocom.org/projects/cellular-infrastructure/wiki/Gerrit for more details

The current patch queue for osmo-iuh can be seen at https://gerrit.osmocom.org/#/q/project:osmo-iuh+status:open

Building

It is generally best to check the wiki for the most up-to-date build instructions.

As external library dependencies, you will need

To bootstrap the build, in the root directory, run:

autoreconf --install

After that, run the usual

./configure [options]
make
[sudo] make install

Using

Note: osmo-iuh just left very active development (December 2015, January 2016), so your mileage may vary.

If you run the 'hnbgw' executable, it will open a listening SCTP socket and wait for incoming Iuh connections. It will accept any HNB-REGISTER-REQUEST, and it will establish Iu (over SUA) connections towards the MSC and SGSN.

Regenerating C code from ASN.1 source

In order to re-generate the C source code from the ASN.1 source, you will need a modified asn1c which has the following features: