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

Testing ex-iso.xsl

To test the example in this section, perform the following steps:

  1. From Controlling IS-IS and MPLS Interfaces, copy the Extensible Stylesheet Language Transformations (XSLT) or SLAX script into a text file, and name the file ex-iso.xsl. Copy the ex-iso.xsl file to the /var/db/scripts/commit directory on your routing platform.
  2. Select the following configuration, and press Ctrl+c to copy it to the clipboard. If you are using the SLAX version of the script, change the filename to filename.slax.
    system {
        scripts {
            commit {
                file ex-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. Merge the configuration into your routing platform configuration by issuing the load merge terminal configuration mode command:
    [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 using the mouse and the paste icon.
    2. Press Enter.
    3. Press Ctrl+d.
  4. Issue the commit command. When you issue the commit command, the following output appears:
    [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
  5. Issue the show interfaces command. Confirm that the loopback interface is not altered, and 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;
        }
    }

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