Skip to content

Commit

Permalink
Improve readme, clean topologies code and update them to the latest v…
Browse files Browse the repository at this point in the history
…ersion of code
  • Loading branch information
Maxmawt committed Sep 19, 2019
1 parent 7641326 commit f9d1daa
Show file tree
Hide file tree
Showing 25 changed files with 336 additions and 866 deletions.
31 changes: 31 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,36 @@
# LINGI2142-IPMininet

## Launch the CLI

To launch the CLI and test the topologies, run
```bash
python3 launch_net.py --topo=TOPO
```

where TOPO is one the following topologies (from the slides in the courses folder):
- simple_bgp_network (from the examples of ipmininet)
- simple_topo_2rr (from slide 39 iBGP)
- simple_topo_as (from slide 23 iBGP)
- simple_topo_err (from slide 27 BGP-RR-TE)
- simple_topo_local_pref (from the examples of ipmininet)
- simple_topo_med (from slide 25 iBGP)
- simple_topo_missing1 (from slide 33 iBGP)
- simple_topo_missing2 (from slide 33 iBGP)
- simple_topo_missing3 (from slide 33 iBGP)
- simple_topo (from slide 22 iBGP)
- simple_topo_rr (from slide 38 iBGP)
- topo_2rr_1 (from slide 40 iBGP)
- topo_2rr_2 (from slide 42 iBGP RED config)
- topo_2rr_3 (from slide 42 iBGP GREEN config)
- topo_2rr_4 (from slide 42 iBGP YELLOW config)
- topo_2rr_5 (from slide 42 iBGP BLUE config)
- topo_3rr_1 (from slide 43 iBGP)
- topo_3rr_2 (from slide 44 iBGP RED config)
- topo_3rr_3 (from slide 44 iBGP BLUE config)
- topo_med (slide 26 iBGP)
- topo_te_1 (from slide 30 BGP_RR_TE with R3 and R6 as RRs)
- topo_te_2 (from slide 30 BGP_RR_TE with R3 and R4 as RRs)

## Useful Commands

* To get the routes in `ipv6` of a node NODE
Expand Down
Binary file added courses/BGP-RR-TE.pdf
Binary file not shown.
Binary file added courses/iBGP.pdf
Binary file not shown.
31 changes: 4 additions & 27 deletions simple_topo.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,12 @@
from ipmininet.iptopo import IPTopo
from ipmininet.router.config import RouterConfig, BGP, ebgp_session
import ipmininet.router.config.bgp as _bgp
from ipmininet.router.config import BGP, ebgp_session, AF_INET6


class SimpleBGPTopo(IPTopo):
"""This topology is composed of two AS connected in dual homing with different local pref"""

def build(self, *args, **kwargs):
"""
TODO
+----------+ +--------+
| |
AS1 | AS2 | AS3
| |
| |
+-------+ eBGP | +-------+ iBGP +-------+ | eBGP +-------+
| as1r1 +------------+ as2r1 +-------------+ as2r2 +------------+ as3r1 |
+-------+ | +-------+ +-------+ | +-------+
| |
| |
| |
+------------+ +--------+
Topo from slide 22 iBGP
"""
# Add all routers
as1r1 = self.bgp('as1r1')
Expand All @@ -30,9 +16,9 @@ def build(self, *args, **kwargs):
as1r5 = self.bgp('as1r5')
as1r6 = self.bgp('as1r6')
as4r1 = self.addRouter('as4r1')
as4r1.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/32',)),))
as4r1.addDaemon(BGP, address_families=(AF_INET6(networks=('dead:beef::/32',)),))
as4r2 = self.addRouter('as4r2')
as4r2.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/32',)),))
as4r2.addDaemon(BGP, address_families=(AF_INET6(networks=('dead:beef::/32',)),))
h1 = self.addHost('h1')

# Add Links
Expand All @@ -56,14 +42,5 @@ def build(self, *args, **kwargs):
ebgp_session(self, as1r6, as4r1)
ebgp_session(self, as1r5, as4r2)

# Add test hosts ?
# for r in self.routers():
# self.addLink(r, self.addHost('h%s' % r))
super(SimpleBGPTopo, self).build(*args, **kwargs)

