#
# UR remote access cloud network setup
#

[ -f /etc/default/ur-remote-cloud ] || exit 1

. /etc/default/ur-remote-cloud

# To enable this script set the following variable to "yes"
RUN="yes"

# Debug stuff
DEBUG="n"
DEBUG_FILE="/tmp/dhclient-script.debug"

log() {
	if [ "x$DEBUG" = "xy" ]; then
		echo "$(date +'%Y-%m-%d %H:%M:%S') : $*" >> $DEBUG_FILE
	fi
}

# output DHCLIENT environment variables
env_output() {
	# loop over the 4 possible prefixes: (empty), cur_, new_, old_
	for prefix in '' 'cur_' 'new_' 'old_'; do
		# loop over the DHCP variables passed to dhclient-script
		for basevar in reason interface medium alias_ip_address \
			       ip_address host_name network_number subnet_mask \
			       broadcast_address routers static_routes \
			       rfc3442_classless_static_routes \
			       domain_name domain_search domain_name_servers \
			       netbios_name_servers netbios_scope \
			       ntp_servers \
			       ip6_address ip6_prefix ip6_prefixlen \
			       dhcp6_domain_search dhcp6_name_servers ; do
			var="${prefix}${basevar}"

			# show only variables with values set
			if [ -n "${!var}" ]; then
				echo "$var='${!var}'" >> /tmp/dhclient-script.debug
			fi
		done
	done
}

# DNS lookup host
host_ips() {
	local host=$1
	local dns_servers=$2
	for dns_server in $dns_servers
	do
		query_result=$(host -W 5 -t a $host $dns_server | grep "has address")
		if [ $? -eq 0 ]; then
			echo $query_result | sed -r 's/^.*has address\s*(.*)$/\1/' 2>/dev/null
			[ $? -eq 0 ] && break
		fi
	done
	#getent ahostsv4 $host | cut -d' ' -f1 | uniq 2>/dev/null
}

# create host route
set_host_route() {
	local host_ip=$1
	local gateway=$2
	local interface=$3
	# create host route
	ip route add "$host_ip"/32 via $gateway dev $interface
	log "Added host route for $host_ip via $gateway dev $interface"
}

if [ "$RUN" = "yes" ]; then
	log "--------------------------> start"
	log "entering ur_remote_access_usb_remote0. EXIT"

	# check if this is a UR approved USB Adapter
	if [ "$interface" = "$UR_CLOUD_INTERFACE" ]; then
		if [ "$reason" = "REBOOT" -o "$reason" = "BOUND" ]; then
			if [ "x$new_routers" = "x" ]; then
				log "No router received from DHCP"
				exit 2
			fi
			# delete default gateway for this interface
			# to avoid problems with default gateways on ethX
			ip route del default dev $interface

			# setup DNS server routes (if necessary)
			if [ "x$new_domain_name_servers" = "x" ]; then
				log "Using fallback DNS servers"
				domain_name_servers="$FALLBACK_DNS_SERVERS"
			else
				domain_name_servers="$new_domain_name_servers"
			fi

			log "Got a gateway from DHCP: $new_routers"
			for dns_server in $domain_name_servers
			do
				set_host_route "$dns_server" "$new_routers" "$interface"
			done

			# setup IP's for online check
			for ip in $UR_CLOUD_IP_ONLINE_CHECK
			do
				set_host_route "$ip" "$new_routers" "$interface"
			done

			for ur_cloud_host in $UR_CLOUD_HOSTS
			do
				# lookup UR remote cloud and setup routing
				local ur_cloud_ips=$(host_ips "$ur_cloud_host" "$domain_name_servers")
				log "UR cloud IP's: $ur_cloud_ips"
				for ur_server in $ur_cloud_ips
				do
					set_host_route "$ur_server" "$new_routers" "$interface"
				done
			done
		fi
	fi
	log "--------------------------> end"
fi

