hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/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
}
 
 
echo "$1 $2 $3 $4"
if [ "$CMD" = "P2P-GROUP-STARTED" ]; then
    GIFNAME=$3
    echo "P2P-GROUP-STARTED $3 $4"
    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" = "CONNECTED" ]; then
 
#   echo connect $IFNAME, dhclient for it > /dev/console
 
#   dhclient $IFNAME
 
#fi
 
#if [ "$CMD" = "DISCONNECTED" ]; then
 
#   echo disconnect $IFNAME, kill dhclient for it > /dev/console
 
#   killall dhclient
 
#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
    echo "p2p-corss-connect-enable ifname=$GIFNAME upLink=$UPLINK"
    # enable NAT/masquarade $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/masquarade $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