如何使用自动化构造随机路由模型

这篇具有很好参考价值的文章主要介绍了如何使用自动化构造随机路由模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为什么要仿真随机路由?

路由器测试中,为了最大程度还原现网路由情况,评估路由器在现网环境下稳定工作各项指标,需要对导入路由进行离散仿真,目前路由仿真可分为导入路由与生成路由两种方式,导入路由需要现网路由表导入,本文讨论重点为生成路由方式。
如何使用自动化构造随机路由模型,自动化,智能路由器,网络

自动化生成路由能解决什么问题?

使用用户界面生成路由时,可根据离散模型生成路由,但生成路由与现网路由相比,只注重路由段离散,未体现AsPath、Community等BGP路由参数离散,使用自动化生成路由可根据定义规则进行生成。

如何使用自动化生成随机路由

信而泰Renix平台提供了python API接口,可使用python API进行路由灵活定义。假设路由需求如下:配置Port口1个,包含20个IBGP,个IBGP通告10个路由段、共10wIPv4+10wIPv6路由,要求路由掩码随机选择,AsPath随机选择、Connmity随机选择。
本文选择基础API使用信而泰API(renix_py_api、MiscLibrary),不另做定义,使用时需安装相关环境。代码解析如下:

导入相关库

import time
from renix_py_api.renix import *
from MiscLibrary.base import *
import logging
import random
import re

初始化Python环境及定义参数

初始化Renix相关Python参数外,定义生成BGP路由的相关参数,其中包括IPv4/IPv6相关变化点路由数量、起始路由、掩码/前缀、AsPath、Community,设备各变化点取值范围。

api = MiscAPI()
initialize(log=True, log_level=logging.INFO, log_handle=LogHandle.LOG_FILE)
chassis_DY = “10.1.1.7”
port_DY_1 = “//10.1.1.7/3/1”
start_ip1 = “20.0.0.0”
start_ipv61 = “2023::”
BgpSessionCount = 20
BgpRouteBlock = 10
BgpRouteBlockv6 = 10
ipv4routecount = 100000
ipv6routecount = 100000
MaskMin = 20
MaskMax = 30
PrefixMin = 80
PrefixMax = 120
AsPathMaxLength = 8
CommunityMaxLength = 8
Ipv4RoutePerSession = int(ipv4routecount / BgpSessionCount)
ipv6PrefixPerSession = int(ipv6routecount / BgpSessionCount)
Ipv4CountRandonMax = int(Ipv4RoutePerSession / BgpRouteBlock)
Ipv4CountRandonMin = int(Ipv4CountRandonMax * 0.5)
Ipv6CountRandonMax = int(ipv6PrefixPerSession / BgpRouteBlockv6)
Ipv6CountRandonMin = int(Ipv6CountRandonMax * 0.5)

创建端口及映射机箱

如有对应仪表机框时,可按以下执行,如生成离线配置,可注释chassis.execute()和BringPortsOnlineCommand(PortList=[port_1.handle]).execute()语句。

sys_entry = get_sys_entry()
sys_entry.edit(ProductType=1)
chassis = ConnectChassisCommand(chassis_DY)
chassis.execute()
port_1 = Port(upper=sys_entry, Location=port_DY_1, name='port_1')
BringPortsOnlineCommand(PortList=[port_1.handle]).execute()

参数生成器定义

主要定义RouterId、IPv6RouterId、Mac、IPv4、IPv6生成器,接口相关参数均按偏移(Offset)变化。RouterId、IPv6RouterId、Mac均按递增1变化( Offset=0,Step=1),IPv4按掩码24位递增1变化( Offset=8,Step=1),IPv6按掩码80位递增1变化( Offset=80,Step=1)

GeneratorRouteridv4 = api.address_modifier(Start=r'192.168.0.1', Step=1, Count=1000, Offset=0)
GeneratorRouteridv6 = api.address_modifier(Start=r'192:168::1', Step=1, Count=1000, Offset=0)
GeneratorMacAddress = api.address_modifier(Start=r'00:10:94:00:00:01', Step=1, Count=1000, Offset=0)
GeneratorIPv4Address = api.address_modifier(Start=r'10.0.0.2', Step=1, Count=1000, Offset=8)

GeneratorIPv6Address = api.address_modifier(Start=r’2000::2’, Step=1, Count=1000, Offset=80)

