Skip to content

Commit

Permalink
add topo with missing ibgp sessions
Browse files Browse the repository at this point in the history
  • Loading branch information
Maxmawt committed Aug 22, 2019
1 parent fa8be8e commit 2d18284
Show file tree
Hide file tree
Showing 7 changed files with 343 additions and 6 deletions.
4 changes: 2 additions & 2 deletions simple_topo.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ def build(self, *args, **kwargs):
as1r5.addDaemon(BGP)
as1r6 = self.addRouter('as1r6')
as1r6.addDaemon(BGP)
as4r1 = self.addRouter('as2r1')
as4r1 = self.addRouter('as4r1')
as4r1.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/48',)),))
as4r2 = self.addRouter('as2r2')
as4r2 = self.addRouter('as4r2')
as4r2.addDaemon(BGP, address_families=(_bgp.AF_INET(networks=('dead:beef::/48',)),))

# Add Links
Expand Down
4 changes: 2 additions & 2 deletions simple_topo_local_pref.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ def build(self, *args, **kwargs):
as1r5.addDaemon(BGP)
as1r6 = self.addRouter('as1r6')
as1r6.addDaemon(BGP)
as4r1 = self.addRouter('as2r1')
as4r1 = self.addRouter('as4r1')
as4r1.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/48',)),))
as4r2 = self.addRouter('as2r2')
as4r2 = self.addRouter('as4r2')
as4r2.addDaemon(BGP, address_families=(_bgp.AF_INET(networks=('dead:beef::/48',)),))

# Add Links
Expand Down
4 changes: 2 additions & 2 deletions simple_topo_med.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ def build(self, *args, **kwargs):
as1r5.addDaemon(BGP)
as1r6 = self.addRouter('as1r6')
as1r6.addDaemon(BGP)
as4r1 = self.addRouter('as2r1')
as4r1 = self.addRouter('as4r1')
as4r1.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/48',)),))
as4r2 = self.addRouter('as2r2')
as4r2 = self.addRouter('as4r2')
as4r2.addDaemon(BGP, address_families=(_bgp.AF_INET(networks=('dead:beef::/48',)),))

# Add Links
Expand Down
89 changes: 89 additions & 0 deletions simple_topo_missing2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
from ipmininet.iptopo import IPTopo
from ipmininet.router.config import RouterConfig, BGP, ebgp_session, bgp_peering
import ipmininet.router.config.bgp as _bgp


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

def build(self, *args, **kwargs):
"""
TODO slide 33 iBGP
+----------+ +--------+
| |
AS1 | AS2 | AS3
| |
| |
+-------+ eBGP | +-------+ iBGP +-------+ | eBGP +-------+
| as1r1 +------------+ as2r1 +-------------+ as2r2 +------------+ as3r1 |
+-------+ | +-------+ +-------+ | +-------+
| |
| |
| |
+------------+ +--------+
"""
# Add all routers
as1r1 = self.addRouter('as1r1')
as1r1.addDaemon(BGP)

as1r4 = self.addRouter('as1r4')
as1r4.addDaemon(BGP)
as1r5 = self.addRouter('as1r5')
as1r5.addDaemon(BGP)
as1r6 = self.addRouter('as1r6')
as1r6.addDaemon(BGP)
as4r1 = self.addRouter('as4r1')
as4r1.addDaemon(BGP)
as4r2 = self.addRouter('as4r2')
as4r2.addDaemon(BGP)
as5r1 = self.addRouter('as5r1')
as5r1.addDaemon(BGP)
as3r1 = self.addRouter('as3r1')
as3r1.addDaemon(BGP)
as2r1 = self.addRouter('as2r1')
as2r1.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/48',)),))

# Add Links
self.addLink(as1r1, as1r6)
self.addLink(as1r1, as1r4)
self.addLink(as1r4, as1r5)
self.addLink(as1r5, as1r6)
self.addLink(as4r1, as1r5)
self.addLink(as4r2, as1r4)
self.addLink(as3r1, as1r1)
self.addLink(as5r1, as1r6)
self.addLink(as3r1, as5r1)
self.addLink(as5r1, as2r1)
self.addLink(as2r1, as4r1)
self.addLink(as4r1, as4r2)

