[Future Technology Research Index] [SGI Tech/Advice Index] [Nintendo64 Tech Info Index]


[WhatsNew] [P.I.] [Indigo] [Indy] [O2] [Indigo2] [Crimson] [Challenge] [Onyx] [Octane] [Origin] [Onyx2]

Ian's SGI Depot: FOR SALE! SGI Systems, Parts, Spares and Upgrades

(check my current auctions!)

100Mbit FastEthernet Support on Indy/Indigo2

Credits and thanks to: Gavin Saxby, Tony Mantler, Sergio, Steffen Urbanski, James Davis, Rob van Amerongen and Walter Schrabmair

Last Change: 21/Jul/2010

Many owners of older SGIs such as Indy and Indigo2 would love to be able to have 100Mbit network speed on their systems - having a faster network link breathes new life into these older systems, making them ideal for simple servers, number crunchers, offline processing, renderfarms, etc. Here I present all the information I've been able to find on this subject, including detailed information on how to get the EISA 3Com 3c597 card working in Indigo2.


100MBit FastEthernet on Indigo2

Option cards for Indigo2 use either the EISA bus or the faster GIO64 bus. Phobos has been the traditional supplier of such cards; they used to make one for each type of bus, with the GIO64 version being the faster and more expensive model.

The GIO64-based 10/100 card is called the Phobos G160, while the other card is the EISA-based Phobos E100 (generic 3Com image here). The latter is roughly half the speed of the G160, but it will likely be much cheaper if found for sale 2nd-hand. Phobos may still sell both such cards (if in stock), but they're very expensive if bought new, even from a reseller such as AllSoft in Germany; their price was $630 for the G160 and $460 for the G130 used in Indy, not including shipping and taxes (ouch!).

However, the 3Com 3c597 is a much cheaper equivalent to the Phobos E100 card and is without doubt the best choice for upgrading an Indigo2 for many people, although being an EISA card it definitely isn't as fast. The 3c597 will probably average around 3.5MB/sec max on most systems, whereas the G160 should deliver twice that. If you want the best speed, go for the G160. If your budget is tight, go for the 3c597. Also note that the G160 uses up a logical GIO slot, so if you already have two slots used (eg. HighIMPACT plus IMPACT Compression), then you've no choice but to use the 3c597.

In fact, the E100 is just a variant of a standard 3Com card, but shipped with Phobos drivers. The cheapest price I've heard of for a 3c597 is 1.20 UKP (about $2 US) from Ebay UK, while another was 5 UKP ($8) from a PC junk shop, although these are really just lucky finds. Thus, visit computer swap-meets or PC 2nd-hand shops and you might find one, and also keep an eye on PC for-sale newsgroups (see groups.google.com). I managed to get three 3c597s for 25 UKP [$35] each, but I was fortunate since the seller regarded them just as old PC parts; normal prices in the SGI 2nd-hand market are higher. If you want a 3c597, I have some available, and the last time I heard so did Tony Mantler, for $90 + $10 shipping.

Actually, without Tony and others (thanks go Tony, Gavin Saxby and Sergio) this page wouldn't exist since it was they who worked out how to modify the standard Phobos E100 drivers to make the 3c597 function in Indigo2. If you benefit from this page, feel free to email them with praise. :)


The Phobos G160 Card

Here is the spec sheet on the G160, from Phobos' web site; the important part is that it's a 10/100 card that uses the fast GIO64 bus and supports both half and full-duplex modes. The G160 isn't made anymore. Phobos might have some in stock, but they're expensive if bought directly from Phobos or from a reseller. Even 2nd-hand ones tend to be expensive since they're much faster than the EISA cards.

If you can find such a card though, then just download the drivers from Phobos' downloads page and install. If you can't access their web site, then feel free to download the files from my Depot page.


The Phobos E100 EISA Card

Here's the spec sheet. The E100 is slower than the G160, but it will at least therefore be cheaper if found 2nd-hand. The E100 isn't made anymore. Phobos might have some in stock, but they're expensive if bought directly from Phobos or from a reseller. Even 2nd-hand ones tend to be expensive just because it's an original Phobos card that's for sale. If you can find such a card though, then just download the drivers from Phobos' downloads page and install. If you can't access their web site, then feel free to download the files from my Depot page.

However, don't worry about trying to find an E100 since there is a much cheaper alternative, namely the 3Com 3c597. The existence of the 3c597 is the main reason why I've written this page.


