nextepc as lte core network · member • sukchan lee-seoul, ministry of unification(2011~),...

25
NextEPC as LTE core network Sukchan Lee

Upload: others

Post on 16-May-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

NextEPC as LTE core network

Sukchan Lee

About NextEPC• NextEPC is a C-language Open Source implementation of

the 3GPP Evolved Packet Core, i.e. the core network of an LTE network

• NextEPC provides MME/SGW/PGW/HSS/PCRF

• NextEPC has been tested on GNU/Linux distributions(Debian, Ubuntu, CentOS, Fedora, openSUSE), FreeBSD, and Mac OS X.

• Package Support : Debian/Ubuntu(by Harald), openSUSE(by Martin Hauke), Fedora?

Member• Sukchan Lee

- Seoul, Ministry of Unification(2011~), Software Engineer in Security(2000~2002), L2/L3 Switch(2003~2004), and Wireless Network(2004~2009)

• Jinyoung Park- Seattle, Software Engineer in Juni Global Networks. eNodeB femtocell

• Brandon Jihoon Lee- Denver, Professor in Colorado University Boulder

• We are from the same university from POSTECH

• We are very close friends who have worked for many hours.

libcore• In 2010, the core library is designed by Sukchan Lee,

Jinyoung Park, and Gwangseok Kim

• Refer to Apache Runtime Library(libapr) for OS Abstraction Layer- Thread, Proc, Mutex/Semaphore, Signal, File, Time, …

• Refer to OpenSSL for AES, SHA2, CMAC/HMAC

• Add Thread Queue, Timer, Finite State Machine, and TLV Library for Control Plane.

Memory Pool

• It’s just Array Unlike apr_pool(libapr), talloc(samba)

• No parent/child structure. Inconvenient to use

• Expand to Index Array. (e.g TEID, MME-UE-S1AP-UD)

Sample Code

Index Array

Packet Buffer• Refer to mBuf in FreeBSD network subsystem

• Every packet sent/received is handled using pkbuf structure (Zero-Copy)

Implementation• Use Static Array Pool

• Cluster Buffer - 128,256,512,1024,2048,8192

• pkbuf_t *pkbuf = pkbuf_alloc(headroom, len)

• pkbuf_free(pkbuf)

• Expand to core_malloc()/core_realloc()/core_calloc()/core_free()

• UNIX-like functions : core_XXX()

Network Interface

• Support TCP/UDP/SCTP and IPv4/IPv6

• SCTP Server uses SOCK_STREAM method. (Mac OS X uses SOCK_SEQPACKET with libusrsctp)

• All UDP use Bounded Socket. NOT sendto() BUT send().

• All Socket use Non-blocking mode. And also, one process uses only one select loop.

S1AP

• Use asn1c Library from @vlm

• Previously use ‘asn1tostruct.py’. Now remove the generated code from this script.

• Recently @velichkov and @brchiu improve ‘asn1c’ to support S1AP

• NextEPC has adopted the new S1AP.

Compare Decoder

• Need more code to handle Protocol-IE

• But, no script generated code

Compare Encoder

• Especially difficult to move new S1AP

GTPv2-C & NAS

• For message encoder/decoder, we decided to use specification document.

• Use python-docs of python-pip to parse specification document.

• We encountered some problem for this approach. Lots of text errata.

• Some chart need to merge cell.

Sample of Chart Error

freeDiameter

• Very good library to implement Diameter Protocol

• Weak Point : No maintenance

• NextEPC git repository includes the source code of freeDiameter directly

Modules• Context - Maintain Data Structure

• Event - Define Message & Timer Event

• Build - Control Plane Message Encoder

• Handler - Message & Timer Handler

• State Machine - Main Routine

• Path - S1AP/GTP/Diameter Data Path

WebUI & DB• Database : MongoDB

• Backend : node.js/express, Frontend : react

• Framework : next.js

• Data Handling : redux-saga

• Authentication : passport

• User Interface : styled-component

Form : Use JSON Schema

Test Code• libcore is tested with Unit-Test manner.

• 5 elements(MME/SGW/PGW/HSS/PCRF) are tested with Automated Test manner Like TTCN-3. But Use C-language.

- UE/eNB Test Packet is hard-corded raw packet from Wireshark pcapng.

- Some Test Packet created by S1AP encoder

• For VoLTE, P-CSCF Protocol Stack is minimally implemented

Running ./testepc

Docker

• Focus on the TEST environment

• Use docker-compose

• Build/Dev/Run/Test

My Current Working

• Cannot Test VoLTE with IMS network- Mobile(or USIM) does not initiate SIP packet

• Which interface is better between HSS/PCRF and WebUI- HSS-initiated UE detach from WebUI

- Between C language based processor and Node.js

NextEPC Status• Where we are?

- The basic features including Handover seem to work reliable in the LAB.

- 4 eNB and 8 UE is used with Maximum Throughput and EDGE Environment

- NextEPC could be mainly used as a TestEPC for developing eNB or UE.

• Missing- Unit Test, Automated Test is available

- No End-to-End test Suite, No CI(Continuous Integration)

- No Subscriber-based Logging for Service Provider

• Business(or Commercial) is NOT YET.

What we want to do?

• Make the Open Source Community stronger and stronger

• In the roadmap,- CS Fallback, SRVCC, Inter-RAT handover(from 2G/3G)

- ePDG Gateway(from WiFI)

- eMBMS, NB-IoT

- OCS/OFCS(from Service Provider)

• When anyone comes to us, we will do it first.

How to co-work?

• Please, give us Wireshark file for new features if available.

• If not avaiable, we will implement the missing packet with my encoder.

• It will be updated to GitHub repository.

• You can use it!