#!/bin/sh

Me="`basename "$0" .sh`"

Error() { # message [errorlevel=0]
  if [ "$2"0 -ge 0 ]
  then # exit
    logger -s -t "$Me" -p "user.error" "$1"
    exit 0"$2"
  else
    logger -s -t "$Me" "$1"
  fi
}

test -s /etc/alterator/net-iptables.conf || Error "no internal interfaces found"

ShooOld() { # constr?
echo "_message:begin"
echo "_objects:/"
test -z "$1" && echo "action:write" || { echo "action:constraints"; echo "orig_action:write"; }
echo "general:$general"
echo "client_gw:$client_gw"
echo "client_search:$client_search"
echo "client_dns:$client_dns"
echo "client_time:$client_time"
echo "ip_end:$ip_end"
echo "ip_start:$ip_start"
echo "language:$language"
echo "iface:$iface"
echo "_message:end"
}

Shoo() {
  alterator-cmdline dhcp action write \
  	general "Применить" \
	client_gw "$client_gw" \
	client_search "$client_search" \
	client_dns "$client_dns" \
	client_time "$client_time" \
	ip_end "$ip_end" \
	ip_start "$ip_start" \
	language "$language" \
	iface "$IFACE"
}

gen_start() { # IP MASK
  /usr/lib/alterator-net-common/netname "$1/$2" | { read a b c ; echo "$b"; }
}

gen_end() { # IP MASK
  /usr/lib/alterator-net-common/netname "$1/$2" | { read a b c ; echo "$c"; }
}

for IFACE in `alterator-cmdline /dhcp/avail_iface action list -k name`
do
  grep -q "$IFACE" "/etc/alterator/net-iptables.conf" && continue
  IP="`alterator-cmdline /net-eth action read ifname $IFACE -k ip`"
  MASK="`alterator-cmdline /net-eth action read ifname $IFACE -k mask`"
  test -n "$IP" -a -n "$MASK" ||
    { Error "cannot determint IP address/netmask  of $IFACE" -1; continue; }

  client_gw="$IP"
  client_search="$(grep "^search" /etc/resolv.conf | cut -d\  -f2)"
  client_dns="$(grep "^nameserver" /etc/resolv.conf | cut -d\  -f2)"
  client_time="3600"
  language="ru_RU;en_US;en_US"
  ip_start="$(gen_start "$IP" "$MASK")"
  ip_end="$(gen_end "$IP" "$MASK")"
  if [ $((${IP##*.} - ${ip_start##*.})) -ge $((${ip_end##*.} - ${IP##*.})) ]
  then
    ip_end="${IP%.*}"."$((${IP##*.} - 1))"
  else
    ip_start="${IP%.*}"."$((${IP##*.} + 1))"
  fi

  Shoo
  break
done
