{"id":44787064,"url":"https://github.com/nplrkn/alsoran","last_synced_at":"2026-02-28T23:00:45.772Z","repository":{"id":65359979,"uuid":"438019677","full_name":"nplrkn/alsoran","owner":"nplrkn","description":"5G gNodeB Centralized Unit written in Rust","archived":false,"fork":false,"pushed_at":"2025-06-02T07:18:08.000Z","size":6753,"stargazers_count":43,"open_issues_count":6,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-02T18:14:33.112Z","etag":null,"topics":["5g","e1ap","f1ap","gnb-cu","gnb-cu-cp","gnb-cu-up","gnbcu","gnodeb","ngap","o-ran","openran","ran","rrc"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nplrkn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-12-13T20:46:10.000Z","updated_at":"2025-06-02T07:18:11.000Z","dependencies_parsed_at":"2023-02-16T05:31:56.864Z","dependency_job_id":"37bb42cc-cb70-4053-aa3e-39bdcb765abf","html_url":"https://github.com/nplrkn/alsoran","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nplrkn/alsoran","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nplrkn%2Falsoran","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nplrkn%2Falsoran/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nplrkn%2Falsoran/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nplrkn%2Falsoran/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nplrkn","download_url":"https://codeload.github.com/nplrkn/alsoran/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nplrkn%2Falsoran/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29954583,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-28T22:53:01.873Z","status":"ssl_error","status_checked_at":"2026-02-28T22:52:50.699Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["5g","e1ap","f1ap","gnb-cu","gnb-cu-cp","gnb-cu-up","gnbcu","gnodeb","ngap","o-ran","openran","ran","rrc"],"created_at":"2026-02-16T10:00:19.647Z","updated_at":"2026-02-28T23:00:45.761Z","avatar_url":"https://github.com/nplrkn.png","language":"Rust","funding_links":[],"categories":["Radio Access Network"],"sub_categories":["5G"],"readme":"# Alsoran\n\n*** This project is no longer active, but much of it lives on in [QCore](http://www.github.com/nplrkn/qcore) ***\n  \nAlsoran is a Rust implementation of the gNodeB Centralized Unit (gNB-CU) of the 5G Radio Access Network (RAN).\n\nThe gNodeB is the component that manages the radio access of 5G User Equipment (UEs) and connects them to a 5G Core. \n\nThis project is currently a proof of concept and not yet a fully functional gNB-CU.\n\n## Quickstart\n```\ncargo build\n./target/debug/gnb-cu --mcc 111 --mnc 11 --amf-ip 5.5.5.5\n```\n\n## Current support\n- UE registration demo against free5GC.\n- PDU session setup and release (TS 23.502, figures 4.3.2.2.1-1 and 4.3.4.2-1).\n- Relay of userplane packets between GNB-DU and UPF.\n- Separate CU-CP and CU-UP communicating using E1.\n- Scale-out of GNB-CU-CP workers using multiple TNLAs.\n- ASN.1 libraries for NGAP, E1AP, F1AP and RRC.\n- Rust ASN.1 autogenerator (written in Python).\n- UE state in Redis datastore.\n- [Triangular redirection](documentation/design/triangular-redirection.md)\n- SCTP connection management stack \n\nGenerally only the success cases are covered, and there are a lot of 'To Dos'.\n\n### Procedure support\n#### CU-CP\n-  NG Setup\n-  RAN Configuration Update\n-  F1 Setup\n-  E1 Setup\n-  Initial Access\n-  Uplink NAS\n-  Downlink NAS\n-  Initial Context Setup\n-  Pdu Session Resource Setup\n-  Pdu Session Resource Release\n-  AMF Status Indication\n-  GNB CU Configuration Update\n-  GNB DU Configuration Update\n-  GNB CU CP Configuration Update.\n#### CU-UP\n-  E1 Setup\n-  Bearer Context Setup\n-  Bearer Context Modification\n-  Bearer Context Release\n-  GNB CU CP Configuration Update\n-  Downlink user data\n-  Uplink user data\n\n## What's different about Alsoran?\n\nIt's written in Rust and it has a \"scale-out single hop\" design.\n\n\"Scale-out\" means that it has multiple interchangeable stateless worker processes.  A request can be processed by any worker and no worker is a single point of failure.  A Coordinator process coordinates the interface management exchanges of the workers when the topology changes.  The motivation is scalability and fault tolerance.\n\n\"Single hop\" means that, in the mainline case, a message is processed by a single worker (rather than chained through multiple microservices or load balancers).  Each Alsoran CU-CP worker has its own SCTP connection to the AMF, the DU and the CU-UP.  The motivation is speed and system simplicity.\n\nRust is an attractive choice of language for new O-RAN development.  The main barrier to entry is the ASN.1 and SCTP based protocols.  This project attempts to prove that this barrier is surmountable.\n\n\n## Building and running integration tests\n\nThe build relies on `lld` to reduce linker memory needs.  You will either need to install LLD (`sudo apt install lld` or similar), or edit .cargo/config to remove the `target.x86_64-unknown-linux-gnu` config, which reverts to plain `cc` linking.\n\n`cargo test` runs the integration test suite, minus the live Redis test.  \n\nTo run the live Redis test, `cargo test live_redis -- --ignored`.  For this to pass, you need to have `redis-server` in your path.  Get Redis here: https://redis.io/docs/getting-started/.\n\n## A quick tour\n\nThe following test shows the Alsoran CU-CP and CU-UP carrying out UE registration, session establishment and userplane forwarding.\n```sh\nRUST_LOG=info cargo test successful_pdu_session_setup --test pdu_session -- --nocapture\n```\n\nThis test shows two workers starting up, and the Coordinator instructing the workers how to initialize their NGAP, E1AP and F1AP interfaces.\n```sh\nRUST_LOG=info cargo test two_workers_base --test two_workers -- --nocapture\n```\n\nYou can packet capture during these tests by running the following in parallel. \n```sh\nsudo tcpdump -w alsoran.pcap -i lo port 38472 or port 38412 or port 38462 or port 38462 or port 2152\n```\n...then Ctrl-C at the end of the test and open alsoran.pcap in Wireshark.\n\nTo run the live registration against free5GC takes a bit more setup - see the [demo instructions](documentation/howto/free5GC-testing.md).\n\nFinally you might want to browse the design notes in documentation/design, which give an idea of the design thinking that has gone into Alsoran so far.\n\n## Contributing\n\nIf you would like to contribute, start by creating a Github issue or discusion to propose the change you want to make.\n\nThe [backlog](documentation/backlog.md) shows the main items being worked on and also tracks areas of tech debt. \n\nThe instructions for regenerating the two OpenAPI interfaces are in [OpenAPI generation](documentation/howto/OpenAPI%20generation.md).\n\n## 3GPP and O-RAN specifications\n\nAlsoran protocol handling and workflow logic is based on the following specifications.  \n\n-  3GPP TS23.501 - System architecture for the 5G System\n-  3GPP TS23.502 - Procedures for the 5G System\n-  3GPP TS29.281 - General Packet Radio System (GPRS) Tunnelling Protocol User Plane (GTPv1-U)\n-  3GPP TS37.324 - Service Data Adaptation Protocol (SDAP) specification\n-  3GPP TS38.300 - NR and NG-RAN Overall Description\n-  3GPP TS38.323 - Packet Data Convergence Protocol (PDCP) Specification\n-  3GPP TS38.331 - Radio Resource Control (RRC) protocol specification\n-  3GPP TS38.401 - NG-RAN; Architecture description \n-  3GPP TS38.412 - NG signalling transport \n-  3GPP TS38.413 - NG Application Protocol (NGAP)\n-  3GPP TS38.414 - NG data transport\n-  3GPP TS38.415 - PDU Session User Plane Protocol\n-  3GPP TS38.462 - E1 signalling transport\n-  3GPP TS38.463 - E1 Application Protocol (E1AP)\n-  3GPP TS38.472 - F1 signalling transport\n-  3GPP TS38.473 - F1 Application Protocol (F1AP)\n-  3GPP TS38.474 - F1 data transport\n-  O-RAN.WG5.C.1 - NR C-plane profile\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnplrkn%2Falsoran","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnplrkn%2Falsoran","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnplrkn%2Falsoran/lists"}