Example: Imposing a Minimum MTU Setting
The maximum transmission unit (MTU) is the greatest amount of data or packet size (in bytes) that can be transferred in one physical frame on a network. In this example, a commit script tests the MTU of SONET/SDH interfaces. If the MTU is less than a specified minimum value, the commit script reports the error and causes the commit operation to fail.
Requirements
This example uses a device running Junos OS with SONET/SDH interfaces.
Overview and Commit Script
This example tests the MTU of SONET/SDH interfaces, reports when the MTU is less than the value of the min-mtu parameter, here set to 2048, and causes the commit operation to fail. The for loop selects all SONET/SDH interfaces that start with so- and that have an MTU statement that is defined and less than the value of min-mtu. For the selected interfaces, the script generates an error, which includes the location of the interface in the configuration hierarchy and the MTU configured for that interface.
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:param name="min-mtu" select="2048"/>
<xsl:template match="configuration">
<xsl:for-each select="interfaces/interface[starts-with(name, 'so-')
and mtu and mtu < $min-mtu]">
<xnm:error>
<xsl:call-template name="jcs:edit-path"/>
<xsl:call-template name="jcs:statement">
<xsl:with-param name="dot" select="mtu"/>
</xsl:call-template>
<message>
<xsl:text>SONET interfaces must have a minimum MTU of </xsl:text>
<xsl:value-of select="$min-mtu"/>
<xsl:text>.</xsl:text>
</message>
</xnm:error>
</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 $min-mtu = 2048;
match configuration {
for-each (interfaces/interface[starts-with(name, 'so-') and mtu and
mtu < $min-mtu]) {
<xnm:error> {
call jcs:edit-path();
call jcs:statement($dot = mtu);
<message> {
expr "SONET interfaces must have a minimum MTU of ";
expr $min-mtu;
expr ".";
}
}
}
}
Configuration
Step-by-Step Procedure
To download, enable, and test the script:
- Copy the XSLT or SLAX script into a text file, name the
file
so-mtu.xsl
orso-mtu.slax
as appropriate, and copy it to the/var/db/scripts/commit/
directory on the device. 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
so-mtu.slax
.system {scripts {commit {file so-mtu.xsl;}}}interfaces {so-1/2/2 {mtu 2048;}so-1/2/3 {mtu 576;}}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 ...- At the prompt, paste the contents of the clipboard by using the mouse and the paste icon.
- Press Enter.
- Press Ctrl+d.
Issue the commit command to commit the configuration.
user@host# commit
Verification
Verifying the Commit Script Output
Purpose
Verify that the script behaves as expected.
Action
Review the output of the commit command. The sample configuration stanzas configure two SONET/SDH interfaces so-1/2/2 and so-1/2/3. The so-1/2/3 interface is configured with an MTU of 576, so the script generates an error message, and the commit operation fails. The following output appears after issuing a commit command:
[edit]
user@host# commit
[edit interfaces interface so-1/2/3]
'mtu 576;'
SONET interfaces must have a minimum MTU of 2048.
error: 1 error reported by commit scripts
error: commit script failure