06-09-2014 01:49 PM - edited 03-04-2019 11:07 PM
I have an interface on a router connected to an any-to-any virtual ethernet service. The different sites have different carrier bandwidths, so to prevent over-saturation of any of them, the router at my HQ is going to act as a hub (99% of traffic is between the sites and HQ anyway, not site-to-site).
Since interface bandwidth and actual bandwidth are different, I'm trying to shape traffic per site like so:
class-map match-any voice_and_Lifesize_audio
match ip dscp ef
class-map match-any Lifesize_video
match ip dscp af41
class-map match-any SIP_traffic
match ip dscp cs3
class-map match-any InternalTraffic
match access-group name InternalTrafficACL
class-map match-any Site2_traffic
match access-group name Site2TrafficACL
class-map match-any Site1_traffic
match access-group name Site1TrafficACL
class-map match-any Site3_traffic
match access-group name Site3TrafficACL
class-map match-any Site4_traffic
match access-group name Site4TrafficACL
policy-map ChildForSite1
class SIP_traffic
priority 128
class voice_and_Lifesize_audio
priority 512
class Lifesize_video
priority 1024
class InternalTraffic
bandwidth remaining percent 70
random-detect dscp-based
fair-queue
class class-default
bandwidth remaining percent 30
random-detect dscp-based
fair-queue
policy-map ChildForSite3
class SIP_traffic
priority 128
class voice_and_Lifesize_audio
priority 400
class Lifesize_video
priority 512
class InternalTraffic
bandwidth remaining percent 70
random-detect dscp-based
fair-queue
class class-default
bandwidth remaining percent 30
random-detect dscp-based
fair-queue
policy-map ChildForSite4
class SIP_traffic
priority 256
class voice_and_Lifesize_audio
priority 1536
class Lifesize_video
priority 1536
class InternalTraffic
bandwidth remaining percent 70
random-detect dscp-based
fair-queue
class class-default
bandwidth remaining percent 30
random-detect dscp-based
fair-queue
policy-map ChildForSite2
class SIP_traffic
priority 128
class voice_and_Lifesize_audio
priority 1024
class Lifesize_video
priority 768
class InternalTraffic
bandwidth remaining percent 70
random-detect dscp-based
fair-queue
class class-default
bandwidth remaining percent 30
random-detect dscp-based
fair-queue
policy-map VirtualEthernetService
class Site2_traffic
shape average 2700000
service-policy ChildForSite2
class Site1_traffic
shape average 2700000
service-policy ChildForSite1
class Site3_traffic
shape average 1350000
service-policy ChildForSite3
class Site4_traffic
shape average 5400000
service-policy ChildForSite4
Here's the interface I want to apply it to. Here at HQ, it has 15Mbit of bandwidth allocated by the carrier:
int gi0/2
description VirtualEthernet
no ip redirects
no ip proxy-arp
duplex auto
speed auto
ip address 10.254.16.16 255.255.255.0
bandwidth 15360
ip flow ingress
ip flow egress
But when I do:
service-policy output VirtualEthernetService
I get:
Insufficient bandwidth 3072 kbps for bandwidth guarantee
Now that the max-reserved-bandwidth doesn't exist any longer, Cisco's documentation here says to designate bandwidth for a default class:
But if I add a default class to the VirtualEthernetService and define bandwidth in any way (kbps, percent, remaining percent) it doesn't make any difference. I get the same Insufficient Bandwidth error for 3072 kpbs when I try to apply to the interface.
So, I tried a different approach. I created the policy-map without Site3 (the lowest bandwidth site), and included a default class:
policy-map VirtualEthernetService
class Site4_traffic
shape average 5400000
service-policy ChildForSite4
class Site2_traffic
shape average 2700000
service-policy ChildForSite2
class Site1_traffic
shape average 2700000
service-policy ChildForSite1
class class-default
bandwidth percent 5
Then I applied it to the interface:
int gi0/2
service-policy output VirtualEthernetService
That worked. Then I added the Site3 info into the policy-map:
policy-map VirtualEthernetService
class Site3_traffic
shape average 1350000
service-policy ChildForSite3
And... no error. And if I do a sho policy-map int gi0/2, I see that it has been applied. However, if I remove it from the interface and re-add it, guess what I get?
int gi0/2
no service-policy output VirtualEthernetService
service-policy output VirtualEthernetService
Insufficient bandwidth to meet bandwidth guarantees
Arg! And this time, an amount of bandwidth isn't even listed.
So, I have the following questions:
1. In my Child policy-maps, when use the bandwidth remaining percent, is that remaining percent within the parent shaper?
2. Why was I able to apply a partially-completed policy-map to the interface, then "trick" it by adding the additional class afterward? Is this a bug?
3. In the absence of the max-reserved-bandwidth command, is adding a default class with a bandwidth percent 5 to the parent policy accomplishing the same thing? In other words, reserving 95% of the available bandwidth on the interface for the HQF traffic?
3. Do I completely misunderstand HFQ, and should I be doing this differently?
If anyone has any advice to offer, I would greatly appreciate it. Thank you!
06-10-2014 11:41 AM
Update: I THINK I might have figured this out. Shaping by itself doesn't define bandwidth for each of the classes under the parent policy. So I believe the bandwidth remaining percent definitions in the classes within those classes were calculating based on the bandwidth of the parent interface.
I defined bandwidth for the classes within the parent policy:
policy-map VirtualEthernetService
class Site2_traffic
shape average 2700000
bandwidth percent 20
service-policy ChildForSite2
class Site1_traffic
shape average 2700000
bandwidth percent 20
service-policy ChildForSite1
class Site3_traffic
shape average 1350000
bandwidth percent 10
service-policy ChildForSite3
class Site4_traffic
shape average 5400000
bandwidth percent 40
service-policy ChildForSite4
I was able to apply it to the interface after that with no error. If I do a sho policy-map int gi0/2 now, I see the available bandwidth for each class in the parent policy, and it matches to the available bandwidth at the remote site.
This isn't in production yet, but we'll see how it goes!
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide