Ejemplo n.º 1
0
def test_uncfg_as(self):

        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='iosxe')
        intf1 = Interface(device=dev1, name='Ethernet0/0/1',
                          ipv4='10.1.0.1/24')
        intf2 = Interface(device=dev1, name='Ethernet0/0/2',
                          ipv4='10.2.0.1/24')
        dev2 = Device(testbed=testbed, name='PE2', os='iosxe')
        intf3 = Interface(device=dev2, name='Ethernet0/0/3',
                          ipv4='10.1.0.2/24', ipv6='2001:111:222::/64')
        intf4 = Interface(device=dev2, name='Ethernet0/0/4',
                          ipv4='10.2.0.2/24')

        with self.assertNoWarnings():

            Genie.testbed = testbed
            bgp = Bgp(bgp_id='304.304')
            self.assertIs(bgp.testbed, testbed)
            Genie.testbed = testbed
            bgp = Bgp(bgp_id='304.304')
            self.assertIs(bgp.testbed, Genie.testbed)
            self.assertIs(bgp.testbed, testbed)

            dev1.add_feature(bgp)

            uncfgs = bgp.build_unconfig(apply=False)
            self.assertCountEqual(uncfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(str(uncfgs[dev1.name]), '\n'.join([
                'no router bgp 304.304',
                    ]))
Ejemplo n.º 2
0
    def test_cfg_as(self):
        ''' Test 4-byte AS support'''
        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='iosxe')
        intf1 = Interface(device=dev1, name='Ethernet0/0/1',
                          ipv4='10.1.0.1/24')
        intf2 = Interface(device=dev1, name='Ethernet0/0/2',
                          ipv4='10.2.0.1/24',
                          ipv6='2001::1')
        dev2 = Device(testbed=testbed, name='PE2', os='iosxe')
        intf3 = Interface(device=dev2, name='Ethernet0/0/3',
                          ipv4='10.1.0.2/24', ipv6='2001:111:222::/64')
        intf4 = Interface(device=dev2, name='Ethernet0/0/4',
                          ipv4='10.2.0.2/24')

        with self.assertNoWarnings():

            Genie.testbed = testbed
            bgp = Bgp(bgp_id='304.304')
            self.assertIs(bgp.testbed, testbed)
            Genie.testbed = testbed
            bgp = Bgp(bgp_id='304.304')
            self.assertIs(bgp.testbed, Genie.testbed)
            self.assertIs(bgp.testbed, testbed)

        dev1.add_feature(bgp)
        cfgs = bgp.build_config(apply=False)
        self.assertCountEqual(cfgs.keys(), [dev1.name])
        self.maxDiff = None
        self.assertEqual(str(cfgs[dev1.name]), '\n'.join(
            ['router bgp 304.304',
             ' exit',
            ]))
Ejemplo n.º 3
0
    def test_partial_cfg(self):
        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='iosxe')

        with self.assertNoWarnings():

            Genie.testbed = testbed
            bgp = Bgp(bgp_id=100)
            self.assertIs(bgp.testbed, testbed)
            Genie.testbed = testbed
            bgp = Bgp(bgp_id=100)
            self.assertIs(bgp.testbed, Genie.testbed)
            self.assertIs(bgp.testbed, testbed)

            # Defining attributes
            bgp.device_attr[dev1]
            dev1.add_feature(bgp)
            ps_name = 'PEER-SESSION'
            bgp.device_attr[dev1].peer_session_attr[ps_name].ps_fall_over_bfd=\
                True
            partial_cfg1 = bgp.build_config(
                                apply=False,
                                attributes={'device_attr':\
                                           {'*':{'peer_session_attr':\
                                           {'*':"ps_fall_over_bfd"}}}})

            self.assertCountEqual(partial_cfg1.keys(), [dev1.name])
            self.assertMultiLineEqual(str(partial_cfg1[dev1.name]), '\n'.\
                join([
                'router bgp 100',
                ' template peer-session PEER-SESSION',
                '  fall-over bfd',
                '  exit',
                ' exit',
                    ]))
Ejemplo n.º 4
0
    def test_uncfg2(self):

        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='iosxe')

        with self.assertNoWarnings():

            Genie.testbed = testbed
            bgp = Bgp(bgp_id=100)
            self.assertIs(bgp.testbed, testbed)
            Genie.testbed = testbed
            bgp = Bgp(bgp_id=100)
            self.assertIs(bgp.testbed, Genie.testbed)
            self.assertIs(bgp.testbed, testbed)

            dev1.add_feature(bgp)

            # Defining attributes
            af_name = 'ipv4 unicast'
            bgp.device_attr[dev1]
            bgp.device_attr[dev1].vrf_attr[None].always_compare_med = True
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name]
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name].\
                af_label_allocation_mode = 'per-vrf'

            uncfg = bgp.build_unconfig(apply=False)
            self.assertCountEqual(uncfg.keys(), [dev1.name])
            self.assertMultiLineEqual(str(uncfg[dev1.name]), '\n'.\
                join([
                'no router bgp 100',
                'no mpls label mode vrf default protocol bgp-vpnv4 per-vrf',
                    ]))
Ejemplo n.º 5
0
    def test_cfg_vxlan_rewrite_mvpn(self):
        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='nxos')
        bgp = Bgp(bgp_id=100)

        # Defining attributes
        af_name = 'ipv4 mvpn'
        vrf = Vrf('default')

        self.assertIs(bgp.testbed, testbed)
        dev1.add_feature(bgp)

        neighbor_id = '10.0.0.1'
        bgp.device_attr[dev1].vrf_attr[vrf].neighbor_attr[neighbor_id].\
                    nbr_peer_type = Bgp.NBR_PEER_TYPE.fabric_border_leaf
        bgp.device_attr[dev1].vrf_attr[vrf].neighbor_attr[neighbor_id].address_family_attr[af_name]. \
            nbr_af_rewrite_mvpn_rt_asn = True

        bgp.device_attr[dev1]

        self.assertIs(bgp.testbed, testbed)
        dev1.add_feature(bgp)

        cfgs = bgp.build_config(apply=False)
        self.assertCountEqual(cfgs.keys(), [dev1.name])
        self.assertMultiLineEqual(
            str(cfgs[dev1.name]), '\n'.join([
                'router bgp 100',
                ' neighbor 10.0.0.1',
                '  peer-type fabric-border-leaf',
                '  address-family ipv4 mvpn',
                '   rewrite-rt-asn',
                '   exit',
                '  exit',
                ' exit',
            ]))

        uncfgs2 = bgp.build_unconfig(
            apply=False,
            attributes={'device_attr': {'*': {'vrf_attr':
                                                  {'*': {'neighbor_attr': \
                                                     {'*': {"nbr_peer_type":None,
                                                            'address_family_attr': \
                                                                   {'*': "nbr_af_rewrite_mvpn_rt_asn"},
                                                            }}}}}}})

        self.assertCountEqual(uncfgs2.keys(), [dev1.name])
        self.maxDiff = None
        self.assertMultiLineEqual(
            str(uncfgs2[dev1.name]), '\n'.join([
                'router bgp 100',
                ' neighbor 10.0.0.1',
                '  no peer-type fabric-border-leaf',
                '  address-family ipv4 mvpn',
                '   no rewrite-rt-asn',
                '   exit',
                '  exit',
                ' exit',
            ]))
Ejemplo n.º 6
0
 def test_feature_bgp_config(self):
     Genie.testbed = testbed = Testbed()
     dev1 = Device(testbed=testbed, name='PE1', os='nxos')
     bgp = Bgp()
     bgp.device_attr[dev1].enabled = True
     dev1.add_feature(bgp)
     cfgs = bgp.build_config(apply=False)
     self.assertCountEqual(cfgs.keys(), [dev1.name])
     self.assertEqual(str(cfgs[dev1.name]), "feature bgp")
Ejemplo n.º 7
0
    def test_bgp_peer_policy_attr(self):
        # For failures
        self.maxDiff = None

        # shorten the line
        dev1 = self.dev1

        # Bgp object
        bgp = Bgp(bgp_id=100)
        dev1.add_feature(bgp)
        pp = 'PEERPOLICY'
        bgp.device_attr[dev1].peer_policy_attr[pp].pp_af_name = 'ipv4 unicast'
        bgp.device_attr[dev1].peer_policy_attr[pp].pp_allowas_in = True
        bgp.device_attr[dev1].peer_policy_attr[pp].pp_allowas_in_as_number = 5
        bgp.device_attr[dev1].peer_policy_attr[pp].pp_as_override = True
        bgp.device_attr[dev1].peer_policy_attr[pp].pp_default_originate = True
        bgp.device_attr[dev1].peer_policy_attr[
            pp].pp_default_originate_route_map = 'pp-map-test'
        bgp.device_attr[dev1].peer_policy_attr[
            pp].pp_route_map_name_in = 'allin'
        bgp.device_attr[dev1].peer_policy_attr[
            pp].pp_route_map_name_out = 'allout'
        bgp.device_attr[dev1].peer_policy_attr[
            pp].pp_maximum_prefix_max_prefix_no = 100
        bgp.device_attr[dev1].peer_policy_attr[
            pp].pp_maximum_prefix_threshold = 50
        bgp.device_attr[dev1].peer_policy_attr[
            pp].pp_maximum_prefix_restart = 99
        bgp.device_attr[dev1].peer_policy_attr[pp].pp_next_hop_self = True
        bgp.device_attr[dev1].peer_policy_attr[
            pp].pp_route_reflector_client = True
        bgp.device_attr[dev1].peer_policy_attr[
            pp].pp_send_community = 'standard'
        bgp.device_attr[dev1].peer_policy_attr[
            pp].pp_soft_reconfiguration = True
        # Build config
        cfgs = bgp.build_config(apply=False)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'router bgp 100',
                ' af-group PEERPOLICY address-family ipv4 unicast',
                '  allowas-in 5',
                '  as-override',
                '  default-originate route-policy pp-map-test',
                '  route-policy allin in',
                '  route-policy allout out',
                '  maximum-prefix 100 50 restart 99',
                '  next-hop-self',
                '  route-reflector-client',
                '  send-community-ebgp',
                '  soft-reconfiguration inbound',
                '  exit',
                ' exit',
                ]))
