My approach would be to shape the sub-interface to a given level first, then apply CBWFQ under that, identifying any specific traffic after the shaped rate has been set. You can shape to 100% if you don't know the bandwidth allocation as follows: policy-map parent class class-default shape average percent 100 service-policy child policy-map child class class1 bandwidth percent 20 int serial 1.1 service-policy-out parent If you apply this configu, you get the following output which shows the overall rate for the sub-interface and 20% of the bandwidth guaranteed for the traffic you want. Service-policy output: parent Class-map: class-default (match-any) 0 packets, 0 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) 100 (%) 0 (ms) 0 (ms) 1544000/1544000 9650 38600 38600 25 4825 Adapt Queue Packets Bytes Packets Bytes Shaping Active Depth Delayed Delayed Active - 0 0 0 0 0 no Service-policy : child Class-map: class1 (match-all) 0 packets, 0 bytes 5 minute offered rate 0 bps, drop rate 0 bps Match: access-group name FORS1.1 Queueing Output Queue: Conversation 73 Bandwidth 20 (%) Bandwidth 308 (kbps) 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) 0 packets, 0 bytes 5 minute offered rate 0 bps, drop rate 0 bps Match: any ----