Add dual upstream routers
Change-Id: I6f98e8788551082efa60c1ad7a4307f22b459b12
diff --git a/trellis/bgpdbgp1.conf b/trellis/bgpdbgp1.conf
index 5400dfd..8870fb4 100644
--- a/trellis/bgpdbgp1.conf
+++ b/trellis/bgpdbgp1.conf
@@ -5,27 +5,39 @@
! Different next hop for IPv4
!
ip prefix-list 1 seq 10 permit 10.0.2.0/24
-ip prefix-list 1 seq 20 permit 10.0.3.0/24
-ip prefix-list 1 seq 30 permit 10.0.4.0/24
+ip prefix-list 1 seq 20 permit 10.1.2.0/24
+ip prefix-list 1 seq 30 permit 10.0.3.0/24
+ip prefix-list 1 seq 40 permit 10.0.4.0/24
!
-route-map NEXTHOP4 permit 10
+route-map NEXTHOP41 permit 10
match ip address prefix-list 1
set ip next-hop 10.0.1.254
!
+!
+route-map NEXTHOP47 permit 10
+match ip address prefix-list 1
+set ip next-hop 10.0.7.254
+!
! Different next hop for IPv6
!
ipv6 prefix-list 2 seq 10 permit 2000::200/120
ipv6 prefix-list 2 seq 20 permit 2000::300/120
!
-route-map NEXTHOP6 permit 10
+route-map NEXTHOP61 permit 10
match ipv6 address prefix-list 2
set ipv6 next-hop global 2000::1ff
set ipv6 next-hop local 2000::1ff
!
+!
+route-map NEXTHOP67 permit 10
+match ipv6 address prefix-list 2
+set ipv6 next-hop global 2000::7ff
+set ipv6 next-hop local 2000::7ff
+!
! Basic router config
!
-router bgp 65002
-bgp router-id 10.0.1.2
+router bgp 65003
+bgp router-id 172.16.0.3
timers bgp 3 9
!
! IPv4
@@ -34,14 +46,26 @@
neighbor 10.0.1.1 ebgp-multihop
neighbor 10.0.1.1 timers connect 5
neighbor 10.0.1.1 advertisement-interval 5
-neighbor 10.0.1.1 route-map NEXTHOP4 out
+neighbor 10.0.1.1 route-map NEXTHOP41 out
!
neighbor 2000::101 remote-as 65001
neighbor 2000::101 timers connect 5
neighbor 2000::101 advertisement-interval 1
no neighbor 2000::101 activate
!
+neighbor 10.0.7.1 remote-as 65002
+neighbor 10.0.7.1 ebgp-multihop
+neighbor 10.0.7.1 timers connect 5
+neighbor 10.0.7.1 advertisement-interval 5
+neighbor 10.0.7.1 route-map NEXTHOP47 out
+!
+neighbor 2000::701 remote-as 65002
+neighbor 2000::701 timers connect 5
+neighbor 2000::701 advertisement-interval 1
+no neighbor 2000::701 activate
+!
network 10.0.2.0/24
+network 10.1.2.0/24
network 10.0.3.0/24
network 10.0.4.0/24
!
@@ -51,5 +75,7 @@
network 2000::200/120
network 2000::300/120
neighbor 2000::101 activate
-neighbor 2000::101 route-map NEXTHOP6 out
+neighbor 2000::101 route-map NEXTHOP61 out
+neighbor 2000::701 activate
+neighbor 2000::701 route-map NEXTHOP67 out
exit-address-family
diff --git a/trellis/bgpdbgp2.conf b/trellis/bgpdbgp2.conf
new file mode 100644
index 0000000..e554de4
--- /dev/null
+++ b/trellis/bgpdbgp2.conf
@@ -0,0 +1,81 @@
+log file /var/log/quagga/bgpdbgp2.log
+hostname bgp2
+password quagga
+!
+! Different next hop for IPv4
+!
+ip prefix-list 1 seq 10 permit 10.0.2.0/24
+ip prefix-list 1 seq 20 permit 10.1.2.0/24
+ip prefix-list 1 seq 30 permit 10.0.3.0/24
+ip prefix-list 1 seq 40 permit 10.0.4.0/24
+!
+route-map NEXTHOP45 permit 10
+match ip address prefix-list 1
+set ip next-hop 10.0.5.254
+!
+!
+route-map NEXTHOP46 permit 10
+match ip address prefix-list 1
+set ip next-hop 10.0.6.254
+!
+! Different next hop for IPv6
+!
+ipv6 prefix-list 2 seq 10 permit 2000::200/120
+ipv6 prefix-list 2 seq 20 permit 2000::300/120
+!
+route-map NEXTHOP65 permit 10
+match ipv6 address prefix-list 2
+set ipv6 next-hop global 2000::5ff
+set ipv6 next-hop local 2000::5ff
+!
+!
+route-map NEXTHOP66 permit 10
+match ipv6 address prefix-list 2
+set ipv6 next-hop global 2000::6ff
+set ipv6 next-hop local 2000::6ff
+!
+! Basic router config
+!
+router bgp 65003
+bgp router-id 172.16.0.4
+timers bgp 3 9
+!
+! IPv4
+!
+neighbor 10.0.5.1 remote-as 65001
+neighbor 10.0.5.1 ebgp-multihop
+neighbor 10.0.5.1 timers connect 5
+neighbor 10.0.5.1 advertisement-interval 5
+neighbor 10.0.5.1 route-map NEXTHOP45 out
+!
+neighbor 2000::501 remote-as 65001
+neighbor 2000::501 timers connect 5
+neighbor 2000::501 advertisement-interval 1
+no neighbor 2000::501 activate
+!
+neighbor 10.0.6.1 remote-as 65002
+neighbor 10.0.6.1 ebgp-multihop
+neighbor 10.0.6.1 timers connect 5
+neighbor 10.0.6.1 advertisement-interval 5
+neighbor 10.0.6.1 route-map NEXTHOP46 out
+!
+neighbor 2000::601 remote-as 65002
+neighbor 2000::601 timers connect 5
+neighbor 2000::601 advertisement-interval 1
+no neighbor 2000::601 activate
+!
+network 10.0.2.0/24
+network 10.1.2.0/24
+network 10.0.3.0/24
+network 10.0.4.0/24
+!
+! IPv6
+!
+address-family ipv6
+network 2000::200/120
+network 2000::300/120
+neighbor 2000::501 activate
+neighbor 2000::501 route-map NEXTHOP65 out
+neighbor 2000::601 activate
+neighbor 2000::601 route-map NEXTHOP66 out
+exit-address-family
diff --git a/trellis/bgpdr1.conf b/trellis/bgpdr1.conf
index 9a05ac9..9e526b8 100644
--- a/trellis/bgpdr1.conf
+++ b/trellis/bgpdr1.conf
@@ -10,21 +10,33 @@
!
! IPv4
!
-neighbor 10.0.1.2 remote-as 65002
+neighbor 10.0.1.2 remote-as 65003
neighbor 10.0.1.2 ebgp-multihop
neighbor 10.0.1.2 timers connect 5
neighbor 10.0.1.2 advertisement-interval 5
!
-neighbor 2000::102 remote-as 65002
+neighbor 2000::102 remote-as 65003
neighbor 2000::102 timers connect 5
neighbor 2000::102 advertisement-interval 1
no neighbor 2000::102 activate
!
+neighbor 10.0.5.2 remote-as 65003
+neighbor 10.0.5.2 ebgp-multihop
+neighbor 10.0.5.2 timers connect 5
+neighbor 10.0.5.2 advertisement-interval 5
+!
+neighbor 2000::502 remote-as 65003
+neighbor 2000::502 timers connect 5
+neighbor 2000::502 advertisement-interval 1
+no neighbor 2000::502 activate
+!
network 10.0.99.0/24
!
! IPv6
!
address-family ipv6
+network 2000::7700/120
network 2000::9900/120
neighbor 2000::102 activate
+neighbor 2000::502 activate
exit-address-family
diff --git a/trellis/bgpdr2.conf b/trellis/bgpdr2.conf
new file mode 100644
index 0000000..49553e2
--- /dev/null
+++ b/trellis/bgpdr2.conf
@@ -0,0 +1,42 @@
+log file /var/log/quagga/bgpdr2.log
+hostname r2
+password quagga
+!
+! Basic router config
+!
+router bgp 65002
+bgp router-id 10.0.6.1
+timers bgp 3 9
+!
+! IPv4
+!
+neighbor 10.0.6.2 remote-as 65003
+neighbor 10.0.6.2 ebgp-multihop
+neighbor 10.0.6.2 timers connect 5
+neighbor 10.0.6.2 advertisement-interval 5
+!
+neighbor 2000::602 remote-as 65003
+neighbor 2000::602 timers connect 5
+neighbor 2000::602 advertisement-interval 1
+no neighbor 2000::602 activate
+!
+neighbor 10.0.7.2 remote-as 65003
+neighbor 10.0.7.2 ebgp-multihop
+neighbor 10.0.7.2 timers connect 5
+neighbor 10.0.7.2 advertisement-interval 5
+!
+neighbor 2000::702 remote-as 65003
+neighbor 2000::702 timers connect 5
+neighbor 2000::702 advertisement-interval 1
+no neighbor 2000::702 activate
+!
+network 10.0.99.0/24
+!
+! IPv6
+!
+address-family ipv6
+network 2000::8800/120
+network 2000::9900/120
+neighbor 2000::602 activate
+neighbor 2000::702 activate
+exit-address-family
diff --git a/trellis/dhcpd.conf b/trellis/dhcpd.conf
index b193ce9..c16dc33 100644
--- a/trellis/dhcpd.conf
+++ b/trellis/dhcpd.conf
@@ -11,6 +11,11 @@
option routers 10.0.2.254;
}
+subnet 10.1.2.0 netmask 255.255.255.0 {
+ range 10.1.2.100 10.1.2.240;
+ option routers 10.1.2.254;
+}
+
subnet 10.0.3.0 netmask 255.255.255.0 {
range 10.0.3.100 10.0.3.240;
option routers 10.0.3.254;
@@ -46,5 +51,5 @@
host dh1 {
hardware ethernet 00:cc:00:00:00:01;
- fixed-address 10.0.2.11;
+ fixed-address 10.1.2.1;
}
diff --git a/trellis/trellis_dualhome.json b/trellis/trellis_dualhome.json
index 5f4cdef..e9f1dfd 100644
--- a/trellis/trellis_dualhome.json
+++ b/trellis/trellis_dualhome.json
@@ -3,24 +3,24 @@
"of:0000000000000203/5" : {
"interfaces" : [
{
- "ips" : [ "10.0.2.254/24", "2000::2ff/120" ],
- "vlan-tagged": [20]
+ "ips" : [ "10.1.2.254/24", "2001::2ff/120" ],
+ "vlan-tagged": [20, 21]
}
]
},
"of:0000000000000203/6" : {
"interfaces" : [
{
- "ips" : [ "10.0.2.254/24", "2000::2ff/120" ],
- "vlan-untagged": 20
+ "ips" : [ "10.1.2.254/24", "2001::2ff/120" ],
+ "vlan-untagged": 21
}
]
},
"of:0000000000000204/5" : {
"interfaces" : [
{
- "ips" : [ "10.0.2.254/24", "2000::2ff/120" ],
- "vlan-tagged": [20]
+ "ips" : [ "10.1.2.254/24", "2001::2ff/120" ],
+ "vlan-tagged": [20, 21]
}
]
},
@@ -59,8 +59,8 @@
"of:0000000000000204/10" : {
"interfaces" : [
{
- "ips" : [ "10.0.2.254/24", "2000::2ff/120" ],
- "vlan-untagged": 20
+ "ips" : [ "10.1.2.254/24", "2001::2ff/120" ],
+ "vlan-untagged": 21
}
]
},
@@ -107,8 +107,8 @@
"of:0000000000000205/11" : {
"interfaces" : [
{
- "ips" : [ "10.0.1.254/24", "2000::1ff/120" ],
- "vlan-untagged": 10
+ "ips" : [ "10.0.1.254/24", "10.0.7.254/24", "2000::1ff/120", "2000::7ff/120" ],
+ "vlan-tagged": [110, 170]
}
]
},
@@ -116,7 +116,39 @@
"interfaces" : [
{
"ips" : [ "10.0.1.254/24", "2000::1ff/120" ],
- "vlan-untagged": 10
+ "vlan-untagged": 110
+ }
+ ]
+ },
+ "of:0000000000000205/13" : {
+ "interfaces" : [
+ {
+ "ips" : [ "10.0.7.254/24", "2000::7ff/120" ],
+ "vlan-untagged": 170
+ }
+ ]
+ },
+ "of:0000000000000206/6" : {
+ "interfaces" : [
+ {
+ "ips" : [ "10.0.5.254/24", "10.0.6.254/24", "2000::5ff/120", "2000::6ff/120" ],
+ "vlan-tagged": [150, 160]
+ }
+ ]
+ },
+ "of:0000000000000206/7" : {
+ "interfaces" : [
+ {
+ "ips" : [ "10.0.5.254/24", "2000::5ff/120" ],
+ "vlan-untagged": 150
+ }
+ ]
+ },
+ "of:0000000000000206/8" : {
+ "interfaces" : [
+ {
+ "ips" : [ "10.0.6.254/24", "2000::6ff/120" ],
+ "vlan-untagged": 160
}
]
}
@@ -167,7 +199,9 @@
"ipv6Loopback" : "2000::c0a8:0205",
"routerMac" : "00:00:00:00:02:05",
"isEdgeRouter" : true,
- "adjacencySids" : []
+ "adjacencySids" : [],
+ "pairDeviceId": "of:0000000000000206",
+ "pairLocalPort": 5
},
"basic" : {
"name": "s205",
@@ -183,7 +217,9 @@
"ipv6Loopback" : "2000::c0a8:0206",
"routerMac" : "00:00:00:00:02:05",
"isEdgeRouter" : true,
- "adjacencySids" : []
+ "adjacencySids" : [],
+ "pairDeviceId": "of:0000000000000205",
+ "pairLocalPort": 5
},
"basic" : {
"name": "s206",
diff --git a/trellis/trellis_dualhome.py b/trellis/trellis_dualhome.py
index 598c4f5..62269ed 100755
--- a/trellis/trellis_dualhome.py
+++ b/trellis/trellis_dualhome.py
@@ -94,8 +94,9 @@
self.addLink(cs0, nat)
# Internal Quagga bgp1
- intfs = {'bgp1-eth0': {'ipAddrs': ['10.0.1.2/24', '2000::102/120'], 'mac': '00:88:00:00:00:02'},
- 'bgp1-eth1': {'ipAddrs': ['172.16.0.2/12']}}
+ intfs = {'bgp1-eth0': [{'ipAddrs': ['10.0.1.2/24', '2000::102/120'], 'mac': '00:88:00:00:00:03', 'vlan': '110'},
+ {'ipAddrs': ['10.0.7.2/24', '2000::702/120'], 'mac': '00:88:00:00:00:03', 'vlan': '170'}],
+ 'bgp1-eth1': {'ipAddrs': ['172.16.0.3/12']}}
bgp1 = self.addHost('bgp1', cls=BgpRouter,
interfaces=intfs,
quaggaConfFile='./bgpdbgp1.conf',
@@ -103,14 +104,28 @@
self.addLink(bgp1, s205)
self.addLink(bgp1, cs0)
+ # Internal Quagga bgp2
+ intfs = {'bgp2-eth0': [{'ipAddrs': ['10.0.5.2/24', '2000::502/120'], 'mac': '00:88:00:00:00:04', 'vlan': '150'},
+ {'ipAddrs': ['10.0.6.2/24', '2000::602/120'], 'mac': '00:88:00:00:00:04', 'vlan': '160'}],
+ 'bgp2-eth1': {'ipAddrs': ['172.16.0.4/12']}}
+ bgp2 = self.addHost('bgp2', cls=BgpRouter,
+ interfaces=intfs,
+ quaggaConfFile='./bgpdbgp2.conf',
+ zebraConfFile='./zebradbgp2.conf')
+ self.addLink(bgp2, s206)
+ self.addLink(bgp2, cs0)
+
# External Quagga r1
intfs = {'r1-eth0': {'ipAddrs': ['10.0.1.1/24', '2000::101/120'], 'mac': '00:88:00:00:00:01'},
- 'r1-eth1': {'ipAddrs': ['10.0.99.1/16']},
- 'r1-eth2': {'ipAddrs': ['2000::9901/120']}}
+ 'r1-eth1': {'ipAddrs': ['10.0.5.1/24', '2000::501/120'], 'mac': '00:88:00:00:00:11'},
+ 'r1-eth2': {'ipAddrs': ['10.0.99.1/16']},
+ 'r1-eth3': {'ipAddrs': ['2000::9901/120']},
+ 'r1-eth4': {'ipAddrs': ['2000::7701/120']}}
r1 = self.addHost('r1', cls=BgpRouter,
interfaces=intfs,
quaggaConfFile='./bgpdr1.conf')
self.addLink(r1, s205)
+ self.addLink(r1, s206)
# External IPv4 Host behind r1
rh1 = self.addHost('rh1', cls=RoutedHost, ips=['10.0.99.2/24'], gateway='10.0.99.1')
@@ -120,6 +135,34 @@
rh1v6 = self.addHost('rh1v6', cls=RoutedHost, ips=['2000::9902/120'], gateway='2000::9901')
self.addLink(r1, rh1v6)
+ # Another external IPv6 Host behind r1
+ rh11v6 = self.addHost('rh11v6', cls=RoutedHost, ips=['2000::7702/120'], gateway='2000::7701')
+ self.addLink(r1, rh11v6)
+
+ # External Quagga r2
+ intfs = {'r2-eth0': {'ipAddrs': ['10.0.6.1/24', '2000::601/120'], 'mac': '00:88:00:00:00:02'},
+ 'r2-eth1': {'ipAddrs': ['10.0.7.1/24', '2000::701/120'], 'mac': '00:88:00:00:00:22'},
+ 'r2-eth2': {'ipAddrs': ['10.0.99.1/16']},
+ 'r2-eth3': {'ipAddrs': ['2000::9901/120']},
+ 'r2-eth4': {'ipAddrs': ['2000::8801/120']}}
+ r2 = self.addHost('r2', cls=BgpRouter,
+ interfaces=intfs,
+ quaggaConfFile='./bgpdr2.conf')
+ self.addLink(r2, s206)
+ self.addLink(r2, s205)
+
+ # External IPv4 Host behind r2
+ rh2 = self.addHost('rh2', cls=RoutedHost, ips=['10.0.99.2/24'], gateway='10.0.99.1')
+ self.addLink(r2, rh2)
+
+ # External IPv6 Host behind r2
+ rh2v6 = self.addHost('rh126', cls=RoutedHost, ips=['2000::9902/120'], gateway='2000::9901')
+ self.addLink(r2, rh2v6)
+
+ # Another external IPv6 Host behind r1
+ rh22v6 = self.addHost('rh22v6', cls=RoutedHost, ips=['2000::8802/120'], gateway='2000::8801')
+ self.addLink(r2, rh22v6)
+
topos = { 'trellis' : Trellis }
if __name__ == "__main__":
@@ -127,9 +170,9 @@
topo = Trellis()
net = Mininet(topo=topo, controller=None)
- net.addController(RemoteController('c0', ip='192.168.56.11'))
- net.addController(RemoteController('c1', ip='192.168.56.12'))
- net.addController(RemoteController('c2', ip='192.168.56.13'))
+ #net.addController(RemoteController('c0', ip='192.168.56.11'))
+ #net.addController(RemoteController('c1', ip='192.168.56.12'))
+ #net.addController(RemoteController('c2', ip='192.168.56.13'))
net.start()
CLI(net)
diff --git a/trellis/zebradbgp2.conf b/trellis/zebradbgp2.conf
new file mode 100644
index 0000000..dce218d
--- /dev/null
+++ b/trellis/zebradbgp2.conf
@@ -0,0 +1,9 @@
+log file /var/log/quagga/zebradbgp2.log
+hostname zebra-bgp2
+password quagga
+!
+! Default route via virtual management switch
+!
+ip route 0.0.0.0/0 172.16.0.1
+!
+fpm connection ip 192.168.56.11 port 2620