#!/bin/sh

LXC_BRIDGE="lxcbr0"
LXC_ADDR="10.0.100.1"
LXC_NETMASK="255.255.255.0"
LXC_NETWORK="10.0.100.0/24"
LXC_BROADCAST="10.0.100.255"
LXC_DHCP_PID=/var/run/lxc/dnsmasq.pid
LXC_DHCP_RANGE="10.0.100.2,10.0.100.254"
LXC_DHCP_MAX="253"
LXC_DHCP_LEASE=/var/run/lxc/lxc.leases
LXC_NETWORK_UP=/var/run/lxc/network_up

cleanup() {
  iptables -t mangle -D POSTROUTING -o $LXC_BRIDGE -p udp --dport bootpc \
      -j CHECKSUM --checksum-fill
  iptables -t nat -D POSTROUTING -s $LXC_NETWORK ! -d $LXC_NETWORK \
      -j MASQUERADE
  ip link set $LXC_BRIDGE down
  ip addr del $LXC_ADDR/$LXC_NETMASK dev $LXC_BRIDGE
  brctl delbr $LXC_BRIDGE
}

start() {
  if [ -d /sys/class/net/$LXC_BRIDGE ] ; then
    [ -f $LXC_NETWORK_UP ] || stop
    exit 0
  fi
  mkdir -p /var/run/lxc
  echo 1 > /proc/sys/net/ipv4/ip_forward
  brctl addbr $LXC_BRIDGE
  ip addr add $LXC_ADDR/$LXC_NETMASK broadcast $LXC_BROADCAST dev $LXC_BRIDGE
  ip link set $LXC_BRIDGE up
  iptables -t nat -A POSTROUTING -s $LXC_NETWORK ! -d $LXC_NETWORK \
      -j MASQUERADE
  iptables -t mangle -A POSTROUTING -o $LXC_BRIDGE -p udp --dport bootpc \
      -j CHECKSUM --checksum-fill
  dnsmasq -x $LXC_DHCP_PID -i $LXC_BRIDGE -I lo -a $LXC_ADDR -z -o \
      -F $LXC_DHCP_RANGE --dhcp-no-override -X $LXC_DHCP_MAX \
      -l $LXC_DHCP_LEASE || cleanup
  touch $LXC_NETWORK_UP
}

stop() {
  [ -f $LXC_NETWORK_UP ] || exit 0
  [ -z "`ls -A /sys/class/net/$LXC_BRIDGE/brif`" ] || exit 0
  if [ -d /sys/class/net/$LXC_BRIDGE ] ; then
    [ -f $LXC_DHCP_PID ] && kill `cat $LXC_DHCP_PID`
    rm -f $LXC_DHCP_PID
    cleanup
  fi
  rm -f $LXC_NETWORK_UP
}

case "$1" in
start)
  start
  ;;
stop)
  stop
  ;;
restart)
  stop
  start
  ;;
*)
  echo $"Usage: $0 {start|stop|restart}"
  exit 1
  ;;
esac

exit 0
