Check Speed / Duplex on Solaris 10

In the past, I always had to use the ndd – get command to figure out what my link speed and duplex settings were. In Solaris 10, Sun now gives us the handy dladm command, which makes it a whole lot easier.


# dladm show-dev
e1000g2 link: up speed: 1000 Mbps duplex: full
e1000g3 link: up speed: 1000 Mbps duplex: full
e1000g0 link: up speed: 1000 Mbps duplex: full
e1000g1 link: up speed: 1000 Mbps duplex: full

Sun Happy Meal Card???

So we all know that Sun is a cool company with a great sense of humor, but they really outdid themselves when they named this combination SCSI / Ethernet card Happy Meal!

It’s a pretty old card, and honestly I had forgotten that I had installed it in my test system until I setup REL 3 on it last week. For some reason, the Red Hat installer wanted to remove the device before adding it back in. Luckily I had my camera with me when I saw the hardware detection message pop up.

Problems with Ghost and Broadcom NetXtreme DOS drivers

I’ve been struggling to gather an image from our brand-spanking new Dell GX280’s using the Ghost Console, but I kept getting an error saying that “The DOS Network Adaptor Configuration Template is Corrupt…” after the machine initiated the reboot process and unjoined the domain. It turns out that the Broadcom NetXtreme card had some bugs, and are not compatible with the DOS driver versions included with Ghost. I found the following mention of the problem on the Symantec website:

The other NICs causing problems at the moment are the Broadcom NetXtreme (b57). Ghost 7.5 did not include any drivers for the Broadcom NICs, but Ghost 8.0/8.2 does. However, some new Broadcom NetXtreme NICs are not compatible with the DOS driver versions included with Ghost (v6.34 and v6.46). A new version has been released (v7.65), and is available here. Overwrite the b57.dos file in the Boot Wizard, or C:\Documents and Settings\All Users\Application Data\Symantec\Ghost\Templates – b57.dos. You can also check with Broadcom for the lastest NIC DOS drivers. 

Open the Ghost Boot Wizard, select the Network Boot Disk, find your NIC in the list, select Modify, and Browse to the new .DOS file. That’s generally all there is to it. You can also copy the .DOS file directly to the Templates folder listed above.

This is all well and good, but what you really need to do is the following:

  • Download the new Broadcom NetXtreme DOS drivers from here.
  • Launch the “Symantec Ghost Boot Wizard and select “Network Boot Disk”
  • Scroll down to Broadcom NetXtreme Family vX.X
  • Click “Modify” on the side
  • Next to “Filename” click “Browse” and navigate to the new b57.dos file and click “Open”
  • Exit out, and launch the “Ghost Console”

Now we have to update the “Driver Configuration Template” for the target machine.

  • Find the machine you wish to gather and double click on it
  • Click on the “Client” tab
  • Check “Use Manually Selected Template:”
  • Click “Browse” and select the newly updated driver template

The machine should now work normally when you go to gather the image using the Ghost Console.

Issues forcing Speed / Duplex on ”ce” and ”bge” Ethernet cards

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.