Ejemplo n.º 8
0
    def test_cfg_l2vpn_vpls(self):

        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='nxos')
        bgp = Bgp(bgp_id=100)

        # Defining attributes
        nbr_af_name = 'l2vpn vpls'
        neighbor_id = '10.2.0.2'

        bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
            address_family_attr[nbr_af_name].nbr_af_suppress_signaling_protocol_ldp = True

        bgp.device_attr[dev1]

        self.assertIs(bgp.testbed, testbed)
        dev1.add_feature(bgp)

        cfgs = bgp.build_config(apply=False)
        self.assertCountEqual(cfgs.keys(), [dev1.name])
        self.assertMultiLineEqual(
            str(cfgs[dev1.name]), '\n'.join([
                'router bgp 100',
                ' neighbor 10.2.0.2',
                '  address-family l2vpn vpls',
                '   suppress-signling-protocol ldp',
                '   exit',
                '  exit',
                ' exit',
            ]))

        uncfgs = bgp.build_unconfig(
            apply=False,
            attributes={'device_attr': {'*': {'vrf_attr':
                                                  {'*': {'neighbor_attr': \
                                                             {'*': {'address_family_attr': \
                                                                        {'*': "nbr_af_suppress_signaling_protocol_ldp"}}}}}}}})

        self.assertCountEqual(uncfgs.keys(), [dev1.name])
        self.maxDiff = None
        self.assertMultiLineEqual(
            str(uncfgs[dev1.name]), '\n'.join([
                'router bgp 100',
                ' neighbor 10.2.0.2',
                '  address-family l2vpn vpls',
                '   no suppress-signling-protocol ldp',
                '   exit',
                '  exit',
                ' exit',
            ]))
Ejemplo n.º 9
0
    def test_bgp_peer_session_attr(self):
        # For failures
        self.maxDiff = None

        # shorten the line
        dev1 = self.dev1

        # Bgp object
        bgp = Bgp(bgp_id=100)
        dev1.add_feature(bgp)
        ps = 'PEERSESSION'
        bgp.device_attr[dev1].peer_session_attr[
            ps].ps_transport_connection_mode = 'passive'
        bgp.device_attr[dev1].peer_session_attr[
            ps].ps_suppress_four_byte_as_capability = True
        bgp.device_attr[dev1].peer_session_attr[
            ps].ps_description = 'some description'
        bgp.device_attr[dev1].peer_session_attr[
            ps].ps_disable_connected_check = True
        bgp.device_attr[dev1].peer_session_attr[ps].ps_shutdown = True
        bgp.device_attr[dev1].peer_session_attr[
            ps].ps_update_source = 'GigabitEthernet0/0/0/2'
        # Build config
        cfgs = bgp.build_config(apply=False)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'router bgp 100',
                ' session-group PEERSESSION',
                '  capability suppress 4-byte-as',
                '  description some description',
                '  ignore-connected-check',
                '  shutdown',
                '  session-open-mode passive',
                '  update-source GigabitEthernet0/0/0/2',
                '  exit',
                ' exit',
                ]))
Ejemplo n.º 10
0
    def test_uncfg3(self):

        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='iosxe')
        dev2 = Device(testbed=testbed, name='PE2', os='iosxe')
        intf4 = Interface(device=dev2, name='Ethernet0/0/4',
                          ipv4='10.2.0.2/24')


        with self.assertNoWarnings():
            Genie.testbed = testbed
            bgp = Bgp(bgp_id=100)
            self.assertIs(bgp.testbed, Genie.testbed)
            self.assertIs(bgp.testbed, testbed)

            dev1.add_feature(bgp)

            # Defining attributes
            bgp.device_attr[dev1]
            neighbor_id = intf4.ipv4
            bgp.device_attr[dev1].vrf_attr[None].add_neighbor(neighbor_id)
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id]

            partial_uncfg = bgp.build_unconfig(
                                apply=False,
                                attributes={'device_attr':\
                                           {'*':{'vrf_attr':\
                                           {'*':{'neighbor_attr':'*'}}}}})

            self.assertCountEqual(partial_uncfg.keys(), [dev1.name])
            self.assertMultiLineEqual(str(partial_uncfg[dev1.name]), '\n'.\
                join([
                'router bgp 100',
                ' no neighbor 10.2.0.2',
                ' exit',
                    ]))
Ejemplo n.º 11
0
    def test_cfg(self):
        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='nxos')
        intf1 = Interface(device=dev1, name='Ethernet0/0/1',
                          ipv4='10.1.0.1/24')
        intf2 = Interface(device=dev1, name='Ethernet0/0/2',
                          ipv4='10.2.0.1/24')
        dev2 = Device(testbed=testbed, name='PE2', os='nxos')
        intf3 = Interface(device=dev2, name='Ethernet0/0/3',
                          ipv4='10.1.0.2/24', ipv6='2001:111:222::/64')
        intf4 = Interface(device=dev2, name='Ethernet0/0/4',
                          ipv4='10.2.0.2/24')

        with self.assertNoWarnings():
            Genie.testbed = None
            with self.assertRaises(TypeError):
                bgp = Bgp()
            with self.assertRaises(TypeError):
                bgp = Bgp(testbed=testbed)
            Genie.testbed = testbed
            with self.assertRaises(TypeError):
                bgp = Bgp()
            bgp = Bgp(asn=100, bgp_id=100)
            self.assertIs(bgp.testbed, testbed)
            Genie.testbed = testbed
            bgp = Bgp(asn=100, bgp_id=100)
            self.assertIs(bgp.testbed, Genie.testbed)
            self.assertIs(bgp.testbed, testbed)

            # Defining attributes
            af_name = 'vpnv4 unicast'
            af_name2 = 'link-state'
            bgp.device_attr[dev1]
            bgp.device_attr[dev1].enabled = True
            bgp.device_attr[dev1].vrf_attr[None].always_compare_med = True
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name]
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name2]
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name]. \
                af_retain_rt_all = True
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name]. \
                af_dampening = True
            neighbor_id = intf4.ipv4
            bgp.device_attr[dev1].vrf_attr[None].add_neighbor(neighbor_id)
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id]
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id]. \
                nbr_fall_over_bfd = True
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id]. \
                nbr_shutdown = True
            nbr_af_name = 'ipv4 unicast'
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id]. \
                address_family_attr[nbr_af_name]
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id]. \
                address_family_attr[nbr_af_name].nbr_af_allowas_in = True

            dev1.add_feature(bgp)

            cfgs = bgp.build_config(apply=False)
            self.assertCountEqual(cfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.join(
                ['feature bgp',
                 'router bgp 100',
                 ' bestpath always-compare-med',
                 ' neighbor 10.2.0.2',
                 '  bfd',
                 '  shutdown',
                 '  address-family ipv4 unicast',
                 '   allowas-in',
                 '   exit',
                 '  exit',
                 ' address-family link-state',
                 '  exit',
                 ' address-family vpnv4 unicast',
                 '  dampening',
                 '  retain route-target all',
                 '  exit',
                 ' exit',
                 ]))

            bgp.device_attr[dev1].protocol_shutdown = True
            partial_cfg1 = bgp.build_config(
                apply=False,
                attributes={'device_attr': \
                                {'*': "enabled", '*': "protocol_shutdown"}})
            self.assertCountEqual(partial_cfg1.keys(), [dev1.name])
            self.assertMultiLineEqual(str(partial_cfg1[dev1.name]), '\n'. \
                                      join([
                'router bgp 100',
                ' shutdown',
                ' exit',
            ]))
