Home | History | Annotate | Download | only in test-scripts
      1 #!/bin/sh
      2 # Virtual ethernet interface control script
      3 # Sometimes, we need a virtual interface of arbitrary name and configuration
      4 # that we can do dhcp on. This script is for those times.
      5 
      6 # Basically,
      7 # $ veth setup foo 127.0.1
      8 # $ dhclient foo
      9 # ...
     10 # $ veth teardown foo
     11 # Would set up an ethernet interface called 'foo' whose dhcpd is at 127.0.1.1
     12 # and which will allocate addresses from 127.0.1.0/24. Note that using anything
     13 # inside 127.0.0.0/8 is a bad idea here, since lo already handles those.
     14 
     15 usage () {
     16 	echo "Usage: $0 <command> [args...]"
     17 	echo "  setup <iface> <base>     Sets up <iface> for <base>.0/24"
     18 	echo "  teardown <iface>         Tears down <iface>"
     19 }
     20 
     21 setup () {
     22 	iface="$1"
     23 	base="$2"
     24 	peer_iface="${iface}p"
     25 	lease_file="/tmp/dnsmasq.${iface}.leases"
     26 	pid_file="/tmp/dnsmasq.${iface}.pid"
     27 	ip link add name "$iface" type veth peer name "$peer_iface"
     28 	ifconfig "$peer_iface" "${base}.0/32"
     29 	ifconfig "$peer_iface" up
     30 	ifconfig "$iface" up
     31 	route add -host 255.255.255.255 dev "$peer_iface"
     32 	truncate -s 0 "$lease_file"
     33 	dnsmasq --pid-file="$pid_file" \
     34 		--dhcp-leasefile="$lease_file" \
     35 		--dhcp-range="${base}.2,${base}.254" \
     36 		--port=0 \
     37 		--interface="$peer_iface" \
     38 		--bind-interfaces
     39 }
     40 
     41 teardown () {
     42 	iface="$1"
     43 	pid_file="/tmp/dnsmasq.${iface}.pid"
     44 	[ -f "$pid_file" ] && kill -TERM $(cat "$pid_file")
     45 	route del -host 255.255.255.255
     46 	ip link del "$iface"
     47 }
     48 
     49 if [ -z "$1" ]; then
     50 	usage
     51 	exit 1
     52 fi
     53 
     54 command="$1" ; shift
     55 case "$command" in
     56 	setup)
     57 		setup "$@"
     58 		;;
     59 	teardown)
     60 		teardown "$@"
     61 		;;
     62 	*)
     63 		usage
     64 		;;
     65 esac
     66