1#!/bin/bash
2
3# vim:tw=80:ai:tabstop=4:softtabstop=4:shiftwidth=4:expandtab
4
5LOG=/dev/null
6PID_FILE=/var/run/dnsmasq_concordance.pid
7NM_WAIT_COUNT=3
8LOCAL_IP='169.254.1.1'
9REMOTE_IP='169.254.1.2'
10NETMASK='255.255.0.0'
11export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
12IPTABLES_RULE="INPUT -p udp -i $INTERFACE --dport 67 -j ACCEPT"
13NMCLI=$(which nmcli)
14
15check_nm() {
16    IS_RUNNING=0
17    if [ ! -z "$NMCLI" ] && [ -x "$NMCLI" ] ; then
18        NM_STATUS=$($NMCLI -t -f RUNNING nm)
19        if [ "$NM_STATUS" = "running" ]; then
20            IS_RUNNING=1
21        fi
22    fi
23    return $IS_RUNNING
24}
25
26if [ "$ACTION" = "add" ]; then
27    check_nm
28    if [ "$?" -eq 1 ]; then
29        echo "NetworkManager found running." >>$LOG
30        COUNT=0
31        while [ "$COUNT" -lt "$NM_WAIT_COUNT" ]; do
32            echo "Waiting for NetworkManager." >>$LOG
33            $NMCLI -t -f DEVICE,STATE dev \
34                | grep "^${INTERFACE}\:connecting" >>$LOG 2>&1
35            if [ "$?" = "0" ]; then
36                echo "Disconnecting $INTERFACE via NetworkManager." >>$LOG
37                $NMCLI dev disconnect iface $INTERFACE >>$LOG 2>&1
38                break
39            fi
40            let COUNT=COUNT+1
41            sleep 1
42        done
43    fi
44    echo "Configuring $INTERFACE interface." >>$LOG
45    ifconfig $INTERFACE $LOCAL_IP netmask $NETMASK >>$LOG 2>&1
46    if [ -x `which iptables` ]; then
47        echo "Adding iptables rule." >>$LOG
48        iptables -I $IPTABLES_RULE >>$LOG 2>&1
49    fi
50    dnsmasq --port=0 --interface=$INTERFACE --bind-interfaces --leasefile-ro \
51            --dhcp-range=$REMOTE_IP,$REMOTE_IP --pid-file=$PID_FILE
52else
53    echo "Stopping dnsmasq." >>$LOG
54    kill $(cat $PID_FILE)
55    if [ -x `which iptables` ]; then
56        echo "Removing iptables rule." >>$LOG
57        iptables -D $IPTABLES_RULE >>$LOG 2>&1
58    fi
59fi
60