Example #1
0
    def config_nat(self, nat_obj, mode='config'):

        if mode == 'config':
            self.nat_config = nat_obj  # save the latest nat config for future removal purposes

        cache = CCommandCache()
        conf_t_command_set = []
        client_net = nat_obj.clients_net_start
        pool_net = nat_obj.nat_pool_start
        unconfig_str = '' if mode == 'config' else 'no '

        # toggle all duplicate interfaces
        # dup_ifs = self.if_mngr.get_duplicated_if()
        if mode == 'config':
            self.toggle_duplicated_intf(action='down')
            # self.__toggle_interfaces(dup_ifs, action = 'down' )
        else:
            # if we're in 'unconfig', toggle duplicated interfaces back up
            self.toggle_duplicated_intf(action='up')
            # self.__toggle_interfaces(dup_ifs)

        for dual_if in self.if_mngr.get_dual_if_list(is_duplicated=False):
            cache.add('IF', "{mode}ip nat inside".format(mode=unconfig_str),
                      dual_if.client_if.get_name())
            cache.add('IF', "{mode}ip nat outside".format(mode=unconfig_str),
                      dual_if.server_if.get_name())
            pool_id = dual_if.get_id() + 1

            conf_t_command_set.append(
                "{mode}ip nat pool pool{pool_num} {start_addr} {end_addr} netmask {mask}"
                .format(mode=unconfig_str,
                        pool_num=pool_id,
                        start_addr=pool_net,
                        end_addr=CNatConfig.calc_pool_end(
                            pool_net, nat_obj.nat_netmask),
                        mask=nat_obj.nat_netmask))

            conf_t_command_set.append(
                "{mode}ip nat inside source list {num} pool pool{pool_num} overload"
                .format(mode=unconfig_str, num=pool_id, pool_num=pool_id))
            conf_t_command_set.append(
                "{mode}access-list {num} permit {net_addr} {net_wildcard}".
                format(mode=unconfig_str,
                       num=pool_id,
                       net_addr=client_net,
                       net_wildcard=nat_obj.client_acl_wildcard))

            # bump up to the next client address
            client_net = misc_methods.get_single_net_client_addr(
                client_net, nat_obj.net_increment)
            pool_net = misc_methods.get_single_net_client_addr(
                pool_net, nat_obj.net_increment)

        # assign generated config list to cache
        cache.add('CONF', conf_t_command_set)

        # deploy the configs (order is important!)
        return self.cmd_link.run_single_command(cache)
