This example limits the number of Asynchronous Transfer Mode (ATM) virtual circuits (VCs) configured on an ATM interface.
For each ATM interface, the set of corresponding VCs is selected. The number of those VCs, 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 ATM VCs 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="10"/>
<xsl:template match="configuration">
<xsl:for-each select="interfaces/interface[starts-with(name, 'at-')]">
<xsl:variable name="count" select="count(unit)"/>
<xsl:if test="$count > $limit">
<xnm:error>
<edit-path>[edit interfaces]</edit-path>
<statement><xsl:value-of select="name"/></statement>
<message>
<xsl:text>ATM VC limit exceeded; </xsl:text>
<xsl:value-of select="$count"/>
<xsl:text> 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 = 10;
match configuration {
for-each (interfaces/interface[starts-with(name, 'at-')]) {
var $count = count(unit);
if ($count > $limit) {
<xnm:error> {
<edit-path> "[edit interfaces]";
<statement> name;
<message> {
expr "ATM VC limit exceeded; ";
expr $count;
expr " 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-atm-vc-limit.xsl;
}
}
}
interfaces {
at-1/2/3 {
unit 15 {
family inet {
address 10.12.13.15/20;
}
}
unit 16 {
family inet {
address 10.12.13.16/20;
}
}
unit 17 {
family inet {
address 10.12.13.17/20;
}
}
unit 18 {
family inet {
address 10.12.13.18/20;
}
}
unit 19 {
family inet {
address 10.12.13.19/20;
}
}
unit 20 {
family inet {
address 10.12.13.20/20;
}
}
unit 21 {
family inet {
address 10.12.13.21/20;
}
}
unit 22 {
family inet {
address 10.12.13.22/20;
}
}
unit 23 {
family inet {
address 10.12.13.23/20;
}
}
unit 24 {
family inet {
address 10.12.13.24/20;
}
}
unit 25 {
family inet {
address 10.12.13.25/20;
}
}
unit 26 {
family inet {
address 10.12.13.26/20;
}
}
}
}
- [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]
'at-1/2/3'
ATM VC limit exceeded; 12 are configured but only 10 are allowed.
error: 1 error reported by commit scripts
error: commit script failure