home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / nwnet / root / usr / lib / netcfg / bin / ipx.fn / ipx
Text File  |  1998-08-19  |  4KB  |  218 lines

  1. #!/bin/tcl
  2. #    
  3. #   Copyright (C) 1997, The Santa Cruz Operation, Inc.
  4. #   All Rights Reserved.
  5. #   The information in this file is provided for the exclusive use of
  6. #   the licensees of The Santa Cruz Operation, Inc.  Such users have the
  7. #   right to use, modify, and incorporate this code into other products  
  8. #   for purposes authorized by the license agreement provided they include
  9. #   this notice and the associated copyright notice with any such product.
  10. #   The information in this file is provided "AS IS" without warranty.
  11. #
  12. #ident "@(#)ipx.fn    1.3"
  13. #
  14.     
  15. # Generic functions related to ipx/spx netconfig
  16. #
  17.  
  18. set NCFG_DIR        /usr/lib/netcfg
  19. set NWCM        /usr/sbin/nwcm.be
  20.  
  21. set IPX_TMPDIR    /usr/lib/ipxrt/tmp
  22. set IPX_NEWCFG    $IPX_TMPDIR/config
  23.  
  24. loadlibindex /usr/lib/sysadm.tlib
  25.  
  26. # The minimum and maximum Lan numbers.
  27. #
  28. set MINLAN 1
  29. set MAXLAN 8
  30.  
  31. #
  32. # IsValidNwcmParam use nwcm to check that the parameter param value val
  33. # is valid
  34. #
  35. # return values
  36. # 0: valid
  37. # 1: invalid
  38. #
  39.  
  40. proc IsValidNwcmParam {param val} {
  41.     global NWCM
  42.  
  43.     set arg "-q -t $param=$val"
  44.  
  45.     if [catch {eval exec $NWCM $arg} ret] {
  46.         return 0
  47.     } else {
  48.         return 1
  49.     }
  50. }
  51.  
  52. #
  53. # SetNwcmParam uses nwcm to set the parameter param to the value val
  54. # Note that the special val case of "_default" is checked for which 
  55. # used to reset a parameter to its default value.
  56. #
  57. # return values
  58. # 0: success
  59. # 1: failure
  60. #
  61.  
  62. proc SetNwcmParam {param val} {
  63.     global NWCM
  64.  
  65.     if { [ cequal $val "_default" ] } {
  66.         set arg "-r $param"
  67.     } else {
  68.         set arg "-s $param=$val"
  69.     }
  70.  
  71.     if [catch {eval exec $NWCM $arg} ret] {
  72.         puts "nwcm error:$NWCM $arg"
  73.         puts $ret
  74.         return 1
  75.     } else {
  76.         return 0
  77.     }
  78. }
  79.  
  80. #
  81. # GetNwcmParam uses nwcm to extract the parameter param
  82. # value from the netware config database.
  83. # The return string is the result of the call stripped of enclosing "s
  84. #
  85. # eg GetNwcmParam net_3_adapter might retiurn /dev/nwip
  86. #
  87. #
  88. # On error the routine returns the string "_NWCMERR"
  89. #
  90.  
  91. proc GetNwcmParam {param} {
  92.     global NWCM
  93.     if [catch {exec $NWCM -v $param} val] {
  94.         puts "nwcm error:$NWCM -v $param"
  95.         puts $val
  96.         return "_NWCMERR"
  97.     } else {
  98.         ctoken val =
  99.         set tok [join [ctoken val =]]
  100.         return $tok
  101.     }
  102. }
  103.  
  104. # GetFreeLanNumber {}
  105. #
  106. # scans the nwconfig file via nwcm to find the first interface
  107. # which does not have an associated adapter
  108. # return: free lan number
  109. #
  110.  
  111. proc GetFreeLanNumber {} {
  112.     global NWCM MAXLAN
  113.     set try 1
  114.     while { $try <= $MAXLAN } {
  115.         set nwcm_arg lan_${try}_adapter
  116.         set adap [GetNwcmParam $nwcm_arg]
  117.         if { [cequal $adap "_NWCMERR" ] } {
  118.             exit 1
  119.         } else {
  120.             if { [ cequal $adap "" ] } {
  121.                 return $try
  122.             }
  123.             incr try +1
  124.         }
  125.     }
  126. #
  127. # you should never get here as the init script should 
  128. # have caught anyone trying to add more than MAXLAN interfaces
  129. #
  130.     return 0
  131. }
  132.  
  133. # FindIpxLanNumber{}
  134. #
  135. # scans the nwconfig file via nwcm to find the  lan number
  136. # for which the part_param is set to val
  137. #
  138. # eg
  139. #
  140. # lan_1_adapter=/dev/3C59X_0
  141. # lan_2_adapter=/dev/nwip
  142. #
  143. # FindIpxLanNumber  adapter /dev/nwip will return 2
  144. # FindIpxLanNumber  adapter /dev/NE2000_1 will return 0
  145. #
  146. proc FindIpxLanNumber {part_param val} {
  147.     global NWCM MAXLAN
  148.     set try 1
  149.     while { $try <= $MAXLAN } {
  150.         set nwcm_arg lan_${try}_${part_param}
  151.         set rval [GetNwcmParam $nwcm_arg]
  152.         if { [cequal $rval "_NWCMERR" ] } {
  153.             return 0
  154.         }
  155.         if { [ cequal $rval $val ] } {
  156.             return $try
  157.         }
  158.         incr try +1
  159.     }
  160.     return 0
  161. }
  162.  
  163. # AutoDiscover{adapter}
  164. #
  165. # Attempts to use nwdiscover to set the frame type 
  166. # and network number for the nominated adapter
  167. #
  168.  
  169. proc AutoDiscover { adapter } {
  170.     global FRAME_TYPE LAN_NETWORK
  171.     set IPX_AD /tmp/ipx.ad
  172.  
  173.     # nwdiscover is a bit difficult, it can 
  174.     # report an error even though it detects something
  175.     # useful 
  176.     # - so send output to a file and scan the 
  177.     # file for useful output
  178.  
  179.     catch {exec /usr/sbin/nwdiscover -d $adapter > $IPX_AD } nwd 
  180.  
  181.     if { [set ad_fd [open $IPX_AD r]] == -1 } {
  182.         return
  183.     }
  184.  
  185.     while { [ gets $ad_fd line ] != -1 } {
  186.         set found [ lindex $line 5 ] 
  187.         set frame_type [ lindex $line 2 ] 
  188.         set address 0x[ lindex $line 8 ]
  189.         if { [ cequal  $found "found" ] } {
  190.             set FRAME_TYPE $frame_type
  191.             set LAN_NETWORK    $address
  192.             break
  193.         }
  194.     }
  195.  
  196.     close $ad_fd
  197.     exec rm $IPX_AD
  198. }
  199.  
  200.  
  201. # IpxProcLan returns the number of configured Ipx Lans
  202. #
  203. proc IpxNumLan {} {
  204.     global NWCM MAXLAN
  205.     set found 0
  206.     for { set try 1 } { $try <= $MAXLAN } { incr try +1 } {
  207.         set nwcm_arg lan_${try}_adapter
  208.         set rval [GetNwcmParam $nwcm_arg]
  209.         if { ! [cequal $rval "" ] } {
  210.             incr found
  211.         }
  212.     }
  213.     return $found
  214. }
  215.