A P P E N D I X  C

Troubleshooting


Common Problems

There are many steps involved in isolating and resolving network interface problems. Once you have configured your interface and network properly, these steps should be transparent to you. However, problems in your configuration may cause a failure at any number of points along the communication path. This section contains checks to determine the failure point, and resolution process. If you continue to experience problems, information gathered from these checks will help your service provider diagnose and resolve the problem.

How do I force the adapter to run at a particular speed?

You might need to force hme to 10 Mb half-duplex if using 10 MB switch or a hub. The same thing holds for forcing to 100 MB Full Duplex, and all of the other speeds. Replace the "0" with "1" for the required speed.

Reboot your system to apply the changes.

The following example uses a standard 10baseT using shared Hub or 10Base2 using Mii to Aui adapter. The following instructions will change the settings for all the hme adapters on the machine. Add the following lines to the /etc/system file using a text editor:

set hme:hme_adv_autoneg_cap=0 
set hme:hme_adv_100fdx_cap=0 
set hme:hme_adv_100hdx_cap=0 
set hme:hme_adv_10hdx_cap=1 
set hme:hme_adv_10hdx_cap=0

For individual adapters use ndd commands as follows:

In the following example, set the X value to the interface in question

# ndd -set /dev/hme use_int_xcvr 1

Use the following command to force to use internal Tx (100TX rj45 port)

# ndd -set /dev/hme use_int_xcvr 1

Use the following command to force off 100 Mb half-duplex

# ndd -set /dev/hme adv_100hdx_cap 0

Use the following command to force off 100Mb T-4

# ndd -set /dev/hme adv_100T4_cap 0

Use the following command to force on 100Mb full-duplex

# ndd -set /dev/hme adv_100fdx_cap 1

Use the following command to force off auto-negotiation

# ndd -set /dev/hme autoneg_cap 0

Example: force hme0 to 100 Mb Full Duplex

# ndd -set /dev/hme instance 0 
# ndd -set /dev/hme adv_10hdx_cap 0 
# ndd -set /dev/hme adv_100fdx_cap 1 
# ndd -set /dev/hme adv_10fdx_cap 0 
# ndd -set /dev/hme adv_10hdx_cap 0 
# ndd -set /dev/hme adv_autoneg_cap 0 

This will change the settings dynamically. There is no need to reboot your system. This set of commands affects only the selected interface. By default the instance number is "0". Place these commands in the rc scripts ( Edit a file in /etc/rc2.d, for example, S95nddsettings ) to make these changes permanent and effective after a reboot .

How do I change the IP address for my network interface?

Edit the /etc/hosts file. Change the IP address corresponding to this machine and then reboot.

Run the command sys-unconfig (1M) if you move your system to a different subnet or domain.



caution icon

Caution Caution - Read the sys-unconfig(1M) man pages before using the command. Many files are permanently altered and deleted.



How do I change the hostname for my network interface?

Edit the following files to change the host name associated with the IP address:

How do I configure another IP address or subnet for my network interface?

Modify the files listed above from the previous question by adding the new additional hostname and IP address. In addition, add an entry needs to /etc/netmasks . The netmasks(4) man page provides the convention for this file.

Create a logical interface using the ifconfig command. For example, to configure the second interface on hme0

# ifconfig hme0:1 123.4.5.6 up

Use the following command for systems running Solaris 8 and later versions:

# ifconfig hme0 addif 123.4.5.6 up

This takes effect until the next reboot. To permanently configure an additional IP address for the hme0 interface, add an additional line to /etc/hostname.hme0 . Note that for Solaris 8 or newer systems, add the following line to the /etc/hostname.hme<device_instance>:

addif 123.4.5.6 up

How do I know if my network interface is up? I can not ping the device.

1. Verify via the ifconfig command that the interface is configured for IP and that the adapter has the UP flag.

# ifconfig -a

2. If this is ok make sure the adapter has a link:

For example if the ifconfig command returns hme0, set the instance to query. This is needed on systems with multiple adapters.

# ndd -set /dev/hme instance 0 

