Giter Site home page Giter Site logo

go-gtp's Introduction

go-gtp: GTP in Golang

Package gtp provides simple and painless handling of GTP(GPRS Tunneling Protocol), implemented in the Go Programming Language.

CircleCI GolangCI GoDoc GitHub FOSSA Status

Features

  • No platform-specific codes inside, so it works almost everywhere Golang works.
  • Flexible enough to control everything in GTP protocol.;
    • For developing mobile core network nodes (see examples).
    • For developing testing tools like traffic simulators or fuzzers.
  • Many helpers kind to developers provided, like session, bearer, and TEID associations.
  • Easy handling of multiple connections with fixed IP and Port with UDP (or other net.PacketConn).

Getting Started

Prerequisites

The following packages should be installed before starting.

go get -u github.com/pkg/errors
go get -u github.com/google/go-cmp/cmp
go get -u github.com/pascaldekloe/goe/verify

If you use Go 1.11+, you can also use Go Modules.

GO111MODULE=on go [test | build | run | etc...]

Running examples

Examples works as it is by go build and executing commands in the following way.

  1. Open four terminals on a machine and start capturing on loopback interface.

  2. Start P-GW on terminal #1 and #2

// on terminal #1
./pgw

// on terminal #2
./pgw -s5c 127.0.0.53:2123 -s5u 127.0.0.5:2152
  1. Start S-GW on terminal #3
// on terminal #3
./sgw
  1. Start MME on terminal #4
// on terminal #4
./mme
  1. You will see the nodes exchanging Create Session and Modify Bearer on C-Plane, and ICMP Echo on U-Plane afterwards.

If you want to see fewer number of subscribers, please comment-out the v2.Subscriber definitions in example/mme/main.go.

Developing by your own

Each version has net.PacketConn-like APIs and GTP-specific ones which is often version-specific. The basic idea behind the current implementation is;

  • Dial() or ListenAndServe() to create a connection(Conn) between nodes.
  • Register handlers to the Conn for specific messages with AddHandler(), which allows users to handle the messages coming from the remote endpoint as flexible as possible, with less pain.
  • CreateXXX() to create session or PDP context with arbitrary IEs given. Session/PDP context is structured and they also have some helpers like AddTEID() to handle known TEID properly.

For the detailed usage of specific version, see README.md under each version's directory.

Version Details
GTPv0 README.md
GTPv1 README.md
GTPv2 README.md

Supported Features

Note that "supported" means that the package provides helpers which makes it easier to handle. In other words, even if a message/IE is not marked as "Yes", you can make it work with some additional effort.

Your contribution is welcome to implement helpers for all the types, of course!

Version Messages IEs Networking (state machine) Details
GTPv0 35.7% 81.8% not implemented yet Supported Features
GTPv1 26.6% 30.1% v1-U is functional,
v1-C is not implemented yet
Supported Features
GTPv2 32.0% 43.2% almost functional Supported Features
GTP'
(Prime)
N/A N/A N/A not planned

Disclaimer

This is still an experimental project. Any part of implementations(including exported APIs) may be changed before released as v1.0.0.

Author(s)

Yoshiyuki Kurauchi (Twitter / LinkedIn)

I'm always open to welcome co-authors! Please feel free to talk to me.

LICENSE

MIT

FOSSA Status

go-gtp's People

Contributors

fossabot avatar wmnsk avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.