If you want to enable the Label Distribution Protocol (LDP) on an interface, you must configure the interface at both the [edit protocols routing-protocol-name] and [edit protocols ldp] hierarchy levels. This example shows you how to use commit scripts to ensure that the interface is configured at both levels.
This example tests for interfaces that are configured at either the [edit protocols ospf] or [edit protocols isis] hierarchy level but not at the [edit protocols ldp] hierarchy level. If LDP is not enabled on the routing platform, there is no problem; otherwise, a warning is emitted with the message that the interface does not have LDP enabled.
In case you want some interfaces to be exempt from the LDP test, this script allows you to tag those interfaces as not requiring LDP by including the apply-macro no-ldp statement at the [edit protocols isis interface interface-name] or [edit protocols ospf area area-id interface interface-name] hierarchy level. For example:
protocols {
isis {
interface so-0/1/2.0 {
apply-macro no-ldp;
}
}
}
If the apply-macro no-ldp statement is included, the warning is not emitted.
A second test ensures that all LDP-enabled interfaces are configured for an interior gateway protocol (IGP). As for LDP, you can exempt some interfaces from the test by including the apply-macro no-igp statement at the [edit protocols ldp interface interface-name] hierarchy level. If that statement is not included and no IGP is configured, a warning is emitted.
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:template match="configuration">
<xsl:variable name="ldp" select="protocols/ldp"/>
<xsl:variable name="isis" select="protocols/isis"/>
<xsl:variable name="ospf" select="protocols/ospf"/>
<xsl:if test="$ldp">
<xsl:for-each select="$isis/interface/name | $ospf/area/interface/name">
<xsl:variable name="ifname" select="."/>
<xsl:if test="not(../apply-macro[name = 'no-ldp'])
and not($ldp/interface[name = $ifname])">
<xnm:warning>
<xsl:call-template name="jcs:edit-path"/>
<xsl:call-template name="jcs:statement"/>
<message>ldp not enabled for this interface</message>
</xnm:warning>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="protocols/ldp/interface/name">
<xsl:variable name="ifname" select="."/>
<xsl:if test="not(apply-macro[name = 'no-igp'])
and not($isis/interface[name = $ifname])
and not($ospf/area/interface[name = $ifname])">
<xnm:warning>
<xsl:call-template name="jcs:edit-path"/>
<xsl:call-template name="jcs:statement"/>
<message>
<xsl:text>ldp-enabled interface does not have </xsl:text>
<xsl:text>an IGP configured</xsl:text>
</message>
</xnm:warning>
</xsl:if>
</xsl:for-each>
</xsl:if>
</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";
match configuration {
var $ldp = protocols/ldp;
var $isis = protocols/isis;
var $ospf = protocols/ospf;
if ($ldp) {
for-each ($isis/interface/name | $ospf/area/interface/name) {
var $ifname = .;
if (not(../apply-macro[name = 'no-ldp']) and not($ldp/interface[name = $ifname])) {
<xnm:warning> {
call jcs:edit-path();
call jcs:statement();
<message> "ldp not enabled for this interface";
}
}
}
for-each (protocols/ldp/interface/name) {
var $ifname = .;
if (not(apply-macro[name = 'no-igp']) and not($isis/interface[name = $ifname]) and not($ospf/area/interface[name = $ifname])) {
<xnm:warning> {
call jcs:edit-path();
call jcs:statement();
<message> {
expr "ldp-enabled interface does not have ";
expr "an IGP configured";
}
}
}
}
}
}