Ejemplo n.º 12
0
    def test_cfg2(self):

        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='nxos')
        intf1 = Interface(device=dev1, name='Ethernet0/0/1',
                          ipv4='10.1.0.1/24')
        intf2 = Interface(device=dev1, name='Ethernet0/0/2',
                          ipv4='10.2.0.1/24')
        dev2 = Device(testbed=testbed, name='PE2', os='nxos')
        intf3 = Interface(device=dev2, name='Ethernet0/0/3',
                          ipv4='10.1.0.2/24', ipv6='2001:111:222::/64')
        intf4 = Interface(device=dev2, name='Ethernet0/0/4',
                          ipv4='10.2.0.2/24')

        with self.assertNoWarnings():

            Genie.testbed = None
            with self.assertRaises(TypeError):
                bgp = Bgp()
            with self.assertRaises(TypeError):
                bgp = Bgp(testbed=testbed)
            Genie.testbed = testbed
            with self.assertRaises(TypeError):
                bgp = Bgp()
            bgp = Bgp(asn=100,bgp_id=100)
            self.assertIs(bgp.testbed, testbed)
            Genie.testbed = testbed
            bgp = Bgp(asn=100,bgp_id=100)
            self.assertIs(bgp.testbed, Genie.testbed)
            self.assertIs(bgp.testbed, testbed)

            # Defining attributes
            vrf_id = 'vrf1'
            vrf1 = Vrf(vrf_id)
            pp_name = 'PEER-POLICY'
            ps_name = 'PEER-SESSION'
            bgp.device_attr[dev2].enabled = True
            bgp.device_attr[dev2].peer_policy_attr[pp_name].pp_allowas_in =\
                True
            bgp.device_attr[dev2].peer_session_attr[ps_name].ps_fall_over_bfd=\
                True
            bgp.device_attr[dev2].vrf_attr[None].cluster_id = '150'
            af_name = 'ipv6 unicast'
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name]
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name].\
                af_nexthop_route_map = 'test'
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name].\
                af_dampening = True
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name].\
                af_dampening_half_life_time = 1
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name].\
                af_dampening_reuse_time = 10
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name].\
                af_dampening_suppress_time = 30
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name].\
                af_dampening_max_suppress_time = 2
            neighbor_id = intf2.ipv4
            bgp.device_attr[dev2].vrf_attr[vrf1].add_neighbor(neighbor_id)
            bgp.device_attr[dev2].vrf_attr[vrf1].neighbor_attr[neighbor_id].\
                nbr_suppress_four_byte_as_capability = True
            nbr_af_name = 'vpnv6 unicast'
            bgp.device_attr[dev2].vrf_attr[vrf1].neighbor_attr[neighbor_id].\
                address_family_attr[nbr_af_name]
            bgp.device_attr[dev2].vrf_attr[vrf1].neighbor_attr[neighbor_id].\
                address_family_attr[nbr_af_name].\
                nbr_af_maximum_prefix_max_prefix_no = 300000
            bgp.device_attr[dev2].vrf_attr[vrf1].neighbor_attr[neighbor_id].\
                address_family_attr[nbr_af_name].nbr_af_default_originate = True

            dev2.add_feature(bgp)
            cfgs = bgp.build_config(apply=False)
            self.assertCountEqual(cfgs.keys(), [dev2.name])
            self.maxDiff = None
            self.assertEqual(str(cfgs[dev2.name]), '\n'.join(
                ['feature bgp',
                'router bgp 100',
                ' cluster-id 150',
                ' address-family ipv6 unicast',
                '  dampening 1 10 30 2',
                '  nexthop route-map test',
                '  exit',
                ' vrf vrf1',
                '  neighbor 10.2.0.1',
                '   capability suppress 4-byte-as',
                '   address-family vpnv6 unicast',
                '    maximum-prefix 300000',
                '    default-originate',
                '    exit',
                '   exit',
                '  exit',
                ' template peer-session PEER-SESSION',
                '  bfd',
                '  exit',
                ' template peer-policy PEER-POLICY',
                '  allowas-in',
                '  exit',
                ' exit',
                ]))

            partial_uncfg1 = bgp.build_unconfig(apply=False, attributes={\
                                'device_attr':\
                                    {dev2.name:\
                                        {'vrf_attr':\
                                            {'vrf1':\
                                                {'neighbor_attr':\
                                                    {'10.2.0.1':\
                                                        {'address_family_attr':\
                                                            {'vpnv6 unicast':\
                                                                {'nbr_af_default_originate': None}}}}}}}}})
            self.assertCountEqual(partial_uncfg1.keys(), [dev2.name])
            self.assertMultiLineEqual(str(partial_uncfg1[dev2.name]), '\n'.\
                join([
                'router bgp 100',
                ' vrf vrf1',
                '  neighbor 10.2.0.1',
                '   address-family vpnv6 unicast',
                '    no default-originate',
                '    exit',
                '   exit',
                '  exit',
                ' exit',
                ]))
Ejemplo n.º 13
0
    def test_bgp_vrf_family_attr(self):
        # For failures
        self.maxDiff = None

        # shorten the line
        dev1 = self.dev1

        # ===== none-default vrf =======
        # Bgp object
        bgp = Bgp(bgp_id=100)
        dev1.add_feature(bgp)
        af = 'ipv4 unicast'
        af6 = 'ipv6 unicast'

        bgp.device_attr[dev1].add_vrf(self.vrf1)
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af]
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_dampening = True
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_dampening_route_map = 'route-test'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_dampening_half_life_time = 30
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_client_to_client_reflection = True
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_distance_extern_as = 100
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_distance_internal_as = 110
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_distance_local = 120
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_maximum_paths_ebgp = 15
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_maximum_paths_ibgp = 20
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_maximum_paths_eibgp = 30
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_aggregate_address_ipv4_address = '2.2.2.2'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_aggregate_address_ipv4_mask = 24
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_aggregate_address_summary_only = True
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_network_number = '3.3.3.3'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_network_mask = 24
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_network_route_map = 'network-map-test'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_redist_isis = '1'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_redist_ospf = '1'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_redist_ospf_metric = 10
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_redist_rip = True
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af].\
            af_redist_rip_route_policy = 'rip-route-test'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af6].\
            af_v6_network_number = '3:3::/48'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].address_family_attr[af6].\
            af_v6_aggregate_address_ipv6_address = '2:2::/64'

        # Build config
        cfgs = bgp.build_config(apply=False)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'router bgp 100',
                ' vrf vrf1',
                '  address-family ipv4 unicast',
                '   bgp dampening 30',
                '   distance bgp 100 110 120',
                '   maximum-paths ebgp 15',
                '   maximum-paths ibgp 20',
                '   maximum-paths eibgp 30',
                '   aggregate-address 2.2.2.2/24 summary-only',
                '   network 3.3.3.3/24 route-policy network-map-test',
                '   redistribute ospf 1 metric 10',
                '   redistribute rip route-policy rip-route-test',
                '   exit',
                '  address-family ipv6 unicast',
                '   aggregate-address 2:2::/64',
                '   network 3:3::/48',
                '   exit',
                '  exit',
                ' exit',
                ]))

        # ===== default vrf =======
        # Bgp object
        bgp = Bgp(bgp_id=100)
        dev1.add_feature(bgp)
        af = 'vpnv4 unicast'
        bgp.device_attr[dev1].add_vrf(self.vrf2)
        bgp.device_attr[dev1].vrf_attr[self.vrf2].always_compare_med = True
        bgp.device_attr[dev1].vrf_attr[self.vrf2].address_family_attr[af].\
         af_retain_rt_all = True

        # Build config
        cfgs = bgp.build_config(apply=False)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'router bgp 100',
                ' bgp bestpath med always',
                ' address-family vpnv4 unicast',
                '  retain route-target all',
                '  exit',
                ' exit',
                ]))
Ejemplo n.º 14
0
    def test_bgp_vrf_attr(self):
        # For failures
        self.maxDiff = None

        # shorten the line
        dev1 = self.dev1

        # ===== none-default vrf =======
        # Bgp object
        bgp = Bgp(bgp_id=100)
        dev1.add_feature(bgp)

        bgp.device_attr[dev1].add_vrf(self.vrf1)
        bgp.device_attr[dev1].vrf_attr[self.vrf1].rd = '100:1'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].always_compare_med = True
        bgp.device_attr[dev1].vrf_attr[self.vrf1].graceful_restart = True
        bgp.device_attr[dev1].vrf_attr[self.vrf1].\
            graceful_restart_restart_time = 100
        bgp.device_attr[dev1].vrf_attr[self.vrf1].\
            graceful_restart_stalepath_time = 150
        bgp.device_attr[dev1].vrf_attr[self.vrf1].log_neighbor_changes = False
        bgp.device_attr[dev1].vrf_attr[self.vrf1].router_id = '1.1.1.1'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].keepalive_interval = 10
        bgp.device_attr[dev1].vrf_attr[self.vrf1].holdtime = 100
        bgp.device_attr[dev1].vrf_attr[self.vrf1].enforce_first_as = False

        # Build config
        cfgs = bgp.build_config(apply=False)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'router bgp 100',
                ' vrf vrf1',
                '  bgp bestpath med always',
                '  rd 100:1',
                '  bgp log neighbor changes disable',
                '  bgp router-id 1.1.1.1',
                '  timers bgp 10 100',
                '  bgp enforce-first-as disable',
                '  exit',
                ' exit',
                ]))

        # ===== default vrf =======
        # Bgp object
        bgp = Bgp(bgp_id=100)
        dev1.add_feature(bgp)
        bgp.device_attr[dev1].add_vrf(self.vrf2)
        bgp.device_attr[dev1].vrf_attr[self.vrf2].always_compare_med = True
        bgp.device_attr[dev1].vrf_attr[self.vrf2].cluster_id = 10
        bgp.device_attr[dev1].vrf_attr[self.vrf2].confederation_identifier = 20
        bgp.device_attr[dev1].vrf_attr[self.vrf2].confederation_peers_as = '66'
        bgp.device_attr[dev1].vrf_attr[self.vrf2].graceful_restart = True
        bgp.device_attr[dev1].vrf_attr[self.vrf2].\
            graceful_restart_restart_time = 100
        bgp.device_attr[dev1].vrf_attr[self.vrf2].\
            graceful_restart_stalepath_time = 150
        bgp.device_attr[dev1].vrf_attr[self.vrf2].log_neighbor_changes = True
        bgp.device_attr[dev1].vrf_attr[self.vrf2].router_id = '1.1.1.1'
        bgp.device_attr[dev1].vrf_attr[self.vrf2].keepalive_interval = 10
        bgp.device_attr[dev1].vrf_attr[self.vrf2].holdtime = 100
        bgp.device_attr[dev1].vrf_attr[
            self.vrf2].fast_external_fallover = False

        # Build config
        cfgs = bgp.build_config(apply=False)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'router bgp 100',
                ' bgp bestpath med always',
                ' bgp cluster-id 10',
                ' bgp confederation identifier 20',
                ' bgp confederation peers 66',
                ' bgp graceful-restart',
                ' bgp graceful-restart restart-time 100',
                ' bgp graceful-restart stalepath-time 150',
                ' bgp router-id 1.1.1.1',
                ' timers bgp 10 100',
                ' bgp fast-external-fallover disable',
                ' exit',
                ]))