Example #2
0
    def config_nat(self, nat_obj, mode="config"):

        if mode == "config":
            self.nat_config = nat_obj  # save the latest nat config for future removal purposes

        cache = CCommandCache()
        conf_t_command_set = []
        client_net = nat_obj.clients_net_start
        pool_net = nat_obj.nat_pool_start
        unconfig_str = "" if mode == "config" else "no "

        # toggle all duplicate interfaces
        # dup_ifs = self.if_mngr.get_duplicated_if()
        if mode == "config":
            self.toggle_duplicated_intf(action="down")
            # self.__toggle_interfaces(dup_ifs, action = 'down' )
        else:
            # if we're in 'unconfig', toggle duplicated interfaces back up
            self.toggle_duplicated_intf(action="up")
            # self.__toggle_interfaces(dup_ifs)

        for dual_if in self.if_mngr.get_dual_if_list(is_duplicated=False):
            cache.add("IF", "{mode}ip nat inside".format(mode=unconfig_str), dual_if.client_if.get_name())
            cache.add("IF", "{mode}ip nat outside".format(mode=unconfig_str), dual_if.server_if.get_name())
            pool_id = dual_if.get_id() + 1

            conf_t_command_set.append(
                "{mode}ip nat pool pool{pool_num} {start_addr} {end_addr} netmask {mask}".format(
                    mode=unconfig_str,
                    pool_num=pool_id,
                    start_addr=pool_net,
                    end_addr=CNatConfig.calc_pool_end(pool_net, nat_obj.nat_netmask),
                    mask=nat_obj.nat_netmask,
                )
            )

            conf_t_command_set.append(
                "{mode}ip nat inside source list {num} pool pool{pool_num} overload".format(
                    mode=unconfig_str, num=pool_id, pool_num=pool_id
                )
            )
            conf_t_command_set.append(
                "{mode}access-list {num} permit {net_addr} {net_wildcard}".format(
                    mode=unconfig_str, num=pool_id, net_addr=client_net, net_wildcard=nat_obj.client_acl_wildcard
                )
            )

            # bump up to the next client address
            client_net = misc_methods.get_single_net_client_addr(client_net, nat_obj.net_increment)
            pool_net = misc_methods.get_single_net_client_addr(pool_net, nat_obj.net_increment)

        # assign generated config list to cache
        cache.add("CONF", conf_t_command_set)

        # deploy the configs (order is important!)
        self.cmd_link.run_single_command(cache)
 def test_get_ipv6_client_addr(self):
     tmp_ipv6_addr = next(self.ipv6_gen)
     assert_equal(
         misc_methods.get_single_net_client_addr(tmp_ipv6_addr, {'7': 1},
                                                 ip_type='ipv6'),
         '2001:DB8:0:2222:0:0:0:1')
     assert_equal(
         misc_methods.get_single_net_client_addr(tmp_ipv6_addr, {'7': 2},
                                                 ip_type='ipv6'),
         '2001:DB8:0:2222:0:0:0:2')
     assert_raises(ValueError, misc_methods.get_single_net_client_addr,
                   tmp_ipv6_addr, {'7': 70000})
    def config_static_routing (self, stat_route_obj, mode = 'config'):

        if mode == 'config':
            self.stat_route_config = stat_route_obj   # save the latest static route config for future removal purposes

        unconfig_str = '' if mode=='config' else 'no '
        cache              = CCommandCache()
        pre_commit_cache   = CCommandCache()
        pre_commit_set     = set([])
        current_dup_intf   = None
        # client_net       = None
        # server_net       = None
        client_net         = stat_route_obj.client_net_start
        server_net         = stat_route_obj.server_net_start
        conf_t_command_set = []

        for dual_if in self.if_mngr.get_dual_if_list():

            # handle duplicated addressing generation
            if dual_if.is_duplicated():
                if dual_if.get_vrf_name() != current_dup_intf:
                    # if this is a dual interfaces, and it is different from the one we proccessed so far, reset static route addressing
                    current_dup_intf = dual_if.get_vrf_name()
                    client_net       = stat_route_obj.client_net_start
                    server_net       = stat_route_obj.server_net_start
            else:
                if current_dup_intf is not None:
                    current_dup_intf = None
                    client_net       = stat_route_obj.client_net_start
                    server_net       = stat_route_obj.server_net_start

            client_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv4_addr() )
            server_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv4_addr() )

            # handle static route configuration for the interfaces
            if dual_if.is_duplicated():
                client_if_command_set   = []
                server_if_command_set   = []

                # define the relevant VRF name
                pre_commit_set.add('{mode}ip vrf {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) )

                # assign VRF to interfaces, config interfaces with relevant route-map
                client_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) )
                server_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) )

                conf_t_command_set.append( "{mode}ip route vrf {dup} {next_net} {dest_mask} {next_hop}".format(
                    mode = unconfig_str,
                    dup = dual_if.get_vrf_name(), 
                    next_net = client_net,
                    dest_mask = stat_route_obj.client_mask,
                    next_hop = client_net_next_hop))
                conf_t_command_set.append( "{mode}ip route vrf {dup} {next_net} {dest_mask} {next_hop}".format(
                    mode = unconfig_str,
                    dup = dual_if.get_vrf_name(), 
                    next_net = server_net,
                    dest_mask = stat_route_obj.server_mask,
                    next_hop = server_net_next_hop))

                # config global arp to interfaces net address and vrf
                if dual_if.client_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        dup = dual_if.get_vrf_name(), 
                        next_hop = server_net_next_hop, 
                        dest_mac = dual_if.client_if.get_dest_mac()))
                if dual_if.server_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str, 
                        dup = dual_if.get_vrf_name(), 
                        next_hop = client_net_next_hop, 
                        dest_mac = dual_if.server_if.get_dest_mac()))

                # assign generated interfaces config list to cache
                cache.add('IF', server_if_command_set, dual_if.server_if.get_name())
                cache.add('IF', client_if_command_set, dual_if.client_if.get_name())

            else:
                conf_t_command_set.append( "{mode}ip route {next_net} {dest_mask} {next_hop}".format(
                    mode = unconfig_str,
                    next_net = client_net,
                    dest_mask = stat_route_obj.client_mask,
                    next_hop = server_net_next_hop))
                conf_t_command_set.append( "{mode}ip route {next_net} {dest_mask} {next_hop}".format(
                    mode = unconfig_str,
                    next_net = server_net,
                    dest_mask = stat_route_obj.server_mask,
                    next_hop = client_net_next_hop))

                # config global arp to interfaces net address
                if dual_if.client_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        next_hop = server_net_next_hop, 
                        dest_mac = dual_if.client_if.get_dest_mac()))
                if dual_if.server_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        next_hop = client_net_next_hop, 
                        dest_mac = dual_if.server_if.get_dest_mac()))

            # bump up to the next client network address
            client_net = misc_methods.get_single_net_client_addr(client_net, stat_route_obj.net_increment)
            server_net = misc_methods.get_single_net_client_addr(server_net, stat_route_obj.net_increment)


        # finish handling pre-config cache
        pre_commit_set = list(pre_commit_set)
        if len(pre_commit_set):
            pre_commit_set.append('exit')
        pre_commit_cache.add('CONF', pre_commit_set )
        # assign generated config list to cache
        cache.add('CONF', conf_t_command_set)
        # deploy the configs (order is important!)
        self.cmd_link.run_command( [pre_commit_cache, cache] )
        if self.config_history['basic_if_config']:
            # in this case, duplicated interfaces will lose its ip address. 
            # re-config IPv4 addresses
            self.configure_basic_filtered_interfaces(self.if_mngr.get_duplicated_if() )
