In this post, I would like to show you how to configure a manual layer 2 EtherChannel port on Cisco switches.
An EtherChannel interface is the result of bundling multiple physical links into a logical port. It is recommended to use n links to the power of two (For example: 2, 4, 8, 16 physical ports). In other technical documents, you can find references to the same concept by the name port-channel, link aggregation group (LAG), bonding.
The idea behind this concept is to increase the fault-tolerance and speed between switches, routers and/or servers. In case of a link failure, the traffic will be redistributed among the remaining links.
Table of Contents
Check the interface status
Before starting to configure EtherChannel, let’s check the lab network diagram and the interfaces status. I will use 4 interfaces in my lab. All of them are in connected status.
Output SW0:
SW0#show int status
Port Name Status Vlan Duplex Speed Type
Gi0/0 connected 1 a-full auto RJ45
Gi0/1 connected 1 a-full auto RJ45
Gi0/2 connected 1 a-full auto RJ45
Gi0/3 connected 1 a-full auto RJ45
Gi1/0 connected 1 a-full auto RJ45
SW0#
Output SW1:
SW1#show interface status
Port Name Status Vlan Duplex Speed Type
Gi0/0 connected 1 a-full auto RJ45
Gi0/1 connected 1 a-full auto RJ45
Gi0/2 connected 1 a-full auto RJ45
Gi0/3 connected 1 a-full auto RJ45
Gi1/0 connected 1 a-full auto RJ45
SW1#

Check spanning-tree
If you add multiple links between two switches, spanning tree will block all the links and leave only one link for traffic forwarding. With EtherChannel this is not the case. Let’s check if all the interfaces are used to forward the traffic.
Output SW0:
SW0#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 5254.0001.e79b
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 5254.0001.e79b
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300 sec
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi0/0 Desg FWD 4 128.1 P2p
Gi0/1 Desg FWD 4 128.2 P2p
Gi0/2 Desg FWD 4 128.3 P2p
Gi0/3 Desg FWD 4 128.4 P2p
Gi1/0 Desg FWD 4 128.5 P2p
SW0#
Output SW1:
SW1#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 5254.0001.e79b
Cost 4
Port 1 (GigabitEthernet0/0)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 5254.0016.ebf4
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300 sec
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi0/0 Root FWD 4 128.1 P2p
Gi0/1 Altn BLK 4 128.2 P2p
Gi0/2 Altn BLK 4 128.3 P2p
Gi0/3 Altn BLK 4 128.4 P2p
Gi1/0 Desg FWD 4 128.5 P2p
SW1#

As you can see on SW1, from the available 4 ports, only one is in forwarding status. The other 3 are in blocking status. I will share the same output after adding the ports to the EtherChannel bundle.
Configure EtherChannel manually
After confirming that all ports are up and running, you need to configure EtherChannel manually by running the below commands.
Output SW0:
SW0#conf term
Enter configuration commands, one per line. End with CNTL/Z.
SW0(config)#int gi0/0
SW0(config-if)#channel-group 1 mode on
Creating a port-channel interface Port-channel 1
SW0(config-if)#int
*Nov 17 14:08:44.043: %LINK-3-UPDOWN: Interface Port-channel1, changed state to up
*Nov 17 14:08:45.045: %LINEPROTO-5-UPDOWN: Line protocol on Interface Port-channel1, changed state to upgi0/1
SW0(config-if)#channe
SW0(config-if)#channel-g
SW0(config-if)#channel-group 1 mode on
SW0(config-if)#int gi0/2
SW0(config-if)#channel-group 1 mode on
SW0(config-if)#int gi0/3
SW0(config-if)#channel-group 1 mode on
SW0(config-if)#
Output SW1:
SW1#conf term
Enter configuration commands, one per line. End with CNTL/Z.
SW1(config)#int range gi0/0-3
SW1(config-if-range)#channel-gr
SW1(config-if-range)#channel-group 10 mode on
Creating a port-channel interface Port-channel 10
SW1(config-if-range)#
*Nov 17 14:10:16.692: %LINK-3-UPDOWN: Interface Port-channel10, changed state to up
*Nov 17 14:10:17.692: %LINEPROTO-5-UPDOWN: Line protocol on Interface Port-channel10, changed state to up
On the switch SW1, I used the interface range command in order to configure multiple interfaces at the same time.

