• After doing a number of system upgrades over the weekend, I became quickly frustrated by the fact that the standard settings in the /etc/system file, normally used to lock the Ethernet interface to 100 / Full Duplex don’t seem to work if your server is using a "ce" or "bge" Ethernet card.

    Normally, the settings in /etc/system would look something like this:

    set ce:adv_100hdx_cap=0
    set ce:adv_10fdx_cap=0
    set ce:adv_10hdx_cap=0
    set ce:adv_autoneg_cap=0
    set ce:adv_100fdx_cap=1

    Unfortunately, if you are using a "ce" or "bge" Ethernet adaptor, this tried and true method does not work, and the kernel gives the following errors at boot:

    Feb 6 08:10:02 hostname genunix: [ID 492708 kern.notice] sorry, variable ‘adv_100fdx_cap’ is not defined in the ‘ce’
    Feb 6 08:10:02 hostname genunix: [ID 492708 kern.notice] sorry, variable ‘adv_100hdx_cap’ is not defined in the ‘ce’
    Feb 6 08:10:02 hostname genunix: [ID 492708 kern.notice] sorry, variable ‘adv_10fdx_cap’ is not defined in the ‘ce’
    Feb 6 08:10:02 hostname genunix: [ID 492708 kern.notice] sorry, variable ‘adv_10hdx_cap’ is not defined in the ‘ce’
    Feb 6 08:10:02 hostname genunix: [ID 492708 kern.notice] sorry, variable ‘adv_autoneg_cap’ is not defined in the ‘ce’

    After doing a little poking around, I learned that the method for forcing Ethernet interfaces on the newer (ce & bge) cards has changed, and it is now necessary to create a driver configuration file in /platform/sun4u/kernel/drv.
    First, so that you don’t have to reboot again, force the interface using the ndd commands. Remember to change all instances of "ce" to "bge" if that is your card type.

    ndd -set /dev/ce instance 0
    ndd -set /dev/ce adv_100T4_cap 0
    ndd -set /dev/ce adv_100fdx_cap 1
    ndd -set /dev/ce adv_100hdx_cap 0
    ndd -set /dev/ce adv_10fdx_cap 0
    ndd -set /dev/ce adv_10hdx_cap 0
    ndd -set /dev/ce adv_1000fdx_cap 0
    ndd -set /dev/ce adv_1000hdx_cap 0
    ndd -set /dev/ce adv_autoneg_cap 0

    Now, create a /platform/sun4u/kernel/drv/ce.conf (or bge.conf) file with the following line, and reboot the system whenever you get around to it.

    adv_autoneg_cap=0 adv_1000fdx_cap=0 adv_1000hdx_cap=0 adv_100fdx_cap=1 adv_100hdx_cap=0 adv_10fdx_cap=0 adv_10hdx_cap=0;

    Make sure this is all one long string of text. There should be no tabs, and their needs to be a semicolon at then end. There should also be no more than this one line of text in the file. Occasionally, carriage returns get added by various text editors in different ways, so make sure to use a predictable editor like vi.

    This entry was posted on Saturday, April 16th, 2005 at 8:46 am and is filed under Data and Technology. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
  • 9 Comments

    Take a look at some of the responses we've had to this article.

    1. Ricardo
      Nov 28th
      Reply

      Perfect! I’ve been looking for how to do this on a permanent basis without resorting to ndd scripts… Thanks!

    2. This problem with the Sun network interfaces is most irritating. It’s been around for a long time now. Your method is a good permanent way of dealing with it. Thanks for posting!

    3. Eva
      Feb 16th
      Reply

      Super! This was my problem and you helped me a lot with this driver configuration file.

    4. david
      Jun 12th
      Reply

      Thanks a lots .. I have been looking for this quite desperately. Thanks again.

    5. Jul 19th
      Reply

      Might worth mentioning; this works with /dev/eri as well, I noticed.

      Great post!

    6. theking2
      Dec 17th
      Reply

      Unfortunately you do net tell the whole story. If you “fix” the ce to full-100 make sure that your switch is matching these settings. Otherwise the switch (cisco or whatever) might start an auto negotiate, get no answer from the sun box (it is not auto negotiate) get no answer, and it will assume the worst (like 100-half or somehting), leaving your network setup with abismal performance.
      Best leave switch SUN at auto negotiate so they can sort out what’s optimal.

    7. ErnieG
      Apr 15th
      Reply

      Leaving it to the Switch and the NIC sounds like a good idea but I have found, in practice, that speed and duplex negotiations on Unix systems in general doesn’t always work. This could lead to one being set to half-duplex and the other set to full-duplex which causes degraded performance due to dropped packets and retransmits after timeout. I agree that you can’t forget to mention that the SWITCH PORT also needs to be forced to the fixed speed/duplex or you will surely have problems. Either NEITHER the switch or system should autonegotiate or BOTH have to be set to autonegotiate.

    8. david k
      Jan 29th
      Reply

      Sun reads the (ambiguous) RFP in a way different from many vendors (Cisco, in particular). If both switch and server NIC are set to auto-negotiate, the Sun NIC will *automatically* drop to half-duplex and the highest speed setting available. Therefore it is always preferrable to have your server enclave switches hard set to the speed and duplex you require for each server; then follow the above directions to guarantee maximal throughput.

    9. Dmitri
      May 11th
      Reply

      Grate Post helped with my ce0 force to FDX on V440 Sol10 zones . I should just mention that setting should be done from and on global zone

  • Leave a Reply

    Let us know what you thought.

  • Name (required):

    Email (required):

    Website:

    Message:

Visitors have tagged this post: ce.conf (563) - t (501) - solaris 10 duplex (199) - ndd ce (174) - bge.conf (168) - bge duplex (129) - Solaris ce.conf (122) - /platform/sun4u/kernel/drv/ce.conf (119) - /kernel/drv/ce.conf (107) - bge0 full duplex (99) - solaris 10 ce.conf (92) - ndd bge (88) - ce .conf (85) - Solaris ce interface (80) - solaris bge (79) - Solaris bge duplex (63) - ce.conf solaris 10 (60) - solaris bge0 (59) - solaris 10 full duplex (58) - bge solaris (54) - solaris ndd ce (54) - solaris bge (52) - bge0 solaris (49) - solaris 10 bge.conf (49) - Solaris 10 NDD (49) - Solaris 10 bge (47) - all (46) - f (45) - solaris 10 ndd bge (44) - bge0 duplex (42) - solaris 10 bge duplex (41) - ce0 full duplex (40) - solaris ndd bge (40) - bge full duplex (39) - bge interface speed (37) - bge conf (36) - /platform/sun4u/kernel/drv/ce conf (36) - bge ndd (35) - ndd Solaris 10 (35) - Solaris ce full duplex (35) - *ndd - ce0* (34) - solaris ce duplex (33) - solaris 10 bge full duplex (33) - duplex Solaris 10 (32) - solaris 10 set duplex (30) - solaris bge interface (30) - solaris bge full duplex (30) - solaris ce speed (29) - /kernel/drv/ce conf (29) - ndd Solaris bge (28) - solaris ce (28) - bge config (27) - ce interface speed (27) - bge ethernet (26) - "ce.conf" solaris (26) - solaris bge config (26) - bge0 speed (26) - +solaris +bge +speed (25) - bge speed (25) - solaris 10 bge0 (25) - full duplex solaris 10 (25) - bge.conf solaris 10 (25) - ndd /dev/ce (24) - bge.conf "solaris 10" (24) - +ce +ndd (23) - solaris ce0 full duplex (23) - BGE interface solaris (23) - ce.conf duplex (23) - solaris 10 ethernet speed (23) - solaris 10 ce conf (23) - ndd solaris ce (22) - solaris bge ndd (22) - ndd solaris10 (22) - ce0 speed (21) - solaris 10 set interface speed (21) - ce duplex (21) - ndd bge duplex (20) - ce full duplex (20) - ndd duplex bge (20) - solaris bge0 duplex (20) - spiralbound net (20) - ndd bge solaris (19) - solaris bge settings (19) - "bge Solaris 10" (18) - ndd bge0 (18) - ndd ce interface (18) - "Solaris NDD" (18) - Solaris ce interface speed (18) - solaris 10 bge speed (18) - solaris 10 duplex settings (18) - /dev/ce (17) - ndd bge solaris 10 (17) - bge speed duplex (17) - speed duplex solaris 10 (17) - solaris 10 interface duplex (17) - solaris 10 change duplex (17) - sun ce interface (16) - solaris ce0 duplex (16) - bge set duplex (16) - sun ce interface speed (16) - bge ce (15) - solaris bge full-duplex (15) - Solaris 10 ce duplex (15) - solaris ce ndd (15) - solaris full duplex ce (15) - bge full-duplex (15) - solaris "bge.conf" (15) - solaris ce0 speed (15) - solaris10 ndd (15) - bge0 ce0 (15) - bge.conf solaris (14) - ce speed (14) - Solaris 9 ce.conf (14) - solaris 10 ndd ce (14) - ce conf Solaris 10 (14) - bge conf solaris 10 (14) - solaris ce conf (14) - solaris bge speed (14) - solaris 9 full duplex (13) - ce0 duplex (13) - solaris speed duplex (13) - solaris 10 interface speed (13) - "solaris 10" ce Full duplex (13) - Solaris 10 bge .conf (13) - ce.conf solaris (13) - set duplex Solaris 10 (13) - ndd solaris 10 bge (12) - solaris bge0 full duplex (12) - duplex ce (12) - ce interface duplex (12) - Solaris ndd ce0 (12) - solaris 10 force full duplex (12) - solaris ce config (12) - solaris 10 full duplex bge (12) - kernel drv ce.conf (12) - solaris 10 duplex setting (12) - solaris 10 speed duplex (12) - solaris 10 (11) - bge interface (11) - solaris bge speed duplex (11) - "solaris ce0" (11) - ce interface Solaris (11) - solaris 10 bge configuration (11) - solaris bge0 speed (11) - ndd get /dev/ce (11) - Solaris10 duplex (11) - solaris bge set duplex (11) - ndd solaris 10 ce (11) - "solaris 10" ndd duplex (11) - Solaris bge configuration (11) -