## Overview
Cisco IOS-XE uses several different configuration structures to deploy dynamic configurations. These structures act as logical functions that evaluate traffic and return values used by other network features. Understanding how these structures work logically helps you design more effective network policies.
| Object | Purpose |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Access-List | Identify traffic based on first match, then return true or false. |
| Route-Map | Matches based on an ACL then sets an L3 setting like for PBR, BGP Policy, or Redistribution. |
| Class-Map | Classification structures that return true or false based on all or any conditions defined, which can be of types ACL, DSCP, CoS, NBAR2, etc. |
| Access-Map | Functions like a class-map but includes actions forward or drop, for use with VACLs. |
| Policy-Map | Takes action on traffic defined by class-maps. Most commonly used for QoS. |
## Access List
Access lists are essentially functions that take in a packet and return a true or false value (permit or deny) based on a set of conditions.
#### Creating an Access List
```
ip access-list extended TELNET
permit tcp 192.168.1.0 0.0.0.255 any eq 23
```
This access list permits TCP traffic from the 192.168.1.0/24 network to any destination on port 23 (Telnet). All other traffic is implicitly denied.
#### Applying to an Interface
```
interface GigabitEthernet1/1
ip access-group TELNET in
```
Traffic that receives "PERMIT" is forwarded normally. Traffic that receives "DENY" is dropped.
> **Important:** When applied directly to interfaces, ACLs serve to forward or drop traffic. However, ACLs are also used by other features (route-maps, class-maps, NAT, etc.) where they simply return PERMIT or DENY as input for additional logic. The ACL itself doesn't forward or drop traffic in these cases - it just provides a match result.
## Route Map
Route-maps are structures that combine matching criteria with actions. Unlike ACLs which simply return permit or deny, route-maps evaluate conditions and then perform specific actions on matching traffic or routes.
#### Route-Map for PBR
```
ip access-list extended VOICE-TRAFFIC
permit udp any any range 16384 32767
route-map PBR-EXAMPLE permit 10
match ip address VOICE-TRAFFIC
set ip next-hop 10.1.1.1
route-map PBR-EXAMPLE permit 20
interface GigabitEthernet0/1
ip policy route-map PBR
```
#### Route-Map for BGP Policy
```
route-map BGP-IN permit 10
match ip address prefix-list CUSTOMERS
set local-preference 200
router bgp 65000
neighbor 10.1.1.1 route-map BGP-IN in
```
#### Route-Map for BGP Route Redistribution
```
route-map REDIST-OSPF permit 10
match ip address prefix-list INTERNAL
set metric 100
router bgp 65000
redistribute ospf 1 route-map REDIST-OSPF
```
## Class Map
Class-maps are classification structures that identify and group traffic based on specific criteria. Unlike ACLs which return permit or deny based on the first matching criteria, class-maps return "matches this class" or "does not match this class" for use by policy-maps.
When on the CLI, you'll notice there are multiple options to match against:
```
Router(config)#class-map CLI_CLASS
Router(config-cmap)#?
Class-map configuration commands:
description Class-Map description
exit Exit from class-map configuration mode
match classification criteria
no Negate or set default values of a command
Router(config-cmap)#match ?
access-group Access group
any Any packets
class-map Class map
cos IEEE 802.1Q/ISL class of service/user priority values
dscp Match DSCP in IPv4 and IPv6 packets
precedence Match Precedence in IPv4 and IPv6 packets
protocol Protocol
vlan VLANs to match
...
```
> Note that class-maps can be configured two ways, `match-all` or `match-any`, which correlate to Boolean logic operators. In the above example, the access-map will return `true` if the traffic is either Telnet or SSH.
#### Class-Map using ACLs
```
ip access-list extended TELNET
permit tcp any any eq 23
ip access-list extended SSH
permit tcp any any eq 22
class-map match-any CLI_CLASS
match access-group name TELNET
match access-group name SSH
```
#### Class-Map using DSCP/CoS
```
class-map match-all VOICE_CLASS
match dscp ef
match cos 5
```
#### Class-Map using Protocol (NBAR2)
```
class-map match-all COLLABORATION_CLASS
match protocol webex
match protocol ms-teams
```
> **Important:** Class-maps cannot be applied to interfaces or protocols directly, rather they have to be used with a policy-map.
#### Access-Maps for VLANs
Access-Maps are special subsets of Class-Maps where they can be assigned an action.
```
vlan access-map DROP_TELNET 10
match ip address TELNET
action drop log
vlan access-map DROP_TELNET 20
action forward
vlan filter DROP_TELNET vlan-list 10
```
This behavior is contrary to the normal function of Class-maps, but I have placed it here since the syntax matches that of Class-Maps.
## Policy Map
Policy-maps define actions to take on traffic classified by class-maps. While class-maps identify traffic, policy-maps specify what to do with that traffic. Policy-maps are the action engine of the Modular QoS CLI (MQC) framework.
#### Creating a Policy-Map
```
class-map VOICE
match dscp ef
class-map VIDEO
match dscp af41
policy-map QOS-POLICY
class VOICE
priority percent 20
police rate 512000
conform-action transmit
exceed-action drop
class VIDEO
bandwidth remaining percent 40
class class-default
bandwidth remaining percent 60
random-detect dscp-based
```
#### Policy-Map Actions
Policy-maps can apply various actions depending on the context:
**QoS Actions:**
- `priority` - Priority queueing (LLQ)
- `bandwidth` - Guarantee minimum bandwidth
- `police` - Rate limiting
- `set` - Mark or remark traffic
- `shape` - Traffic shaping
- `random-detect` - WRED configuration
#### Applying a Policy-Map
```
interface GigabitEthernet0/1
service-policy output QOS-POLICY
```
1. Packet arrives on GigabitEthernet0/1
2. Evaluated against VOICE class-map (DSCP EF?)
1. If match: Apply priority queueing and policing
3. If no match, evaluate against VIDEO class-map (DSCP AF41?)
1. If match: Apply bandwidth allocation
4. If no match, traffic goes to class-default
1. Apply default bandwidth allocation