#!/bin/sh
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Virtual ethernet interface control script
# Sometimes, we need a virtual interface of arbitrary name and configuration
# that we can do dhcp on. This script is for those times.

# Basically,
# $ veth setup foo 127.0.1
# $ dhclient foo
# ...
# $ veth teardown foo
# Would set up an ethernet interface called 'foo' whose dhcpd is at 127.0.1.1
# and which will allocate addresses from 127.0.1.0/24. Note that using anything
# inside 127.0.0.0/8 is a bad idea here, since lo already handles those.

usage () {
	echo "Usage: $0 <command> [args...]"
	echo "  setup <iface> <base>     Sets up <iface> for <base>.0/24"
	echo "  teardown <iface>         Tears down <iface>"
}

setup () {
	iface="$1"
	base="$2"
	peer_iface="${iface}p"
	lease_file="/tmp/dnsmasq.${iface}.leases"
	pid_file="/tmp/dnsmasq.${iface}.pid"
	ip link add name "$iface" type veth peer name "$peer_iface"
	ifconfig "$peer_iface" "${base}.0/32"
	ifconfig "$peer_iface" up
	ifconfig "$iface" up
	route add -host 255.255.255.255 dev "$peer_iface"
	truncate -s 0 "$lease_file"
	dnsmasq --pid-file="$pid_file" \
		--dhcp-leasefile="$lease_file" \
		--dhcp-range="${base}.2,${base}.254" \
		--port=0 \
		--interface="$peer_iface" \
		--bind-interfaces
}

teardown () {
	iface="$1"
	pid_file="/tmp/dnsmasq.${iface}.pid"
	[ -f "$pid_file" ] && kill -TERM $(cat "$pid_file")
	route del -host 255.255.255.255
	ip link del "$iface"
}

if [ -z "$1" ]; then
	usage
	exit 1
fi

command="$1" ; shift
case "$command" in
	setup)
		setup "$@"
		;;
	teardown)
		teardown "$@"
		;;
	*)
		usage
		;;
esac
