浅析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 ...
随机推荐
- 数栈运维案例:云上RAC部署、运维及实践案例
数栈是云原生-站式数据中台PaaS,我们在github和gitee上有一个有趣的开源项目:FlinkX,FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,也可以采集实时变 ...
- Local Deep Research - AI驱动的深度研究助手
项目概述 Local Deep Research (LDR) 是一个AI研究助手,专注于执行深度.迭代的研究任务.核心功能包括: 复杂问题分解:将复杂查询拆分为聚焦的子查询 多源并行搜索:同时搜索网络 ...
- Moby 项目 - 开源容器化工具集
项目标题与描述 Moby 是一个开源项目,由 Docker 创建,旨在推动和加速软件容器化.它提供了一套"乐高积木"式的工具组件.组装这些组件成为自定义容器系统的框架,以及供所有容 ...
- Kong入门学习实践(1)基础概念快览
最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看.由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版. 什么是Kong? Ko ...
- SQL Server 删除重复行,查询重复,多记录匹配保留最小行(如何删除 SQL Server 表中的重复行)
https://support.microsoft.com/zh-cn/topic/%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4-sql-server-%E8%A1%A8% ...
- Luogu P8112 [Cnoi2021]符文破译 题解
P8112 [Cnoi2021]符文破译 借用 KMP 思想优化的动态规划. 首先,用 \(dp[i]\) 表示把前 \(i\) 位的字符完全匹配需要的最少词缀数(下标均从 \(1\) 开始).那么, ...
- 智力大冲浪 C++
题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者 m 元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则 ...
- 基于 doo-sabin的细分
简介 没有 cc 细分好. 参考链接 http://graphics.stanford.edu/courses/cs468-10-fall/LectureSlides/10_Subdivision.p ...
- WD 笔试 反思 记录
1.从 1 2 3 4 5 6 7 8 9从中选择至少一个,乘积的种类有多少种 转:解题思路http://www.nowcoder.com/questionTerminal/65c51812549 ...
- GAMES101 作业0 图形学
简介 作业用来校验自己做的是否正确.请不用copy,因为这是cheat youself. 题目 给定一个点 P=(2,1), 将该点绕原点先逆时针旋转 45◦,再平移 (1,2), 计算出变换后点的坐 ...