def bgp(self, name):
r = self.addRouter(name)
r.addDaemon(BGP, address_families=(
_bgp.AF_INET(redistribute=('connected',)),
_bgp.AF_INET6(redistribute=('connected',))))
return r
37 changes: 7 additions & 30 deletions simple_topo_2rr.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,12 @@
from ipmininet.iptopo import IPTopo
from ipmininet.router.config import RouterConfig, BGP, ebgp_session, bgp_peering, set_rr
import ipmininet.router.config.bgp as _bgp
from ipmininet.router.config import BGP, ebgp_session, bgp_peering, set_rr, AF_INET6


class SimpleBGPTopo2RR(IPTopo):
"""This topology is composed of two AS connected in dual homing with different local pref"""


def build(self, *args, **kwargs):
"""
TODO slide 39 iBGP
+----------+ +--------+
| |
AS1 | AS2 | AS3
| |
| |
+-------+ eBGP | +-------+ iBGP +-------+ | eBGP +-------+
| as1r1 +------------+ as2r1 +-------------+ as2r2 +------------+ as3r1 |
+-------+ | +-------+ +-------+ | +-------+
| |
| |
| |
+------------+ +--------+
Topo from slide 39 iBGP
"""
# Add all routers
as1r1 = self.bgp('as1r1')
Expand All @@ -30,9 +16,9 @@ def build(self, *args, **kwargs):
as1r5 = self.bgp('as1r5')
as1r6 = self.bgp('as1r6')
as4r1 = self.addRouter('as4r1')
as4r1.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/32',)),))
as4r1.addDaemon(BGP, address_families=(AF_INET6(networks=('dead:beef::/32',)),))
as4r2 = self.addRouter('as4r2')
as4r2.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/32',)),))
as4r2.addDaemon(BGP, address_families=(AF_INET6(networks=('dead:beef::/32',)),))
h1 = self.addHost('h1')

# Add Links
Expand All @@ -47,8 +33,8 @@ def build(self, *args, **kwargs):
self.addLink(as4r2, as1r5)
self.addLink(as4r1, h1, params1={"ip": "dead:beef::/48"}, params2={"ip": "dead:beef::1/48"})
self.addLink(as4r2, h1, params1={"ip": "dead:beef::2/48"}, params2={"ip": "dead:beef::3/48"})
set_rr(self, as1r3, peers=[as1r1, as1r2, as1r4, as1r5, as1r6])
set_rr(self, as1r5, peers=[as1r1, as1r2, as1r4, as1r3, as1r6])
set_rr(self, rr=as1r3, peers=[as1r1, as1r2, as1r4, as1r5, as1r6])
set_rr(self, rr=as1r5, peers=[as1r1, as1r2, as1r4, as1r3, as1r6])

# Add full mesh
self.addAS(4, (as4r1, as4r2))
Expand All @@ -58,14 +44,5 @@ def build(self, *args, **kwargs):
ebgp_session(self, as1r6, as4r1)
ebgp_session(self, as1r5, as4r2)

# Add test hosts ?
# for r in self.routers():
# self.addLink(r, self.addHost('h%s' % r))
super(SimpleBGPTopo2RR, self).build(*args, **kwargs)

def bgp(self, name):
r = self.addRouter(name)
r.addDaemon(BGP, address_families=(
_bgp.AF_INET(redistribute=('connected',)),
_bgp.AF_INET6(redistribute=('connected',))))
return r
31 changes: 4 additions & 27 deletions simple_topo_as.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,12 @@
from ipmininet.iptopo import IPTopo
from ipmininet.router.config import RouterConfig, BGP, ebgp_session
import ipmininet.router.config.bgp as _bgp
from ipmininet.router.config import BGP, ebgp_session, AF_INET6


class SimpleBGPTopoAS(IPTopo):
"""This topology is composed of two AS connected in dual homing with different local pref"""


def build(self, *args, **kwargs):
"""
TODO slide 23 iBGP
+----------+ +--------+
| |
AS1 | AS2 | AS3
| |
| |
+-------+ eBGP | +-------+ iBGP +-------+ | eBGP +-------+
| as1r1 +------------+ as2r1 +-------------+ as2r2 +------------+ as3r1 |
+-------+ | +-------+ +-------+ | +-------+
| |
| |
| |
+------------+ +--------+
Topo from slide 23 iBGP
"""
# Add all routers
as1r1 = self.bgp('as1r1')
Expand All @@ -34,7 +20,7 @@ def build(self, *args, **kwargs):
as5r1 = self.bgp('as5r1')
as3r1 = self.bgp('as3r1')
as2r1 = self.addRouter('as2r1')
as2r1.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/32',)),))
as2r1.addDaemon(BGP, address_families=(AF_INET6(networks=('dead:beef::/32',)),))
h1 = self.addHost('h1')

