Solaris Specific Information


Using ndd, you can check/set the settings of your interfaces while the box 
is up and running.  However, there is NO way to reset the statistics on the 
interface without a reboot.  Even though you can set the proper 
configuration while the machine is running, you should also set it in the 
kernel config files and perform a reconfigured reboot.

You can set the network link parameters dynamically with the /usr/sbin/ndd tool. You need to select which interface you wish to modify, then what you want to set it to.  Check which interfaces are configured on your box by using the dmesg command as follows :

  dmesg | grep Link | grep Up

    - this command will tell you which interfaces are bound at bootup, 
however it only holds so many messages in its buffer/database, so if you 
havent rebooted in a month or less (usually), you wont find any occurrences 
of these.  You may be able to check in the older /var/adm/messages.* files, 
but again, after about a month, you lose out.  ifconfig will also tell you 
which ones are up, but wont tell you what they initially negotiated to.

  ndd -set /dev/hme instance 1
  ndd -get /dev/hme adv_autoneg_cap
  ndd -get /dev/hme adv_100fdx_cap

    - these commands set the inteface to check, to be hme0
    - then get the auto-negotiation status - should be 0
    - then finally get the 100 Mb Full-duplex status - should be 1

Other values you can check on a running interface are as follows :

  adv_autoneg_cap: auto sensing
  adv_100fdx_cap: 100Mbps full-duplex
  adv_100hdx_cap: 100Mbps half-duplex
  adv_10fdx_cap: 10Mbps full-duplex
  adv_10hdx_cap: 10Mbps half-duplex

Finally, you can also check with the much easier but less safe command :

  ndd -get /dev/hme link_status link_speed link_mode

    - will show you, for the default HME interface: whether the system 
thinks the link is up, what speed the interface is set to, and what duplex 
it is set to.

If you find that any of the above are not as they should be, you can change 
them by changing the "get" to "set" in the above ndd commands, and setting a 
value at the end of the line.  Lets say the intefaces was configured for 
autonegotiation and you wanted to set the 100 Full-duplex instead, you could 
do the following :

  ndd -set /dev/hme instance 1
  ndd -set /dev/hme adv_autoneg_cap 0
  ndd -set /dev/hme adv_10hdx_cap 0
  ndd -set /dev/hme adv_10fdx_cap 0
  ndd -set /dev/hme adv_100hdx_cap 0
  ndd -set /dev/hme adv_100fdx_cap 1

    - the reason you set them all, is because if you have conflicts, it will 
create a problem.  For example say you had 10fdx set to 1 but didnt realize 
it, and you then wanted to set 100fdx to 1.  It would set, but you still 
have the conflict.  They dont act as radio buttons, but as checkboxes 
instead (in html form speak).

You can also set it statically, at boot time, by modifying /etc/system for 
the same values that we probed, as follows (the preferred method) :

  ##
  # Set all HME's to 100 full-duplex
  ##
  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

  ##
  # Set all QFE's to 100 full-duplex
  ##
  set qfe:qfe_adv_autoneg_cap=0
  set qfe:qfe_adv_100T4_cap=0
  set qfe:qfe_adv_100fdx_cap=1
  set qfe:qfe_adv_100hdx_cap=0
  set qfe:qfe_adv_10fdx_cap=0
  set qfe:qfe_adv_10hdx_cap=0

You should probably set all of the ones you DONT want to "0" then set the 
one you do want to "1".  Again, this is the safer bet.