===============================================================================
***************************** OAISIM_MME v0.3 *********************************
===============================================================================

MME + P-GW + S-GW implementation of 3GPP standard.

|-----|       |------|
| MME | ----- | eNBs |
|-----|       |------|

Controle plane:

              eNB                                    MME                                     HSS
 
                                       |----------------------------|
                                       |    MME Application layer   |
                                       |----------------------------|
                                       |------------|                          |-------------|  |-------------|     |--------------|
                                       |     NAS    |                          |     AUC     |--|    Mysql    | --- |   Database   |
                                       |------------|                          |-------------|  |-------------|     |--------------|
|------------|   |------------|        |------------|  |--------------|        |------------------------------|
|    RRC     | - | S1AP layer | ------ | S1AP layer |  | S6A/Diameter | ------ |          S6A/Diameter        |
|------------|   |------------|        |------------|  |--------------|        |------------------------------|
                 |------------|        |------------------------------|        |------------------------------|
                 | SCTP layer | ------ |           SCTP layer         | ------ |           SCTP layer         |
                 |------------|        |------------------------------|        |------------------------------|


Non-UE associated control plane goes directly from S1AP to MME application layer.

User plane:

      eNB                   MME

|------------|        |------------|
|    PDCP    |        |     MAL    |
|------------|        |------------|
|------------|        |------------|
|    S1-U    | ------ |    S1-U    |
|------------|        |------------|
|------------|        |------------|
|  GTPV1-U   | ------ |   GTPV1-U  |
|------------|        |------------|
|------------|        |------------|
|  UDP layer | ------ |  UDP layer |
|------------|        |------------|

Current development:

- NAS  layer: under development
- S1AP layer: compliant with 3GPP TS36.413-8a0 and TS36.413-980 and TS35.413-a50
- SCTP layer: SEQ_PACKET socket types

For now the MME is able to register new eNBs on SCTP layer,
and handles S1 Setup request, Initial UE message, UplinkNASTransport on
S1AP layer.

The MME needs some libraries and tools:
- libsctp-dev (SCTP support)
- libpthread-dev
- asn1c utility (patched with Aligned PER support, see README in
S1AP/MESSAGES/ASN1)
- flex
- bison

To install the dependencies:
sudo apt-get install libsctp-dev libpthread-dev flex bison g++ gcc make -y
A script is present in S6A/freediameter to install required packages for
S6A interface over diameter

install_openvswitch1.9.0.bash
cd S6A/freediameter/README

Compilations steps for use with oaisim 4G emulation environment:
./autogen.sh or autoreconf -i --force --install
mkdir objs && cd objs
../configure [options]
make

Compilations steps for oaisim_mme use alone:
./autogen.sh
./configure [options]
make

Current options supported for configure:
--enable-r8: disable R9 and R10 S1AP messages updates
--enable-r9: disable R10 updates
code build switch: UPDATE_RELEASE_9 and UPDATE_RELEASE_10
NOTE: Release 10 is enabled by default
--enable-standalone-epc: all-in-one package, MME, S-GW and P-GW are compiled in a single
executable and S11 interface is not used; messages are exchanged internally, 
linking MME applicative layer to S+P-GW applicative layer

How to run EPC environnement ?

If you avec enabled the standalone option
the package is called oai_epc in the OAI_EPC directory.

If you have decided to use the S11 interface,
two executables should be run on different machines

* oai_sgw in OAI_SGW
* oaisim_mme in OAISIM_MME

For example to rum mme:
./OAISIM_MME/oaisim_mme [options]
Avalaible options:
-h: print help
-v: enable verbosity level [1-2]
-V: print current executable version and return

Before any commit:
make maintainer-clean

MME SCTP port for S1AP messages is 36412
SGW and eNB GTP-u port is 2152
SGW and MME GTP-c port is 2123

-------- Adding new files to build system --------
1) When adding a new file to compile, edit the Makefile.am of the corresponding
   directory.
2) Execute ./autogen.sh
3) make
WARNING: do not edit directly Makefiles and Makefile.in, they are re-generated by
         autoconf/automake.

Bugs:
report any bug to openair_admin@eurecom.fr