The Standard 3Com EISA 3c597 10/100 Card

The Phobos E100 is really just a rebadged 3c597, so who needs the E100? Just find a 3c597 (eg. extract one from an old PC, or look in 2nd-hand PC parts stores, or I usually have one for sale), install the card along with the normal E100 drivers, do a simple modification to the main Phobos E100 driver library file and voila, a fully functional 100Mbit card in Indigo2!

Here's how to do it. Assuming you've found a 3c597, install it in the bottom EISA slot underneath the graphics card set. Next, download and install the E100 drivers from Phobos' download page or from my Depot page. Then download the necessary modified driver and install (grab this archive file, unpack and follow the instructions in the README). Lastly, follow the instructions given below to setup the card for use as a new primary interface port (the README in the archive contains a similar setup summary). Note that if you're using IRIX 5.3 on an IP22 Indigo2, some extra 5.3 information is available at the end of this page. Instructions and an appropriate .o file for 6.2 on R4K Indigo2 is inluded in the fehack archive, courtesy of Walter Schrabmair.


Modified Phobos EISA Drivers: Background

The Phobos drivers test to see if the installed EISA card is a recognised Phobos card. The trick is to negate the logic of the test so that the test always succeeds on a non-Phobos EISA card.

I first heard about this idea from my friend Gavin Saxby; he'd been talking to someone called Sergio who was working on modifying the drivers. Feel free to read Sergio's comments, in which he explains how he analysed the Phobos driver library.

Meanwhile, Tony Mantler was also looking into this issue; based on Sergio's information, he worked out a more efficient method of altering the drivers and then wrote a simple C program to implement the approach. To help in the creation of this page, Tony supplied me with replacement driver libraries ready-compiled for IP22 and IP28 Indigo2s.

Later, Steffen Urbanski supplied me with the 5.3 drivers, while James Davis and Rob van Amerongen worked out how to modify the 5.3 driver. James and Rob each supplied me with a modified .o, but cmp showed the two files to be identical, so I've attributed the new driver to both of them.

Thus, my thanks to Gavin, Sergio, Tony, Steffen, James and Rob for doing the original work. I've just collated all the information together.


100MBit FastEthernet on Indy, Challenge-S and IRIS Indigo

There are at least two 10/100 cards one can use in these systems. The most well known is made by Phobos. The other card is made by Set Engineering Inc. which will definitely work in Indy and Challenge-S, but I'm not so sure about Indigo (NB: as I type this, SetEng's web site doesn't work with Netscape - use Explorer or other browser to access their site).


The Phobos G130...

The Phobos card for Indy is the G130 10/100 Ethernet Adapter. Full details are in the spec sheet. The G130 is a 32bit device for the GIO32 slots as used in Indy, Challenge-S and IRIS Indigo. Note that Phobos' web site says R4K Indigo, but maybe it would work with R3K units too since 5.3 drivers are available.

The G130 isn't made anymore. Phobos might have some in stock, but they're expensive if bought directly from Phobos or from a reseller (about $460). Look for one 2nd-hand of course; even then the last one I saw was over 100 UKP ($150 at the time). If that sounds alot, remember that an item's real value is always only what one is willing to pay - if someone is desperate for such a card, then the seller can ask a high price. One thing is certain, the G130 is rare.

If you can find a G130, then just download the drivers from Phobos' downloads page and install. If you can't access their web site, then feel free to download the files from my Depot page.

There is also the older G100 card. Again, drivers are available from the Phobos site or my Depot page. The G130 is allegedly better though, and Phobos no longer has a separate information page on the G100.


The Set Engineering Card...

SGI asked Set Engineering to make some cards for Indy, etc. so they did, and very good they are too! I bought one 2nd-hand for under 50 UKP ($75). Tested in my R4K/200 Indy, I observed 8MBytes/sec on a ttcp test through a 10/100 switch to an O2, which is pretty good IMO. From the data I've been given, this is better than the G130 (can anyone confirm this?).

Set Engineering does have a web page with some details about the card and a picture, but I can't access their site at the moment. It seems their pages are too specific to Microslop Exploiter.

One good thing about the SetEng card is that one doesn't need to install separately downloaded drivers. Specifically, just adding the card to an existing running system won't detect it, but a fresh install of IRIX 6.5 detected the card automatically and installed the necessary software, ie. the required drivers must have been included by SGI in the base 6.5 CDs, which is very cool! I haven't tested whether the IRIX 6.2 base CDs have drivers for the card.

