Editorial fixes to main README

This commit is contained in:
Wojciech Kozlowski 2019-04-08 20:42:45 +02:00
parent 18c4d07f6f
commit cdfe01c283

View File

@ -11,15 +11,20 @@ implementations running on top of a network setup locally using
Mininet is a great tool for [teaching, learning, and Mininet is a great tool for [teaching, learning, and
experimenting](https://github.com/mininet/mininet/wiki/Teaching-and-Learning-with-Mininet) experimenting](https://github.com/mininet/mininet/wiki/Teaching-and-Learning-with-Mininet)
with networking. However, there was no coherent framework or easy to examples with networking. However, there was no coherent framework to use which would
to follow which would let one use Mininet to setup a network running a bunch of let one use Mininet to setup a network running an entire set of routing
routing protocols. The FRR project actually uses Mininet for running [topology protocols. A [small example that demonstrated BGP
hijacking](https://github.com/mininet/mininet/wiki/BGP-Path-Hijacking-Attack-Demo)
has existed for a while and showed that this is possible, but there isn't much
more beyond that on case.
The FRR project actually uses Mininet for running [topology
tests](https://github.com/FRRouting/frr/tree/master/tests/topotests), but that tests](https://github.com/FRRouting/frr/tree/master/tests/topotests), but that
makes them difficult to learn from and experiment with. As somebody looking 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 for resources to learn about configuring networks to play with on my own
computer that seemed like a big gap. computer that seemed like a big gap.
Furthermore, there are lots of resources online for learning the theory of how Finally, there are lots of resources online for learning the theory of how
networks are connected to each other and how routing works on the Internet, but networks are connected to each other and how routing works on the Internet, but
very few of them come with any practical examples. It is one thing to learn very few of them come with any practical examples. It is one thing to learn
the concepts and a completely different thing to apply them in a practical real the concepts and a completely different thing to apply them in a practical real
@ -37,7 +42,7 @@ that you can start from any point you like.
A secondary purpose is to provide an experimental testbed in which a network A secondary purpose is to provide an experimental testbed in which a network
running a whole stack of routing protocols can be quickly designed, running a whole stack of routing protocols can be quickly designed,
provisioned, and brought up on a single computer. provisioned, and brought up on a single computer (mostly thanks to Mininet).
## Getting Started ## Getting Started
@ -65,7 +70,7 @@ exact same VM image available above.
Note that the VM does not come with the `route0` repository. This is because Note that the VM does not come with the `route0` repository. This is because
the repository will be updated much more frequently than the VM image. You the repository will be updated much more frequently than the VM image. You
will still need to clone `route0` into an appropriate directory on the VM. To will still need to clone `route0` into an appropriate directory on the VM. To
do so run do so run the following command in a terminal in the VM
``` ```
git clone https://github.com/Wojtek242/route0.git git clone https://github.com/Wojtek242/route0.git
``` ```
@ -79,12 +84,12 @@ other Unix-like systems, but that is undocumented.
If you just want to get started, choose a topology from the `topology` If you just want to get started, choose a topology from the `topology`
directory, and a scenario from the `scenario` directory within. Note that all directory, and a scenario from the `scenario` directory within. Note that all
topologies support `plain` and `basic` in addition the explicit defined topologies support `plain` and `basic` in addition to the explicitly defined
scenarios. The meaning of these special scenarios is explained later on in scenarios. The meaning of these special scenarios is explained in the section
this `README` in the section on scenarios. on scenarios.
Once you have chosen `<topology_name>` and `<scenario_name>` you can run an Once you have chosen `<topology_name>` and `<scenario_name>` you can run an
experiment with the following command. experiment with the following command from the project directory
``` ```
sudo python route0.py --topology <topology_name> --scenario <scenario_name> sudo python route0.py --topology <topology_name> --scenario <scenario_name>
``` ```
@ -111,7 +116,7 @@ The lessons in this repository are aimed to take somebody who knows nothing
about IP routing all the way to setting up networks with multiple autonomous about IP routing all the way to setting up networks with multiple autonomous
systems and VPN tunnels. The lessons are structured in such a way that the systems and VPN tunnels. The lessons are structured in such a way that the
reader must first manually setup and configure the network before moving on to reader must first manually setup and configure the network before moving on to
the next step. Each stage starts at a point which can be automatically the next step. Each stage starts at a point that can be automatically
provisioned by Route 0 and the purpose of each lesson is to explain how this provisioned by Route 0 and the purpose of each lesson is to explain how this
automation is achieved through network configuration. This particular automation is achieved through network configuration. This particular
structure also means that it is possible to dive in at any point making it structure also means that it is possible to dive in at any point making it
@ -128,9 +133,9 @@ documentation](https://github.com/mininet/mininet/wiki/Documentation).
Mininet is a framework for creating virtual networks running real kernel, Mininet is a framework for creating virtual networks running real kernel,
switch, and application code. In Route 0 it is used to provide the switch, and application code. In Route 0 it is used to provide the
virtualisation necessary to run multiple routing nodes on a single virtualisation necessary to run multiple routing nodes on a single computer.
computer. Mininet handles the topology setup before dropping the user in its Mininet handles the topology setup before dropping the user in its own special
own special CLI. CLI.
The CLI is self-documented and help can be accessed by running `help`. To The CLI is self-documented and help can be accessed by running `help`. To
investigate the current topology, you can run `net`. To visualise the output investigate the current topology, you can run `net`. To visualise the output
@ -142,17 +147,17 @@ on any of the nodes in the network. To do this, simply run
``` ```
<node_name> <shell_command> <node_name> <shell_command>
``` ```
such as `R1 ifconfig`. This is particularly useful in Route 0 for commands such as `R1 ip address`. This is particularly useful in Route 0 for commands
like `ifconfig` or `ip route`. Additionally, it is possible to use this like `ip address` or `ip route`. Additionally, it is possible to use this
feature to send ping between nodes, for example, `R1 ping 10.0.0.1`. Normally, feature to send pings between nodes, for example, `R1 ping 10.0.0.1`.
in Mininet the destination can also be specified using its name. It is Normally, in Mininet the destination can also be specified using its name. It
possible to do so in Route 0, but this is often ambiguous as routers will have is possible to do so in Route 0, but this is often ambiguous as routers will
multiple IP addresses associated with their interfaces. have multiple IP addresses associated with their interfaces.
It is also possible to launch a shell or run a command in a Mininet node from a It is also possible to launch a shell or run a command in a Mininet node from a
different terminal than the one in which the Mininet CLI is being run. A different terminal than the one in which the Mininet CLI is being run. A
convenience script has been provided for this purpose, `attach.py`. To launch convenience script has been provided for this purpose, `attach.py`. To launch
a shell in a particular node run a shell on a particular node run
``` ```
sudo python attach.py --node <node_name> sudo python attach.py --node <node_name>
``` ```
@ -176,8 +181,8 @@ routes as appropriate.
FRR routing protocols are configured using configuration files. The details of FRR routing protocols are configured using configuration files. The details of
how to write these configurations are on the [FRR documentation how to write these configurations are on the [FRR documentation
website](http://docs.frrouting.org/en/latest/). It is also possible to connect website](http://docs.frrouting.org/en/latest/). It is also possible to connect
to running instances of the protocols. See the Mininet and Getting Started to a shell on running instances of the protocols and configure it from there.
sections on how this can be done. See the Mininet and Getting Started sections on how this can be done.
## Structure ## Structure
@ -202,9 +207,9 @@ and that routers do not have default routes.
### Scenario ### Scenario
A scenario is a particular configuration of FRR daemons on the provided A scenario is a particular configuration of FRR protocols on the provided
topology. While the topology defines which nodes and links form the network, topology. While the topology defines which nodes and links form the network,
the scenario determines which daemons get started on which nodes and their the scenario determines which protocols get started on which nodes and their
configuration. configuration.
There are two special scenarios: `plain` and `basic`. The `plain` scenario There are two special scenarios: `plain` and `basic`. The `plain` scenario
@ -226,7 +231,8 @@ directly in the topology directory. If a scenario has its own `zebra` and/or
`staticd` directory, these will be used preferentially, but otherwise the `staticd` directory, these will be used preferentially, but otherwise the
topology's ones will be used. Note that if no `zebra` and/or `staticd` daemon topology's ones will be used. Note that if no `zebra` and/or `staticd` daemon
is to be run then the scenario must have empty `zebra` and/or `staticd` is to be run then the scenario must have empty `zebra` and/or `staticd`
directories within its scenario directory. directories within its scenario directory. Note all FRR protocols rely on
`zebra` to function correctly.
### Experiment ### Experiment
@ -242,8 +248,7 @@ For information on how to contribute see [CONTRIBUTING](CONTRIBUTING.md).
I am terrible at coming up with names so I'll at least explain myself. The 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 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 central concept in networking, but in every day English it simply means a path,
path, a track, a road. This repository is a tutorial, a road to learning about 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 routing protocols, hence it is a "Route". The number 0 is used to indicate
is the first route one would take in their networking education. that this is the first route one would take in their networking education.