接口生成interface&BgpSession

接口生成时,主要变化点为RouterId、IPv6RouterId、Mac、IPV4、IPv6、IPv4GW、IPv6GW变化,接口数量与BGPSessionCount一一对应,注意单接口下生成多个interface时,启用子接口模式,对应仪表变化则为Vlan变化
实现代码参数以下,相关生成器定义已在上文讨论,本循环使用api.generator_next()生成对连接变化点。
for x in range(BgpSessionCount):

#Interface生成部分代码

    Routeridv4 = api.generator_next(GeneratorRouteridv4)
    Routeridv6 = api.generator_next(GeneratorRouteridv6)
    MacAddr = api.generator_next(GeneratorMacAddress)
    IPv4Addr = api.generator_next(GeneratorIPv4Address)
    IPv6Addr = api.generator_next(GeneratorIPv6Address)
    IPv4GWAddr = api.ipv4_address_hopping(IPv4Addr, Mask=32, Type='decrement', Step=1)
    IPv6GWAddr = api.ipv6_address_hopping(IPv6Addr, Mask=128, Type='decrement', Step=1)
    interface = Interface(upper=port_1, RouterId = Routeridv4, Ipv6RouterId = Routeridv6)
    Interface_temp = "Interface_" + str(x+1)
    build_Dual = BuildInterfaceCommand(InterfaceList=Interface_temp, NetworkLayers=['eth', 'vlan'], TopLayers=['ipv4', 'ipv6'])
    build_Dual.execute()
    eth_layer = interface.get_children('EthIILayer')[0]
    eth_layer.edit(Address = MacAddr)
    vlan_layer = interface.get_children('VlanLayer')[0]
    vlan_layer.edit(VlanId = x+1 )
    ipv4_layer = interface.get_children('Ipv4Layer')[0]
    ipv4_layer.edit(Address = IPv4Addr , Gateway=IPv4GWAddr)
    ipv6_layer = interface.get_children('Ipv6Layer')[0]
    ipv6_layer.edit(Address = IPv6Addr , Gateway=IPv6GWAddr)
    
    ★生成Interface效果下图所示

如何使用自动化构造随机路由模型,自动化,智能路由器,网络

BepSession生成

  由于BgpSession与interface存在一一对应关系,所以可在同一个循环下生成BgpSession并绑定Interface。以下代码以上部分代码同处一个循环(for x in range(BgpSessionCount):)。

for x in range(BgpSessionCount):

BgpSession = BgpProtocolConfig(upper=port_1)
BgpSession.edit(AsNumber=65000)
BgpSession.edit(DutAsNumber=65000)
BgpSession.edit(UseGatewayAsDutIp=False)
BgpSession.edit(DutIpv4Address=IPv4GWAddr)
BgpSession.edit(DutIpv6Address=IPv6GWAddr)
select_interface = SelectInterfaceCommand(ProtocolList=[BgpSession.handle], InterfaceList=[interface.handle])
select_interface.execute()
★生成Bgp效果下图所示
如何使用自动化构造随机路由模型,自动化,智能路由器,网络

IPv4路由生成

为每个BgpSession生成若干条RouteBlock,所以可在同一个循环下生成RouteBlock并绑定BgpSession。以下代码以上部分代码同处一个循环(for x in range(BgpSessionCount):),每个BgpSession生成的RouteBlock数量由BgpRouteBlock决定并循环执行,相关变化点包括路由数量、起始路由、掩码、AsPath、AsPath跳变长度、每个路由组AsPath数量、Community、Community跳变长度、每个路由组Community数量,其中路由数量、掩码、AsPath、Community为Random值,起始路由、AsPath跳变长度、每个路由组AsPath数量、Community跳变长度、每个路由组Community数量为对应变化:

起始路由:第1条路由填入定义的起始路由,2~n条按上一条路由的起始路由、路由数量、掩码生成对应的起始路由,每条路由组路由数量、掩码均使用random.randint生成随机数。

AsPath:按约定的最大AsPath长度生成随机长度,并根据长度生成对应随机AsPath,AsPath跳变长度均为1:1,AsPath跳变长度根据路由数量取值

Community:变化与AsPath类似。

具体实现代码如下:

for x in range(BgpSessionCount):

