1#!/bin/sh 2 3IFNAME=$1 4CMD=$2 5 6kill_daemon() { 7 NAME=$1 8 PF=$2 9 10 if [ ! -r $PF ]; then 11 return 12 fi 13 14 PID=`cat $PF` 15 if [ $PID -gt 0 ]; then 16 if ps $PID | grep -q $NAME; then 17 kill $PID 18 fi 19 fi 20 rm $PF 21} 22 23 24echo "$1 $2 $3 $4" 25if [ "$CMD" = "P2P-GROUP-STARTED" ]; then 26 GIFNAME=$3 27 echo "P2P-GROUP-STARTED $3 $4" 28 if [ "$4" = "GO" ]; then 29 kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid 30 rm /var/run/dhclient.leases-$GIFNAME 31 kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME 32 ifconfig $GIFNAME 192.168.42.1 up 33 if ! dnsmasq -x /var/run/dnsmasq.pid-$GIFNAME \ 34 -i $GIFNAME \ 35 -F192.168.42.11,192.168.42.99; then 36 # another dnsmasq instance may be running and blocking us; try to 37 # start with -z to avoid that 38 dnsmasq -x /var/run/dnsmasq.pid-$GIFNAME \ 39 -i $GIFNAME \ 40 -F192.168.42.11,192.168.42.99 --listen-address 192.168.42.1 -z -p 0 41 fi 42 fi 43 if [ "$4" = "client" ]; then 44 kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid 45 rm /var/run/dhclient.leases-$GIFNAME 46 kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME 47 ipaddr=`echo "$*" | sed 's/.* ip_addr=\([^ ]*\).*/\1/'` 48 ipmask=`echo "$*" | sed 's/.* ip_mask=\([^ ]*\).*/\1/'` 49 goipaddr=`echo "$*" | sed 's/.* go_ip_addr=\([^ ]*\).*/\1/'` 50 if echo "$ipaddr$ipmask$goipaddr" | grep -q ' '; then 51 ipaddr="" 52 ipmask="" 53 goipaddr="" 54 fi 55 if [ -n "$ipaddr" ]; then 56 sudo ifconfig $GIFNAME "$ipaddr" netmask "$ipmask" 57 sudo ip ro re default via "$goipaddr" 58 exit 0 59 fi 60 dhclient -pf /var/run/dhclient-$GIFNAME.pid \ 61 -lf /var/run/dhclient.leases-$GIFNAME \ 62 -nw \ 63 $GIFNAME 64 fi 65fi 66#if [ "$CMD" = "CONNECTED" ]; then 67 68# echo connect $IFNAME, dhclient for it > /dev/console 69 70# dhclient $IFNAME 71 72#fi 73 74#if [ "$CMD" = "DISCONNECTED" ]; then 75 76# echo disconnect $IFNAME, kill dhclient for it > /dev/console 77 78# killall dhclient 79 80#fi 81 82if [ "$CMD" = "P2P-GROUP-REMOVED" ]; then 83 GIFNAME=$3 84 if [ "$4" = "GO" ]; then 85 kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME 86 ifconfig $GIFNAME 0.0.0.0 87 fi 88 if [ "$4" = "client" ]; then 89 kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid 90 rm /var/run/dhclient.leases-$GIFNAME 91 ifconfig $GIFNAME 0.0.0.0 92 fi 93fi 94 95if [ "$CMD" = "P2P-CROSS-CONNECT-ENABLE" ]; then 96 GIFNAME=$3 97 UPLINK=$4 98 echo "p2p-corss-connect-enable ifname=$GIFNAME upLink=$UPLINK" 99 # enable NAT/masquarade $GIFNAME -> $UPLINK 100 iptables -P FORWARD DROP 101 iptables -t nat -A POSTROUTING -o $UPLINK -j MASQUERADE 102 iptables -A FORWARD -i $UPLINK -o $GIFNAME -m state --state RELATED,ESTABLISHED -j ACCEPT 103 iptables -A FORWARD -i $GIFNAME -o $UPLINK -j ACCEPT 104 sysctl net.ipv4.ip_forward=1 105fi 106 107if [ "$CMD" = "P2P-CROSS-CONNECT-DISABLE" ]; then 108 GIFNAME=$3 109 UPLINK=$4 110 # disable NAT/masquarade $GIFNAME -> $UPLINK 111 sysctl net.ipv4.ip_forward=0 112 iptables -t nat -D POSTROUTING -o $UPLINK -j MASQUERADE 113 iptables -D FORWARD -i $UPLINK -o $GIFNAME -m state --state RELATED,ESTABLISHED -j ACCEPT 114 iptables -D FORWARD -i $GIFNAME -o $UPLINK -j ACCEPT 115fi 116