Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

Navigation

Example: Controlling IS-IS and MPLS Interfaces

This example shows how to use commit scripts to decrease the amount of manual configuration.

Requirements

This example uses a device running Junos OS.

Overview and Commit Script

If you want to enable MPLS on an interface, you must make changes at both the [edit interfaces] and [edit protocols mpls] hierarchy levels. This example shows 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.

The example script is shown in both XSLT and SLAX syntax:

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

Configuration

Step-by-Step Procedure

To download, enable, and test the script:

  1. Copy the XSLT or SLAX script into a text file, name the file iso.xsl or iso.slax as appropriate, and copy it to the /var/db/scripts/commit/ directory on the device.
  2. Select the following test configuration stanzas, and press Ctrl+c to copy them to the clipboard.

    If you are using the SLAX version of the script, change the filename at the [edit system scripts commit file] hierarchy level to iso.slax.

    system {scripts {commit {file iso.xsl;}}}
    interfaces {lo0 {unit 0 {family iso;}}so-1/2/3 {unit 0 {family iso;}}so-1/3/2 {unit 0 {family iso;}}}
    protocols {mpls {enable;}}
  3. In configuration mode, issue the load merge terminal command to merge the stanzas into your device configuration.

    [edit]user@host# load merge terminal[Type ^D at a new line to end input]... Paste the contents of the clipboard here ...
    1. At the prompt, paste the contents of the clipboard by using the mouse and the paste icon.
    2. Press Enter.
    3. Press Ctrl+d.
  4. Issue the commit command to commit the configuration.

    user@host# commit

Verification

Verifying the Configuration

Purpose

Verify that the script behaves as expected.

Action

Review the output of the commit command.

[edit]
user@host# commit
[edit interfaces interface so-1/2/3 unit 0]
    warning: Adding 'family mpls' to ISO-enabled interface
[edit interfaces interface so-1/2/3 unit 0]
    warning: Adding ISO-enabled interface so-1/2/3.0 to [protocols mpls]
[edit interfaces interface so-1/3/2 unit 0]
    warning: Adding 'family mpls' to ISO-enabled interface
[edit interfaces interface so-1/3/2 unit 0]
    warning: Adding ISO-enabled interface so-1/3/2.0 to [protocols mpls]
commit complete

Issue the show interfaces command. Confirm that the loopback interface is not altered and that the SONET/SDH interfaces are altered.

[edit]user@host# show interfaces
so-1/2/3 {unit 0 {family iso;family mpls;}}
so-1/3/2 {unit 0 {family iso;family mpls;}}
lo0 {unit 0 {family iso;}}

Published: 2013-03-05

Published: 2013-03-05