FirstRoute = start_ip1
Ipv4RouteCount = 0
for y in range(BgpRouteBlock):
mask = random.randint(MaskMin, MaskMax)
if y == BgpRouteBlock-1:
RouteCount = Ipv4RoutePerSession - Ipv4RouteCount
else:
RouteCount = random.randint(Ipv4CountRandonMin, Ipv4CountRandonMax)
Ipv4RouteCount = Ipv4RouteCount+RouteCount

        offset = 32 - mask
        if x == 0 and y == 0:
            BgpRoute = BgpIpv4RoutepoolConfig(upper=BgpSession)
            BgpRoute.get()
            BgpRoute.edit(FirstRoute=FirstRoute)
            BgpRoute.edit(PrefixLength=mask)
            BgpRoute.edit(RouteCount=RouteCount)
            GeneratorIPv4Route = api.address_modifier(Start=FirstRoute, Step=RouteCount, Offset=offset, Count=1000)
            IPv4Route = api.generator_next(GeneratorIPv4Route)
            IPv4Route = api.generator_next(GeneratorIPv4Route)
        else:
            BgpRoute = BgpIpv4RoutepoolConfig(upper=BgpSession)
            BgpRoute.get()
            BgpRoute.edit(FirstRoute=IPv4Route)
            BgpRoute.edit(PrefixLength=mask)
            BgpRoute.edit(RouteCount=RouteCount)
            Start = IPv4Route
            GeneratorIPv4Route = api.address_modifier(Start=Start, Step=RouteCount, Offset=offset, Count=1000)
            IPv4Route = api.generator_next(GeneratorIPv4Route)
            IPv4Route = api.generator_next(GeneratorIPv4Route)
        as_path_length = random.randint(2, AsPathMaxLength)
        community_length = random.randint(2, CommunityMaxLength)
        as_path_list = list()
        community_list = list()
        AsPathIncrement_list = list()
        as_path_tem = str()
        community_tem = str()
        communityIncrement_list = list()
        for z in range(as_path_length):
            as_path = random.randint(300, 64000)
            as_path_list.append(as_path)
        for z in range(community_length):
            community1 = random.randint(1, 65535)
            community2 = random.randint(1, 65535)
            community = str(community1) + ':' + str(community2)
            community_list.append(community)
        for i in range(len(community_list) - 1):
            community = community_list[i]
            community_tem += community
            community_tem += ','
        community_tem += str(community_list[-1])
        AsPathPerBlockCount = int(RouteCount / 6.5)
        for z in range(len(as_path_list)):
            AsPathIncrement_list.append(1)
        for z in range(len(community_list)):
            Temp = str(1) + ':' + str(1)
            communityIncrement_list.append(Temp)
        BgpRoute.edit(AsPath=as_path_list)
        BgpRoute.edit(AsPathIncrement=AsPathIncrement_list)
        BgpRoute.edit(AsPathPerBlockCount=AsPathPerBlockCount)
        BgpRoute.edit(Community=community_tem)
        BgpRoute.edit(CommunityIncrement=communityIncrement_list)
        BgpRoute.edit(CommunityPerBlockCount=AsPathPerBlockCount)如何使用自动化构造随机路由模型,自动化,智能路由器,网络如何使用自动化构造随机路由模型,自动化,智能路由器,网络

 ★生成IPv4路由BgpRouteBlock效果图如下所示

如何使用自动化构造随机路由模型,自动化,智能路由器,网络

IPV6

★IPv6路由生成方法与IPv4一致,实现参考上文代码。
生成IPv6 BgpRouteBlock效果图如下所示:
如何使用自动化构造随机路由模型,自动化,智能路由器,网络

保存Renix平台对应XCFG

执行以上代循环代码后,用以下代码生成对应配置,其中ProductType=1代表Daryu系列产品
save_case = SaveTestCaseCommand(TestCase=‘D:\bgp_random.xcfg’, ProductType=1)
save_case.execute()

DarYu-X系列测试仪

DarYu-X系列高性能网络测试仪是信而泰推出的面向高端路由器等高端数通设备的测试产品,具有高性能、高密度、高速率等特点,配置信而泰基于PCT架构的新一代测试软件RENIX和X系列测试模块,可为提供路由哭喊组网测试解决方案,为建立一张高SLA保证、确定性时延、业务感知、灵活业务路径调优的下一代网络保驾护航。文章来源地址https://www.toymoban.com/news/detail-588515.html

