@(#)Sun HME/QFE settings 14 AUG 2000 Rob Thomas robt@cymru.com Sun HME/QFE driver settings for full and half duplex, 100 and 10 Mb/s To dictate to the HME and QFE drivers what settings to apply, there are two methods. One method makes a change for all instances of a given driver (HME or QFE), the other method allows granular control of each instance of a given driver. A caveat: Do NOT use autonegotiate. It is notoriously unreliable and will only cause pain and woe immediately and down the road. This is not a Sun or Solaris limitation; rather, autonegotiation has been a twitchy beast in almost all gear, including Xylan, Cisco, and Nokia. Consider yourself warned. :-) To hard-set the speed and duplex for all HME instances, for example, make the changes in /etc/system and reboot. For example, if you wish to have all HME drivers set to 100 Mb/s full duplex, use: * Set oour HME driver capabilities; 1 = capable, 0 = disabled * 100Mb/s full duplex set hme:hme_adv_100fdx_cap = 1 * 100Mb/s half duplex set hme:hme_adv_100hdx_cap = 0 * 10Mb/s full duplex set hme:hme_adv_10fdx_cap = 0 * 10Mb/s half duplex set hme:hme_adv_10hdx_cap = 0 * Autonegotiate set hme:hme_adv_autoneg_cap = 0 This tells the driver that it is capable of 100 Mb/s full duplex (the "1" value), and all other options are disabled (the "0" value). The order is important, so do not mix them up. To change to 10 Mb/s half duplex, the entries in /etc/system would be: 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 set hme:hme_adv_autoneg_cap = 0 To make a change from the command line, or to change each instance of a given driver individually, you must use the ndd(1M) command. How- ever, now that we wish to modify only a single instance, we must tell the driver which instance we wish to modify. To do this, we first set the instance with the ndd command, then make our changes. The instance equates to the digit in the interface name, e.g. hme3 = instance 3. To mirror our example above, we shall set our hme3 interface to 100 Mb/s full duplex: host# ndd -set /dev/hme instance 3 host# ndd -set /dev/hme adv_100fdx_cap 1 host# ndd -set /dev/hme adv_100hdx_cap 0 host# ndd -set /dev/hme adv_10fdx_cap 0 host# ndd -set /dev/hme adv_10hdx_cap 0 host# ndd -set /dev/hme adv_autoneg_cap 0 Once again, order counts. It is QUITE important to note that the last entry, ndd -set /dev/hme adv_autoneg_cap, is what actually re-initializes the driver (through an ioctl() call). Without this line, the changes you just made will NOT be applied. Rob Thomas, robt@cymru.com http://www.cymru.com/~robt