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.";
}
}
}
}
}