Ejemplo n.º 15
0
    def test_cfg3(self):

        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='iosxe')
        intf1 = Interface(device=dev1,
                          name='Ethernet0/0/1',
                          ipv4='10.1.0.1/24')
        intf2 = Interface(device=dev1,
                          name='Ethernet0/0/2',
                          ipv4='10.2.0.1/24',
                          ipv6='2001::1')
        dev2 = Device(testbed=testbed, name='PE2', os='iosxe')
        intf3 = Interface(device=dev2,
                          name='Ethernet0/0/3',
                          ipv4='10.1.0.2/24',
                          ipv6='2001:111:222::/64')
        intf4 = Interface(device=dev2,
                          name='Ethernet0/0/4',
                          ipv4='10.2.0.2/24')

        with self.assertNoWarnings():

            Genie.testbed = None
            with self.assertRaises(TypeError):
                bgp = Bgp()
            with self.assertRaises(TypeError):
                bgp = Bgp(testbed=testbed)
            Genie.testbed = testbed
            with self.assertRaises(TypeError):
                bgp = Bgp()
            bgp = Bgp(bgp_id=100)
            self.assertIs(bgp.testbed, testbed)
            Genie.testbed = testbed
            bgp = Bgp(bgp_id=100)
            self.assertIs(bgp.testbed, Genie.testbed)
            self.assertIs(bgp.testbed, testbed)

            # Defining attributes
            vrf_id = 'vrf1'
            vrf1 = Vrf(vrf_id)
            pp_name = 'PEER-POLICY'
            ps_name = 'PEER-SESSION'
            bgp.device_attr[dev2].peer_policy_attr[pp_name].pp_as_override =\
                True
            bgp.device_attr[dev2].peer_session_attr[ps_name].ps_remote_as=\
                12
            bgp.device_attr[dev2].vrf_attr[None].cluster_id = '150'
            af_name = 'ipv6 unicast'
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name]
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name].\
                af_client_to_client_reflection = True
            nbr_af_name = 'ipv6 unicast'
            neighbor_id2 = intf2.ipv6
            bgp.device_attr[dev2].vrf_attr[vrf1].neighbor_attr[neighbor_id2].\
                address_family_attr[nbr_af_name]
            bgp.device_attr[dev2].vrf_attr[vrf1].neighbor_attr[neighbor_id2].\
                address_family_attr[nbr_af_name].\
                nbr_af_maximum_prefix_max_prefix_no = 300000

            dev2.add_feature(bgp)
            cfgs = bgp.build_config(apply=False)
            self.assertCountEqual(cfgs.keys(), [dev2.name])
            self.maxDiff = None
            self.assertEqual(
                str(cfgs[dev2.name]), '\n'.join([
                    'router bgp 100',
                    ' bgp cluster-id 150',
                    ' address-family ipv6 unicast',
                    '  bgp client-to-client reflection',
                    '  exit',
                    ' address-family ipv6 unicast vrf vrf1',
                    '  neighbor 2001::1 activate',
                    '  neighbor 2001::1 maximum-prefix 300000',
                    '  exit',
                    ' template peer-session PEER-SESSION',
                    '  remote-as 12',
                    '  exit',
                    ' template peer-policy PEER-POLICY',
                    '  as-override',
                    '  exit',
                    ' exit',
                ]))
Ejemplo n.º 16
0
    def test_bgp_vrf_neighbor_attr(self):
        # For failures
        self.maxDiff = None

        # shorten the line
        dev1 = self.dev1

        # ===== none-default vrf =======
        # Bgp object
        bgp = Bgp(bgp_id=100)
        dev1.add_feature(bgp)
        nei = '10.1.1.1'
        nei6 = '10:1::1:1'

        bgp.device_attr[dev1].add_vrf(self.vrf1)
        bgp.device_attr[dev1].vrf_attr[self.vrf1].add_neighbor(nei)
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_fall_over_bfd = True
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_ebgp_multihop = True
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_ebgp_multihop_max_hop = 30
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_inherit_peer_session = 'PEERSESSION'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_local_as_as_no = 200
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_remote_as = 500
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_remove_private_as = True
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_remove_private_as_af_name = 'ipv4 unicast'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_shutdown = True
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_keepalive_interval = 15
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_holdtime = 300
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_update_source = 'GigabitEthernet0/0/0/1'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_password_text = 'somePassword'
        bgp.device_attr[dev1].vrf_attr[self.vrf1].neighbor_attr[nei].\
            nbr_transport_connection_mode = 'active'

        # Build config
        cfgs = bgp.build_config(apply=False)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'router bgp 100',
                ' vrf vrf1',
                '  neighbor 10.1.1.1',
                '   bfd fast-detect',
                '   remote-as 500',
                '   update-source GigabitEthernet0/0/0/1',
                '   ebgp-multihop 30',
                '   use session-group PEERSESSION',
                '   local-as 200',
                '   address-family ipv4 unicast remove-private-AS',
                '   shutdown',
                '   timers 15 300',
                '   password somePassword',
                '   session-open-mode active',
                '   exit',
                '  exit',
                ' exit',
                ]))