到了这里,关于如何使用自动化构造随机路由模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用自动化测试工具Selenium?

    哈喽,大家好,我是小浪。那么有一段时间没有更新了,还是在忙实习和秋招的事情,那么今天也是实习正式结束啦,开始继续更新我们的学习博客,后期主要是开发和测试的学习博客内容巨多,感兴趣的小伙伴们可以一键三连支持一下欧~ 目录 一、什么是自动化测试? 二、

    2024年02月11日
    浏览(61)
  • 如何使用Python实现FPGA编程“自动化”

    之前读到过一个公众号文章,写了关于《使用Python实现Vivado和Modelsim仿真的自动化》,连接https://mp.weixin.qq.com/s/2YR_LjpQNtJr9beqnCz7CA。根据该文章,基于自己的编程习惯和工作需要,我做了一些修改和便于自己编程的一些python代码,这里和大家介绍一下。 对于生成的tb文件使用了

    2023年04月14日
    浏览(41)
  • 【大模型】自动化问答生成:使用GPT-3.5将文档转化为问答对

    当我们需要将大段文档转化为问答对时,OpenAI的GPT-3.5模型提供了一个强大的工具。这个教程将向您展示如何编写一个Python脚本,利用GPT-3.5的能力,将文档转化为一问一答的问答对。这个流程几乎无需人工介入,能够自动获取问题并生成答案。我们将使用GPT-3.5-16k,以便处理大

    2024年02月10日
    浏览(38)
  • 如何使用IOS自动化测试工具UIAutomation

    这篇文章主要介绍了UIAutomation使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值 第一部分: 熟悉Instruments的UIAutomation. 第二部分: 控件的获取及操作 第三部分: 自定义自动化脚本 xcode中自带的Instuments工具可以用来进行APP的自动化测试, 以及用于进行内

    2024年02月03日
    浏览(76)
  • Azure 机器学习 - 使用自动化机器学习训练计算机视觉模型的数据架构

    了解如何设置Azure Machine Learning JSONL 文件格式,以便在训练和推理期间在计算机视觉任务的自动化 ML 实验中使用数据。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的

    2024年02月05日
    浏览(52)
  • 如何使用Docker实现分布式Web自动化!

    01、前言 顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章 主要讲述在docker中使用浏览器进行自动化测试如果可以实现可视化,同时可以对浏览器进行相关的操作。 0 2、开篇 首先我们先了解什么是有头浏览器和无

    2024年02月13日
    浏览(46)
  • 什么是Selenium?如何使用Selenium进行自动化测试?

      Selenium 是一种开源工具,用于在 Web 浏览器上执行自动化测试(使用任何 Web 浏览器进行 Web 应用程序测试)。   等等,先别激动,让我再次重申一下,Selenium 仅可以测试Web应用程序。我们既不能使用 Selenium 测试任何桌面(软件)应用程序,也不能测试任何移动应用程

    2024年02月02日
    浏览(48)
  • 如何使用RPA + ChatGPT自动化提高自己的工作效率

    使用RPA(Robotic Process Automation)和ChatGPT可以结合来自动化提高自己的工作效率。下面是一些步骤: (1)确定自动化任务 首先,需要确定哪些任务或工作流程可以通过自动化来提高效率。这些任务应该是重复性、规则性的,例如数据输入、文件处理、信息检索等。通过分析自

    2024年02月10日
    浏览(69)
  • 如何使用机器人和物联网实现仓库自动化

    自动化和机器人化不再仅限于制造过程; 现代仓库也正在采用大量新技术。 物联网 (IoT) 的出现使得极其精确的室内地理定位成为可能; 仓库工作人员正在使用智能仓储车; 先进的传感器确保存储货物的质量。 了解仓库自动化以及它如何保护并加快您的物流流程。 什么是物联网

    2024年02月20日
    浏览(50)
  • Moonbeam操作指南|如何使用Gelato创建自动化任务

    Gelato是一个Web3去中心化自动化网络,允许开发者横跨多个基于EVM兼容区块链上自动化和连接任意的智能合约执行。 📑阅读中文版详细操作教程 举例来说,我们将使用MetaMask作为钱包。同时,您的钱包余额中需要有一些GLMR用于支付自动化交易的gas费用。 开始之前,请先前往

    2024年02月02日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包