Example: Assign a Classifier Using a Commit Script
For each interface configured with the IPv4 protocol family, this commit script automatically assigns a specified classifier, which associates incoming packets with a forwarding class and loss priority as well as assigns packets to an output queue.
Requirements
This example uses a device running Junos OS.
Overview and Commit Script
In the Junos OS class of service (CoS), classifiers allow you to associate incoming packets with a forwarding class and loss priority and, based on the associated forwarding class, assign packets to output queues. After you configure a classifier, you must assign it to an input interface.
For each interface configured with the IPv4 protocol family,
this script automatically assigns a specified classifier called fc-q3
. The fc-q3
classifier
must be configured at the [edit class-of-service]
hierarchy
level.
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="cos-all" select="class-of-service"/> <xsl:for-each select="interfaces/interface[contains(name, '/')]/unit[family/inet]"> <xsl:variable name="ifname" select="../name"/> <xsl:variable name="unit" select="name"/> <xsl:variable name="cos" select="$cos-all/interfaces[name = $ifname]"/> <xsl:if test="not($cos/unit[name = $unit])"> <xsl:call-template name="jcs:emit-change"> <xsl:with-param name="message"> <xsl:text>Adding CoS forwarding class for </xsl:text> <xsl:value-of select="concat($ifname, '.', $unit)"/> </xsl:with-param> <xsl:with-param name="dot" select="$cos-all"/> <xsl:with-param name="content"> <interfaces> <name><xsl:value-of select="$ifname"/></name> <unit> <name><xsl:value-of select="$unit"/></name> <forwarding-class>fc-q3</forwarding-class> </unit> </interfaces> </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 $cos-all = class-of-service; for-each (interfaces/interface[contains(name, '/')]/unit[family/inet]) { var $ifname = ../name; var $unit = name; var $cos = $cos-all/interfaces[name = $ifname]; if (not($cos/unit[name = $unit])) { call jcs:emit-change($dot = $cos-all) { with $message = { expr "Adding CoS forwarding class for "; expr $ifname _ '.' _ $unit; } with $content = { <interfaces> { <name> $ifname; <unit> { <name> $unit; <forwarding-class> "fc-q3"; } } } } } } }
Configuration
Procedure
Step-by-Step Procedure
To download, enable, and test the script:
Copy the script into a text file, name the file classifier.xsl or classifier.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 classifier.slax.system { scripts { commit { file classifier.xsl; } } } interfaces { fe-0/0/0 { unit 0 { family inet { address 10.168.16.2/24; } } } } class-of-service { forwarding-classes { queue 3 fc-q3; } classifiers { inet-precedence fc-q3 { forwarding-class fc-q3 { loss-priority low code-points 010; } } } }
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.
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. In
the test configuration stanzas, the fe-0/0/0.0 interface is configured
with the family inet
statement. Because the interface is
configured with the IPv4 protocol family, the script automatically
assigns the fc-q3
classifier to the interface,
which is indicated in the commit
command output.
[edit] user@host# commit [edit interfaces interface fe-0/0/0 unit 0] warning: Adding CoS forwarding class for fe-0/0/0.0 commit complete
View the configuration to verify that the script-generated
changes are present. Issue the show class-of-service
configuration
mode command. The output shows that the fe-0/0/0.0 interface has been
assigned the fc-q3
classifier:
[edit] user@host# show class-of-service classifiers { inet-precedence fc-q3 { forwarding-class fc-q3 { loss-priority low code-points 010; } } } forwarding-classes { queue 3 fc-q3; } interfaces { fe-0/0/0 { unit 0 { forwarding-class fc-q3; # Added by commit script } } }