Symptom
QoS policy fails to classify MPLS packets when the following class-map is defined:
class-map match-any L1-DSCP6-EXP6
match dscp cs6
match mpls experimental topmost 6
----------------------------------------------------------------
Another example:
C8500L-8S4X on 17.6.4 IOS-XE
QoS policy-map comprised of class-maps including "match mpls experimental topmost" and "match access-group name [name]" (or "match dscp [dscp]") result in mpls packets with exp bit 5 being incorrectly classified as classes MERCURY_OUT and class-default.
class-map match-any PLATINUM_OUT
match mpls experimental topmost 5
class-map match-any GOLD_OUT
match mpls experimental topmost 4
class-map match-any MERCURY_OUT
match mpls experimental topmost 1
class-map match-any CONTROL_OUT
match access-group name BGP_PEERING
Conditions
When a QoS policy class-map is defined to match with both "dscp" and "mpls experimental topmost" or a policy with classes matching "mpls experimental topmost" and classes matching "access-group", incorrect classification lookup result is found.
The problem is specific to software TCAM based platforms, such as C8500L, ISR and C8000V.
This issue was not seen on C8500, ASR1K.
Workaround
Separate class-maps with "mpls experimental topmost" and other classification into different QoS policies.
Define parent QoS policy to match "mpls experiential topmost" and define child QoS policy with other class-maps.
Further Problem Description