How to find the right network driver in Solaris

Today, I installed a new networking card into my home server. The card wasn't recognized immediately by Solaris, so I had to do some research and this is what I learned.

Looking for a cheap card, but still from a bigger brand, I went for a D-Link DGE-530T which you can get for less than 20 Euros on the Internet. And it can do Gigabit Ethernet, too!

After plugging in comes the first test: Does Solaris recognize that card? This can be verified using devfsadm(1M), so Solaris looks for new hardware, then checking the output of prtconf -v for a section saying "Ethernet". Our D-Link card looks like this:

            pci1186,4b01 (driver not attached)
                Hardware properties:
                    name='assigned-addresses' type=int items=10
                        value=820e0810.00000000.e2000000.00000000.00004000.810e0814
.00000000.00002000.00000000.00000100                    
                    name='reg' type=int items=15
                        value=000e0800.00000000.00000000.00000000.00000000.020e0810
.00000000.00000000.00000000.00004000.010e0814.00000000.00000000.00000000.00000100
                    name='compatible' type=string items=7
                        value='pci1186,4b01.1186.4b01.11' + 'pci1186,4b01.1186.4b01' +
'pci1186,4b01' + 'pci1186,4b01.11' + 'pci1186,4b01' + 'pciclass,020000' + 'pciclass,0200'
                    name='model' type=string items=1
                        value='Ethernet controller'
                    name='power-consumption' type=int items=2
                        value=00000001.00000001
                    name='66mhz-capable' type=boolean
                    name='fast-back-to-back' type=boolean
                    name='devsel-speed' type=int items=1
                        value=00000001
                    name='interrupts' type=int items=1
                        value=00000001
                    name='max-latency' type=int items=1
                        value=0000001f
                    name='min-grant' type=int items=1
                        value=00000017
                    name='subsystem-vendor-id' type=int items=1
                        value=00001186
                    name='subsystem-id' type=int items=1
                        value=00004b01
                    name='unit-address' type=string items=1
                        value='1'
                    name='class-code' type=int items=1
                        value=00020000
                    name='revision-id' type=int items=1
                        value=00000011
                    name='vendor-id' type=int items=1
                        value=00001186
                    name='device-id' type=int items=1
                        value=00004b01

The very first line, "pci1186,4b01" tells us the PCI vendor-ID and product-ID for our card. But it's the "driver not attached" part that is worrying: drvconfig couldn't find a suitable driver for our card.

Unfortunatly, this particular card is not listed in the Solaris Hardware Compatibility List (HCL) so it's time to ask our friend Google and do some research. this post tells us that our card has a Marvell Yukon 88E8001 chip-set. Well, had we looked real close to the product photo on the D-Link website, then we would have noticed just this model number printed on the biggest chip of that card...

This time, we're lucky: The Marvell Yukon chip-set is listed on the Solaris Hardware Compatibility List (HCL)! In this case, it's listed as part of a mainboard and therefore comes with a different PCI-ID. But we learn from this entry that the correct driver is called "skge" and that it can be downloaded here.

Our HCL-Friend also tells us how to teach the driver a new PCI-ID: After installing the skge driver (I went for the 64-Bit version), we say:

/usr/sbin/update_drv -a -i '"pci1186,4b01"' skge

Now, Solaris knows that the skge driver can handle our particular brand of network card.

And low and behold, prtconf recognized our card:

# prtconf -D | grep 1186,4b01
pci1186,4b01, instance #0 (driver name: skge)

Yippeee, the driver is attached! Now we can configure the card just like any other using ifconfig skge0 plumb etc. or create a hostname.skge0file in /etc.

Being good Solaris community citizens, we should now contribute to it by hitting the "Submit Hardware" form in the Solaris HCL so future generations of cheap networking card users can spare the work of finding the right driver.

(Edit: Changed the formatting of the code parts, since the pre-tag messed up my layout.)

Comments:

Post a Comment:
Comments are closed for this entry.
About

Tune in and find out useful stuff about Sun Solaris, CPU and System Technology, Web 2.0 - and have a little fun, too!

Search

Categories
Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today
Bookmarks
TopEntries
Blogroll
OldTopEntries