Port Channel
Port Channel interfaces provide link aggregation capabilities that combine multiple physical Ethernet interfaces into a single logical interface, delivering increased bandwidth, redundancy, and load distribution across member interfaces using protocols such as LACP (Link Aggregation Control Protocol) or static configuration. They enable seamless failover when individual member links fail while maintaining session continuity, and support both Layer 2 switching with VLAN trunking and Layer 3 routing with comprehensive protocol support including OSPF, BGP, and spanning tree participation. Port Channels are fundamental for building resilient network infrastructures, enabling high-bandwidth connections between switches, servers, and storage systems while providing the flexibility to scale bandwidth incrementally and ensure network availability through redundant path management.
Diagram
Section titled “Diagram”Classes
Section titled “Classes”interfaces (iosxe.devices.configuration)
Section titled “interfaces (iosxe.devices.configuration)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| port_channels | List | [port_channels] | No |
port_channels (iosxe.devices.configuration.interfaces)
Section titled “port_channels (iosxe.devices.configuration.interfaces)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| id | Integer | Yes | ||
| interface_groups | List | String | No | |
| interface_group_policy | Choice | merge, replace | No | |
| description | String | No | ||
| shutdown | Boolean | true, false | No | |
| mtu | Integer | min: 64, max: 18000 | No | |
| vrf_forwarding | String | No | ||
| ipv4 | Class | [ipv4] | No | |
| ipv6 | Class | [ipv6] | No | |
| bfd | Class | [bfd] | No | |
| spanning_tree | Class | [spanning_tree] | No | |
| arp_timeout | Integer | min: 0, max: 2147483 | No | |
| load_interval | Integer | min: 30, max: 600 | No | |
| snmp_trap_link_status | Boolean | true, false | No | |
| logging_event_link_status | Boolean | true, false | No | |
| mpls | Class | [mpls] | No | |
| ospf | Class | [ospf] | No | |
| ospfv3 | Class | [ospfv3] | No | |
| isis | Class | [isis] | No | |
| pim | Class | [pim] | No | |
| igmp | Class | [igmp] | No | |
| switchport | Class | [switchport] | No | |
| subinterfaces | List | [subinterfaces] | No | |
| auto_qos | Class | [auto_qos] | No | |
| negotiation_auto | Boolean | true, false | No | |
| evpn_ethernet_segments | List | [evpn_ethernet_segments] | No | |
| evpn_ethernet_segments_legacy | List | [evpn_ethernet_segments_legacy] | No | |
| vrrp_v2 | List | [vrrp_v2] | No | |
| zone_member_security | String | No |
ipv4 (iosxe.devices.configuration.interfaces.port_channels)
Section titled “ipv4 (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| address | IP | No | ||
| address_mask | IP | No | ||
| proxy_arp | Boolean | true, false | No | |
| arp_inspection_trust | Boolean | true, false | No | |
| arp_inspection_limit_rate | Integer | min: 0, max: 4294967295 | No | |
| dhcp_snooping_trust | Boolean | true, false | No | |
| dhcp_relay_source_interface_type | Choice | Loopback, Vlan, GigabitEthernet, TwoGigabitEthernet, FiveGigabitEthernet, TenGigabitEthernet, TwentyFiveGigabitEthernet, FortyGigabitEthernet, FiftyGigabitEthernet, HundredGigabitEthernet, PortChannel | No | |
| dhcp_relay_source_interface_id | Any | String or Integer[min: 0] | No | |
| dhcp_relay_information_option_vpn_id | Boolean | true, false | No | |
| helper_addresses | List | [helper_addresses] | No | |
| access_group_in | String | No | ||
| access_group_out | String | No | ||
| flow_monitors | List | [flow_monitors] | No | |
| redirects | Boolean | true, false | No | |
| unreachables | Boolean | true, false | No | |
| unnumbered_interface_type | Choice | Loopback, Vlan, GigabitEthernet, TwoGigabitEthernet, FiveGigabitEthernet, TenGigabitEthernet, TwentyFiveGigabitEthernet, FortyGigabitEthernet, FiftyGigabitEthernet, HundredGigabitEthernet, PortChannel | No | |
| unnumbered_interface_id | Any | String or Integer[min: 0] | No | |
| nat_inside | Boolean | true, false | No | |
| nat_outside | Boolean | true, false | No | |
| address_dhcp | Boolean | true, false | No | |
| verify_unicast_source_reachable_via | Choice | any, rx | No | |
| verify_unicast_source_allow_self_ping | Boolean | true, false | No | |
| verify_unicast_source_allow_default | Boolean | true, false | No |
ipv6 (iosxe.devices.configuration.interfaces.port_channels)
Section titled “ipv6 (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| enable | Boolean | true, false | No | |
| addresses | List | [addresses] | No | |
| link_local_addresses | List | IP | No | |
| address_autoconfig_default | Boolean | true, false | No | |
| address_dhcp | Boolean | true, false | No | |
| mtu | Integer | min: 1280, max: 9976 | No | |
| nd_ra_suppress_all | Boolean | true, false | No | |
| flow_monitors | List | [flow_monitors] | No | |
| pim | Class | [pim] | No |
bfd (iosxe.devices.configuration.interfaces.port_channels)
Section titled “bfd (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| template | String | No | ||
| enable | Boolean | true, false | No | |
| local_address | IP | No | ||
| interval | Integer | min: 50, max: 9999 | No | |
| interval_min_rx | Integer | min: 50, max: 9999 | No | |
| interval_multiplier | Integer | min: 3, max: 50 | No | |
| echo | Boolean | true, false | No |
spanning_tree (iosxe.devices.configuration.interfaces.port_channels)
Section titled “spanning_tree (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| portfast | Boolean | true, false | No | |
| portfast_disable | Boolean | true, false | No | |
| bpduguard | Boolean | true, false | No | |
| bpduguard_disable | Boolean | true, false | No | |
| guard | Choice | loop, none, root | No | |
| link_type | Choice | shared, point-to-point | No | |
| portfast_trunk | Boolean | true, false | No | |
| portfast_edge | Boolean | true, false | No |
mpls (iosxe.devices.configuration.interfaces.port_channels)
Section titled “mpls (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ip | Boolean | true, false | No | |
| mtu | Integer | No |
ospf (iosxe.devices.configuration.interfaces.port_channels)
Section titled “ospf (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| authentication_key_chain | String | No | ||
| authentication_message_digest | Boolean | true, false | No | |
| authentication_null | Boolean | true, false | No | |
| cost | Integer | min: 1, max: 65535 | No | |
| dead_interval | Integer | min: 1, max: 65535 | No | |
| hello_interval | Integer | min: 1, max: 65535 | No | |
| message_digest_keys | List | [message_digest_keys] | No | |
| mtu_ignore | Boolean | true, false | No | |
| multi_area_ids | List | Any[String or Integer[min: 0]] | No | |
| network_type | Choice | broadcast, non-broadcast, point-to-multipoint, point-to-point | No | |
| priority | Integer | min: 0, max: 255 | No | |
| process_ids | List | [process_ids] | No | |
| ttl_security_hops | Integer | min: 1, max: 254 | No |
ospfv3 (iosxe.devices.configuration.interfaces.port_channels)
Section titled “ospfv3 (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| bfd | Boolean | true, false | No | |
| cost | Integer | min: 1, max: 65535 | No | |
| dead_interval | Integer | min: 1, max: 65535 | No | |
| hello_interval | Integer | min: 1, max: 65535 | No | |
| mtu_ignore | Boolean | true, false | No | |
| network_type | Choice | broadcast, non-broadcast, point-to-multipoint, point-to-point | No | |
| priority | Integer | min: 0, max: 255 | No |
isis (iosxe.devices.configuration.interfaces.port_channels)
Section titled “isis (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| area_tag | String | No | ||
| ipv4_metric_levels | List | [ipv4_metric_levels] | No | |
| network_point_to_point | Boolean | true, false | No |
pim (iosxe.devices.configuration.interfaces.port_channels)
Section titled “pim (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| passive | Boolean | true, false | No | |
| dense_mode | Boolean | true, false | No | |
| sparse_mode | Boolean | true, false | No | |
| sparse_dense_mode | Boolean | true, false | No | |
| bfd | Boolean | true, false | No | |
| border | Boolean | true, false | No | |
| bsr_border | Boolean | true, false | No | |
| dr_priority | Integer | min: 0, max: 4294967294 | No |
igmp (iosxe.devices.configuration.interfaces.port_channels)
Section titled “igmp (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| version | Integer | min: 1, max: 3 | No |
switchport (iosxe.devices.configuration.interfaces.port_channels)
Section titled “switchport (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| enable | Boolean | true, false | No | |
| mode | Choice | access, dot1q-tunnel, private-vlan-trunk, private-vlan-host, private-vlan-promiscuous, trunk | No | |
| nonegotiate | Boolean | true, false | No | |
| access_vlan | Integer | min: 1, max: 4094 | No | |
| voice_vlan | Any | Integer[min: 1, max: 4094] or Choice[dot1p, none, untagged] or String[Regex: ^.*[\$\%]\{.*$] | No | |
| trunk_allowed_vlans | Class | [trunk_allowed_vlans] | No | |
| trunk_allowed_vlans_legacy | Class | [trunk_allowed_vlans_legacy] | No | |
| trunk_native_vlan_tag | Boolean | true, false | No | |
| trunk_native_vlan_id | Integer | min: 1, max: 4094 | No | |
| host | Boolean | true, false | No |
subinterfaces (iosxe.devices.configuration.interfaces.port_channels)
Section titled “subinterfaces (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| id | String | Yes | ||
| description | String | No | ||
| shutdown | Boolean | true, false | No | |
| vrf_forwarding | String | No | ||
| ip_mtu | Integer | min: 68, max: 18000 | No | |
| ipv4 | Class | [ipv4] | No | |
| ipv6 | Class | [ipv6] | No | |
| bfd | Class | [bfd] | No | |
| encapsulation_dot1q_vlan_id | Integer | min: 1, max: 4094 | No | |
| arp_timeout | Integer | min: 0, max: 2147483 | No | |
| auto_qos | Class | [auto_qos] | No | |
| mpls | Class | [mpls] | No | |
| ospf | Class | [ospf] | No | |
| ospfv3 | Class | [ospfv3] | No | |
| isis | Class | [isis] | No | |
| pim | Class | [pim] | No | |
| igmp | Class | [igmp] | No | |
| vrrp_v2 | List | [vrrp_v2] | No | |
| zone_member_security | String | No |
auto_qos (iosxe.devices.configuration.interfaces.port_channels)
Section titled “auto_qos (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| classify | Boolean | true, false | No | |
| classify_police | Boolean | true, false | No | |
| trust | Boolean | true, false | No | |
| trust_cos | Boolean | true, false | No | |
| trust_dscp | Boolean | true, false | No | |
| video_cts | Boolean | true, false | No | |
| video_ip_camera | Boolean | true, false | No | |
| video_media_player | Boolean | true, false | No | |
| voip_cisco_phone | Boolean | true, false | No | |
| voip_cisco_softphone | Boolean | true, false | No | |
| voip_trust | Boolean | true, false | No | |
| trust_device | Choice | cisco-phone, cts, ip-camera, media-player | No |
evpn_ethernet_segments (iosxe.devices.configuration.interfaces.port_channels)
Section titled “evpn_ethernet_segments (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| es_value | Integer | min: 1, max: 65535 | Yes |
evpn_ethernet_segments_legacy (iosxe.devices.configuration.interfaces.port_channels)
Section titled “evpn_ethernet_segments_legacy (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| es_value | Integer | min: 1, max: 65535 | Yes |
vrrp_v2 (iosxe.devices.configuration.interfaces.port_channels)
Section titled “vrrp_v2 (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| group_id | Integer | min: 1, max: 255 | Yes | |
| ip_primary_address | IP | No | ||
| ip_secondary_addresses | List | IP | No | |
| priority | Integer | min: 1, max: 254 | No | |
| preempt | Boolean | true, false | No | |
| preempt_delay_minimum | Integer | min: 0, max: 3600 | No | |
| timers_advertise_interval | Integer | min: 1, max: 255 | No | |
| authentication_text | String | No | ||
| description | String | No | ||
| tracks | List | [tracks] | No | |
| shutdown | Boolean | true, false | No |
helper_addresses (iosxe.devices.configuration.interfaces.port_channels.ipv4)
Section titled “helper_addresses (iosxe.devices.configuration.interfaces.port_channels.ipv4)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| address | IP | Yes | ||
| global | Boolean | true, false | No | |
| vrf | String | No |
flow_monitors (iosxe.devices.configuration.interfaces.port_channels.ipv4)
Section titled “flow_monitors (iosxe.devices.configuration.interfaces.port_channels.ipv4)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| name | String | Yes | ||
| direction | Choice | input, output | Yes |
addresses (iosxe.devices.configuration.interfaces.port_channels.ipv6)
Section titled “addresses (iosxe.devices.configuration.interfaces.port_channels.ipv6)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| prefix | IP | Yes | ||
| eui_64 | Boolean | true, false | No |
pim (iosxe.devices.configuration.interfaces.port_channels.ipv6)
Section titled “pim (iosxe.devices.configuration.interfaces.port_channels.ipv6)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| pim | Boolean | true, false | No | |
| bfd | Boolean | true, false | No | |
| bsr_border | Boolean | true, false | No | |
| dr_priority | Integer | min: 0, max: 4294967295 | No |
message_digest_keys (iosxe.devices.configuration.interfaces.port_channels.ospf)
Section titled “message_digest_keys (iosxe.devices.configuration.interfaces.port_channels.ospf)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| id | Integer | min: 1, max: 255 | Yes | |
| md5_auth_key | String | No | ||
| md5_auth_type | Choice | 0, 7 | No |
process_ids (iosxe.devices.configuration.interfaces.port_channels.ospf)
Section titled “process_ids (iosxe.devices.configuration.interfaces.port_channels.ospf)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| id | Integer | min: 1, max: 65535 | No | |
| areas | List | Any[String or Integer[min: 0]] | No |
ipv4_metric_levels (iosxe.devices.configuration.interfaces.port_channels.isis)
Section titled “ipv4_metric_levels (iosxe.devices.configuration.interfaces.port_channels.isis)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| level | Choice | level-1, level-2 | Yes | |
| value | Integer | min: 1, max: 16777214 | Yes |
trunk_allowed_vlans (iosxe.devices.configuration.interfaces.port_channels.switchport)
Section titled “trunk_allowed_vlans (iosxe.devices.configuration.interfaces.port_channels.switchport)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| all | Boolean | true, false | No | |
| none | Boolean | true, false | No | |
| vlans | Class | [vlans] | No | |
| add | Class | [add] | No | |
| except | Class | [except] | No | |
| remove | Class | [remove] | No |
trunk_allowed_vlans_legacy (iosxe.devices.configuration.interfaces.port_channels.switchport)
Section titled “trunk_allowed_vlans_legacy (iosxe.devices.configuration.interfaces.port_channels.switchport)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ids | List | Integer[min: 1, max: 4094] | No | |
| ranges | List | [ranges] | No |
tracks (iosxe.devices.configuration.interfaces.port_channels.vrrp_v2)
Section titled “tracks (iosxe.devices.configuration.interfaces.port_channels.vrrp_v2)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| object_id | Integer | min: 1, max: 1000 | Yes | |
| decrement | Integer | min: 1, max: 255 | No |
vlans (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)
Section titled “vlans (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ids | List | Integer[min: 1, max: 4094] | No | |
| ranges | List | [ranges] | No |
add (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)
Section titled “add (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ids | List | Integer[min: 1, max: 4094] | No | |
| ranges | List | [ranges] | No |
except (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)
Section titled “except (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ids | List | Integer[min: 1, max: 4094] | No | |
| ranges | List | [ranges] | No |
remove (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)
Section titled “remove (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ids | List | Integer[min: 1, max: 4094] | No | |
| ranges | List | [ranges] | No |
ranges (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans_legacy)
Section titled “ranges (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans_legacy)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| from | Integer | min: 1, max: 4094 | Yes | |
| to | Integer | min: 1, max: 4094 | Yes |
Guidelines and Limitations
Section titled “Guidelines and Limitations”IP Address Reassignment Between Interfaces
Section titled “IP Address Reassignment Between Interfaces”IOS-XE enforces IP address uniqueness within the same VRF — no two interfaces can hold the same IP address simultaneously. When swapping IP addresses between two interfaces (for example, moving 10.1.1.1 from Port-channel1 to Port-channel2 and vice versa), terraform apply will fail because Terraform updates both interfaces in parallel without awareness of the cross-resource conflict. The device rejects the new IP assignment with an “inconsistent value: Device refused one or more commands” error because the target IP still exists on the other interface.
To perform an IP swap, apply the change in two steps:
- Remove the IP addresses from both interfaces (delete the
ipv4block or assign temporary addresses) and runterraform apply. - Set the new desired IP addresses and run
terraform applya second time.
Interface Ranges
Section titled “Interface Ranges”Port channel ranges allow defining multiple port channels with identical configuration using a from/to range. Range entries are lightweight — they only specify from, to, and interface_groups. All configuration must be defined in the referenced interface groups.
- Port channel IDs are integers, so the range is a simple numeric sequence
- Multiple ranges are supported
- Overlapping ranges or ranges that overlap with individual port channel entries will produce errors when
terraform planis executed
Example:
iosxe: interface_groups: - name: L3_PORT_CHANNEL configuration: switchport: enable: false ipv4: proxy_arp: false
devices: - name: Switch1 configuration: interfaces: ranges: port_channels: - from: 1 to: 10 interface_groups: [L3_PORT_CHANNEL]Examples
Section titled “Examples”Layer 3 Port Channel with OSPF and BFD
Section titled “Layer 3 Port Channel with OSPF and BFD”interface Port-channel1 description Layer 3 Port Channel to Core no switchport vrf forwarding PRODUCTION ip address 192.168.10.1 255.255.255.252 no ip proxy-arp no ip redirects no ip unreachables ip verify unicast source reachable-via any allow-default ipv6 address 2001:db8:10::1/64 ipv6 enable ipv6 address fe80::1 link-local bfd enable bfd interval 100 min_rx 100 multiplier 3 ip ospf cost 10 ip ospf network point-to-point ip ospf 10 area 0 ip igmp version 2 vrrp 1 ip 192.168.10.254 vrrp 1 priority 110 vrrp 1 preempt delay minimum 30 vrrp 1 timers advertise 3 vrrp 1 authentication text SECRET vrrp 1 description VRRP-PORTCHANNEL vrrp 1 track 1 decrement 20 vrrp 1 shutdowniosxe: devices: - name: Device1 configuration: vrfs: - name: PRODUCTION address_family_ipv4: enable: true address_family_ipv6: enable: true routing: ospf_processes: - id: 10 vrf: PRODUCTION interfaces: port_channels: - id: 1 description: Layer 3 Port Channel to Core shutdown: false mtu: 9000 switchport: enable: false vrf_forwarding: PRODUCTION ipv4: address: 192.168.10.1 address_mask: 255.255.255.252 address_dhcp: true proxy_arp: false redirects: false unreachables: false verify_unicast_source_reachable_via: any verify_unicast_source_allow_default: true ipv6: enable: true addresses: - prefix: 2001:db8:10::1/64 link_local_addresses: - fe80::1 pim: dr_priority: 100 bfd: enable: true interval: 100 interval_multiplier: 3 interval_min_rx: 100 ospf: cost: 10 network_type: point-to-point process_ids: - id: 10 areas: - "0" igmp: version: 2 vrrp_v2: - group_id: 1 ip_primary_address: 192.168.10.254 priority: 110 preempt: true preempt_delay_minimum: 30 timers_advertise_interval: 3 authentication_text: SECRET description: VRRP-PORTCHANNEL shutdown: true tracks: - object_id: 1 decrement: 20Layer 2 Trunk Port Channel
Section titled “Layer 2 Trunk Port Channel”interface Port-channel10 description Layer 2 Trunk to Access Switch switchport mode trunk switchport trunk allowed vlan 10,20,30,100-200 switchport trunk native vlan 1 switchport nonegotiate spanning-tree guard root spanning-tree link-type point-to-point load-interval 30 snmp trap link-statusiosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 description: Layer 2 Trunk to Access Switch shutdown: false switchport: mode: trunk trunk_allowed_vlans: vlans: ids: [10, 20, 30] ranges: - from: 100 to: 200 trunk_native_vlan_id: 1 nonegotiate: true spanning_tree: guard: root link_type: point-to-point load_interval: 30 snmp_trap_link_status: trueLayer 2 Access Port Channel with Voice VLAN
Section titled “Layer 2 Access Port Channel with Voice VLAN”interface Port-channel15 description Access Port Channel to IP Phone switchport mode access switchport access vlan 100 switchport voice vlan 900iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 15 description: Access Port Channel to IP Phone shutdown: false switchport: mode: access access_vlan: 100 voice_vlan: 900The voice_vlan attribute supports integer VLAN IDs (1-4094) and keywords (dot1p, none, untagged).
Port Channel with IPv6 DHCP Address
Section titled “Port Channel with IPv6 DHCP Address”interface Port-channel20 description Channel no switchport ipv6 address dhcpiosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 20 description: Channel ipv6: enable: true address_dhcp: true switchport: enable: falsePort Channel with Interface Groups
Section titled “Port Channel with Interface Groups”Example configuring a port channel using an interface group. The interface_groups attribute is a NAC abstraction that applies shared configuration from a named group at template render time. The resulting device CLI reflects the fully merged configuration - interface_groups does not appear as a CLI command.
interface Port-channel11 description Shared Configuration from Interface Groupiosxe: interface_groups: - name: PORT_CHANNEL_BASE configuration: description: Shared Configuration from Interface Group devices: - name: Device1 configuration: interfaces: port_channels: - id: 11 interface_groups: - PORT_CHANNEL_BASEPort Channel with Subinterface
Section titled “Port Channel with Subinterface”iosxe: devices: - name: Device1 configuration: vrfs: - name: GUEST address_family_ipv4: enable: true interfaces: port_channels: - id: 10 description: Layer 2 Trunk with Subinterface shutdown: false switchport: mode: trunk trunk_allowed_vlans: vlans: ids: [10, 20, 30] ranges: - from: 100 to: 200 subinterfaces: - id: "10.100" description: VLAN 100 Subinterface shutdown: false vrf_forwarding: GUEST encapsulation_dot1q_vlan_id: 100 ip_mtu: 1400 ipv4: address: 10.100.1.1 address_mask: 255.255.255.0 address_dhcp: true helper_addresses: - address: 10.1.1.10Sample Configuration
Section titled “Sample Configuration”Example 1: Trunk Switchport Configuration
Section titled “Example 1: Trunk Switchport Configuration”You can configure a trunk switchport to explicitly allow all VLANs as shown below.
iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 switchport: mode: trunk trunk_allowed_vlans: all: trueAdditionally, by default, all VLANs are allowed on a trunk switchport if no VLANs are explicitly allowed, mimicking native Cisco IOS-XE behavior. An example is shown below.
iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 switchport: mode: trunkYou can configure a trunk switchport to explicitly allow no VLANs as shown below.
iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 switchport: mode: trunk trunk_allowed_vlans: none: trueYou can configure a trunk switchport to allow a range of VLANs as shown below.
iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 switchport: mode: trunk trunk_allowed_vlans: vlans: ranges: - from: 100 to: 200You can configure a trunk switchport to allow all VLANs except for specific VLANs as shown below.
iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 switchport: mode: trunk trunk_allowed_vlans: except: ids: - 999You can configure a trunk switchport to allow specific VLANs alongside a range of VLANs as shown below.
iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 switchport: mode: trunk trunk_allowed_vlans: vlans: ids: - 100 - 200 ranges: - from: 300 to: 400EVPN Ethernet Segment (17.15+)
Section titled “EVPN Ethernet Segment (17.15+)”l2vpn evpn ethernet-segment 1 redundancy single-active identifier type 3 system-mac 0011.2233.4455!interface Port-channel10 evpn ethernet-segment 1iosxe: devices: - name: Device1 configuration: evpn: ethernet_segments: - es_value: 1 redundancy: single-active identifier: 0011.2233.4455 interfaces: port_channels: - id: 10 evpn_ethernet_segments: - es_value: 1EVPN Ethernet Segment Legacy (17.12)
Section titled “EVPN Ethernet Segment Legacy (17.12)”On IOS-XE 17.12, the YANG path for EVPN ethernet segments on port-channels uses a flat structure (evpn/ethernet-segment) rather than the 17.15+ choice-based structure (evpn/ethernet-segment-choice). Use the evpn_ethernet_segments_legacy attribute for 17.12 devices.
iosxe: devices: - name: Device1 configuration: evpn: ethernet_segments: - es_value: 1 redundancy: single-active identifier: 0011.2233.4455 interfaces: port_channels: - id: 10 evpn_ethernet_segments_legacy: - es_value: 1Port Channel with Flow Monitors
Section titled “Port Channel with Flow Monitors”interface Port-channel30 description Port-channel with NetFlow no switchport ip address 10.30.0.1 255.255.255.0 ip flow monitor FLOW-MONITOR-IPV4 input ipv6 enable ipv6 flow monitor FLOW-MONITOR-IPV6 inputiosxe: devices: - name: Device1 configuration: flow: records: - name: FLOW-RECORD-IPV4 match: ipv4_source_address: true ipv4_destination_address: true collect: interface_output: true - name: FLOW-RECORD-IPV6 match: ipv6_source_address: true ipv6_destination_address: true collect: interface_output: true monitors: - name: FLOW-MONITOR-IPV4 record: FLOW-RECORD-IPV4 - name: FLOW-MONITOR-IPV6 record: FLOW-RECORD-IPV6 interfaces: port_channels: - id: 30 description: Port-channel with NetFlow switchport: enable: false ipv4: address: 10.30.0.1 address_mask: 255.255.255.0 flow_monitors: - name: FLOW-MONITOR-IPV4 direction: input ipv6: enable: true flow_monitors: - name: FLOW-MONITOR-IPV6 direction: inputPort Channel Subinterface with Flow Monitors
Section titled “Port Channel Subinterface with Flow Monitors”iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 30 switchport: enable: false subinterfaces: - id: "30.100" description: Subinterface with NetFlow encapsulation_dot1q_vlan_id: 100 ipv4: address: 10.30.100.1 address_mask: 255.255.255.0 flow_monitors: - name: FLOW-MONITOR-IPV4 direction: input ipv6: enable: true flow_monitors: - name: FLOW-MONITOR-IPV6 direction: inputAuto QoS Trust DSCP
Section titled “Auto QoS Trust DSCP”interface Port-channel10 description Auto QoS Trust DSCP Test Port-Channel auto qos trust dscpiosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 description: Auto QoS Trust DSCP Test Port-Channel auto_qos: trust_dscp: truePort Channel interfaces provide link aggregation capabilities that combine multiple physical Ethernet interfaces into a single logical interface, delivering increased bandwidth, redundancy, and load distribution across member interfaces using protocols such as LACP (Link Aggregation Control Protocol) or static configuration. They enable seamless failover when individual member links fail while maintaining session continuity, and support both Layer 2 switching with VLAN trunking and Layer 3 routing with comprehensive protocol support including OSPF, BGP, and spanning tree participation. Port Channels are fundamental for building resilient network infrastructures, enabling high-bandwidth connections between switches, servers, and storage systems while providing the flexibility to scale bandwidth incrementally and ensure network availability through redundant path management.
Diagram
Section titled “Diagram”Classes
Section titled “Classes”interfaces (iosxe.devices.configuration)
Section titled “interfaces (iosxe.devices.configuration)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| port_channels | List | [port_channels] | No |
port_channels (iosxe.devices.configuration.interfaces)
Section titled “port_channels (iosxe.devices.configuration.interfaces)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| id | Integer | Yes | ||
| interface_groups | List | String | No | |
| description | String | No | ||
| shutdown | Boolean | true, false | No | |
| vrf_forwarding | String | No | ||
| ipv4 | Class | [ipv4] | No | |
| ipv6 | Class | [ipv6] | No | |
| bfd | Class | [bfd] | No | |
| spanning_tree | Class | [spanning_tree] | No | |
| arp_timeout | Integer | min: 0, max: 2147483 | No | |
| load_interval | Integer | min: 30, max: 600 | No | |
| snmp_trap_link_status | Boolean | true, false | No | |
| logging_event_link_status | Boolean | true, false | No | |
| mpls | Class | [mpls] | No | |
| ospf | Class | [ospf] | No | |
| ospfv3 | Class | [ospfv3] | No | |
| pim | Class | [pim] | No | |
| igmp | Class | [igmp] | No | |
| switchport | Class | [switchport] | No | |
| subinterfaces | List | [subinterfaces] | No | |
| auto_qos | Class | [auto_qos] | No | |
| negotiation_auto | Boolean | true, false | No |
ipv4 (iosxe.devices.configuration.interfaces.port_channels)
Section titled “ipv4 (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| address | IP | No | ||
| address_mask | IP | No | ||
| proxy_arp | Boolean | true, false | No | |
| arp_inspection_trust | Boolean | true, false | No | |
| arp_inspection_limit_rate | Integer | min: 0, max: 4294967295 | No | |
| dhcp_snooping_trust | Boolean | true, false | No | |
| dhcp_relay_source_interface_type | Choice | Loopback, Vlan, GigabitEthernet, FiveGigabitEthernet, TenGigabitEthernet, FortyGigabitEthernet, HundredGigabitEthernet, PortChannel | No | |
| dhcp_relay_source_interface_id | Any | String or Integer[min: 0] | No | |
| dhcp_relay_information_option_vpn_id | Boolean | true, false | No | |
| helper_addresses | List | [helper_addresses] | No | |
| access_group_in | String | No | ||
| access_group_out | String | No | ||
| flow_monitors | List | [flow_monitors] | No | |
| redirects | Boolean | true, false | No | |
| unreachables | Boolean | true, false | No | |
| unnumbered_interface_type | Choice | Loopback, Vlan, GigabitEthernet, FiveGigabitEthernet, TenGigabitEthernet, FortyGigabitEthernet, HundredGigabitEthernet, PortChannel | No | |
| unnumbered_interface_id | Any | String or Integer[min: 0] | No | |
| nat_inside | Boolean | true, false | No | |
| nat_outside | Boolean | true, false | No |
ipv6 (iosxe.devices.configuration.interfaces.port_channels)
Section titled “ipv6 (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| enable | Boolean | true, false | No | |
| addresses | List | [addresses] | No | |
| link_local_addresses | List | IP | No | |
| address_autoconfig_default | Boolean | true, false | No | |
| address_dhcp | Boolean | true, false | No | |
| mtu | Integer | min: 1280, max: 9976 | No | |
| nd_ra_suppress_all | Boolean | true, false | No | |
| flow_monitors | List | [flow_monitors] | No | |
| pim | Class | [pim] | No |
bfd (iosxe.devices.configuration.interfaces.port_channels)
Section titled “bfd (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| template | String | No | ||
| enable | Boolean | true, false | No | |
| local_address | String | No | ||
| interval | Integer | min: 50, max: 9999 | No | |
| interval_min_rx | Integer | min: 50, max: 9999 | No | |
| interval_multiplier | Integer | min: 3, max: 50 | No | |
| echo | Boolean | true, false | No |
spanning_tree (iosxe.devices.configuration.interfaces.port_channels)
Section titled “spanning_tree (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| portfast | Boolean | true, false | No | |
| portfast_disable | Boolean | true, false | No | |
| bpduguard | Boolean | true, false | No | |
| bpduguard_disable | Boolean | true, false | No | |
| guard | Choice | loop, none, root | No | |
| link_type | Choice | shared, point-to-point | No | |
| portfast_trunk | Boolean | true, false | No | |
| portfast_edge | Boolean | true, false | No |
mpls (iosxe.devices.configuration.interfaces.port_channels)
Section titled “mpls (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ip | Boolean | true, false | No | |
| mtu | Integer | No |
ospf (iosxe.devices.configuration.interfaces.port_channels)
Section titled “ospf (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| cost | Integer | min: 1, max: 65535 | No | |
| dead_interval | Integer | min: 1, max: 65535 | No | |
| hello_interval | Integer | min: 1, max: 65535 | No | |
| mtu_ignore | Boolean | true, false | No | |
| network_type | Choice | broadcast, non-broadcast, point-to-multipoint, point-to-point | No | |
| priority | Integer | min: 0, max: 255 | No | |
| ttl_security_hops | Integer | min: 1, max: 254 | No | |
| process_ids | List | [process_ids] | No | |
| message_digest_keys | List | [message_digest_keys] | No |
ospfv3 (iosxe.devices.configuration.interfaces.port_channels)
Section titled “ospfv3 (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| network_type | Choice | broadcast, non-broadcast, point-to-multipoint, point-to-point | No | |
| cost | Integer | min: 1, max: 65535 | No |
pim (iosxe.devices.configuration.interfaces.port_channels)
Section titled “pim (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| passive | Boolean | true, false | No | |
| dense_mode | Boolean | true, false | No | |
| sparse_mode | Boolean | true, false | No | |
| sparse_dense_mode | Boolean | true, false | No | |
| bfd | Boolean | true, false | No | |
| border | Boolean | true, false | No | |
| bsr_border | Boolean | true, false | No | |
| dr_priority | Integer | min: 0, max: 4294967294 | No |
igmp (iosxe.devices.configuration.interfaces.port_channels)
Section titled “igmp (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| version | Integer | min: 1, max: 3 | No |
switchport (iosxe.devices.configuration.interfaces.port_channels)
Section titled “switchport (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| enable | Boolean | true, false | No | |
| mode | Choice | access, dot1q-tunnel, private-vlan-trunk, private-vlan-host, private-vlan-promiscuous, trunk | No | |
| nonegotiate | Boolean | true, false | No | |
| access_vlan | Integer | min: 1, max: 4094 | No | |
| trunk_allowed_vlans | Class | [trunk_allowed_vlans] | No | |
| trunk_allowed_vlans_legacy | Class | [trunk_allowed_vlans_legacy] | No | |
| trunk_native_vlan_tag | Boolean | true, false | No | |
| trunk_native_vlan_id | Integer | min: 1, max: 4094 | No | |
| host | Boolean | true, false | No |
subinterfaces (iosxe.devices.configuration.interfaces.port_channels)
Section titled “subinterfaces (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| id | String | Yes | ||
| description | String | No | ||
| shutdown | Boolean | true, false | No | |
| vrf_forwarding | String | No | ||
| ipv4 | Class | [ipv4] | No | |
| ipv6 | Class | [ipv6] | No | |
| bfd | Class | [bfd] | No | |
| encapsulation_dot1q_vlan_id | Integer | min: 1, max: 4094 | No | |
| arp_timeout | Integer | min: 0, max: 2147483 | No | |
| auto_qos | Class | [auto_qos] | No | |
| mpls | Class | [mpls] | No | |
| ospf | Class | [ospf] | No | |
| ospfv3 | Class | [ospfv3] | No | |
| pim | Class | [pim] | No | |
| igmp | Class | [igmp] | No |
auto_qos (iosxe.devices.configuration.interfaces.port_channels)
Section titled “auto_qos (iosxe.devices.configuration.interfaces.port_channels)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| classify | Boolean | true, false | No | |
| classify_police | Boolean | true, false | No | |
| trust | Boolean | true, false | No | |
| trust_cos | Boolean | true, false | No | |
| trust_dscp | Boolean | true, false | No | |
| video_cts | Boolean | true, false | No | |
| video_ip_camera | Boolean | true, false | No | |
| video_media_player | Boolean | true, false | No | |
| voip | Boolean | true, false | No | |
| voip_cisco_phone | Boolean | true, false | No | |
| voip_cisco_softphone | Boolean | true, false | No | |
| voip_trust | Boolean | true, false | No | |
| trust_device | Choice | cisco-phone, cts, ip-camera, media-player | No |
helper_addresses (iosxe.devices.configuration.interfaces.port_channels.ipv4)
Section titled “helper_addresses (iosxe.devices.configuration.interfaces.port_channels.ipv4)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| address | IP | Yes | ||
| global | Boolean | true, false | No | |
| vrf | String | No |
flow_monitors (iosxe.devices.configuration.interfaces.port_channels.ipv4)
Section titled “flow_monitors (iosxe.devices.configuration.interfaces.port_channels.ipv4)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| name | String | Yes | ||
| direction | Choice | input, output | Yes |
addresses (iosxe.devices.configuration.interfaces.port_channels.ipv6)
Section titled “addresses (iosxe.devices.configuration.interfaces.port_channels.ipv6)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| prefix | IP | Yes | ||
| eui_64 | Boolean | true, false | No |
pim (iosxe.devices.configuration.interfaces.port_channels.ipv6)
Section titled “pim (iosxe.devices.configuration.interfaces.port_channels.ipv6)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| pim | Boolean | true, false | No | |
| bfd | Boolean | true, false | No | |
| bsr_border | Boolean | true, false | No | |
| dr_priority | Integer | min: 0, max: 4294967295 | No |
process_ids (iosxe.devices.configuration.interfaces.port_channels.ospf)
Section titled “process_ids (iosxe.devices.configuration.interfaces.port_channels.ospf)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| id | Integer | min: 1, max: 65535 | No | |
| areas | List | Any[String or Integer[min: 0]] | No |
message_digest_keys (iosxe.devices.configuration.interfaces.port_channels.ospf)
Section titled “message_digest_keys (iosxe.devices.configuration.interfaces.port_channels.ospf)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| id | Integer | min: 1, max: 255 | Yes | |
| md5_auth_key | String | No | ||
| md5_auth_type | Choice | 0, 7 | No |
trunk_allowed_vlans (iosxe.devices.configuration.interfaces.port_channels.switchport)
Section titled “trunk_allowed_vlans (iosxe.devices.configuration.interfaces.port_channels.switchport)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| all | Boolean | true, false | No | |
| none | Boolean | true, false | No | |
| vlans | Class | [vlans] | No | |
| add | Class | [add] | No | |
| except | Class | [except] | No | |
| remove | Class | [remove] | No |
trunk_allowed_vlans_legacy (iosxe.devices.configuration.interfaces.port_channels.switchport)
Section titled “trunk_allowed_vlans_legacy (iosxe.devices.configuration.interfaces.port_channels.switchport)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ids | List | Integer[min: 1, max: 4094] | No | |
| ranges | List | [ranges] | No |
vlans (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)
Section titled “vlans (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ids | List | Integer[min: 1, max: 4094] | No | |
| ranges | List | [ranges] | No |
add (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)
Section titled “add (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ids | List | Integer[min: 1, max: 4094] | No | |
| ranges | List | [ranges] | No |
except (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)
Section titled “except (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ids | List | Integer[min: 1, max: 4094] | No | |
| ranges | List | [ranges] | No |
remove (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)
Section titled “remove (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ids | List | Integer[min: 1, max: 4094] | No | |
| ranges | List | [ranges] | No |
ranges (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans_legacy)
Section titled “ranges (iosxe.devices.configuration.interfaces.port_channels.switchport.trunk_allowed_vlans_legacy)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| from | Integer | min: 1, max: 4094 | Yes | |
| to | Integer | min: 1, max: 4094 | Yes |
Examples
Section titled “Examples”iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 1 description: Layer 3 Port Channel to Core shutdown: false vrf_forwarding: PRODUCTION ipv4: address: 192.168.10.1 address_mask: 255.255.255.252 proxy_arp: false redirects: false unreachables: false ipv6: enable: true addresses: - prefix: 2001:db8:10::1/64 link_local_addresses: - fe80::1 bfd: enable: true interval: 100 interval_multiplier: 3 interval_min_rx: 100 ospf: cost: 10 network_type: point-to-point process_ids: - id: 1 areas: - "0" igmp: version: 2 - id: 10 description: Layer 2 Trunk to Access Switch shutdown: false switchport: mode: trunk trunk_allowed_vlans: vlans: ids: [10, 20, 30] ranges: - from: 100 to: 200 trunk_native_vlan_id: 1 nonegotiate: true spanning_tree: guard: root link_type: point-to-point load_interval: 30 snmp_trap_link_status: true subinterfaces: - id: "10.100" description: VLAN 100 Subinterface shutdown: false vrf_forwarding: GUEST encapsulation_dot1q_vlan_id: 100 ipv4: address: 10.100.1.1 address_mask: 255.255.255.0 helper_addresses: - address: 10.1.1.10Trunk Switchport Configuration
Section titled “Trunk Switchport Configuration”You can configure a trunk switchport to explicitly allow all VLANs as shown below.
iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 switchport: mode: trunk trunk_allowed_vlans: all: trueAdditionally, by default, all VLANs are allowed on a trunk switchport if no VLANs are explicitly allowed, mimicking native Cisco IOS-XE behavior. An example is shown below.
iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 switchport: mode: trunkYou can configure a trunk switchport to explicitly allow no VLANs as shown below.
iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 switchport: mode: trunk trunk_allowed_vlans: none: trueYou can configure a trunk switchport to allow a range of VLANs as shown below.
iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 switchport: mode: trunk trunk_allowed_vlans: vlans: ranges: - from: 100 to: 200You can configure a trunk switchport to allow all VLANs except for specific VLANs as shown below.
iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 switchport: mode: trunk trunk_allowed_vlans: except: ids: - 999You can configure a trunk switchport to allow specific VLANs alongside a range of VLANs as shown below.
iosxe: devices: - name: Device1 configuration: interfaces: port_channels: - id: 10 switchport: mode: trunk trunk_allowed_vlans: vlans: ids: - 100 - 200 ranges: - from: 300 to: 400