Example #5
0
 def __get_ipv6_net_client_addr(self, ipv6_addr):
     return misc_methods.get_single_net_client_addr (ipv6_addr, {'7' : 1}, ip_type = 'ipv6')
Example #6
0
 def __get_ipv4_net_client_addr(self, ipv4_addr):
     return misc_methods.get_single_net_client_addr (ipv4_addr)
Example #7
0
 def __get_ipv6_net_client_addr(self, ipv6_addr):
     return misc_methods.get_single_net_client_addr(ipv6_addr, {'7': 1},
                                                    ip_type='ipv6')
Example #8
0
    def config_ipv6_pbr(self, mode="config"):
        idx = 1
        unconfig_str = "" if mode == "config" else "no "
        cache = CCommandCache()
        conf_t_command_set = []

        conf_t_command_set.append("{mode}ipv6 unicast-routing".format(mode=unconfig_str))

        for dual_if in self.if_mngr.get_dual_if_list():
            client_if_command_set = []
            server_if_command_set = []

            client_net_next_hop = misc_methods.get_single_net_client_addr(
                dual_if.server_if.get_ipv6_addr(), {"7": 1}, ip_type="ipv6"
            )
            server_net_next_hop = misc_methods.get_single_net_client_addr(
                dual_if.client_if.get_ipv6_addr(), {"7": 1}, ip_type="ipv6"
            )

            client_if_command_set.append("{mode}ipv6 enable".format(mode=unconfig_str))
            server_if_command_set.append("{mode}ipv6 enable".format(mode=unconfig_str))

            if dual_if.is_duplicated():
                prefix = "ipv6_" + dual_if.get_vrf_name()
            else:
                prefix = "ipv6"

            # config interfaces with relevant route-map
            client_if_command_set.append(
                "{mode}ipv6 policy route-map {pre}_{p1}_to_{p2}".format(
                    mode=unconfig_str, pre=prefix, p1="p" + str(idx), p2="p" + str(idx + 1)
                )
            )
            server_if_command_set.append(
                "{mode}ipv6 policy route-map {pre}_{p2}_to_{p1}".format(
                    mode=unconfig_str, pre=prefix, p1="p" + str(idx), p2="p" + str(idx + 1)
                )
            )

            # config global arp to interfaces net address and vrf
            conf_t_command_set.append(
                "{mode}ipv6 neighbor {next_hop} {intf} {dest_mac}".format(
                    mode=unconfig_str,
                    next_hop=server_net_next_hop,
                    intf=dual_if.client_if.get_name(),
                    dest_mac=dual_if.client_if.get_dest_mac(),
                )
            )
            conf_t_command_set.append(
                "{mode}ipv6 neighbor {next_hop} {intf} {dest_mac}".format(
                    mode=unconfig_str,
                    next_hop=client_net_next_hop,
                    intf=dual_if.server_if.get_name(),
                    dest_mac=dual_if.server_if.get_dest_mac(),
                )
            )

            conf_t_command_set.append(
                "{mode}route-map {pre}_{p1}_to_{p2} permit 10".format(
                    mode=unconfig_str, pre=prefix, p1="p" + str(idx), p2="p" + str(idx + 1)
                )
            )
            if mode == "config":
                conf_t_command_set.append("set ipv6 next-hop {next_hop}".format(next_hop=client_net_next_hop))
            conf_t_command_set.append(
                "{mode}route-map {pre}_{p2}_to_{p1} permit 10".format(
                    mode=unconfig_str, pre=prefix, p1="p" + str(idx), p2="p" + str(idx + 1)
                )
            )
            if mode == "config":
                conf_t_command_set.append("set ipv6 next-hop {next_hop}".format(next_hop=server_net_next_hop))
                conf_t_command_set.append("exit")

            # assign generated config list to cache
            cache.add("IF", server_if_command_set, dual_if.server_if.get_name())
            cache.add("IF", client_if_command_set, dual_if.client_if.get_name())
            idx += 2

        cache.add("CONF", conf_t_command_set)

        # deploy the configs (order is important!)
        self.cmd_link.run_command([cache])
 def test_ipv4_client_addr_exception(self):
     tmp_ipv4_addr = next(self.ipv4_gen)[0]
     misc_methods.get_single_net_client_addr(tmp_ipv4_addr, {'4' : 1})
 def test_get_ipv4_client_addr(self):
     tmp_ipv4_addr = next(self.ipv4_gen)[0]
     assert_equal ( misc_methods.get_single_net_client_addr(tmp_ipv4_addr), '1.1.1.1')
     assert_raises (ValueError, misc_methods.get_single_net_client_addr, tmp_ipv4_addr, {'3' : 255} )
 def test_get_ipv4_client_addr(self):
     tmp_ipv4_addr = next(self.ipv4_gen)[0]
     assert_equal(misc_methods.get_single_net_client_addr(tmp_ipv4_addr),
                  '1.1.1.1')
     assert_raises(ValueError, misc_methods.get_single_net_client_addr,
                   tmp_ipv4_addr, {'3': 255})