I'll include a picture of the SetEng card on this page soon.


ttcp Network Performance Test

If/when you get hold of a 10/100 card, here is the performance test I usually run, which can be done either through a 100Mbit switch or hub, or using a swapover Ethernet cable. Naturally, the second machine must also have 100Mbit capability, eg. an O2, Origin200 or Linux PC.

   Assuming two hosts, called host1 and host2, where host1
   is the Indigo2 (or whatever) with the new 10/100 card,
   then enter this on host1:

       ttcp -n 10000 -r -s

   This tells host1 to wait for a connection. Now enter this on host2
   to begin the test transmission:

       ttcp -n 10000 -t -s host1

The output might look something like this (the following was done between an Origin200 and an O2 via a Bay Netgear FS116 16-port 10/100 switch):

host1:

# ttcp -n 10000 -r -s
ttcp-r: buflen=8192, nbuf=10000, align=16384/0, port=5001  tcp
ttcp-r: socket
ttcp-r: accept from xx.xx.xx.xx
ttcp-r: 81920000 bytes in 7.04 real seconds = 11365.72 KB/sec +++
ttcp-r: 55448 I/O calls, msec/call = 0.13, calls/sec = 7877.58
ttcp-r: 0.1user 2.1sys 0:07real 32% 640maxrss 0+0pf 56511+554csw

host2:

# ttcp -n 10000 -t -s host1
ttcp-t: buflen=8192, nbuf=10000, align=16384/0, port=5001  tcp  -> v
ttcp-t: socket
ttcp-t: connect
ttcp-t: 81920000 bytes in 7.03 real seconds = 11380.75 KB/sec +++
ttcp-t: 10000 I/O calls, msec/call = 0.72, calls/sec = 1422.59
ttcp-t: 0.0user 1.2sys 0:07real 18% 684maxrss 0+0pf 10943+3744csw

Note that the use of '-n 10000' in the above forces a longer test; without it, the default values would give a test that only lasts barely more than a second.

11.3MB/sec is pretty much a maximum result - you'd be lucky to get anything more than 11.5MB/sec. In practice, a 10/100 card for Indy would probably not be as fast, more like 8MB/sec maximum (less for the G100 I expect). An EISA card in Indigo2 will usually drop that by down to about 5.5MB/sec at best.

For a full-duplex test, just run two of the above tests, with the second one using the commands swapped round, ie. use four xterm windows to set it up, start the receiving commands (one on each host), then type the sending commands but don't press enter. Highlight a return code with the mouse from anywhere and then paste into the two windows as quickly as possible. Alternatively, for a perfect test, use the at command or something to synchronise the tests so that they start at exactly the same time. If full-duplex is working properly, one should see a good bandwidth in both directions at the same time. My Origin200/O2 test gave a total full-duplex speed of 22MB/sec.


Configuring The New 10/100 Card

After installing an extra Ethernet card of any type, you'll likely have to modify /etc/config/netif.options in order to change the default Ethernet port. To do this, locate the following line in the /etc/config/netif.options file:

    : if1name=

and change it to this (ie. uncomment the line and add fe0 to the end):

    if1name=fe0

fe0 is the usual abbreviation to add if one is using a card in Indigo2 driven with Phobos drivers. Other cards with non-Phobos drivers may require a different abbreviation. the hinv or ifconfig commands will show the appropriate interface name. If you're using a 3c597 in Indigo2, the abbreviation to add is still fe0.

If you don't want to use the redundant built-in 10Mbit port as a second interface, then change the if_num variable in netif.options so that the system only deals with one interface. Look for this line:

    : if_num=8

and change it to this:

    if_num=1

Now use the FEControl GUI program (included with the Phobos drivers; enter 'man FEControl' for full details) to set the link speed and duplex mode. Since I use a 16-port switch, I just force the card to 100Mbit and full-duplex, but if you're using a 100Mbit hub then select 100Mbit half-duplex.

Alternatively, make changes using the command-line fe_control program (enter 'man fe_control' for full details), eg. to set to 100MBit full-duplex:

    fe_control -i fe0 -d full -s 100

Just to make sure the settings have taken effect, stop and restart the network at this point:

    /etc/init.d/network stop
    /etc/init.d/network start

or just reboot the system.

If you're on a remote connection and want to stop/restart the network, then run the above commands together in background:

    cd /etc/init.d
    (./network stop && ./network start)&

