#!/bin/sh
## /etc/dhcpd.conf
## /etc/dhcp/dhcpd.conf    ,  /var/lib/dhcpd/dhcpd.leases, /var/run/dhcpd.pid,
##       /var/lib/dhcpd/dhcpd.leases~.
##/etc/xinetd.d/tftp
##/etc/selinux/config
##/etc/sysconfig/network
##/etc/sysconfig/network-scripts/ifcfg-eth0
##/etc/inittab   #起動　3　　　5

##DNS----------------------------
## /etc/nsswitch.conf  
#/etc/resolv.conf
#search 192-168-1 192-168-11 192-168-10
#nameserver 192.168.1.254
#nameserver 192.168.11.254
#nameserver 192.168.10.254
## /etc/named.conf   /var/named 

# bash dhcp_tftp_setup.sh r

. ./profile

HOST_IP_DAT_FILE="./host-ip.dat"

#dns_server="net_server"
##dns_server="raspberry"
dns_server="${DNS_SERVER:-raspberrypi}"

named_conf="/etc/named.conf"
var_named_dir="/var/named"

named_conf_options="${var_named_dir}/named.conf.options"
named_conf_local="${var_named_dir}/named.conf.local"

#var_named_dir="/etc/bind"
named_conf_default_zones="${var_named_dir}/named.conf.default-zones"



#####################################################
###
#####################################################
function calculate_ip {
	local net=$(echo $1 | cut -d'.' -f1-2)
	local sub_net=$(echo $1 | cut -d'.' -f3)
	if ((  $2 <= 256  ));then
		echo "$1.$2"
		return
	fi
	local dividend=$(($2 / 256))
	local remainder=$(($2 % 256))
	local new_ip="${net}.$((${sub_net}+${dividend})).${remainder}"
	echo "${new_ip}"
}
subnet_mask() {
	local bits=$1
	local mask=$((0xffffffff << (32 - $bits)))
	local IFS=.
	printf '%s\n' "$((mask >> 24 & 0xff)).$((mask >> 16 & 0xff)).$((mask >> 8 & 0xff)).$((mask & 0xff))"
}

