Skip to main content

Python scripts to run qemu and gluon based virtual mesh networks

Project description

gluon-qemu-testlab

The gluon-qemu-testlab (formerly known as pynet) tool helps in creating virtual mesh topologies with gluon firmwares using the qemu virtualization technology. It provides a simple language, where you can build your topology file in. You can create nodes by simply calling a function Node() and connect them by calling the connect() function. Then gluon-qemu-testlab does the rest:

  1. It starts a qemu instance for each node by using the image.img firmware image from the root of the project directory.
  2. It connects nodes together as expected using qemus network capabilities.
  3. It configures the node though the config mode of gluon using an ssh session.
  4. Shell accesses to the different nodes and clients is provided.

picture of random mesh generated by pynet

Requirements

  • Linux OS
  • At least python3.6
  • qemu
  • python lib asyncssh
pacman -S qemu tmux python python-pip
pip install -r requirements.txt

Quickstart

sh update_image.sh                                      # download an image
sudo python36 scenarios/chain_4_nodes.py --run-forever  # start a scenario

Example scenario

Here we connect three nodes in a chain. The syntax is standard python syntax.

#!/usr/bin/env python3
import sys
sys.path.append(".")
from pynet import *

a = Node()
b = Node()
c = Node()

connect(a, b)
connect(b, c)

start()
# tests could go here
finish()

Testing API

stdout = node.succeed("cmd")                   # execute cmd via ssh and exit with failure if the command
                                               # returns with non-zero exit status

stdout = node.wait_until_succeeds("cmd")       # retry executing cmd via ssh until it suceeds or timeouts

status, stdout = node.execute("cmd")           # execute command via ssh and return the status code in
                                               # addition to stdout

process = node.execute_in_background("cmd")    # start a command in background (e.g. a server process)
process.close()                                # send SIGINT to the command and wait until it exits.

CLI

This CLI options currently exist:

  • --run-forever
  • --run-tests-on-existing-instance

Because starting up the qemu instances takes some time, the iteration process during test development can become tedious. The --run-tests-on-existing-instance switch is especially helpful here. You can start one instance of pynet using the --run-forever switch and then invoke scenarios using the --run-tests-on-existing-instance switch. This new pynet instances will not run their own qemus instances but reuse the already spawned ones.

SSH Access

During config mode, the ssh instances are available from the host machine at port localhost:22001, localhost:22002, and so on. When the instances are configured, they are available on ports localhost:22101, localhost:22102, and so on.

When they are configured, you can use the symlinked scripts:

  • ssh/node1.sh
  • ssh/node2.sh
  • ...

to easily access the nodes. They provide a little more convinience as they disable known hosts checks.

Advanced gimmics

  • Nodes support resolving names of each other. ping node1
  • Nodes also support this command for bat-hosts. batctl tr node2
  • To manage ssh connections, pynet automatically generates an rsa key, which is added into the image during config mode.

set fastd secret

node.set_fastd_secret('e88b6e7adf88ffb9448293ab008f2fde9a06d012973b7a73cb4947781f6020f2')

currently disabled features:

  • Client namespaces using network namespaces.
  • Spawing firefox as a client of a router is also possible. This is very helpful to see the statuspage of a router. Please note, that the shells opened by pynet are root shells. So if you directly start firefox inside such a shell, it has root access.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gluon-qemu-testlab-0.0.5.tar.gz (9.8 kB view details)

Uploaded Source

Built Distribution

gluon_qemu_testlab-0.0.5-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

Details for the file gluon-qemu-testlab-0.0.5.tar.gz.

File metadata

  • Download URL: gluon-qemu-testlab-0.0.5.tar.gz
  • Upload date:
  • Size: 9.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.8.1

File hashes

Hashes for gluon-qemu-testlab-0.0.5.tar.gz
Algorithm Hash digest
SHA256 c4de8d5ee8cf483193d304bf0e36526b3d9ca621fdff6d8ed97ef61193afe633
MD5 d2278b6184957ceb8e764d55f5984b55
BLAKE2b-256 23d3c85e2e2c4084f721d40137015a53c1d07d1f0ef5df65f90a40e58d2af36f

See more details on using hashes here.

File details

Details for the file gluon_qemu_testlab-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: gluon_qemu_testlab-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 10.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.8.1

File hashes

Hashes for gluon_qemu_testlab-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 61f656336a01a4f9abf6afcf6fc09c717796698c13cb76e22e21bab137b982f8
MD5 564e68d890c5decafaabddd3ef33b556
BLAKE2b-256 7ed4358dc2582f16af8c9a2e4d8e17f0ed52b7e07c7dc63ee92c99b711b1812d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page