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