#!/bin/ksh 
#  
# hme0 interface 체크. 
#  
#  

umask 022 

stat_() 
{ 
  #link_status  
  # 0 은 link down을 의미 
  # 1 은 link up을 의미 
  hme_stat=$( 
    ndd -get /dev/hme link_status 
    ) 
  case ${hme_stat} in 
    '0') 
        print "작동 하지 않음" ; exit 0 ;; 
    '1') 
        print -n "작동중t" ; speed_ ;; 
    *) 
        print "hme 디바이스를 찾을수 없음 !" ;; 
  esac 
} 

# status한 hme 디바이스 속도 체크  
speed_() 
{ 
  #link_speed  
  # 0 은 10 Mbps 로 구동중  
  # 1 은 100 Mbps 로 구동중 
  hme_speed=$( 
      ndd -get /dev/hme link_speed 
    ) 
  case ${hme_speed} in 
    '0') 
        print -n "10 Mbpst" ;; 
    '1') 
        print -n "100 Mbpst" ;; 
  esac 
  mode_ 
} 

# Stats the inteface for mode. 

mode_() 
{ 
  #link_mode (read only) 
  # 0 은 Half-Duplex mode 
  # 1 은 Full-Duplex mode 
  hme_mode=$( 
    ndd -get /dev/hme link_mode 
    ) 
  case ${hme_mode} in 
    '0') 
        print -n "Half-Duplext" ;; 
    '1') 
        print -n "Full-Duplext" ;; 
  esac 
  auto_neg 
} 

# This stats the interface and finds whether the nic is  
# set to autonegotiate options. 
auto_neg() 
{ 
  #adv_autoneg_cap  
  # 0 for off 
  # 1 for on 
  hme_neg_mode=$( 
    ndd -get /dev/hme adv_autoneg_cap 
    ) 
  case ${hme_neg_mode} in 
    '0') 
        print "off" ;; 
    '1') 
        print "on" ;; 
  esac 
} 

set_100_full_duplex() 
{ 

  # 이 부분은 ndd command를 사용하여 speed와 모드를 100Mbps와 
  # 10Mbps 로 구분하여 놓았다 . 
    

  # 100Mbps full-duplex 로 사용할 경우 : 
  ndd -set /dev/hme instance 0 
  ndd -set /dev/hme adv_100T4_cap 0 
  ndd -set /dev/hme adv_100fdx_cap 1 
  ndd -set /dev/hme adv_100hdx_cap 0 
  ndd -set /dev/hme adv_10fdx_cap 0 
  ndd -set /dev/hme adv_10hdx_cap 0 
  ndd -set /dev/hme adv_autoneg_cap 0 
} 

set_100_half_duplex() 
{ 
  # 10Mbps half-duplex 로 사용할 경우: 
  ndd -set /dev/hme instance 0 
  ndd -set /dev/hme adv_100T4_cap 0 
  ndd -set /dev/hme adv_100fdx_cap 0 
  ndd -set /dev/hme adv_100hdx_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 
} 

set_10_full_duplex() 
{ 
  # 10Mbps full-duplex 로 사용할 경우 : 
  ndd -set /dev/hme instance 0 
  ndd -set /dev/hme adv_100T4_cap 0 
  ndd -set /dev/hme adv_100fdx_cap 0 
  ndd -set /dev/hme adv_100hdx_cap 0 
  ndd -set /dev/hme adv_10fdx_cap 1 
  ndd -set /dev/hme adv_10hdx_cap 0 
  ndd -set /dev/hme adv_autoneg_cap 0 
} 

set_10_half_duplex() 
{ 
  # 10Mbps half-duplex로 사용할 경우 : 
  ndd -set /dev/hme instance 0 
  ndd -set /dev/hme adv_100T4_cap 0 
  ndd -set /dev/hme adv_100fdx_cap 0 
  ndd -set /dev/hme adv_100hdx_cap 0 
  ndd -set /dev/hme adv_10fdx_cap 0 
  ndd -set /dev/hme adv_10hdx_cap 1 
  ndd -set /dev/hme adv_autoneg_cap 0 
} 

banner_() 
{ 
  print "nhme_stat howtosolaris.com " 
} 

hme_stat() 
{ 
  print "n`uname -n` NIC properties." 
  print "체크 /dev/hme..." 
  print "StatustSpeedttModettauto-negotiate" 
  echo "------t-----tt----tt--------------" 
  stat_ 2>> /dev/null 
  banner_ 
} 

hme_reconfigure() 
{ 
  print "1) 100 Full duplex" 
  print "2) 100 Half duplex" 
  print "3) 10  Full duplex" 
  print "4) 10  Half duplex" 
  print "*) Abort" 
  print -n "? " 
  read answer 
  case ${answer} in 
    1) 
        set_100_full_duplex ;; 
    2) 
        set_100_half_duplex ;; 
    3) 
        set_10_full_duplex ;; 
    4) 
        set_10_half_duplex ;; 
    *) 
        print "aborted" ;; 
  esac 
  banner_ 
  exit 0 
} 

got_root() 
{ 
  c_uid=$( 
    id | cut -f2 -d= | cut -f1 -d'(' 
    ) 
  if [ "${c_uid}" != "0" ] 
    then 
      print "root로 로그인 하세요." 
      exit 0 
  fi 
} 

  case ${1} in 
    'config') 
        got_root ; hme_reconfigure ;; 
    'stat') 
        got_root ; hme_stat ;; 
    *) 
        print "Usage ${0} [ stat | config ]" ; exit 0 ;; 
  esac