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

  1. #!/bin/ksh
  2. #    
  3. #    
  4. #   Copyright (C) 1997, The Santa Cruz Operation, Inc.
  5. #   All Rights Reserved.
  6. #   The information in this file is provided for the exclusive use of
  7. #   the licensees of The Santa Cruz Operation, Inc.  Such users have the
  8. #   right to use, modify, and incorporate this code into other products  
  9. #   for purposes authorized by the license agreement provided they include
  10. #   this notice and the associated copyright notice with any such product.
  11. #   The information in this file is provided "AS IS" without warranty.
  12. #
  13. #ident "@(#)ipx    1.7"
  14. #
  15.  
  16. : ${OK=0} ${FAIL=1} ${RELINK=2} ${CANCEL=3}
  17. PATH=/bin:/usr/bin:/etc:/etc/conf/bin:/usr/sbin:"$PATH"
  18.  
  19. LOWER_PRD=$1
  20. LOWER_IF=$2
  21. UPPER_PRD=$3
  22. UPPER_IF=$4
  23. CONFIGURE=$5
  24.  
  25. IPX_NEWCFG=/usr/lib/ipxrt/tmp/config
  26. IPX_TMPDIR=/usr/lib/ipxrt/tmp
  27. NWCONFIG=/etc/netware/nwconfig
  28. IPX_NETCONFIGDIR=/usr/lib/netcfg/bin
  29. UPGRADE_CONFIG=${IPX_TMPDIR}/upgrade_config
  30. NCFGPROMPTER=/usr/sbin/ncfgprompter
  31. NWDISCOVER=/usr/sbin/nwdiscover
  32. NETCFG=/usr/sbin/netcfg
  33. STARTNPS=/usr/sbin/startnps
  34. TCP=tcp
  35. IPXCHK=$IPX_NETCONFIGDIR/ipx.chk
  36. NWCM=/usr/sbin/nwcm
  37.  
  38. if [ ! -d $IPX_TMPDIR ]
  39. then
  40.     mkdir -p $IPX_TMPDIR
  41.     chmod 755 $IPX_TMPDIR
  42. fi
  43.  
  44. . $IPX_NETCONFIGDIR/ipx.sh
  45.  
  46. # Shell Variables from lli Driver
  47. #------------------------------------------------------------------------
  48. # NODE - Required to create chain
  49. # UNITS - Optional, only usable if the lli driver supports the MACUNITSEL
  50. #      ioctl.
  51. #------------------------------------------------------------------------
  52.  
  53. tmp=$IPX_TMPDIR/ipx$$
  54.  
  55. ##############################################################################
  56. #
  57. # Generate config data based on saved ISL info.
  58. #
  59.  
  60. get_isl_config() {
  61.     . /isl/ifile
  62.  
  63.     if [ "${LOWER_PRD}" = "${TCP}" ]
  64.     then
  65.         adapter=/dev/nwip
  66.     else
  67.         adapter=$_adapter
  68.     fi
  69.  
  70.     #
  71.     # check for request to autodetect and if so do it
  72.     # If AUTO_DISCOVERY is set then try and find any active frame
  73.     #   type and network number.
  74.     # If a frame type is set but no network number, try 
  75.     #   and find an activer network on that frame type
  76.     # If its an NWIP configuration then try and run nwdiscover
  77.     #   on that irrespective of frame type.
  78.  
  79.     if [ $IPX_FRAME_TYPE = "AUTO_DISCOVER" -o $IPX_NETWORK_NUMBER -eq 0 ]
  80.     then
  81.         if [ $IPX_FRAME_TYPE = "AUTO_DISCOVER" -o $adapter = "/dev/nwip" ]
  82.         then
  83.             set `$NWDISCOVER -d $adapter 2>/dev/null` > /dev/null 2>&1
  84.         else 
  85.             set `$NWDISCOVER -d $adapter -f$IPX_FRAME_TYPE 2>/dev/null` > /dev/null 2>&1
  86.         fi
  87.         
  88.         if [ $? -eq 0 -a "$3" != "" ]
  89.         then
  90.                     IPX_FRAME_TYPE=$3
  91.                     IPX_NETWORK_NUMBER=0x$9
  92.         else
  93.             # autodiscovery failed
  94.             # set sensible values
  95.             IPX_FRAME_TYPE=ETHERNET_802.2
  96.             IPX_NETWORK_NUMBER=0xb0b0b0b0
  97.         fi
  98.     fi
  99.  
  100.     /* ensure that the network number is acceptible 
  101.      * to nwcm 
  102.      */
  103.  
  104.     IPX_NETWORK_NUMBER=`echo $IPX_NETWORK_NUMBER | sed -e "s/0[xX]//" -e "s/^/0x/" `
  105.     
  106.     echo lan_1_adapter=$adapter > $IPX_NEWCFG
  107.     echo lan_1_network=$IPX_NETWORK_NUMBER >> $IPX_NEWCFG
  108.     echo lan_1_frame_type=$IPX_FRAME_TYPE >> $IPX_NEWCFG
  109.     echo ipx_start_at_boot=on >> $IPX_NEWCFG
  110.  
  111. }
  112.  
  113. ##############################################################################
  114. #
  115. # main() 
  116. #
  117.  
  118. $IPXCHK
  119.  
  120. trap "cleanup $FAIL" 1 2 3 15
  121.  
  122. # Check to see if chain is already configured, if so do nothing.
  123. #
  124. $NETCFG -s | grep "ipx#$LOWER_PRD" > /dev/null 2>&1 && cleanup $OK
  125.  
  126. save_config
  127.  
  128. # netcfg sets $CONFIGURE to "Y" if this is the first ipx to be
  129. # installed.
  130. if [ "${CONFIGURE}" = "Y" ] ; then
  131.  
  132.     # Set up environment variables required for the prompter backend.
  133.     _ncfg_state="INITIAL_INIT"
  134.     $NWCM -s ipx_start_at_boot=on >/dev/null 2>&1
  135.  
  136. else
  137.     if [ "${LOWER_PRD}" = "-" ] ; then
  138.         # A product above us (ie. NUC) has just been installed.
  139.         # We have nothing to do in this case, so just return.
  140.         cleanup $OK
  141.     fi
  142.  
  143.     # Check if the maximum number of IPX chains will be exceeded.
  144.     #
  145.     set -- `$NETCFG -s | fgrep '^ipx' | wc`
  146.     if [ "$2" -gt 8 ] ; then
  147.         echo "Cannot add additional lans: IPX/SPX allows a maximum of 8 lans"
  148.         cleanup $FAIL
  149.     fi
  150.  
  151.     # Check if this is nwip being installed. When installed
  152.     # it runs over all NICS configured for tcp so only allow
  153.     # one install over tcp
  154.     #
  155.     if [ "${LOWER_PRD}" = "${TCP}" ] ; then
  156.         set -- `$NETCFG -s | fgrep '^ipx#${TCP}' | wc`
  157.         if [ "$2" -ne 0 ] ; then
  158.             cleanup $OK
  159.         fi
  160.     fi
  161.  
  162.     # configuring a new LAN.
  163.     _ncfg_state="INIT"
  164. fi
  165.  
  166. _adapter=/dev/$LOWER_PRD
  167. configfile=${tmp}ipx.out
  168.  
  169. #
  170. # Get variables from ifile when we're in the post-reboot
  171. # stage of an installation.
  172. #
  173. # Convert it to a form which can be used by ipx.uc; otherwise, invoke the
  174. # netcfg prompter to interactively query the user.  Place the output
  175. # of this operation in $configfile.
  176. #
  177. if [ -f /isl/ifile -a -f /etc/rc2.d/S02POSTINST ]
  178. then
  179.     get_isl_config
  180. else
  181.     get_adapter_info
  182.  
  183.     $NCFGPROMPTER ${IPX_NETCONFIGDIR}/ipxBE \
  184.         $_ncfg_state     \
  185.         $_adapter    \
  186.         "$_media_types"    \
  187.         $_interface    \
  188.         > $configfile
  189.  
  190.     case $? in
  191.     0) 
  192.         ;;
  193.     1)
  194.         echo "Error in ${IPX_NETCONFIGDIR}/ipxBE"
  195.         cleanup $FAIL
  196.         ;;
  197.     3) 
  198.         if [ "${CONFIGURE}" = "Y" ] ; then
  199.             $NWCM -s ipx_start_at_boot=off >/dev/null 2>&1
  200.         fi
  201.         cleanup $CANCEL 
  202.         ;;
  203.     *)     
  204.         if [ "${CONFIGURE}" = "Y" ] ; then
  205.             $NWCM -s ipx_start_at_boot=off >/dev/null 2>&1
  206.         fi
  207.         cleanup $FAIL 
  208.         ;;
  209.     esac
  210. fi
  211.  
  212. #
  213. # Update /etc/netware/nwconfig with the attributes found in the $configfile
  214. #
  215.  
  216. $IPX_NETCONFIGDIR/ipx.uc $configfile $_ncfg_state $_adapter $_interface
  217. UC_RET=$?
  218.  
  219. #
  220. # If this is the first install  try and start the stack
  221. #
  222.  
  223. if [ "${_ncfg_state}" = "INITIAL_INIT"  -a ! -f /etc/rc2.d/S02POSTINST ]
  224. then
  225.     $STARTNPS >/dev/null 2>&1
  226.     if [ $? -eq 0 ]
  227.     then
  228.         cleanup $OK
  229.     fi
  230. fi
  231.  
  232. cleanup $UC_RET
  233.  
  234.