Example: Assigning a Classifier
In 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.
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";
}
}
}
}
}
}
}
Testing the ex-classifier Script
To test the ex-classifier script,
perform the following steps:
- Copy the XSLT or SLAX script from Example: Assigning a Classifier into a text file, name the file
ex-classifier.xslorex-classifier.slaxas appropriate, and copy it to the/var/db/scripts/commitdirectory on the device. Select the following 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 ex-classifier.slax.
system {scripts {commit {file ex-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 using the mouse and the paste icon.
- Press Enter.
- Press Ctrl+d.
Issue the commit command. The following output appears:
[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
The output from the show class-of-service configuration mode command now shows that the fe-0/0/0.0 interface has been assigned the fc-q3 classifier:
Hide Navigation Pane
Show Navigation Pane
Download
SHA1