blob: d80c36808d62658982527bf5a50550ddbccdaf98 [file] [log] [blame]
#!/bin/sh
# 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