浅析SR隧道路径批量构造方法
为什么要仿真PCE LSP下发隧道路径?
在大型的多区域网络中,路径计算非常复杂。在某些场景下,为了完成路径计算,需要在控制器上部署特殊的计算组件,并需要不同区域中的节点之间协作。这使得网元在进行路径计算时效率低,还会降低网元本身的转发性能。
PCE最早是为了解决大型的多区域网络路径计算问题而被提出,通过PCE可以为TE计算跨域路径。如下图所示,PCEP网络包含如下3个部分:
- PCE(Path Computation Element,路径计算单元):PCE是能够基于网络拓扑信息计算满足约束的路径的部件。PCE可以部署在路由设备中,也可以部署在一个独立的服务器中。大多数时候,PCE和控制器是集成在一起的。
PE
- PCC(Path Computation Client,路径计算客户端):PCC是请求路径计算单元执行路径计算的客户端应用程序。PCC向PCE发送路径请求,并接受PCE返回的路径计算结果。一般情况下,路由设备集成了PCC功能,可以认为路由设备就是PCC。
- PCEP(Path Computation Element Protocol,路径计算单元通信协议):PCEP是PCE和PCC、PCE和PCE之间的通信协议。
图1-应用拓扑
序号 |
说明 |
1 |
用户通过配置触发Ingress(即为PCC)请求建立LSP。 |
2 |
PCC向PCE服务器发送PCEP Report消息,请求PCE进行LSP托管及路径计算。 |
3 |
PCE服务器收到Report消息后,保存LSP信息到LSP DB。根据TEDB和本地策略触发路径计算或全局优化算路。 |
4 |
PCE服务器计算完毕后,如果计算结果审核通过,则PCE服务器通过Update消息将计算结果返回给PCC。 |
5 |
PCC按照计算结果进行SR-TE路径建立。 |
自动化生成PCE LSP能解决什么问题?
使用仪表模拟PCE时,需要手工创建PCE LSP,并且涉及转发路径标签的确定,Adj-Sid在每次建立SR邻居时都是随机分配标签值,创建隧道路径又必须明确标签值,在创建大量的隧道路径情况下,使用自动化读取SR隧道数据方法创建PCE LSP可节省大量仪表配置精力。
如何使用自动化构造PCE LSP
信而泰Renix平台提供了python API接口,可使用python API进行PCE LSP灵活定义。假设业务如下所示:
- SR-TE单板转发性能:创建ISIS SR-TE业务
- PCEP隧道托管:DUT与仪表之间建立SR-TE隧道,并把其中4000条隧道路径托管到PCE。
图2-实验拓扑
本文选择基础API使用信而泰API(renix_py_api、MiscLibrary),不另做定义,使用时需安装相关环境。代码解析如下:
- 导入相关库:
from renix_py_api.renix import *
import logging
import pandas as pd
- 初始化:initialize为仪表初始化
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"
path = 'D:\pcep\pceplsp.xls'
data = pd.DataFrame(pd.read_excel(path))
tunnelnum = 16000
pcelspnum = 4000
创建自动化前需收集隧道路径参数,格式如下表所示(提供前10供参考,本实验共计250条路径用于承载vpnv4流量,250条路径用于承载6vpe流量):
peer |
SourceIpv4Address |
DestinationIpv6Address |
AdjSid |
NodeSid |
1 |
10.48.48.1 |
10.48.50.1 |
160001 |
200001 |
2 |
10.48.48.1 |
10.48.50.2 |
160002 |
200002 |
3 |
10.48.48.1 |
10.48.50.3 |
160003 |
200003 |
4 |
10.48.48.1 |
10.48.50.4 |
160004 |
200004 |
5 |
10.48.48.1 |
10.48.50.5 |
160005 |
200005 |
6 |
10.48.48.1 |
10.48.50.6 |
160006 |
200006 |
7 |
10.48.48.1 |
10.48.50.7 |
160007 |
200007 |
8 |
10.48.48.1 |
10.48.50.8 |
160008 |
200008 |
9 |
10.48.48.1 |
10.48.50.9 |
160009 |
200009 |
10 |
10.48.48.1 |
10.48.50.10 |
160010 |
200010 |
- 创建仪表基本配置
sys_entry = get_sys_entry()
sys_entry.edit(ProductType=1)
chassis = ConnectChassisCommand(chassis_DY)
chassis.execute()
port_location = ('//10.1.1.7/3/1')
port_1 = Port(upper=sys_entry, Location=port_location[0], name='port_1')
BringPortsOnlineCommand(PortList=[port_1.handle]).execute()
- 配置pcep
interface_1 = Interface(upper=port_1)
build_ipv4_ipv6 = BuildInterfaceCommand(InterfaceList='Interface_1', NetworkLayers='eth', TopLayers=['ipv4', 'ipv6'])
build_ipv4_ipv6.execute()
eth_layer = interface_1.get_children('EthIILayer')[0]
eth_layer.edit(Address='00:10:99:00:00:01')
ipv4_layer = interface_1.get_children('Ipv4Layer')[0]
ipv4_layer.edit(Address='12.5.20.2', Step='0.0.0.1', Count='1', Gateway='12.5.20.1')
ipv6_layer = interface_1.get_children('Ipv6Layer')[0]
ipv6_layer.edit(Address='12:5:14::2', Step='::1', Count='1', Gateway='12:5:14::1')
PcepSession = PcepProtocolConfig(upper=port_1)
PcepSession.edit(UseGatewayAsDutIp=False)
PcepSession.edit(PeerIpv4Address="10.48.48.1")
select_interface_1=SelectInterfaceCommand(ProtocolList=[PcepSession.handle], InterfaceList=[interface_1.handle])
select_interface_1.execute()
- 配置PCE LSP,根据Excel循环创建
tunnelperpeer = int(tunnelnum/250)
counter = 4000
for x in range(250):
for y in range(tunnelperpeer):
PceLsp = PceLspConfig(upper=PcepSession)
SymbolicName = 'Tunnel'+str(x*tunnelperpeer+(y+1))
PceLsp.edit(SymbolicName=SymbolicName)
SourceIP = data.loc[x][1]
PceLsp.edit(SourceIpv4Address=SourceIP)
DestIP = data.loc[x][2]
PceLsp.edit(DestinationIpv4Address=DestIP)
PcepSrEroObject = PcepSrEroObjectConfig(upper=PceLsp)
PcepSrEroSubObject = PcepSrEroSubObjectConfig(upper=PcepSrEroObject)
PcepSrEroSubObject.edit(NaiType=3)
PcepSrEroSubObject.edit(FFlag=True)
Adjsid = int(data.loc[x][3])
PcepSrEroSubObject.edit(SidLabel=Adjsid)
PcepSrEroSubObject = PcepSrEroSubObjectConfig(upper=PcepSrEroObject)
PcepSrEroSubObject.edit(NaiType=1)
PcepSrEroSubObject.edit(FFlag=True)
Nodesid = int(data.loc[x][4])
PcepSrEroSubObject.edit(SidLabel=Nodesid)
counter -=1
if counter == 0:
break
if counter == 0:
break
- 保存Renix平台对应XCFG文件
save_case = SaveTestCaseCommand(TestCase='D:\pcep\pcep.xcfg', ProductType=1)
save_case.execute()
- 执行生成配置文件效果(PCE LSPs)
- PCE LSP对应路径(ERO Object)
DarYu-X系列测试仪
DarYu-X系列高性能网络测试仪是信而泰推出的面向高端路由器等高端数通设备的测试产品,具有高性能、高密度、高速率等特点,配置信而泰基于PCT架构的新一代测试软件RENIX和X2系列测试模块,可为提供路由高效组网测试解决方案,为建立一张高SLA保证、确定性时延、业务感知、灵活业务路径调优的下一代网络保驾护航。
浅析SR隧道路径批量构造方法的更多相关文章
- Python调用MYSQL,将文件名和路径批量入库用法小结
最近项目需要将大量的压缩文件导入到数据库中,所以开始总结用Python批量处理的办法,本次是首先将这些压缩文件的文件名提取出来,然后导入到数据库中. 由于涉及到路径的读取处理,所以方法有os模块和co ...
- 指定路径批量将xls转换成csv
PS : 用到spire库,.net控制台应用程序 其实本来没打算写这个工具的,只是最近需要用到,手头上正好没有这样的工具,那么怎么办,写呗! 其实说白了就是省事,策划想怎么玩,把表把工具丢给他,省得 ...
- php nginx 路径批量配置
* 假设 E:\upload 作为图片上传的位置 nginx 做web服务 * 创建文件conf.php 放到这个目录下 <?php function handleDir($it, &$ ...
- 织梦DedeCms网站更换域名后文章图片路径批量修改
因为织梦上传图片用的是绝对地址,如果域名更换后,之前发布的文章的图片URL是不会跟着改变的,所以我们需要把旧域名替换成新的域名,方法很简单,有一段SQL语句更新一下文章正文内容就行. 复制下面SQL语 ...
- linux sed命令查询结果前后批量追加内容(html文件批量修改css,js等文件路径)
1.需求:linux使用shell命令查询结果前后批量追加内容 例如:我需要在当前目录下所有的css文件路径前追加域名 我想的是用sed替换去实现,鲍哥的思路是用for循环 1.1方法1:鲍哥的for ...
- Yii2如何批量添加数据
批量添加这个操作,在实际开发中经常用得到,今天小编抽空给大家整理些有关yii2批量添加的问题,感兴趣的朋友一起看看吧. 在上篇文章给大家介绍了关于浅析Yii2 gridview实现批量删除教程,当然, ...
- hibernate批量更新和删除数据
批量处理 不建议用Hibernate,它的insert效率实在不搞,不过最新版本的Hibernate似乎已经在批量处理的时候做过优化了,设置一些参数如batch_size,不过性能我没有测试过,听说 ...
- 对初学者的MPLS 常见问题
对初学者的MPLS 常见问题 2015年6月8日 16:04 阅读 186 问:什么是多协议标签交换 (MPLS)? 答:MPLS是一种数据包转发技术,该技术使用标签来做出数据转发决策. 利用MPLS ...
- 【JAVA 文件概述】
一.概述 使用此类的原因: 该类将文件或者文件夹封装成对象.方便对文件与文件夹的属性信息进行操作.File对象作为参数传递给流的构造函数.要求:使用File类的常用方法. windows平台下,目录分 ...
- JAVA_DES 加密 解密 生成随机密钥
package com.test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.In ...
随机推荐
- pytorch入门 - VGG16神经网络
1. VGG16背景介绍 VGG-16是由牛津大学Visual Geometry Group(VGG)在2014年提出的深度卷积神经网络模型,它在当年的ImageNet大规模视觉识别挑战赛(ILSVR ...
- Go 进阶训练营 Week02: error 错误处理
Error vs Exception Error: Go error 就是普通的一个接口,普通的值.Errors are values type error interface { Error() s ...
- SolidWorks下载安装教程(附安装包)SolidWorks 2025 软件全方位指南
一.SolidWorks 2025 软件深度介绍 SolidWorks 2025 是达索系统精心研发推出的一款功能强大且专业的三维机械设计软件,它将 3D CAD 设计.分析及产品数据管理功能高度集成 ...
- UFT connect sql (1)
两种方法: 第一种: 第二种:
- JavaScript的"数值计算困局":生态缺位下的破局之路
本文原创首发于公众号[我做开发那些年]与网站[乔文小屋],现同步转载至本平台,点击阅读原文 声明:如需转载本文至其他平台,请注明文章来源及公众号信息,感谢您对原创内容的尊重与支持! *背景*:最近在尝 ...
- FastAPI中的敏感数据如何在不泄露的情况下翩翩起舞?
扫描二维码 关注或者微信搜一搜:编程智域 前端至全栈交流与成长 发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/ 以下是关于FastAPI框架中敏 ...
- 树莓派 noteboot
树莓派 各种结构的区别 1.视频集群中的第一讲 安装操作系统 http://blog.csdn.net/github_38111866/article/details/76038665 远程连接遇到的 ...
- fowsniff WP
下载地址: https://download.vulnhub.com/fowsniff/Fowsniff_CTF_ova.7z category:重要 awk剪切得到字典,巩固awk使用技巧 motd ...
- Square Image 工具完整使用指南:将任何图片转换为完美正方形格式
什么是 Square Image 工具? Square Image 是一款专业的在线图片处理工具,专门用于将各种尺寸的图片转换为正方形格式.无论您需要为社交媒体创建正方形头像,还是为专业项目制作正方形 ...
- Living-Water-饮用水源:地下水净化
地下水如何净化成饮用水? 2024-07-13 15:00 地下水净化,确保供应为饮用水质的过程涉及以下几个关键环节: RO渗透膜过滤器. 抽取: 首先,使用水井或泵站从地下水层抽取水源. 预处理: ...