示例:限制 E1 接口的数量
此提交脚本示例可限制在通道化 STM1 智能排队 (IQ) PIC 上配置的 E1 接口数量,以避免出现与单位时间表的争用问题。
要求
此示例使用使用通道化 STM1 智能排队 (IQ) PIC 运行 Junos OS 的设备。
概述和提交脚本
以下脚本可确保在通道化 STM1 IQ 接口上配置的 E1 接口不超过 16 个。对于每个通道化 STM1 接口 (cstm1-),选择一组对应的 E1 接口。根据内置可扩展样式表语言转换 (XSLT) count()
功能确定的这些接口数量不能超过全局参数 limit
设定的限制。如果 E1 接口多于 limit
,则会生成提交错误,并且提交操作失败。
该示例脚本同时显示在 XSLT 和 SLAX 语法中:
XSLT 语法
<?xml version="1.0" standalone="yes"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0"> <xsl:import href="../import/junos.xsl"/> <xsl:param name="limit" select="16"/> <xsl:template match="configuration"> <xsl:variable name="interfaces" select="interfaces"/> <xsl:for-each select="$interfaces/interface[starts-with(name, 'cstm1-')]"> <xsl:variable name="triple" select="substring-after(name, 'cstm1-')"/> <xsl:variable name="e1name" select="concat('e1-', $triple)"/> <xsl:variable name="count" select="count($interfaces/interface[starts-with(name, $e1name)])"/> <xsl:if test="$count > $limit"> <xnm:error> <edit-path>[edit interfaces]</edit-path> <statement><xsl:value-of select="name"/></statement> <message> <xsl:text>E1 interface limit exceeded on CSTM1 IQ PIC. </xsl:text> <xsl:value-of select="$count"/> <xsl:text> E1 interfaces are configured, but only </xsl:text> <xsl:value-of select="$limit"/> <xsl:text> are allowed.</xsl:text> </message> </xnm:error> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet>
SLAX 语法
version 1.0; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; import "../import/junos.xsl"; param $limit = 16; match configuration { var $interfaces = interfaces; for-each ($interfaces/interface[starts-with(name, 'cstm1-')]) { var $triple = substring-after(name, 'cstm1-'); var $e1name = 'e1-' _ $triple; var $count = count($interfaces/interface[starts-with(name, $e1name)]); if ($count > $limit) { <xnm:error> { <edit-path> "[edit interfaces]"; <statement> name; <message> { expr "E1 interface limit exceeded on CSTM1 IQ PIC. "; expr $count; expr " E1 interfaces are configured, but only "; expr $limit; expr " are allowed."; } } } } }
配置
程序
逐步过程
要下载、启用和测试脚本:
将脚本复制到文本文件中,根据需要命名文件 e1-limit.xsl 或 e1-limit.slax ,然后将其复制到设备上的 /var/db/scripts/commit/ directory。
选择以下测试配置部分,然后按 Ctrl+c 将其复制到剪贴板。
如果您使用脚本的 SLAX 版本,请将层次结构级别的文件
[edit system scripts commit file]
名更改为 e1-limit.slax。system { scripts { commit { file e1-limit.xsl; } } } interfaces { cau4-0/1/0 { partition 1 interface-type ce1; partition 2-18 interface-type e1; } cstm1-0/1/0 { no-partition interface-type cau4; } ce1-0/1/0:1 { clocking internal; e1-options { framing g704; } partition 1 timeslots 1-4 interface-type ds; } ds-0/1/0:1:1 { no-keepalives; dce; encapsulation frame-relay; lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.0/31; } } } e1-0/1/0:2 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.2/31; } } } e1-0/1/0:3 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.4/31; } } } e1-0/1/0:4 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.6/31; } } } e1-0/1/0:5 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.8/31; } } } e1-0/1/0:6 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.10/31; } } } e1-0/1/0:7 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.12/31; } } } e1-0/1/0:8 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.14/31; } } } e1-0/1/0:9 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.16/31; } } } e1-0/1/0:10 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.18/31; } } } e1-0/1/0:11 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.20/31; } } } e1-0/1/0:12 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.22/31; } } } e1-0/1/0:13 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.24/31; } } } e1-0/1/0:14 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.26/31; } } } e1-0/1/0:15 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.28/31; } } } e1-0/1/0:16 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.30/31; } } } e1-0/1/0:17 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.32/31; } } } e1-0/1/0:18 { no-keepalives; per-unit-scheduler; dce; clocking internal; encapsulation frame-relay; e1-options { framing g704; } lmi { lmi-type ansi; } unit 100 { point-to-point; dlci 100; family inet { address 10.0.0.34/31; } } } }
在配置模式下
load merge terminal
,发出 命令将部分合并到设备配置中。[edit] user@host# load merge terminal [Type ^D at a new line to end input] ... Paste the contents of the clipboard here ...
出现提示时,使用鼠标和粘贴图标粘贴剪贴板的内容。
按 Enter。
按下 Ctrl+d。
提交配置。
user@host# commit
验证
验证提交脚本执行
目的
验证脚本是否按预期运行。
行动
查看命令的 commit
输出。样本配置部分将 cstm1-0/1/0 接口通道化为 17 个 E1 接口,因此脚本生成错误,提交操作失败。发出 commit
命令后,将显示以下输出:
[edit] user@host# commit [edit interfaces] 'cstm1-0/1/0' E1 interface limit exceeded on CSTM1 IQ PIC. 17 E1 interfaces are configured, but only 16 are allowed. error: 1 error reported by commit scripts error: commit script failure