home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / base / root.15 / usr / sbin / netinfo / netinfo~
Text File  |  1998-08-19  |  5KB  |  272 lines

  1. #!/sbin/sh
  2. #ident    "@(#)netinfo    1.2"
  3. #ident    "$Header: $"
  4.  
  5. if [ -z "$LC_ALL" -a -z "$LC_MESSAGES" ]
  6. then
  7.     if [ -z "$LANG" ]
  8.     then
  9.         LNG=`defadm locale LANG 2>/dev/null`
  10.         if [ "$?" != 0 ]
  11.         then LANG=C
  12.         else eval $LNG
  13.         fi
  14.     fi
  15.     # if catalogs aren't under /usr/lib/locale, check /etc/inst/locale
  16.     if [ -d /usr/lib/locale/$LANG ] 
  17.     then LC_MESSAGES=$LANG
  18.     else LC_MESSAGES=/etc/inst/locale/$LANG
  19.     fi
  20.     export LANG LC_MESSAGES
  21. fi
  22. LABEL="UX:$0"
  23. CAT=uxrc
  24.  
  25. dARG=`gettxt "$CAT:82" "device"`
  26. pARG=`gettxt "$CAT:81" "protocol"`
  27. USAGE="
  28.  
  29. netinfo [-l dev] [-l proto] [-d <$dARG>] [-p <$pARG>]
  30. netinfo [-u -l dev] [-u -l proto]
  31. netinfo [-a -d <$dARG>] [-a -d <$dARG> -p <$pARG>]
  32. netinfo [-r -d <$dARG>] [-r -p <$pARG>] [-r -d <$dARG> -p <$pARG>]
  33. "
  34. usage()
  35. {
  36. pfmt -l $LABEL -s action -g $CAT:4 "Usage: %s\n" "$USAGE"
  37. exit 1
  38. }
  39. NETDRV=/etc/confnet.d/netdrivers
  40. unmap_flg=0
  41. add_flg=0
  42. rm_flg=0
  43.  
  44. uid=`expr "\`id\`" : '[^=]*=\([^(]*\)(.*'`
  45. if [ "$uid" -ne 0 ]
  46. then
  47.     pfmt -l $LABEL -s error -g $CAT:84 "must be super-user\n"
  48.     exit 1
  49. fi
  50.  
  51. do_list() {
  52. if [ "$unmap_flg" -eq 0 ]
  53. then
  54.     if [ -s $NETDRV ]
  55.     then
  56.         egrep -v '^#' $NETDRV > /tmp/netlist.$$
  57.         if [ "$disp" = dev ]
  58.         then    
  59.             sed -e 's/[     ][     ]*/ /g
  60.                 s/$/ /g' /tmp/netlist.$$|cut -d" " -f1|
  61.                 sed -e '/^[     ]*$/d'
  62.         else
  63.             sed -e 's/[     ][     ]*/ /g
  64.                 s/$/ /g' /tmp/netlist.$$|cut -d" " -f2|
  65.                 sort -u|sed -e '/^[     ]*$/d'
  66.         fi
  67.         rm -f /tmp/netlist.$$
  68.     else    exit 0
  69.     fi
  70. else
  71.     if [ "$disp" = dev ]
  72.     then
  73.         if [ -s $NETDRV ]
  74.         then    
  75.             egrep -v '^#' $NETDRV > /tmp/netlist.$$
  76.             while read a b
  77.             do
  78.                 if [ "$b" = "" ]
  79.                 then    echo $a
  80.                 fi
  81.             done < /tmp/netlist.$$
  82.             rm -f /tmp/netlist.$$
  83.         else    exit 0
  84.         fi
  85.     else
  86.         cd /etc/confnet.d
  87.         for i in `ls`
  88.         do
  89.             if [ -d $i ]
  90.             then    
  91.                 egrep -v "^#" $NETDRV|egrep "$i"|sed -e 's/[     ][     ]*/ /g
  92.                                s/$/ /g'|
  93.                     egrep " $i " > /dev/null
  94.                 if [ $? != 0 ]
  95.                 then echo $i
  96.                 fi
  97.             fi
  98.         done
  99.     fi
  100. fi
  101. }
  102.  
  103. do_list_dp() {
  104. # change the format <device><whitespace><protocol> of netdrivers
  105. # to <device><single_space><protocol>
  106. cat $NETDRV | sed -e 's/[     ][     ]*/ /g
  107.             s/$/ /g'>/tmp/netdv1.$$
  108. if [ "$dvc" != "" ]
  109. then
  110.     egrep "^$dvc " /tmp/netdv1.$$ > /tmp/netdv2.$$
  111.     if [ -s /tmp/netdv2.$$ ]
  112.     then    
  113.         cut -d" " -f2 /tmp/netdv2.$$ | sed -e '/^[     ]*$/d' 
  114.     fi
  115.     rm -f /tmp/netdv2.$$
  116. else
  117.     egrep " $prot " /tmp/netdv1.$$ > /tmp/netdv2.$$
  118.     if [ -s /tmp/netdv2.$$ ]
  119.     then    
  120.         cut -d" " -f1 /tmp/netdv2.$$ | sed -e '/^[     ]*$/d' 
  121.     fi
  122.     rm -f /tmp/netdv2.$$
  123. fi
  124. rm -f /tmp/netdv1.$$
  125. }
  126.  
  127. do_add() {
  128. if [ "$prot" = "" ]
  129. then
  130.     egrep "^$dvc" $NETDRV > /dev/null
  131.     if [ $? != 0 ]
  132.     then
  133.         echo "$dvc" >> $NETDRV
  134.     fi
  135. else
  136.     egrep "^$dvc" $NETDRV > /tmp/dvc.$$
  137.  
  138.     #dvc_name not in NETDRV
  139.     if [ ! -s /tmp/dvc.$$ ]
  140.     then    echo "$dvc    $prot" >> $NETDRV
  141.     else    
  142.         #dvc_name in NETDRV, no matching protocol
  143.         while read dvc_name prot_name
  144.         do
  145.             if [ "$prot_name" = "" ]
  146.             then    
  147.                 ed - $NETDRV <<!
  148. /^$dvc/c
  149. ${dvc}    ${prot} 
  150. .
  151. w
  152. !
  153.             break
  154.             fi
  155.         done < /tmp/dvc.$$
  156.     fi
  157.     rm -f /tmp/dvc.$$
  158.  
  159.     #dvc_name in NETDRV, but matched to a different protocol
  160.     cat $NETDRV|sed -e 's/[     ][     ]*/ /g'|
  161.         egrep "^$dvc $prot" > /dev/null
  162.     if [ $? != 0 ]
  163.     then    echo "$dvc    $prot" >> $NETDRV
  164.     fi
  165. fi
  166. }
  167.  
  168. do_rm() {
  169. # change the format <device><whitespace><protocol> of netdrivers
  170. # to <device><single_space><protocol>
  171. sed -e 's/[     ][     ]*/ /g
  172.         s/$/ /g' $NETDRV >/tmp/netdv1.$$
  173. if [ "$dvc" != "" -a "$prot" = "" ]
  174. then
  175.     egrep -v "^$dvc " /tmp/netdv1.$$ > /tmp/netdv2.$$
  176.     cp /tmp/netdv2.$$ $NETDRV
  177.     rm -f /tmp/netdv2.$$
  178. else
  179.     if [ "$dvc" = "" -a "$prot" != "" ]
  180.     then
  181.         while read a b
  182.         do
  183.             if [ "$b" = "$prot" ]
  184.             then    echo $a >> /tmp/netdv2.$$
  185.             else    echo $a $b >> /tmp/netdv2.$$
  186.             fi
  187.         done < /tmp/netdv1.$$
  188.         cp /tmp/netdv2.$$ $NETDRV
  189.         rm -f /tmp/netdv2.$$
  190.     else
  191.         egrep -v "^$dvc $prot " /tmp/netdv1.$$ > /tmp/netdv2.$$
  192.         cp /tmp/netdv2.$$ $NETDRV
  193.         rm -f /tmp/netdv2.$$
  194.     fi
  195. fi
  196. rm -f /tmp/netdv1.$$
  197. }
  198.     
  199. while getopts l:d:p:uar i
  200. do
  201.     case $i in
  202.     l)    if [ $add_flg = 1 -o $rm_flg = 1 ]
  203.         then
  204.             usage
  205.         fi
  206.         disp=$OPTARG
  207.         if [ "$disp" != dev -a "$disp" != proto ]
  208.         then
  209.             usage
  210.         fi;;
  211.  
  212.     u)    if [ $add_flg = 1 -o $rm_flg = 1 ]
  213.         then
  214.             usage
  215.         fi
  216.         unmap_flg=1;;
  217.     d)    dvc=$OPTARG;;
  218.     p)    prot=$OPTARG;;
  219.     a)    if [ $rm_flg = 1 -o "$disp" != "" -o $unmap_flg = 1 ]
  220.         then
  221.             usage
  222.         fi
  223.         add_flg=1;;
  224.     r)    if [ $add_flg = 1 -o "$disp" != "" -o $unmap_flg = 1 ]
  225.         then
  226.             usage
  227.         fi
  228.         rm_flg=1;;
  229.     \?)     pfmt -l $LABEL -s action -g $CAT:4 "Usage: %s\n" "$USAGE"
  230.         exit 0
  231.         ;;
  232.     esac
  233. done
  234.  
  235. if [ "$unmap_flg" -eq 1 -a "$disp" = "" ]
  236. then
  237.     usage
  238. fi
  239.  
  240. if [ "$disp" != "" ]
  241. then    do_list
  242.     exit 0
  243. fi
  244.  
  245. if [ $add_flg -eq 0 -a $rm_flg -eq 0 ]
  246. then
  247.     if [ "$dvc" != "" -o "$prot" != "" ]
  248.     then    do_list_dp
  249.         exit 0
  250.     fi
  251. fi
  252.  
  253. if [ $add_flg -eq 1 ]
  254. then
  255.     if [ "$dvc" = "" ]
  256.     then
  257.         usage
  258.     fi
  259.     do_add
  260.     exit 0
  261. fi
  262.  
  263. if [ $rm_flg -eq 1 ]
  264. then
  265.     if [ "$dvc" = "" -a "$prot" = "" ]
  266.     then
  267.         usage
  268.     fi
  269.     do_rm
  270.     exit 0
  271. fi
  272.