{"id":45139513,"url":"https://github.com/netgroup/rose-srv6-control-plane","last_synced_at":"2026-02-20T00:33:13.203Z","repository":{"id":44191164,"uuid":"262037102","full_name":"netgroup/rose-srv6-control-plane","owner":"netgroup","description":"This project provides a collection of modules implementing different control plane functionalities of a Software Defined Network (SDN).","archived":false,"fork":false,"pushed_at":"2024-03-18T10:28:15.000Z","size":7409,"stargazers_count":21,"open_issues_count":13,"forks_count":7,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-04-20T21:33:38.695Z","etag":null,"topics":["arango","arangodb","control-plane","grpc","sdn","sdn-controller","sdn-srv6-controller","segment-routing","srv6","srv6-controller","srv6-functions"],"latest_commit_sha":null,"homepage":"https://netgroup.github.io/rose-srv6-control-plane","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/netgroup.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}},"created_at":"2020-05-07T11:55:01.000Z","updated_at":"2024-03-13T06:25:40.000Z","dependencies_parsed_at":"2023-01-25T09:30:51.742Z","dependency_job_id":null,"html_url":"https://github.com/netgroup/rose-srv6-control-plane","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/netgroup/rose-srv6-control-plane","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgroup%2Frose-srv6-control-plane","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgroup%2Frose-srv6-control-plane/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgroup%2Frose-srv6-control-plane/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgroup%2Frose-srv6-control-plane/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/netgroup","download_url":"https://codeload.github.com/netgroup/rose-srv6-control-plane/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgroup%2Frose-srv6-control-plane/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29637413,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T22:32:43.237Z","status":"ssl_error","status_checked_at":"2026-02-19T22:32:38.330Z","response_time":117,"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":["arango","arangodb","control-plane","grpc","sdn","sdn-controller","sdn-srv6-controller","segment-routing","srv6","srv6-controller","srv6-functions"],"created_at":"2026-02-20T00:33:13.078Z","updated_at":"2026-02-20T00:33:13.190Z","avatar_url":"https://github.com/netgroup.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ROSE SRv6 Control Plane \u003cimg align=\"right\" src=\"https://img.shields.io/github/stars/netgroup/rose-srv6-control-plane?style=social\"\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003cdiv align=\"center\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/python-3.6|3.7|3.8-blue?logo=python\"\u003e\n        \u003cimg src=\"https://github.com/netgroup/rose-srv6-control-plane/workflows/Python%20package/badge.svg\"\u003e\n        \u003cimg src=\"https://github.com/netgroup/rose-srv6-control-plane/workflows/Lint%20Code%20Base/badge.svg\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/license/netgroup/rose-srv6-control-plane\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/v/release/netgroup/rose-srv6-control-plane?sort=semver\"\u003e\n    \u003c/div\u003e\n    \u003cdiv align=\"center\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/release-date/netgroup/rose-srv6-control-plane\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/issues/netgroup/rose-srv6-control-plane\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/issues-closed/netgroup/rose-srv6-control-plane\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/issues-pr/netgroup/rose-srv6-control-plane\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/issues-pr-closed/netgroup/rose-srv6-control-plane\"\u003e\n        \u003c!--\u003cimg src=\"https://img.shields.io/github/contributors/netgroup/rose-srv6-control-plane\"\u003e--\u003e\n        \u003c!--\u003cimg src=\"https://img.shields.io/github/commit-activity/m/netgroup/rose-srv6-control-plane\"\u003e--\u003e\n    \u003c/div\u003e\n\u003c/div\u003e\n\u003cbr /\u003e\n\n\u003e Control plane functionalities for SDN.\n\n\u003ca href=\"https://netgroup.github.io/rose/\"\u003e\n    \u003cimg align=\"right\" src=\"docs/images/rose-logo-recolored-red-200x60.png\"\u003e\n\u003c/a\u003e\n\u003cbr /\u003e\n\n## Table of Contents\n* [Getting Started](#getting-started)\n* [Project Overview](#project-overview)\n* [Database utilities](#database-utilities)\n* [Control plane functionalities](#control-plane-functionalities)\n    * [Node manager](#node-manager)\n    * [Controller](#controller)\n    * [Protocol Buffers](#protocol-buffers)\n    * [Usage examples](#usage-examples)\n        * [How to use the Controller CLI](#how-to-use-the-controller-cli)\n        * [How to use the Controller API in your Python application](#how-to-use-the-controller-api-in-your-python-application)\n* [Docker](#docker)\n    * [Build the Docker image](build-the-docker-image)\n    * [Run the controller container](#run-the-controller-container)\n    * [Run the node-manager container](#run-the-node-manager-container)\n    * [Access to the Docker container](#access-to-the-docker-container)\n* [Requirements](#requirements)\n* [Links](#links)\n* [Issues](#issues)\n* [Contributing](#contributing)\n* [Versioning](#versioning)\n* [License](#license)\n\n\n## Getting Started\n\nThis project provides a collection of modules implementing different control plane functionalities of a Software Defined Network (SDN), including SRv6 tunnel management aspects, exporting and uploading the network topology to a database and monitoring the performance of a network.\n\nThe project is part of a larger ecosystem called [Research on Open SRv6 Ecosystem (ROSE)](https://netgroup.github.io/rose/).\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003cb\u003eROSE Homepage:\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"https://netgroup.github.io/rose/\"\u003ehttps://netgroup.github.io/rose\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003cb\u003eDocumentation:\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"https://netgroup.github.io/rose-srv6-control-plane\"\u003ehttps://netgroup.github.io/rose-srv6-control-plane\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003cb\u003eReport a bug:\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"https://github.com/netgroup/rose-srv6-control-plane/issues\"\u003ehttps://github.com/netgroup/rose-srv6-control-plane/issues\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003cb\u003eContact page:\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"https://netgroup.github.io/rose/rose-contacts.html\"\u003ehttps://netgroup.github.io/rose/rose-contacts.html\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\nTo start using the project, you need to clone this repository:\n\n```console\n$ git clone https://github.com/netgroup/rose-srv6-control-plane\n```\n\n## Project Overview\n\nThis repository is structured as follows:\n\n    .\n    ├── db_update           # Database utilities\n    ├── control_plane       # Control plane modules\n    ├── Dockerfile          # Dockerfile\n    ├── LICENSE             # Apache 2.0 license text\n    └── README.md\n\n\n## Database utilities\n\n*db_update* is a Python library used to connect the Controller to a database. Using this library, the Controller can interact with a database in order to store information like the topology graph of a network.\n\n\n## Control plane functionalities\n\nThe *control_plane* folder contains the two main components of this project:\n* Controller, a SDN Controller\n* Node Manager, an agent that must be installed on the node that you want to control through the SDN Controller.\n\nThe Controller uses a gRPC API to contact the Linux nodes. A gRPC server (Node Manager) must be run on the Linux nodes that you want to control through the Controller.\nThe Controller (i.e. the gRPC client from the point of view of the gRPC protocol) interacts with the gRPC server executed on the nodes to enforce rules or configurations, such as the setup of SRv6 paths and behaviors.\n\nThe control-plane modules are organized as follows:\n\n    .\n    ├── ...\n    ├── control_plane       # Control plane modules\n    |   ├── controller      # Controller (gRPC client)\n    |   ├── examples        # Usage examples\n    |   ├── node-manager    # Node Manager (gRPC server)\n    |   └── protos          # Protocol buffer files\n    └── ...\n\n\n### Node manager\n\nThe **control_plane/node-manager** package implements the functionalities of an agent which connects a Linux node to the Controller. A Node Manager must be executed on each node that you want to control through the Controller.\n\nRefer the [Docker](#docker) section for details on how to use the Node Manager in a pre-built docker container. For more information about the installation and usage of the Node Manager follow the instructions contained in the *README.md* file under the *node-manager* folder.\n\n\n### Controller\nThe **control_plane/controller** package implements different functionalities of a Controller.\n\nRefer the [Docker](#docker) section for details on how to use the Controller in a pre-built docker container. For more information about the installation and usage of the Node Manager follow the instructions contained in the *README.md* file under the *controller* folder.\n\n\n### Protocol Buffers\nThis project depends on the **grpcio** library that provides an implementation of the gRPC protocol. gRPC services use Protocol Buffers as Interface Description Language (IDL). Consequently, both the Controller and the Node Manager require some Python classes generated from the .proto files stored in the **control_plane/protos** folder.\nThe compilation and generation of the Python classes required by the gRPC protocol has been automated in the setup scripts of the Controller and Node Manager.\n\n\n### Usage examples\nThere are two ways to use the functionalities offered by the Controller. You can execute the Python Command-Line Interface (CLI) provided by the Controller or you can import the Controller modules in your Python application and use the API exposed by the Controller.\n\n#### How to use the Controller CLI\nFor a description of the CLI and the supported commands, see the documentation contained in the [control_plane/controller](control_plane/controller/README.md) folder.\n\n#### How to use the Controller API in your Python application\nFor a description of the API exposed by the Controller, see the API reference contained in the [control_plane/controller](control_plane/controller/README.md) folder.\nMoreover, the usage examples contained in the **control_plane/examples** folder can be an excellent starting point for understanding how to use the API and the features of the Controller.\n\n\n## Docker\n\n### Build the Docker image\n\nFrom the root directory of the repository execute the following command\ninorder to build the controller image:\n\n    docker build --target controller -t rose-srv6-controller:latest . --no-cache\n\ninorder to build the node-manager image:\n\n    docker build --target node-manager -t rose-srv6-node-manager:latest . --no-cache\n\n### Run the controller container\n\n    docker run --name rose-srv6-controller  -it rose-srv6-controller:latest bash\n\n### Run the node-manager container\n\nCurrently the exposed port is 12345\n\n    docker run --name rose-srv6-node-manager -p 12345:12345 rose-srv6-node-manager:latest\n\n### Access to the Docker container\n\n    docker exec -it \u003ccontainer_name\u003e bash\n\nfor instance access to rose-srv6-controller with:\n\n    docker exec -it rose-srv6-node-manager bash\n\n\n## Requirements\n* Linux kernel \u003e= 4.14\n* Python \u003e= 3.6\n\n\n## Links\n* Research on Open SRv6 Ecosystem (ROSE): https://netgroup.github.io/rose/\n* Source code: https://github.com/netgroup/rose-srv6-control-plane\n* Documentation: https://netgroup.github.io/rose-srv6-control-plane\n* Report a bug: https://github.com/netgroup/rose-srv6-control-plane/issues\n\n\n## Issues\nYou are welcome to open github issues for bug reports and feature requests, in [this repository](https://github.com/netgroup/rose-srv6-control-plane/issues) or in the [ROSE repository](https://github.com/netgroup/rose/issues).\n\n\n## Contributing\nIf you want to contribute to the ecosystem, provide feedback or get in touch with us, see our contact page: https://netgroup.github.io/rose/rose-contacts.html.\n\n\n## Versioning\nWe use [SemVer](https://semver.org/) for versioning.\n\n\n## License\nThis project is licensed under the [Apache License, Version 2.0](https://github.com/netgroup/rose-srv6-control-plane/blob/master/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetgroup%2Frose-srv6-control-plane","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetgroup%2Frose-srv6-control-plane","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetgroup%2Frose-srv6-control-plane/lists"}