Skip to content
Snippets Groups Projects
Select Git revision
  • ca8ae28092a007f46bf8c8f419d706493a0e8dc9
  • master default
  • ui-handover
  • ui-update-yang
  • inventory-manager-netbox
  • heiss_bachelor_thesis
  • proto-getters
  • 392-remove-renovate
  • renovate/go.mongodb.org-mongo-driver-2.x
  • renovate/github.com-bufbuild-protovalidate-go-0.x
  • renovate/google.golang.org-genproto-googleapis-api-digest
  • renovate/github.com-prometheus-client_golang-1.x
  • renovate/eslint-9.x-lockfile
  • renovate/eslint-plugin-react-7.x-lockfile
  • renovate/dompurify-3.x-lockfile
  • renovate/testing-library-react-16.x-lockfile
  • renovate/eslint-plugin-prettier-5.x-lockfile
  • renovate/react-dom-18.x-lockfile
  • renovate/eslint-plugin-react-hooks-5.x-lockfile
  • renovate/testing-library-user-event-14.x-lockfile
  • renovate/reduxjs-toolkit-2.x-lockfile
  • renovate/github.com-openconfig-gnmi-0.x
  • 0.1.0
23 results

gosdn

  • Open with
  • Download source code
  • Your workspaces

      A workspace is a virtual sandbox environment for your code in GitLab.

      No agents available to create workspaces. Please consult Workspaces documentation for troubleshooting.

  • Fabian Seidl's avatar
    Fabian Seidl authored
    See merge request !444
    ca8ae280
    History

    goSDN coverage report pipeline status

    goSDN is a prototypical approach to build a model driven multi-vendor SDN controller.

    This repository contains submodules, therefore it must be cloned with git clone --recurse-submodules git@code.fbi.h-da.de:danet/gosdn.git. If you have cloned the repository without --recurse-submodules simply run git submodule update --init --recursive to get all submodules.

    Table of Contents

    Overview

    goSDN is also an application that will allow you to manage your multi-vendor network using one unified controller.

    goSDN provides:

    • Model driven device/network element representation
    • Native multi vendor support
    • Multi controller environments

    Example

    A simple showcase how the controller can be adressed after make containerlab-start is shown below:

    Structure

    • The api is a representation of the controllers Northbound-Interface and can be used to communicate with the controller.
    • The cli is the CLI to manage the controller.
    • csbi is the implementation of Containerised-Southbound-Interfaces (based on the idea and the proof of concept of Manuel Kieweg). Allowing to request capabilities of MNEs and generate a containerised Southbound-Interface based on them. They are currently unsupported.
    • controller represents the goSDN-controller.

    Concepts

    The goSDN controllers core - also called nucleus - is a lightweight library that manages principal network domains and provides southbound interface operations for managed network elements.

    In addition, we provide a simple Northbound-API for the controller ()

    Principal Networking Domain (PND)

    The PND is the single source of truth within a network. Its state is held and maintained by the controller. Any configuration of an MNE has to be applied by the PND.

    Managed Network Element (MNE)

    Any network element directly configured by goSDN

    Installing

    goSDN provides a Makefile for all common use cases.

    # build the application files for goSDN, cSBI orchestrator, gosdnc (CLI).
    make build
    
    # build the Dockerfiles for goSDN, cSBI orchestrator, gosdnc (CLI).
    make container

    Now you can start goSDN locally by moving to the artifacts folder and running ./gosdn from the shell.

    Getting Started

    If you want to use the the playground you have to make sure you have containerlab installed on your system.

    Playground

    With the help of containerlab we provide a simple test environment to play around with.

    The environment contains two Arista cEOS, a goSDN, a cSBI orchestrator and a gNMI target.

    If you're a member of the danet group you should have access to the containers repo. Don't forget to sudo docker login registry.code.fbi.h-da.de (sudo is necessary since containerlab has to be run with it and therefore a normal docker login wouldn't be recognized by it.)

    If you're no member of the danet group you have to create an account at Arista and download the Arista cEOS image by yourself. Don't forget to change the image name (line 11 in the gosdn.clab.yml file) to the local one you've downloaded.

    # starts the containerlab topology which contains two Arista cEOS, an cSBI orchestrator, a goSDN controller and gNMI target.
    make containerlab-start
    
    # stop the containerlab topology
    make containerlab-stop

    CLI

    Information about how to use the CLI is provided in the cli folder, see here.

    CI Status

    Master Develop
    coverage report coverage report
    pipeline status pipeline status

    Development Tutorial

    To help with developing there is a small script available, which helps to create the complete dev environment. For it to work, you need go, docker, docker compose and containerlab.

    For a quick start simply use make start-dev-env to start everything. This can take a while. Afterwards, you see the output of goSDN, to stop it hit Ctrl+C. To stop everything else use make stop-dev-env.

    If you want more control over your environment, you can use the manage_virt_env.sh script directly.

    It works like this, if you are in the projects root folder:

    ./scripts/manage_virt_env.sh --mode $(start || stop) --topology $PATH_TO_TOPOLOGY --SDNCONFIG $PATH_TO_SDNCONFIG --keepdb (optional)

    mode defines if it should start or stop the environment, while the two commands --topology and --sdnconfig are used to provide the desired files. The optional flag keepdb is used if you want to create the environment without reloading the SDN config file, which is handy if you just want to restart the environment. For every command there is a shortcut available (e.g. -t for --topology, etc.).

    Example usages:

    ./scripts/manage_virt_env.sh --mode start --topology dev_env_data/clab/basic_two_aristas.yaml --sdnconfig dev_env_data/sdn/basic_two_aristas.json

    ./scripts/manage_virt_env.sh --mode start --topology dev_env_data/clab/basic_two_aristas.yaml --keepdb

    ./scripts/manage_virt_env.sh --mode stop --topology dev_env_data/clab/basic_two_aristas.yaml

    Backup and restore your mongodb

    If you are using the mongodb provided via the docker-compose.yaml, you can easily back up and restore your data via two scripts.

    ./scripts/backup_mongo_volume.sh $(suffix_of_backup)
    ./scripts/restore_mongo_volume.sh $(suffix_of_backup)

    Keep in mind that a restore will restart the mongodb container.