# Add full mesh
self.addAS(2, (as2r1,))
self.addAS(3, (as3r1,))
self.addAS(5, (as5r1,))
self.addiBGPFullMesh(4, routers=[as4r1, as4r2])
self.addAS(1, (as1r1, as1r4, as1r5, as1r6))
bgp_peering(self, as1r1, as1r6)
bgp_peering(self, as1r6, as1r4)
bgp_peering(self, as1r4, as1r5)
bgp_peering(self, as1r6, as1r5)

# Add eBGP session
ebgp_session(self, as1r1, as3r1)
ebgp_session(self, as1r4, as4r2)
ebgp_session(self, as1r5, as4r1)
ebgp_session(self, as3r1, as5r1)
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(SimpleBGPTopoMissing, self).build(*args, **kwargs)

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


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

def build(self, *args, **kwargs):
"""
TODO slide 33 iBGP
+----------+ +--------+
| |
AS1 | AS2 | AS3
| |
| |
+-------+ eBGP | +-------+ iBGP +-------+ | eBGP +-------+
| as1r1 +------------+ as2r1 +-------------+ as2r2 +------------+ as3r1 |
+-------+ | +-------+ +-------+ | +-------+
| |
| |
| |
+------------+ +--------+
"""
# Add all routers
as1r1 = self.addRouter('as1r1')
as1r1.addDaemon(BGP)

as1r4 = self.addRouter('as1r4')
as1r4.addDaemon(BGP)
as1r5 = self.addRouter('as1r5')
as1r5.addDaemon(BGP)
as1r6 = self.addRouter('as1r6')
as1r6.addDaemon(BGP)
as4r1 = self.addRouter('as4r1')
as4r1.addDaemon(BGP)
as4r2 = self.addRouter('as4r2')
as4r2.addDaemon(BGP)
as5r1 = self.addRouter('as5r1')
as5r1.addDaemon(BGP)
as3r1 = self.addRouter('as3r1')
as3r1.addDaemon(BGP)
as2r1 = self.addRouter('as2r1')
as2r1.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/48',)),))

# Add Links
self.addLink(as1r1, as1r6)
self.addLink(as1r1, as1r4)
self.addLink(as1r4, as1r5)
self.addLink(as1r5, as1r6)
self.addLink(as4r1, as1r5)
self.addLink(as4r2, as1r4)
self.addLink(as3r1, as1r1)
self.addLink(as5r1, as1r6)
self.addLink(as3r1, as5r1)
self.addLink(as5r1, as2r1)
self.addLink(as2r1, as4r1)
self.addLink(as4r1, as4r2)

# Add full mesh
self.addAS(2, (as2r1,))
self.addAS(3, (as3r1,))
self.addAS(5, (as5r1,))
self.addiBGPFullMesh(4, routers=[as4r1, as4r2])
self.addAS(1, (as1r1, as1r4, as1r5, as1r6))
bgp_peering(self, as1r1, as1r6)
bgp_peering(self, as1r1, as1r4)
bgp_peering(self, as1r4, as1r5)
bgp_peering(self, as1r6, as1r5)

# Add eBGP session
ebgp_session(self, as1r1, as3r1)
ebgp_session(self, as1r4, as4r2)
ebgp_session(self, as1r5, as4r1)
ebgp_session(self, as3r1, as5r1)
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(SimpleBGPTopoMissing, self).build(*args, **kwargs)

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


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

def build(self, *args, **kwargs):
"""
TODO slide 33 iBGP
+----------+ +--------+
| |
AS1 | AS2 | AS3
| |
| |
+-------+ eBGP | +-------+ iBGP +-------+ | eBGP +-------+
| as1r1 +------------+ as2r1 +-------------+ as2r2 +------------+ as3r1 |
+-------+ | +-------+ +-------+ | +-------+
| |
| |
| |
+------------+ +--------+
"""
# Add all routers
as1r1 = self.addRouter('as1r1')
as1r1.addDaemon(BGP)

