#!/bin/sh

source /usr/bin/jshn.sh

echo "Setting up networking ..."

NETWORK_CONFIG="/mnt/shadow/network.json"
INTERFACES_CONFIG="/var/run/interfaces"
DEFAULT_INTERFACES_CONFIG="/etc/network/interfaces"
RESOLV_CONFIG="/etc/resolv.conf"

if ! grep -qs /mnt/shadow /proc/mounts; then
  echo "Shadow parameters area is not mounted!"
  exit 1
fi

while grep -qs $DEFAULT_INTERFACES_CONFIG /proc/mounts
do
  umount $DEFAULT_INTERFACES_CONFIG
done

cp $DEFAULT_INTERFACES_CONFIG $INTERFACES_CONFIG
if ! mount -o bind $INTERFACES_CONFIG $DEFAULT_INTERFACES_CONFIG; then
  echo "Cannot bind mount $DEFAULT_INTERFACES_CONFIG!"
  exit 2
fi

if [ -f $NETWORK_CONFIG ]; then
  echo "Applying custom configuration ..."

  NETWORK_INFO=`cat $NETWORK_CONFIG`
  json_load "$NETWORK_INFO"
  json_get_var ETHERNET_STATIC_IP "ethernet_static_ip"
  json_get_var ETHERNET_STATIC_NETMASK "ethernet_static_netmask"
  json_get_var ETHERNET_STATIC_GATEWAY "ethernet_static_gateway"
  json_get_var ETHERNET_STATIC_DNS1 "ethernet_static_dns1"
  json_get_var ETHERNET_STATIC_DNS2 "ethernet_static_dns2"

  if ! [ -z $ETHERNET_STATIC_IP ] && ! [ -z $ETHERNET_STATIC_NETMASK ]; then
    echo "# QIBA generated Ethernet configuration " > $INTERFACES_CONFIG
    echo "auto eth0" >> $INTERFACES_CONFIG
    echo "iface eth0 inet static" >> $INTERFACES_CONFIG
    echo "    address $ETHERNET_STATIC_IP" >> $INTERFACES_CONFIG
    echo "    netmask $ETHERNET_STATIC_NETMASK" >> $INTERFACES_CONFIG
    if ! [ -z $ETHERNET_STATIC_GATEWAY ]; then
      echo "    gateway $ETHERNET_STATIC_GATEWAY" >> $INTERFACES_CONFIG
    fi
  else
      echo "Warning: invalid network configuration!"
  fi

  if ! [ -z $ETHERNET_STATIC_DNS1 ]; then
    echo "# QIBA generated DNS configuration " > $RESOLV_CONFIG
    echo "nameserver $ETHERNET_STATIC_DNS1" >> $RESOLV_CONFIG
    if ! [ -z $ETHERNET_STATIC_DNS2 ]; then
      echo "nameserver $ETHERNET_STATIC_DNS2" >> $RESOLV_CONFIG
    fi
  fi
fi
