aboutsummaryrefslogtreecommitdiff
VLANd - complex networks on demand

What is VLANd?
==============

VLANd is a python program intended to make it easy to manage
port-based VLAN setups across multiple switches in a network. It is
designed to be vendor-agnostic, with a clean pluggable driver API to
allow for a wide range of different switches to be controlled
together.

Various of the switch vendors have management applications available
which should be able to do a similar job, but they're typically not
scriptable, or locked to only control their own vendor's
equipment. VLANd is designed (and hoped!) to be better. We've found
that other network management programs also exist, but either they
don't manage VLANs in the way we want or they depend on large
frameworks like Openstack.

VLANd currently includes four drivers for different models of switch
from four different vendors:

 * CiscoCatalyst  for the Cisco Catalyst 3750 (and compatible)
 * CiscoSX300     for the Cisco SF300 and SG300 (and compatible)
 * NetgearXSM     for the Netgear XSM 7224S (and compatible)
 * TPLinkTLSG2XXX for the TP-Link TL-SG2216 (and compatible)
 * Mellanox       for the Mellanox SN2100 (and compatible)

These cover a range of switches across a huge range of prices, from
100M up to 100G ports. VLANd supports interoperable VLANs across all
these devices, verified using the Linaro test lab and our test suite.

VLANd also includes a "Dummy" switch driver which can be used for
testing and validation. Read the comments in drivers/Dummy.py for more
details on how to use it.

It is expected that more drivers will be included in future
releases. Please feel free to propose more target devices, or (better)
send patches!

Why VLANd?
==========

VLANd has been written to accompany Linaro's LAVA platform.

LAVA is the Linaro Automated Validation Architecture - see
https://validation.linaro.org/ for more information.

LAVA started off as a framework to help perform validation and testing
on simple single devices such as Android development boards. Since
then, the range of tests and devices has grown hugely. Some users have
added multi-node tests, i.e. tests that start up multiple devices that
run tests against each other (e.g. client-server testing). The next
step on from that is to test devices with multiple network interfaces,
where on top of the client-serer testing it is required that their
connectivity can be controlled and isolated (e.g. for network
performance testing).

This can be done by simply changing physical network connections, of
course, but that doesn't scale for sequences of tests and it makes a
lie of the "Automated" bit in the LAVA definition.

VLANd is the solution that we have implemented for this problem. It
provides a simple VLAN management abstraction for users. LAVA can use
VLANd to set up complex networks on demand as tests are initiated, and
can then tear them down again when tests are complete.

Dependencies
============

postgres server and psycopg2, for the back-end database. See
db/setup_db.py for help in setting up the database for access.

If you want to use the visualisation feature, you'll need to install
python-gd (used for generating the graphics) and a font for it to
use. The default font suggested is Inconsolata, but others should work
too.

How to use
==========

For now, things are easiest run as "vland" with appropriate
permissions in the database for that user.

The core VLANd code is simple to configure - see vland.cfg for an
example config file. Once your copy of VLANd is running, use the
administration utility "vland-admin" to control what it does. For now,
this is single-threaded and has *no* security. This *will* change in
the future, but for very early development has not been a priority.

The visualisation interface has very few configuration options as
yet - again, see the default vland.cfg.

Future plans
============

As a start...

 * More documentation
 * More drivers to control more devices, both real and virtual
 * Improved visualisation options
 * Better (some!) security
 * Background sanity checking
 * Other filtering options - MAC-based rather than just port-based
   (needed to support virtual machines, etc.)

If you have other ideas, please talk to us!

Contact
=======

VLANd mailing list: vland-devel@linaro.org

Code
====

https://git.linaro.org/lava/vland.git

License
=======

VLANd is Copyright 2014-2018 Linaro Limited, and is distributed under
the GNU General Public License, version 2 (or any later version). See
the accompanying COPYING file for more details.

--------------------------------------------------------------------------
README for VLANd 0.7, 2nd February 2018
Steve McIntyre <steve.mcintyre@linaro.org>