mirror of
https://github.com/Wojtek242/route0.git
synced 2024-11-22 07:05:25 +01:00
Make a first version of a README
This commit is contained in:
parent
dd663e35c6
commit
34d2d7a00f
110
README.md
Normal file
110
README.md
Normal file
@ -0,0 +1,110 @@
|
||||
# Route 0
|
||||
|
||||
Route 0 is a suite for learning about and experimenting with routing protocols.
|
||||
It uses the [Free Range Routing (FRR)](https://frrouting.org/) protocol
|
||||
implementations running on top of a network setup locally using
|
||||
[Mininet](http://mininet.org/).
|
||||
|
||||
## Introduction
|
||||
|
||||
### Motivation
|
||||
|
||||
Mininet is a great tool for [teaching, learning, and experimenting]
|
||||
(https://github.com/mininet/mininet/wiki/Teaching-and-Learning-with-Mininet)
|
||||
with networking. However, there was no coherent framework or easy to examples
|
||||
to follow which would let one use Mininet to setup a network running a bunch of
|
||||
routing protocols. The FRR project actually uses Mininet for running [topology
|
||||
tests](https://github.com/FRRouting/frr/tree/master/tests/topotests), but that
|
||||
makes them difficult to learn from and experiment with. As somebody looking
|
||||
for resources to learn about configuring networks to play with on my own
|
||||
computer that seemed like a big gap.
|
||||
|
||||
### Purpose
|
||||
|
||||
The primary purpose of Route 0 is to provide a framework for learning how
|
||||
routing works all the way from setting up IP addresses on individual interfaces
|
||||
up to setting up BGP peering sessions between multiple autonomous systems and
|
||||
setting up VPN tunnels. Therefore, the primary audience are people new to
|
||||
networking. However, even if you already know some routing basics you might
|
||||
still find some of the examples valuable. The repository is structured such
|
||||
that you can start from any point you like.
|
||||
|
||||
A secondary purpose is to provide an experimental testbed in which a network
|
||||
running a whole stack of routing protocols can be quickly designed,
|
||||
provisioned, and brought up on a single computer.
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Platform
|
||||
|
||||
For the best experience it is recommended to run Route 0 experiments using the
|
||||
Virtual Machine (VM) image developed specifically for this project.
|
||||
|
||||
TODO: INSTRUCTIONS FOR VM IMAGE
|
||||
|
||||
If you would prefer to set up your own environment, you can follow these
|
||||
[instructions](platform.md). They describe the steps needed to produce the
|
||||
exact same VM image available above.
|
||||
|
||||
Note that both Mininet and FRR are developed primarily for Linux so if you have
|
||||
a different operating system you will have to use some form of virtualisation.
|
||||
With some effort (and limitations) you might be able to get things running on
|
||||
other Unix-like systems, but that is undocumented.
|
||||
|
||||
### Running an experiment
|
||||
|
||||
### Lessons
|
||||
|
||||
## Structure
|
||||
|
||||
### Topologies
|
||||
|
||||
### Scenarios
|
||||
|
||||
## Contributing
|
||||
|
||||
There are many ways to contribute to Route 0. If you are an expert in
|
||||
networking, you can look for and correct errors, improve the existing lessons,
|
||||
or add new lessons. Another way to contribute is to simply add new scenarios
|
||||
or topologies that you feel would be interesting for others.
|
||||
|
||||
### Adding a new topology
|
||||
|
||||
Adding a new topology is straightforward.
|
||||
|
||||
1. Create a new directory in the `topology` directory.
|
||||
2. Create a `topo.py` file and define a class `NetTopo` that inherits from
|
||||
`mininet.topo.Topo` and build your new topology in its constructor.
|
||||
3. Create a `zebra` directory and populate it with configuration files for the
|
||||
`zebra` daemon to configure the interfaces in your topology.
|
||||
4. Create a `staticd` directory and populate it with configuration files for
|
||||
the `staticd` daemon to configure the default routes on hosts.
|
||||
5. Create a `README.md` file to describe your topology.
|
||||
6. Add your topology to the `route-0.py` file. By default a topology will
|
||||
support the `plain` and `basic` scenarios.
|
||||
|
||||
The easiest way to start would be to copy some other topology and customise it
|
||||
as appropriate.
|
||||
|
||||
### Adding a new scenario
|
||||
|
||||
By default all topologies support the `plain` and `basic` scenarios. Adding a
|
||||
additional scenarios is also pretty straightforward.
|
||||
|
||||
1. In the topology's directory, make sure there is a `scenario` directory.
|
||||
Create one if it doesn't exist.
|
||||
2. In the `scenario` directory create a new directory for your specific
|
||||
scenario.
|
||||
3. In your new directory create one directory for each daemon you intend to
|
||||
run. You don't need to do this for `zebra` or `staticd` unless you want to
|
||||
override the topology defaults.
|
||||
|
||||
## Name
|
||||
|
||||
I am terrible at coming up with names so I'll at least explain myself. The
|
||||
word "Route" was chosen due to its dual meaning. A route is naturally a
|
||||
central concept in networking, but it in every day English it simply means a
|
||||
path, a track, a road. This repository is a tutorial, a road to learning about
|
||||
routing protocols, hence a "Route". The number 0 is used to indicate that this
|
||||
is the first route one would take in their networking education.
|
||||
|
Loading…
Reference in New Issue
Block a user