<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>ardenpackeer.com &#187; QoS &amp; VoIP</title>
	<atom:link href="http://ardenpackeer.com/category/qos-voip/feed/" rel="self" type="application/rss+xml" />
	<link>http://ardenpackeer.com</link>
	<description>Becoming a Cisco CCIE Network Ninja</description>
	<pubDate>Tue, 21 Oct 2008 09:19:03 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>QOS: Configuring Policing using the access-list rate-limit command</title>
		<link>http://ardenpackeer.com/qos-voip/qos-configuring-policing-using-the-access-list-rate-limit-command/</link>
		<comments>http://ardenpackeer.com/qos-voip/qos-configuring-policing-using-the-access-list-rate-limit-command/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 08:30:17 +0000</pubDate>
		<dc:creator>Arden Packeer, CCIE #20716</dc:creator>
		
		<category><![CDATA[QoS &amp; VoIP]]></category>

		<category><![CDATA[Tutorials]]></category>

		<category><![CDATA[access list]]></category>

		<category><![CDATA[access-list rate-limit]]></category>

		<category><![CDATA[Class-map]]></category>

		<category><![CDATA[mqc]]></category>

		<category><![CDATA[policing]]></category>

		<category><![CDATA[qos]]></category>

		<guid isPermaLink="false">http://ardenpackeer.com/qos-voip/qos-configuring-policing-using-the-access-list-rate-limit-command/</guid>
		<description><![CDATA[Let's say you have a scenario that says we want to configure R2 such that all inbound traffic marked with an IP precedence of 5 and 3 should be limitied to a maximum of 1Mbps. Anything above this rate should be discarded. 

Sounds simple enough. What are the different IOS tools that you can accomplish this?]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s say you have a scenario that says we want to configure R2 such that all inbound traffic marked with an IP precedence of 5 and 3 should be limitied to a maximum of 1Mbps. Anything above this rate should be discarded. </p>
<p>Sounds simple enough. What are the different IOS tools that you can use accomplish this?</p>
<h3 class="mast">Method 1: MQC</h3>
<pre>
<code>ip access-list extended PRECEDENCE53
 permit ip any any precedence 5
 permit ip any any precedence 3

class-map match-any PRECEDENCE53
  match access-group name PRECEDENCE53
!
!
policy-map CAR
  class PRECEDENCE53
     police 1000000 35000 35000 conform-action transmit exceed-action drop
!
interface FastEthernet0/0
 service-policy input CAR</code>
</pre>
<p>Pretty simple really. We have used an extended access-list that matches IP Precedence values 5 and 3 on class &#8220;PRECEDENCE53&#8243;. All traffic in that class will be policed to 1Mbs (the normal and burst sizes have been set to 35,000). </p>
<p>Let&#8217;s verify this:</p>
<p><strong>Verification:</strong></p>
<pre>
<code>R2#sh policy-map int f0/0
 FastEthernet0/0 

  Service-policy input: CAR

    Class-map: PRECEDENCE53 (match-any)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: access-group name PRECEDENCE53
        0 packets, 0 bytes
        5 minute rate 0 bps
      police:
        1000000 bps, 35000 limit
        conformed 0 packets, 0 bytes; action: transmit
        exceeded 0 packets, 0 bytes; action: drop
        conformed 0 bps, exceed 0 bps

    Class-map: class-default (match-any)
      17 packets, 1258 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any </code>
</pre>
<p>Looks good. How about we do the same thing, but this time using the traditional rate-limit command?</p>
<h3 class="mast">Method 2: Rate-Limit with extended access-list</h3>
<pre>
<code>access-list 101 permit ip any any precedence 5
access-list 101 permit ip any any precedence 3
!
interface FastEthernet0/0
 rate-limit input access-group 101 1000000 35000 35000 conform-action transmit exceed-action drop</code>
</pre>
<p>Not much different really (just less typing!). Let&#8217;s verify this:</p>
<p><strong>Verification:</strong></p>
<pre>
<code>R2#sh int f0/0 rate-limit 

FastEthernet0/0
  Input
    matches: access-group 101
      params:  1000000 bps, 35000 limit, 35000 extended limit
      conformed 0 packets, 0 bytes; action: transmit
      exceeded 0 packets, 0 bytes; action: drop
      last packet: 97872632ms ago, current burst: 0 bytes
      last cleared 00:00:07 ago, conformed 0 bps, exceeded 0 bps</code>
</pre>
<p>Looks great. </p>
<h3 class="mast">Method 3: Access-list rate-limit command</h3>
<p>Now, for the twist! I&#8217;m going to add one more condition. <strong>We are only allowed to have a 1 line ACL for this.</strong> What the?! How are we going to do that. The extended access-lists (whether named or not) only allow you to match one precedence per line! Enter the access-list rate-limit command!</p>
<p>There is always more than one way to skin a cat (poor cat!&#8230;whoever came up with that expression is one sick puppy). The CCIE exam often forces us to perform a task in multiple ways. Each methos acts like a little tool in your toolkit that you can whip out at a moments notice. This is no exception. </p>
<p>Let&#8217;s take a look at that rate-limit command closely:</p>
<pre>
<code>R2(config)#int f0/0
R2(config-if)#rate-limit input access-group ?
  &lt;1-2699&gt;    Access list index
  rate-limit  Match rate-limit access list

R2(config-if)#rate-limit input access-group rate-limit ?
  &lt;0-99&gt;     Rate-limit prec access list index
  &lt;100-199&gt;  Rate-limit mac access list index
  &lt;200-299&gt;  Rate-limit exp access list index</code>
</pre>
<p>Looks like when you define an access-list on the rate-limit command, you have the option of specifying a special type of access list.</p>
<pre>
<code>R2(config)#access-list ?
  &lt;1-99&gt;            IP standard access list
  &lt;100-199&gt;         IP extended access list
  &lt;1000-1099&gt;       IPX SAP access list
  &lt;1100-1199&gt;       Extended 48-bit MAC address access list
  &lt;1200-1299&gt;       IPX summary address access list
  &lt;1300-1999&gt;       IP standard access list (expanded range)
  &lt;200-299&gt;         Protocol type-code access list
  &lt;2000-2699&gt;       IP extended access list (expanded range)
  &lt;300-399&gt;         DECnet access list
  &lt;400-499&gt;         XNS standard access list
  &lt;500-599&gt;         XNS extended access list
  &lt;600-699&gt;         Appletalk access list
  &lt;700-799&gt;         48-bit MAC address access list
  &lt;800-899&gt;         IPX standard access list
  &lt;900-999&gt;         IPX extended access list
  dynamic-extended  Extend the dynamic ACL abolute timer
  rate-limit        Simple rate-limit specific access list</code>
</pre>
<p>See that right at the end there (I never really noticed it before today either!). What the hell is that thing?</p>
<pre>
<code>R2(config)#access-list rate-limit ?
  &lt;0-99&gt;     Precedence ACL index
  &lt;100-199&gt;  MAC address ACL index
  &lt;200-299&gt;  mpls exp ACL index</code>
</pre>
<p>Well looks like we can match Precedence, MAC, or MPLS experimental bits. We want Precedence&#8230;</p>
<pre>
<code>R2(config)#access-list rate-limit 1 ?
  &lt;0-7&gt;  Precedence
  mask   Use precedence bitmask</code>
</pre>
<p>Looks promising, I wander if you can specify more than one Precedence? That would solve our problem!</p>
<pre>
<code>R2(config)#access-list rate-limit 1 7 ?
  &lt;cr&gt;</code>
</pre>
<p>Doh! Damn, but what about that mask option? Well turns out, according to the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios122/122cgcr/fqos_r/qrfcmd1.htm#wp1017391" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');">access-list rate-limit documentation</a>, we can specify more than one precedence value using a mask! Cool!</p>
<pre>
<code>R2(config)#access-list rate-limit 1 mask ?
  &lt;0-FF&gt;  Precedence bit mask</code>
</pre>
<p>There area 8 IP precedence values <0-7>. To calculate the rate-limit mask, each bit corresponds to one IP Precedence value so:</p>
<table>
<tr>
<td><strong>IP Precedence Value</strong></td>
<td><strong>Rate-Limit binary value</strong></td>
</tr>
<tr>
<td>0</td>
<td>00000001</td>
</tr>
<tr>
<td>1</td>
<td>00000010</td>
</tr>
<tr>
<td>2</td>
<td>00000100</td>
</tr>
<tr>
<td>3</td>
<td>00001000</td>
</tr>
<tr>
<td>4</td>
<td>00010000</td>
</tr>
<tr>
<td>5</td>
<td>00100000</td>
</tr>
<tr>
<td>6</td>
<td>01000000</td>
</tr>
<tr>
<td>7</td>
<td>10000000</td>
</tr>
</table>
<p>So If I want to match IP Precedence 5 and 3 thats:</p>
<p>00100000 + 00001000 = 00101000</p>
<p>Converting 00101000 to hex gives us 0&#215;28. </p>
<p>So the corresponding rate-limit mask to match IP precedence 5 and 3 is:</p>
<pre>
<code>R2(config)#access-list rate-limit 1 mask 28</code>
</pre>
<p>Our final configuration then (using a 1 line access-list) is:</p>
<pre>
<code>access-list rate-limit 1 mask 28
!
interface FastEthernet0/0
 rate-limit input access-group rate-limit 1 1000000 35000 35000 conform-action transmit exceed-action drop</code>
</pre>
<p><strong>Verification:</strong></p>
<pre>
<code>R2#sh int f0/0 rate-limit 

FastEthernet0/0
  Input
    matches: access-group rate-limit 1
      params:  1000000 bps, 25000 limit, 25000 extended limit
      conformed 0 packets, 0 bytes; action: transmit
      exceeded 0 packets, 0 bytes; action: drop
      last packet: 100597644ms ago, current burst: 0 bytes
      last cleared 00:33:18 ago, conformed 0 bps, exceeded 0 bps

R2#sh access-lists
Rate-limit access list 1
    mask 28</code>
</pre>
<p>So we have managed to solve the scenario in two lines! Bring on those &#8220;use the minimum configuration possible&#8221; questions! Hope this helps! Now back to labs.</p>
<p>Read this article and more like it on <a href="http://ardenpackeer.com" >ardenpackeer.com</a>
<br>
Follow me on twitter: <a href="http://twitter.com/ardenpackeer" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">http://twitter.com/ardenpackeer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ardenpackeer.com/qos-voip/qos-configuring-policing-using-the-access-list-rate-limit-command/feed/</wfw:commentRss>
		</item>
		<item>
		<title>QOS: Applying CBWFQ to a sub-interface</title>
		<link>http://ardenpackeer.com/qos-voip/qos-applying-cbwfq-to-a-sub-interface/</link>
		<comments>http://ardenpackeer.com/qos-voip/qos-applying-cbwfq-to-a-sub-interface/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 22:16:05 +0000</pubDate>
		<dc:creator>Arden Packeer, CCIE #20716</dc:creator>
		
		<category><![CDATA[QoS &amp; VoIP]]></category>

		<category><![CDATA[Tutorials]]></category>

		<category><![CDATA[CBWFQ]]></category>

		<category><![CDATA[Class-map]]></category>

		<category><![CDATA[qos]]></category>

		<category><![CDATA[queueing]]></category>

		<category><![CDATA[shaping]]></category>

		<category><![CDATA[wfq]]></category>

		<guid isPermaLink="false">http://ardenpackeer.com/qos-voip/qos-applying-cbwfq-to-a-sub-interface/</guid>
		<description><![CDATA[By default IOS does not let you apply CBWFQ directly to a sub interface. I ran into this scenario and worked my way around it in a workbook lab (IE Workbook Vol 2 - Lab 15). I thought it was pretty cool and hopefully it helps someone else out..]]></description>
			<content:encoded><![CDATA[<p>By default IOS does not let you apply CBWFQ directly to a sub interface. I ran into this scenario and worked my way around it in a workbook lab (IE Workbook Vol 2 - Lab 15). I thought it was pretty cool and hopefully it helps someone else out:</p>
<p>Lets take a look at the basic CBWFQ configuration:</p>
<pre>
<code>class-map match-any TELNET
  match protocol telnet
class-map match-any FTP
  match protocol ftp
class-map match-any WWW
  match protocol http
!
!
policy-map QOS
  class WWW
   bandwidth percent 60
   queue-limit 30
  class FTP
   bandwidth percent 35
  class TELNET
   bandwidth percent 5</code>
</pre>
<p>Pretty straight forward. We are giving 60 percent of the bandwidth to http traffic, 35% of the bandwidth to ftp, and 5% of the bandwidth to telnet traffic in times of congestoin. I tried applying it to a sub-interface:</p>
<pre>
<code>R5(config)#int f0/0.52
R5(config-subif)#service-policy out QOS
 CBWFQ : Not supported on sub-interfaces</code>
</pre>
<p>Uh Oh! CBWFQ is not supported on sub-interfaces. Lets try something to get around this:</p>
<pre>
<code>policy-map PARENT
  class class-default
   service-policy QOS</code>
</pre>
<p>We&#8217;ve used hierarchical policy-map, with a PARENT policy-map calling the QOS policy map (it&#8217;s child). The QOS policy map will apply to all traffic on the PARENT policy map. This way i&#8217;m not directly applying CBWFQ to the sub-interface as the parent policy map doesn&#8217;t technically have CBWFQ enabled on it (the child policy map, QOS, does!) Let&#8217;s try apply it to the sub-interface and see if it works:</p>
<pre>
<code>R5(config)#int f0/0.52
R5(config-subif)#service-policy out PARENT
 CBWFQ : Hierarchy supported only if shaping is configured in this class</code>
</pre>
<p>Still no good, but it says that it should work as long as shaping is applied! Let&#8217;s try it:</p>
<pre>
<code>policy-map PARENT
  class class-default
   shape average percent 100
   service-policy QOS</code>
</pre>
<pre>
<code>R5(config)#int f0/0.52
R5(config-subif)#service-policy out PARENT</code>
</pre>
<p>Woohoo no errors! Lets check it:</p>
<pre>
<code>R5#sh policy-map int f0/0.52
 FastEthernet0/0.52 

  Service-policy output: PARENT

    Class-map: class-default (match-any)
      596 packets, 49791 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any
      Traffic Shaping
           Target/Average   Byte   Sustain   Excess    Interval  Increment
             Rate           Limit  bits/int  bits/int  (ms)      (bytes)
        100000000/100000000 625000 2500000   2500000   25        312500   

        Adapt  Queue     Packets   Bytes     Packets   Bytes     Shaping
        Active Depth                         Delayed   Delayed   Active
        -      0         596       49791     0         0         no

      Service-policy : QOS

        Class-map: WWW (match-any)
          0 packets, 0 bytes
          5 minute offered rate 0 bps, drop rate 0 bps
          Match: protocol http
            0 packets, 0 bytes
            5 minute rate 0 bps
          Queueing
            Output Queue: Conversation 265
            Bandwidth 60 (%) Max Threshold 30 (packets)
            (pkts matched/bytes matched) 0/0
        (depth/total drops/no-buffer drops) 0/0/0

        Class-map: FTP (match-any)
          0 packets, 0 bytes
          5 minute offered rate 0 bps, drop rate 0 bps
          Match: protocol ftp
            0 packets, 0 bytes
            5 minute rate 0 bps
          Queueing
            Output Queue: Conversation 266
            Bandwidth 35 (%) Max Threshold 64 (packets)
            (pkts matched/bytes matched) 0/0
        (depth/total drops/no-buffer drops) 0/0/0

        Class-map: TELNET (match-any)
          0 packets, 0 bytes
          5 minute offered rate 0 bps, drop rate 0 bps
          Match: protocol telnet
            0 packets, 0 bytes
            5 minute rate 0 bps
          Queueing
            Output Queue: Conversation 267
            Bandwidth 5 (%) Max Threshold 64 (packets)
            (pkts matched/bytes matched) 0/0
        (depth/total drops/no-buffer drops) 0/0/0

        Class-map: class-default (match-any)
          596 packets, 49791 bytes
          5 minute offered rate 0 bps, drop rate 0 bps
          Match: any </code>
</pre>
<p>Looks good.</p>
<h3 class="mast">Summary:</h3>
<p>You can&#8217;t apply CBFWQ to a sub-interface directly. You have to create a parent policy-map and apply shaping before it can be applied to a sub-interface. Cool huh? I&#8217;m going to have to write a proper tutorial on this one when I have some time, right now i&#8217;m trying to fit in 12 hours of labs a day for the next 30 days.</p>
<p>Read this article and more like it on <a href="http://ardenpackeer.com" >ardenpackeer.com</a>
<br>
Follow me on twitter: <a href="http://twitter.com/ardenpackeer" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">http://twitter.com/ardenpackeer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ardenpackeer.com/qos-voip/qos-applying-cbwfq-to-a-sub-interface/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tutorial: What is the difference between bandwidth percent and bandwidth remaining percent?</title>
		<link>http://ardenpackeer.com/qos-voip/tutorial-what-is-the-difference-between-bandwidth-percent-and-bandwidth-remaining-percent/</link>
		<comments>http://ardenpackeer.com/qos-voip/tutorial-what-is-the-difference-between-bandwidth-percent-and-bandwidth-remaining-percent/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 00:24:38 +0000</pubDate>
		<dc:creator>Arden Packeer, CCIE #20716</dc:creator>
		
		<category><![CDATA[QoS &amp; VoIP]]></category>

		<category><![CDATA[Tutorials]]></category>

		<category><![CDATA[bandwidth]]></category>

		<category><![CDATA[CBWFQ]]></category>

		<category><![CDATA[congestion management]]></category>

		<category><![CDATA[fair-queue]]></category>

		<category><![CDATA[mqc]]></category>

		<category><![CDATA[nbar]]></category>

		<category><![CDATA[qos]]></category>

		<category><![CDATA[queueing]]></category>

		<guid isPermaLink="false">http://ardenpackeer.com/qos-voip/tutorial-what-is-the-difference-between-bandwidth-percent-and-bandwidth-remaining-percent/</guid>
		<description><![CDATA[One of the most common questions that CCIE candidates face when studying QOS MQC for the lab is "What is the difference between bandwidth percent and bandwidth remaining percent?". Both are used in CBWFQ when implementing congestion management but what is the difference?  The answer to this questions are the focus of this tutorial.]]></description>
			<content:encoded><![CDATA[<p>One of the most common questions that CCIE candidates face when studying QOS MQC for the lab is &#8220;What is the difference between bandwidth percent and bandwidth remaining percent?&#8221;. Both are used in CBWFQ when implementing congestion management but what is the difference?  The answer to this question is the focus of this tutorial.</p>
<p>We will be using the following topology for this tutorial:</p>
<div class="captionfull"><img src='http://ardenpackeer.com/wp-content/uploads/2008/03/bandwidth.gif' alt='Bandwidth Tutorial Topology' /></div>
<p>You can <a href="http://ardenpackeer.com/wp-content/uploads/2008/03/bandwidth.net" >download the dynagen .net configuration file</a> here.</p>
<p><strong>The Scenario:</strong><br />
&#8220;The users on the 1.1.1.0/24 subnet have been complaining of slow network response times recently when connecting to services on the 2.2.2.0/24. Users on the 1.1.1.0/24 subnet use voice and web applications. During times of congestion we want the web applications to be guaranteed bandwidth. Also, delay sensitive Voice traffic needs to be given priority over all other traffic.&#8221;</p>
<p>The scenario above is typical of something you might see in your environment. We have congestion happening on an interface on the ethernet link between R1 and R2. We need to implement a congestion management strategy during times of congestion so that voice and web traffic are given traffic guarantees. Lets say that we want to reserve at least 20% of the bandwidth during times of congestion for web traffic. Lets implement that first and we&#8217;ll get back to voice traffic later.</p>
<p>First lets just do a quick check of bandwidth of R1:</p>
<pre>
<code>R1(config)#int f1/0
R1(config-if)#fair-queue </code>
</pre>
<pre>
<code>R1#sh queueing int f1/0
Interface FastEthernet1/0 queueing strategy: fair
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: weighted fair
  Output queue: 0/1000/64/0 (size/max total/threshold/drops)
     Conversations  0/1/256 (active/max active/max total)
     Reserved Conversations 0/0 (allocated/max allocated)
     Available Bandwidth 75000 kilobits/sec</code>
</pre>
<p>You can see above the available bandwidth when you implement a fair-queueing on an interface is 75,000 kbs. Wait a second, this is a fast ethernet interface! Shouldn&#8217;t the available bandwidth be 100,000 kbs (100 Mbs). Why are we operating at only 75%? What happened to the other 25%?</p>
<p>We&#8217;ve implemented fair queueing on the interface between R1 and R2. Now, fair queing is a congestion management strategy but probably not the congestion management strategy we want to use for this particular scenario. For the moment, we just want to see the affect of any congestion management strategy on an interface and set a baseline for this tutorial. </p>
<p>By default, when a congestion management strategy like Fair Queueing or CBWFQ is implemented on an interface 25% is reserved for things like routing protocol updates and important layer 2 traffic. 25% of 100 mbs is quite a lot for routing updates! Let&#8217;s change this:</p>
<pre>
<code>R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#int f1/0
R1(config-if)#max-reserved-bandwidth 100
R1(config-if)#end</code>
</pre>
<pre>
<code>R1#sh queueing int f1/0
Interface FastEthernet1/0 queueing strategy: fair
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: weighted fair
  Output queue: 0/1000/64/0 (size/max total/threshold/drops)
     Conversations  0/1/256 (active/max active/max total)
     Reserved Conversations 0/0 (allocated/max allocated)
     Available Bandwidth 100000 kilobits/sec</code>
</pre>
<p>You can see above that we used the <a href="http://www.cisco.com/en/US/docs/ios/12_3t/qos/command/reference/qos_m1gt.html#wp1113113" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');">max-reserved-bandwidth</a> command so that we can use 100% of the interface bandwidth (ie. none of the bandwidth is reserved). </p>
<p>Now that we&#8217;ve set up the bandwidth lets set up CBWFQ. We&#8217;ll reserve 20% of the bandwidth for web traffic during times of congestion:</p>
<pre>
<code>class-map match-any WEB
 match protocol http
!
policy-map QOS
 class WEB
  bandwidth percent 20
!
interface FastEthernet1/0
 no fair-queue
 max-reserved-bandwidth 100
 service-policy output QOS</code>
</pre>
<p>You can see above we are using NBAR to match the http protocol, and reserving 20% of the link bandwidth when congestion occurs using the<a href="http://www.cisco.com/en/US/docs/ios/12_3t/qos/command/reference/qos_a1gt.html#wp1117802" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');"> bandwidth percent</a> command.</p>
<p>Let&#8217;s verify this:</p>
<pre>
<code>R1#sh queueing int f1/0
Interface FastEthernet1/0 queueing strategy: fair
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: Class-based queueing
  Output queue: 0/1000/64/0 (size/max total/threshold/drops)
     Conversations  0/1/256 (active/max active/max total)
     Reserved Conversations 1/1 (allocated/max allocated)
     Available Bandwidth 80000 kilobits/sec</code>
</pre>
<p>You can see above that 80,000 kbs is now available. This doesn&#8217;t mean that http traffic can <em>ONLY</em> use 20% of the link (the bandwidth command does not have a built in policer). The bandwidth command only comes into play <em>when there is congestion on the interface</em>. This configuration is telling IOS that when congestion occurs, keep a <em>minimum</em> of 20% (20,000 kbs) of the bandwidth for http traffic. </p>
<p>The <a href="http://www.cisco.com/en/US/docs/ios/12_3t/qos/command/reference/qos_s3gt.html#wp1060510" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');">show queueing interface</a> command shows that when congestion occurs 80% of the bandwidth is available for use for everything else. </p>
<p>Lets add a reservation for voice:</p>
<pre>
<code>class-map match-any WEB
 match protocol http
class-map match-any VOICE
 match protocol rtp audio
 match protocol rtcp
!
policy-map QOS
 class WEB
  bandwidth percent 20
 class VOICE
  priority percent 10</code>
</pre>
<p>What we&#8217;ve done here is add a LLQ (low latency queue) for voice traffic. We are using NBAR to match the voice rtp stream and control protocol. The <a href="http://www.cisco.com/en/US/docs/ios/12_3t/qos/command/reference/qos_o1gt.html#wp1076758" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');">priority</a> command sets up a low latency queue for the voice class. What this means is that voice traffic will be served before all other traffic. The priority command implements a built-in policer. This means that voice traffic will be served first, with a bandwidth gaurantee upto a <em>maximum</em> of 10% of the interface when there is congestion. This is to stop the LLQ starving all the other queues of traffic.</p>
<pre>
<code>R1#sh queueing int f1/0
Interface FastEthernet1/0 queueing strategy: fair
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: Class-based queueing
  Output queue: 0/1000/64/0 (size/max total/threshold/drops)
     Conversations  0/1/256 (active/max active/max total)
     Reserved Conversations 1/1 (allocated/max allocated)
     Available Bandwidth 70000 kilobits/sec</code>
</pre>
<p>You can see here the available bandwidth has been changed to 70% available bandwidth (70,000 kbs). This makes sense, we are using 10% for voice and 20% for web traffic.</p>
<p><strong>Bandwidth Remaining Percent</strong><br />
So what does the <a href="http://www.cisco.com/en/US/docs/ios/12_3t/qos/command/reference/qos_a1gt.html#wp1117802" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');">bandwidth remaining percent</a> do then? We will change the bandwidth reservation of the web class so it uses the bandwidth remaining percent command and see the effect on the show queueing interface command.</p>
<pre>
<code>class-map match-any WEB
 match protocol http
class-map match-any VOICE
 match protocol rtp audio
 match protocol rtcp
!
policy-map QOS
 class WEB
  bandwidth remaining percent 20
 class VOICE
  priority percent 10</code>
</pre>
<pre>
<code>R1#sh queueing int f1/0
Interface FastEthernet1/0 queueing strategy: fair
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: Class-based queueing
  Output queue: 0/1000/64/0 (size/max total/threshold/drops)
     Conversations  0/1/256 (active/max active/max total)
     Reserved Conversations 1/1 (allocated/max allocated)
     Available Bandwidth 90000 kilobits/sec</code>
</pre>
<p>You can see above we have changed the bandwidth percent command to a bandwidth remaining percent. Take a look at that available bandwith. 90% is available?! Didn&#8217;t we just make a reservation for web traffic of 20%? </p>
<p>The bandwidth remaining percent command makes a reservation from the <em>available bandwidth</em> not the total reservable bandwidth. What we have done here is reserved 10% of the total reservable bandwidth for voice traffic. This leaves us 90,000 kbs left when congestion occurs, this is the <em>available bandwidth</em>. Using the bandwidth remaining percent command we have made a 20% reservation of this remainder (available bandwidth) for http (20% of 90,000 kbs is 18,000 kbs for http). </p>
<div class="captionfull"><img src='http://ardenpackeer.com/wp-content/uploads/2008/03/bandwidth2.gif' alt='Bandwidth Tutorial Percent Vs Remaining Percent' /></div>
<p>The <em>bandwidth remaining percent</em> command takes a percentage of the <strong>available bandwidth</strong> not from the total reservable bandwidth (100% of the interface). The <em>bandwidth percent</em> command takes a percentage of the <strong>total reserveable bandwidth</strong>. </p>
<p>Lets change the max-reserved-bandwidth and see the effect this has on available bandwidth.</p>
<pre>
<code>R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#int f1/0
R1(config-if)#max-reserved-bandwidth 90
Reservable bandwidth is being reduced.
Some existing reservations may be terminated.  </code>
</pre>
<p>You can see above we have changed the bandwidth available command using the max-reserved bandwidth command to 90%. This means that 10% of the total reservable bandwidth has been reserved for routing protocols etc. </p>
<pre>
<code>R1#sh queueing int f1/0
Interface FastEthernet1/0 queueing strategy: fair
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: Class-based queueing
  Output queue: 0/1000/64/0 (size/max total/threshold/drops)
     Conversations  0/1/256 (active/max active/max total)
     Reserved Conversations 1/1 (allocated/max allocated)
     Available Bandwidth 80000 kilobits/sec</code>
</pre>
<p>So we have both the VOICE traffic and MAX-RESERVABLE-TRAFFIC (routing, layer 2 traffic) using 10% of the <em>total reservable bandwidth</em> each. This leaves us with 80,000 kbs (80%) as a<em>vailable bandwidth</em>. WEB traffic then takes 20% of this 80,000 kbs (16,000 kbs). </p>
<p>In summary, we have the total reservable bandwidth of 100%. The bandwidth percent, priority percent, and max-reservable-bandwidth command makes reservations from the total reservable bandwidth. The bandwidth remaining percent command makes reservations from the available bandwidth (whats left over of the total reservable bandwidth after the other reservations is treated as 100%).</p>
<p>HTH. Now back to labs.</p>
<p><strong>Summary:</strong></p>
<ul>
<li>By default, 25% of the total reservable interface bandwidth is reserved for routing protocols and important layer 2 traffic. The <a href="http://www.cisco.com/en/US/docs/ios/12_3t/qos/command/reference/qos_m1gt.html#wp1113113" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');">max-reservable-bandwidth</a> command is used to change the amount of bandwidth reserved for this traffic.</li>
<li>The <a href="http://www.cisco.com/en/US/docs/ios/12_3t/qos/command/reference/qos_a1gt.html#wp1117802" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');">bandwidth percent</a> and <a href="http://www.cisco.com/en/US/docs/ios/12_3t/qos/command/reference/qos_o1gt.html#wp1076758" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');">priority percent</a> commands makes reservations from the total reservable interface bandwidth</li>
<li>The <a href="http://www.cisco.com/en/US/docs/ios/12_3t/qos/command/reference/qos_a1gt.html#wp1117802" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');">bandwidth remaining percent</a> command makes reservations from the available bandwidth (whats left over of the total reservable bandwidth after the other reservations are made).</li>
</ul>
<p><strong>Resources:</strong></p>
<ul>
<li><a href="http://ardenpackeer.com/wp-content/uploads/2008/03/bandwidth.net" >Dynamips/Dynagen .net configuration file</a></li>
</ul>
<p>Read this article and more like it on <a href="http://ardenpackeer.com" >ardenpackeer.com</a>
<br>
Follow me on twitter: <a href="http://twitter.com/ardenpackeer" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">http://twitter.com/ardenpackeer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ardenpackeer.com/qos-voip/tutorial-what-is-the-difference-between-bandwidth-percent-and-bandwidth-remaining-percent/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tutorial: How to use Cisco MQC &#038; NBAR to filter websites like Youtube</title>
		<link>http://ardenpackeer.com/qos-voip/tutorial-how-to-use-cisco-mqc-nbar-to-filter-websites-like-youtube/</link>
		<comments>http://ardenpackeer.com/qos-voip/tutorial-how-to-use-cisco-mqc-nbar-to-filter-websites-like-youtube/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 01:32:47 +0000</pubDate>
		<dc:creator>Arden Packeer, CCIE #20716</dc:creator>
		
		<category><![CDATA[Featured]]></category>

		<category><![CDATA[Featured Articles]]></category>

		<category><![CDATA[IOS Features &amp; Management]]></category>

		<category><![CDATA[QoS &amp; VoIP]]></category>

		<category><![CDATA[Security]]></category>

		<category><![CDATA[Tutorials]]></category>

		<category><![CDATA[dynagen]]></category>

		<category><![CDATA[dynamips]]></category>

		<category><![CDATA[filtering]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[http]]></category>

		<category><![CDATA[mime]]></category>

		<category><![CDATA[mqc]]></category>

		<category><![CDATA[nbar]]></category>

		<category><![CDATA[qos]]></category>

		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://ardenpackeer.com/qos-voip/tutorial-how-to-use-cisco-mqc-nbar-to-filter-websites-like-youtube/</guid>
		<description><![CDATA[I was asked a great question by one of my clients regarding filtering of websites. He had filtered youtube and google video at his proxy server but with the number of different video sites popping up (metacafe, jibjab etc etc), his filters just couldn&#8217;t keep up&#8230;and neither could his bandwidth!
One solution to this problem is [...]]]></description>
			<content:encoded><![CDATA[<p>I was asked a great question by one of my clients regarding filtering of websites. He had filtered <a href="http://www.youtube.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.youtube.com');">youtube</a> and <a href="http://video.google.com.au/" onclick="javascript:pageTracker._trackPageview('/outbound/article/video.google.com.au');">google video</a> at his proxy server but with the number of different video sites popping up (metacafe, jibjab etc etc), his filters just couldn&#8217;t keep up&#8230;and neither could his bandwidth!</p>
<p>One solution to this problem is the use of Cisco&#8217;s Network Based Application Recognition (NBAR). NBAR is a deep packet inspection and classification engine. It was first introduced in experimental versions of IOS v12.1 and can be used with Cisco&#8217;s <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cg/hqos_c/part40/qctmcli2.htm" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');">Modular Quality Of Service Command Line (MQC)</a>.</p>
<p>In this article we will look at using MQC to filter websites. I will demonstrate using the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_m1h.htm#wp1128712" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');">match protocol http</a> command to match a URL, a host or MIME type. We will use the following topology for demonstration:</p>
<div class="captionfull"><img src="http://ardenpackeer.com/wp-content/uploads/2007/12/topology1.gif" alt="Network Topology - Webserver" /></div>
<p>R3 will act as a webserver and R1 as a client. The filtering will be applied on R2. You can download the dynamips .net file the following topology <a href="http://ardenpackeer.com/wp-content/uploads/2007/12/webserver.net" >here</a>.<br />
R1 Base Configuration:</p>
<pre>
<code>hostname R1
!
int s1/0
 ip add 10.0.12.1 255.255.255.0
 no shut
!
router ospf 1
 network 10.0.12.1 0.0.0.0 area 0</code></pre>
<p>R2 Base Configuration:</p>
<pre>
<code>hostname R2
!
int s1/0
 ip add 10.0.12.2 255.255.255.0
 no shut
!
int s1/1
 ip add 10.0.23.2 255.255.255.0
 no shut
!
router ospf 1
 network 10.0.12.2 0.0.0.0 area 0
 network 10.0.23.2 0.0.0.0 area 0</code></pre>
<p>R3 Base Configuration:</p>
<pre>
<code>hostname R3
!
int s1/0
 ip add 10.0.23.3 255.255.255.0
 no shut
!
int f0/0
 ip add 192.168.1.100 255.255.255.0
 no shut
!
router ospf 1
 network 10.0.23.3 0.0.0.0 area 0
!
ip http server
ip http path flash:</code></pre>
<p>We have set up R3 as a webserver. Details on how to setup R3 as a webserver using IOS can be found <a href="http://ardenpackeer.com/ios-features-management/how-to-set-up-a-cisco-router-as-a-webserver/" >here</a>.</p>
<pre>
<code>R3#sh run | in ip http
ip http server
no ip http secure-server
ip http path flash:</code></pre>
<pre>
<code>R3#dir
Directory of flash:/

    1  -rw-          90                    &lt;no&gt;  picture.gif
    2  -rw-         329                    &lt;no&gt;  picture.jpg
    3  -rw-         174                    &lt;no&gt;  index.html

8388604 bytes total (8387812 bytes free)
&lt;/no&gt;&lt;/no&gt;&lt;/no&gt;</code></pre>
<p><strong>Basic HTTP Filtering using NBAR</strong></p>
<p>Lets set up basic http filtering with MQC on R2.</p>
<pre>
<code>R2(config)#class-map match-all MATCH-HTTP
R2(config-cmap)#match protocol http
R2(config-cmap)#exit
R2(config)#policy-map HTTP-POLICY
R2(config-pmap)#class MATCH-HTTP
R2(config-pmap-c)#set dscp af13
R2(config-pmap-c)#exit
R2(config-pmap)#int s1/0
R2(config-if)#service-policy input HTTP-POLICY</code></pre>
<p>In the code above we have a class map called MATCH-HTTP. The match protocol http command tells NBAR to match the http protocol. This will match all http traffic. The MATCH-HTTP class is then utilized in the HTTP-POLICY policy map. This policy map is used to set a DSCP marking on all traffic that matches the MATCH-HTTP class (ie all http traffic). The policy is then implemented on R2&#8217;s s1/0. Traffic is inspected and marked as it comes into that interface.</p>
<p>We can check how many packets have been marked using the show policy-map command.</p>
<pre>
<code>R2#sh policy-map int s1/0
 Serial1/0 

  Service-policy input: HTTP-POLICY

    Class-map: MATCH-HTTP (match-all)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: protocol http
      QoS Set
        dscp af13
          Packets marked 0

    Class-map: class-default (match-any)
      2 packets, 168 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any
R2#</code></pre>
<p>Lets generate some http traffic, and see if our policy marks some packets.</p>
<pre>
<code>R1#copy http://10.0.23.3/index.html null:
Loading http://10.0.23.3/index.html
174 bytes copied in 0.544 secs (320 bytes/sec)</code></pre>
<pre>
<code>R2#sh policy-map int s1/0
 Serial1/0 

  Service-policy input: HTTP-POLICY

    Class-map: MATCH-HTTP (match-all)
      5 packets, 344 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: protocol http
      QoS Set
        dscp af13
          Packets marked 5

    Class-map: class-default (match-any)
      124 packets, 10340 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any</code></pre>
<p>We used the <strong>copy http://10.0.23.3/index.html null:</strong> command to generate some http traffic. We can see above that 5 packets were generated and were marked as af13. All other traffic will fall into the class-default class. With the packets marked, we could forward them or drop them.</p>
<p>Instead of matching all of the http protocol we can use NBAR to look further into the packet and classify or drop packets based on the host requested.</p>
<p><strong>Match protocol HTTP host</strong></p>
<p>The match protocol HTTP url command is used to match a url. It takes a regular expression as an argument. For example:</p>
<pre>
<code>match protocol http host *youtube.com*
! This would match anything in youtube.com like http://www.youtube.com or http://video.youtube.com
!
match protocol http host *google*
! This would match anything with google in the host like http://mail.google.com or
http://www.google.com.au
!
match protocol http host google*
! This would match http://google.com but not http://video.google.com</code></pre>
<p>Lets set up R2 to filter based on a host.</p>
<pre>
<code>R2(config)#class-map MATCH-HTTP
R2(config-cmap)#no match protocol http
R2(config-cmap)#match protocol http host 10.0.23.3</code></pre>
<pre>
<code>R2#clear counters s1/0
Clear "show interface" counters on this interface [confirm]
*Mar  1 00:04:42.071: %CLEAR-5-COUNTERS: Clear counter on interface Serial1/0 by console
R2#
R2#sh policy-map int s1/0
 Serial1/0 

  Service-policy input: HTTP-POLICY

    Class-map: MATCH-HTTP (match-all)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: protocol http host "10.0.23.3"
      QoS Set
        dscp af13
          Packets marked 0

    Class-map: class-default (match-any)
      1 packets, 84 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any</code></pre>
<p>We&#8217;ve cleared the counters on R2, so lets generate some traffic on R1 again.</p>
<pre>
<code>R1#copy http://10.0.23.3/index.html null:
Loading http://10.0.23.3/index.html
174 bytes copied in 0.596 secs (292 bytes/sec)</code></pre>
<pre>
<code>R2#sh policy-map int s1/0
 Serial1/0 

  Service-policy input: HTTP-POLICY

    Class-map: MATCH-HTTP (match-all)
      5 packets, 344 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: protocol http host "10.0.23.3"
      QoS Set
        dscp af13
          Packets marked 5

    Class-map: class-default (match-any)
      64 packets, 5300 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any</code></pre>
<p>We can see here it matched 5 packets based on the host. We can use this to match whole sites like youtube.com or video.google.com.</p>
<p><strong>Match protocol HTTP url</strong></p>
<p>We can match strings AFTER the host portion of a URL using the match protocol http url command. It also takes a regular expression as an argument. For example:</p>
<pre>
<code>match protocol http url *video*
! This would match http://www.cisco.com/video/index.php or
http://www.google.com/stuff/video.html
!
match protocol http url video*
! This would match http://www.cisco.com/video but not http://www.cisco.com/stuff/video.html
! because stuff precedes the video portion of the url and in the expression above we have said
! it has to start with the string video
!
match protocol http url *.jpeg|*.jpg|*.gif
! This would match any .jpeg or .jpg or .gif extention in the url</code></pre>
<p>Lets set up R2 to match based on a URL.</p>
<pre>
<code>R2(config)#class-map MATCH-HTTP
R2(config-cmap)#no match protocol http host 10.0.23.3
R2(config-cmap)#match protocol http url *.jpg</code></pre>
<p>As you can see above we have used the match protocol http url function of NBAR to match any url that ends in a .jpg. This effectively blocks jpeg images (unless they have a different extension).</p>
<p>Let test it, before we send some traffic we&#8217;ll reset the counters on the interface.</p>
<pre>
<code>R2#clear counters s1/0
Clear "show interface" counters on this interface [confirm]
*Mar  1 00:43:39.135: %CLEAR-5-COUNTERS: Clear counter on interface Serial1/0 by console
R2#
R2#sh policy-map int s1/0
 Serial1/0 

  Service-policy input: HTTP-POLICY

    Class-map: MATCH-HTTP (match-all)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: protocol http url "*.jpg"
      QoS Set
        dscp af13
          Packets marked 0

    Class-map: class-default (match-any)
      1 packets, 84 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any</code></pre>
<p>If we request a gif file we <strong>shouldn&#8217;t</strong> match the class MATCH-HTTP. Lets test that first.</p>
<pre>
<code>R1#copy http://10.0.23.3/picture.gif null:
Loading http://10.0.23.3/picture.gif
90 bytes copied in 0.644 secs (140 bytes/sec)</code></pre>
<pre>
<code>R2#sh policy-map int s1/0
 Serial1/0 

  Service-policy input: HTTP-POLICY

    Class-map: MATCH-HTTP (match-all)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: protocol http url "*.jpg"
      QoS Set
        dscp af13
          Packets marked 0

    Class-map: class-default (match-any)
      18 packets, 1209 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any</code></pre>
<p>Great Success! Looks pretty good. Now lets try a .jpg extension. We <strong>should</strong> match this.</p>
<pre>
<code>R1#copy http://10.0.23.3/picture.jpg null:
Loading http://10.0.23.3/picture.jpg
329 bytes copied in 0.820 secs (401 bytes/sec)</code></pre>
<pre>
<code>R2#sh policy-map int s1/0
 Serial1/0 

  Service-policy input: HTTP-POLICY

    Class-map: MATCH-HTTP (match-all)
      7 packets, 433 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: protocol http url "*.jpg"
      QoS Set
        dscp af13
          Packets marked 7

    Class-map: class-default (match-any)
      22 packets, 1469 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any</code></pre>
<p>Awesome! You can see above we matched based on a URL.</p>
<p><strong>match protocol http mime</strong></p>
<p>We can also use the match protocol http mime to match internet mime types. The mime type has to be the same mime type that the web server responds with. For a list of valid mime types check out: <a href="http://www.sfsu.edu/training/mimetype.htm" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.sfsu.edu');">http://www.sfsu.edu/training/mimetype.htm</a>. Lets look at an example:</p>
<pre>
<code>match protocol http mime image/jpeg
! This would match jpeg,jpg,jpe,jfif,pjpeg, and pjp types
!
match protocol http mime image/jpg
! This would not match anything as it is not a proper mime type. Get a list of the mime types
! here: http://www.sfsu.edu/training/mimetype.htm
!
match protocol http mime image*
! This would match all image mime types
!
match protocol http mime application/x-shockwave-flash
! This would not only match swf flash movies, but all of flash.</code></pre>
<p>Lets set up R2 to filter the image/jpeg mime type:</p>
<pre>
<code>R2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R2(config)#class-map MATCH-HTTP
R2(config-cmap)#no match protocol http url *.jpg
R2(config-cmap)#match protocol http mime ?
  WORD  Enter a string as the sub-protocol parameter

R2(config-cmap)#match protocol http mime image/jpeg
R2(config-cmap)#exit
R2(config)#exit</code></pre>
<p>Once again, we&#8217;ll clear the counters so we can verify that this works correctly.</p>
<pre>
<code>R2#clear counters s1/0
Clear "show interface" counters on this interface [confirm]
*Mar  1 01:12:10.759: %CLEAR-5-COUNTERS: Clear counter on interface Serial1/0 

R2#sh policy-map int s1/0
 Serial1/0 

  Service-policy input: HTTP-POLICY

    Class-map: MATCH-HTTP (match-all)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: protocol http mime "image/jpeg"
      QoS Set
        dscp af13
          Packets marked 0

    Class-map: class-default (match-any)
      1 packets, 84 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any</code></pre>
<p>On R1 lets generate some traffic. A gif file will be requested first. This <strong>should not</strong> match our policy.</p>
<pre>
<code>R1#copy http://10.0.23.3/picture.gif null:
Loading http://10.0.23.3/picture.gif
90 bytes copied in 0.808 secs (111 bytes/sec)</code></pre>
<pre>
<code>R2#sh policy-map int s1/0
 Serial1/0 

  Service-policy input: HTTP-POLICY

    Class-map: MATCH-HTTP (match-all)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: protocol http mime "image/jpeg"
      QoS Set
        dscp af13
          Packets marked 0

    Class-map: class-default (match-any)
      10 packets, 689 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any</code></pre>
<p>All good! Ok lets do the final test and actually request a jpeg image and see if it matches our policy.</p>
<pre>
<code>R1#copy http://10.0.23.3/picture.jpg null:
Loading http://10.0.23.3/picture.jpg
329 bytes copied in 1.216 secs (271 bytes/sec)</code></pre>
<pre>
<code>R2#sh policy-map int s1/0
 Serial1/0 

  Service-policy input: HTTP-POLICY

    Class-map: MATCH-HTTP (match-all)
      5 packets, 220 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: protocol http mime "image/jpeg"
      QoS Set
        dscp af13
          Packets marked 5

    Class-map: class-default (match-any)
      16 packets, 1162 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any</code></pre>
<p>You can see above that the jpeg image was matched. It works!</p>
<p><strong>Putting it all together</strong></p>
<p>So lets put it all together. We can use all three match protocol http commands in a match-any class map. For example:</p>
<pre>
<code>class-map match-any INTERNET-SCUM
 match protocol http host *youtube.com*|*video.google.com*
 match protocol http mime video/flv|video/x-flv|video/mp4|video/x-m4v|audio/mp4a-latm
 match protocol http mime video/3gpp|video/quicktime
 match protocol http url *.flv|*.mp4|*.m4v|*.m4a|*.3gp|*.mov
! uncomment below if you don't want ANY flash.
! match protocol http mime application/x-shockwave-flash
! match protocol http url *.swf
!
policy-map NOINTERNETVIDEO
 class INTERNET-SCUM
  drop
!
int s1/0
 service-policy input NOINTERNETVIDEO
!</code></pre>
<p>This would match any traffic going to youtube or video.google.com, or any flash applications, or common video mime types, and any swf (flash or flash movie) files! Be aware that NBAR does make your router take a hit in CPU processor usage, I&#8217;d suggest evaluating your processor usage before using this in production.</p>
<p>HTH! Now back to labs!</p>
<p><strong>Summary:</strong></p>
<ul>
<li>Use the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_m1h.htm#wp1128712" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');">match http protocol</a> command to match the http protocol.</li>
<li>match protocol http host matches the host portion</li>
<li>match protocol http url matches the url after the hostname</li>
<li>match protocol http mime matches mime types</li>
</ul>
<p><strong>Resources</strong><br />
<a href="http://ardenpackeer.com/wp-content/uploads/2007/12/webserver.net"  title="Webserver - Dynamips .net configuration file">Webserver - Dynamips .net configuration file</a><br />
<a href="http://ardenpackeer.com/wp-content/uploads/2007/12/qoshttp-r1.txt"  title="QOS HTTP Filtering - R1 Final Configuration">QOS HTTP Filtering - R1 Final Configuration</a><br />
<a href="http://ardenpackeer.com/wp-content/uploads/2007/12/qoshttp-r2.txt"  title="QOS HTTP Filtering - R2 Final Configuration">QOS HTTP Filtering - R2 Final Configuration</a><br />
<a href="http://ardenpackeer.com/wp-content/uploads/2007/12/qoshttp-r3.txt"  title="QOS HTTP Filtering - R3 Final Configuration">QOS HTTP Filtering - R3 Final Configuration</a></p>
<p>Read this article and more like it on <a href="http://ardenpackeer.com" >ardenpackeer.com</a>
<br>
Follow me on twitter: <a href="http://twitter.com/ardenpackeer" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">http://twitter.com/ardenpackeer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ardenpackeer.com/qos-voip/tutorial-how-to-use-cisco-mqc-nbar-to-filter-websites-like-youtube/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CCIE QoS Mind Map</title>
		<link>http://ardenpackeer.com/qos-voip/ccie-qos-mind-map/</link>
		<comments>http://ardenpackeer.com/qos-voip/ccie-qos-mind-map/#comments</comments>
		<pubDate>Thu, 05 Jul 2007 05:49:32 +0000</pubDate>
		<dc:creator>Arden Packeer, CCIE #20716</dc:creator>
		
		<category><![CDATA[QoS &amp; VoIP]]></category>

		<category><![CDATA[mind map]]></category>

		<category><![CDATA[mqc]]></category>

		<category><![CDATA[priority queing]]></category>

		<category><![CDATA[qos]]></category>

		<guid isPermaLink="false">http://ardenpackeer.com/?p=26</guid>
		<description><![CDATA[Whats On Your Mind - Using Mind Maps for study.
I was playing around with Mindomo (which is an awesome online mind map creator) and I whipped up a QoS mind map. The interface for Mindomo takes a bit of getting used to, but its a fantastic study tool. Mind maps are a great way to [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Whats On Your Mind - Using Mind Maps for study.</strong></p>
<p>I was playing around with <a href="http://www.mindomo.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.mindomo.com');">Mindomo</a> (which is an awesome online mind map creator) and I whipped up a QoS mind map. The interface for Mindomo takes a bit of getting used to, but its a fantastic study tool. Mind maps are a great way to organise your thoughts and ideas about a topic in a very structured way. I am a very visual person, so by creating mind maps it allows me to organize my thoughts for easy recall.</p>
<p>I&#8217;ve placed a link to my mind map below. I&#8217;ll add notes and links back to this website from it with articles (thats the plan anyway!). I&#8217;ve also placed a copy of my CCIE QoS extended Blueprint for study.</p>
<p><strong>QoS Mind Map:</strong></p>
<div class="captionfull">
<a href="http://www.mindomo.com/view?m=1aa303cf33751870d7cba78aef9e0386" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.mindomo.com');" title="QOS Mind Map"><img src="http://ardenpackeer.com/wp-content/uploads/2007/07/qos.thumbnail.gif" alt="QOS Mind Map" /></a>
</div>
<p>
<strong>CCIE QoS Extended Blueprint</strong></p>
<p>A.      Quality of service solutions<br />
B.      Classification and Marking<br />
I.      Using MQC<br />
I.      Using NBAR<br />
II.     Using PBR<br />
III.    Using CAR<br />
IV.     QoS Policy Propagation via BGP<br />
V.      DE<br />
I.      DE List<br />
II.     MQC<br />
VI.     3550 - Classifying Traffic on a Per-Port Per-VLAN Basis by Using<br />
Class Maps<br />
C.      Congestion management, congestion avoidance<br />
I.      Legacy Congestion Management (WFQ, CQ, PQ)<br />
II.     LLQ<br />
III.    CBWFQ<br />
IV.     WRED<br />
V.      3550 - Expedite Queue<br />
D.      Policing and shaping<br />
I.      3550 Policing<br />
II.     Policing with MQC<br />
I.      Two-Rate Policer<br />
II.     Percentage-based Policing and Shaping<br />
III.    Unconditional Packet Discard<br />
IV.     Control Plane Policing<br />
V.      Shaping with MQC<br />
VI.     CAR<br />
VII.    Generic Traffic Shaping<br />
VIII.   FRTS<br />
E.      Signaling<br />
I.      RSVP<br />
F.      Link efficiency mechanisms<br />
I.      MultiLink PPP (MLP)<br />
I.      MPL Interleaving and Queuing<br />
II.     Multiclass Multilink PPP<br />
II.     FRF.12<br />
III.    FTF.16<br />
IV.     Compressed Real-Time Protocol<br />
V.      Compression - STAC versus PREDICTOR</p>
<p>Now back to labs.</p>
<p>HTH</p>
<p>Read this article and more like it on <a href="http://ardenpackeer.com" >ardenpackeer.com</a>
<br>
Follow me on twitter: <a href="http://twitter.com/ardenpackeer" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">http://twitter.com/ardenpackeer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ardenpackeer.com/qos-voip/ccie-qos-mind-map/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Implementing Weighted Fair Queing, Part II</title>
		<link>http://ardenpackeer.com/qos-voip/implementing-weighted-fair-queing-part-ii/</link>
		<comments>http://ardenpackeer.com/qos-voip/implementing-weighted-fair-queing-part-ii/#comments</comments>
		<pubDate>Thu, 14 Jun 2007 01:49:00 +0000</pubDate>
		<dc:creator>Arden Packeer, CCIE #20716</dc:creator>
		
		<category><![CDATA[QoS &amp; VoIP]]></category>

		<category><![CDATA[fair-queue]]></category>

		<category><![CDATA[qos]]></category>

		<category><![CDATA[queueing]]></category>

		<category><![CDATA[wfq]]></category>

		<guid isPermaLink="false">http://ardenpackeer.com/?p=16</guid>
		<description><![CDATA[But Wait&#8230;theres still more! QoS Group based WFQ
In my previous article on WFQ, we really only talked about flow based WFQ. Flow based WFQ automatically sorts out traffic flows or conversations into separate queues. Smaller flower get precedence over larger flow. But what about frames that are classified with a QoS marking. If we have [...]]]></description>
			<content:encoded><![CDATA[<p><strong>But Wait&#8230;theres still more! QoS Group based WFQ</strong></p>
<p>In my previous article on WFQ, we really only talked about flow based WFQ. Flow based WFQ automatically sorts out traffic flows or conversations into separate queues. Smaller flower get precedence over larger flow. But what about frames that are classified with a QoS marking. If we have a larger frame with a high precedence or high valued ToS it should probably get to be served before a smaller frame with a very low precedence or ToS.</p>
<p>With the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_a1h.htm#wp1135901" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">fair-queue qos-group</a> command we can use a qos-group, which is an internal classification used by QoS features like <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cg/hqos_c/part20/qchpolsh.htm#wp1000920" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">Committed Access Rate (CAR)</a>.</p>
<pre><code>interface serial0/0
 ip address 150.1.13.1 255.255.255.0
 rate-limit output 80000 10000 20000 conform-action set-qos-transmit 6 exceed-action drop
 fair-queue qos-group
 fair-queue qos-group 6 weight 40
 fair-queue qos-group 6 limit 37 </code></pre>
<p>This is quite a long example with references we haven&#8217;t talked about yet like <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_q1h.htm#wp1080850" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">rate-limit</a> command. But essentially what that rate-limit command says is this &#8220;Set up a Committed Access Rate on serial 0/0, where the speed is limited to 80 kbps with a 10kps burst normal and 20kps burst max set. If it conforms place all traffic in qos-group 6 and transmit otherwise drop&#8221;.</p>
<p>The fair-queue qos-group commands above then set up the traffic in qos-group 6 to have a higher weight hence more priority in the queues. In this case a weight of 30 was applied to all traffic in qos-group 6. The net affect of this is that traffic in qos-group 6 will get 40% of the bandwidth. We have also limited the size of the queues to 37.</p>
<p>That example is pretty simple. We aren&#8217;t really doing much more than putting all traffic into qos-group 6 and then giving it 40% of the rate-limited bandwidth (40% of 80kbps).</p>
<p>Lets look at a more complex example. We might want to just put traffic that has an ip precedence of 1 into qos-group 1, everything with an ip precedence of 2 into qos-group 2, and everything with an ip precedence of 3 also goes into qos-group 2.</p>
<pre><code>interface serial0/0
 ip address 150.1.13.1 255.255.255.0
 rate-limit output access-group rate-limit 1 80000 10000 20000 conform-action set-qos-transmit 1 exceed-action drop
 rate-limit output access-group rate-limit 2 80000 10000 20000 conform-action set-qos-transmit 2 exceed-action drop
 rate-limit output access-group rate-limit 3 80000 10000 20000 conform-action set-qos-transmit 2 exceed-action drop
 fair-queue qos-group
 fair-queue qos-group 1 weight 5
 fair-queue qos-group 1 limit 20
 fair-queue qos-group 2 weight 10
 fair-queue qos-group 2 limit 30
!
access-list rate-limit 1 1
access-list rate-limit 2 2
access-list rate-limit 3 3</code></pre>
<p>In the example above, we modify the rate-limit command to utilise a <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios122/122cgcr/fqos_r/qrfcmd1.htm#wp1017391" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">access-list rate-limit</a> command. The rate-limit command says anything that matches this access-list rate-limit list 1, should be put into qos-group 1. access-list rate-limt 1 says anything with an ip precedence of 1 goes into it. We have done that for ip precedence 2 and 3 as well, they go into qos-group 2.</p>
<p>This changes the rate-limit command to say &#8220;Set up a Committed Access Rate on serial0/0. Everything with ip precedence 1, goes into QoS-Group 1 and gets limited to 8kbps, 1kpbs burst normal and burst max. Qos-Group 1 has 5% of the bandwidth, and each queue has a size limit of 20. Everything with ip precedence 2 and 3, goes into QoS-Group 2. Qos-Group 2 has 10% of the bandwidth and a queue size limit of 30.</p>
<p><strong>ToS Based Weighted Fair Queue</strong></p>
<p>We can also use Weighted Fair Queue taking into account the Type Of Service (ToS) field in the ip header. The higher the ToS field the more likely the packet train is to get served by the WFQ scheduling algorithm.</p>
<p>Lets have a look at some examples. To set up ToS based WFQ we use the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_a1h.htm#wp1135984" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">fair-queue tos</a> command:</p>
<pre><code>int serial 0/0
 ip address 150.1.13.1 255.255.255.0
 fair-queue tos
 fair-queue tos 1 weight 10
 fair-queue tos 1 limit 20
 fair-queue tos 2 weight 20
 fair-queue tos 2 limit 30</code></pre>
<p>In the example above, WFQ is implemented. Packet flows with an IP precedence of 1 will get 10% of the bandwidth and each queue will have a size limit of 20 members. Packet flows with an IP precedence of 2 will get 20% of the bandwidth and each queue will have a size limit of 30.</p>
<p><strong>Summary:</strong></p>
<ul>
<li>QoS-group based WFQ places packet flows into QoS-groups. Bandwidth and queue limits can then be placed on those queues.</li>
<li>QoS-group based WFQ uses the fair-queue qos-group command</li>
<li>ToS based WFQ packets takes into account the ToS field in the IP header and schedules packet flows accordingly (higher ToS, higher chance of serviced by the WFQ scheduler).</li>
<li>ToS based WFQ uses the fair-queue tos command</li>
</ul>
<p>HTH</p>
<p>Read this article and more like it on <a href="http://ardenpackeer.com" >ardenpackeer.com</a>
<br>
Follow me on twitter: <a href="http://twitter.com/ardenpackeer" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">http://twitter.com/ardenpackeer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ardenpackeer.com/qos-voip/implementing-weighted-fair-queing-part-ii/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Implementing Weighted Fair Queuing</title>
		<link>http://ardenpackeer.com/qos-voip/implementing-weighted-fair-queuing/</link>
		<comments>http://ardenpackeer.com/qos-voip/implementing-weighted-fair-queuing/#comments</comments>
		<pubDate>Wed, 13 Jun 2007 23:04:30 +0000</pubDate>
		<dc:creator>Arden Packeer, CCIE #20716</dc:creator>
		
		<category><![CDATA[QoS &amp; VoIP]]></category>

		<category><![CDATA[congestion management]]></category>

		<category><![CDATA[fair-queue]]></category>

		<category><![CDATA[qos]]></category>

		<category><![CDATA[queueing]]></category>

		<category><![CDATA[wfq]]></category>

		<guid isPermaLink="false">http://ardenpackeer.com/?p=15</guid>
		<description><![CDATA[Fairness for the Little Guy. 
Weighted Fair Queue (WFQ) is another congestion management strategy. It is very different from the other two congestion management strategies we have looked at (PQ and CQ), in that it does not need classification options configured. Traffic is automatically sorted and put into different queues without any kind of access-list [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Fairness for the Little Guy. </strong></p>
<p>Weighted Fair Queue (WFQ) is another congestion management strategy. It is very different from the other two congestion management strategies we have looked at (PQ and CQ), in that it does not need classification options configured. Traffic is automatically sorted and put into different queues without any kind of access-list or protocol matching configured by the user. It all happens automagically.</p>
<p>How does that work? WFQ classifies packets based on flows. What is a flow? Well a flow could be based on a number of things (source and destination address, protocol, source and destination port) but it identifies a train of packets. For example if you are surfing the web, you might have one train of packets coming in for the HTTP request, then another for the response, then another for the graphics and so on. WFQ calls these train of packets separate flows or conversations and puts each one automatically into a separate queue. Thats a whole bunch of queues, and the number of queues is changing dynamically all the time.</p>
<p>So instead of the user manually specifying criteria to manually create queues like CQ and PQ, WFQ uses the concept of flows to create queues on the fly. So that takes care of the classification difference, but what about the actual scheduling algorithm? Well as each  flow arrives, the time of the very last bit to arrive is used to calculate a sequence number. The lower the sequence number the higher the chance that that queue will be emptied first. The end result of this is that lower volume traffic gets precedence over higher volume traffic.</p>
<p><strong>The Magic Toll Booth. </strong></p>
<p>Lets try come up with an analogy to explain this. Imagine a traffic toll booth. Okay its a magic traffic toll booth. We have cars of different sizes approaching to traffic toll booth. Cars, trucks, motorbikes, all vehicles of different sizes. As the vehicle approaches this magic toll booth creates a new lane for each of the vehicles. When each of the vehicles enter their own queue, the toll booth record the exact time the last wheel on your vehicle entered the new lane and stamps this time on the vehicle. Motor-cycles because they are smaller, will have their last wheel enter their new lane before a multi trailer truck enters its new lane for example. Who ever has the earliest entry time will get to go through the toll booth first. See how smaller vehicles get priority.</p>
<p>This is the basis of Weighted Fair Queue. It gives the little packets a chance. Without it, you might have lots of ftp traffic going on which would create fairly large packet trains. In a fifo queue a small telnet packet coming along would have to wait till the large ftp packet train is finished before it could go through. With Weighted Fair Queue, the smaller telnet packet would get right of way.</p>
<p><strong>Implementing Weighted Fair Queuing</strong></p>
<p>Weighted Fair Queuing is the default on links that are of E1 speed (2.048 Mbps) or slower. So if you have any of those speed links you don&#8217;t have to do anything! On all other links, or if you want more control, you can use the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_a1h.htm#wp1135459" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">fair-queue</a> command.</p>
<pre><code>fair-queue [<strong>congestive-discard-threshold </strong>[<strong>dynamic-queues </strong> [<strong>reservable-queues</strong>]]]</code></pre>
<p>Let turn on WFQ on an interface.</p>
<pre><code>int serial0/0
 fair-queue</code></pre>
<p>This will turn on WFQ on the serial 0/0 interface. In its basic form, that&#8217;s it! The WFQ algorithm will automatically distinguish between flows and put them into their own queues, giving precedence to the smaller IP traffic.</p>
<p>We can specify the amount of messages in each queue by setting the congestive-discard-threshold (CDT). Think of this as the maximum size of each individual queue. Why didn&#8217;t they just call it a maximum individual queue size then? Well what actually happens is when the congestive-discard-threshold is reached, new arriving packets for the queue might not be dropped. If there is another message in another queue with a worse serial number (think entry time), it might get dropped instead.</p>
<pre><code>int s0/0
 fair-queue 2048 1024 0</code></pre>
<p>This changes the CDT to 2048 instead of the default 64. The command above also changes the maximum number of dynamic queues to 1024 (think maximum number of flows at one time). The 0 at the end says that there is no queues being used with <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cg/hqos_c/part25/ch05/index.htm" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">RSVP </a>(Resource Reservation Protocol).</p>
<p>We can not only specify the default size of each queue with the CDT but we can specify the overall queue size or all the queue&#8217;s with the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hif_r/int_d1h.htm#wp1049944" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">hold-queue</a> command.</p>
<pre><code>int s0/0
 fair-queue 2048 1024 0
 hold-queue 4096 out</code></pre>
<p>This will set the maximum limit of one queue to 2048 (CDT), but the overall queue limt on the interface to 4096 (hold-queue). This means that even though one of the queues can have a maximum of 2048 messages, the combined total of all the queues cannot have more than 4096 messages.</p>
<p><strong>Summary</strong></p>
<ul>
<li> Weighted Fair Queuing is a congestion management strategy</li>
<li>Queues are dynamically assigned based on flows</li>
<li>A flow is a train of packets with the same properties (source and destination ip address, protocol, source and destination ports etc).</li>
<li>There can be a maximum of 4096 queues.</li>
<li>We use the fair-queue command to define WFQ on an interface</li>
<li>It takes three parameters, the first is CDT (length of each queue), Maximum number of dynamic queues and RSVP queues</li>
<li>We can define an overall queue size with the hold-queue command.</li>
</ul>
<p>Thats it for part I of WFQ. Yes there is more, which we will look at including QoS-group and ToS based Weighted Fair Queue.</p>
<p>HTH.</p>
<p>Read this article and more like it on <a href="http://ardenpackeer.com" >ardenpackeer.com</a>
<br>
Follow me on twitter: <a href="http://twitter.com/ardenpackeer" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">http://twitter.com/ardenpackeer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ardenpackeer.com/qos-voip/implementing-weighted-fair-queuing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CAR &#38; CIR - What the hell is the difference?</title>
		<link>http://ardenpackeer.com/qos-voip/car-cir-what-the-hell-is-the-difference/</link>
		<comments>http://ardenpackeer.com/qos-voip/car-cir-what-the-hell-is-the-difference/#comments</comments>
		<pubDate>Wed, 13 Jun 2007 09:32:19 +0000</pubDate>
		<dc:creator>Arden Packeer, CCIE #20716</dc:creator>
		
		<category><![CDATA[QoS &amp; VoIP]]></category>

		<category><![CDATA[congestion management]]></category>

		<category><![CDATA[policing]]></category>

		<category><![CDATA[qos]]></category>

		<category><![CDATA[queueing]]></category>

		<category><![CDATA[shaping]]></category>

		<guid isPermaLink="false">http://ardenpackeer.com/?p=14</guid>
		<description><![CDATA[What is the difference?
When we are talking about Committed Information Rate we are usually talking about Traffic Shaping. This is especially true of Frame Relay Traffic Shaping (FRTS). In FRTS we might configure a CIR with the frame-relay cir command:
For example:
interface serial0
 encapsulation frame-relay
 frame-relay traffic-shaping
 frame-relay interface-dlci 200
 class adjust_vc_class_rate
!
map-class frame-relay adjust_vc_class_rate
 frame-relay cir [...]]]></description>
			<content:encoded><![CDATA[<p><strong>What is the difference?</strong></p>
<p>When we are talking about Committed Information Rate we are usually talking about Traffic Shaping. This is especially true of Frame Relay Traffic Shaping (FRTS). In FRTS we might configure a CIR with the frame-relay cir command:</p>
<p>For example:</p>
<pre><code>interface serial0
 encapsulation frame-relay
 frame-relay traffic-shaping
 frame-relay interface-dlci 200
 class adjust_vc_class_rate
!
map-class frame-relay adjust_vc_class_rate
 frame-relay cir 64000
 frame-relay mincir 32000
 frame-relay adaptive-shaping becn</code></pre>
<p>Here we have a committed information rate of 32k for the virtual circuit represented by DLCI 200 (we&#8217;ll have a look at Frame Relay traffic shaping in more detail later).  In this case a shaper is set. From your perspective, the CIR is the rate of the virtual circuit according to a business contract.  From the service providers perspective it might involve setting up SLA&#8217;s and discarding anything above (discard eligible on Frame Relay).</p>
<p>Committed Access Rate is an example of policing. It is rate limiting to the committed access rate. It is implemented with the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_q1h.htm#wp1080850" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">rate-limit</a> command. For example:</p>
<pre><code>int fa0/0
 rate-limit output 8000 1000 2000 conform-action transmit exceed-action drop</code></pre>
<p>The example of above sets  a committed access rate of 8kbps with 1kbps burst and 2kbps max burst.</p>
<p>Read this article and more like it on <a href="http://ardenpackeer.com" >ardenpackeer.com</a>
<br>
Follow me on twitter: <a href="http://twitter.com/ardenpackeer" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">http://twitter.com/ardenpackeer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ardenpackeer.com/qos-voip/car-cir-what-the-hell-is-the-difference/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Configuring Custom Queuing</title>
		<link>http://ardenpackeer.com/qos-voip/custom-queuing/</link>
		<comments>http://ardenpackeer.com/qos-voip/custom-queuing/#comments</comments>
		<pubDate>Tue, 12 Jun 2007 03:54:58 +0000</pubDate>
		<dc:creator>Arden Packeer, CCIE #20716</dc:creator>
		
		<category><![CDATA[QoS &amp; VoIP]]></category>

		<category><![CDATA[congestion management]]></category>

		<category><![CDATA[custom queuing]]></category>

		<category><![CDATA[qos]]></category>

		<guid isPermaLink="false">http://ardenpackeer.com/?p=12</guid>
		<description><![CDATA[In my previous post, I talked a little bit about congestion management focusing on priority queuing. Priority queuing is great in making sure that VIP traffic gets to looked first dibs on that output queue when congestion occurs. The problem with priority queuing was starvation. If there was frames always waiting in the high queue [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous post, I talked a little bit about congestion management focusing on priority queuing. Priority queuing is great in making sure that VIP traffic gets to looked first dibs on that output queue when congestion occurs. The problem with priority queuing was starvation. If there was frames always waiting in the high queue the lower queues might never get served.</p>
<p>Custom Queuing is another congestion management strategy and is what we will be looking at in detail in this post. Custom queuing is a round robin like queuing mechanism where frames in each queue are serviced until a byte-counter limit threshold is met. Once this byte-count limit threshold is met, the frames in the next queue are serviced. Because it queues are serviced in a round robin fashion, Custom Queuing does not suffer from queue starvation.</p>
<p>There are 17 custom queues, with 16 user definable queues. The first queue, queue 0 is a system queue, and is serviced first. Critical system traffic like keepalives, and other important interface traffic etc are placed in this queue and are always serviced first. Queues 1 to 16 are then serviced in a round robin fashion. Each of those 16 queues can be configured with a byte-count limit threshold.</p>
<p><strong>The Cisconator </strong></p>
<p>To explain how this works lets use a theme park analogy. Lets say you are the manager of a theme park that has just opened at new ride: The Cisconator. The ride is really popular from the beginning but people are complaining about the line for the ride. Some people are waiting for quite a while before they can ride.</p>
<p>You decide to arrange 4 queues. All VIP customers will go into queue 1, all adults will go into queue 2, all kids go into queue 3 and all ninjas go into queue 4. VIPs and kids are your most important customers, so management decides the queuing mechanism will work like this: for every 5 VIPS, you will let through 4 kids, 2 adults, and 1 ninja (never know when one will come in handy).  So the guy at the front of the line has a little counter, he moves to queue 1 and counts five people through, as soon as those have gone through he moves to the adult queue and lets through 2, he then moves through to the kids queue and lets through 5, and then goes to the ninja queue lets 1 through before repeating the procedure.</p>
<p>This is the basis of custom queuing. We go around to each queue and let through packets until a byte count is reached before letting through packets in the next queue. The concept of a byte count is important. If we are in the middle of a packet and we hit that byte-count limit we can&#8217;t just stop at half a packet so we sometimes go over that byte-count limit. Custom Queuing takes this into account by penalizing the queue (lowering the limit) next time around. So it might not match the byte count each time perfectly but over time it averages out to the byte-count limit.</p>
<p><strong>Custom Queuing Configuration.</strong></p>
<p>To configure custom queuing we need to figure out which traffic to put into the different queues. After we do this we define which interface to apply this congestion strategy to. Remember this is a congestion management strategy, so it will apply to <em>outbound </em>traffic. To configure custom queuing we use the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_q1h.htm#wp1077461" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">queue-list</a> command. The syntax for the queue-list command is:</p>
<pre><code>queue-list list-number protocol protocol-name queue-number queue-keyword queue-keyword value</code></pre>
<p>Let have a look at a few examples of configuring custom queuing.</p>
<pre><code>access-list 101 permit ip any 150.1.1.0 0.0.0.127
queue-list 1 protocol ip 1 list 101
queue-list 1 protocol ip 2 tcp 80
queue-list 1 protocol cdp 3
queue-list 1 protocol ip 4 lt 800
queue-list 1 default 6</code></pre>
<p>In the above example we have all traffic that matches  access-list 101 (ie all ip traffic heading towards 150.1.1.0/25) will be put in queue 1. All tcp traffic going to port 80 will be put in queue 2, all cdp traffic will be placed in queue 3, all ip traffic less than 800 bytes in size will be placed in queue 4. We used the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_q1h.htm#wp1019048" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">queue-list default</a> command to specify that all traffic not matched will go into queue 6.</p>
<p>We can also match traffic based on the interface it came in from using the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_q1h.htm#wp1019136" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">queue-list interface</a> command.</p>
<pre><code>queue-list 1 interface fa0/0 5</code></pre>
<p>This places all traffic originating from fa0/0 into queue 5. Like access-lists and priority-list, queue-lists are read sequentially until a match is found. So if you mix and match queue-list interface commands with queue-list protocol commands, the ones you put in first will be evaluated first. The system will go through each one sequentially till a match is found and then put it in the queue defined.</p>
<p>So we have our six queues set up. We can specify the size of each of those queues (how many packets each queue can have) using the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_q1h.htm#wp1019443" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">queue-list queue limit</a> command.</p>
<pre><code>access-list 101 permit ip any 150.1.1.0 0.0.0.127
queue-list 1 protocol ip 1 list 101
queue-list 1 protocol ip 2 tcp 80
queue-list 1 protocol cdp 3
queue-list 1 protocol ip 4 lt 800
queue-list 1 interface fa0/0 5
queue-list 1 default 6
queue-list 1 queue 1 limit 40
queue-list 1 queue 6 limit 100</code></pre>
<p>You can see above we have changed the size of queues 1 and 6 to 40 and 100 respectively. The default queue size is 20, so this makes our queues sizes 40, 20, 20, 20, 20 and 100 for queues 1,2,3,4,5 and 6 respectively. This is the amount of packets each can hold before things start being dropped.</p>
<p>Now that we have defined our queues we need to set up the byte-count limits for each of the queues. This is how many bytes will be served up before moving to the next queue.  We do this with the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_q1h.htm#wp1019349" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">queue-list queue byte-count</a> command.</p>
<pre><code>queue-list 1 queue 6 byte-count 2000</code></pre>
<p>This changes the queue byte-count from the default 1500 to 2000. What is the effect of this? Well, if queues 1 through 5 have a byte-count limit of 1500 each and queue 6 has a limit of 2000 we have a total byte-count of  9500 ((1500 x 5) + 2000) to go through all the queues. This means that queue 6 will have about 21% (2000/9500) of the bandwidth that the queue-list is applied to.</p>
<p>There is a great how-to guide for working out percentages of a link using custom queuing <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios122/122cgcr/fqos_c/fqcprt2/qcfconmg.htm#wp1001355" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">here</a>. I think i will do another post regarding this when i write up a few labs. Stay tuned!</p>
<p>Speaking of applying a custom queue to an interface, how do we do that? With the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_a1h.htm#wp1017499" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">custom-queue-list</a> command.</p>
<pre><code>int fa0/0
 custom-queue-list  1</code></pre>
<p>The commands above applies the queue-list 1 define above to interface fa0/0.</p>
<p>Recall that custom queuing has 17 queues, with only 1 to 16 being user definable. You can also have 16 different custom queues each capable of having 16 queues. You can only apply one custom queue to an interface however. Queue 0 is always used for priority traffic and that queue is always served first (kind of like a priority queue). You can make your own queues act like this also using the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_q1h.htm#wp1086818" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">queue-list lowest-custom</a> command.</p>
<pre><code>queue-list 1 lowest-custom 3</code></pre>
<p>This defines queues 0 to 3 as having high priority traffic and using a priority queue.</p>
<p><strong>What was in that queue again?</strong></p>
<p>To verify the custom queue we can use the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_s3h.htm#wp1057834" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">show queuing custom</a> command.</p>
<pre><code>Router#sh queuing custom
Current custom queue configuration:

List   Queue  Args
1      6      default
1      1      protocol ip          list 101
1      2      protocol ip          tcp port www
1      3      protocol cdp
1      4      protocol ip          lt 800
1      5      interface FastEthernet0/0
1      1      limit 40
1      6      byte-count 2000 limit 100</code></pre>
<p><strong>Summary:</strong></p>
<ul>
<li> Custom Queuing is a congestion management strategy</li>
<li>There are 17 queue, 0 to 16</li>
<li>Queue 0 is a priority like queue, 1 to 16 are user definable</li>
<li>You specify what traffic goes into a queue using the queue-list protocol command</li>
<li>Queues are served in a round robin like fashion. Each queue is served until a byte-count limit threshold is reached, before going on to the next queue</li>
<li>You can have up to 16 queue-lists but only one can be applied to an interface.</li>
</ul>
<p>Read this article and more like it on <a href="http://ardenpackeer.com" >ardenpackeer.com</a>
<br>
Follow me on twitter: <a href="http://twitter.com/ardenpackeer" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">http://twitter.com/ardenpackeer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ardenpackeer.com/qos-voip/custom-queuing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Configuring Priority Queuing</title>
		<link>http://ardenpackeer.com/qos-voip/configuring-priority-queuing/</link>
		<comments>http://ardenpackeer.com/qos-voip/configuring-priority-queuing/#comments</comments>
		<pubDate>Mon, 11 Jun 2007 02:06:26 +0000</pubDate>
		<dc:creator>Arden Packeer, CCIE #20716</dc:creator>
		
		<category><![CDATA[QoS &amp; VoIP]]></category>

		<category><![CDATA[congestion management]]></category>

		<category><![CDATA[priority queing]]></category>

		<category><![CDATA[qos]]></category>

		<category><![CDATA[queueing]]></category>

		<guid isPermaLink="false">http://ardenpackeer.com/?p=11</guid>
		<description><![CDATA[What is Congestion Management?
Priority Queuing is a QoS congestion management mechanism. What the hell is a congestion management mechanism I hear you ask? Congestion management is how a router deals with what happens when its output queue is full. A router can&#8217;t really do much to control traffic, all it does is collect frames, figure [...]]]></description>
			<content:encoded><![CDATA[<p align="left"><strong>What is Congestion Management?</strong></p>
<p>Priority Queuing is a QoS congestion management mechanism. What the hell is a congestion management mechanism I hear you ask? Congestion management is how a router deals with what happens when its output queue is full. A router can&#8217;t really do much to control traffic, all it does is collect frames, figure out what to do with them, and pass them down the correct interface (hopefully!). If the frames are coming too thick and fast for the router to handle, this output queue gets full and there is not enough room for the new frames that arrive. This is known as congestion.</p>
<p>Congestion Management is a strategy that the router uses to handle congestion. What happens if a really important frame arrives and finds that the output queue is full? Without Congestion Management the router might just decide to drop that frame (&#8221;Aaarraaggh&#8221; I&#8217;m too busy leave me alone). Or it could say, &#8220;alright Mr VIP frame you wait in this line here and as soon as there is a free spot your the first one in&#8221;. It could have a whole bunch of different &#8220;queues&#8221; and have different criteria on who gets to go in first etc. It could even accept reservations ahead of time. These are all examples of congestion management strategies.</p>
<p>There are a couple of different styles of congestion management, Priority Queuing (PQ), Custom Queuing (CQ), Weighted Fair Queue (WFQ) each with different strengths and weaknesses. This article focuses on Priority Queuing.</p>
<p><strong>&#8220;OK, you get to go first&#8221; </strong></p>
<p>The priority queuing congestion management strategy consists of four queues. These queues are creatively called the high, medium, normal and low queues. The way it works is this, whatever the router places in the high queue <strong>always </strong>gets served before the medium, normal, and low queues. Whatever the router places in the medium queue, <strong>always </strong>gets served before the normal and low queues but only if there is no stuff in the high queue. Whatever the router places in the normal queue <strong>always </strong>gets served before the low queue but only if there is no stuff in the medium and high queues. The Low queue gets served last as long as there is nothing in the other queues.</p>
<p>So frames in the high queue are given preferential treatment over other frames, which for VIP frames like voice is great. The problem with this method is that the other queues can suffer from starvation. Imagine a case where the high queue always has something in it (maybe a busy site with lots of voice traffic). If the high queue always has something in it, then the other queues will never get served!</p>
<p>So priority queuing is really great for high priority traffic,  but all other traffic suffers in some scenarios because of traffic starvation. It is usually seen on very low bandwidth links.  For the CCIE, the things that i would look for is the key word prioritise, or such and such protocol must take priority over another.</p>
<p><strong>Priority Queue Configuration.</strong></p>
<p>Lets have a look at how to configure it:</p>
<p>To configure priority queuing we need to figure out which traffic to put into the different queues. After we do this we define which interface to apply this congestion strategy to. Remember this is a congestion management strategy, so it will apply to <em>outbound </em>traffic.</p>
<p>The syntax for establishing a <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_o1h.htm#wp1081283" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">priority-list</a> is:</p>
<p><code>priority-list list-number protocol protocol-name {high | medium | normal | low } queue-keyword keyword-value</code></p>
<p>Lets have a look at a few examples:</p>
<p><code>access-lists 101 permit ip any 150.1.1.0 0.0.0.127<br />
priority-list 1 protocol ip high  list 101<br />
priority-list 1 protocol ip medium gt 120<br />
priority-list 1 protocol cdp low</code></p>
<p>The configuration above has all traffic that matches access-list 101 (any ip traffic heading to the 150.1.1.0/25 subnet) put in the high queue. All ip traffic greater than 120 bytes is placed in the medium queue. All cdp traffic is placed in the low queue.</p>
<p>What about traffic that doesn&#8217;t match that stuff? We might want all other traffic to be placed in the normal queue. To do that we use the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_o1h.htm#wp1036272" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">priority-list default</a> command. The syntax for this command is:</p>
<p><code>priority-list list-number default { high | medium | normal | low}</code></p>
<p>Lets expand that example above and make all other traffic go into the normal queue:</p>
<p><code>access-lists 101 permit ip any 150.1.1.0 0.0.0.127<br />
priority-list 1 protocol ip high  list 101<br />
priority-list 1 protocol ip medium gt 120<br />
priority-list 1 protocol cdp low<br />
priority-list 1 default normal</code></p>
<p>By default anything that doesn&#8217;t match a priority list is sent to the normal queue. The last line above is not really required, as that is the default.</p>
<p>The priority-list command not only allows deciding which protocols get to go in each of the queues, you can also decide which frames get to go into queues based on the interface it arrived on. This is done with the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_o1h.htm#wp1036351" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">priority-list interface</a> command:</p>
<p><code>priority-list list-number interface interface-type interface number { high | medium | normal | low }</code></p>
<p>Lets have a look at an example:</p>
<p><code>priority-list 1 int fa 0/0 medium</code></p>
<p>The above places all frames arriving on the fastethernet0/0  interface to the medium queue.  Cool huh?</p>
<p>What about precedence? If you have both a <code>priority-list interface</code> command and a <code>priority-list protocol</code> command in a single priority queue. Like access-lists, priority-lists are read one line at a time until a match is found.</p>
<p>Example 1:<br />
<code>access-list 101 permit any 150.1.1.0 0.0.0.127<br />
priority-list 1 protocol ip high list 101<br />
priority-list 1 interface fa0/0 medium</code></p>
<p>Example 2:<br />
<code>access-list 101 permit any 150.1.1.0 0.0.0.127<br />
priority-list 1 interface fa0/0 medium<br />
priority-list 1 protocol ip high list 101</code></p>
<p>Let&#8217;s say you have this scenario: A frame arrives on fa0/0 and is destined for the 150.1.1.0/128 subnet. With the first example, it would be placed in the high queue. Using the second example it would be placed in the medium queue.</p>
<p>The <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_o1h.htm#wp1081182" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">priority-list  queue-limit</a> command is used to place limits on the number of packets that can be waiting in each of the priority queues (ie. the queue size).</p>
<p><code>priority-list list-number queue-limit high-limit medium-limit normal-limit low-limit</code></p>
<p>For example:</p>
<p><code>priority-list 1 queue-limit  20 40 60 80</code></p>
<p>This sets the maximum packets in the priority queues to 20 for the high queue, 40 for the medium queue, 60 for the normal queue, and 80 for the low queue. These are the defaults queue sizes for each of the queues.</p>
<p>Now that we&#8217;ve had a look at configuring the priority queue how do we apply it to an interface. To do this we use the <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_o1h.htm#wp1036156" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">priority-group</a> command.</p>
<p><code>priority-group list-number</code></p>
<p>For example:</p>
<p><code>int fa0/0<br />
priority-group  1</code></p>
<p>This applies the priority-list 1 defined above, to interface fa0/0. Don&#8217;t forget this is congestion management so it only applies in an outbound direction.  You can create up to 16 different priority-lists each with a different set of the four queues, but only one of the lists can be applied to the interface.</p>
<p><strong>Show me the PQ!</strong></p>
<p>Now that we have gone through setting up priority queuing how do we verify that it has actually been set up the way we want? Show commands! The <a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios124/124cr/hqos_r/qos_s3h.htm#wp1057834" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cisco.com');" target="_blank">show queuing priority</a> command is used to verify the priority queues.</p>
<p><code>show queuing priority</code></p>
<p>For example:</p>
<p><code>Router(config)#priority-list 1 protocol ip high list 101<br />
Router(config)#priority-list 1 interface FastEthernet0/0 medium<br />
Router(config)#priority-list 1 protocol ip low gt 1024</code></p>
<p><code>Router#sh queuing priority<br />
Current DLCI priority queue configuration:<br />
Current priority queue configuration:<br />
List   Queue  Args<br />
1      normal protocol ip          list 101<br />
1      medium interface FastEthernet0/0<br />
1      low    protocol ip          gt 1024</code></p>
<p><strong>Summary:</strong></p>
<ul>
<li>Priority Queues are a congestion management strategy</li>
<li>There are 4 queues: high, medium, normal, low</li>
<li>It can suffer from queue starvation, as if the higher queues are always full the lower queues might never get served.</li>
<li>You define the priority queues using the priority-list command</li>
<li>You attach a priority queue to an interface using the priority-group command</li>
<li>You can define up to 16 priority-list but only one can be assigned to an interface</li>
<li>The priority list is evaluated in the order in which it was inserted.</li>
</ul>
<p>Read this article and more like it on <a href="http://ardenpackeer.com" >ardenpackeer.com</a>
<br>
Follow me on twitter: <a href="http://twitter.com/ardenpackeer" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">http://twitter.com/ardenpackeer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ardenpackeer.com/qos-voip/configuring-priority-queuing/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
