Fix reource leak problem (Prevent)
[platform/core/connectivity/wifi-mesh-manager.git] / files / wmesh.sh.in
1 #!/bin/sh
2 PATH=/bin:/usr/bin:/sbin:/usr/sbin
3 MESH_INTERFACE='mesh0'
4 BRIDGE_INTERFACE='br0'
5 ETHER_INTERFACE='wlan0'
6 HOSTAP_CONFIG='/etc/mesh/hostapd.conf'
7 MESH_CHANNEL='161'
8
9 MESH_ID='meshnet'
10 WLAN_INTERFACE=$3
11 ROLE=$1
12
13 usage()
14 {
15         /bin/echo "$0 <gate|station> <start|stop> [interface] [mesh_id]"
16         /bin/echo "ex) Mesh Gate :"
17         /bin/echo "    $0 gate start"
18         /bin/echo "    $0 gate start wlan0 mesh-area"
19         /bin/echo "ex) Mesh Station :"
20         /bin/echo "    $0 station start"
21         /bin/echo "    $0 station start wlan1 mesh-area"
22         exit 1
23 }
24
25 start()
26 {
27         # Verify interface
28         if [ -a "/sys/class/net/$WLAN_INTERFACE" ]
29         then
30                 /bin/echo "Use interface [$WLAN_INTERFACE]."
31         else
32                 /bin/echo "Interface [$WLAN_INTERFACE] is not valid."
33                 exit 1
34         fi
35
36         case $ROLE in
37                 "gate")
38                         /bin/echo "Setting mesh gate..."
39                         /bin/echo "  setting mesh interface.."
40
41 ## Enable mesh
42                         # Add virtual interface
43                         @SBIN_DIR@/iw dev $WLAN_INTERFACE set type managed
44                         @SBIN_DIR@/ifconfig $WLAN_INTERFACE up
45                         @SBIN_DIR@/iw dev $WLAN_INTERFACE interface add $MESH_INTERFACE type mp
46                         @SBIN_DIR@/ifconfig $WLAN_INTERFACE down
47                         @SBIN_DIR@/ifconfig $MESH_INTERFACE up
48
49                         # Create bridge with mesh network
50                         /bin/echo "  setting bridge.."
51                         @SBIN_DIR@/brctl addbr $BRIDGE_INTERFACE
52                         @SBIN_DIR@/brctl stp $BRIDGE_INTERFACE on
53                         #@SBIN_DIR@/brctl setfd $BRIDGE_INTERFACE 0
54                         @SBIN_DIR@/brctl addif $BRIDGE_INTERFACE $MESH_INTERFACE
55                         @SBIN_DIR@/ifconfig $MESH_INTERFACE down
56                         @SBIN_DIR@/ifconfig $MESH_INTERFACE 0.0.0.0 up
57                         @SBIN_DIR@/ifconfig $BRIDGE_INTERFACE up
58
59 ## Join mesh
60                         # Join(create) specific mesh network
61                         # NOTICE: [iw dev ## set channel] should be performed before join
62                         @SBIN_DIR@/iw dev $MESH_INTERFACE set channel $MESH_CHANNEL
63                         @SBIN_DIR@/iw dev $MESH_INTERFACE mesh join $MESH_ID
64
65 ## Set gate
66                         # Add external network into bridge
67                         @SBIN_DIR@/brctl addif $BRIDGE_INTERFACE $ETHER_INTERFACE
68                         @SBIN_DIR@/ifconfig $ETHER_INTERFACE down
69                         @SBIN_DIR@/ifconfig $ETHER_INTERFACE 0.0.0.0 up
70
71                         # Announce mesh gate
72                         /bin/echo "  announce mesh gate.."
73                         @SBIN_DIR@/iw $MESH_INTERFACE set mesh_param mesh_hwmp_rootmode=4
74                         @SBIN_DIR@/iw $MESH_INTERFACE set mesh_param mesh_gate_announcements=1
75
76                         # Get MAC address from eth0
77                         #ETH_MAC_ADDR=`@SBIN_DIR@/ifconfig $ETHER_INTERFACE | /usr/bin/sed -n '/ether/p' | /usr/bin/awk "{print \\$2}"`
78                         #echo "========================"
79                         #echo $ETH_MAC_ADDR
80                         #@SBIN_DIR@/ifconfig $BRIDGE_INTERFACE hw ether $ETH_MAC_ADDR
81
82                         # Do scan
83                         @SBIN_DIR@/iw $MESH_INTERFACE scan > /dev/null
84
85                         # Set IP into bridge interface
86                         /bin/echo "  Get IP address with DHCP.."
87                         #/usr/bin/dhcp -v -i $BRIDGE_INTERFACE
88                         DHCP_IP=`/usr/bin/dhcp -i br0 | grep 'obtained' | /usr/bin/awk "{print \\$3}"`
89                         /bin/echo "  IP [$DHCP_IP] obtained"
90                         @SBIN_DIR@/ifconfig $BRIDGE_INTERFACE $DHCP_IP
91                 ;;
92                 "station")
93                         /bin/echo "Setting mesh station..."
94                         # Add virtual interface
95                         /bin/echo "  setting mesh interface.."
96                         @SBIN_DIR@/iw dev $WLAN_INTERFACE set type managed
97                         @SBIN_DIR@/ifconfig $WLAN_INTERFACE up
98                         @SBIN_DIR@/iw dev $WLAN_INTERFACE interface add $MESH_INTERFACE type mp
99                         @SBIN_DIR@/ifconfig $WLAN_INTERFACE down
100                         @SBIN_DIR@/ifconfig $MESH_INTERFACE up
101
102                         # Create bridge with mesh network
103                         /bin/echo "  setting bridge.."
104                         @SBIN_DIR@/brctl addbr $BRIDGE_INTERFACE
105                         @SBIN_DIR@/brctl stp $BRIDGE_INTERFACE on
106                         @SBIN_DIR@/brctl setfd $BRIDGE_INTERFACE 0
107                         @SBIN_DIR@/brctl addif $BRIDGE_INTERFACE $MESH_INTERFACE
108                         @SBIN_DIR@/ifconfig $MESH_INTERFACE down
109                         @SBIN_DIR@/ifconfig $MESH_INTERFACE 0.0.0.0 up
110                         @SBIN_DIR@/ifconfig $BRIDGE_INTERFACE up
111
112                         # Join(create) specific mesh network
113                         # NOTICE: [iw dev ## set channel] should be performed before join
114                         @SBIN_DIR@/iw dev $MESH_INTERFACE set channel $MESH_CHANNEL
115                         @SBIN_DIR@/iw dev $MESH_INTERFACE mesh join $MESH_ID
116
117                         # Set Soft AP interface
118                         if [ "wlan0" == "$WLAN_INTERFACE" ]; then
119                                 # Use wlan0 as mesh interface
120                                 sed -i 's/wlan0/wlan1/' $HOSTAP_CONFIG
121                         else
122                                 # Use wlan1 as mesh interface
123                                 sed -i 's/wlan1/wlan0/' $HOSTAP_CONFIG
124                         fi
125
126                         # Change interface mode with wlan script (for artik)
127                         if [ -a "/usr/bin/wlan.sh" ]; then
128                                 if [ "wlan0" == "$WLAN_INTERFACE" ]; then
129                                         sed -i 's/wlan0/wlan1/' /usr/bin/wlan.sh
130                                 fi
131                                 @BIN_DIR@/wlan.sh stop
132                                 @BIN_DIR@/wlan.sh softap
133                                 if [ "wlan0" == "$WLAN_INTERFACE" ]; then
134                                         sed -i 's/wlan1/wlan0/' /usr/bin/wlan.sh
135                                 fi
136                         fi
137                         @SBIN_DIR@/iw $MESH_INTERFACE scan > /dev/null
138
139                         # Launch hostapd
140                         /bin/echo "  launching soft ap.."
141                         @SBIN_DIR@/hostapd -e /opt/var/lib/misc/hostapd.bin $HOSTAP_CONFIG -f /var/log/hostapd_mesh.log -dd &
142
143                         # Set IP into bridge interface
144                         /bin/echo "  Get IP address with DHCP.."
145                         #/usr/bin/dhcp -v -i $BRIDGE_INTERFACE
146                         DHCP_IP=`/usr/bin/dhcp -v -i br0 | grep 'obtained' | /usr/bin/awk "{print \\$3}"`
147                         /bin/echo "  IP [$DHCP_IP] obtained"
148                         @SBIN_DIR@/ifconfig $BRIDGE_INTERFACE $DHCP_IP
149                 ;;
150                 *)
151                         /bin/echo "Role [$ROLE] is not valid."
152                 ;;
153         esac
154 }
155
156 stop()
157 {
158         case $ROLE in
159                 "station")
160                         @BIN_DIR@/pkill -x hostapd
161                 ;;
162         esac
163
164         # Remove interfaces
165         if [ -a "/sys/class/net/$BRIDGE_INTERFACE" ]
166         then
167                 @SBIN_DIR@/ifconfig $BRIDGE_INTERFACE down
168                 @SBIN_DIR@/brctl delbr $BRIDGE_INTERFACE
169         fi
170
171         if [ -a "/sys/class/net/$MESH_INTERFACE" ]
172         then
173                 @SBIN_DIR@/iw dev $MESH_INTERFACE del
174         fi
175
176         # Revert wlan interface
177         @SBIN_DIR@/ifconfig $WLAN_INTERFACE up
178 }
179
180 if [ $# -lt 2 ]; then
181         usage
182 fi
183
184 if [ -n "$4" ]
185 then
186         /bin/echo "Use mesh id [$MESH_ID]"
187         MESH_ID="$4"
188 fi
189
190 if [ -z "$WLAN_INTERFACE" ]
191 then
192         case $ROLE in
193                 "gate")
194                         WLAN_INTERFACE='wlan0'
195                 ;;
196                 "station")
197                         WLAN_INTERFACE='wlan1'
198                 ;;
199                 *)
200                         WLAN_INTERFACE=''
201                         usage
202                 ;;
203         esac
204 fi
205
206 case $2 in
207         "start")
208                 start
209         ;;
210         "stop")
211                 stop
212         ;;
213         *)
214                 usage
215         ;;
216 esac