OIT Logo

   Princeton University
   OIT Help Desk
   OIT Servers & Storage

hme Troubleshooting

To examine or set a specific hme interface (hme#), specify it as follows:

ndd -set /dev/hme instance #

To examine parameter values, use a ndd -get command. In particular, link_speed reveals whether the interface is operating on 10Mbs or 100Mbs mode (settings of 0 and 1, repectively), and link_mode reveals whether it is running at half or full duplex (0 and 1, respectively).

ndd -get /dev/hme link_speed
ndd -get /dev/hme link_mode

To perform a hard set of the link_speed and link_mode parameters for hme#, several other parameters must be set with the ndd -set command. In these parameter names, 10 or 100 refers to link_speed, fdx or hdx refers to link_mode, and autoneg refers to autonegotiation capability. The setting corresponding to the desired mode should be set to "1" and all other parameters should be set to "0." (adv_autoneg_cap=1 is the default.) For example, to set hme# to 100/full duplex:

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

ndd -set commands can be used in the /etc/rc2.d/S69inet initialization script to set the interface mode during boot rather than allowing autonegotiation. This can be useful if one of the interfaces is connected to an older switch that is not autonegotiating the line speed or mode correctly.

The line speed and mode can also be set for all hme interfaces on the system by setting the following in the /etc/system file and rebooting. (Note: The following are Sun's official recommendations. It may not be necessary to set every parameter to either 0 or 1, but it is easiest to get support when following instructions to the letter.):

  • 100 Mb, full duplex:
  • set hme:hme_adv_autoneg_cap=0
    set hme:hme_adv_100fdx_cap=1
  • 100 Mb, half duplex:
  • set hme:hme_adv_autoneg_cap=0
    set hme:hme_adv_100fdx_cap=0
    set hme:hme_adv_100hdx_cap=1
  • 10 Mb, full duplex:
  • set hme:hme_adv_autoneg_cap=0
    set hme:hme_adv_100fdx_cap=0
    set hme:hme_adv_100hdx_cap=0
    set hme:hme_adv_10fdx_cap=1
    set hme:hme_adv_10hdx_cap=0
  • 10 Mb, half duplex:
  • set hme:hme_adv_autoneg_cap=0
    set hme:hme_adv_100fdx_cap=0
    set hme:hme_adv_100hdx_cap=0
    set hme:hme_adv_10fdx_cap=0
    set hme:hme_adv_10hdx_cap=1

Hardware Testing

One elementary test for the ethernet hardware is to invoke the watch-net-all command from the ok> PROM monitor prompt. This performs some simple diagnostics and listens on the ethernet port. Since this is at a much lower level than the driver level, it can be used to distinguish between hardware and software problems.

Debug Mode

The hme, qfe and be ethernet drivers can be switched into debug mode. This can be done in the /etc/system file by adding:

set hme:hmedebug=1

Alternatively, this can be done on a live system using adb:

adb -kw /dev/ksyms /dev/mem
(to display current value)
hmedebug/W 1 (be careful to use uppercase "W")

Debug mode permits the driver to display messages to the console. Some of the messages are informational, others are error messages. When examining the messages, remember that you are seeing one system's view of the network, and that this bias needs to be taken into account.

Page © 2011 by the Trustees of Princeton University.
Content © 2011 by Scott Cromar, from The Solaris Troubleshooting Handbook. Used with permission.
Comments on the contents of this page may be logged to
The Solaris Troubleshooting Blog