S1AP (S1 Application Protocol) Gateway implementation in Erlang
Go to file
Vadim Yanitskiy e294731992 README.md: initial version 2024-06-05 02:30:28 +07:00
asn1 Check-in S1AP ASN.1 definitions (3GPP TS 36.413 v17.6.0) 2024-05-31 03:56:39 +07:00
config sctp_client: support explicitly setting local address 2024-06-05 00:21:43 +07:00
include Move S1AP constants into a header file 2024-05-31 18:07:44 +07:00
src osmo_s1gw: add main/1 for rebar's escriptize target 2024-06-05 02:30:28 +07:00
test s1ap_proxy: properly patch transportLayerAddress 2024-06-05 00:41:21 +07:00
.gitignore .gitignore: ignore generated S1AP code 2024-05-31 18:07:44 +07:00
README.md README.md: initial version 2024-06-05 02:30:28 +07:00
rebar.config rebar.config: add escript and relx parameters 2024-06-05 02:30:28 +07:00
rebar.lock Rework logging config, colorize output 2024-05-31 18:07:44 +07:00

README.md

osmo-s1gw

This is an S1AP (S1 Application Protocol) Gateway implementation in Erlang for the 3GPP EPC (Evolved Packet Core) based (4G/LTE) networks. It is part of the Osmocom Open Source Mobile Communications project.

S1AP is a protocol "spoken" between the eNB and the MME. The S1GW is useful in scenarios when eNB(s) and the MME co-exist in separate networks and thus unable to access each other directly. This is basically a proxy, accepting incoming connections from eNB(s), establishing the associated outgoing connections to the MME, and forwarding S1AP PDUs back and forth.

          (network A) |
                      |
               +-------------+     +-------------+
               |  osmo-s1gw  |     |     MME     |
+--------+     +-------------+     +-------------+
| eNB(1) | --> |             | --> |             |
+--------+     |             |     |             |
               |             |     |             |
+--------+     |             |     |             |
| eNB(2) | --> |             | --> |             |
+--------+     |             |     |             |
               |             |     |             |
+--------+     |             |     |             |
| eNB(N) | --> |             | --> |             |
+--------+     +-------------+     +-------------+
                      |
                      | (network B)

Homepage

This project does not have its own homepage yet, unlike many other Osmocom projects.

GIT Repository

You can clone from the official osmo-s1gw.git repository using

$ git clone https://gitea.osmocom.org/erlang/osmo-s1gw

There is a web interface at https://gitea.osmocom.org/erlang/osmo-s1gw

Documentation

Once the project reaches a usable milestone, we will be working on a user manual. Stay tuned.

Contributing

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

We use 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-s1gw can be seen at https://gerrit.osmocom.org/#/q/project:erlang/osmo-s1gw+status:open.

Building

Install erlang and rebar3 packages (not "rebar", that's version 2! You may need to compile it from source in some distros).

$ rebar3 asn compile
$ rebar3 compile
$ rebar3 escriptize

Testing

Unit tests can be run this way:

$ rebar3 eunit

Running

Once osmo_s1gw is built, you can start it this way:

$ rebar3 shell --config config/sys.config

Configuration

The default configuration can be found in config/sys.config.

The existing parameters can be represented as follows:

  eNB              S1GW
+-----+     +----------------+
| ... | --> | s1gw_bind_addr |             MME
+-----+     +----------------+     +-----------------+
            |  mme_loc_addr  | --> |  mme_rem_addr   |
            +----------------+     +-----------------+
  • s1gw_bind_addr - S1GW bind address for incoming eNB connections
  • mme_loc_addr - local address for outgoing connections to the MME
  • mme_rem_addr - remote address for outgoing connections to the MME

Logging can be configured in the kernel section:

  • {logger_level, info} - logging level (one of emergency | alert | critical | error | warning | notice | info | debug)
  • #{formatter => { ... } - logging formatting configuration