Below is the precise note how to change the interface settings in Solaris 10, below I have taken the example with bge0 interface in the below case. Where shows full duplex.
root# ndd -set /dev/bge0 adv_autoneg_cap 0
root# ndd -set /dev/bge0 adv_1000fdx_cap 0
root# ndd -set /dev/bge0 adv_1000hdx_cap 0
root# ndd -set /dev/bge0 adv_100fdx_cap 1 (This will set the NIC to Full 100 duplex)
Root# ndd -set /dev/bge0 adv_100hdx_cap 0
root# ndd -set /dev/bge0 adv_10fdx_cap 0
root# ndd -set /dev/bge0 adv_10hdx_cap 0
Though you can ensure the setting prior to change by kstat and dladm (Solaris 10) as below:
bge0 link: up speed: 100 Mbps duplex: half
bge1 link: unknown speed: 0 Mbps duplex: unknown
bge2 link: unknown speed: 0 Mbps duplex: unknown
bge3 link: unknown speed: 0 Mbps duplex: unknown
root # kstat -p bge:0 | grep parameters:link_
bge:0:parameters:link_autoneg 1 à (autoneg is on)
bge:0:parameters:link_duplex 1 à (1=Half,2=Full Duplex)
To ensure the what autoneg setting’s we need to code on the host side we can check the link partner setting for our Switch/router side which is currently NIC is bonded with as Below :
The cap_* parameters exist in the kernel statistics for an Ethernet device. The parameters describe the maximum capability of a device. When the value of a statistic is 1, the device has the capability described. When the value is 0, the device does not have the capability.
root # kstat bge:::lp_cap_autoneg
module: bge instance: 0
name: mac class: net
module: bge instance: 0
name: mii class: net
------ ------- snipped ----------------------------
Manually determining NIC speed and duplex
If you have ce or bge interfaces, use kstat ce and kstat bge, respectively, to return NIC settings as we have shown above. All other interfaces may use ndd to determine NIC settings.
ndd example with bge0, assuming "instance" is 0:
root# ndd -get /dev/bge link_mode
0 -- half-duplex
1 -- full-duplex
root# ndd -get /dev/bge link_speed
0 -- 10 Mbit
1 -- 100 Mbit
1000 -- 1 Gbit
è In some of the cases likewise bge/ce interfaces it doesn't set the instance yet it will give to show you the parameters directly while using “ndd -get /dev/bge0 <parameter>”, Hence you can directly set the interface settings in this case.
è Solaris is often unable to correctly auto-negotiate duplex settings with a link partner (e.g. switch), especially when the switch is set to 100Mbit full-duplex. You can force the NIC into 100Mbit full-duplex by disabling auto-negotiation and 100Mbit half-duplex capability.
è Make kernel parameter changes to preserve the speed and duplex settings after a reboot. You can also put a file in /etc/rc?.d including the” ndd” setting which you have invoked to set the settings permanent across the reboot. Below example for you reference:
root# vi /etc/rc3.d/S99ndd_set (Before creating this file Just cross check if this already exists to avoid any ambiguity)
Make this executable like below:
root# chmod +x /etc/rc3.d/S99ndd_set
Precautionary : While carrying this Change ,this need to be done from the console itself.