> ## Content Index
> Fetch the complete content index at: https://www.pinglabz.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Configuring EtherChannel with LACP on Cisco Catalyst Switches
- URL: https://www.pinglabz.com/configure-lacp-etherchannel-cisco-ios/
- Published: 2025-10-22T21:13:45.000Z
- Updated: 2026-07-04T23:01:37.000Z
- Description: LACP bundles multiple physical links into one logical pipe—doubling or quadrupling bandwidth while keeping STP happy and providing automatic failover.
- Author: Jaime
- Tags: VLAN, #Import 2026-08-01 19:54

## Why Link Aggregation Matters

A 10 Gbps uplink between DIST-SW1 and CORE-SW1 runs at capacity. Add another 10 Gbps port - you've just doubled bandwidth and eliminated a single point of failure. But the switch won't automatically load-balance across both ports. EtherChannel bundles them into a single logical link that Spanning Tree sees as one interface, meaning no blocked ports and full utilization of both paths.

(This article is part of the PingLabz VLAN series - the [full VLAN and Layer 2 switching guide](https://www.pinglabz.com/vlans-layer-2-switching/) maps the whole cluster in reading order.)

LACP (Link Aggregation Control Protocol, IEEE 802.3ad) negotiates the bundle dynamically, ensuring both sides agree before traffic flows. It's the industry standard and far superior to Cisco's legacy PAgP protocol.

## LACP Fundamentals

- **EtherChannel**: A logical aggregation of physical links, presented to the OS as a single `port-channel` interface.
- **LACP**: The protocol (802.3ad) that dynamically negotiates bundle membership.
- **LACP Modes**:
- `active`: Initiates LACP negotiation. The port actively sends LACP PDUs.
- `passive`: Responds to LACP negotiation but doesn't initiate. Use only if the far end is `active`.
- `on`: Static bundling (no protocol). Both sides must have identical port lists.

Best practice: **Use `active` on both sides** or `active` on one side and `passive` on the other.

## Configuration: Po1 Between DIST-SW1 and CORE-SW1

We'll bundle ports Gi1/0/1 and Gi1/0/2 between DIST-SW1 (10.0.0.2) and CORE-SW1 (10.0.0.1). Both switches run Catalyst 9000 series.

### DIST-SW1 Configuration

```
DIST-SW1# configure terminal
DIST-SW1(config)# interface range GigabitEthernet1/0/1 - 2
DIST-SW1(config-if-range)# no shutdown
DIST-SW1(config-if-range)# speed 10000
DIST-SW1(config-if-range)# duplex full
DIST-SW1(config-if-range)# channel-group 1 mode active
DIST-SW1(config-if-range)# exit

```

The `channel-group 1 mode active` command assigns both ports to channel group 1 using LACP active mode. The switch automatically creates `Port-Channel 1`.

### Configure the Port-Channel Interface

```
DIST-SW1(config)# interface Port-Channel 1
DIST-SW1(config-if)# description Link to CORE-SW1
DIST-SW1(config-if)# mtu 1500
DIST-SW1(config-if)# no shutdown
DIST-SW1(config-if)# end

```

The Port-Channel interface is where you apply higher-level config (trunk mode, VLAN membership, etc.).

### CORE-SW1 Configuration (Mirror of DIST-SW1)

```
CORE-SW1# configure terminal
CORE-SW1(config)# interface range GigabitEthernet1/0/1 - 2
CORE-SW1(config-if-range)# no shutdown
CORE-SW1(config-if-range)# speed 10000
CORE-SW1(config-if-range)# duplex full
CORE-SW1(config-if-range)# channel-group 1 mode active
CORE-SW1(config-if-range)# exit
CORE-SW1(config)# interface Port-Channel 1
CORE-SW1(config-if)# description Link to DIST-SW1
CORE-SW1(config-if)# mtu 1500
CORE-SW1(config-if)# no shutdown
CORE-SW1(config-if)# end

```

### Make Po1 a Trunk (if carrying multiple VLANs)

If Po1 carries VLANs 10, 20, 30, 40, 99, 100:

```
DIST-SW1(config)# interface Port-Channel 1
DIST-SW1(config-if)# switchport trunk encapsulation dot1q
DIST-SW1(config-if)# switchport mode trunk
DIST-SW1(config-if)# switchport trunk allowed vlan 10,20,30,40,99,100
DIST-SW1(config-if)# switchport trunk native vlan 99
DIST-SW1(config-if)# end

```

Repeat on CORE-SW1.

### Load-Balancing Configuration

By default, EtherChannel uses source MAC address hashing. For better distribution, especially in core-to-core links, use source and destination MAC:

```
DIST-SW1# configure terminal
DIST-SW1(config)# port-channel load-balance src-dst-mac
DIST-SW1(config)# end

```

Other options: - `src-mac`: Source MAC only. - `dst-mac`: Destination MAC only. - `src-ip`: Source IP address. - `dst-ip`: Destination IP address. - `src-dst-ip`: Source and destination IP (best for most environments). - `src-port`: TCP/UDP source port. - `dst-port`: TCP/UDP destination port.

For data center and campus uplinks, `src-dst-ip` often provides the best balance.

## Verification Commands

### Show EtherChannel Summary

```
DIST-SW1# show etherchannel summary
Flags:  D - down        P - bundled in port-channel
        I - stand-alone p - bundled in port-channel (inactive)
        H - Hot-standby (LACP only)
        R - Layer3      S - Layer2
        U - in use      f - failed to allocate aggregator

Number of channel-groups in use: 1
Number of aggregators:           1

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)       LACP        Gi1/0/1(P)   Gi1/0/2(P)

```

Both ports show `(P)` indicating they are bundled. `Po1(SU)` means the port-channel is in use.

### Show EtherChannel Port-Channel Detail

```
DIST-SW1# show etherchannel port-channel
Channel-group listing:
------------------------

Channel-group 1
                Protocol:   LACP
Partner:        CORE-SW1
Aging-Time:     30 sec
Max-ports:      8
Min-thresh:     0
Ports in the group:
-------------------
Port: Gi1/0/1
  ----------
  Age of the port in the current state: 45 seconds

Port: Gi1/0/2
  ----------
  Age of the port in the current state: 42 seconds

Time since last bundle was loaded:   48 seconds
Last bundle was loaded by: Gi1/0/1
Time since last unbundle occurred:   Never

Protocol Expiration Time:  30 seconds

Ports requiring a module number update from negotiation:
        none

```

Both ports are active members. The "last bundle loaded" confirms LACP negotiation succeeded.

### Show LACP Neighbor

```
DIST-SW1# show lacp neighbor
Flags:  S - Device is requesting Slow LACPDUs
        F - Device is requesting Fast LACPDUs
        A - Device is in Active mode       P - Device is in Passive mode

Channel group 1 neighbors

LACP neighbors: 1
Telnet Address IPv4: 10.0.0.1
Partner ID        : 1111.1111.1111
Port Number       : 1
Partner Port      : 1
Port State        : 32
Port Priority     : 32768
Partner Port Priority: 32768
Aging Time        : 30
Telnet Address IPv4: 10.0.0.1
Partner ID        : 1111.1111.1111
Port Number       : 2
Partner Port      : 2
Port State        : 32
Port Priority     : 32768
Partner Port Priority: 32768
Aging Time        : 30

```

This confirms CORE-SW1 (partner ID 1111.1111.1111) is the other end of the bundle. Port numbers match correctly.

### Verify Trunk VLAN Carriage on Port-Channel

```
DIST-SW1# show interfaces Port-Channel 1 trunk

Port        Mode             Encapsulation  Status        Native vlan
Po1         on               802.1q          trunking      99

Port        Vlans allowed on trunk
Po1         10,20,30,40,99,100

Port        Vlans allowed and active in management domain
Po1         10,20,30,40,99,100

Port        Vlans in spanning tree forwarding state and not pruned
Po1         10,20,30,40,99,100

```

All VLANs are active and not pruned on the trunk.

### Show Interface Status on the Port-Channel

```
DIST-SW1# show interfaces Port-Channel 1
Port-channel 1 is up, line protocol is up (connected)
  Hardware is EtherChannel, address is 1111.1111.1111 (bia 1111.1111.1111)
  Description: Link to CORE-SW1
  MTU 1500 bytes, BW 20000000 Kbit/sec
  Encapsulation ARPA, loopback not set
  Keepalive set (10 sec)
  Full-duplex, 10 Gb/s

```

Note the bandwidth is reported as 20 Gbps (10 Gbps × 2 links). The line protocol is "up."

## Troubleshooting EtherChannel Bundle Formation

### Symptom: Channel-Group Formed But Ports Show "p" (Suspended)

Example:

```
Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SD)       LACP        Gi1/0/1(p)   Gi1/0/2(p)

```

**Causes**: Speed mismatch, duplex mismatch, or VLAN membership conflict.

**Diagnosis**:

```
DIST-SW1# show interfaces GigabitEthernet1/0/1 | include speed|duplex
  MTU 1500 bytes, BW 10000000 Kbit/sec
  Full-duplex, 10 Gb/s

DIST-SW1# show interfaces GigabitEthernet1/0/2 | include speed|duplex
  MTU 1500 bytes, BW 1000000 Kbit/sec
  Half-duplex, 100 Mb/s

```

Here, Gi1/0/2 negotiated 100 Mbps half-duplex. Fix:

```
DIST-SW1(config)# interface GigabitEthernet1/0/2
DIST-SW1(config-if)# no shutdown
DIST-SW1(config-if)# speed 10000
DIST-SW1(config-if)# duplex full
DIST-SW1(config-if)# end

```

### Symptom: Ports Assigned to Channel-Group But Not Bundling

```
Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SD)       LACP        Gi1/0/1(D)   Gi1/0/2(D)

```

**Causes**: LACP negotiation failing, typically due to: - One side is `passive` and the other side is also `passive` (no LACP negotiation). - Cable disconnect or link down. - LACP timeout (check `show lacp neighbor` for "Aging Time").

**Diagnosis**:

```
DIST-SW1# show lacp neighbor
! If no neighbors appear, LACP PDUs are not reaching the far end.
! Check physical link: show interfaces GigabitEthernet1/0/1

```

**Fix**: Ensure at least one side uses `mode active`:

```
DIST-SW1(config)# interface range GigabitEthernet1/0/1 - 2
DIST-SW1(config-if-range)# channel-group 1 mode active
DIST-SW1(config-if-range)# end

```

### Symptom: Port-Channel Created But Incomplete Traffic Flow

**Cause**: Not all ports bundled into the channel-group. Only some ports carry traffic.

**Diagnosis**:

```
DIST-SW1# show etherchannel summary
! Shows only Gi1/0/1(P) bundled, Gi1/0/2 missing or showing (D).

```

**Fix**: Ensure all intended ports are configured with the same channel-group number:

```
DIST-SW1(config)# interface range GigabitEthernet1/0/1 - 4
DIST-SW1(config-if-range)# channel-group 1 mode active

```

### Symptom: LACP Timeout After Failover

When one port fails, the other quickly takes over, but LACP reports aging issues.

**Diagnosis**:

```
DIST-SW1# show lacp neighbor
! "Aging Time" decrements. If it reaches 0, the neighbor is aged out.

```

**Fix**: Ensure both ports are up on both switches. If a port goes down, manually shut it down and bring it back up:

```
DIST-SW1(config)# interface GigabitEthernet1/0/1
DIST-SW1(config-if)# shutdown
DIST-SW1(config-if)# no shutdown

```

## Comparison: LACP vs PAgP

Standard

LACP (802.3ad)IEEE 802.3ad

PAgP (Cisco)Proprietary (Cisco)

Interop

LACP (802.3ad)Vendor-independent

PAgP (Cisco)Cisco only

Modes

LACP (802.3ad)active, passive, on

PAgP (Cisco)desirable, auto, on

Performance

LACP (802.3ad)Identical

PAgP (Cisco)Identical

Recommended

LACP (802.3ad)**Yes**

PAgP (Cisco)

Legacy; avoid new configs

LACP is the clear winner for any multi-vendor environment. Use PAgP only on old Catalyst 6500 or 4500 running ancient IOS.

## Load-Balancing Best Practices

- **Data Center / Campus Core**: Use `src-dst-ip` to distribute traffic across flows.
- **Access Layer**: `src-mac` is usually sufficient; most flows originate from different end-users.
- **Monitor with `show etherchannel load-balance`**:

```
DIST-SW1# show etherchannel load-balance
EtherChannel Load-Balancing Configuration:
        src-dst-ip

EtherChannel Load-Balancing Addresses used for Forwarding:
        Reachable Tunnel Peer: 10.0.0.1

```

## Key Takeaways

- **LACP dynamically bundles multiple links** without operator intervention if either side initiates negotiation.
- **Use `active` mode on both sides** or `active` on one side and `passive` on the other; never `passive` on both.
- **All bundled ports must have identical speed and duplex**; mismatches immediately suspend the port.
- **Port-Channel interface is where you configure trunk mode and VLANs**; member ports inherit switchport behavior.
- **Verify with `show etherchannel summary` and `show lacp neighbor`** to confirm bundle health and negotiation state.