def build(self, *args, **kwargs): """ +----------+ +--------+ | | AS1 | AS2 | AS3 | | | iBGP | +-------+ eBGP | +-------+ +-------+ | eBGP +-------+ | as1r1 +------------+ as2r1 +--X-as2r3-Y--+ as2r2 +------------+ as3r1 | +-------+ | +-------+ OSPF +-------+ | +-------+ 1.2.3.0/24 | | 1.2.3.0/24 | | | | +------------+ +--------+ """ # Add all routers as1r1, as2r1, as2r2, as2r3, x, y, as3r1 = \ self.addRouters('as1r1', 'as2r1', 'as2r2', 'as2r3', 'x', 'y', 'as3r1', config=RouterConfig) as1r1.addDaemon( BGP, address_families=(_bgp.AF_INET(networks=('1.2.3.0/24', )), )) as2r1.addDaemon(BGP, routerid='1.1.1.1') as2r1.addDaemon(OSPF) as2r2.addDaemon(BGP, routerid='1.1.1.2') as2r2.addDaemon(OSPF) as2r3.addDaemon(BGP) as2r3.addDaemon(OSPF) x.addDaemon(OSPF) y.addDaemon(OSPF) as3r1.addDaemon( BGP, address_families=(_bgp.AF_INET(networks=('1.2.3.0/24', )), )) self.addLink(as1r1, as2r1) self.addLink(as2r1, x, igp_metric=1) self.addLink(x, as2r3, igp_metric=10) # as2r1 has preferred routerid but higher IGP cost self.addLink(as2r3, y, igp_metric=1) self.addLink(y, as2r2, igp_metric=self.other_cost) self.addLink(as3r1, as2r2) # Set AS-ownerships self.addAS(1, (as1r1, )) self.addiBGPFullMesh(2, (as2r1, as2r2, as2r3)) self.addAS(3, (as3r1, )) # Add eBGP peering ebgp_session(self, as1r1, as2r1) ebgp_session(self, as3r1, as2r2) # h1 = self.addHost("h1"); # h2 = self.addHost("h2"); # self.addSubnet((as1r1,h1), subnets=('1.1.1.0/24',)); # self.addSubnet((as2r1,as3r1,h2), subnets=('1.2.3.0/24',)); # self.addLink(as1r1,h1) # self.addLink(as2r1,h2) # self.addLink(as3r1,h2) super().build(*args, **kwargs)
def build(self, *args, **kwargs): """ +----------+ +--------+ | | AS1 | AS2 | AS3 | | | iBGP | +-------+ eBGP | +-------+ +-------+ | eBGP +-------+ | as1r1 +------------+ as2r1 +--X-as2r3-Y--+ as2r2 +------------+ as3r1 | +-------+ | +-------+ OSPF +-------+ | +-------+ 1.2.3.0/24 | | 1.2.3.0/24 | | | | +------------+ +--------+ """ # Add all routers as1r1 = self.addRouter('as1r1') as1r1.addDaemon( BGP, address_families=(_bgp.AF_INET(networks=('1.2.3.0/24', )), )) as2r1 = self.addRouter('as2r1') as2r1.addDaemon(BGP, routerid='1.1.1.1') as2r1.addDaemon(OSPF) as2r2 = self.addRouter('as2r2') as2r2.addDaemon(BGP, routerid='1.1.1.2') as2r2.addDaemon(OSPF) as2r3 = self.addRouter('as2r3') as2r3.addDaemon(BGP) as2r3.addDaemon(OSPF) x = self.addRouter('x') x.addDaemon(OSPF) y = self.addRouter('y') y.addDaemon(OSPF) as3r1 = self.addRouter('as3r1') as3r1.addDaemon( BGP, address_families=(_bgp.AF_INET(networks=('1.2.3.0/24', )), )) self.addLink(as1r1, as2r1) self.addLink(as2r1, x, igp_metric=1) self.addLink(x, as2r3, igp_metric=10) # as2r1 has preferred routerid but higher IGP cost self.addLink(as2r3, y, igp_metric=1) self.addLink(y, as2r2, igp_metric=self.other_cost) self.addLink(as3r1, as2r2) # Set AS-ownerships self.addAS(1, (as1r1, )) self.addiBGPFullMesh(2, (as2r1, as2r2, as2r3)) self.addAS(3, (as3r1, )) # Add eBGP peering ebgp_session(self, as1r1, as2r1) ebgp_session(self, as3r1, as2r2) super(BGPDecisionProcess, 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
def __init__(self, node, *args, **kwargs): defaults = { 'address_families': (_bgp.AF_INET(redistribute=('connected', )), _bgp.AF_INET6(redistribute=('connected', ))) } super(BGPConfig, self).__init__(node, daemons=((BGP, defaults), ), *args, **kwargs)
def build(self, *args, **kwargs): """ +----------+ +--------+ | | AS1 | AS2 | AS3 | | | iBGP | +-------+ eBGP | +-------+ +-------+ | eBGP +-------+ | as1r1 +------------+ as2r1 +--X-as2r3-Y--+ as2r2 +------------+ as3r1 | +-------+ | +-------+ OSPF +-------+ | +-------+ 1.2.3.0/24 | | 1.2.3.0/24 | | | | +------------+ +--------+ """ # Add all routers as1r1 = self.addRouter( 'as1r1', config=(RouterConfig, { 'daemons': [(BGP, { 'address_families': (_bgp.AF_INET(networks=('1.2.3.0/24', )), ) })] })) as2r1 = self.addRouter('as2r1', config=(RouterConfig, { 'daemons': [(BGP, { 'routerid': '1.1.1.1' }), OSPF] })) as2r2 = self.addRouter('as2r2', config=(RouterConfig, { 'daemons': [(BGP, { 'routerid': '1.1.1.2' }), OSPF] })) as2r3 = self.addRouter('as2r3', config=(RouterConfig, { 'daemons': [OSPF, BGP] })) x = self.addRouter('x', config=(RouterConfig, {'daemons': [OSPF]})) y = self.addRouter('y', config=(RouterConfig, {'daemons': [OSPF]})) as3r1 = self.addRouter( 'as3r1', config=(RouterConfig, { 'daemons': [(BGP, { 'address_families': (_bgp.AF_INET(networks=('1.2.3.0/24', )), ) })] })) self.addLink(as1r1, as2r1) self.addLink(as2r1, x, igp_metric=1) self.addLink(x, as2r3, igp_metric=10) # as2r1 has preferred routerid but higher IGP cost self.addLink(as2r3, y, igp_metric=1) self.addLink(y, as2r2, igp_metric=self.other_cost) self.addLink(as3r1, as2r2) # Set AS-ownerships self.addOverlay(AS(1, (as1r1, ))) self.addOverlay(iBGPFullMesh(2, (as2r1, as2r2, as2r3))) self.addOverlay(AS(3, (as3r1, ))) # Add eBGP peering ebgp_session(self, as1r1, as2r1) ebgp_session(self, as3r1, as2r2) super(BGPDecisionProcess, self).build(*args, **kwargs)