# Add Links
Expand Down Expand Up @@ -71,14 +57,5 @@ def build(self, *args, **kwargs):
ebgp_session(self, as5r1, as2r1)
ebgp_session(self, as2r1, as4r1)

# Add test hosts ?
# for r in self.routers():
# self.addLink(r, self.addHost('h%s' % r))
super(SimpleBGPTopoAS, self).build(*args, **kwargs)

def bgp(self, name):
r = self.addRouter(name)
r.addDaemon(BGP, address_families=(
_bgp.AF_INET(redistribute=('connected',)),
_bgp.AF_INET6(redistribute=('connected',))))
return r
38 changes: 6 additions & 32 deletions simple_topo_err.py
Original file line number Diff line number Diff line change
@@ -1,36 +1,22 @@
from ipmininet.iptopo import IPTopo
from ipmininet.router.config import RouterConfig, BGP, ebgp_session, bgp_peering
import ipmininet.router.config.bgp as _bgp
from ipmininet.router.config import BGP, ebgp_session, set_rr, AF_INET6


class SimpleBGPTopoErr(IPTopo):
"""This topology is composed of two AS connected in dual homing with different local pref"""

def build(self, *args, **kwargs):
"""
TODO slide 27 BGP-RR-TE
+----------+ +--------+
| |
AS1 | AS2 | AS3
| |
| |
+-------+ eBGP | +-------+ iBGP +-------+ | eBGP +-------+
| as1r1 +------------+ as2r1 +-------------+ as2r2 +------------+ as3r1 |
+-------+ | +-------+ +-------+ | +-------+
| |
| |
| |
+------------+ +--------+
Topo from slide 27 BGP-RR-TE
"""
# Add all routers
as1r1 = self.bgp('as1r1')
as1r3 = self.bgp('as1r3')
as1r5 = self.bgp('as1r5')
as1r6 = self.bgp('as1r6')
as6r1 = self.addRouter('as6r1')
as6r1.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/32',)),))
as6r1.addDaemon(BGP, address_families=(AF_INET6(networks=('dead:beef::/32',)),))
as6r2 = self.addRouter('as6r2')
as6r2.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/32',)),))
as6r2.addDaemon(BGP, address_families=(AF_INET6(networks=('dead:beef::/32',)),))
h1 = self.addHost('h1')
h2 = self.addHost('h2')
h3 = self.addHost('h3')
Expand All @@ -47,28 +33,16 @@ def build(self, *args, **kwargs):
self.addLink(as6r2, h2, params1={"ip": "dead:beef::2/48"}, params2={"ip": "dead:beef::3/48"})
self.addLink(as1r5, h3)
self.addLink(as1r6, h4)
_bgp.set_rr(self, as1r1, peers=[as1r3, as1r5])
_bgp.set_rr(self, as1r3, peers=[as1r1, as1r6])
set_rr(self, rr=as1r1, peers=[as1r3, as1r5])
set_rr(self, rr=as1r3, peers=[as1r1, as1r6])

# Add full mesh
self.addAS(6, (as6r1, as6r2))
self.addAS(1, (as1r1, as1r3, as1r5, as1r6))
bgp_peering(self, as1r1, as1r5)
bgp_peering(self, as1r3, as1r6)
bgp_peering(self, as1r1, as1r3)

# Add eBGP session
ebgp_session(self, as1r1, as6r1)
ebgp_session(self, as1r3, as6r2)

# Add test hosts ?
# for r in self.routers():
# self.addLink(r, self.addHost('h%s' % r))
super(SimpleBGPTopoErr, self).build(*args, **kwargs)

def bgp(self, name):
r = self.addRouter(name)
r.addDaemon(BGP, address_families=(
_bgp.AF_INET(redistribute=('connected',)),
_bgp.AF_INET6(redistribute=('connected',))))
return r
Loading

0 comments on commit f9d1daa

Please sign in to comment.