Obtain the link status of the device. A return value of 1 indicates that the adapter is seeing a link, while a return value of 0 indicates there is no link.

# ndd -get /dev/hme link_status 

You cannot check ndd status until your adapter appears in the output to an ifconfig -a command. A stream must exist to the driver.

3. Snoop the interface.

# snoop -d hme0
Using device /dev/hme (promiscuous mode)
runnreff -> 10.10.192.255 UDP D=138 S=138 LEN=182
runnreff -> 10.10.192.255 UDP D=137 S=137 LEN=58
dhcp-192-238 -> 10.10.192.255 UDP D=137 S=137 LEN=58

If you see packets then you know your interface is working. If your adapter is connected to a switch you will see only broadcast, multiast and unicast packets for this adapter. Verify that the switch port is configured correctly.

If you see no packets, test the adapter hardware at the ok prompt via watch-net-all or test <adapter path> .

4. If packets are seen with the snoop trace, then the network adapter is working correctly.

However, if ping still does not work, traceroute(1M) and netstat(1M) are helpful .

The traceroute commands displays the route to your destination station:

# traceroute -i hme0 teriya
traceroute to teriya (129.150.143.68), 30 hops max, 40 byte packets
sw203-1 (192.168.203.1)  2.684 ms  2.444 ms  2.870 ms
nwk02rfsrb149 (129.150.149.241)  0.687 ms  0.704 ms  0.720 ms
teriya (129.150.143.68)  0.457 ms

The netstat -r command displays the system routing tables:

# netstat -r
		Routing Table: IPv4
  		  Destination           Gateway           Flags  Ref   Use   Interface
  		  -------------------- -------------------- ----- ----- ------ ---------
  		  nwk02_1815_labnet1   atmsw-27              U        1    434  hme0
  		  199.99.234.0         cip234-27             U        1      1  ba0
  		  224.0.0.0            atmsw-27              U        1      0  hme0
  		  default              sw203-1               UG       1    252  
  		  localhost            localhost             UH       2      6  lo0

How do I determine the current speed of my adapter?

Issue a dmesg command to display the last message that the driver sent to the console. It will state the speed of the link as well as the mode. However, often other messageshave caused the circular buffer to overflow erasing hme messages.

# dmesg | grep hme
...
Oct  1 17:42:03 atmsw-27 genunix: [ID 936769 kern.notice] hme0 is /sbus@1f,0/SUNW,hme@e,8c00000
Oct  1 17:42:07 atmsw-27 hme: [ID 517527 kern.notice] SUNW,hme0 : Internal Transceiver Selected.
Oct  1 17:42:07 atmsw-27 hme: [ID 517527 kern.notice] SUNW,hme0 : Auto-Negotiated  100 Mbps Half-Duplex Link Up
	# 

Use the ndd command to display and set selected configuration parameters in the hme driver. To see the parameters that are supported, type the following command:

# ndd /dev/hme \?

To display the link speed, issue a ndd command to tell the driver which instance of hme that you are intested querrying. Note that instance 0 is the default. Then issue an ndd command list the link speed.

# ndd -set /dev/hme instance 0
# ndd -get /dev/hme link_speed
1
# ndd -get /dev/hme link_mode
1

The return value of 1 for link_speed indicates that this link is running at 100Mbps. A value of 0 indicates a link speed of 10Mbps. A link_mode value of 1 indicates full duplex and a value of 0 indicates half-duplex.

Use the undocumented netstat -k command to list driver kstats. Below is an example from the output of a Solaris 8 system. Note that this option changes from release to release and is not guaranteed to work in the future.

