b439b21a2f
Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
96 lines
2.6 KiB
Bash
Executable file
96 lines
2.6 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
IFNAME=$1
|
|
CMD=$2
|
|
|
|
kill_daemon() {
|
|
NAME=$1
|
|
PF=$2
|
|
|
|
if [ ! -r $PF ]; then
|
|
return
|
|
fi
|
|
|
|
PID=`cat $PF`
|
|
if [ $PID -gt 0 ]; then
|
|
if ps $PID | grep -q $NAME; then
|
|
kill $PID
|
|
fi
|
|
fi
|
|
rm $PF
|
|
}
|
|
|
|
if [ "$CMD" = "P2P-GROUP-STARTED" ]; then
|
|
GIFNAME=$3
|
|
if [ "$4" = "GO" ]; then
|
|
kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
|
|
rm /var/run/dhclient.leases-$GIFNAME
|
|
kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
|
|
ifconfig $GIFNAME 192.168.42.1 up
|
|
if ! dnsmasq -x /var/run/dnsmasq.pid-$GIFNAME \
|
|
-i $GIFNAME \
|
|
-F192.168.42.11,192.168.42.99; then
|
|
# another dnsmasq instance may be running and blocking us; try to
|
|
# start with -z to avoid that
|
|
dnsmasq -x /var/run/dnsmasq.pid-$GIFNAME \
|
|
-i $GIFNAME \
|
|
-F192.168.42.11,192.168.42.99 --listen-address 192.168.42.1 -z -p 0
|
|
fi
|
|
fi
|
|
if [ "$4" = "client" ]; then
|
|
kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
|
|
rm /var/run/dhclient.leases-$GIFNAME
|
|
kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
|
|
ipaddr=`echo "$*" | sed 's/.* ip_addr=\([^ ]*\).*/\1/'`
|
|
ipmask=`echo "$*" | sed 's/.* ip_mask=\([^ ]*\).*/\1/'`
|
|
goipaddr=`echo "$*" | sed 's/.* go_ip_addr=\([^ ]*\).*/\1/'`
|
|
if echo "$ipaddr$ipmask$goipaddr" | grep -q ' '; then
|
|
ipaddr=""
|
|
ipmask=""
|
|
goipaddr=""
|
|
fi
|
|
if [ -n "$ipaddr" ]; then
|
|
sudo ifconfig $GIFNAME "$ipaddr" netmask "$ipmask"
|
|
sudo ip ro re default via "$goipaddr"
|
|
exit 0
|
|
fi
|
|
dhclient -pf /var/run/dhclient-$GIFNAME.pid \
|
|
-lf /var/run/dhclient.leases-$GIFNAME \
|
|
-nw \
|
|
$GIFNAME
|
|
fi
|
|
fi
|
|
|
|
if [ "$CMD" = "P2P-GROUP-REMOVED" ]; then
|
|
GIFNAME=$3
|
|
if [ "$4" = "GO" ]; then
|
|
kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
|
|
ifconfig $GIFNAME 0.0.0.0
|
|
fi
|
|
if [ "$4" = "client" ]; then
|
|
kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
|
|
rm /var/run/dhclient.leases-$GIFNAME
|
|
ifconfig $GIFNAME 0.0.0.0
|
|
fi
|
|
fi
|
|
|
|
if [ "$CMD" = "P2P-CROSS-CONNECT-ENABLE" ]; then
|
|
GIFNAME=$3
|
|
UPLINK=$4
|
|
# enable NAT/masquerade $GIFNAME -> $UPLINK
|
|
iptables -P FORWARD DROP
|
|
iptables -t nat -A POSTROUTING -o $UPLINK -j MASQUERADE
|
|
iptables -A FORWARD -i $UPLINK -o $GIFNAME -m state --state RELATED,ESTABLISHED -j ACCEPT
|
|
iptables -A FORWARD -i $GIFNAME -o $UPLINK -j ACCEPT
|
|
sysctl net.ipv4.ip_forward=1
|
|
fi
|
|
|
|
if [ "$CMD" = "P2P-CROSS-CONNECT-DISABLE" ]; then
|
|
GIFNAME=$3
|
|
UPLINK=$4
|
|
# disable NAT/masquerade $GIFNAME -> $UPLINK
|
|
sysctl net.ipv4.ip_forward=0
|
|
iptables -t nat -D POSTROUTING -o $UPLINK -j MASQUERADE
|
|
iptables -D FORWARD -i $UPLINK -o $GIFNAME -m state --state RELATED,ESTABLISHED -j ACCEPT
|
|
iptables -D FORWARD -i $GIFNAME -o $UPLINK -j ACCEPT
|
|
fi
|