Ejemplo n.º 17
0
    def test_init(self):

        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='iosxe')
        intf1 = Interface(device=dev1,
                          name='GigabitEthernet0/0/1',
                          ipv4='10.1.0.1/24')
        intf2 = Interface(device=dev1,
                          name='GigabitEthernet0/0/2',
                          ipv4='10.2.0.1/24')
        dev2 = Device(testbed=testbed, name='PE2', os='iosxe')
        intf3 = Interface(device=dev2,
                          name='GigabitEthernet0/0/3',
                          ipv4='10.1.0.2/24')
        intf4 = Interface(device=dev2,
                          name='GigabitEthernet0/0/4',
                          ipv4='10.2.0.2/24')
        vrf1 = Vrf(name='vrf1')
        vrf2 = Vrf(name='a')

        with self.assertNoWarnings():

            Genie.testbed = None
            with self.assertRaises(TypeError):
                bgp = Bgp()
            with self.assertRaises(TypeError):
                bgp = Bgp(testbed=testbed)
            Genie.testbed = testbed
            with self.assertRaises(TypeError):
                bgp = Bgp()
            bgp = Bgp(asn=100)
            self.assertIs(bgp.testbed, testbed)
            Genie.testbed = testbed
            bgp = Bgp(asn=100)
            self.assertIs(bgp.testbed, Genie.testbed)
            self.assertIs(bgp.testbed, testbed)

            dev1.add_feature(bgp)

            cfgs = bgp.build_config(apply=False)
            self.assertCountEqual(cfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(
                str(cfgs[dev1.name]), '\n'.join([
                    'router bgp 100',
                    ' address-family ipv4 unicast',
                    '  exit',
                    ' exit',
                ]))

            dev2.add_feature(bgp)

            cfgs = bgp.build_config(apply=False)
            self.assertCountEqual(cfgs.keys(), [dev1.name, dev2.name])
            self.assertMultiLineEqual(
                str(cfgs[dev1.name]), '\n'.join([
                    'router bgp 100',
                    ' address-family ipv4 unicast',
                    '  exit',
                    ' exit',
                ]))
            self.assertMultiLineEqual(
                str(cfgs[dev2.name]), '\n'.join([
                    'router bgp 100',
                    ' address-family ipv4 unicast',
                    '  exit',
                    ' exit',
                ]))

            bgp.device_attr[dev1].add_neighbor(intf3.ipv4)
            bgp.device_attr[dev1].add_vrf(vrf1)
            bgp.device_attr[dev1].vrf_attr[vrf1].add_neighbor(intf4.ipv4)
            bgp.device_attr[dev1].vrf_attr[vrf1].neighbor_attr[intf4.ipv4].\
                address_family_attr['ipv4 unicast'].activate = True
            bgp.device_attr[dev1].add_vrf(vrf2)

            cfgs = bgp.build_config(apply=False)
            self.assertCountEqual(cfgs.keys(), [dev1.name, dev2.name])
            self.assertMultiLineEqual(
                str(cfgs[dev1.name]), '\n'.join([
                    'router bgp 100',
                    ' neighbor 10.1.0.2 remote-as 100',
                    ' address-family ipv4 unicast',
                    '  exit',
                    ' address-family ipv4 unicast vrf a',
                    '  exit',
                    ' neighbor 10.2.0.2 remote-as 100',
                    ' address-family ipv4 unicast vrf vrf1',
                    '  neighbor 10.2.0.2 activate',
                    '  exit',
                    ' address-family ipv4 unicast vrf vrf1',
                    '  exit',
                    ' exit',
                ]))
            self.assertMultiLineEqual(
                str(cfgs[dev2.name]), '\n'.join([
                    'router bgp 100',
                    ' address-family ipv4 unicast',
                    '  exit',
                    ' exit',
                ]))

            cfgs = bgp.build_config(
                apply=False, attributes='device_attr__PE1__vrf_attr__default')
            self.assertCountEqual(cfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(
                str(cfgs[dev1.name]), '\n'.join([
                    'router bgp 100',
                    ' neighbor 10.1.0.2 remote-as 100',
                    ' address-family ipv4 unicast',
                    '  exit',
                    ' exit',
                ]))

            cfgs = bgp.build_config(apply=False,
                                    attributes={
                                        'device_attr': {
                                            '*': (),
                                        },
                                    })
            self.assertCountEqual(cfgs.keys(), [dev1.name, dev2.name])
            self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.join([
                'router bgp 100',
                ' exit',
            ]))
            self.assertMultiLineEqual(str(cfgs[dev2.name]), '\n'.join([
                'router bgp 100',
                ' exit',
            ]))

            cfgs = bgp.build_config(apply=False,
                                    attributes={
                                        'device_attr': {
                                            'PE1': 'vrf_attr__default',
                                        },
                                    })
            self.assertCountEqual(cfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(
                str(cfgs[dev1.name]), '\n'.join([
                    'router bgp 100',
                    ' neighbor 10.1.0.2 remote-as 100',
                    ' address-family ipv4 unicast',
                    '  exit',
                    ' exit',
                ]))

            cfgs = bgp.build_config(
                apply=False,
                attributes={
                    'device_attr': {
                        'PE1': 'vrf_attr__default__neighbor_attr__10.1.0.2',
                    },
                })
            self.assertCountEqual(cfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(
                str(cfgs[dev1.name]), '\n'.join([
                    'router bgp 100',
                    ' neighbor 10.1.0.2 remote-as 100',
                    ' exit',
                ]))
Ejemplo n.º 18
0
    def test_cfg2(self):

        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='iosxe')
        intf1 = Interface(device=dev1,
                          name='Ethernet0/0/1',
                          ipv4='10.1.0.1/24')
        intf2 = Interface(device=dev1,
                          name='Ethernet0/0/2',
                          ipv4='10.2.0.1/24',
                          ipv6='2001::1')
        dev2 = Device(testbed=testbed, name='PE2', os='iosxe')
        intf3 = Interface(device=dev2,
                          name='Ethernet0/0/3',
                          ipv4='10.1.0.2/24',
                          ipv6='2001:111:222::/64')
        intf4 = Interface(device=dev2,
                          name='Ethernet0/0/4',
                          ipv4='10.2.0.2/24')

        with self.assertNoWarnings():

            Genie.testbed = None
            with self.assertRaises(TypeError):
                bgp = Bgp()
            with self.assertRaises(TypeError):
                bgp = Bgp(testbed=testbed)
            Genie.testbed = testbed
            with self.assertRaises(TypeError):
                bgp = Bgp()
            bgp = Bgp(bgp_id=100)
            self.assertIs(bgp.testbed, testbed)
            Genie.testbed = testbed
            bgp = Bgp(bgp_id=100)
            self.assertIs(bgp.testbed, Genie.testbed)
            self.assertIs(bgp.testbed, testbed)

            # Defining attributes
            vrf_id = 'vrf1'
            vrf1 = Vrf(vrf_id)
            pp_name = 'PEER-POLICY'
            ps_name = 'PEER-SESSION'
            bgp.device_attr[dev2].peer_policy_attr[pp_name].pp_allowas_in =\
                True
            bgp.device_attr[dev2].peer_session_attr[ps_name].ps_fall_over_bfd=\
                True
            bgp.device_attr[dev2].vrf_attr[None].cluster_id = '150'
            af_name = 'ipv6 unicast'
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name]
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name].\
                af_nexthop_route_map = 'test'
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name].\
                af_dampening = True
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name].\
                af_dampening_half_life_time = 1
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name].\
                af_dampening_reuse_time = 10
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name].\
                af_dampening_suppress_time = 30
            bgp.device_attr[dev2].vrf_attr[None].address_family_attr[af_name].\
                af_dampening_max_suppress_time = 2
            neighbor_id = intf2.ipv4
            bgp.device_attr[dev2].vrf_attr[vrf1].add_neighbor(neighbor_id)
            bgp.device_attr[dev2].vrf_attr[vrf1].neighbor_attr[neighbor_id].\
                nbr_suppress_four_byte_as_capability = True

            dev2.add_feature(bgp)
            cfgs = bgp.build_config(apply=False)
            self.assertCountEqual(cfgs.keys(), [dev2.name])
            self.maxDiff = None
            self.assertEqual(
                str(cfgs[dev2.name]), '\n'.join([
                    'router bgp 100',
                    ' bgp cluster-id 150',
                    ' address-family ipv6 unicast',
                    '  bgp dampening 1 10 30 2',
                    '  bgp nexthop route-map test',
                    '  exit',
                    ' address-family ipv4 unicast vrf vrf1',
                    '  neighbor 10.2.0.1 dont-capability-negotiate four-octets-as',
                    '  exit',
                    ' template peer-session PEER-SESSION',
                    '  fall-over bfd',
                    '  exit',
                    ' template peer-policy PEER-POLICY',
                    '  allowas-in',
                    '  exit',
                    ' exit',
                ]))
Ejemplo n.º 19
0
    def test_cfg(self):

        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='iosxe')
        intf1 = Interface(device=dev1,
                          name='Ethernet0/0/1',
                          ipv4='10.1.0.1/24')
        intf2 = Interface(device=dev1,
                          name='Ethernet0/0/2',
                          ipv4='10.2.0.1/24')
        dev2 = Device(testbed=testbed, name='PE2', os='iosxe')
        intf3 = Interface(device=dev2,
                          name='Ethernet0/0/3',
                          ipv4='10.1.0.2/24',
                          ipv6='2001:111:222::/64')
        intf4 = Interface(device=dev2,
                          name='Ethernet0/0/4',
                          ipv4='10.2.0.2/24')

        with self.assertNoWarnings():

            Genie.testbed = None
            with self.assertRaises(TypeError):
                bgp = Bgp()
            with self.assertRaises(TypeError):
                bgp = Bgp(testbed=testbed)
            Genie.testbed = testbed
            with self.assertRaises(TypeError):
                bgp = Bgp()
            bgp = Bgp(bgp_id=100)
            self.assertIs(bgp.testbed, testbed)
            Genie.testbed = testbed
            bgp = Bgp(bgp_id=100)
            self.assertIs(bgp.testbed, Genie.testbed)
            self.assertIs(bgp.testbed, testbed)

            # Defining attributes
            af_name = 'ipv4 unicast'
            af_name2 = 'link-state'
            bgp.device_attr[dev1]
            bgp.device_attr[dev1].vrf_attr[None].always_compare_med = True
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name]
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name2]
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name].\
                af_label_allocation_mode = 'per-vrf'
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name].\
                af_dampening = True
            neighbor_id = intf4.ipv4
            bgp.device_attr[dev1].vrf_attr[None].add_neighbor(neighbor_id)
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id]
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
                nbr_remote_as = 200
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
                nbr_fall_over_bfd = True
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
                nbr_shutdown = True
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
                nbr_update_source = 'loopback0'
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
                nbr_remove_private_as = True
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
                nbr_remove_private_as_af_name = 'ipv4 unicast'
            nbr_af_name = 'ipv4 multicast'
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
                address_family_attr[nbr_af_name]
            bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
                address_family_attr[nbr_af_name].nbr_af_allowas_in = True

            dev1.add_feature(bgp)

            cfgs = bgp.build_config(apply=False)
            self.assertCountEqual(cfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(
                str(cfgs[dev1.name]), '\n'.join([
                    'router bgp 100',
                    ' bgp always-compare-med',
                    ' neighbor 10.2.0.2 fall-over bfd',
                    ' neighbor 10.2.0.2 remote-as 200',
                    ' address-family ipv4 unicast',
                    '  neighbor 10.2.0.2 remove-private-as',
                    '  exit',
                    ' neighbor 10.2.0.2 shutdown',
                    ' neighbor 10.2.0.2 update-source loopback0',
                    ' address-family ipv4 multicast',
                    '  neighbor 10.2.0.2 activate',
                    '  neighbor 10.2.0.2 allowas-in',
                    '  exit',
                    ' address-family ipv4 unicast',
                    '  bgp dampening',
                    '  exit',
                    ' address-family link-state',
                    '  exit',
                    ' exit',
                    'mpls label mode vrf default protocol bgp-vpnv4 per-vrf',
                ]))
Ejemplo n.º 20
0
    def test_bgp_vrf_neighbor_family_attr(self):
        # For failures
        self.maxDiff = None

        # shorten the line
        dev1 = self.dev1

        # ===== none-default vrf =======
        # Bgp object
        bgp = Bgp(bgp_id=100)
        dev1.add_feature(bgp)
        nei = '10:1::1:1'
        af = 'ipv6 unicast'

        bgp.device_attr[dev1].add_vrf(self.vrf2)
        bgp.device_attr[dev1].vrf_attr[self.vrf2].address_family_attr[af]
        bgp.device_attr[dev1].vrf_attr[self.vrf2].add_neighbor(nei)
        bgp.device_attr[dev1].vrf_attr[self.vrf2].neighbor_attr[nei].\
            nbr_remote_as = 100
        bgp.device_attr[dev1].vrf_attr[self.vrf2].neighbor_attr[nei].\
            address_family_attr[af]
        bgp.device_attr[dev1].vrf_attr[self.vrf2].neighbor_attr[nei].\
            address_family_attr[af].nbr_af_allowas_in = True
        bgp.device_attr[dev1].vrf_attr[self.vrf2].neighbor_attr[nei].\
            address_family_attr[af].nbr_af_inherit_peer_policy = 'policy-test'
        bgp.device_attr[dev1].vrf_attr[self.vrf2].neighbor_attr[nei].\
            address_family_attr[af].nbr_af_maximum_prefix_max_prefix_no = 666
        bgp.device_attr[dev1].vrf_attr[self.vrf2].neighbor_attr[nei].\
            address_family_attr[af].nbr_af_maximum_prefix_warning_only = True
        bgp.device_attr[dev1].vrf_attr[self.vrf2].neighbor_attr[nei].\
            address_family_attr[af].nbr_af_route_map_name_in = 'nei-af-in'
        bgp.device_attr[dev1].vrf_attr[self.vrf2].neighbor_attr[nei].\
            address_family_attr[af].nbr_af_route_reflector_client = True
        bgp.device_attr[dev1].vrf_attr[self.vrf2].neighbor_attr[nei].\
            address_family_attr[af].nbr_af_next_hop_self = True
        bgp.device_attr[dev1].vrf_attr[self.vrf2].neighbor_attr[nei].\
            address_family_attr[af].nbr_af_default_originate = True

        # Build config
        cfgs = bgp.build_config(apply=False)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'router bgp 100',
                ' address-family ipv6 unicast',
                '  exit',
                ' neighbor 10:1::1:1',
                '  remote-as 100',
                '  address-family ipv6 unicast',
                '   allowas-in',
                '   use af-group policy-test',
                '   maximum-prefix 666 warning-only',
                '   route-policy nei-af-in in',
                '   route-reflector-client',
                '   next-hop-self',
                '   default-originate',
                '   exit',
                '  exit',
                ' exit',
                ]))