CODE EXAMPLE C-1 The output from a netstat -k command
# netstat -k hme0
hme0:
ipackets 317522 ierrors 0 opackets 9790 oerrors 0 collisions 43 
defer 0 framing 0 crc 0 sqe 0 code_violations 0 len_errors 0 
ifspeed 100000000 buff 0 oflo 0 uflo 0 missed 0 tx_late_collisions 0 
retry_error 0 first_collisions 0 nocarrier 0 nocanput 0 
allocbfail 0 runt 0 jabber 0 babble 0 tmd_error 0 tx_late_error 0 
rx_late_error 0 slv_parity_error 0 tx_parity_error 0 rx_parity_error 0 
slv_error_ack 0 tx_error_ack 0 rx_error_ack 0 tx_tag_error 0 
rx_tag_error 0 eop_error 0 no_tmds 0 no_tbufs 0 no_rbufs 0 
rx_late_collisions 0 rbytes 141596475 obytes 1237354 multircv 0 multixmt 9 
brdcstrcv 307824 brdcstxmt 59 norcvbuf 0 noxmtbuf 0   newfree 0 
ipackets64 317522 opackets64 9790 rbytes64 141596475 obytes64 1237354 align_errors 0 
fcs_errors 0   sqe_errors 0 defer_xmts 0 ex_collisions 0 
macxmt_errors 0 carrier_errors 0 toolong_errors 0 macrcv_errors 0 
link_duplex 0 inits 12 rxinits 0 txinits 0 dmarh_inits 0 
dmaxh_inits 0 link_down_cnt 0 phy_failures 0 xcvr_vendor 524311 
asic_rev 193 

Notice the parameter ifspeed , indicats that this link is running at 100Mbps. The link_duplex parameter indicates that thislink is running at half-duplex.

I moved the board to another slot, but ifconfig does not work

Is the new card recognized by the system?

This can be detemined by inspecting the /etc/path_to_inst file for instances of hme .

Which instance did the network adapter move to?

The path_to_inst file records the mappings of physical device names to instance numbers. The system modifies this file when you move a board to a different slot and issue a boot -r command from the ok prompt. This information is persistent across reboots. The system remembers that your card was in another slot, so when you place it in a new slot, it creates a new device_instance, leaving the old one intact. Move the /etc/hostname.hme<device_instance> to a file name with the new device_instance number . After a reconfiguration boot, boot -r, the system will use the new device_instance number to ifconfig and plumb your adapter.

1. Inspect the file /etc/path_to_inst for hme instances.

Note the value of the highest hme instance. Also note the instance value of your adapter.

# grep hme /etc/path_to_inst
"/sbus@1f,0/SUNW,hme@e,8c00000" 0 "hme"

2. Follow the instructions that came with your system to replace an I/O adapter. Move the card to a new slot and issue a boot -r command.

ok boot -r

3. Inspect the file /etc/path_to_inst for hme instances

# grep hme /etc/path_to_inst
"/sbus@1f,0/SUNW,hme@e,8c00000" 0 "hme"
"/sbus@1f,0/SUNW,hme@e,8c00000" 1 "hme"

4. Move the hostname.hme<instance> file to the new highest instance.

If you have moved the adapter into an slot that previously contained an hme adapter, then this is the instance that you should move the hostname.hme<instance> file to.


Error Messages

This section includes common error messages you might see while configuring and bringing up your hme interface. For each message, there is a brief explanation of the problem and a possible solution.

No response from Ethernet network : Link down -- cable problem?

The interface has detected Link Down while trying to transmit a packet.

Driver is busy with upper layer

The device failed to detach because of open streams into it. The cfgadm(DR) and modunload commands can cause this message.

Parallel detection fault

While attempting to auto-negotiate with a link partner, the interface encountered a parallel detection fault. The device will retry auto-negotion until the link is up.

Transceiver does not talk MII or "Transceiver isolate failed

The transceiver on the adapter fails to reset. The device will retry resetting the transceiver.

No transceiver found

The device did not detect the external/internal transceiver. This often occurs when the external transceiver is not properly connected or is not functioning properly.

Dev not used - dev in slave only slot

The adapter is in a Slave-Only-Slot. The device failed to attach.

Failed to initialize hardware/driver

The device failrf to intialise/setup/allocate resources needed to function properly.

External Transceiver: anar not set with speed selection

Either the link partner's auto-negotiation capability cannot be read, or the switch or other host is not advertising its auto-negotiation capabilities. This often occurs when an external transceiver attached to the device.

Set the mode to half duplex and try the speed from 100 to 10 using the parallel detection scheme. This message indicates that the above configuration failed to set the speed.