though it's better to be logged on locally when making changes such as these, just in case anything goes wrong.

See the Phobos INSTALL file for details on how to setup the card as something other than the primary interface.

Remember the use of the netstat, ifconfig and ping commands to check what's going on, eg. here is an example use of ifconfig on an O2 to check current Ethernet status (I've replaced the actual IP address with xx symbols):

# ifconfig -av
ec0: flags=410c43
        inet xx.xx.xx.xx netmask 0xffffff00 broadcast xx.xx.xx.255
        speed 100.00 Mbit/s full-duplex
lo0: flags=1849
        inet 127.0.0.1 netmask 0xff000000 


Note that ifconfig doesn't report the link speed or duplex mode for a system with a 3c597 installed:

# ifconfig -av
fe0: flags=c63
        inet xx.xx.xx.xx netmask 0xffffff00 broadcast xx.xx.xx.255
ec0: flags=802
        speed 10.00 Mbit/s half-duplex
lo0: flags=1849
        inet 127.0.0.1 netmask 0xff000000 


However, one can just use the fe_control program instead to report the current status (this is the output from an R10K/195 Indigo2 Extreme with a 3c597 installed and working ok):

# fe_control
Phobos E100 Driver version 2.3.3
fe0: full-duplex, 100Base-T (forced), revision 1


and of course one can do a ttcp test to make sure the speed is indeed now beyond 10MBit. Hooray! 8)

Feedback on this page is most welcome. I'll leave you with the ttcp test results from my R10K/195 Extreme (with a 3c597 card), connecting to my R5K/200 O2, plus an ftp test:

i2# ttcp -n 10000 -r -s
ttcp-r: buflen=8192, nbuf=10000, align=16384/0, port=5001  tcp
ttcp-r: socket
ttcp-r: accept from 193.61.252.31
ttcp-r: 81920000 bytes in 13.87 real seconds = 5766.28 KB/sec +++
ttcp-r: 10762 I/O calls, msec/call = 1.32, calls/sec = 775.71
ttcp-r: 0.0user 0.8sys 0:13real 6% 1016maxrss 0+0pf 2133+88csw

o2# ttcp -n 10000 -t -s i2
ttcp-t: buflen=8192, nbuf=10000, align=16384/0, port=5001  tcp  -> i2
ttcp-t: socket
ttcp-t: connect
ttcp-t: 81920000 bytes in 13.94 real seconds = 5737.44 KB/sec +++
ttcp-t: 10000 I/O calls, msec/call = 1.43, calls/sec = 717.18
ttcp-t: 0.0user 1.6sys 0:13real 11% 20maxrss 0+0pf 2138+955csw


Result: approx. 5.6MB/sec.

Next, an ftp test using the same setup: sending a 46MB file from the Indigo2 to the O2:

ftp> put x_eoe.sw
local: x_eoe.sw remote: x_eoe.sw
200 PORT command successful.
150 Opening BINARY mode data connection for 'x_eoe.sw'.
226 Transfer complete.
48324095 bytes sent in 8.61 seconds (5481.66 Kbytes/s)


Result: 5.35MB/sec.


3c597 Subsidiary Information for IRIX 5.3

The procedure for changing the drivers for IRIX 5.3 is slightly different from 6.2/6.5. James Davis and Rob van Amerongen:

James Davis:

  hi ian

  I've come across your site almost every time I search for SGI information -
  thanks for putting up so much useful info!

  I installed a 3com 3c597 100Mb ether card in my indigo2, but the
  methods from Tony & Sergio on your 100Mb Page will only work with
  Irix 6.5. Phobos uses different drivers for Irix 5.3, so I whipped
  up a driver file (attached) that you can include with your download
  if you like.

  Here is some detail of the if_fe.o file modification:

  I found that there were actually two different error messages in the
  Phobos Irix 5.3 driver, one at 0x5CF4 and another identical error
  message at 0x5D24.  Again, I followed the same path as Sergio and
  determined that the beq command just before the error message was
  comparing to see if the card was a valid phobos card.  Just like
  Tony, I simply replaced both beq's with a simple b (in a hex editor)
  so that the driver will work with both a Phobos and a 3c597 card.  I
  also found that the fe_config utility would not work properly unless
  the fe0 interface was the primary interface...

  The following code was modified in a hex editor:
  (disassembly offsets)
  0x4b8, 11410008 (beq t2,at,0x4dc) -> 10000008 (b 0x4dc)
  0x58c, 11610008 (beq t3,at,0x58c) -> 10000008 (b 0x58c)

  Tony's C program can be easily modified to replace these values, although it
  will not readily compile on a 5.3 system with IDO installed.  You must
  replace all uint32_t with __uint32_t (note the double underscore) due to a
  problem with intypes.h include in 5.3.

  file attached:  if_fe.o (zipped) IP22 Irix 5.3