as1r4 = self.addRouter('as1r4')
as1r4.addDaemon(BGP)
as1r5 = self.addRouter('as1r5')
as1r5.addDaemon(BGP)
as1r6 = self.addRouter('as1r6')
as1r6.addDaemon(BGP)
as4r1 = self.addRouter('as4r1')
as4r1.addDaemon(BGP)
as4r2 = self.addRouter('as4r2')
as4r2.addDaemon(BGP)
as5r1 = self.addRouter('as5r1')
as5r1.addDaemon(BGP)
as3r1 = self.addRouter('as3r1')
as3r1.addDaemon(BGP)
as2r1 = self.addRouter('as2r1')
as2r1.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/48',)),))

# Add Links
self.addLink(as1r1, as1r6)
self.addLink(as1r1, as1r4, igp_cost=7)
self.addLink(as1r4, as1r5)
self.addLink(as1r5, as1r6)
self.addLink(as4r1, as1r5)
self.addLink(as4r2, as1r4)
self.addLink(as3r1, as1r1)
self.addLink(as5r1, as1r6)
self.addLink(as3r1, as5r1)
self.addLink(as5r1, as2r1)
self.addLink(as2r1, as4r1)
self.addLink(as4r1, as4r2)

# Add full mesh
self.addAS(2, (as2r1,))
self.addAS(3, (as3r1,))
self.addAS(5, (as5r1,))
self.addiBGPFullMesh(4, routers=[as4r1, as4r2])
self.addAS(1, (as1r1, as1r4, as1r5, as1r6))
bgp_peering(self, as1r1, as1r5)
bgp_peering(self, as1r1, as1r4)
bgp_peering(self, as1r4, as1r5)

# Add eBGP session
ebgp_session(self, as1r1, as3r1)
ebgp_session(self, as1r4, as4r2)
ebgp_session(self, as1r5, as4r1)
ebgp_session(self, as3r1, as5r1)
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(SimpleBGPTopoMissing, self).build(*args, **kwargs)

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


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

def build(self, *args, **kwargs):
"""
TODO slide 30 iBGP
+----------+ +--------+
| |
AS1 | AS2 | AS3
| |
| |
+-------+ eBGP | +-------+ iBGP +-------+ | eBGP +-------+
| as1r1 +------------+ as2r1 +-------------+ as2r2 +------------+ as3r1 |
+-------+ | +-------+ +-------+ | +-------+
| |
| |
| |
+------------+ +--------+
"""
# Add all routers
as1r1 = self.addRouter('as1r1')
as1r1.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('1:1::/48',)),))
as1r2 = self.addRouter('as1r2')
as1r2.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('1:1::/48',)),))
as1r3 = self.addRouter('as1r3')
as1r3.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('1:1::/48',)),))
as1r4 = self.addRouter('as1r4')
as1r4.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('1:1::/48',)),))
as2r1 = self.addRouter('as2r1')
as2r1.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('dead:beef::/48',)),))
as3r1 = self.addRouter('as3r1')
as3r1.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('beef:dead::/48',)),))
as3r2 = self.addRouter('as3r2')
as3r2.addDaemon(BGP, address_families=(_bgp.AF_INET6(networks=('beef:dead::/48',)),))

# Add links
self.addLink(as1r1, as1r2)
self.addLink(as1r1, as1r3)
self.addLink(as1r3, as1r4)
self.addLink(as1r2, as1r4)
self.addLink(as1r3, as2r1)
self.addLink(as1r2, as3r1)
self.addLink(as3r1, as3r2)
self.addLink(as3r2, as2r1)

# Add AS and fullmeshes
self.addAS(2, (as2r1,))
self.addiBGPFullMesh(1, routers=[as1r1, as1r2, as1r3, as1r4])
self.addiBGPFullMesh(3, routers=[as3r1, as3r2])

# Add eBGP sessions
ebgp_session(self, as1r2, as3r1)
ebgp_session(self, as3r2, as2r1)
ebgp_session(self, as2r1, as1r3)

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

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

0 comments on commit 2d18284

Please sign in to comment.