Check the status of the newly created logical interface
After configuring both switches, you need to check the status of the newly created logical interface.
Run a similar command for finding details about the new interface.
Output SW0:
SW0#show int po1
Port-channel1 is down, line protocol is down (err-disabled)
Hardware is EtherChannel, address is 0000.0000.0000 (bia 0000.0000.0000)
MTU 1500 bytes, BW 100000 Kbit/sec, DLY 100 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
ARP type: ARPA, ARP Timeout 04:00:00
Last input 00:04:46, output never, output hang never
Last clearing of "show interface" counters never
Input queue: 0/2000/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
104 packets input, 6483 bytes, 0 no buffer
Received 0 broadcasts (0 multicasts)
0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 input packets with dribble condition detected
87 packets output, 7752 bytes, 0 underruns
0 output errors, 0 collisions, 0 interface resets
0 unknown protocol drops
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier
0 output buffer failures, 0 output buffers swapped out
SW0#
Output SW1:
SW1#sho
*Nov 17 14:14:55.271: %SYS-5-CONFIG_I: Configured from console by consolew int po10
Port-channel10 is up, line protocol is up (connected)
Hardware is EtherChannel, address is 5254.0016.ebf4 (bia 5254.0016.ebf4)
MTU 1500 bytes, BW 4000000 Kbit/sec, DLY 10 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
ARP type: ARPA, ARP Timeout 04:00:00
Last input never, output never, output hang never
Last clearing of "show interface" counters never
Input queue: 0/2000/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
0 packets input, 0 bytes, 0 no buffer
Received 0 broadcasts (0 multicasts)
0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 input packets with dribble condition detected
278 packets output, 33430 bytes, 0 underruns
0 output errors, 0 collisions, 0 interface resets
0 unknown protocol drops
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier
0 output buffer failures, 0 output buffers swapped out
SW1#
The logical interface on SW0 is down. It is in an err-disabled state. In order to change its status to up (connected), you need to shut-it down and run the same command with no in front of it.
SW0#conf term
Enter configuration commands, one per line. End with CNTL/Z.
SW0(config)#int po1
SW0(config-if)#shut
SW0(config-if)#no shut
SW0(config-if)#
*Nov 17 14:18:23.572: %LINK-5-CHANGED: Interface GigabitEthernet0/0, changed state to administratively down
*Nov 17 14:18:23.604: %LINK-5-CHANGED: Interface GigabitEthernet0/1, changed state to administratively down
*Nov 17 14:18:23.629: %LINK-5-CHANGED: Interface GigabitEthernet0/2, changed state to administratively down
*Nov 17 14:18:23.663: %LINK-5-CHANGED: Interface GigabitEthernet0/3, changed state to administratively down
*Nov 17 14:18:23.691: %LINK-5-CHANGED: Interface Port-channel1, changed state to administratively downend
*Nov 17 14:18:25.860: %LINK-3-UPDOWN: Interface Port-channel1, changed state to up
*Nov 17 14:18:25.868: %LINK-3-UPDOWN: Interface GigabitEthernet0/0, changed state to up
*Nov 17 14:18:26.234: %LINK-3-UPDOWN: Interface GigabitEthernet0/1, changed state to up
*Nov 17 14:18:26.403: %LINK-3-UPDOWN: Interface GigabitEthernet0/2, changed state to up
*Nov 17 14:18:26.707: %LINK-3-UPDOWN: Interface GigabitEthernet0/3, changed state to up
*Nov 17 14:18:26.867: %LINEPROTO-5-UPDOWN: Line protocol on Interface Port-channel1, changed state to up
*Nov 17 14:18:26.869: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/0, changed state to up
*Nov 17 14:18:27.392: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/1, changed state to up
*Nov 17 14:18:27.402: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/2, changed state to up
*Nov 17 14:18:27.715: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/3, changed state to up
SW0#
SW0#
SW0#
*Nov 17 14:18:29.925: %SYS-5-CONFIG_I: Configured from console by consoleshow int po1
Port-channel1 is up, line protocol is up (connected)
Hardware is EtherChannel, address is 5254.0001.e79b (bia 5254.0001.e79b)
MTU 1500 bytes, BW 4000000 Kbit/sec, DLY 10 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
ARP type: ARPA, ARP Timeout 04:00:00
Last input 00:00:03, output never, output hang never
Last clearing of "show interface" counters never
Input queue: 0/2000/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 1000 bits/sec, 1 packets/sec
107 packets input, 7509 bytes, 0 no buffer
Received 0 broadcasts (0 multicasts)
0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 input packets with dribble condition detected
124 packets output, 19060 bytes, 0 underruns
0 output errors, 0 collisions, 0 interface resets
0 unknown protocol drops
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier
0 output buffer failures, 0 output buffers swapped out
SW0#
Now both EtherChannel interfaces are in an up (connected) status. The channel-group number does not need to match on both switches for the logical interface to change its state.

