the ethernet saga continues...

Will Roberts <[email protected]> Wed, 28 May 2003 13:28:29 -0400
Newsgroups gmane.linux.suse.sparc
Message-ID <[email protected]>
THE PROBLEM:

   I've helped a friend set up a number of SUN Sparcs including
   IPC, IPX, and Sparc5 machines.  Recently I was given a Sparc
   Classic on which I am trying to install SuSE linux v7.3 for
   Sparc (Kernel 2.2.20).

   The Classic is set up with a VT220 on the serial port to act
   as console for the install.  My intent is to run the machine
   headless on a 10baseT ethernet LAN.  The LAN uses static
   routes in the 172.2.16.xxx subnet.

   I have been unable to get the Classic's on-board TPE ethernet
   port to work and my attempts to install Sun Sbus ethernet
   cards 501-2015 or 501-2981 have been unsuccessful.

   The patch cable is good.  The hub to which it is connected is
   good.  The hub "link" led comes on when the Sparc Classic is
   started.  But no data flows.  The Sun Classic cannot ping
   or be pinged.


BACKGROUND INFO:

   My first indication of the problem came from the OpenBoot PROM
   before I even attempted to install any operating system:

      ok watch-net

      Using AUI Ethernet Interface
       Internal loopback test -- succeeded.
       External loopback test -- Lost Carrier  (transceiver cable problem?)
      send failed.

      Using TP Ethernet Interface
       Internal loopback test -- succeeded.
       External loopback test -- Lost Carrier  (transceiver cable problem?)
      send failed.


   After installing SuSE linux, this problem shows up in the start-up:

      sunlance.c:v1.12 11/Mar/99 Miguel de Icaza ([email protected])
      eth0: LANCE 08:00:20:1d:d5:7c
      eth0: using auto-carrier-detection.
      .  .  .
      Setting up network device eth0
      eth0: Carrier Lost, trying TPE               done
      Setting up routing (using /etc/route.conf)
      Error while excuting:
         /sbin/route add -net 0.0.0.0 netmask 255.255.0.0 gw 172.16.2.100 
dev eth0
         SIOCADDRT: Network is unreachable
      Setting up routing                           failed
      IPv6 v0.8 for NET4.0
      IPv6 over IPv4 tunneling driver
      eth0: Carrier Lost, trying AUI
      eth0: Carrier Lost, trying TPE
      Starting syslog services
      eth0: Carrier Lost, trying AUI
      eth0: Carrier Lost, trying TPE               done
      syslogd: /dev/tty10: No such device
      eth0: Carrier Lost, trying AUI
      eth0: Carrier Lost, trying TPE
      .  .  .


AN ATTEMPTED SOLUTION:

   I decided to configure SuSE to ignore the onboard ethernet interface
   eth0 and to use instead the add-in Sun Sbus 501-2981 card.  I did
   this by editing /etc/rc.config and /etc/route.conf:

      arcturus:/etc # cat rc.config
      .  .  .
      #
      # Networking
      #
      # Number of network cards: "_0" for one, "_0 _1 _2 _3" for four cards
      #
      NETCONFIG="_0"

      #
      # This variable contains all indices of active PCMCIA network devices
      #
      NETCONFIG_PCMCIA=""

      #
      # IP Adresses
      #
      IPADDR_0="172.16.2.124"
      IPADDR_1=""
      IPADDR_2=""
      IPADDR_3=""

      #
      # Network device names (e.g. "eth0")
      #
      NETDEV_0="eth1"
      NETDEV_1=""
      NETDEV_2=""
      NETDEV_3=""

      #
      # Parameters for ifconfig, simply enter "bootp" or "dhcpclient" to 
use the
      # respective service for configuration.
      # Sample entry for ethernet:
      # IFCONFIG_0="192.168.81.38 broadcast 192.168.81.63 netmask 
255.255.255.224"
      #
      IFCONFIG_0="172.16.2.124 broadcast 172.16.2.255 netmask 255.255.255.0 up"
      IFCONFIG_1=""
      IFCONFIG_2=""
      IFCONFIG_3=""
      .  .  .

   and in route.conf:

      arcturus:/etc # cat route.conf
      default         172.16.2.100    0.0.0.0         eth1
      127.0.0.0       0.0.0.0         255.0.0.0       lo


   with this configuration, SuSE starts properly:

      SPARCclassic, No Keyboard
      ROM Rev. 2.12, 40 MB memory installed, Serial #3294075.
      Ethernet address 8:0:20:1d:d5:7c, Host ID: 8032437b.

      Boot device: /iommu/sbus/espdma@4,8400000/esp@4,8800000/sd@3,0   File 
