| #!/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 |