Example #12
0
    def config_ipv6_pbr (self, mode = 'config', vlan=False):
        idx = 1
        unconfig_str = '' if mode=='config' else 'no '
        cache               = CCommandCache()
        conf_t_command_set  = []

        conf_t_command_set.append('{mode}ipv6 unicast-routing'.format(mode = unconfig_str) )

        for dual_if in self.if_mngr.get_dual_if_list():
            client_if_command_set   = []
            server_if_command_set   = []

            client_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv6_addr(), {'7':1}, ip_type = 'ipv6' )
            server_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv6_addr(), {'7':1}, ip_type = 'ipv6' )
            client_net_next_hop_v4 = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv4_addr() )
            server_net_next_hop_v4 = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv4_addr() )


            client_if_command_set.append ('{mode}ipv6 enable'.format(mode = unconfig_str))
            server_if_command_set.append ('{mode}ipv6 enable'.format(mode = unconfig_str))

            if dual_if.is_duplicated():
                prefix = 'ipv6_' + dual_if.get_vrf_name()
            else:
                prefix = 'ipv6'

            # config interfaces with relevant route-map
            client_if_command_set.append ('{mode}ipv6 policy route-map {pre}_{p1}_to_{p2}'.format(
                mode = unconfig_str,
                pre = prefix,
                p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
            server_if_command_set.append ('{mode}ipv6 policy route-map {pre}_{p2}_to_{p1}'.format(
                mode = unconfig_str,
                pre = prefix,
                p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )

            # config global arp to interfaces net address and vrf
            if dual_if.client_if.get_ipv6_dest_mac():
                conf_t_command_set.append('{mode}ipv6 neighbor {next_hop} {intf} {dest_mac}'.format(
                    mode = unconfig_str,
                    next_hop = server_net_next_hop,
                    intf = dual_if.client_if.get_name(),
                    dest_mac = dual_if.client_if.get_ipv6_dest_mac()))
                # For latency packets (which are IPv4), we need to configure also static ARP
                conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format(
                    mode = unconfig_str,
                    next_hop = server_net_next_hop_v4,
                    dest_mac = dual_if.client_if.get_ipv6_dest_mac()))

            if dual_if.server_if.get_ipv6_dest_mac():
                conf_t_command_set.append('{mode}ipv6 neighbor {next_hop} {intf} {dest_mac}'.format(
                    mode = unconfig_str,
                    next_hop = client_net_next_hop,
                    intf = dual_if.server_if.get_name(),
                    dest_mac = dual_if.server_if.get_ipv6_dest_mac()))
                # For latency packets (which are IPv4), we need to configure also static ARP
                conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        next_hop = client_net_next_hop_v4,
                        dest_mac = dual_if.server_if.get_ipv6_dest_mac()))

            conf_t_command_set.append('{mode}route-map {pre}_{p1}_to_{p2} permit 10'.format(
                    mode = unconfig_str,
                    pre = prefix,
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
            if (mode == 'config'):
                conf_t_command_set.append('set ipv6 next-hop {next_hop}'.format(next_hop = client_net_next_hop ) )
            conf_t_command_set.append('{mode}route-map {pre}_{p2}_to_{p1} permit 10'.format(
                    mode = unconfig_str,
                    pre = prefix,
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
            if (mode == 'config'):
                conf_t_command_set.append('set ipv6 next-hop {next_hop}'.format(next_hop = server_net_next_hop ) )
                conf_t_command_set.append('exit')

            # assign generated config list to cache
            client_if_name = dual_if.client_if.get_name()
            server_if_name = dual_if.server_if.get_name()
            if vlan:
                client_if_name += "." + self.client_vlan
                server_if_name += "." + self.server_vlan

            cache.add('IF', server_if_command_set, server_if_name)
            cache.add('IF', client_if_command_set, client_if_name)

            idx += 2

        cache.add('CONF', conf_t_command_set)

        # deploy the configs (order is important!)
        self.cmd_link.run_command( [cache] )
Example #13
0
    def config_static_routing (self, stat_route_obj, mode = 'config'):

        if mode == 'config':
            self.stat_route_config = stat_route_obj   # save the latest static route config for future removal purposes

        unconfig_str = '' if mode=='config' else 'no '
        cache              = CCommandCache()
        pre_commit_cache   = CCommandCache()
        pre_commit_set     = set([])
        current_dup_intf   = None
        # client_net       = None
        # server_net       = None
        client_net         = stat_route_obj.client_net_start
        server_net         = stat_route_obj.server_net_start
        conf_t_command_set = []

        for dual_if in self.if_mngr.get_dual_if_list():

            # handle duplicated addressing generation
            if dual_if.is_duplicated():
                if dual_if.get_vrf_name() != current_dup_intf:
                    # if this is a dual interfaces, and it is different from the one we proccessed so far, reset static route addressing
                    current_dup_intf = dual_if.get_vrf_name()
                    client_net       = stat_route_obj.client_net_start
                    server_net       = stat_route_obj.server_net_start
            else:
                if current_dup_intf is not None:
                    current_dup_intf = None
                    client_net       = stat_route_obj.client_net_start
                    server_net       = stat_route_obj.server_net_start

            client_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv4_addr() )
            server_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv4_addr() )

            # handle static route configuration for the interfaces
            if dual_if.is_duplicated():
                client_if_command_set   = []
                server_if_command_set   = []

                # define the relevant VRF name
                pre_commit_set.add('{mode}ip vrf {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) )

                # assign VRF to interfaces, config interfaces with relevant route-map
                client_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) )
                server_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) )

                conf_t_command_set.append( "{mode}ip route vrf {dup} {next_net} {dest_mask} {next_hop}".format(
                    mode = unconfig_str,
                    dup = dual_if.get_vrf_name(),
                    next_net = client_net,
                    dest_mask = stat_route_obj.client_mask,
                    next_hop = client_net_next_hop))
                conf_t_command_set.append( "{mode}ip route vrf {dup} {next_net} {dest_mask} {next_hop}".format(
                    mode = unconfig_str,
                    dup = dual_if.get_vrf_name(),
                    next_net = server_net,
                    dest_mask = stat_route_obj.server_mask,
                    next_hop = server_net_next_hop))

                # config global arp to interfaces net address and vrf
                if dual_if.client_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        dup = dual_if.get_vrf_name(),
                        next_hop = server_net_next_hop,
                        dest_mac = dual_if.client_if.get_dest_mac()))
                if dual_if.server_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        dup = dual_if.get_vrf_name(),
                        next_hop = client_net_next_hop,
                        dest_mac = dual_if.server_if.get_dest_mac()))

                # assign generated interfaces config list to cache
                cache.add('IF', server_if_command_set, dual_if.server_if.get_name())
                cache.add('IF', client_if_command_set, dual_if.client_if.get_name())

            else:
                conf_t_command_set.append( "{mode}ip route {next_net} {dest_mask} {next_hop}".format(
                    mode = unconfig_str,
                    next_net = client_net,
                    dest_mask = stat_route_obj.client_mask,
                    next_hop = server_net_next_hop))
                conf_t_command_set.append( "{mode}ip route {next_net} {dest_mask} {next_hop}".format(
                    mode = unconfig_str,
                    next_net = server_net,
                    dest_mask = stat_route_obj.server_mask,
                    next_hop = client_net_next_hop))

                # config global arp to interfaces net address
                if dual_if.client_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        next_hop = server_net_next_hop,
                        dest_mac = dual_if.client_if.get_dest_mac()))
                if dual_if.server_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        next_hop = client_net_next_hop,
                        dest_mac = dual_if.server_if.get_dest_mac()))

            # bump up to the next client network address
            client_net = misc_methods.get_single_net_client_addr(client_net, stat_route_obj.net_increment)
            server_net = misc_methods.get_single_net_client_addr(server_net, stat_route_obj.net_increment)


        # finish handling pre-config cache
        pre_commit_set = list(pre_commit_set)
        if len(pre_commit_set):
            pre_commit_set.append('exit')
        pre_commit_cache.add('CONF', pre_commit_set )
        # assign generated config list to cache
        cache.add('CONF', conf_t_command_set)
        # deploy the configs (order is important!)
        self.cmd_link.run_command( [pre_commit_cache, cache] )
        if self.config_history['basic_if_config']:
            # in this case, duplicated interfaces will lose its ip address.
            # re-config IPv4 addresses
            self.configure_basic_filtered_interfaces(self.if_mngr.get_duplicated_if())