and args:
      SILO boot:
      Uncompressing image...
      PROMLIB: obio_ranges 1
      Booting Linux...
      PROMLIB: Sun Boot Prom Version 3 Revision 2
      Linux version 2.2.20 ([email protected]) (gcc version egcs-2.91.66 
19990314/Linux (egcs-1.1.2 release)) #1 Mon Nov 12 11:03:05 GMT 2001
      ARCH: SUN4M
      TYPE: SPARCclassic
      Ethernet address: 8:0:20:1d:d5:7c
      .  .  .
      sunlance.c:v1.12 11/Mar/99 Miguel de Icaza ([email protected])
      eth0: LANCE 08:00:20:1d:d5:7c
      eth0: using auto-carrier-detection.
      eth1: LANCE 08:00:20:1d:d5:7c
      .  .  .
      Setting up network device 
eth1                                       done 
  done
      Setting up routing (using /etc/route.conf)                           done
      Starting SSH daemon                                                  done
      IPv6 v0.8 for NET4.0
      IPv6 over IPv4 tunneling driver
      .  .  .


   The system appears to report the ethernet interfaces and the
   routing table correctly:

      arcturus:/home/oldbear # ifconfig
      eth1      Link encap:Ethernet  HWaddr 08:00:20:1D:D5:7C
                inet 
addr:172.16.2.124  Bcast:172.16.2.255  Mask:255.255.255.224
                inet6 addr: fe80::800:201d:d57c/10 Scope:Link
                inet6 addr: fe80::a00:20ff:fe1d:d57c/10 Scope:Link
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:12 dropped:0 overruns:0 carrier:12
                collisions:0 txqueuelen:100
           RX bytes:0 (0.0 b)  TX bytes:872 (872.0 b)
           Interrupt:55 Base address:0x8a00

      lo        Link encap:Local Loopback
                inet addr:127.0.0.1  Mask:255.0.0.0
                inet6 addr: ::1/128 Scope:Host
                UP LOOPBACK RUNNING  MTU:3924  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0
                RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

   and it is possible to check on the unused eth0 onboard ethernet
   which is not shown as "up".  Notice that both eth1 above and
   eth0 below have the same MAC address 08:00:20:1D:D5:7C.  This
   is correct because Sun architecture holds a single address for
   the Sparc workstation in its PROM.  The two interfaces are
   differentiated by their base addresses and interrupts, which
   SuSE identifies as Interrupt:55 Base address:0x8a00 for eth1
   and Interrupt:38 Base address:0xb200 for eth0.


      arcturus:/home/oldbear # ifconfig eth0
      eth0      Link encap:Ethernet  HWaddr 08:00:20:1D:D5:7C
                BROADCAST MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:100
                RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
                Interrupt:38 Base address:0xb200



   and the routing table:

      arcturus:/home/oldbear # route
      Kernel IP routing table
      Destination     Gateway         Genmask         Flags Metric 
Ref    Use Iface
      172.16.2.0      *               255.255.255.0   U     0      0 
0 eth1
      loopback        *               255.0.0.0       U     0      0 
0 lo
      default         172.16.2.100    0.0.0.0         UG    0      0 
0 eth1

      arcturus:/home/oldbear # netstat -r
      Kernel IP routing table
      Destination     Gateway         Genmask         Flags   MSS 
Window  irtt Iface
      172.16.2.0      *               255.255.255.0   U         0 
0          0 eth1
      loopback        *               255.0.0.0       U         0 
0          0 lo
      default         172.16.2.100    0.0.0.0         UG        0 
0          0 eth1


PROBLEM REMAINS:

   Pinging "localhost" or the Classic's own IP of 172.16.2.124 works fine
   but an attempt to ping anything else, such as 172.16.2.101 which is know
   to be up and responsive to other machines on the LAN, yields:

      arcturus:/home/oldbear # ping 172.16.2.101
      PING 172.16.2.101 (172.16.2.101) from 172.16.2.124 : 56(84) bytes of 
