See Auto-negotiation for a general discussion on network negotiations.
On Solaris, you can check a gigabit (GE), Quad-Fast Ethernet (QFE) and Fast-Ethernet (HME) links with the following process:
#ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 10.10.10.10 netmask ffffff00 broadcast 10.10.10.255
In the example above, the server has a single HME interface. To query the HME settings, issue the following commands:
# ndd -get /dev/hme link_speed
1
# ndd -get /dev/hme link_mode
1
For QFE or GE, substitute in /dev/qfe or /dev/ge respectively.
The results of the commands above are as follows:
NDD Variable | Results |
---|---|
link_speed | 0 = 10mps 1 = 100mps |
link_mode | 0 = half-duplex 1 = full-duplex |
If the auto-negotiation failed, you can manually set the NIC by issuing the following commands:
# ndd -set /dev/hme instance 0
# ndd -set /dev/hme adv_100T4_cap 0 disables T4 cabling
# ndd -set /dev/hme adv_100fdx_cap 1 enables 100mps full duplex
# ndd -set /dev/hme adv_100hdx_cap 0 disables 100mps half duplex
# ndd -set /dev/hme adv_10fdx_cap 0 disables 10mps full duplex
# ndd -set /dev/hme adv_10hdx_cap 0 disables 10mps half duplex
# ndd -set /dev/hme adv_autoneg_cap 0 disables autonegotiation
You can preserve the commands above across reboot by adding the following commands to /etc/system:
set hme:hme_adv_autoneg_cap=0
set hme:hme_adv_100T4_cap=0
set hme:hme_adv_100fdx_cap=1
set hme:hme_adv_100hdx_cap=0
set hme:hme_adv_10fdx_cap=0
set hme:hme_adv_10hdx_cap=0
You also need to manually set the switch ports to 100mps full-duplex. Please see your switch documentation.