{"id":13799687,"url":"https://github.com/omec-project/up4","last_synced_at":"2026-02-13T18:38:59.381Z","repository":{"id":39638036,"uuid":"254474280","full_name":"omec-project/up4","owner":"omec-project","description":"ONOS app and P4 program abstracting a network of switches as one big 4G/5G UPF","archived":false,"fork":false,"pushed_at":"2022-08-25T12:41:11.000Z","size":1446,"stargazers_count":21,"open_issues_count":0,"forks_count":14,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-06-05T11:32:21.613Z","etag":null,"topics":["4g","5g","aether","onos","p4","sd-fabric","sdn","upf"],"latest_commit_sha":null,"homepage":"https://docs.sd-fabric.org/master/advanced/p4-upf.html","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/omec-project.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSES/Apache-2.0.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-09T20:42:18.000Z","updated_at":"2024-12-24T15:38:05.000Z","dependencies_parsed_at":"2022-07-14T22:46:44.301Z","dependency_job_id":null,"html_url":"https://github.com/omec-project/up4","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/omec-project/up4","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omec-project%2Fup4","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omec-project%2Fup4/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omec-project%2Fup4/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omec-project%2Fup4/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/omec-project","download_url":"https://codeload.github.com/omec-project/up4/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omec-project%2Fup4/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29414282,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T06:24:03.484Z","status":"ssl_error","status_checked_at":"2026-02-13T06:23:12.830Z","response_time":78,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["4g","5g","aether","onos","p4","sd-fabric","sdn","upf"],"created_at":"2024-08-04T00:01:05.123Z","updated_at":"2026-02-13T18:38:59.367Z","avatar_url":"https://github.com/omec-project.png","language":"Java","funding_links":[],"categories":["NFs"],"sub_categories":[],"readme":"\u003c!--\nSPDX-FileCopyrightText: 2020 Open Networking Foundation \u003cinfo@opennetworking.org\u003e\nSPDX-License-Identifier: Apache-2.0\n--\u003e\n\n# UP4\n\n[![codecov](https://codecov.io/gh/omec-project/up4/branch/master/graph/badge.svg?token=ZJ1RZ6CFXK)](https://codecov.io/gh/omec-project/up4)\n[![Build Status](https://jenkins.opencord.org/buildStatus/icon?job=up4-postmerge-pfcp\u0026subject=up4-postmerge-pfcp)](https://jenkins.opencord.org/job/up4-postmerge-pfcp/)\n[![Build Status](https://jenkins.opencord.org/buildStatus/icon?job=up4-postmerge-p4rt\u0026subject=up4-postmerge-p4rt)](https://jenkins.opencord.org/job/up4-postmerge-p4rt/)\n[![Build Status](https://jenkins.opencord.org/buildStatus/icon?job=up4-latest-nightly-pfcp\u0026subject=up4-latest-nightly-pfcp)](https://jenkins.opencord.org/job/up4-latest-nightly-pfcp/)\n[![Build Status](https://jenkins.opencord.org/buildStatus/icon?job=up4-latest-nightly-p4rt\u0026subject=up4-latest-nightly-p4rt)](https://jenkins.opencord.org/job/up4-latest-nightly-p4rt/)\n\nThis repository is part of the SD-Fabric project. It provides an ONOS app that\nabstracts a network of one or more fabric switches as a virtual \"One-Big-UPF\",\nwhich can be integrated with a 4G/5G mobile core control plane.\n\nThe UP4 app is essentially a P4Runtime server that translates read and write\nrequests into multiple ONOS API calls for the underlying physical devices. The\nOne-Big-UPF abstraction is defined using a P4 program describing a \"virtual UPF\npipeline\". Such P4 program doesn't run on switches, but it's used as the schema\nto define the content of the P4Runtime messages that can be exchanged with the\nUP4 app.\n\nTo learn about the architecture, capabilitites, and instructions, including\nintegration with standard 3GPP interfaces such as PFCP, please refer to the\nofficial [SD-Fabric documentation][sdfab-docs].\n\nTo learn about the origins of the UP4 project and the rationale behind it,\ncheck the paper:\n\n*R. MacDavid et al. [A P4-based 5G User Plane Function][up4-sosr21], SOSR 2021*\n\n## Requirements\n\nTo build and test UP4 you will need the following software to be installed on\nyour machine:\n\n* Docker\n* make\n\nDocker is used to run the necessary without worrying about additional\ndependencies. Before starting, make sure to fetch all the required Docker\nimages:\n\n    make deps\n\n## Content\n\n### P4 Implementation\n\nThe directory `p4src` contains the P4 program defining the virtual UPF pipeline.\n\nTo build the P4 program:\n\n    make build\n\nTo generate the pipeline graphs (in PDF format):\n\n    make graph\n\n### ONOS App\n\nThe directory `app` contains the Java code for the ONOS app implementation.\n\nTo build the app:\n\n    make app-build\n\nThe `app` directory has further instructions for loading and testing.\n\n### Packet-based Unit Tests\n\nThe directory `ptf` contains unit tests for the virtual UPF P4 program. Tests\nuse PTF, a Python-based framework for data plane testing, and `stratum_bmv2`,\nthe reference P4 software switch ([BMv2 simple_switch][bmv2]) built with\n[Stratum][stratum] support to provide a P4Runtime and gNMI server interface.\n\nTo run all test cases:\n\n    make check\n\n`ptf/tests` contains the actual test case implementation, organized in\ngroups, e.g., `routing.py` for all test cases pertaining the routing\nfunctionality, `packetio.py` for control packet I/O, etc.\n\nTo run all tests in a group:\n\n    make check TEST=\u003cGROUP\u003e\n\nTo run a specific test case:\n\n    make check TEST=\u003cGROUP\u003e.\u003cTEST NAME\u003e\n\nFor example:\n\n    make check TEST=packetio.PacketOutTest\n\n`ptf/lib` contains the test runner as well as libraries useful to simplify\ntest case implementation (e.g., `helper.py` provides a P4Info helper with\nmethods convenient to construct P4Runtime table entries)\n\n### Integration Tests\n\nThe directory `scenarios` contains integration test scenarios and scripts to run\na Mininet-based emulated network of BMv2 switches controlled by ONOS and UP4.\n\nCheck the included [README](scenarios/docs/README.md) for more information.\n\n[sdfab-docs]: https://docs.sd-fabric.org/master/advanced/upf.html\n[up4-sosr21]: https://www.cs.princeton.edu/~jrex/papers/up4-sosr21.pdf\n[bmv2]: https://github.com/p4lang/behavioral-model\n[stratum]: https://github.com/stratum/stratum\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomec-project%2Fup4","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fomec-project%2Fup4","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomec-project%2Fup4/lists"}