data.
      Warning: no SO_TIMESTAMP support, falling back to SIOCGSTAMP
      From 172.16.2.124: icmp_seq=3 Destination Host Unreachable
      From 172.16.2.124: icmp_seq=2 Destination Host Unreachable
      From 172.16.2.124: icmp_seq=1 Destination Host Unreachable
      From 172.16.2.124: icmp_seq=6 Destination Host Unreachable
      From 172.16.2.124: icmp_seq=5 Destination Host Unreachable
      From 172.16.2.124: icmp_seq=4 Destination Host Unreachable

      --- 172.16.2.101 ping statistics ---
      8 packets transmitted, 0 received, +6 errors, 100% loss, time 7028ms
      , pipe 3



NEXT STEPS:

   I am beginning to suspect that it may have something to do with
   SuSE loading the appropriate device driver for either of the
   ethernet interface.

   As noted above, on boot up, SuSE announces that it has discovered
   both interfaces on start-up:

      sunlance.c:v1.12 11/Mar/99 Miguel de Icaza ([email protected])
      eth0: LANCE 08:00:20:1d:d5:7c
      eth0: using auto-carrier-detection.
      eth1: LANCE 08:00:20:1d:d5:7c

   Here is where I am getting beyond my competence: it appears that both
   interfaces are identified above as using the "LANCE" chip.  An appropriate
   driver needs to be incorporated into the SuSE kernel.

   Drivers appear to be identified and loaded as modules in /etc/modules.conf
   where the related device is associated and its interrupt and base address
   are specified:

      arcturus:/etc # cat modules.conf
      #
      # Copyright (c) 1996-2000 SuSE GmbH Nuernberg, Germany.  All rights 
reserved.
      #
      # Author: Hubert Mantel <[email protected]>, 1996-2001
      #
      # Configuration file for loadable modules; used by modprobe
      #

      # Aliases - specify your hardware
      alias eth0             off
      alias eth1             off
      alias tr0              off
      alias scsi_hostadapter off
      alias fb0              off
      .  .  .
      ########################################################################
      # Options; these are examples; uncommented and modify the lines you need
      ########################################################################

      # options cdu31a         cdu31a_port=0x340 cdu31a_irq=0
      # options sbpcd          sbpcd=0x230,1
      # options aztcd          aztcd=0x320
      .  .  .
      # options ne             io=0x300 irq=5

      # Use this if you have two cards:
      # options ne             io=0x300,0x320 irq=5,7

      # options tulip          options=0
      # options 3c59x          options=0
      # options 3c501          io=0x280 irq=5
      # options 3c503          io=0x280 irq=5 xcvr=0
      # options 3c505          io=0x300 irq=10
      .  .  . etc


   The exception to this is the LANCE driver which, I am told, needs to
   be compiled into the kernel and cannot be run as a module loaded at
   boot time.  True?

   But this driver should already be compiled into the SuSE for Sparc
   kernel and associated with both interfaces:

      sunlance.c:v1.12 11/Mar/99 Miguel de Icaza ([email protected])
      eth0: LANCE 08:00:20:1d:d5:7c
      eth0: using auto-carrier-detection.
      eth1: LANCE 08:00:20:1d:d5:7c

   Someone else noted that the second interface eth1 (the Sbus 501-2981
   option card) should use a sunhme ("happy meal ethernet") driver.
   I am skeptical because hme is the newer 100baseT "Hundred Megabit
   Ethernet" and works with a much newer and different card.

   And what about the base address and interrupts for the two
   interfaces.  Ifconfig reports that SuSE identifies these as:

      eth0   Interrupt:38 Base address:0xb200
      eth1   Interrupt:55 Base address:0x8a00

   Is this accurate and does it need to be specified somewhere in
   modules.conf or elsewhere?


I'd rather not do this, but I may try to install SuSE for Sparc v7.3 on
a known good Sparc5 which is currently running NetBSD and install NetBSD
on the Sparc Classic.  It's a silly way to diagnose an ethernet problem,
but it might settle the question about whether the problem lies with
the O/S or the hardware.

Any further information, suggestions, clarifications, corrections, hints,
insights, or solutions would be greatly appreciated.

Regards,
Will
The Old Bear