Magma is an open-source software platform that gives network operators an open, flexible and extendable mobile core network solution.

Magma

Connecting the Next Billion People

License GitHub Release PR's Welcome GitHub contributors GitHub last commit GitHub commit activity the past week CircleCI CodeCov

Magma is an open-source software platform that gives network operators an open, flexible and extendable mobile core network solution. Magma enables better connectivity by:

  • Allowing operators to offer cellular service without vendor lock-in with a modern, open source core network
  • Enabling operators to manage their networks more efficiently with more automation, less downtime, better predictability, and more agility to add new services and applications
  • Enabling federation between existing MNOs and new infrastructure providers for expanding rural infrastructure
  • Allowing operators who are constrained with licensed spectrum to add capacity and reach by using Wi-Fi and CBRS

Magma Architecture

The figure below shows the high-level Magma architecture. Magma is 3GPP generation (2G, 3G, 4G or upcoming 5G networks) and access network agnostic (cellular or WiFi). It can flexibly support a radio access network with minimal development and deployment effort.

Magma has three major components

  • Access Gateway. The Access Gateway (AGW) provides network services and policy enforcement. In an LTE network, the AGW implements an evolved packet core (EPC), and a combination of an AAA and a PGW. It works with existing, unmodified commercial radio hardware.

  • Orchestrator. Orchestrator is a cloud service that provides a simple and consistent way to configure and monitor the wireless network securely. The Orchestrator can be hosted on a public/private cloud. The metrics acquired through the platform allows you to see the analytics and traffic flows of the wireless users through the Magma web UI.

  • Federation Gateway. The Federation Gateway integrates the MNO core network with Magma by using standard 3GPP interfaces to existing MNO components. It acts as a proxy between the Magma AGW and the operator's network and facilitates core functions, such as authentication, data plans, policy enforcement, and charging to stay uniform between an existing MNO network and the expanded network with Magma.

Magma architecture diagram

Documentation

Magma's usage docs, and developer docs, are available at https://docs.magmacore.org/docs/basics/introduction.html.

Join the Magma community

See the Community page for entry points.

Start by joining the community on Slack: magmacore workspace.

Direct specific questions to the GitHub Discussions page. Your question might already have an answer!

Contributing

Start with the project's contributing conventions

If you're new to the project, also consider reading

License

Magma is BSD License licensed, as found in the LICENSE file.

The EPC originates from OAI (OpenAirInterface Software Alliance) and is offered under the same BSD-3-Clause License.

