#!/bin/sh
#

# Copyright (C) 2014 Google Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# This Xen vif setup script does the bare minimum required to set up the
# interface during instance creation. The rest of the process is carried out by
# the ifup-os script.

set -e

xenstore_read() {
  if ! xenstore-read "$XENBUS_PATH/$1" 2>/dev/null ; then
    echo "$2"
  fi
}

xenstore_write() {
  xenstore-write "$XENBUS_PATH/$1" "$2"
}

log() {
  local level="$1" ; shift
  logger -p daemon."${level}" -t "$0" -- "$@"
}

: "${XENBUS_PATH:?}" "${vif:?}"

vifname=$(xenstore_read "vifname" "")
if [ -n "$vifname" ] ; then
  if [ "$1" = "online" ] && ! ip link show "$vifname" >/dev/null >&2 ; then
    log debug "Renaming interface ${vif} to ${vifname}"
    ip link set "$vif" name "$vifname"
  fi
  vif="$vifname"
fi

case "$1" in
  online)
    # Tell Xen we're connected
    xenstore_write "hotplug-status" "connected"
    ;;
  offline)
    ifconfig "$vif" down || true
    ;;
esac
