Determine Interface Status
From Peter Pap's Technowiki
The following script will give you the status of your active network interfaces, ie. duplex, speed, auto-negotiation etc. Was taken from a BigAdmin article:
#!/bin/ksh ################################################################################ # Simple script to GET stats about network cards # Should work on hme and qfe. Will NOT change anything. # Will report on speed and config of all network interfaces. # Paul Bates 27.03.2000 # James Council 26.09.2001 # - Changed output to one liners. # - Added IPversion check. # James Council 10.10.2002 (jamescouncil@yahoo.com) # - Added test for Cassini Gigabit-Ethernet card (ce_). # - Added test for GEM Gigabit-Ethernet (ge_) # - Added test for eri Fast-Ethernet (eri_). # - Added "Ethernet Address" field. # - Removed "IPversion" field. # - Removed checking of a port more than once (i.e. qfe0 qfe0:1) # James Council 10.25.2002 (jamescouncil@yahoo.com) # - Fixed 1GB check on ge device. # James Council 04.02.2003 (jamescouncil@yahoo.com) # - Added dmfe check (suggested by John W. Rudick, & Erlend Tronsmoen) # Octave Orgeron 02.06.2004 (unixconsole@yahoo.com) # - Added bge check (bge_). # Octave Orgeron 05.18.2005 (unixconsole@yahoo.com) # - Corrected CE check to use kstat, which is required in Solaris 10. # Octave Orgeron 12.13:2005 (unixconsole@yahoo.com) # - Corrected CE and DMFE check. Added IPGE check. Special thanks to # Paul Bates, Christian Jose, and Bill Qualye for suggesting fixes and # for keeping me on my toes;) # Octave Orgeorn 02.07.2007 (unixconsole@yahoo.com) # - Added support for the Intel e1000g interfaces. # - Cleaned up script. Housecleaning. # - Tested against Fujitsu Quad GigE Nic's (FJGI) # Paul Bates 10.03.2008 (sun@paulbates.org) # - included NXGE interfaces, Thanks Jorg Weiss and Randy Latimer !! # - Just tidied up code a little more, removed some fluff # # NOTE: For further updates or comments please feel free to contact me via # email. James Council or Octave Orgeron or Paul Bates # ################################################################################ NDD=/usr/sbin/ndd KSTAT=/usr/bin/kstat IFC=/sbin/ifconfig DLADM=/usr/sbin/dladm typeset -R10 LINK typeset -R8 AUTOSPEED typeset -R8 STATUS typeset -R8 SPEED typeset -R8 MODE typeset -R18 ETHER # Function to test that the user is root. Check_ID() { ID=$(/usr/ucb/whoami) if [ $ID != "root" ]; then echo "$ID, you must be root to run this program." exit 1 fi } # Function to test Quad Fast-Ethernet, Fast-Ethernet, and # Gigabit-Ethernet (i.e. qfe_, hme_, ge_, fjgi_) Check_NIC() { ${NDD} -set /dev/${1} instance ${2} if [ $type = "ge" ];then autospeed=`${NDD} -get /dev/${1} adv_1000autoneg_cap` else autospeed=`${NDD} -get /dev/${1} adv_autoneg_cap` fi case $autospeed in 1) AUTOSPEED=ON ;; 0) AUTOSPEED=OFF ;; *) AUTOSPEED=ERROR ;; esac status=`${NDD} -get /dev/${1} link_status` case $status in 1) STATUS=UP ;; 0) STATUS=DOWN ;; *) STATUS=ERROR ;; esac speed=`${NDD} -get /dev/${1} link_speed` case $speed in 1000) SPEED=1GB ;; 1) SPEED=100MB ;; 0) SPEED=10MB ;; *) SPEED=ERROR ;; esac mode=`${NDD} -get /dev/${1} link_mode` case $mode in 1) MODE=FDX ;; 0) MODE=HDX ;; *) MODE=ERROR ;; esac } # Function to test the Davicom Fast Ethernet, DM9102A, devices # on the Netra X1 and SunFire V100 (i.e. dmfe_) Check_DMF_NIC() { autospeed=`${NDD} -get /dev/${1}${2} adv_autoneg_cap` case $autospeed in 1) AUTOSPEED=ON ;; 0) AUTOSPEED=OFF ;; *) AUTOSPEED=ERROR ;; esac status=`${NDD} -get /dev/${1}${2} link_status` case $status in 1) STATUS=UP ;; 0) STATUS=DOWN ;; *) STATUS=ERROR ;; esac speed=`${NDD} -get /dev/${1}${2} link_speed` case $speed in 100) SPEED=100MB ;; 10) SPEED=10MB ;; 0) SPEED=10MB ;; *) SPEED=ERROR ;; esac mode=`${NDD} -get /dev/${1}${2} link_mode` case $mode in 2) MODE=FDX ;; 1) MODE=HDX ;; 0) MODE=UNKOWN ;; *) MODE=ERROR ;; esac } # Function to test a Cassini Gigabit-Ethernet (i.e. ce_). Check_CE() { autospeed=`${KSTAT} -m ce -i $num -s cap_autoneg | grep cap_autoneg | awk '{print $2}'` case $autospeed in 1) AUTOSPEED=ON ;; 0) AUTOSPEED=OFF ;; *) AUTOSPEED=ERROR ;; esac status=`${KSTAT} -m ce -i $num -s link_up | grep link_up | awk '{print $2}'` case $status in 1) STATUS=UP ;; 0) STATUS=DOWN ;; *) STATUS=ERROR ;; esac speed=`${KSTAT} -m ce -i $num -s link_speed | grep link_speed | awk '{print $2}'` case $speed in 1000) SPEED=1GB ;; 100) SPEED=100MB ;; 10) SPEED=10MB ;; 0) SPEED=10MB ;; *) SPEED=ERROR ;; esac mode=`${KSTAT} -m ce -i $num -s link_duplex | grep link_duplex | awk '{print $2}'` case $mode in 2) MODE=FDX ;; 1) MODE=HDX ;; 0) MODE=UNKNOWN ;; *) MODE=ERROR ;; esac } # Function to test Sun BGE interface on Sun Fire V210 and V240. # The BGE is a Broadcom BCM5704 chipset. There are four interfaces # on the V210 and V240. (i.e. bge_) Check_BGE_NIC() { autospeed=`${NDD} -get /dev/${1}${2} adv_autoneg_cap` case $autospeed in 1) AUTOSPEED=ON ;; 0) AUTOSPEED=OFF ;; *) AUTOSPEED=ERROR ;; esac status=`${NDD} -get /dev/${1}${2} link_status` case $status in 1) STATUS=UP ;; 0) STATUS=DOWN ;; *) STATUS=ERROR ;; esac speed=`${NDD} -get /dev/${1}${2} link_speed` case $speed in 1000) SPEED=1GB ;; 100) SPEED=100MB ;; 10) SPEED=10MB ;; 0) SPEED=10MB ;; *) SPEED=ERROR ;; esac mode=`${NDD} -get /dev/${1}${2} link_duplex` case $mode in 2) MODE=FDX ;; 1) MODE=HDX ;; 0) MODE=UNKNOWN ;; *) MODE=ERROR ;; esac } # Function to test a Intel 82571-based ethernet controller port (i.e. ipge_). Check_IPGE() { autospeed=`${KSTAT} -m ipge -i $num -s cap_autoneg | grep cap_autoneg | awk '{print $2}'` case $autospeed in 1) AUTOSPEED=ON ;; 0) AUTOSPEED=OFF ;; *) AUTOSPEED=ERROR ;; esac status=`${KSTAT} -m ipge -i $num -s link_up | grep link_up | awk '{print $2}'` case $status in 1) STATUS=UP ;; 0) STATUS=DOWN ;; *) STATUS=ERROR ;; esac speed=`${KSTAT} -m ipge -i $num -s link_speed | grep link_speed | awk '{print $2}'` case $speed in 1000) SPEED=1GB ;; 100) SPEED=100MB ;; 10) SPEED=10MB ;; 0) SPEED=10MB ;; *) SPEED=ERROR ;; esac mode=`${KSTAT} -m ipge -i $num -s link_duplex | grep link_duplex | awk '{print $2}'` case $mode in 2) MODE=FDX ;; 1) MODE=HDX ;; 0) MODE=UNKNOWN ;; *) MODE=ERROR ;; esac } # Function to test a Intel 82571-based ethernet controller port (i.e. e1000g_). Check_E1KG() { autospeed=`${KSTAT} -m e1000g -i $num -s cap_autoneg | grep cap_autoneg | awk '{print $2}'` case $autospeed in 1) AUTOSPEED=ON ;; 0) AUTOSPEED=OFF ;; *) AUTOSPEED=ERROR ;; esac status=`${KSTAT} -m e1000g -i $num -s link_up | grep link_up | uniq |awk '{print $2}'` case $status in 1) STATUS=UP ;; 0) STATUS=DOWN ;; *) STATUS=ERROR ;; esac speed=`${KSTAT} -m e1000g -i $num -s link_speed | grep link_speed | awk '{print $2}'` case $speed in 1000) SPEED=1GB ;; 100) SPEED=100MB ;; 10) SPEED=10MB ;; 0) SPEED=10MB ;; *) SPEED=ERROR ;; esac mode=`${KSTAT} -m e1000g -i $num -s link_duplex | grep link_duplex | awk '{print $2}'` case $mode in 2) MODE=FDX ;; 1) MODE=HDX ;; 0) MODE=UNKNOWN ;; *) MODE=ERROR ;; esac } # Function to test Sun NXGE interface on Sun Fire Tx000. Check_NXGE_NIC() { autospeed=`${NDD} -get /dev/${1}${2} adv_autoneg_cap` case $autospeed in 1) AUTOSPEED=ON ;; 0) AUTOSPEED=OFF ;; *) AUTOSPEED=ERROR ;; esac status=`${DLADM} show-dev ${1}${2} 2> /dev/null | awk '{print $3;}'` case $status in up) STATUS=UP ;; down) STATUS=DOWN ;; unknown) STATUS=UNKNOWN ;; *) STATUS=ERROR ;; esac speed=`${DLADM} show-dev ${1}${2} 2> /dev/null | awk '{print $5;}'` case $speed in 1000) SPEED=1GB ;; 100) SPEED=100MB ;; 10) SPEED=10MB ;; 0) SPEED=10MB ;; *) SPEED=ERROR ;; esac mode=`${DLADM} show-dev ${1}${2} 2> /dev/null | awk '{print $NF;}'` case $mode in full) MODE=FDX ;; half) MODE=HDX ;; unknown) MODE=--- ;; *) MODE=ERROR ;; esac } ############################################# # Start ############################################# Check_ID echo "\n Link: Auto-Neg: Status: Speed: Mode: Ethernet Address:" echo "---------------------------------------------------------------------" # Create a uniq list of network ports configured on the system. # NOTE: This is done to avoid multiple references to a single network port # (i.e. qfe0 and qfe0:1). NICS=`${IFC} -a| egrep -v "lo|be|dman|lpfc|jnet"| awk -F: '/^[a-z,A-z]/ {print $1}'| sort -u` for LINK in $NICS do if [ `echo $LINK | grep e1000g` ] then type=e1000g num=$(echo $LINK | cut -f2 -d"g") else type=$(echo $LINK | sed 's/[0-9]//g') num=$(echo $LINK | sed 's/[a-z,A-Z]//g') fi # Here we reference the functions above to set the variables for each port which # will be outputed below. case ${type} in bge) Check_BGE_NIC $type $num ;; ce) Check_CE $type $num ;; dmfe) Check_DMF_NIC $type $num ;; ipge) Check_IPGE $type $num ;; e1000g) Check_E1KG $type $num ;; nxge) Check_NXGE_NIC $type $num ;; *) Check_NIC $type $num ;; esac # Set ethernet variable and output all findings for a port to the screen. ETHER=`$IFC $LINK| awk '/ether/ {print $2}'` echo "$LINK $AUTOSPEED $STATUS $SPEED $MODE $ETHER" done ############################################# # End ############################################# ############################################################################## ### This script is submitted to BigAdmin by a user of the BigAdmin community. ### Sun Microsystems, Inc. is not responsible for the ### contents or the code enclosed. ### ### ### Copyright Sun Microsystems, Inc. ALL RIGHTS RESERVED ### Use of this software is authorized pursuant to the ### terms of the license found at ### http://www.sun.com/bigadmin/common/berkeley_license.jsp ##############################################################################
Output of this command will look something like this:
Link: Auto-Neg: Status: Speed: Mode: Ethernet Address: --------------------------------------------------------------------- dmfe0 ON UP 100MB FDX 0:3:ba:xx:xx:xx