Check if STP is blocking the ports
After confirming that the logical interface is up and running, let’s check if STP is blocking any interface. Before configuring EtherChannel, it blocked 3 interfaces.
Output SW0:
SW0#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 5254.0001.e79b
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 5254.0001.e79b
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300 sec
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi1/0 Desg FWD 4 128.5 P2p
Po1 Desg FWD 3 128.65 P2p
SW0#
Output SW1:
SW1#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 5254.0001.e79b
Cost 3
Port 65 (Port-channel10)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 5254.0016.ebf4
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300 sec
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi1/0 Desg FWD 4 128.5 P2p
Po10 Root FWD 3 128.65 P2p
SW1#
The EtherChannel interface is in forwarding status. The physical interfaces that are part of the logical interface are no longer present in the output.
The speed of the interface is increased to 4000000 Kbit/sec.
SW0#show int po1 | include line|BW
Port-channel1 is up, line protocol is up (connected)
MTU 1500 bytes, BW 4000000 Kbit/sec, DLY 10 usec,
SW0#

Find more details about the EtherChannel port
Another two commands that you can use in order to find more information about the EtherChannel ports are:
SW0#show etherchannel
Channel-group listing:
----------------------
Group: 1
----------
Group state = L2
Ports: 4 Maxports = 4
Port-channels: 1 Max Port-channels = 1
Protocol: -
Minimum Links: 0
SW0#
In the output of the show etherchannel command, you can find the group number (1 in my case), group state (L2, it can be also configured as L3). You have the number of the ports which are part of the logical interface (4 in my lab). Under the protocol you will see – because we configured the EtherChannel manually (it can be -, PAgP, and LACP).
SW1#show etherchannel summary
Flags: D - down P - bundled in port-channel
I - stand-alone s - suspended
H - Hot-standby (LACP only)
R - Layer3 S - Layer2
U - in use N - not in use, no aggregation
f - failed to allocate aggregator
M - not in use, minimum links not met
m - not in use, port not aggregated due to minimum links not met
u - unsuitable for bundling
w - waiting to be aggregated
d - default port
A - formed by Auto LAG
Number of channel-groups in use: 1
Number of aggregators: 1
Group Port-channel Protocol Ports
------+-------------+-----------+-----------------------------------------------
10 Po10(SU) - Gi0/0(P) Gi0/1(P) Gi0/2(P)
Gi0/3(P)
SW1#
In the output of the show etherchannel summary command you can find the following information: group number, port-channel name and its status (SU – Layer 2, in use), member ports and their status (P – bundled in port-channel).
Check the connectivity from PC0 to PC1
The last step is to check the connectivity between the end hosts: PC0 and PC1.
With the command hostname, I configured the name for my PCs. Both PCs are running Alpine Linux.
With the command ifconfig, I configured an IP address for the interface eth0.
With the ping command, I tested the connectivity between PC0 and PC1.
inserthostname-here:~$ hostname PC0
hostname: sethostname: Operation not permitted
inserthostname-here:~$ sudo hostname PC0
PC0:~$ sudo ifconfig eth0 10.10.10.1 netmask 255.255.255.0
PC0:~$ ping -c 4 10.10.10.2
PING 10.10.10.2 (10.10.10.2): 56 data bytes
64 bytes from 10.10.10.2: seq=0 ttl=42 time=27.341 ms
64 bytes from 10.10.10.2: seq=1 ttl=42 time=14.422 ms
64 bytes from 10.10.10.2: seq=2 ttl=42 time=13.469 ms
64 bytes from 10.10.10.2: seq=3 ttl=42 time=17.649 ms
--- 10.10.10.2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 13.469/18.220/27.341 ms
PC0:~$

That’s it! You have learned how to configure a manual layer 2 EtherChannel port on Cisco switches. If you found this blog post helpful, please like and subscribe for more Cisco networking tutorials. Thank you for reading it!