hyper-v/hyper-v.tools.hv.hv_set_ifconfig.sh

84 lines
1.8 KiB
Bash

#!/bin/bash
#
# In the interest of keeping the KVP daemon code free of distro specific
# information; the kvp daemon code invokes this external script to configure
# the interface.
#
# The only argument to this script is the configuration file that is to
# be used to configure the interface.
#
# Here is the format of the ip configuration file:
#
# HWADDR=macaddr
# IF_NAME=interface name
# DHCP=yes (This is optional; if yes, DHCP is configured)
#
# IPADDR=ipaddr1
# IPADDR_1=ipaddr2
# IPADDR_x=ipaddry (where y = x + 1)
#
# NETMASK=netmask1
# NETMASK_x=netmasky (where y = x + 1)
#
# GATEWAY=ipaddr1
# GATEWAY_x=ipaddry (where y = x + 1)
#
# DNSx=ipaddrx (where first DNS address is tagged as DNS1 etc)
#
# IPV6 addresses will be tagged as IPV6ADDR, IPV6 gateway will be
# tagged as IPV6_DEFAULTGW and IPV6 NETMASK will be tagged as
# IPV6NETMASK.
#
# The host can specify multiple ipv4 and ipv6 addresses to be
# configured for the interface. Furthermore, the configuration
# needs to be persistent. A subsequent GET call on the interface
# is expected to return the configuration that is set via the SET
# call.
#
cfg=$1
if ! test -f "${cfg}"
then
: expect configuration datafile as first argument
exit 1
fi
#
(
unset DHCP
unset IF_NAME
. "$1"
if test -z "${IF_NAME}"
then
echo "Missing IF_NAME= in ${cfg}"
exit 1
fi
#
t=`mktemp`
if test -z "${t}"
then
exit 1
fi
_exit() {
rm -f "${t}"
}
trap _exit EXIT
#
cat >> "${t}" <<_EOF_
# contents from $0 $*
`cat "${cfg}"`
#
# additional options:
STARTMODE=auto
_EOF_
if test "${DHCP}" = "yes"
then
echo "BOOTPROTO=dhcp" >> ${t};
fi
echo "$0: working on network interface ifcfg-${IF_NAME}"
cp -b ${t} /etc/sysconfig/network/ifcfg-${IF_NAME}
ifdown ${IF_NAME} -o hotplug
ifup ${IF_NAME} -o hotplug
) 2>&1 | logger -t "${0##*/}[$PPID / $$]"