Osmocom S1 gateway/proxy. This is used on the S1 interface between eNB and MME/CN and acts as separation between the eNB-facing IP network and the CN-facing IP network, which may be separate without routing in between.
Go to file
Vadim Yanitskiy ab9ea5d1e8 fix Copyright year in *.erl files: 2021 -> 2024
Change-Id: I610ced7d15a8a1652813c02978e2d7569c077337
2024-06-20 02:52:22 +07:00
asn1 Check-in S1AP ASN.1 definitions (3GPP TS 36.413 v17.6.0) 2024-06-05 15:02:49 +02:00
config logging: cosmetic: print mfa at the end of each line 2024-06-13 01:14:38 +07:00
contrib Makefile,contrib/jenkins: import from osmo-epdg 2024-06-06 01:44:51 +07:00
include Move S1AP constants into a header file 2024-06-05 15:03:00 +02:00
src fix Copyright year in *.erl files: 2021 -> 2024 2024-06-20 02:52:22 +07:00
test s1ap_proxy: implement patching of INITIAL CONTEXT SETUP REQ/RSP 2024-06-06 10:41:09 +02:00
.gitignore .gitignore: ignore generated S1AP code 2024-06-05 15:02:52 +02:00
.gitreview gitreview: update project path 2024-06-06 10:37:22 +02:00
COPYING Add COPYING and license headers to *.erl files 2024-06-06 01:44:51 +07:00
Makefile Makefile,contrib/jenkins: import from osmo-epdg 2024-06-06 01:44:51 +07:00
README.md README: use shorter 'make' commands 2024-06-06 01:44:51 +07:00
rebar.config rebar.config: add escript and relx parameters 2024-06-05 15:03:27 +02:00
rebar.lock Rework logging config, colorize output 2024-06-05 15:03:05 +02: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).

$ make

Testing

Unit tests can be run this way:

$ make check

Running

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

$ make run

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