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

Limiting the Number of E1 Interfaces

This example limits the number of E1 interfaces configured on a Channelized STM1 Intelligent Queuing (IQ) Physical Interface Card (PIC).

For each channelized STM1 interface (cstm1-), the set of corresponding E1 interfaces is selected. The number of those interfaces, 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 E1 interfaces 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="16"/>

    <xsl:template match="configuration">
        <xsl:variable name="interfaces" select="interfaces"/>
        <xsl:for-each select="$interfaces/interface[starts-with(name, 'cstm1-')]">
            <xsl:variable name="triple" select="substring-after(name, 'cstm1-')"/>
            <xsl:variable name="e1name" select="concat('e1-', $triple)"/>
            <xsl:variable name="count"
                  select="count($interfaces/interface[starts-with(name, $e1name)])"/>
            <xsl:if test="$count > $limit">
                <xnm:error>
                    <edit-path>[edit interfaces]</edit-path>
                    <statement><xsl:value-of select="name"/></statement>
                    <message>
                        <xsl:text>E1 interface limit exceeded on CSTM1 IQ PIC. </xsl:text>
                        <xsl:value-of select="$count"/>
                        <xsl:text> E1 interfaces 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 = 16;

match configuration {
    var $interfaces = interfaces;

    for-each ($interfaces/interface[starts-with(name, 'cstm1-')]) {
        var $triple = substring-after(name, 'cstm1-');
        var $e1name = 'e1-' _ $triple;
        var $count = count($interfaces/interface[starts-with(name, $e1name)]);

        if ($count > $limit) {
            <xnm:error> {
                <edit-path> "[edit interfaces]";
                <statement> name;
                <message> {
                    expr "E1 interface limit exceeded on CSTM1 IQ PIC. ";
                    expr $count;
                    expr " E1 interfaces are configured, but only ";
                    expr $limit;
                    expr " are allowed.";
                }
            }
        }
    }
}

Testing ex-16-e1-limit.xsl

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

  1. From Limiting the Number of E1 Interfaces, copy the XSLT script into a text file, and name the file ex-16-e1-limit.xsl. Copy the ex-16-e1-limit.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-16-e1-limit.xsl;
            }
        }
    }
    interfaces {
        cau4-0/1/0 {
            partition 1 interface-type ce1;
            partition 2-18 interface-type e1;
        }
        cstm1-0/1/0 {
            no-partition interface-type cau4;
        }
        ce1-0/1/0:1 {
            clocking internal;
            e1-options {
                framing g704;
            }
            partition 1 timeslots 1-4 interface-type ds;
        }
        ds-0/1/0:1:1 {
            no-keepalives;
            dce;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.0/31;
                }
            }
        }
        e1-0/1/0:2 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.2/31;
                }
            }
        }
        e1-0/1/0:3 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.4/31;
                }
            }
        }
        e1-0/1/0:4 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.6/31;
                }
            }
        }
        e1-0/1/0:5 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.8/31;
                }
            }
        }
        e1-0/1/0:6 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.10/31;
                }
            }
        }
        e1-0/1/0:7 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.12/31;
                }
            }
        }
        e1-0/1/0:8 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.14/31;
                }
            }
        }
        e1-0/1/0:9 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.16/31;
                }
            }
        }
        e1-0/1/0:10 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.18/31;
                }
            }
        }
        e1-0/1/0:11 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.20/31;
                }
            }
        }
        e1-0/1/0:12 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.22/31;
                }
            }
        }
        e1-0/1/0:13 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.24/31;
                }
            }
        }
        e1-0/1/0:14 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.26/31;
                }
            }
        }
        e1-0/1/0:15 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.28/31;
                }
            }
        }
        e1-0/1/0:16 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.30/31;
                }
            }
        }
        e1-0/1/0:17 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.32/31;
                }
            }
        }
        e1-0/1/0:18 {
            no-keepalives;
            per-unit-scheduler;
            dce;
            clocking internal;
            encapsulation frame-relay;
            lmi {
                lmi-type ansi;
            }
            e1-options {
                framing g704;
            }
            unit 100 {
                point-to-point;
                dlci 100;
                family inet {
                    address 10.0.0.34/31;
                }
            }
        }
    }
  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]
        'cstm1-0/1/0'
        E1 interface limit exceeded on CSTM1 IQ PIC.
        17 E1 interfaces are configured, but only 16 are allowed.
    error: 1 error reported by commit scripts
    error: commit script failure

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