#!/bin/sh
# $Id: ipt-nat-qemu,v 1.2 2009/06/12 04:51:53 friedman Exp $

qemu_net=192.168.111.0/24

vcmd()
{
  test -t 1 && echo + "$@" 1>&2
  "$@"
}

nat_qemu_flush()
{
  _q=${qemu_net%/*}

  iptables -t nat -S POSTROUTING \
   | sed -e '/^-A/!d' \
         -e "/-s $_q/!d" \
         -e 's/^-A/-D/' \
   | while read l; do
       vcmd iptables -t nat $l
     done
}

nat_qemu()
{
  vcmd iptables -t nat -A POSTROUTING -s $qemu_net "$@"
}

dev_to()
{
  ip -o addr show to 192.168.6.0/24 \
   | sed -e 's/^[0-9]*: \([^ ]*\)  *inet \([0-9.]*\) .*/dev=\1 addr=\2/'
}

main()
{
  case ${EUID-${UID-`id -u`}} in
    0 ) : ;;
    * ) exec sudo "$0" "$@" ;;
  esac

  nat_qemu_flush

  case $1 in
    off ) exit $? ;;
  esac

  # nat openvpn
  eval `dev_to 192.168.6.0/24`
  case $dev in
    tun* ) nat_qemu -o $dev -j SNAT --to-source $addr ;;
  esac

  for dev in eth0 iwl0 ; do
    nat_qemu -o $dev -j MASQUERADE
  done
}

main "$@"

# eof
