Switch-Side C3PL Configuration
1. Overview
C3PL (Cisco Common Classification Policy Language) is Cisco’s policy language for IBNS 2.0 (Identity-Based Networking Services). It replaces legacy 802.1X configuration with a more flexible event-driven model using:
-
Interface Templates - Reusable port configuration
-
Policy Maps - Event-driven authentication logic
-
Class Maps - Condition matching for authentication states
-
Service Templates - Dynamic policy application
|
This configuration applies to Cisco Catalyst switches running IOS-XE 16.x+. The examples show configuration for the Domus network switch ( |
2. Interface Template
The interface template defines authentication behavior applied to all 802.1X-enabled access ports.
template DefaultWiredDot1xClosedAuth
dot1x pae authenticator (1)
dot1x timeout tx-period 7 (2)
dot1x max-reauth-req 3 (3)
mab (4)
access-session control-direction in (5)
access-session closed (6)
access-session port-control auto (7)
authentication periodic (8)
authentication timer reauthenticate server (9)
service-policy type control subscriber PMAP_Dot1xClosed_1X_MAB (10)
| 1 | Port acts as 802.1X authenticator (switch authenticates clients) |
| 2 | EAP-Request/Identity retransmit interval: 7 seconds (default 30 is too slow) |
| 3 | Maximum EAP-Request retries before MAB fallback |
| 4 | Enable MAC Authentication Bypass as fallback for non-supplicant devices |
| 5 | Control traffic ingress only (client-to-switch), allow switch-to-client |
| 6 | CLOSED MODE — block all traffic until authenticated (zero-trust) |
| 7 | Enable 802.1X port-based access control |
| 8 | Periodic reauthentication enabled |
| 9 | Reauthentication interval from RADIUS Session-Timeout attribute |
| 10 | Apply the C3PL policy map (event-driven authentication logic) |
|
Closed Mode vs Open Mode
Always use closed mode for production security. |
3. Interface Application
Apply the template to access ports where workstations connect:
interface GigabitEthernet1/0/5
description Linux Workstation - modestus-p50
switchport access vlan 10 (1)
switchport mode access
switchport nonegotiate (2)
device-tracking attach-policy DT_POLICY (3)
source template DefaultWiredDot1xClosedAuth (4)
spanning-tree portfast (5)
spanning-tree bpduguard enable (6)
| 1 | Access VLAN (data) — ISE can override via RADIUS VLAN attribute |
| 2 | Disable DTP negotiation (security hardening) |
| 3 | Device tracking for IP-MAC binding (prevents spoofing) |
| 4 | Apply the authentication template |
| 5 | Portfast for immediate forwarding after auth (skip STP learning) |
| 6 | BPDU guard shuts port if switch/bridge is connected (prevents loops) |
4. Policy Map
The policy map defines event-driven authentication logic. This is the "brain" of C3PL.
policy-map type control subscriber PMAP_Dot1xClosed_1X_MAB
event session-started match-all (1)
10 class always do-until-failure
10 authenticate using dot1x retries 2 retry-time 0 priority 10
20 authenticate using mab priority 20
event authentication-failure match-first (2)
5 class DOT1X_FAILED do-until-failure
10 terminate dot1x
20 authenticate using mab priority 20
10 class AAA_SVR_DOWN_UNAUTHD_HOST do-until-failure
5 clear-authenticated-data-hosts-on-port
10 activate service-template CriticalAuth_SRV_TEMPLATE
20 authorize
30 pause reauthentication
20 class AAA_SVR_DOWN_AUTHD_HOST do-until-failure
5 clear-authenticated-data-hosts-on-port
10 pause reauthentication
20 authorize
30 class DOT1X_NO_RESP do-until-failure
10 terminate dot1x
20 authenticate using mab priority 20
40 class MAB_FAILED do-until-failure
10 terminate mab
20 authentication-restart 60
60 class always do-until-failure
10 terminate dot1x
20 terminate mab
30 authentication-restart 60
event aaa-available match-all (3)
10 class IN_CRITICAL_AUTH do-until-failure
10 clear-session
20 class NOT_IN_CRITICAL_AUTH do-until-failure
10 clear-session
event agent-found match-all (4)
10 class always do-until-failure
10 terminate mab
20 authenticate using dot1x retries 2 retry-time 0 priority 10
event inactivity-timeout match-all (5)
10 class always do-until-failure
10 clear-session
event authentication-success match-all (6)
event violation match-all (7)
10 class always do-until-failure
10 restrict
event authorization-failure match-all (8)
10 class AUTHC_SUCCESS-AUTHZ_FAIL do-until-failure
10 authentication-restart 60
| 1 | Session Started: Try dot1x first (priority 10), then MAB (priority 20) simultaneously |
| 2 | Auth Failure: Handle dot1x fail, AAA timeout (critical auth), MAB fail |
| 3 | AAA Available: When ISE comes back online, clear critical auth sessions |
| 4 | Agent Found: If supplicant starts after MAB, terminate MAB and try dot1x |
| 5 | Inactivity Timeout: Clear session if no traffic |
| 6 | Auth Success: dACL/VLAN pushed via RADIUS, no additional action needed |
| 7 | Violation: Restrict traffic on MAC move or second MAC |
| 8 | Authz Failure: If authenticated but not authorized, restart after 60 seconds |
5. Class Maps
Class maps match specific authentication conditions.
5.1. Authentication Method Classes
class-map type control subscriber match-all DOT1X
match method dot1x
class-map type control subscriber match-all MAB
match method mab
5.2. Failure Classes
class-map type control subscriber match-all DOT1X_FAILED
match method dot1x
match result-type method dot1x authoritative (1)
class-map type control subscriber match-all DOT1X_NO_RESP
match method dot1x
match result-type method dot1x agent-not-found (2)
class-map type control subscriber match-all MAB_FAILED
match method mab
no-match result-type method mab success (3)
| 1 | Authoritative failure = ISE explicitly rejected (bad cert, unknown user) |
| 2 | Agent-not-found = no supplicant response (device doesn’t support dot1x) |
| 3 | Match MAB attempts that did NOT succeed |
5.3. AAA Server Down Classes
class-map type control subscriber match-all AAA_SVR_DOWN_UNAUTHD_HOST
match authorization-status unauthorized
match result-type aaa-timeout (1)
class-map type control subscriber match-all AAA_SVR_DOWN_AUTHD_HOST
match authorization-status authorized
match result-type aaa-timeout (2)
| 1 | New host, ISE unreachable — apply critical auth VLAN |
| 2 | Previously authenticated host, ISE unreachable — keep current session |
6. Service Templates
Service templates define dynamic policy for special scenarios like critical authentication.
service-template CriticalAuth_SRV_TEMPLATE
vlan 999 (1)
access-group ACL_CRITICAL_AUTH (2)
ip access-list extended ACL_CRITICAL_AUTH
permit udp any host 10.50.1.1 eq 53
permit udp any any eq 67
permit udp any any eq 68
permit tcp any host 10.50.1.50 eq 88
permit tcp any host 10.50.1.50 eq 636
permit tcp any host 10.50.1.21 eq 8443
deny ip any any log
| 1 | Critical auth VLAN when ISE is unreachable |
| 2 | Minimal access - DNS, DHCP, AD, ISE only |
7. CoA and Dynamic Authorization
ISE uses Change of Authorization (CoA) to push policy changes mid-session.
7.1. CoA Client Configuration
aaa server radius dynamic-author
client 10.50.1.20 server-key 0 <RADIUS_SECRET> (1)
client 10.50.1.21 server-key 0 <RADIUS_SECRET> (2)
| 1 | ISE-01 as CoA client |
| 2 | ISE-02 as CoA client |
7.2. How dACLs Are Pushed
-
Client authenticates (dot1x or MAB)
-
Switch sends RADIUS Access-Request to ISE
-
ISE evaluates authorization policy, returns:
-
Access-Accept with
Cisco-AVPair: ACS:CiscoSecure-Defined-ACL=DACL<dacl-name> -
VLAN assignment (optional)
-
Session-Timeout for reauthentication
-
-
Switch downloads dACL content from ISE via RADIUS
-
Switch applies dACL to port (client traffic filtered)
-
If posture changes, ISE sends CoA with new dACL
8. AAA Configuration
Global AAA configuration for 802.1X with ISE:
aaa new-model
aaa authentication dot1x default group radius
aaa authorization network default group radius
aaa accounting dot1x default start-stop group radius
radius server ISE-01
address ipv4 10.50.1.20 auth-port 1812 acct-port 1813
key 0 <RADIUS_SECRET>
radius server ISE-02
address ipv4 10.50.1.21 auth-port 1812 acct-port 1813
key 0 <RADIUS_SECRET>
aaa group server radius ISE_SERVERS
server name ISE-01
server name ISE-02
radius-server dead-criteria time 5 tries 3
radius-server deadtime 15
9. Device Tracking
Device tracking binds IP to MAC, preventing IP spoofing:
device-tracking policy DT_POLICY
security-level glean
tracking enable
interface GigabitEthernet1/0/5
device-tracking attach-policy DT_POLICY
10. Verification Commands
10.1. Access Session Details
show access-session interface Gi1/0/5 details
Shows MAC, IP, username, domain, current policy (dACL, VLAN), auth method, session state.
10.2. Authentication Sessions
show authentication sessions interface Gi1/0/5
Summary view of all sessions on the port.
10.3. Downloaded dACL
show ip access-list interface Gi1/0/5
Shows ACL entries currently applied (downloaded from ISE).
11. Operational Commands
12. Quick Reference
| Command | Purpose |
|---|---|
|
Full session details (MAC, IP, VLAN, dACL) |
|
Session summary |
|
View downloaded dACL content |
|
Dot1x state machine details |
|
Bounce port (force reauth) |
|
IP-MAC bindings |