[Contents] [Prev] [Next] [Index] [Report an Error]

Controlling IS-IS and MPLS Interfaces

If you want to enable Multiprotocol Label Switching (MPLS) on an interface, you must make changes at both the [edit interfaces] and [edit protocols mpls] hierarchy levels. This example shows you how to use commit scripts to decrease the amount of manual configuration.

This example performs two related tasks. If an interface has [family iso] configured but not [family mpls], a configuration change is made (using the <jcs:emit-change> template) to enable MPLS. MPLS is not valid on loopback interfaces (loX), so this script ignores loopback interfaces. Secondly, if the interface is not configured at the [edit protocols mpls] hierarchy level, a change is made to add the interface. Both changes are accompanied by appropriate warning messages.

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="mpls" select="protocols/mpls"/>
        <xsl:for-each select="interfaces/interface[not(starts-with(name,'lo'))]
                                        /unit[family/iso]">
            <xsl:variable name="ifname" select="concat(../name, '.', name)"/>
            <xsl:if test="not(family/mpls)">
                <xsl:call-template name="jcs:emit-change">
                    <xsl:with-param name="message">
                        <xsl:text>Adding 'family mpls' to ISO-enabled interface</xsl:text>
                    </xsl:with-param>
                    <xsl:with-param name="content">
                        <family>
                            <mpls/>
                        </family>
                    </xsl:with-param>
                </xsl:call-template>
            </xsl:if>
            <xsl:if test="$mpls and not($mpls/interface[name = $ifname])">
                <xsl:call-template name="jcs:emit-change">
                    <xsl:with-param name="message">
                        <xsl:text>Adding ISO-enabled interface </xsl:text>
                        <xsl:value-of select="$ifname"/>
                        <xsl:text> to [protocols mpls]</xsl:text>
                    </xsl:with-param>
                    <xsl:with-param name="dot" select="$mpls"/>
                    <xsl:with-param name="content">
                        <interface>
                            <name>
                                <xsl:value-of select="$ifname"/>
                            </name>
                        </interface>
                    </xsl:with-param>
                </xsl:call-template>
            </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";
match configuration {
    var $mpls = protocols/mpls;

    for-each (interfaces/interface[not(starts-with(name, "lo"))]/unit[family/iso]) {
        var $ifname = ../name _ '.' _ name;

        if (not(family/mpls)) {
            call jcs:emit-change() {
                with $message = {
                    expr "Adding 'family mpls' to ISO-enabled interface";
                }
                with $content = {
                    <family> {
                        <mpls>;
                    }
                }
            }
        }
        if ($mpls and not($mpls/interface[name = $ifname])) {
            call jcs:emit-change($dot = $mpls) {
                with $message = {
                    expr "Adding ISO-enabled interface ";
                    expr $ifname;
                    expr " to [protocols mpls]";
                }
                with $content = {
                    <interface> {
                        <name> $ifname;
                    }
                }
            }
        }
    }
}

[Contents] [Prev] [Next] [Index] [Report an Error]