This example limits the number of E1 interfaces configured on a Channelized STM1 Intelligent Queuing (IQ) Physical Interface Card (PIC).
For each channelized STM1 interface (cstm1-), the set of corresponding E1 interfaces is selected. The number of those interfaces, as determined by the built-in Extensible Stylesheet Language Transformations (XSLT) count() function, cannot exceed the limit set by the global variable $limit. If there are more E1 interfaces than $limit, a commit error is generated and the commit operation fails.
XSLT Syntax
<?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 Syntax
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.";
}
}
}
}
}
To test the example in this section, perform the following steps:
system {
scripts {
commit {
file ex-16-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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
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;
lmi {
lmi-type ansi;
}
e1-options {
framing g704;
}
unit 100 {
point-to-point;
dlci 100;
family inet {
address 10.0.0.34/31;
}
}
}
}
- [edit]
- user@host# load merge terminal
- [Type ^D at a new line to end input]
- > Paste the contents of the clipboard here<
[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