Ejemplo n.º 21
0
    def test_bgp_device_attr(self):
        # For failures
        self.maxDiff = None

        # shorten the line
        dev1 = self.dev1

        # ===== no instance =======
        # Bgp object
        bgp = Bgp(bgp_id=100)
        dev1.add_feature(bgp)
        # Build config
        cfgs = bgp.build_config(apply=False)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'router bgp 100',
                ' exit',
                ]))
        # ===== with instance =======
        # Bgp object
        bgp = Bgp(bgp_id=100)
        dev1.add_feature(bgp)
        bgp.device_attr[dev1].instance_name = 'test'
        # Build config
        cfgs = bgp.build_config(apply=False)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'router bgp 100 instance test',
                ' exit',
                ]))

        # ===== with different instances =======
        # Bgp object
        bgp1 = Bgp(bgp_id=100, instance_name='test1')
        dev1.add_feature(bgp1)
        # Bgp object
        bgp2 = Bgp(bgp_id=100, instance_name='test2')
        dev1.add_feature(bgp2)
        # Bgp object
        bgp3 = Bgp(bgp_id=100, instance_name='test3')
        dev1.add_feature(bgp3)
        # Build config
        cfg1 = bgp1.build_config(apply=False)
        cfg2 = bgp2.build_config(apply=False)
        cfg3 = bgp3.build_config(apply=False)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfg1[dev1.name]), '\n'.\
            join([
                'router bgp 100 instance test1',
                ' exit',
                ]))

        # Check config built correctly
        self.assertMultiLineEqual(str(cfg2[dev1.name]), '\n'.\
            join([
                'router bgp 100 instance test2',
                ' exit',
                ]))

        # Check config built correctly
        self.assertMultiLineEqual(str(cfg3[dev1.name]), '\n'.\
            join([
                'router bgp 100 instance test3',
                ' exit',
                ]))

        # Build unconfig
        cfg1 = bgp1.build_unconfig(apply=False)
        cfg2 = bgp2.build_unconfig(apply=False)
        cfg3 = bgp3.build_unconfig(apply=False)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfg1[dev1.name]), '\n'.\
            join([
                'no router bgp 100 instance test1',
                ]))

        # Check config built correctly
        self.assertMultiLineEqual(str(cfg2[dev1.name]), '\n'.\
            join([
                'no router bgp 100 instance test2',
                ]))

        # Check config built correctly
        self.assertMultiLineEqual(str(cfg3[dev1.name]), '\n'.\
            join([
                'no router bgp 100 instance test3',
                ]))
Ejemplo n.º 22
0
    def test_uncfg(self):

        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='nxos')
        intf1 = Interface(device=dev1, name='Ethernet0/0/1',
                          ipv4='10.1.0.1/24')
        intf2 = Interface(device=dev1, name='Ethernet0/0/2',
                          ipv4='10.2.0.1/24')
        dev2 = Device(testbed=testbed, name='PE2', os='nxos')
        intf3 = Interface(device=dev2, name='Ethernet0/0/3',
                          ipv4='10.1.0.2/24', ipv6='2001:111:222::/64')
        intf4 = Interface(device=dev2, name='Ethernet0/0/4',
                          ipv4='10.2.0.2/24')

        with self.assertNoWarnings():

            Genie.testbed = None
            with self.assertRaises(TypeError):
                bgp = Bgp()
            with self.assertRaises(TypeError):
                bgp = Bgp(testbed=testbed)
            Genie.testbed = testbed
            with self.assertRaises(TypeError):
                bgp = Bgp()
            bgp = Bgp(asn=100,bgp_id=100)
            self.assertIs(bgp.testbed, testbed)
            Genie.testbed = testbed
            bgp = Bgp(asn=100,bgp_id=100)
            self.assertIs(bgp.testbed, Genie.testbed)
            self.assertIs(bgp.testbed, testbed)

            dev1.add_feature(bgp)

            bgp.device_attr[dev1].enabled = True
            uncfgs = bgp.build_unconfig(apply=False)
            self.assertCountEqual(uncfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(str(uncfgs[dev1.name]), '\n'.join([
                'no feature bgp',
                    ]))

            # Defining attributes
            af_name = 'vpnv4 unicast'
            af_name2 = 'link-state'
            vrf_id = 'vrf1'
            vrf1 = Vrf(vrf_id)
            bgp.device_attr[dev1]
            bgp.device_attr[dev1].vrf_attr[None].always_compare_med = True
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name]
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name2]
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name].\
                af_retain_rt_all = True
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name].\
                af_dampening = True
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name].\
                af_dampening_half_life_time = 1
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name].\
                af_dampening_reuse_time = 10
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name].\
                af_dampening_suppress_time = 30
            bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name].\
                af_dampening_max_suppress_time = 2
            neighbor_id = intf4.ipv4
            bgp.device_attr[dev1].vrf_attr[vrf1].add_neighbor(neighbor_id)
            bgp.device_attr[dev1].vrf_attr[vrf1].neighbor_attr[neighbor_id]
            bgp.device_attr[dev1].vrf_attr[vrf1].neighbor_attr[neighbor_id].\
                nbr_fall_over_bfd = True
            nbr_af_name = 'ipv4 unicast'
            bgp.device_attr[dev1].vrf_attr[vrf1].neighbor_attr[neighbor_id].\
                address_family_attr[nbr_af_name]
            bgp.device_attr[dev1].vrf_attr[vrf1].neighbor_attr[neighbor_id].\
                address_family_attr[nbr_af_name].nbr_af_allowas_in = True


            partial_uncfg1 = bgp.build_unconfig(
                                apply=False,
                                attributes={'device_attr':\
                                           {'*':{'vrf_attr':\
                                           {'*':"always_compare_med"}}}})
            self.assertCountEqual(partial_uncfg1.keys(), [dev1.name])
            self.assertMultiLineEqual(str(partial_uncfg1[dev1.name]), '\n'.\
                join([
                'router bgp 100',
                ' no bestpath always-compare-med',
                ' exit',
                    ]))

            partial_uncfg2 = bgp.build_unconfig(\
                                apply=False,
                                attributes={'device_attr':\
                                           {'*':{'vrf_attr':'*'}}})
            self.assertCountEqual(partial_uncfg2.keys(), [dev1.name])
            self.assertMultiLineEqual(str(partial_uncfg2[dev1.name]), '\n'.\
                join([
                'router bgp 100',
                ' no bestpath always-compare-med',
                ' no address-family link-state',
                ' no address-family vpnv4 unicast',
                ' no vrf vrf1',
                ' exit',
                    ]))

            partial_uncfg3 = bgp.build_unconfig(
                                apply=False,
                                attributes={'device_attr': {'*': {'vrf_attr':
                                    {'*': {'neighbor_attr':\
                                    {'*': {'address_family_attr':\
                                    {'*':"nbr_af_allowas_in"}}}}}}}})
            self.assertCountEqual(partial_uncfg3.keys(), [dev1.name])
            self.assertMultiLineEqual(str(partial_uncfg3[dev1.name]), '\n'.\
                join([
                'router bgp 100',
                ' vrf vrf1',
                '  neighbor 10.2.0.2',
                '   address-family ipv4 unicast',
                '    no allowas-in',
                '    exit',
                '   exit',
                '  exit',
                ' exit',
                    ]))

            bgp.device_attr[dev1].protocol_shutdown = True
            partial_uncfg4 = bgp.build_unconfig(
                                apply=False,
                                attributes={'device_attr':\
                                           {'*':"protocol_shutdown"}})
            self.assertCountEqual(partial_uncfg4.keys(), [dev1.name])
            self.assertMultiLineEqual(str(partial_uncfg4[dev1.name]), '\n'.\
                join([
                'router bgp 100',
                ' no shutdown',
                ' exit',
                    ]))

            partial_uncfg5 = bgp.build_unconfig(\
                                apply=False,
                                attributes={'device_attr':\
                                            {'*':\
                                                {'vrf_attr':\
                                                    {'*':\
                                                        {'address_family_attr':\
                                                            {'*':\
                                                            "af_dampening"}}}}}})
            self.assertCountEqual(partial_uncfg5.keys(), [dev1.name])
            self.assertMultiLineEqual(str(partial_uncfg5[dev1.name]), '\n'.\
                join([
                'router bgp 100',
                ' address-family vpnv4 unicast',
                '  no dampening',
                '  exit',
                ' exit',
                    ]))

            bgp.device_attr[dev1].enabled = False
            uncfgs = bgp.build_unconfig(apply=False)
            self.assertCountEqual(uncfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(str(uncfgs[dev1.name]), '\n'.join([
                'no router bgp 100',
                    ]))

            bgp.device_attr[dev1].enabled = True
            uncfgs = bgp.build_unconfig(apply=False)
            self.assertCountEqual(uncfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(str(uncfgs[dev1.name]), '\n'.join([
                'no feature bgp',
                    ]))
Ejemplo n.º 23
0
    def test_bgp_with_attributes(self):
        # For failures
        self.maxDiff = None

        # shorten the line
        dev1 = self.dev1

        # ===== no instance =======
        # Bgp object
        bgp = Bgp(bgp_id=100)
        dev1.add_feature(bgp)
        bgp.device_attr[dev1].vrf_attr[self.vrf1]
        attributes = {'device_attr': {dev1: {'vrf_attr': {self.vrf1: None}}}}
        # Build config
        cfgs = bgp.build_unconfig(apply=False, attributes=attributes)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'router bgp 100',
                ' no vrf vrf1',
                ' exit',
                ]))

        # ===== instance =======
        # Bgp object
        bgp = Bgp(bgp_id=100, instance_name='test')
        dev1.add_feature(bgp)
        bgp.device_attr[dev1].vrf_attr[self.vrf1]
        bgp.device_attr[dev1].instance_name = 'test'
        attributes = {'device_attr': {dev1: {'vrf_attr': {self.vrf1: None}}}}
        # Build config
        cfgs = bgp.build_unconfig(apply=False, attributes=attributes)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'router bgp 100 instance test',
                ' no vrf vrf1',
                ' exit',
                ]))

        # ===== instance as attribute =======
        # Bgp object
        bgp = Bgp(bgp_id=100)
        dev1.add_feature(bgp)
        bgp.device_attr[dev1].instance_name = 'test'
        attributes = {'device_attr': {dev1: {'instance_name': {'test': None}}}}
        # Build config
        cfgs = bgp.build_unconfig(apply=False, attributes=attributes)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'no router bgp 100 instance test',
                ]))

        # ===== instance as attribute =======
        # Bgp object
        bgp = Bgp(bgp_id=100, instance='test')
        dev1.add_feature(bgp)
        bgp.device_attr[dev1].instance_name = 'test'
        attributes = {'device_attr': {dev1: {'instance_name': {'test': None}}}}
        # Build config
        cfgs = bgp.build_unconfig(apply=False, attributes=attributes)

        # Check config built correctly
        self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.\
            join([
                'no router bgp 100 instance test',
                ]))