Rob van Amerongen:

  Hello Ian, 

  I was able to find the code in the Phobos 5.3 driver. Attached is the
  modified file, temporarily called if_fe-pat-27-01.o Following the
  ideas of Sergio. It was possible to locate the "magic" number 96 also
  in the 5.3 code. From there it was easy to find the offending
  "beq's". I changed the "beq" to a "b" following Tony's document. As
  you can see the structure of the 5.3 driver is a little bit different
  from the 6.2/6.5 versions. However, it is not as in the 6.2/6.5
  versions that it uses those two offsets uniquely as Sergio has found
  in the 6.2/6.5 versions. I did not try to modify the fehack program
  because I got some errors regarding mixing COFF and ELF objects
  together and did not want to spend much time to it. As you already
  mentioned, there will be not much demand for the 5.3 driver but I am
  happy with it, the more because I could lay my hands on four brand
  new 3com cards at no charge !!.

  Like Sergio, I used a hex editor to apply the patch. 

  Here are the two steps in the program to be patched. 

  The first.... 

  [if_fe.c: 499] 0x4ac: a7a20042shv0,66(sp) 
  [if_fe.c: 500] 0x4b0: 97aa0042lhu t2,66(sp) 
  [if_fe.c: 500] 0x4b4: 24010060liat,96(the magic 96) 
  [if_fe.c: 500] 0x4b8: 11410008beq t2,at,0x4dc(changed this to 10 00 00 08) 
  [if_fe.c: 500] 0x4bc: 00000000nop 
  [if_fe.c: 501] 0x4c0: 3c050000lui a1,0 
  [if_fe.c: 501] 0x4c4: 8fa60048lwa2,72(sp) 
  [if_fe.c: 501] 0x4c8: 24a55cf4addiu a1,a1,23796 
  [if_fe.c: 501] 0x4cc: 0c000000jal cmn_err 
  [if_fe.c: 501] 0x4d0: 24040004lia0,4 
  [if_fe.c: 502] 0x4d4: 1000013db 0x9cc 

  and the second..... 

  [if_fe.c: 510] 0x558: a7a20042shv0,66(sp) 
  [if_fe.c: 511] 0x55c: 97af0042lhu t7,66(sp) 
  [if_fe.c: 511] 0x560: 3401f500liat,62720 
  [if_fe.c: 511] 0x564: 31ebff00andit3,t7,0xff00 
  [if_fe.c: 511] 0x568: 11610008beq t3,at,0x58c (changed this to 10 00 00 08) 
  [if_fe.c: 511] 0x56c: 00000000nop 
  [if_fe.c: 512] 0x570: 3c050000lui a1,0 
  [if_fe.c: 512] 0x574: 8fa60048lwa2,72(sp) 
  [if_fe.c: 512] 0x578: 24a55d24addiu a1,a1,23844 
  [if_fe.c: 512] 0x57c: 0c000000jal cmn_err 
  [if_fe.c: 512] 0x580: 24040004lia0,4 
  [if_fe.c: 513] 0x584: 10000111b 0x9cc 

  As you can see there were no "208" offsets or something similar and
  the calls to the print routine are different, so I think Sergio was
  lucky to find those unique values. Nevertheless, without luck, we
  would not be here, as we say in the Netherlands. The procedure for
  installing the driver is the same as mentioned in your documents
  regarding the installation of the 6.2/6.5 drivers. Maybe you can pass
  this info to Sergio because his info was a nice starting point.

  Cheers, 

  Rob van Amerongen 
  CAE Aviation training 
  www.cae.com 


Ian's SGI Depot: FOR SALE! SGI Systems, Parts, Spares and Upgrades

(check my current auctions!)
[WhatsNew] [P.I.] [Indigo] [Indy] [O2] [Indigo2] [Crimson] [Challenge] [Onyx] [Octane] [Origin] [Onyx2]
[Future Technology Research Index] [SGI Tech/Advice Index] [Nintendo64 Tech Info Index]