Example #14
0
    def config_pbr (self, mode = 'config', vlan = False):
        idx = 1
        unconfig_str = '' if mode=='config' else 'no '

        cache = CCommandCache()
        pre_commit_cache = CCommandCache()
        pre_commit_set = set([])

        for dual_if in self.if_mngr.get_dual_if_list():
            client_if_command_set   = []
            server_if_command_set   = []
            conf_t_command_set      = []
            client_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv4_addr() )
            server_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv4_addr() )

            if dual_if.is_duplicated():
                # define the relevant VRF name
                pre_commit_set.add('{mode}ip vrf {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) )

                # assign VRF to interfaces, config interfaces with relevant route-map
                client_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) )
                client_if_command_set.append ('{mode}ip policy route-map {dup}_{p1}_to_{p2}'.format(
                    mode = unconfig_str,
                    dup = dual_if.get_vrf_name(),
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
                server_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) )
                server_if_command_set.append ('{mode}ip policy route-map {dup}_{p2}_to_{p1}'.format(
                    mode = unconfig_str,
                    dup = dual_if.get_vrf_name(),
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )

                # config route-map routing
                conf_t_command_set.append('{mode}route-map {dup}_{p1}_to_{p2} permit 10'.format(
                    mode = unconfig_str,
                    dup = dual_if.get_vrf_name(),
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
                if mode == 'config':
                    conf_t_command_set.append('set ip next-hop {next_hop}'.format(
                         next_hop = client_net_next_hop) )
                conf_t_command_set.append('{mode}route-map {dup}_{p2}_to_{p1} permit 10'.format(
                    mode = unconfig_str,
                    dup = dual_if.get_vrf_name(),
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
                if mode == 'config':
                    conf_t_command_set.append('set ip next-hop {next_hop}'.format(
                         next_hop = server_net_next_hop) )
                conf_t_command_set.append('exit')

                # config global arp to interfaces net address and vrf
                if dual_if.client_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        dup = dual_if.get_vrf_name(),
                        next_hop = server_net_next_hop,
                        dest_mac = dual_if.client_if.get_dest_mac()))
                if dual_if.server_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        dup = dual_if.get_vrf_name(),
                        next_hop = client_net_next_hop,
                        dest_mac = dual_if.server_if.get_dest_mac()))
            else:
                # config interfaces with relevant route-map
                client_if_command_set.append ('{mode}ip policy route-map {p1}_to_{p2}'.format(
                    mode = unconfig_str,
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
                server_if_command_set.append ('{mode}ip policy route-map {p2}_to_{p1}'.format(
                    mode = unconfig_str,
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )

                # config route-map routing
                conf_t_command_set.append('{mode}route-map {p1}_to_{p2} permit 10'.format(
                    mode = unconfig_str,
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
                if mode == 'config':
                    conf_t_command_set.append('set ip next-hop {next_hop}'.format(
                         next_hop = client_net_next_hop) )
                conf_t_command_set.append('{mode}route-map {p2}_to_{p1} permit 10'.format(
                    mode = unconfig_str,
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
                if mode == 'config':
                    conf_t_command_set.append('set ip next-hop {next_hop}'.format(
                         next_hop = server_net_next_hop) )
                conf_t_command_set.append('exit')

                # config global arp to interfaces net address
                if dual_if.client_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        next_hop = server_net_next_hop,
                        dest_mac = dual_if.client_if.get_dest_mac()))
                if dual_if.server_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        next_hop = client_net_next_hop,
                        dest_mac = dual_if.server_if.get_dest_mac()))

            # assign generated config list to cache
            client_if_name = dual_if.client_if.get_name()
            server_if_name = dual_if.server_if.get_name()
            if vlan:
                client_if_name += "." + self.client_vlan
                server_if_name += "." + self.server_vlan
            cache.add('IF', server_if_command_set, server_if_name)
            cache.add('IF', client_if_command_set, client_if_name)
            cache.add('CONF', conf_t_command_set)
            idx += 2

        # finish handling pre-config cache
        pre_commit_set = list(pre_commit_set)
        if len(pre_commit_set):
            pre_commit_set.append('exit')
        pre_commit_cache.add('CONF', pre_commit_set )
        # deploy the configs (order is important!)
        self.cmd_link.run_command( [pre_commit_cache, cache] )
        if self.config_history['basic_if_config']:
            # in this case, duplicated interfaces will lose its ip address.
            # re-config IPv4 addresses
            self.configure_basic_filtered_interfaces(self.if_mngr.get_duplicated_if(), vlan = vlan)
    def config_ipv6_pbr (self, mode = 'config'):
        idx = 1
        unconfig_str = '' if mode=='config' else 'no '
        cache               = CCommandCache()
        conf_t_command_set  = []

        conf_t_command_set.append('{mode}ipv6 unicast-routing'.format(mode = unconfig_str) )

        for dual_if in self.if_mngr.get_dual_if_list():
            client_if_command_set   = []
            server_if_command_set   = []
            
            client_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv6_addr(), {'7':1}, ip_type = 'ipv6' )
            server_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv6_addr(), {'7':1}, ip_type = 'ipv6' )


            client_if_command_set.append ('{mode}ipv6 enable'.format(mode = unconfig_str))
            server_if_command_set.append ('{mode}ipv6 enable'.format(mode = unconfig_str))

            if dual_if.is_duplicated():
                prefix = 'ipv6_' + dual_if.get_vrf_name()
            else:
                prefix = 'ipv6'
                
            # config interfaces with relevant route-map
            client_if_command_set.append ('{mode}ipv6 policy route-map {pre}_{p1}_to_{p2}'.format( 
                mode = unconfig_str,
                pre = prefix, 
                p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
            server_if_command_set.append ('{mode}ipv6 policy route-map {pre}_{p2}_to_{p1}'.format( 
                mode = unconfig_str,
                pre = prefix, 
                p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )

            # config global arp to interfaces net address and vrf
            if dual_if.client_if.get_ipv6_dest_mac():
                conf_t_command_set.append('{mode}ipv6 neighbor {next_hop} {intf} {dest_mac}'.format(
                    mode = unconfig_str,
                    next_hop = server_net_next_hop, 
                    intf = dual_if.client_if.get_name(),
                    dest_mac = dual_if.client_if.get_ipv6_dest_mac()))
            if dual_if.server_if.get_ipv6_dest_mac():
                conf_t_command_set.append('{mode}ipv6 neighbor {next_hop} {intf} {dest_mac}'.format(
                    mode = unconfig_str,
                    next_hop = client_net_next_hop, 
                    intf = dual_if.server_if.get_name(),
                    dest_mac = dual_if.server_if.get_ipv6_dest_mac()))

            conf_t_command_set.append('{mode}route-map {pre}_{p1}_to_{p2} permit 10'.format(
                    mode = unconfig_str,
                    pre = prefix,
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
            if (mode == 'config'):
                conf_t_command_set.append('set ipv6 next-hop {next_hop}'.format(next_hop = client_net_next_hop ) )
            conf_t_command_set.append('{mode}route-map {pre}_{p2}_to_{p1} permit 10'.format(
                    mode = unconfig_str,
                    pre = prefix,
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
            if (mode == 'config'):
                conf_t_command_set.append('set ipv6 next-hop {next_hop}'.format(next_hop = server_net_next_hop ) )
                conf_t_command_set.append('exit')

            # assign generated config list to cache
            cache.add('IF', server_if_command_set, dual_if.server_if.get_name())
            cache.add('IF', client_if_command_set, dual_if.client_if.get_name())
            idx += 2

        cache.add('CONF', conf_t_command_set)
        
        # deploy the configs (order is important!)
        self.cmd_link.run_command( [cache] )
    def config_pbr (self, mode = 'config'):
        idx = 1
        unconfig_str = '' if mode=='config' else 'no '

        cache = CCommandCache()
        pre_commit_cache = CCommandCache()
        pre_commit_set = set([])

        for dual_if in self.if_mngr.get_dual_if_list():
            client_if_command_set   = []
            server_if_command_set   = []
            conf_t_command_set      = []
            client_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv4_addr() )
            server_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv4_addr() )

            if dual_if.is_duplicated():
                # define the relevant VRF name
                pre_commit_set.add('{mode}ip vrf {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) )
                
                # assign VRF to interfaces, config interfaces with relevant route-map
                client_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) )
                client_if_command_set.append ('{mode}ip policy route-map {dup}_{p1}_to_{p2}'.format( 
                    mode = unconfig_str,
                    dup = dual_if.get_vrf_name(), 
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
                server_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) )
                server_if_command_set.append ('{mode}ip policy route-map {dup}_{p2}_to_{p1}'.format( 
                    mode = unconfig_str,
                    dup = dual_if.get_vrf_name(), 
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )

                # config route-map routing
                conf_t_command_set.append('{mode}route-map {dup}_{p1}_to_{p2} permit 10'.format(
                    mode = unconfig_str,
                    dup = dual_if.get_vrf_name(), 
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
                if mode == 'config':
                    conf_t_command_set.append('set ip next-hop {next_hop}'.format(
                         next_hop = client_net_next_hop) )
                conf_t_command_set.append('{mode}route-map {dup}_{p2}_to_{p1} permit 10'.format(
                    mode = unconfig_str,
                    dup = dual_if.get_vrf_name(), 
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
                if mode == 'config':
                    conf_t_command_set.append('set ip next-hop {next_hop}'.format(
                         next_hop = server_net_next_hop) )
                conf_t_command_set.append('exit')

                # config global arp to interfaces net address and vrf
                if dual_if.client_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        dup = dual_if.get_vrf_name(), 
                        next_hop = server_net_next_hop, 
                        dest_mac = dual_if.client_if.get_dest_mac()))
                if dual_if.server_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str, 
                        dup = dual_if.get_vrf_name(), 
                        next_hop = client_net_next_hop, 
                        dest_mac = dual_if.server_if.get_dest_mac()))
            else:
                # config interfaces with relevant route-map
                client_if_command_set.append ('{mode}ip policy route-map {p1}_to_{p2}'.format( 
                    mode = unconfig_str,
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
                server_if_command_set.append ('{mode}ip policy route-map {p2}_to_{p1}'.format( 
                    mode = unconfig_str,
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )

                # config route-map routing
                conf_t_command_set.append('{mode}route-map {p1}_to_{p2} permit 10'.format(
                    mode = unconfig_str,
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
                if mode == 'config':
                    conf_t_command_set.append('set ip next-hop {next_hop}'.format(
                         next_hop = client_net_next_hop) )
                conf_t_command_set.append('{mode}route-map {p2}_to_{p1} permit 10'.format(
                    mode = unconfig_str,
                    p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) )
                if mode == 'config':
                    conf_t_command_set.append('set ip next-hop {next_hop}'.format(
                         next_hop = server_net_next_hop) )
                conf_t_command_set.append('exit')

                # config global arp to interfaces net address
                if dual_if.client_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        next_hop = server_net_next_hop, 
                        dest_mac = dual_if.client_if.get_dest_mac()))
                if dual_if.server_if.get_dest_mac():
                    conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format(
                        mode = unconfig_str,
                        next_hop = client_net_next_hop, 
                        dest_mac = dual_if.server_if.get_dest_mac()))

            # assign generated config list to cache
            cache.add('IF', server_if_command_set, dual_if.server_if.get_name())
            cache.add('IF', client_if_command_set, dual_if.client_if.get_name())
            cache.add('CONF', conf_t_command_set)
            idx += 2

        # finish handling pre-config cache
        pre_commit_set = list(pre_commit_set)
        if len(pre_commit_set):
            pre_commit_set.append('exit')
        pre_commit_cache.add('CONF', pre_commit_set )
        # deploy the configs (order is important!)
        self.cmd_link.run_command( [pre_commit_cache, cache] )
        if self.config_history['basic_if_config']:
            # in this case, duplicated interfaces will lose its ip address. 
            # re-config IPv4 addresses
            self.configure_basic_filtered_interfaces(self.if_mngr.get_duplicated_if() )
 def test_ipv4_client_addr_exception(self):
     tmp_ipv4_addr = next(self.ipv4_gen)[0]
     misc_methods.get_single_net_client_addr(tmp_ipv4_addr, {'4': 1})
 def test_get_ipv6_client_addr(self):
     tmp_ipv6_addr = next(self.ipv6_gen)
     assert_equal ( misc_methods.get_single_net_client_addr(tmp_ipv6_addr, {'7' : 1}, ip_type = 'ipv6'), '2001:DB8:0:2222:0:0:0:1')    
     assert_equal ( misc_methods.get_single_net_client_addr(tmp_ipv6_addr, {'7' : 2}, ip_type = 'ipv6'), '2001:DB8:0:2222:0:0:0:2')    
     assert_raises (ValueError, misc_methods.get_single_net_client_addr, tmp_ipv6_addr, {'7' : 70000} )
 def test_ipv6_client_addr_exception(self):
     tmp_ipv6_addr = next(self.ipv6_gen)
     misc_methods.get_single_net_client_addr(tmp_ipv6_addr, {'8': 1},
                                             ip_type='ipv6')
 def test_ipv6_client_addr_exception(self):
     tmp_ipv6_addr = next(self.ipv6_gen)
     misc_methods.get_single_net_client_addr(tmp_ipv6_addr, {'8' : 1}, ip_type = 'ipv6')
Example #21
0
 def __get_ipv4_net_client_addr(self, ipv4_addr):
     return misc_methods.get_single_net_client_addr(ipv4_addr)