Ejemplo n.º 24
0
    def test_learn_config(self):

        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='nxos')
        dev1.custom = {'abstraction':{'order':['os'], 'context':'cli'}}
        dev2 = Device(testbed=testbed, name='PE2', os='nxos')

        golden_output = {'return_value': '''
            pinxdt-n9kv-3# show run bgp

            !Command: show running-config bgp
            !Time: Wed Jun 28 06:23:27 2017

            version 7.0(3)I7(1)
            feature bgp

            router bgp 333
              dynamic-med-interval 70
              shutdown
              cluster-id 3
              no graceful-restart
              flush-routes
              isolate
              disable-policy-batching ipv4 prefix-list s
              no enforce-first-as
              event-history objstore size large
              address-family ipv4 multicast
                dampening 1 10 30 2
                redistribute static route-map PERMIT_ALL_RM
              address-family ipv6 multicast
                dampening 1 10 30 2
                redistribute static route-map PERMIT_ALL_RM
              address-family ipv6 unicast
                dampening 1 10 30 2
                redistribute static route-map PERMIT_ALL_RM
                inject-map ORIGINATE_IPV6 exist-map INJECTED_IPV6 copy-attributes
                nexthop route-map test
              address-family vpnv4 unicast
                dampening route-map PASS-ALL
                nexthop trigger-delay critical 4 non-critical 5
              address-family vpnv6 unicast
                dampening 1 10 30 2
              address-family ipv4 labeled-unicast
              template peer-session PEER-SESSION
                ebgp-multihop 3
              neighbor fec1::1002
                remote-as 333
                address-family ipv4 unicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
              neighbor fec1::2002
                remote-as 888
                address-family ipv4 unicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                address-family ipv6 multicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                address-family ipv6 unicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
              neighbor 4.4.4.4
                capability suppress 4-byte-as
                address-family vpnv6 unicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                  maximum-prefix 300000
              neighbor 21.0.101.1
                remote-as 333
                address-family ipv4 multicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family ipv4 unicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family ipv6 multicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family ipv6 unicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family vpnv4 unicast
                  send-community
                  send-community extended
                  route-reflector-client
                address-family vpnv6 unicast
                  send-community
                  send-community extended
                  route-reflector-client
              neighbor 21.0.102.1
                remote-as 333
                update-source loopback0
                address-family ipv4 multicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family ipv4 unicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family ipv6 multicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family ipv6 unicast
                  send-community
                  send-community extended
                  route-reflector-client
                  soft-reconfiguration inbound always
                address-family vpnv4 unicast
                  send-community
                  send-community extended
                address-family vpnv6 unicast
                  send-community
                  send-community extended
                  route-reflector-client
              neighbor 21.0.201.1
                remote-as 888
                address-family ipv4 multicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                address-family ipv4 unicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                address-family ipv6 multicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                address-family ipv6 unicast
                  send-community
                  send-community extended
                  soft-reconfiguration inbound always
                address-family vpnv4 unicast
                  send-community
                  send-community extended
                address-family vpnv6 unicast
                  send-community
                  send-community extended
              vrf ac
                bestpath always-compare-med
                address-family ipv4 unicast
                neighbor 2.2.2.2
                  bfd
                  local-as 222
                  description ja
                  remove-private-as
                  disable-connected-check
                  capability suppress 4-byte-as
                  address-family ipv4 unicast
                    allowas-in 3
                    send-community
                    send-community extended
                    maximum-prefix 2
              vrf management
                neighbor 5.5.5.5
                  password 3 386c0565965f89de
              vrf vpn1
                address-family ipv4 multicast
                  redistribute static route-map PERMIT_ALL_RM
                address-family ipv4 unicast
                  dampening 1 10 30 2
                  redistribute static route-map PERMIT_ALL_RM
                address-family ipv6 multicast
                  dampening 1 10 30 2
                  redistribute static route-map PERMIT_ALL_RM
                address-family ipv6 unicast
                  dampening 1 10 30 2
                  redistribute static route-map PERMIT_ALL_RM
            vrf context vpn1
              rd 1:100
              address-family ipv4 unicast
                route-target import 100:1
                route-target export 100:1
                route-target export 400:400
                export map PERMIT_ALL_RM
                import map PERMIT_ALL_RM
                import vrf default map PERMIT_ALL_RM
                export vrf default map PERMIT_ALL_RM
              address-family ipv6 unicast
                route-target import 1:100
                route-target export 1:100
                route-target export 600:600
                export map PERMIT_ALL_RM
                import map PERMIT_ALL_RM
                import vrf default map PERMIT_ALL_RM
                export vrf default map PERMIT_ALL_RM
            vrf context vpn2
              rd 2:100
              address-family ipv4 unicast
                route-target import 400:400
              address-family ipv6 unicast
                route-target import 600:600
        '''}

        bgp = Bgp(asn=333, bgp_id=333)

        dev1.execute = Mock(**golden_output)

        bgp.device_attr[dev1]
        bgp.device_attr[dev1].enabled = True
        bgp.device_attr[dev1].vrf_attr[None].cluster_id = '3'

        af_name = 'ipv6 unicast'
        bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name]
        bgp.device_attr[dev1].vrf_attr[None].address_family_attr[af_name].\
            af_nexthop_route_map = 'test'
        neighbor_id = '4.4.4.4'
        bgp.device_attr[dev1].vrf_attr[None].add_neighbor(neighbor_id)
        bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
            nbr_suppress_four_byte_as_capability = True
        nbr_af_name = 'vpnv6 unicast'
        bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
            address_family_attr[nbr_af_name]
        bgp.device_attr[dev1].vrf_attr[None].neighbor_attr[neighbor_id].\
            address_family_attr[nbr_af_name].\
            nbr_af_maximum_prefix_max_prefix_no = 300000

        cfgs = bgp.build_config(apply=False)

        # List of BGP conf objects representing the different instances
        # For NXOS, it is only one.
        learn = Bgp.learn_config(device=dev1)

        # Testing cluster_id
        self.assertEqual(learn[0].device_attr[dev1].vrf_attr['default'].\
            cluster_id,bgp.device_attr[dev1].vrf_attr['default'].cluster_id)

        # Testing af_nexthop_route_map
        self.assertEqual(learn[0].device_attr[dev1].vrf_attr['default'].\
            address_family_attr['ipv6 unicast'].af_nexthop_route_map,
            bgp.device_attr[dev1].vrf_attr['default'].address_family_attr\
            ['ipv6 unicast'].af_nexthop_route_map)

        # Testing nbr_suppress_four_byte_as_capability
        self.assertEqual(learn[0].device_attr[dev1].vrf_attr['default'].\
            neighbor_attr['4.4.4.4'].nbr_suppress_four_byte_as_capability,
            bgp.device_attr[dev1].vrf_attr['default'].neighbor_attr['4.4.4.4']\
            .nbr_suppress_four_byte_as_capability)

        # Testing nbr_af_maximum_prefix_max_prefix_no
        self.assertEqual(learn[0].device_attr[dev1].vrf_attr['default'].\
            neighbor_attr['4.4.4.4'].address_family_attr[nbr_af_name].\
            nbr_af_maximum_prefix_max_prefix_no, bgp.device_attr[dev1].\
            vrf_attr['default'].neighbor_attr['4.4.4.4'].address_family_attr\
            [nbr_af_name].nbr_af_maximum_prefix_max_prefix_no)
