Today I ran into a weird scenario where a Linux system’s NIC would set itself to 100Mb half duplex regardless whether the device and NIC was manually configured to operate at full duplex. After strolling through Cisco’s website
I found out that the problem usually relies on the NIC. Despite both the switch and NIC have been manually set to 100 Full duplex, there is often times when the NIC still runs auto-negotiation in the background.
Autonegotiation issues can result from nonconforming implementation, hardware incapabilities, or software defects. When NICs or vendor switches do not conform exactly to the IEEE specification 802.3u, problems can result. Hardware incompatibility and other issues can also exist as a result of vendor-specific advanced features, such as autopolarity or cable integrity, which are not described in IEEE 802.3u for 10/100 Mbps autonegotiation. Generally, if both the NIC and the switch adhere to IEEE 802.3u autonegotiation specifications and all additional features are disabled, autonegotiation must properly negotiate speed and duplex, and no operational issues exist.
To resolve this problem, I had to manually set the NIC to turn off auto negotiation. Once that was done. The problem went away.
ethtool is the only method I have explored.
To turn off auto negotiation run:
ethtool -s ethX autoneg off