Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
 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)