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