1 #!/usr/bin/ksh 2 # 3 # CDDL HEADER START 4 # 5 # The contents of this file are subject to the terms of the 6 # Common Development and Distribution License, Version 1.0 only 7 # (the "License"). You may not use this file except in compliance 8 # with the License. 9 # 10 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 11 # or http://www.opensolaris.org/os/licensing. 12 # See the License for the specific language governing permissions 13 # and limitations under the License. 14 # 15 # When distributing Covered Code, include this CDDL HEADER in each 16 # file and include the License file at usr/src/OPENSOLARIS.LICENSE. 17 # If applicable, add the following below this CDDL HEADER, with the 18 # fields enclosed by brackets "[]" replaced with your own identifying 19 # information: Portions Copyright [yyyy] [name of copyright owner] 20 # 21 # CDDL HEADER END 22 # 23 # 24 #ident "%Z%%M% %I% %E% SMI" 25 # 26 # Copyright (c) 2001 by Sun Microsystems, Inc. 27 # All rights reserved. 28 # 29 30 # 31 # Source the utilities. 32 # 33 DIRNAME=`dirname $0` 34 . ${DIRNAME}/utilities.san 35 36 # 37 # Process the input arguments. 38 # 39 VALIDOPTS=dr:p: 40 process_args $@ 41 42 # 43 # In case the tester wants to see script output, allow them 44 # to run in debug mode. 45 # 46 TESTNAME=`basename $0` 47 if [ ! -z "${DEBUG}" ] 48 then 49 OUTFILE=/tmp/${TESTNAME}.$$ 50 echo "Output from test: ${TESTNAME}" >${OUTFILE} 51 echo >>${OUTFILE} 52 echo "debug output can be found at ${OUTFILE}" 53 else 54 OUTFILE=/dev/null 55 fi 56 57 # 58 # Set NISSERV and NISDMAIN if NIS or NIS+ in YP compat mode. 59 # Returns 0 if these variables are set, nonzero otherwise. 60 # 61 get_nis_parms() 62 { 63 unset NISSERV 64 unset NISDMAIN 65 NSSHOSTS=`grep '^hosts:' /etc/nsswitch.conf` 66 for TMP in ${NSSHOSTS} 67 do 68 case "${TMP}" in 69 "nis") 70 ypwhich >/dev/null 2>&1 71 if [ ${?} -eq 0 ] 72 then 73 X=`ypwhich -m hosts` 74 NISSERV="" 75 for NSERV in `ypmatch ${X} hosts.byname | awk '{ print $1 }'` 76 do 77 if [ -z "${NISSERV}" ] 78 then 79 NISSERV=${NSERV} 80 else 81 NISSERV="${NISSERV} ${NSERV}" 82 fi 83 done 84 unset NSERV 85 NISDMAIN=`domainname` 86 fi 87 ;; 88 esac 89 unset TMP 90 done 91 } 92 93 # 94 # Set variables. 95 # 96 SRVNAME=`uname -n` 97 SRVADDR=`get_server_ip` 98 99 # 100 # Determine subnet, netmask, and broadcast address. 101 # 102 get_default_class ${SRVADDR} | read DEFNET DEFMASK 103 SUBNET=`get_netmask ${SRVADDR}` 104 if [ -z "${SUBNET}" ] 105 then 106 if [ "${DEFNET}" != "${SRVADDR}" ] 107 then 108 # likely subnetted/supernetted. 109 print - "\n\n###\tWarning\t###\n" 110 print - "Network ${SRVADDR} is netmasked, but no entry was found in the 'netmasks'\ntable; please update the 'netmasks' table in the appropriate\nnameservice before continuing (see /etc/nsswitch.conf).\n" >&2 111 return 1 112 else 113 # use the default. 114 SUBNET="${DEFMASK}" 115 fi 116 fi 117 118 BCAST=`get_bcast_addr ${SRVADDR} ${SUBNET}` 119 SUBNETADDR=`get_subnet_addr ${SRVADDR} ${SUBNET}` 120 121 # 122 # Make sure to clean up before we configure. 123 # 124 /usr/sbin/pntadm -r ${DHCPRSRC} -p ${DHCPPATH} -R ${SUBNETADDR} >>${OUTFILE} 2>&1 125 /usr/sbin/dhtadm -r ${DHCPRSRC} -p ${DHCPPATH} -D -m ${SUBNETADDR} >>${OUTFILE} 2>&1 126 127 # 128 # Configure. 129 # 130 /usr/sbin/dhcpconfig -N ${SUBNETADDR} >>${OUTFILE} 2>&1 131 RET=$? 132 if [ "${RET}" != "0" ] 133 then 134 echo "Error configuring ${SUBNETADDR} table = ${RET}" 135 echo "${TESTNAME} - Test failed!" 136 exit 1 137 fi 138 139 # 140 # Verify that the network table was created. 141 # 142 NETTABS=`/usr/sbin/pntadm -r ${DHCPRSRC} -p ${DHCPPATH} -L 2>>${OUTFILE}` 143 NETTAB=`echo ${NETTABS} | fgrep ${SUBNETADDR}` 144 if [ -z ${NETTAB} ] 145 then 146 echo "Network table for ${SUBNETADDR} not created." 147 echo "${TESTNAME} - Test failed!" 148 exit 1 149 fi 150 151 # 152 # Verify that the network macro was created. 153 # 154 DATAFILE=/tmp/${TESTNAME}.data.$$ 155 /usr/sbin/dhtadm -r ${DHCPRSRC} -p ${DHCPPATH} -P >${DATAFILE} 2>>${OUTFILE} 156 RET=$? 157 if [ "${RET}" != "0" ] 158 then 159 rm ${DATAFILE} 160 echo "Error displaying dhcptab = ${RET}" 161 echo "${TESTNAME} - Test failed!" 162 exit 1 163 fi 164 165 NETWORK_MACRO=`grep "^${SUBNETADDR}" ${DATAFILE}` 166 if [ -z "${NETWORK_MACRO}" ] 167 then 168 rm ${DATAFILE} 169 echo "Server macro does not exist in dhcptab" 170 echo "${TESTNAME} - Test failed!" 171 exit 1 172 fi 173 rm ${DATAFILE} 174 175 # 176 # Grab the server macro definition 177 # 178 MACRO_DEFINITION=$(get_value ${NETWORK_MACRO}) 179 180 # 181 # Verify that the Subnet symbol is defined as part of the macro definition 182 # 183 SRCH=":Subnet=${SUBNET}:" 184 macro_find_and_replace 185 186 # 187 # Verify that the RDiscvyF symbol is defined as part of the macro definition 188 # 189 SRCH=":RDiscvyF=1:" 190 macro_find_and_replace 191 192 # 193 # Verify that the Broadcst symbol is defined as part of the macro definition 194 # 195 SRCH=":Broadcst=${BCAST}:" 196 macro_find_and_replace 197 198 # 199 # Get the NIS info 200 # 201 get_nis_parms 202 203 # 204 # Verify that the DNSdmain symbol is defined as part of the macro definition 205 # 206 if [ ! -z "${NISDMAIN}" ] 207 then 208 SRCH=":NISdmain=\"${NISDMAIN}\":" 209 macro_find_and_replace 210 fi 211 212 if [ ! -z "${NISSERV}" ] 213 then 214 SRCH=":NISservs=${NISSERV}:" 215 macro_find_and_replace 216 fi 217 218 # 219 # Verify that all symbols have been accounted for 220 # 221 if [ "${MACRO_DEFINITION}" != ":" ] 222 then 223 echo "Network macro definition has invalid extra symbols: ${MACRO_DEFINITION}" 224 echo "${TESTNAME} - Test failed!" 225 exit 1 226 fi 227 228 echo "${TESTNAME} - Test passed." 229 exit 0