Owner
Magma
Magma is an open-source software platform that gives network operators an open, flexible and extensible mobile core network solution.
Magma
Comments
  • feat(agw): Inject state sync interval

    feat(agw): Inject state sync interval

    Signed-off-by: Eli Sutton [email protected]

    Summary

    Make state service sync interval configurable from orchestrator Issue #8482

    Test Plan

    Unit Tests Local testing

    Additional Information

  • feat(mme): 5G AMF additions

    feat(mme): 5G AMF additions

    Test case :

    1. verified basic flows using UERANSIM a) Initial Registration b) PDUSession c) Deregistration
    2. Run all mme unit test cases

    Signed-off-by: ganeshg87 [email protected]

    Summary

    • 5G Core interactions - Access and Mobility Function(AMF) included(amf)
    • NGAP changes for 5G gNB interactions
    • n11 interface between AMF - SMF
    • 5G Authentication feature.

    Test Plan

    Additional Information

    • [ ] This change is backwards-breaking
  • SMS Cli appears to crash MME

    SMS Cli appears to crash MME

    Your Environment

    • Version: v1.3 stable (patched MME and patched uplink_bridge.py)
    • Affected Component: Orchestrator & Access Gateway
    • Affected Subcomponent: SMSd and MME
    • Deployment Environment: e.g. AWS (orc8r) , bare-metal (AGW), iPhone 11pro

    Describe the Issue

    Trying to test SMS functionality via SMSd. I first used API to try to send SMS to IMSI, but it returns 0 attempts and status waiting. (see screenshot)

    I then tried to use the sms_cli to send the SMS, but that appears to crash the mme.

    To Reproduce

    1. Attach iPhone 11pro to Network
    2. Via SSH in AGW, issue sms_cli du mesage to UE e.g.sms_cli.py DU 315010999900110 1fc13a00
    3. Observe journal where MME sig terms and restarts

    Expected behavior Expected behavior is SMS is delivered to phone or fails without taking down mme.

    Screenshots Screenshot of API SMS none-delivery

    Additional context ZIp of: console log of command pcap of s1 mme.log journal of sequence of UE attach, issue sms_cli.py command, mme sig term 10:29 Testing.zip

    Test Network drawing (orc8r in AWS) SMS iPhone Test

  • chore: Upgrade to Go 1.18

    chore: Upgrade to Go 1.18

    Summary

    +--------------------------------------+ Note: Merge together with #12422.
    +--------------------------------------+

    This PR upgrades Magma to Go 1.18. While there are various good reasons to upgrade Go to a recent version, the initial motivation for us was the implementation of the distributed tracing proposal (#10492). The needed Open Telemetry modules rely on Go >= 1.16.

    Closes https://github.com/magma/magma/issues/4055, closes https://github.com/magma/magma/issues/12559.

    We recommend to review commit by commit. (Many changes are in generated code, which we put into the ./build.py --generate commit).

    Most prominent changes

    go-swagger

    With Go various other modules have to be upgraded as well. The most influential change is the version bump in go-swagger from v0.21.0 to v0.29.0 (currently latest). It was necessary to get swagger generation going.

    The upgrade in go-swagger causes changes in generated files and requires minor changes in code and tests at various places to maintain previous functionality. They are bundled in the following commits:

    • snapshot tests: RewriteTest and GenerateTest: substitute expected...
    • fix build and test errors due to swagger generation...

    go install and go get

    Behaviour of go install and go get changes in Go >= 1.16 (see https://go.dev/doc/go1.16 for go install and https://go.dev/doc/go1.18 for go get).

    If used within a module, a version suffix has to be used to ignore module requirements (e.g. go install [email protected]). Without version suffix an entry in go.mod file is required. This causes commands like make tools to fail with Go >=1.16. We thus updated existing tools.go files and introduced new tools.go files in commit Update existing tools.go files...

    Commit Replace go get with go install... is due to changes of go get behaviour.

    Dockerfiles

    Dockerfiles are updated to use Go 1.18 in commits Update Dockerfiles to Go 1.18 and update orc8r_deployer dockerfile....

    VM and DevContainer can be upgraded independently once this PR is merged (see #12422 and #12424).

    CI

    Commit Update Go to 1.18 in CI switches to Go 1.18 in various workflows. We also filed two separate PRs with CI Updates in #12352 and #12305 as prerequisite for this PR.

    mockery and go-acc

    An upgrade of mockery to v2 and go-acc to v0.2.8 is also necessary and done in commits upgrade mockery to v2... and upgrade go-acc to get it running.... Since we changed some mocked functions to use pointers commit generate new mockery files is needed.

    go-openapi in cwf_operator module

    To fix an error similar to this one https://github.com/kubernetes-sigs/kustomize/tree/master/cmd/depprobcheck certain versions of go-openapi modules were pinned in commit Replace versions of go-openapi/spec… to resolve incomaptible versions.

    Test Plan

    • [x] CI (Also ran various checks locally, but they are all included in the CI.)
    • [x] local tests with running orc8r, AGW and NMS: tested various workflows like
      • end2end workflow of updating config yaml file in NMS
      • setting configs with swagger
      • propagation of mconfig to AGW
    • [x] Precommit checks in feg/gateway/docker and orc8r/cloud/docker, ./build.py -c
    • [x] cwag precommit test, vagrant up cwag && vagrant ssh cwag && cd magma/cwf/gateway && make precommit (relies on first doing vagrant up cwag --provision with https://github.com/magma/magma/pull/12422)
    • [x] cwag integ test: https://docs.magmacore.org/docs/cwf/dev_testing#run-integration-tests
    • [x] Federated integ test: https://docs.magmacore.org/docs/next/feg/s1ap_federated_tests#s1ap-federated-integration-tests
    • [x] Build and deploy a K8s Orc8r (can be locally using Minikube)

    Open point for follow-up PR

    • Run make gen in orc8r/cloud/api/v1/. This generates changes in roughly 1000 files, might be easier to review this one if done in a seprate PR.

    Additional Information

    • Done in pairing with @sebathomas, @voisey, @ajahl, @Neudrino.

    • Once this PR is merged you will have to run vagrant up magma --provision to install Go 1.18 on your VM.

    • [ ] This change is backwards-breaking

  • [Proposal] Make `Domain proxy integration tests with orc8r` required check

    [Proposal] Make `Domain proxy integration tests with orc8r` required check

    Brief Context & scope

    We would like to have the Domain proxy integration tests with orc8r Check from dp-workflow required in CI. Changes in orc8r possibly can have an impact on the Domain Proxy component, we would like to avoid merging changes which break compatibility between Orchestrator and Domain Proxy. The Check was improved and recently is robust and we didn't see flakiness in this job

    Link to job definition: https://github.com/magma/magma/blob/7fe7fde1607dd015c4210b2d70de0f8efacd78d8/.github/workflows/dp-workflow.yml#L370

    Goals

    Prevent any PRs that break this test from being merged into master.

    Proposal

    • Make an announcement in #dev that this test will now be mandatory.
    • Wait 3 days for any objections
    • Turn on the required check!
    • Update documentation on GitHub wiki - move check from "non-blocking" to "blocking" table
  • [NMS] AGW health status incorrectly shows as 'BAD' in NMS GUI

    [NMS] AGW health status incorrectly shows as 'BAD' in NMS GUI

    Your Environment

    • Version: 1.5
    • Affected Component: NMS
    • Affected Subcomponent: AGW Health in NMS
    • Deployment Environment: AWS (orc8r)

    Describe the Issue

    Customers see AGW health shown as BAD in NMS but becomes good after refreshing the page Internal Task: T93533003

    Screen Shot 2021-06-17 at 2 58 23 PM Screen Shot 2021-06-17 at 2 58 40 PM

  • Fix sync RPC connection disruptions on dispatcher

    Fix sync RPC connection disruptions on dispatcher

    Sync RPC has historically caused issues with federated deployments. Here we intend to root cause and fix this issue.

    The issue appears most frequently when load testing a federated deployment. Above 1k attaches (producing s6a and session proxy RPC calls), the underlying h2 connection gets closed. This causes all calls through feg relay to fail until magmad on the feg can initiate a new sync RPC connection. It is worth noting that orc8r's shift from nghttpx to nginx as made the issue worse.

  • feat(feg): Services Based Interface code generation for N7 interface

    feat(feg): Services Based Interface code generation for N7 interface

    Signed-off-by: GANESH IRRINKI [email protected]

    Summary

    • 3GPP SBI Code generated based on https://github.com/deepmap/oapi-codegen. SBI openapis are defined in OpenAPI 3.0 specification and go-swagger will not work.
    • Though only N7 inteface openapi is required, it has depencies on other 3GPP openapi files. Hence other files are also included.
    • The OpenAPI specifications are taken from 3GPP specification v15.8. The following modifications are made to the specifications
      • Resolved cycling dependencies by moving the definitions to common openapi file
      • Changed few names that were causing compilation error on the generated code
    • Added go:generate for regenerating the go code, when the openapi yaml files are changed.
    • Each generated go file is maintained in its own package, because of the way the code is generated and to avoid conflicting definitions.

    Files obtained from 3GPP are in the directory - feg/gateway/sbi/defs/TS*.yaml

    Files generated - feg/gateway/sbi/specs/TS*/TS*.gen.go

    Files modified or newly added feg/gateway/sbi/sbi_test.go feg/gateway/sbi/sbi.go feg/gateway/docker/go/Dockerfile feg/gateway/go.mod feg/gateway/go.sum feg/gateway/Makefile

    Test Plan

    Unit test code tests client request to a mock server.

    Additional Information

  • feat(agw): Added stateless support feature for ueip_imsi map

    feat(agw): Added stateless support feature for ueip_imsi map

    feat(agw): Added stateless support for ueip_imsi map

    Summary

    1. Added stateless support for ueip_imsi map
    2. Modified state_cli.py script to parse mme_ueip_imsi_map
    3. Modified config_stateless_agw.py script to clear contents of mme_ueip_imsi_map
    4. Added new test case, test_paging_after_mme_restart.py to validate the resumption of mme_ueip_imsi_map after mme has restarted and added to sanity test suite
    5. Modified s1ap_utils.py to get the remaining entries after test case is completed.

    Test Plan

    Executed s1ap sanity test suite

  • mme crash, GDB can't read coredump

    mme crash, GDB can't read coredump

    Your Environment

    • Version: 1.3.2 (with patch to lte/gateway/c/oai/tasks/nas/emm/sap/emm_send.c based on e5638c7)
    • Affected Component: Access Gateway
    • Affected Subcomponent: MME/Mobilityd/pipelined
    • Deployment Environment: bare-metal (AGW)

    Describe the Issue

    Got a customer call about outage of MME causing all UEs to lose connection for short period. (i.e. mme restart)

    Looking at logs I can't see what went wrong. At 15:20:13 we start seeing error message from mobilityd about IP address allocation issue. Odd because IP are statically assigned for all SIM cards. Note all the notices about subscriberDB being locked in proximity to that time in syslog.

    Network is per this diagram (bridge mode, static IPs everywhere WAN, UEs, eth1, eNB etc). accessParks-MME crash ticket

    There is a core-* file produced. But our attempts to open with GDB it complains about the binary not matching even when we use the matching mme binary (both attached).

    removed the logs and shared it privately

  • 5G SA MultiSession TCs Regression Failing root cause Tracker

    5G SA MultiSession TCs Regression Failing root cause Tracker

    Hi Arun,

    Please arrange the automation TC for Multi session to cover required positive and negative scenarios.

    I created TC in the requested format. Please find the attached document for your perusal and let me know for any additional inputs.

    https://wavelabstechnologies.sharepoint.com/:x:/r/sites/Wavelabs-Connectivity/_layouts/15/Doc.aspx?sourcedoc=%7B119DE675-716C-4565-8216-8DEBB2489931%7D&file=Feature_TestCase_Desing_Document.xlsx&action=default&mobileredirect=true&wdOrigin=TEAMS-ELECTRON.teams.files&wdExp=TEAMS-CONTROL&wdhostclicktime=1637324150718

    Thanks and Regards, Neelima.

  • chore: upgrade to docker compose v2

    chore: upgrade to docker compose v2

    Summary

    Docker is deprecating docker compose V1. Additionally, the new features of docker compose V2 may avoid a lot of manual workarounds and mitigations for unavailable functionality in V1. Since Docker changed the naming scheme of their images we run the upgrade version in a compatibility mode, denoted with several --compatibility flags. This allows us to keep the current naming scheme and docker-compose files.

    Linked to https://github.com/magma/magma/issues/13938.

    Test Plan

    • [x] Build Orc8r, SwaggerAPI, NMS along the Quick Start Guide
    • [x] Build containerized AGW along the (adapted) README.md
    • [x] LTE integration tests (incl. traffic server tests) w/ containerized AGW
    • [x] CWAG build and integration test suite
      • Run 1 with failing TestGyCreditExhaustionWithoutCCRU
      • Run 2 with failing TestAuthenticateUplinkTraffic and TestGxReAuthWithMidSessionPolicyRemoval
    • [x] FEG integration test suite
    • [x] Dev Container
    • Most GitHub Actions / CI only to be seen in CI / Artifactory

    Additional Information

    :warning: To start with a clean slate, this PR is based on the revert PR #14795.

  • feat(ci): add default values to containerized LTE integ tests

    feat(ci): add default values to containerized LTE integ tests

    Signed-off-by: Marco Pfirrmann [email protected]

    Summary

    Instead of container digests, we select containers with their name (which consists of the corresponding commit hash / latest tag) to run containerized integ tests with. While this does not matter for CI, it improves the interface for manually executing these tests since we now provide a default value for containers. Closes 14798.

    Test Plan

    Additional Information

    • [ ] This change is backwards-breaking
  • chore: integ tests always wait for pipelined

    chore: integ tests always wait for pipelined

    Signed-off-by: Nils Semmelrock [email protected]

    Summary

    This change tries to tackle multiple issues. The main idea is to not fetch the current datapath during static initialization of the s1ap_utils, but in the constructor when an object is created.

    Tackling #14068

    • Moving get_dapatath to the constructor of the s1ap_utils makes it possible to wait (before the s1ap_utils are initialized) for pipelined to actually initialize a datapath
    • this should mitigate issues described in #14068
    • for this the initialization of the s1ap_utils needs to be moved after the magmad_util is initialized (holds the functionality to wait for the start of pipelined)

    Working towards enabling again that was disable in #14682

    • With the s1ap_utils initalization moved after initializing magmad_util we can check if nat is not enabled - and enabling it in this case (this can happen if a test that run with disabled nat failed with an error that prevents the re-enabling of nat in the teardown).
    • If a test with disabled nat tries to call pipelined, then we see 6h workflow timeouts in ci.

    Tackling #14699

    • This is basically the main issue that tracks the two issues above.

    Test Plan

    executed precommit and extended tests locally

    Additional Information

    • [ ] This change is backwards-breaking
  • chore: containerized integ test results are published

    chore: containerized integ test results are published

    Signed-off-by: Nils Semmelrock [email protected]

    Summary

    This change adds integ test results for the lte containerized tests to the github workflow overview page. This makes it more easy to quickly identify failing tests.

    Test Plan

    CI

    Additional Information

    • [ ] This change is backwards-breaking
  • fix: duplicated test log upload step is removed

    fix: duplicated test log upload step is removed

    Signed-off-by: Nils Semmelrock [email protected]

    Summary

    Small change to remove a duplicated step in the bazel debian integ tests - this had, as it seems, no negative effect, i.e., this is only clean-up.

    Test Plan

    CI

    Additional Information

    • [ ] This change is backwards-breaking
Open source 5G core network base on 3GPP R15
Open source 5G core network base on 3GPP R15

What is free5GC The free5GC is an open-source project for 5th generation (5G) mobile core networks. The ultimate goal of this project is to implement

Jan 4, 2023
Hybridnet is an open source container networking solution, integrated with Kubernetes and used officially by following well-known PaaS platforms

Hybridnet What is Hybridnet? Hybridnet is an open source container networking solution, integrated with Kubernetes and used officially by following we

Jan 4, 2023
Open source forensic software to analyze and present digital evidence.
Open source forensic software to analyze and present digital evidence.

Go Forensics Core Open source forensic software to analyze digital evidence to be presented in court. The core of Go Forensics PostgreSQL The core use

May 8, 2022
Go network programming framework, supports multiplexing, synchronous and asynchronous IO mode, modular design, and provides flexible custom interfaces
Go network programming framework, supports multiplexing, synchronous and asynchronous IO mode, modular design, and provides flexible custom interfaces

Go network programming framework, supports multiplexing, synchronous and asynchronous IO mode, modular design, and provides flexible custom interfaces。The key is the transport layer, application layer protocol has nothing to do

Nov 7, 2022
Build - The axelar-core app based on the Cosmos SDK is the main application of the axelar network

⚠️ ⚠️ ⚠️ THIS IS A WORK IN PROGRESS ⚠️ ⚠️ ⚠️ axelar-core The axelar-core app bas

Feb 15, 2022
MTN Mobile Money API Client in Go

mtnmomo-go This package provides a generic go client template for the MTN Mobile Money API Installation mtnmomo-go is compatible with modern Go releas

Dec 27, 2022
An easy-to-use, flexible network simulator library in Go.

ns-x An easy-to-use, flexible network simulator library for Go. Feature Programmatically build customizable and scalable network topology from basic n

Dec 13, 2022
Open-source platform to request any SSP like Bidswitch or Xandr.

The project goal is to provide an unique program to contact every SSP without know the differences between all of them.

Apr 7, 2022
Openp2p - an open source, free, and lightweight P2P sharing network
Openp2p - an open source, free, and lightweight P2P sharing network

It is an open source, free, and lightweight P2P sharing network. As long as any device joins in, you can access them anywhere

Dec 31, 2022
Apache Traffic Control is an Open Source implementation of a Content Delivery Network

Apache Traffic Control Apache Traffic Control is an Open Source implementation of a Content Delivery Network. Documentation Intro CDN Basics Traffic C

Jan 6, 2023
Baseledger core consensus for running validator, full and seed nodes

baseledger-core Baseledger core consensus client for running a validator, full or seed node. ⚠️ WARNING: this code has not been audited and is not rea

Jan 13, 2022
Reference implementation of the PLAN Data Model and core components

PLAN is a free and open platform for groups to securely communicate, collaborate, and coordinate projects and activities.

Nov 2, 2021
Go-libp2p-core. - Home to the interfaces and abstractions that make up go-libp2p

go-libp2p-core Home to the interfaces and abstractions that make up go-libp2p. I

Jan 17, 2022
Gmqtt is a flexible, high-performance MQTT broker library that fully implements the MQTT protocol V3.1.1 and V5 in golang

中文文档 Gmqtt News: MQTT V5 is now supported. But due to those new features in v5, there area lots of breaking changes. If you have any migration problem

Jan 5, 2023
Yet another SIP003 plugin for shadowsocks, based on Xray-core

Yet another SIP003 plugin for shadowsocks, based on Xray-core Build go build Usage See command line args for advanced usages.

Jan 8, 2023
An opinionated clean fork of v2fly/v2ray-core

v2ray-go An opinionated fork of v2fly/v2ray-core. Additional Features ?? Add flag -suppressTimestamps to suppress timestamps in logs ?? Refine systemd

Nov 21, 2022
Courier Order Provider is a service that receives signals from core server in order to emit this orders to courier groups.

Courier Order Provider Courier Order Provider is a service that receives signals(messages) from core server in order to emit this orders to courier gr

Nov 4, 2021
Poseidon -- An Enhanced V2Ray(based on v2ray-core)

Poseidon -- An Enhanced V2Ray(based on v2ray-core) Support SSRPanel(VNetPanel), V2board, SSpanel-v3-Uim Features Sync user from your panel to v2ray Lo

Nov 14, 2021
Xray, Penetrates Everything. Also the best v2ray-core, with XTLS support. Fully compatible configuration.

Project X Project X originates from XTLS protocol, provides a set of network tools such as Xray-core and Xray-flutter. License Mozilla Public License

Jan 7, 2023