Ejemplo n.º 25
0
    def test_init(self):

        Genie.testbed = testbed = Testbed()
        dev1 = Device(testbed=testbed, name='PE1', os='iosxr')
        intf1 = Interface(device=dev1,
                          name='GigabitEthernet0/0/0/1',
                          ipv4='10.1.0.1/24')
        intf2 = Interface(device=dev1,
                          name='GigabitEthernet0/0/0/2',
                          ipv4='10.2.0.1/24')
        dev2 = Device(testbed=testbed, name='PE2', os='iosxr')
        intf3 = Interface(device=dev2,
                          name='GigabitEthernet0/0/0/3',
                          ipv4='10.1.0.2/24')
        intf4 = Interface(device=dev2,
                          name='GigabitEthernet0/0/0/4',
                          ipv4='10.2.0.2/24')
        vrf1 = Vrf(name='vrf1')
        vrf2 = Vrf(name='a')  # must be < 'default'

        with self.assertNoWarnings():

            Genie.testbed = None
            with self.assertRaises(TypeError):
                bgp = Bgp()
            with self.assertRaises(TypeError):
                bgp = Bgp(testbed=testbed)
            Genie.testbed = testbed
            with self.assertRaises(TypeError):
                bgp = Bgp()
            bgp = Bgp(asn=100)
            self.assertIs(bgp.testbed, testbed)
            Genie.testbed = testbed
            bgp = Bgp(asn=100)
            self.assertIs(bgp.testbed, Genie.testbed)
            self.assertIs(bgp.testbed, testbed)

            dev1.add_feature(bgp)

            cfgs = bgp.build_config(apply=False)
            self.assertCountEqual(cfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.join([
                'router bgp 100',
                ' exit',
            ]))

            dev2.add_feature(bgp)

            cfgs = bgp.build_config(apply=False)
            self.assertCountEqual(cfgs.keys(), [dev1.name, dev2.name])
            self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.join([
                'router bgp 100',
                ' exit',
            ]))
            self.assertMultiLineEqual(str(cfgs[dev2.name]), '\n'.join([
                'router bgp 100',
                ' exit',
            ]))

            ospf1 = Ospf(pid=1)
            isis1 = Isis(pid=1)
            rtepol1 = RoutePolicy(name='rtepol1')
            bgp.redistributes = (
                'connected',
                Redistribution(ospf1, metric=20),
                Redistribution(isis1, route_policy=rtepol1),
            )
            bgp.device_attr[dev1].address_family_attr['ipv4 unicast']
            bgp.device_attr[dev2].address_family_attr['ipv4 unicast']

            cfgs = bgp.build_config(apply=False)
            self.assertCountEqual(cfgs.keys(), [dev1.name, dev2.name])
            self.assertMultiLineEqual(
                str(cfgs[dev1.name]), '\n'.join([
                    'router bgp 100',
                    ' address-family ipv4 unicast',
                    '  redistribute connected',
                    '  redistribute ospf 1 metric 20',
                    '  redistribute isis 1 route-policy rtepol1',
                    '  exit',
                    ' exit',
                ]))
            self.assertMultiLineEqual(
                str(cfgs[dev2.name]), '\n'.join([
                    'router bgp 100',
                    ' address-family ipv4 unicast',
                    '  redistribute connected',
                    '  redistribute ospf 1 metric 20',
                    '  redistribute isis 1 route-policy rtepol1',
                    '  exit',
                    ' exit',
                ]))

            del bgp.redistributes

            bgp.device_attr[dev1].add_neighbor(intf3.ipv4)
            bgp.device_attr[dev1].neighbor_attr[intf3.ipv4].\
                address_family_attr['ipv4 unicast']
            bgp.device_attr[dev1].add_vrf(vrf1)
            bgp.device_attr[dev1].vrf_attr[vrf1].address_family_attr[
                'ipv4 unicast']
            bgp.device_attr[dev1].vrf_attr[vrf1].add_neighbor(intf4.ipv4)
            bgp.device_attr[dev1].vrf_attr[vrf1].neighbor_attr[intf4.ipv4].\
                address_family_attr['ipv4 unicast']
            bgp.device_attr[dev1].add_vrf(vrf2)
            bgp.device_attr[dev1].vrf_attr[vrf2].address_family_attr[
                'ipv4 unicast']

            cfgs = bgp.build_config(apply=False)
            self.assertCountEqual(cfgs.keys(), [dev1.name, dev2.name])
            self.assertMultiLineEqual(
                str(cfgs[dev1.name]), '\n'.join([
                    'router bgp 100',
                    ' address-family ipv4 unicast',
                    '  exit',
                    ' neighbor 10.1.0.2',
                    '  remote-as 100',
                    '  address-family ipv4 unicast',
                    '   exit',
                    '  exit',
                    ' vrf a',
                    '  address-family ipv4 unicast',
                    '   exit',
                    '  exit',
                    ' vrf vrf1',
                    '  address-family ipv4 unicast',
                    '   exit',
                    '  neighbor 10.2.0.2',
                    '   remote-as 100',
                    '   address-family ipv4 unicast',
                    '    exit',
                    '   exit',
                    '  exit',
                    ' exit',
                ]))
            self.assertMultiLineEqual(
                str(cfgs[dev2.name]), '\n'.join([
                    'router bgp 100',
                    ' address-family ipv4 unicast',
                    '  exit',
                    ' exit',
                ]))

            cfgs = bgp.build_config(
                apply=False, attributes='device_attr__PE1__vrf_attr__default')
            self.assertCountEqual(cfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(
                str(cfgs[dev1.name]), '\n'.join([
                    'router bgp 100',
                    ' address-family ipv4 unicast',
                    '  exit',
                    ' neighbor 10.1.0.2',
                    '  remote-as 100',
                    '  address-family ipv4 unicast',
                    '   exit',
                    '  exit',
                    ' exit',
                ]))

            cfgs = bgp.build_config(apply=False,
                                    attributes={
                                        'device_attr': {
                                            '*': (),
                                        },
                                    })
            self.assertCountEqual(cfgs.keys(), [dev1.name, dev2.name])
            self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.join([
                'router bgp 100',
                ' exit',
            ]))
            self.assertMultiLineEqual(str(cfgs[dev2.name]), '\n'.join([
                'router bgp 100',
                ' exit',
            ]))

            cfgs = bgp.build_config(apply=False,
                                    attributes={
                                        'device_attr': {
                                            'PE1': 'vrf_attr__default',
                                        },
                                    })
            self.assertCountEqual(cfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(
                str(cfgs[dev1.name]), '\n'.join([
                    'router bgp 100',
                    ' address-family ipv4 unicast',
                    '  exit',
                    ' neighbor 10.1.0.2',
                    '  remote-as 100',
                    '  address-family ipv4 unicast',
                    '   exit',
                    '  exit',
                    ' exit',
                ]))

            cfgs = bgp.build_config(
                apply=False,
                attributes={
                    'device_attr': {
                        'PE1': 'vrf_attr__default__neighbor_attr__10.1.0.2',
                    },
                })
            self.assertCountEqual(cfgs.keys(), [dev1.name])
            self.assertMultiLineEqual(
                str(cfgs[dev1.name]), '\n'.join([
                    'router bgp 100',
                    ' neighbor 10.1.0.2',
                    '  remote-as 100',
                    '  address-family ipv4 unicast',
                    '   exit',
                    '  exit',
                    ' exit',
                ]))