function create_named_conf {
	##
	echo "" > ${named_conf}_tmp
	echo "include \"${named_conf_options}\";" >> ${named_conf}_tmp
	echo "include \"${named_conf_local}\";" >> ${named_conf}_tmp
	echo "include \"${named_conf_default_zones}\";" >> ${named_conf}_tmp
	rm -f ${named_conf}
	mv ${named_conf}_tmp ${named_conf}
	
	
	echo "" > ${named_conf_default_zones}_tmp
	echo 'zone "localhost" IN {'  >>  ${named_conf_default_zones}_tmp
	echo '    type master;'  >>  ${named_conf_default_zones}_tmp
	echo '    file "localhost.zone";'  >>  ${named_conf_default_zones}_tmp
	echo '};'  >>  ${named_conf_default_zones}_tmp

	echo 'zone "0.0.127.in-addr.arpa" IN {'  >>  ${named_conf_default_zones}_tmp
	echo '    type master;'  >>  ${named_conf_default_zones}_tmp
	echo '    file "127.0.0.zone";'  >>  ${named_conf_default_zones}_tmp
	echo '};'  >>  ${named_conf_default_zones}_tmp

	echo 'zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {'  >>  ${named_conf_default_zones}_tmp
	echo '    type master;'  >>  ${named_conf_default_zones}_tmp
	echo '    file "localhost.ip6.zone";'  >>  ${named_conf_default_zones}_tmp
	echo '};'  >>  ${named_conf_default_zones}_tmp
	rm -f ${named_conf_default_zones}
	mv ${named_conf_default_zones}_tmp ${named_conf_default_zones}
	

	## cp -p  ${named_conf_options}    ${named_conf_options}_tmp
	echo "" > ${named_conf_options}_tmp
	echo "// CREATED"  >>  ${named_conf_options}_tmp
	echo "// named.conf"  >>  ${named_conf_options}_tmp
	echo "//"  >>  ${named_conf_options}_tmp

	echo "" >> ${named_conf_options}_tmp
	echo "options {"  >>  ${named_conf_options}_tmp
	echo "//      listen-on port 53 { 127.0.0.1;localnets; };"  >>  ${named_conf_options}_tmp
	echo "//        listen-on-v6 port 53 { ::1; };"  >>  ${named_conf_options}_tmp
	echo "        check-names master ignore;"  >>  ${named_conf_options}_tmp
	echo "        directory       \"${var_named_dir}\";"  >>  ${named_conf_options}_tmp
	echo "//        dump-file       \"${var_named_dir}/data/cache_dump.db\";"  >>  ${named_conf_options}_tmp
	echo "//        statistics-file \"${var_named_dir}/data/named_stats.txt\";"  >>  ${named_conf_options}_tmp
	echo "//        memstatistics-file \"${var_named_dir}/data/named_mem_stats.txt\";"  >>  ${named_conf_options}_tmp
	echo "        allow-query     { localhost;"  >>  ${named_conf_options}_tmp
	echo "                localnets;"  >>  ${named_conf_options}_tmp
	ind=0
	while (( ind < net_count )) 
	do
		ETH="${DEVICE[$ind]}"
		if [[ "$ETHS" == *"$ETH"* ]]; then
			echo "                ${host_net[$ind]}.0/${MASK[$ind]};"  >>  ${named_conf_options}_tmp
		fi
		let ind=ind+1
	done

	echo "         };"  >>  ${named_conf_options}_tmp
	echo "        recursion yes;"  >>  ${named_conf_options}_tmp
	echo "        allow-transfer {"  >>  ${named_conf_options}_tmp
	echo "                // ( localhost )"  >>  ${named_conf_options}_tmp
	echo "                127.0.0.1;"  >>  ${named_conf_options}_tmp
	echo "                // 192.168.0.* ( Subnet 255.255.255.0 )"  >>  ${named_conf_options}_tmp
	#echo "                192.168.10.0/24;"  >>  ${named_conf_options}_tmp
	#echo "                192.168.11.0/24;"  >>  ${named_conf_options}_tmp
	#echo "                192.168.1.0/24;"  >>  ${named_conf_options}_tmp
	ind=0
	while (( ind < net_count )) 
	do
		ETH="${DEVICE[$ind]}"
		if [[ "$ETHS" == *"$ETH"* ]]; then
			echo "                ${host_net[$ind]}.0/${MASK[$ind]};"  >>  ${named_conf_options}_tmp
		fi
		let ind=ind+1
	done
	echo "        };"  >>  ${named_conf_options}_tmp
	echo "        forwarders      {"  >>  ${named_conf_options}_tmp
	echo "                ${host_net[0]}.1;"  >>  ${named_conf_options}_tmp
	echo "        };"  >>  ${named_conf_options}_tmp
	echo "" >> ${named_conf_options}_tmp

	echo "        listen-on  {"  >>  ${named_conf_options}_tmp
	ind=0
	while (( ind < net_count )) 
	do
		ETH="${DEVICE[$ind]}"
		if [[ "$ETHS" == *"$ETH"* ]]; then
			echo "                ${host_ip[$ind]};"  >>  ${named_conf_options}_tmp
		fi
		let ind=ind+1
	done
	echo "         };"  >>  ${named_conf_options}_tmp
	
	echo "    //allow-recursion { 127.0.0.1; };"  >>  ${named_conf_options}_tmp
	echo "    //allow-transfer { none; };"  >>  ${named_conf_options}_tmp
	echo "    //allow-update { none; };"  >>  ${named_conf_options}_tmp
	echo "" >> ${named_conf_options}_tmp
	echo "    //version none;"  >>  ${named_conf_options}_tmp
	echo "    //hostname none;"  >>  ${named_conf_options}_tmp
	echo "    //server-id none;"  >>  ${named_conf_options}_tmp
	
	echo "" >> ${named_conf_options}_tmp
	echo "" >> ${named_conf_options}_tmp

	echo "        //dnssec-enable yes;"  >>  ${named_conf_options}_tmp
	echo "        // dnssec-enable no;"  >>  ${named_conf_options}_tmp
	
	echo "        //dnssec-enable yes;"  >>  ${named_conf_options}_tmp
	echo "        // dnssec-enable no;"  >>  ${named_conf_options}_tmp
	echo "        // dnssec-validation yes;"  >>  ${named_conf_options}_tmp
	echo "        dnssec-validation no;"  >>  ${named_conf_options}_tmp
	echo "        //dnssec-lookaside auto;"  >>  ${named_conf_options}_tmp
	echo "" >> ${named_conf_options}_tmp
	echo "        /* Path to ISC DLV key */"  >>  ${named_conf_options}_tmp
	echo "        //bindkeys-file \"/etc/named.iscdlv.key\";"  >>  ${named_conf_options}_tmp
	#echo "        listen-on-v6 { any; };"  >>  ${named_conf_options}_tmp
	echo "        listen-on-v6 { none; };"  >>  ${named_conf_options}_tmp
	echo "};"  >>  ${named_conf_options}_tmp
	echo "" >> ${named_conf_options}_tmp
	echo "logging {"  >>  ${named_conf_options}_tmp
	echo "        category resolver { null; };"  >>  ${named_conf_options}_tmp
	#echo "        channel default_debug {"  >>  ${named_conf_options}_tmp
	#echo "                file \"data/named.run\";"  >>  ${named_conf_options}_tmp
	#echo "                severity dynamic;"  >>  ${named_conf_options}_tmp
	#echo "        };"  >>  ${named_conf_options}_tmp
	echo "};"  >>  ${named_conf_options}_tmp
	echo "" >> ${named_conf_options}_tmp

	rm -f ${named_conf_options}
	mv ${named_conf_options}_tmp ${named_conf_options}
	#chown root:named ${named_conf_options}

}
#####################################################
###
#####################################################
function fun_dns_add {
	## $1 = $ind
	## $2 = r*

	ETH="${DEVICE[${1}]}"
	# IP1="$(echo ${host_net[${1}]} | sed 's/\([0-9][0-9]*\).\([0-9][0-9]*\).\([0-9][0-9]*\)/\1/g')"
	# IP2="$(echo ${host_net[${1}]} | sed 's/\([0-9][0-9]*\).\([0-9][0-9]*\).\([0-9][0-9]*\)/\2/g')"
	# IP3="$(echo ${host_net[${1}]} | sed 's/\([0-9][0-9]*\).\([0-9][0-9]*\).\([0-9][0-9]*\)/\3/g')"
	NET1=$(echo ${host_net[${1}]} | cut -d'.' -f1)
	NET2=$(echo ${host_net[${1}]} | cut -d'.' -f2)
	NET3=$(echo ${host_net[${1}]} | cut -d'.' -f3)

	F_ETH=$ETH
	len=${#F_ETH}
	echo "fun_dns_add    F_ETH: $F_ETH;  len: $len"
	
	if (( len > 4 )) ;then
		F_ETH=$(echo "$ETH" | sed 's/\([a-zA-Z]*\)0\([0-9]\)/\1\2/')
	fi
	
	if [[ ${F_ETH:0:2} == "br" ]]; then
		num="${F_ETH//[!0-9]/}"
		F_ETH="eth$num"
	fi

	if [ -e "${HOST_IP_DAT_FILE}.${F_ETH}" ]; then
		host_ip_dat="${HOST_IP_DAT_FILE}.${F_ETH}"
	else
		host_ip_dat="${HOST_IP_DAT_FILE}"
	fi
	echo "host_ip_dat: $host_ip_dat"

	DNS_NET=`echo ${host_ip[${1}]} | cut -d'.' -f1-3`
	declare -A dns_array
	declare -A samba_array
	IFS=,
	while read HOST_NAME HOST_MAC HOST_IP
	do
		IP="$(calculate_ip ${host_net[${1}]} ${HOST_IP})"
		NET=`echo ${IP} | cut -d'.' -f1-3`
		# echo "IP=${IP}		NET=${NET}"
		if ! [[ ${samba_array[${NET}]} ]]; then
			SAMBA_HOST="${SAMBA_HOST} ${NET}."
			echo "SAMBA_HOST=${SAMBA_HOST}"
			samba_array[${NET}]=$NET
		fi
		## domain="$(echo ${NET} | sed 's/\./-/g')"
		domain="$(echo ${host_net[${1}]} | sed 's/\./-/g')"
		dns_name_zone_path="${var_named_dir}/${domain}.zone"
		dns_name_zone="${domain}.zone"
		NET_REV="$(echo ${NET} | cut -d'.' -f3).$(echo ${NET} | cut -d'.' -f2).$(echo ${NET} | cut -d'.' -f1)"
		dns_ip_zone_path="${var_named_dir}/${NET_REV}.zone"
		dns_ip_zone="${NET_REV}.zone"

		if [ -a "$dns_name_zone_path" ] && [[ "${2}" != r* ]]
		then
			:
		else
			if [[ ${dns_array[${dns_name_zone}]} ]]; then
				:
			else
				echo "${dns_name_zone_path}-------"
				rm -f   $dns_name_zone_path
				echo "\$TTL 1D"  >>   $dns_name_zone_path
				#echo "@	IN SOA	${dns_server}.${domain}. root.${dns_server}.${domain}. ("  >>    $dns_name_zone_path
				echo "@	IN SOA	${domain}. root.${domain}. ("  >>    $dns_name_zone_path
				echo "					0	; serial"  >>  $dns_name_zone_path
				echo "					1D	; refresh"  >>  $dns_name_zone_path
				echo "					1H	; retry"  >>  $dns_name_zone_path
				echo "					1W	; expire"  >>  $dns_name_zone_path
				echo "					3H )	; minimum"  >>  $dns_name_zone_path
				echo "	IN      NS      ${dns_server}.${domain}."  >>  $dns_name_zone_path

				# if [[ "${DNS_NET}" = "${NET}" ]]
				# then
					echo "${dns_server}	IN	A	${host_ip[${1}]}"  >>  $dns_name_zone_path
					echo "dev_gw_server	IN	A	${host_ip[${1}]}"  >>  $dns_name_zone_path
				# fi
				dns_name_zone_exist=`cat $named_conf_local | grep "${dns_name_zone}"`
				if [[ "${dns_name_zone_exist}" = "" ]]
				then
					echo "zone \"${domain}\" IN {"  >>  $named_conf_local
					echo "        type master;"  >>  $named_conf_local
					echo "        file \"${var_named_dir}/${domain}.zone\";"  >>  $named_conf_local
					echo "        allow-update { none; };"  >>  $named_conf_local
					echo "};"  >>  $named_conf_local
				fi
				dns_array[${dns_name_zone}]=$dns_name_zone_path
			fi
			## echo "${HOST_NAME}	IN	A	${host_net[${1}]}.${HOST_IP}"  >>  $dns_name_zone_path
			echo "${HOST_NAME}	IN	A	${IP}"  >>  $dns_name_zone_path
			#chown named:named $dns_name_zone_path
		fi

		#echo "${dns_ip_zone_path}-------"
		if [ -a $dns_ip_zone_path ] && [[ "${2}" != r* ]]
		then
			:
		else
			if [[ ${dns_array[${dns_ip_zone}]} ]]; then
				:
			else
				echo "${dns_ip_zone_path}-------"
				rm -f   $dns_ip_zone_path
				echo "\$TTL 1D"  >>  $dns_ip_zone_path
				#echo "@	IN SOA	${dns_server}.${domain}. root.${dns_server}.${domain}. ("  >>  $dns_ip_zone_path
				echo "@	IN SOA	${domain}. root.${domain}. ("  >>  $dns_ip_zone_path
				echo "					0	; serial"  >>  $dns_ip_zone_path
				echo "					1D	; refresh"  >>  $dns_ip_zone_path
				echo "					1H	; retry"  >>  $dns_ip_zone_path
				echo "					1W	; expire"  >>  $dns_ip_zone_path
				echo "					3H )	; minimum"  >>  $dns_ip_zone_path
				echo "	IN	NS	${dns_server}.${domain}."  >>  $dns_ip_zone_path
				if [[ "${DNS_NET}" = "${NET}" ]]
				then
					IP4="$(echo ${host_ip[${1}]} | cut -d'.' -f4)"
					echo "${IP4}	IN	PTR	${dns_server}.${domain}."  >>  $dns_ip_zone_path
				fi
				#chown named:named $dns_ip_zone_path
				dns_ip_zone_exist=`cat $named_conf_local | grep "${dns_ip_zone}"`
				if [[ "${dns_ip_zone_exist}" = "" ]]
				then
					echo "zone \"${NET_REV}.in-addr.arpa\" IN {"  >>  $named_conf_local
					echo "        type master;"  >>  $named_conf_local
					echo "        file \"${var_named_dir}/${NET_REV}.zone\";"  >>  $named_conf_local
					echo "        allow-update { none; };"  >>  $named_conf_local
					echo "};"  >>  $named_conf_local
				fi
				dns_array[${dns_ip_zone}]="$dns_ip_zone_path"
			fi
			#echo  "${dns_ip_zone}=$dns_ip_zone_path"
			echo "$(echo ${IP} | cut -d'.' -f4)	IN	PTR	${HOST_NAME}.${domain}."  >>  $dns_ip_zone_path
		fi
	done< <(grep -v "^#" "$host_ip_dat" | grep -v -E "^[[:space:]]*$")
	for key in "${!dns_array[@]}"; do
	    echo "Key: $key, Value: ${dns_array[$key]}"
	done


}

#####################################################
###
#####################################################
function fun_subnet_add {
	## $1 = $ind
	ETH="${DEVICE[${1}]}"
	F_ETH=$ETH
	len=${#F_ETH}
	echo "fun_subnet_add    F_ETH: $F_ETH;  len: $len"
	
	if (( len > 4 )) ;then
		F_ETH=$(echo "$ETH" | sed 's/\([a-zA-Z]*\)0\([0-9]\)/\1\2/')
	fi

	if [[ ${F_ETH:0:2} == "br" ]]; then
		num="${F_ETH//[!0-9]/}"
		F_ETH="eth$num"
	fi

	if [ -e "${HOST_IP_DAT_FILE}.${F_ETH}" ]; then
		host_ip_dat="${HOST_IP_DAT_FILE}.${F_ETH}"
	else
		host_ip_dat="${HOST_IP_DAT_FILE}"
	fi
	echo "fun_subnet_add    host_ip_dat: $host_ip_dat"

	echo "subnet ${host_net[${1}]}.0 netmask $(subnet_mask MASK[${1}]) {"  >>    $dhcpd_conf
	echo "    range dynamic-bootp ${host_net[${1}]}.${net_start} ${host_net[${1}]}.${net_end};"  >>    $dhcpd_conf
	echo "    ##option broadcast-address 192.168.1.255;"  >>    $dhcpd_conf
	echo "    option domain-name \"$(echo ${host_net[${1}]} | sed 's/\./-/g')\";"  >>    $dhcpd_conf
	echo "    option domain-name-servers ${host_ip[${1}]};"  >>    $dhcpd_conf
	#echo "    option routers           ${host_net[${1}]}.1;"  >>    $dhcpd_conf
	if [[ "${1}" == "0" ]]
	then
		echo "    option routers           ${host_net[${1}]}.1;"  >>    $dhcpd_conf
		h_net=${host_net[${1}]}
		h_ip=${host_ip[${1}]}
		echo "    option rfc3442-classless-static-routes ${MASK[${1}]},${h_net//./,},${h_ip//./,};"  >>    $dhcpd_conf
	else
		echo "    option routers           ${host_ip[${1}]};"  >>    $dhcpd_conf
	fi
	echo "    failover peer \"dhcp-failover\";"  >>    $dhcpd_conf
	## echo "    option routers           ${host_ip[${1}]};"  >>    $dhcpd_conf
	##  #if [[ "${1}" == "0" ]]
	##  #then
	##  	# echo "    option routers           ${host_net[${1}]}.1;"  >>    $dhcpd_conf
	##  	wan_net=153.234
	##  	gatway_ip=${host_net[0]}.1
	##  	echo "    option rfc3442-classless-static-routes 16,${wan_net//./,},${gatway_ip//./,};"  >>    $dhcpd_conf
	##  #fi

	echo "    ##deny unknown-clients;"  >>    $dhcpd_conf
	echo "    allow  unknown-clients;"  >>    $dhcpd_conf
	echo ""  >>    $dhcpd_conf
	echo "    next-server ${host_ip[${1}]};"  >>    $dhcpd_conf

	echo ""  >>    $dhcpd_conf
	echo "    #    0000 == IA x86 PC (BIOS boot)"  >>    $dhcpd_conf
	echo "    #    0006 == x86 EFI boot"  >>    $dhcpd_conf
	echo "    #    0007 == x64 EFI boot"  >>    $dhcpd_conf
	echo "    if option arch = 00:00 {"  >>    $dhcpd_conf
	echo "        ## filename \"tftpboot/bios/pxelinux.0\";"  >>    $dhcpd_conf
	echo "        option bootfile-name \"tftpboot/bios/pxelinux.0\";"  >>    $dhcpd_conf
	echo "    } else if option arch = 00:07 {"  >>    $dhcpd_conf
	echo "    	## filename \"tftpboot/efi64/syslinux.efi\";"  >>    $dhcpd_conf
	echo "    	option bootfile-name \"tftpboot/efi64/syslinux.efi\";"  >>    $dhcpd_conf
	echo "    } else {"  >>    $dhcpd_conf
	echo "    	filename \"UNKNOWN_VCI\";"  >>    $dhcpd_conf
	echo "    	option bootfile-name \"UNKNOWN_VCI\";"  >>    $dhcpd_conf
	echo "    }"  >>    $dhcpd_conf

	IFS=,
	cat ${host_ip_dat} | grep -v "^#" | grep -v -E "^[[:space:]]*$" | \
	while read HOST_NAME HOST_MAC HOST_IP
	do
		if [[ "${HOST_MAC}" != "-" ]]; then
			IP="$(calculate_ip ${host_net[${1}]} ${HOST_IP})"
			echo "    host  ${HOST_NAME}_$(echo ${host_net[${1}]} | sed 's/\./-/g')_0 {"  >>    $dhcpd_conf
			echo "               hardware ethernet ${HOST_MAC};"  >>    $dhcpd_conf
			echo "               fixed-address      ${IP};"  >>    $dhcpd_conf
			echo "     }"  >>    $dhcpd_conf
		fi
	done

	echo "}"  >>    $dhcpd_conf
}

#####################################
###DHCP (net1~net2 )

###
###    main 
###


function fun_tftp_dhcp_dns_setting {

	## $1 = r*
	IFS=

	echo "param=${@}"
	echo "param2=${@:2}"
	ETHS="${@:2}"
	#ETHS=${@:2}
	net_start="31"
	net_end="60"
	
	echo "ETHS=${ETHS}"

	mkdir -p /mnt/tools
	mkdir -p /mnt/DISK1

	#sudo apt-get update
	#sudo apt-get install -y chkconfig nbd-server tftpd-hpa tftp vim  isc-dhcp-server  samba samba-client bind9 dnsutils nfs-kernel-server pxelinux syslinux-common syslinux-efi subversion vsftpd iptables
	#sudo apt-get install -y sshpass
	## dpkg -i /mnt/tools/pkg/tftpd_0.17-18_armhf.deb
	

	# sudo pacman -Syy
	# sudo pacman -S nbd tftp-hpa vim dhcp samba bind dnsutils nfs-utils syslinux subversion vsftpd iptables  --noconfirm

	echo syntax on  >  ~/.vimrc
	echo colorscheme pablo  >> ~/.vimrc
	echo set mouse=  >> ~/.vimrc

	#sed -i "s/\(NAME=\"\).\+\(\".*\)$/\1eth0\2/g"  /lib/udev/rules.d/73-usb-net-by-mac.rules
	#sed -i "s/\(OPTIONS=\"\).\+\(\".*\)$/\1-u bind -4\2/g"  /etc/default/bind9
	
	
	#  sed -i "s/^.*\(DHCPDv4.*\)$/\1/g" /etc/default/isc-dhcp-server
	#  sed -i "s/^.*\(OPTIONS=\).*$/\1\"-4\"/g" /etc/default/isc-dhcp-server
	#  sed -i "s/^.*\(INTERFACESv4=\).*$/\1\"${ETHS}\"/g" /etc/default/isc-dhcp-server
	
	sed -i "s/^\(ExecStart=.*dhcpd.pid\).*$/\1 ${ETHS} /g" /usr/lib/systemd/system/dhcpd4.service
	
	
	etc_xinetd_tftp="\\
service tftp\\
	{\\
	protocol        = udp\\
	port            = 69\\
	socket_type     = dgram\\
	wait            = yes\\
	user            = nobody\\
	server          = /usr/sbin/in.tftpd\\
	server_args     = /tftpboot\\
	disable         = no\\
}\\
"

	## echo   >  /etc/xinetd.d/tftp
	## sed -i "1i${etc_xinetd_tftp}"  /etc/xinetd.d/tftp
	#sed -i 's|^\(TFTP_DIRECTORY=\).*$|\1"/"|g'  /etc/default/tftpd-hpa
	#sed -i 's|^\(TFTP_ADDRESS=\).*$|\1"0.0.0.0:69"|g'  /etc/default/tftpd-hpa
	sed -i 's|^\(TFTPD_ARGS=\).*$|\1" --ipv4 --address 0.0.0.0:69 --secure /"|g'  /etc/conf.d/tftpd
	
	## sed -i 's|^\(TFTP_OPTIONS=\).*$|\1"-s -v"|g'  /etc/default/tftpd-hpa

	#dns_server=$(cat /etc/sysconfig/network | grep HOSTNAME | sed 's/HOSTNAME=\(.*\)/\1/g' )

	# sed -i "s/^\(source-directory.*\)$/#\1/g"  /etc/network/interfaces 

	#dhcpd_conf="/etc/dhcp/dhcpd.conf"
	dhcpd_conf="/etc/dhcpd.conf"
	echo "$dhcp_ver--$dhcpd_conf"

	#service network restart
	echo "---------------------------------------------------"
	let ind=0
	##DEVICE=( `ip r | grep kernel |  awk '{ print $3;}'` )
	readarray -t DEVICE < <(ip r | grep scope | awk '{ print $3; }')
	#MASK=( `ip r | grep kernel |  awk '{ print $1;}' |  cut -d'/' -f2` )
	readarray -t MASK < <(ip r | grep scope | awk '{ print $1;}' |  cut -d'/' -f2 )
	# host_ips=( `ip r | grep kernel |  awk '{ print $9;}'` )
	readarray -t host_ips < <(ip r | grep scope |  awk '{ print $9;}' )
	for HOST_IP in  ${host_ips[@]}
	do
		host_ip[$ind]="$HOST_IP"
		local  net_fix=`echo $HOST_IP | cut -d'.' -f1-2`
		local  net_tail=`echo $HOST_IP | cut -d'.' -f3`
		echo "---------------------------------------------------"
		echo HOST_IP=$HOST_IP 
		echo net_fix=$net_fix
		echo net_tail=$net_tail
		echo "---------------------------------------------------"
		##local  net_tail=$(( $net_tail & (0xffffffff << (32 - $mask -8)  & 0xFF) ))
		local mask=${MASK[$ind]}
		host_net[$ind]="$net_fix.$(( $net_tail & (0xffffffff << (32 - $mask -8)  & 0xFF) ))"
		echo "$ind	${DEVICE[$ind]}	${host_ip[$ind]}      ${host_net[$ind]} "

		# interface_exist=`cat   /etc/network/interfaces | grep "${host_ip[$ind]}"`
		# if [[ "$interface_exist" = "" ]]
		# then
		# 	interface_ip="\\
		# 	auto ${DEVICE[$ind]}\\
		# 	iface ${DEVICE[$ind]} inet static\\
		# 	address ${host_ip[$ind]}\\
		# 	netmask $(subnet_mask ${MASK[${1}]})\\
		# 	gateway ${host_net[$ind]}.1\\
		# 	"
		# 	inset_line=`wc  /etc/network/interfaces  | awk '{print $1}'`
		# 	#let inset_line=inset_line+1
		# 	sed -i "${inset_line}i${interface_ip}"  /etc/network/interfaces 
		# fi
		let ind=ind+1
	done
	echo "---------------------------------------------------"
	let net_count=ind

	echo "echo  $1"
	if [ -a $dhcpd_conf ]
	then
		domain_name_exist=`cat $dhcpd_conf | grep "domain-name-servers"`
		##echo "dhcp_conf_exist--subnet ${host_net}.0"
		if [[ "$domain_name_exist" = *domain-name-servers* ]]
		then
			if [[ "${1}" = r* ]]
			then
				echo "reset [${dhcpd_conf}]***"
				rm -f  $dhcpd_conf
				echo "#"    >>    $dhcpd_conf
				echo "# DHCP Server Configuration file."    >>    $dhcpd_conf
				echo "#   see /usr/share/doc/dhcp*/dhcpd.conf.sample"    >>    $dhcpd_conf
				echo "#   see 'man 5 dhcpd.conf'"    >>    $dhcpd_conf
				echo "#"    >>    $dhcpd_conf
				domain_name_exist=0
			else
				domain_name_exist=1
			fi
		else
			domain_name_exist=0
		fi
	else
		domain_name_exist=0
	fi

	echo "for  failover ------start"
	declare -A failover_array
	
	ETH="${DEVICE[0]}"
	F_ETH=$ETH
	len=${#F_ETH}
	echo "for failover    F_ETH: $F_ETH;  len: $len"
	if (( len > 4 )) ;then
		F_ETH=$(echo "$ETH" | sed 's/\([a-zA-Z]*\)0\([0-9]\)/\1\2/')
	fi
	if [[ ${F_ETH:0:2} == "br" ]]; then
		num="${F_ETH//[!0-9]/}"
		F_ETH="eth$num"
	fi

	if [ -e "${HOST_IP_DAT_FILE}.${F_ETH}" ]; then
		host_ip_dat="${HOST_IP_DAT_FILE}.${F_ETH}"
	else
		host_ip_dat="${HOST_IP_DAT_FILE}"
	fi
	echo "for  failover    host_ip_dat: $host_ip_dat"

	IFS=,
	while read HOST_NAME HOST_MAC HOST_IP
	do
		#  echo "for  failover HOST_NAME=${HOST_NAME} HOST_IP=$HOST_IP"
		failover_array["$HOST_NAME"]="$HOST_IP"
	done< <(grep -v "^#" "$host_ip_dat" | grep -v -E "^[[:space:]]*$")

	DHCP_PRIORITY="${DHCP_PRIORITY:=primary}"
	DHCP_PEER="${DHCP_PEER:=raspberry1}"
	HOST_IP="${failover_array[$DHCP_PEER]}"
	MY_IP="${host_ip[0]}"
	echo "for  failover host_net[0]=${host_net[0]} DHCP_PEER=${DHCP_PEER} HOST_IP=${HOST_IP} MY_IP=${MY_IP}"
	
	DHCP_PEER_IP="$(calculate_ip ${host_net[0]} ${HOST_IP})"
	echo "for  failover ------end  DHCP_PRIORITY=${DHCP_PRIORITY} MY_IP=${MY_IP} DHCP_PEER_IP=${DHCP_PEER_IP}"

	echo "domain_name_exist----$domain_name_exist----"
	###########################################################
	if (( domain_name_exist == 0 ))
	then

		echo ""  >>    $dhcpd_conf
		echo "option domain-name \"192-168-1\";"  >>    $dhcpd_conf
		echo "option domain-name-servers      192.168.1.1;"  >>    $dhcpd_conf
		echo "    option arch code 93 = unsigned integer 16;"  >>    $dhcpd_conf
		echo "    option rfc3442-classless-static-routes code 121 = array of integer 8;"  >>    $dhcpd_conf
		###ind=1
		###while (( ind < net_count )) 
		###do
		###    if [[ "${host_ip[$ind]}" = 192.168.11* ]]
		###    then
		###        echo "option domain-name-servers      ${host_ip[$ind]};"  >>    $dhcpd_conf
		###        break
		###    fi
		###    let ind=ind+1
		###done
		echo "ddns-update-style interim;"  >>    $dhcpd_conf
		echo ""  >>    $dhcpd_conf
		echo "max-lease-time 7200;"  >>    $dhcpd_conf
		echo "server-name \"bootserver\";"  >>    $dhcpd_conf
		echo "default-lease-time 600;"  >>    $dhcpd_conf
		echo ""  >>    $dhcpd_conf
		echo "allow booting;"  >>    $dhcpd_conf
		echo "allow bootp;"  >>    $dhcpd_conf
		echo ""  >>    $dhcpd_conf
		
		echo "failover peer \"dhcp-failover\" {"  >>    $dhcpd_conf
		echo "    ${DHCP_PRIORITY};"  >>    $dhcpd_conf
		echo "    address ${MY_IP};"  >>    $dhcpd_conf
		echo "    port 647;"  >>    $dhcpd_conf
		echo "    peer address ${DHCP_PEER_IP};"  >>    $dhcpd_conf
		echo "    peer port 647;"  >>    $dhcpd_conf
		echo "    max-response-delay 60;"  >>    $dhcpd_conf
		echo "    max-unacked-updates 10;"  >>    $dhcpd_conf
		if [[ ${DHCP_PRIORITY} == "primary" ]]; then
			echo "    mclt 1800;"  >>    $dhcpd_conf
			echo "    split 128;"  >>    $dhcpd_conf
		fi
		echo "    load balance max seconds 3;"  >>    $dhcpd_conf
		echo "}"  >>    $dhcpd_conf
	fi
	###########################################################

	create_named_conf
	echo "---------------------------------------------------"
	echo "chmod -R 777 ${var_named_dir}"
	chmod -R 777 ${var_named_dir}
	echo "---------------------------------------------------"
	#cat ${named_conf_local} | grep ^// > ${named_conf_local}_tmp
	#rm ${named_conf_local}
	#mv ${named_conf_local}_tmp ${named_conf_local}
	# rm ${var_named_dir}/*.zone
	echo "net_count=${net_count}"
	SAMBA_HOST=
	ind=0
	while (( ind < net_count )) 
	do
		ETH="${DEVICE[$ind]}"
		echo "ETHS=${ETHS}   ETH=$ETH   ind=$ind"
		if [[ "$ETHS" == *"$ETH"* ]]; then
			dhcp_conf_exist=`cat $dhcpd_conf | grep "subnet ${host_net[$ind]}.0"`
			##echo "dhcp_conf_exist--subnet ${host_net}.0"
			if [[ "$dhcp_conf_exist" = subnet* ]]
			then
				:
			else
				echo "fun_subnet_add  $ind"
				fun_subnet_add  $ind 
				echo "fun_dns_add $ind $1"
				fun_dns_add $ind $1
				## SAMBA_HOST="${SAMBA_HOST} ${host_net[$ind]}."
			fi
		fi
		let ind=ind+1
	done
	mkdir -p /etc/samba
	#cp -p  ./smb.conf   /etc/samba/smb.conf
	echo "SAMBA_HOST=${SAMBA_HOST}"
	echo "ETHS=${ETHS}"
	echo "sed -i \"s/^\([[:space:]]*hosts[[:space:]]\+allow[[:space:]]*=\).*$/\1 127. ${SAMBA_HOST} /g\"  /etc/samba/smb.conf"
	sed -i "s/^\([[:space:]]*hosts[[:space:]]\+allow[[:space:]]*=\).*$/\1 127. ${SAMBA_HOST} /g"  /etc/samba/smb.conf
	sed -i "s/^\([[:space:]]*interfaces[[:space:]]*=\).*$/\1 lo ${ETHS} /g"  /etc/samba/smb.conf
	#sudo service smbd restart
	
	systemctl restart smb nmb
	systemctl enable smb nmb
	
	systemctl restart dhcpd4
	systemctl enable dhcpd4
	
	systemctl restart tftpd
	systemctl enable tftpd

	nbd_setting=`cat /etc/nbd-server/config | grep tftpboot | tr -d ' \t'`
	if [[ "${nbd_setting}" != "includedir=/tftpboot/nbd" ]]
	then
		sudo sed -i '/\[export1\]/,/^\t#.*/ s/^/#/' /etc/nbd-server/config
		# sed -i '/includedir = \/etc\/nbd-server\/conf.d/a \        includedir = \/tftpboot\/nbd' /etc/nbd-server/config
		sed -i '/group = nbd/a \        includedir = \/tftpboot\/nbd' /etc/nbd-server/config
	fi
	systemctl restart nbd
	systemctl enable nbd
}
echo "---------------------------------------------------"

function vsftp_setting {
	vsftp_conf="/etc/vsftpd.conf"
	sed -i "s/^#\(write_enable=\).*$/\1YES/g"   $vsftp_conf
	echo "listen_port=21"  >>    $vsftp_conf
	#echo "ftp_username=ftp"  >>    $vsftp_conf
	#echo "no_anon_password=YES"  >>    $vsftp_conf
	#echo "anon_root=/home/ftp"  >>    $vsftp_conf
	#echo "anon_world_readable_only=YES"  >>    $vsftp_conf

	#sed -i "s/^root/#root/g"  /etc/ftpusers

	root_exist=`cat  /etc/vsftpd.chroot_list  | grep "root"`
	if [[ "$root_exist" = "" ]]
	then
		echo "root" >> /etc/vsftpd.chroot_list
	fi

	jin_exist=`cat  /etc/vsftpd.chroot_list  | grep "jin"`
	if [[ "$jin_exist" = "" ]]
	then
		echo "jin" >> /etc/vsftpd.chroot_list
	fi

	systemctl enable vsftpd.service
	systemctl restart vsftpd.service
	#systemctl disable vsftpd.service
	#sudo service vsftpd restart
	#service  vsftpd status
	#systemctl status  vsftpd.service
}

##sshpass  -p 129921 ssh manager@nas-27-59-FD  "cat  /data/svn_bak/tftpboot_bk/raspi_tftp.tar.gz"  | tar zxvf  - -C /

function network_restart {

	##  mkdir -p /tftpboot/bios
	##  sudo     ln   -s   /usr/lib/PXELINUX/pxelinux.0                 /tftpboot/bios/pxelinux.0
	##  ## sudo     ln   -s   /usr/lib/syslinux/modules/bios/vesamenu.c32  /tftpboot/pxelinux.cfg/vesamenu.c32
	##  sudo cp -p /usr/lib/syslinux/modules/bios/vesamenu.c32  /tftpboot/pxelinux.cfg/vesamenu.c32
	##  sudo     ln   -s   /tftpboot/pxelinux.cfg  /tftpboot/bios/pxelinux.cfg
	##  sudo     ln   -s   /usr/lib/syslinux/modules/bios/ldlinux.c32   /tftpboot/bios/ldlinux.c32
	##  sudo     ln   -s   /usr/lib/syslinux/modules/bios/libcom32.c32  /tftpboot/bios/libcom32.c32
	##  sudo     ln   -s   /usr/lib/syslinux/modules/bios/libutil.c32   /tftpboot/bios/libutil.c32
	##  sudo     ln   -s   /usr/lib/syslinux/modules/bios/reboot.c32    /tftpboot/bios/reboot.c32
	##  sudo     ln   -s   /usr/lib/syslinux/modules/bios/poweroff.c32  /tftpboot/bios/poweroff.c32

	##  sudo     ln   -s   /media/dev/tftpboot/IMG  /tftpboot/bios/IMG
	##  sudo     ln   -s   /media/dev/tftpboot/ISO  /tftpboot/bios/ISO
	##  sudo     ln   -s   /media/dev/tftpboot/vmlinuz  /tftpboot/bios/vmlinuz
	##  ## sudo     ln   -s   /tftpboot/vmlinuz  /tftpboot/bios/vmlinuz

	##  mkdir -p /tftpboot/pic
	##  mv  /tftpboot/*.jpg   /tftpboot/pic/
	##  sudo     ln   -s   /tftpboot/pic  /tftpboot/bios/pic
	##  sed -i "s|\(MENU[[:space:]]\+BACKGROUND[[:space:]]\+\)\([[:alnum:]]\+.jpg\)|\1pic/\2|g"  /tftpboot/pxelinux.cfg/*.conf

	#/etc/init.d/bind9 restart
	#sudo service isc-dhcp-server  restart
	## /etc/init.d/xinetd restart
	#systemctl restart  tftpd-hpa
	#systemctl restart named.service

	sudo systemctl disable dhcpcd.service
	sudo systemctl stop dhcpcd.service

	systemctl restart dhcpd4
	systemctl restart tftpd
	systemctl restart  named
	
	systemctl enable dhcpd4
	systemctl enable tftpd
	systemctl enable  named
}

function internet_connect {
	RC_LOCAL_SERVICE="/etc/systemd/system/rc-local.service"
	if [ ! -f "$RC_LOCAL_SERVICE" ]; then

cat > "$RC_LOCAL_SERVICE" << EOF
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target
EOF
	systemctl daemon-reload
	systemctl enable rc-local.service
	systemctl restart rc-local.service

cat > /etc/rc.local << EOF
#!/bin/bash
# Your startup commands go here


EOF

		chmod +x /etc/rc.local
	fi

	ETH="${DEVICE[0]}"
	IPTABLES_FORWARD=
	for DEV in  ${DEVICE[@]}
	do
		if [[ "${DEV}" != "${ETH}" ]]; then
			IPTABLES_FORWARD="${IPTABLES_FORWARD}"$'\n'"iptables -A FORWARD -i ${DEV} -o ${ETH} -j ACCEPT"
			IPTABLES_FORWARD="${IPTABLES_FORWARD}"$'\n'"iptables -A FORWARD -i ${ETH} -o ${DEV} -j ACCEPT"
		fi
	done

	gateway_ip="${host_net[0]}.1"
	init_conf="/etc/rc.local"
	sysctl_conf="/etc/sysctl.conf"
	setting_internet=`cat ${init_conf} | grep "setting for internet"`
	if [[ "${setting_internet}" = "" ]]
	then
		echo "##setting for internet" >> ${init_conf}
		echo "route del default" >> ${init_conf}
		echo "route add default gw ${gateway_ip}" >> ${init_conf}
		echo "" >> ${init_conf}
		echo "iptables -F" >> ${init_conf}
		echo "iptables -t nat -F" >> ${init_conf}
		echo "iptables -P INPUT ACCEPT" >> ${init_conf}
		echo "iptables -P FORWARD ACCEPT" >> ${init_conf}
		echo "iptables -t nat -A POSTROUTING -o ${ETH} -j MASQUERADE" >> ${init_conf}
		echo "" >> ${init_conf}
		echo "${IPTABLES_FORWARD}" >> ${init_conf}
		echo "sysctl -p" >> ${init_conf}
	else
		sed -i "s/route add default gw.*$/route add default gw ${gateway_ip}/g"  ${init_conf}
	fi
	sed -i "s/^exit/##exit/g"  ${init_conf}

	forward_setting=`cat /proc/sys/net/ipv4/ip_forward`
	if [[ "${forward_setting}" = "0" ]]
	then
		echo 1 > /proc/sys/net/ipv4/ip_forward
	fi
	sysctl_setting=`cat ${sysctl_conf} | grep ^net.ipv4.ip_forward | awk -F"=" '{ print $2;}'`
	if [[ "${sysctl_setting}" = "" ]]
	then
		echo "net.ipv4.ip_forward=1" >> ${sysctl_conf}
	else
		sed -i "s/net.ipv4.ip_forward=.*$/net.ipv4.ip_forward=1/g"  ${sysctl_conf}
	fi
	
	echo "gateway_ip=$gateway_ip"
	echo "/etc/rc.local"
	echo "/etc/sysctl.conf"
	
	sysctl net.ipv4.ip_forward
	systemctl enable systemd-sysctl
	/etc/rc.local
}

###if [ -d $tftp_dir ]
###then
###    echo "$tftp_dir exists"
###else
###    DIR_NOW=`pwd`
###    cd /
###    tar zxvf ${DIR_NOW}/tftpboot_${var_ymd}.tar.gz
###    ##mkdir    /tftpboot
###    ##mkdir    /tftpboot/pxelinux.cfg
###    chmod -R 555 /tftpboot
###
###    chmod -R 777 /tftpboot/tmp
###
###    cp /tftpboot/tmp/*cfg  ${ftp_home_dir}/kickstart/
###fi
###
###echo 1 > /proc/sys/net/ipv4/ip_forward
###sed  -i "s/net.ipv4.ip_forward[[:space:]]*=[[:space:]]*[01]/net.ipv4.ip_forward = 1/g"  /etc/sysctl.conf
###
########
###/sbin/chkconfig --level 345 ntpd on
###/sbin/chkconfig --level 345 dhcpd on
###/sbin/chkconfig --level 345 tftp on
###/sbin/chkconfig --level 345 NetworkManager off
###
###rm -f /etc/udev/rules.d/70-persistent-net.rules
###
#### /etc/init.d/network reload
###
###service dhcpd  restart 
###service xinetd  restart
###
###
###service vsftpd restart
###
###service network restart
###/etc/init.d/named restart
###
###gateway_ip=`cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep GATEWAY|sed 's/^[^=]*=\(.*\)/\1/g'`
###setting_internet=`cat /etc/rc.d/rc.local | grep "setting for internet"`
###if [[ "${setting_internet}" = "" ]]
###then
###	echo "##setting for internet" >> /etc/rc.d/rc.local
###	echo "route del default" >> /etc/rc.d/rc.local
###	echo "route add default gw ${gateway_ip}" >> /etc/rc.d/rc.local
###	echo "" >> /etc/rc.d/rc.local
###	echo "iptables -F" >> /etc/rc.d/rc.local
###	echo "iptables -P INPUT ACCEPT" >> /etc/rc.d/rc.local
###	echo "iptables -P FORWARD ACCEPT" >> /etc/rc.d/rc.local
###	echo "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE" >> /etc/rc.d/rc.local
###else
###	sed -i "s/route add default gw.*$/route add default gw ${gateway_ip}/g"  /etc/rc.d/rc.local
###fi
###
###/etc/rc.local
###
###echo "search 192-168-1 192-168-11 192-168-10" >> /etc/resolv.conf
###
###if [ -d "/root/DISK" ]
###then
###    echo "/root/DISK exists"
###else
###   mkdir /root/DISK
###fi
###
###if [ -d "/share/DISK1" ]
###then
###    echo "/share/DISK1 exists"
###else
###   mkdir -p  /share/DISK1
###fi
###
###hosts_data="\
######for local setting
###192.168.1.223 winxp-server-90
###192.168.10.121  centos-jp
###192.168.10.172   jin-i7-860
###192.168.10.216  agw19
###192.168.10.211   vn2-master
###192.168.10.212   ut2-master
###"
###hosts_setting=`cat /etc/hosts | grep "for local setting"`
###if [[ "${hosts_setting}" = "" ]]
###then
###	echo "${hosts_data}"  >> /etc/hosts
###fi
