Coder Social home page Coder Social logo

gw-tester's Introduction

This project is active but it has been moved to its own organization for better control during its development.

GW Tester Demo

Build Status License

Summary

This project provides instructions required to setup the demo described by Yoshiyuki Kurauchi in this post. The main goal of this project is to provide an end-to-end implementation of a Cloud-Native Network Function for didactic purposes.

Architecture

Concepts

  • User Equipment (UE): This is the device that requests connectivity to the network and downloads/uploads any data.
  • Evolved UMTS Terrestrial Radio Access Network (E-UTRAN): The network of antennas or Evolved Node B (EnodeB), gives radio access to the UE anywhere there is coverage.
  • Public Data Network (PDN): It is a shared network that is accessed by users that belong to different organizations.
  • Evolved Packet Core (EPC): It validates the session request from the UE, generates a PDP context and gives access to the PDN.
    • Mobility Management Entity (MME): It does all the signaling for the mobile devices but does not process any user data traffic. An MME will provide session and mobility management for users. In addition, it tracks the location of the UE and selects the S-GW and P-GW that should serve this UE.
    • Serving Gateway (S-GW): In order to eliminate any effect on user data while the UE moves between different eNodeBs, the S-GW works as an anchor point for the user data of the UE, while the UE is moving between different eNodeBs.
    • PDN Gateway (P-GW): This is the node that connects between the LTE network and the PDN.

LTE EPC Network Interfaces

  • S1-U: Interface for S1 user plane data for each bearer between the EnodeB and S-GW. Provides non guaranteed data delivery of user plane Protocol Data Units (PDUs).
  • S1-MME: Responsible for delivering signaling protocols between the EnodeB and the MME. Consists of a Stream Control Transmission Protocol (SCTP) over IP. The application signaling protocol is an S1-AP (Application Protocol).
  • S11: Interface defined between the MME and S-GW for EPS management.
  • S5/S8:: Provides user plane tunneling and tunnel management function between the S-GW and P-GW. It enables S-GW to connect to multiple P-GWs for providing different IP services to the UE. Also used for S-GW relocation associated with the UE mobility. In principle S5 and S8 is the same interface, the difference being that S8 is used when roaming between different operators while S5 is network internal.
  • SGi: Interface is used between P-GW and intranet or internet.

Setup

This project uses Vagrant tool for provisioning Virtual Machines automatically. It's highly recommended to use the setup.sh script of the bootstrap-vagrant project for installing Vagrant dependencies and plugins required for its project. The script supports two Virtualization providers (Libvirt and VirtualBox).

curl -fsSL http://bit.ly/initVagrant | PROVIDER=libvirt bash

Once Vagrant is installed, it's possible to deploy the demo with the following instruction:

DEPLOYMENT_TYPE=k8s MULTI_CNI=danm PKG_MGR=helm vagrant up

Environment variables

Name Default Options Description
DEBUG true false, true Enables verbose execution
DEPLOYMENT_TYPE docker docker, k8s Defines the container orchestrator tool to be used for the deployment
MULTI_CNI multus multus, danm, nsm Determines the CNI multiplexer to be used for the deployment
PKG_MGR k8s k8s, helm Determines the Kubernetes package manager to be used
HOST_IP Local IP address of the host server
PLUGIN_CNI flannel flannel, ipvlan Determines the CNI plugin to be used by DANM
ENABLE_SKYDIVE false false, true Enables Skydive web dashboard
ENABLE_PORTAINER false false, true Enables Portainer web dashboard
DEPLOY_KIND_CLUSTER true false, true Determines whether a K8s cluster is deployed with Kind

Post-provision

Once the Virtual Machine is provisioned by Vagrant, it's possible to check the logs of the different containers.

vagrant ssh
cd /vagrant
make k8s-logs

SkyDive

The Skydive real-time network analyzer can be deployed during the provisioning process using the ENABLE_SKYDIVE environment variable. Once the services are up and running it's possible to access it thru the 8082 local port.

Skydive sample

gw-tester's People

Contributors

electrocucaracha avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

gw-tester's Issues

Any suggestion for combining enb, mme, sgw into a container of a pod?

Hi, I try to combine enb, mme, sgw into a container of a pod. And see you example in: https://github.com/electrocucaracha/gw-tester/tree/master/k8s/nsm/charts

The tunnels can be created, but seems can not send u plane to via gtp-sgw-s5. I think it may miss some network configuration.
Any ideas?

ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
6: net1@if366: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether ba:95:a1:45:8e:f8 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.22.0.13/24 brd 172.22.0.255 scope global net1
       valid_lft forever preferred_lft forever
    inet 172.22.0.12/24 scope global secondary net1
       valid_lft forever preferred_lft forever
8: net2@if367: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether f6:9e:c8:bc:fa:2b brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.21.0.13/24 brd 172.21.0.255 scope global net2
       valid_lft forever preferred_lft forever
    inet 172.21.0.16/24 scope global secondary net2
       valid_lft forever preferred_lft forever
10: net3@if368: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 2a:ae:54:de:54:9e brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.25.0.13/24 brd 172.25.0.255 scope global net3
       valid_lft forever preferred_lft forever
12: net4@if369: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether a2:2d:16:85:5d:cd brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.25.1.13/24 brd 172.25.1.255 scope global net4
       valid_lft forever preferred_lft forever
14: net5@if370: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 52:05:45:da:8d:e6 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.21.1.12/24 brd 172.21.1.255 scope global net5
       valid_lft forever preferred_lft forever
    inet 172.21.1.16/24 scope global secondary net5
       valid_lft forever preferred_lft forever
16: net6@if371: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 1a:4f:b7:7c:f3:64 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.0.0.254/24 brd 10.0.0.255 scope global net6
       valid_lft forever preferred_lft forever
    inet 10.0.0.202/24 brd 10.0.0.255 scope global secondary net6
       valid_lft forever preferred_lft forever
    inet 10.0.0.201/24 scope global secondary net6
       valid_lft forever preferred_lft forever
17: gtp-sgw-s1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
    link/none
18: gtp-sgw-s5: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
    link/none
24: gtp-enb: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
    link/none

ip r

10.0.0.0/24 dev net6 proto kernel scope link src 10.0.0.254
172.21.0.0/24 dev net2 proto kernel scope link src 172.21.0.13
172.21.1.0/24 dev net5 proto kernel scope link src 172.21.1.12
172.22.0.0/24 dev net1 proto kernel scope link src 172.22.0.13
172.25.0.0/24 dev net3 proto kernel scope link src 172.25.0.13
172.25.1.0/24 dev net4 proto kernel scope link src 172.25.1.13

More details: cncf/cnf-testbed#370 (comment)

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.