|
@@ -32,21 +32,21 @@ PROJECT_NAME='freedombone'
|
32
|
32
|
COMPLETION_FILE=/root/${PROJECT_NAME}-completed.txt
|
33
|
33
|
|
34
|
34
|
if [[ $1 == "start" ]]; then
|
35
|
|
- # install avahi
|
36
|
|
- sed -i "s|#host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf
|
37
|
|
- sed -i "s|host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf
|
38
|
|
- sed -i "s|use-ipv4=.*|use-ipv4=yes|g" /etc/avahi/avahi-daemon.conf
|
39
|
|
- sed -i "s|use-ipv6=.*|use-ipv6=no|g" /etc/avahi/avahi-daemon.conf
|
40
|
|
- sed -i "s|#disallow-other-stacks=.*|disallow-other-stacks=yes|g" /etc/avahi/avahi-daemon.conf
|
41
|
|
- sed -i "s|hosts:.*|hosts: files mdns4_minimal dns mdns4 mdns|g" /etc/nsswitch.conf
|
|
35
|
+ # install avahi
|
|
36
|
+ sed -i "s|#host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf
|
|
37
|
+ sed -i "s|host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf
|
|
38
|
+ sed -i "s|use-ipv4=.*|use-ipv4=yes|g" /etc/avahi/avahi-daemon.conf
|
|
39
|
+ sed -i "s|use-ipv6=.*|use-ipv6=no|g" /etc/avahi/avahi-daemon.conf
|
|
40
|
+ sed -i "s|#disallow-other-stacks=.*|disallow-other-stacks=yes|g" /etc/avahi/avahi-daemon.conf
|
|
41
|
+ sed -i "s|hosts:.*|hosts: files mdns4_minimal dns mdns4 mdns|g" /etc/nsswitch.conf
|
42
|
42
|
fi
|
43
|
43
|
|
44
|
44
|
# Mesh definition
|
45
|
45
|
WIFI_SSID=
|
46
|
46
|
if ! grep -q "WIFI_SSID:" $COMPLETION_FILE; then
|
47
|
|
- WIFI_SSID='mesh'
|
|
47
|
+ WIFI_SSID='mesh'
|
48
|
48
|
else
|
49
|
|
- WIFI_SSID=$(cat $COMPLETION_FILE | grep "WIFI_SSID:" | awk -F ':' '{print $2}')
|
|
49
|
+ WIFI_SSID=$(cat $COMPLETION_FILE | grep "WIFI_SSID:" | awk -F ':' '{print $2}')
|
50
|
50
|
fi
|
51
|
51
|
sed -i "s|WIFI_SSID:.*|WIFI_SSID:${WIFI_SSID}|g" $COMPLETION_FILE
|
52
|
52
|
|
|
@@ -54,9 +54,9 @@ CELLID='any'
|
54
|
54
|
|
55
|
55
|
CHANNEL=
|
56
|
56
|
if ! grep -q "Wifi channel:" $COMPLETION_FILE; then
|
57
|
|
- CHANNEL=2
|
|
57
|
+ CHANNEL=2
|
58
|
58
|
else
|
59
|
|
- CHANNEL=$(cat $COMPLETION_FILE | grep "Wifi channel:" | awk -F ':' '{print $2}')
|
|
59
|
+ CHANNEL=$(cat $COMPLETION_FILE | grep "Wifi channel:" | awk -F ':' '{print $2}')
|
60
|
60
|
fi
|
61
|
61
|
sed -i "s|Wifi channel:.*|Wifi channel:${CHANNEL}|g" $COMPLETION_FILE
|
62
|
62
|
|
|
@@ -69,170 +69,187 @@ IFACE='wlan0'
|
69
|
69
|
EIFACE=eth0
|
70
|
70
|
|
71
|
71
|
if [[ $IFACE == "wlan0" ]]; then
|
72
|
|
- if grep -q "wlan1" /proc/net/dev; then
|
73
|
|
- IFACE=wlan1
|
74
|
|
- fi
|
|
72
|
+ if grep -q "wlan1" /proc/net/dev; then
|
|
73
|
+ IFACE=wlan1
|
|
74
|
+ fi
|
75
|
75
|
fi
|
76
|
76
|
if [[ $IFACE == "wlan0" ]]; then
|
77
|
|
- if grep -q "wlan2" /proc/net/dev; then
|
78
|
|
- IFACE=wlan2
|
79
|
|
- fi
|
|
77
|
+ if grep -q "wlan2" /proc/net/dev; then
|
|
78
|
+ IFACE=wlan2
|
|
79
|
+ fi
|
80
|
80
|
fi
|
81
|
81
|
if [[ $IFACE == "wlan0" ]]; then
|
82
|
|
- if grep -q "wlan3" /proc/net/dev; then
|
83
|
|
- IFACE=wlan3
|
84
|
|
- fi
|
|
82
|
+ if grep -q "wlan3" /proc/net/dev; then
|
|
83
|
+ IFACE=wlan3
|
|
84
|
+ fi
|
85
|
85
|
fi
|
86
|
86
|
|
87
|
87
|
if [ -e /etc/default/batctl ]; then
|
88
|
|
- . /etc/default/batctl
|
|
88
|
+ . /etc/default/batctl
|
89
|
89
|
fi
|
90
|
90
|
|
91
|
91
|
function status {
|
92
|
|
- batctl o
|
|
92
|
+ batctl o
|
93
|
93
|
}
|
94
|
94
|
|
95
|
95
|
function stop {
|
96
|
|
- if [ -z "$IFACE" ]; then
|
97
|
|
- echo 'error: unable to find wifi interface, not enabling batman-adv mesh'
|
98
|
|
- return
|
99
|
|
- fi
|
100
|
|
- if [ "$EIFACE" ]; then
|
101
|
|
- brctl delif $BRIDGE bat0
|
102
|
|
- brctl delif $BRIDGE $EIFACE
|
103
|
|
- ifconfig $BRIDGE down || true
|
104
|
|
- brctl delbr $BRIDGE
|
105
|
|
- ifconfig $EIFACE down -promisc
|
106
|
|
- fi
|
107
|
|
-
|
108
|
|
- avahi-autoipd -k $BRIDGE
|
109
|
|
- avahi-autoipd -k $IFACE
|
110
|
|
- ifconfig bat0 down -promisc
|
111
|
|
-
|
112
|
|
- batctl if del $IFACE
|
113
|
|
- rmmod batman-adv
|
114
|
|
- ifconfig $IFACE mtu 1500
|
115
|
|
- ifconfig $IFACE down
|
116
|
|
- iwconfig $IFACE mode managed
|
117
|
|
-
|
118
|
|
- iptables -D INPUT -p tcp --dport 548 -j ACCEPT
|
119
|
|
- iptables -D INPUT -p udp --dport 548 -j ACCEPT
|
120
|
|
- iptables -D INPUT -p tcp --dport 5353 -j ACCEPT
|
121
|
|
- iptables -D INPUT -p udp --dport 5353 -j ACCEPT
|
122
|
|
- iptables -D INPUT -p tcp --dport 5354 -j ACCEPT
|
123
|
|
- iptables -D INPUT -p udp --dport 5354 -j ACCEPT
|
124
|
|
- iptables -D INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT
|
125
|
|
- iptables -D INPUT -p udp --dport $ZERONET_PORT -j ACCEPT
|
126
|
|
- iptables -D INPUT -p tcp --dport $IPFS_PORT -j ACCEPT
|
127
|
|
-
|
128
|
|
- systemctl restart network-manager
|
|
96
|
+ if [ -z "$IFACE" ]; then
|
|
97
|
+ echo 'error: unable to find wifi interface, not enabling batman-adv mesh'
|
|
98
|
+ return
|
|
99
|
+ fi
|
|
100
|
+ if [ "$EIFACE" ]; then
|
|
101
|
+ brctl delif $BRIDGE bat0
|
|
102
|
+ brctl delif $BRIDGE $EIFACE
|
|
103
|
+ ifconfig $BRIDGE down || true
|
|
104
|
+ brctl delbr $BRIDGE
|
|
105
|
+ ifconfig $EIFACE down -promisc
|
|
106
|
+ fi
|
|
107
|
+
|
|
108
|
+ avahi-autoipd -k $BRIDGE
|
|
109
|
+ avahi-autoipd -k $IFACE
|
|
110
|
+ ifconfig bat0 down -promisc
|
|
111
|
+
|
|
112
|
+ batctl if del $IFACE
|
|
113
|
+ rmmod batman-adv
|
|
114
|
+ ifconfig $IFACE mtu 1500
|
|
115
|
+ ifconfig $IFACE down
|
|
116
|
+ iwconfig $IFACE mode managed
|
|
117
|
+
|
|
118
|
+ iptables -D INPUT -p tcp --dport 548 -j ACCEPT
|
|
119
|
+ iptables -D INPUT -p udp --dport 548 -j ACCEPT
|
|
120
|
+ iptables -D INPUT -p tcp --dport 5353 -j ACCEPT
|
|
121
|
+ iptables -D INPUT -p udp --dport 5353 -j ACCEPT
|
|
122
|
+ iptables -D INPUT -p tcp --dport 5354 -j ACCEPT
|
|
123
|
+ iptables -D INPUT -p udp --dport 5354 -j ACCEPT
|
|
124
|
+ iptables -D INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT
|
|
125
|
+ iptables -D INPUT -p udp --dport $ZERONET_PORT -j ACCEPT
|
|
126
|
+ iptables -D INPUT -p tcp --dport $IPFS_PORT -j ACCEPT
|
|
127
|
+
|
|
128
|
+ systemctl restart network-manager
|
129
|
129
|
}
|
130
|
130
|
|
131
|
131
|
function verify {
|
132
|
|
- tempfile="$(mktemp)"
|
133
|
|
- batctl o > $tempfile
|
134
|
|
- if grep -q "disabled" $tempfile; then
|
135
|
|
- echo $'B.A.T.M.A.N. not enabled'
|
136
|
|
- rm $tempfile
|
137
|
|
- stop
|
138
|
|
- exit 726835
|
139
|
|
- fi
|
140
|
|
- echo $'B.A.T.M.A.N. is running'
|
141
|
|
- rm $tempfile
|
|
132
|
+ tempfile="$(mktemp)"
|
|
133
|
+ batctl o > $tempfile
|
|
134
|
+ if grep -q "disabled" $tempfile; then
|
|
135
|
+ echo $'B.A.T.M.A.N. not enabled'
|
|
136
|
+ rm $tempfile
|
|
137
|
+ stop
|
|
138
|
+ exit 726835
|
|
139
|
+ fi
|
|
140
|
+ echo $'B.A.T.M.A.N. is running'
|
|
141
|
+ rm $tempfile
|
|
142
|
+}
|
|
143
|
+
|
|
144
|
+function assign_peer_address {
|
|
145
|
+ for i in {1..6}; do
|
|
146
|
+ number=$RANDOM
|
|
147
|
+ let "number %= 255"
|
|
148
|
+ octet=$(echo "obase=16;$number" | bc)
|
|
149
|
+ if [ ${#octet} -lt 2 ]; then
|
|
150
|
+ octet="0${octet}"
|
|
151
|
+ fi
|
|
152
|
+ if [ $i -gt 1 ]; then
|
|
153
|
+ echo -n ":"
|
|
154
|
+ fi
|
|
155
|
+ echo -n "${octet}"
|
|
156
|
+ done
|
|
157
|
+ echo ''
|
142
|
158
|
}
|
143
|
159
|
|
144
|
160
|
function start {
|
145
|
|
- if [ -z "$IFACE" ] ; then
|
146
|
|
- echo 'error: unable to find wifi interface, not enabling batman-adv mesh'
|
147
|
|
- exit 723657
|
148
|
|
- fi
|
149
|
|
- echo "info: enabling batman-adv mesh network $WIFI_SSID on $IFACE"
|
150
|
|
-
|
151
|
|
- systemctl stop network-manager
|
152
|
|
- sleep 5
|
153
|
|
-
|
154
|
|
- # remove an avahi service which isn't used
|
155
|
|
- if [ -f /etc/avahi/services/udisks.service ]; then
|
156
|
|
- sudo rm /etc/avahi/services/udisks.service
|
157
|
|
- fi
|
158
|
|
-
|
159
|
|
- # Might have to re-enable wifi
|
160
|
|
- rfkill unblock $(rfkill list|awk -F: "/phy/ {print $1}") || true
|
161
|
|
-
|
162
|
|
- ifconfig $IFACE down
|
163
|
|
- ifconfig $IFACE mtu 1532
|
164
|
|
- iwconfig $IFACE enc off
|
165
|
|
- iwconfig $IFACE mode ad-hoc essid $WIFI_SSID channel $CHANNEL
|
166
|
|
- sleep 1
|
167
|
|
- iwconfig $IFACE ap $CELLID
|
168
|
|
-
|
169
|
|
- modprobe batman-adv
|
170
|
|
- batctl if add $IFACE
|
171
|
|
- ifconfig $IFACE up
|
172
|
|
- avahi-autoipd --force-bind --daemonize --wait $BRIDGE
|
173
|
|
- avahi-autoipd --force-bind --daemonize --wait $IFACE
|
174
|
|
- ifconfig bat0 up promisc
|
175
|
|
-
|
176
|
|
- #Use persistent HWAddr
|
177
|
|
- ether_new=$(ifconfig eth0 | grep HWaddr | sed -e "s/.*HWaddr //")
|
178
|
|
- if [ ! -f /var/lib/mesh-node/bat0 ]; then
|
179
|
|
- mkdir /var/lib/mesh-node
|
180
|
|
- echo "${ether_new}" > /var/lib/mesh-node/bat0
|
181
|
|
- else
|
182
|
|
- ether=$(cat /var/lib/mesh-node/bat0)
|
183
|
|
- ifconfig bat0 hw ether ${ether}
|
184
|
|
- fi
|
185
|
|
-
|
186
|
|
- if [ "$EIFACE" ] ; then
|
187
|
|
- brctl addbr $BRIDGE
|
188
|
|
- brctl addif $BRIDGE bat0
|
189
|
|
- brctl addif $BRIDGE $EIFACE
|
190
|
|
- ifconfig bat0 0.0.0.0
|
191
|
|
- ifconfig $EIFACE 0.0.0.0
|
192
|
|
- ifconfig $EIFACE up promisc
|
193
|
|
- ifconfig $BRIDGE up
|
194
|
|
- fi
|
195
|
|
-
|
196
|
|
- iptables -A INPUT -p tcp --dport 548 -j ACCEPT
|
197
|
|
- iptables -A INPUT -p udp --dport 548 -j ACCEPT
|
198
|
|
- iptables -A INPUT -p tcp --dport 5353 -j ACCEPT
|
199
|
|
- iptables -A INPUT -p udp --dport 5353 -j ACCEPT
|
200
|
|
- iptables -A INPUT -p tcp --dport 5354 -j ACCEPT
|
201
|
|
- iptables -A INPUT -p udp --dport 5354 -j ACCEPT
|
202
|
|
- iptables -A INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT
|
203
|
|
- iptables -A INPUT -p udp --dport $ZERONET_PORT -j ACCEPT
|
204
|
|
- iptables -A INPUT -p tcp --dport $IPFS_PORT -j ACCEPT
|
205
|
|
-
|
206
|
|
- systemctl restart avahi-daemon
|
207
|
|
-
|
208
|
|
- verify
|
|
161
|
+ if [ -z "$IFACE" ] ; then
|
|
162
|
+ echo 'error: unable to find wifi interface, not enabling batman-adv mesh'
|
|
163
|
+ exit 723657
|
|
164
|
+ fi
|
|
165
|
+ echo "info: enabling batman-adv mesh network $WIFI_SSID on $IFACE"
|
|
166
|
+
|
|
167
|
+ systemctl stop network-manager
|
|
168
|
+ sleep 5
|
|
169
|
+
|
|
170
|
+ # remove an avahi service which isn't used
|
|
171
|
+ if [ -f /etc/avahi/services/udisks.service ]; then
|
|
172
|
+ sudo rm /etc/avahi/services/udisks.service
|
|
173
|
+ fi
|
|
174
|
+
|
|
175
|
+ # Might have to re-enable wifi
|
|
176
|
+ rfkill unblock $(rfkill list|awk -F: "/phy/ {print $1}") || true
|
|
177
|
+
|
|
178
|
+ ifconfig $IFACE down
|
|
179
|
+ ifconfig $IFACE mtu 1532
|
|
180
|
+ ifconfig $IFACE hw ether $(assign_peer_address)
|
|
181
|
+ iwconfig $IFACE enc off
|
|
182
|
+ iwconfig $IFACE mode ad-hoc essid $WIFI_SSID channel $CHANNEL
|
|
183
|
+ sleep 1
|
|
184
|
+ iwconfig $IFACE ap $CELLID
|
|
185
|
+
|
|
186
|
+ modprobe batman-adv
|
|
187
|
+ batctl if add $IFACE
|
|
188
|
+ ifconfig $IFACE up
|
|
189
|
+ avahi-autoipd --force-bind --daemonize --wait $BRIDGE
|
|
190
|
+ avahi-autoipd --force-bind --daemonize --wait $IFACE
|
|
191
|
+ ifconfig bat0 up promisc
|
|
192
|
+
|
|
193
|
+ #Use persistent HWAddr
|
|
194
|
+ ether_new=$(ifconfig eth0 | grep HWaddr | sed -e "s/.*HWaddr //")
|
|
195
|
+ if [ ! -f /var/lib/mesh-node/bat0 ]; then
|
|
196
|
+ mkdir /var/lib/mesh-node
|
|
197
|
+ echo "${ether_new}" > /var/lib/mesh-node/bat0
|
|
198
|
+ else
|
|
199
|
+ ether=$(cat /var/lib/mesh-node/bat0)
|
|
200
|
+ ifconfig bat0 hw ether ${ether}
|
|
201
|
+ fi
|
|
202
|
+
|
|
203
|
+ if [ "$EIFACE" ] ; then
|
|
204
|
+ brctl addbr $BRIDGE
|
|
205
|
+ brctl addif $BRIDGE bat0
|
|
206
|
+ brctl addif $BRIDGE $EIFACE
|
|
207
|
+ ifconfig bat0 0.0.0.0
|
|
208
|
+ ifconfig $EIFACE 0.0.0.0
|
|
209
|
+ ifconfig $EIFACE up promisc
|
|
210
|
+ ifconfig $BRIDGE up
|
|
211
|
+ fi
|
|
212
|
+
|
|
213
|
+ iptables -A INPUT -p tcp --dport 548 -j ACCEPT
|
|
214
|
+ iptables -A INPUT -p udp --dport 548 -j ACCEPT
|
|
215
|
+ iptables -A INPUT -p tcp --dport 5353 -j ACCEPT
|
|
216
|
+ iptables -A INPUT -p udp --dport 5353 -j ACCEPT
|
|
217
|
+ iptables -A INPUT -p tcp --dport 5354 -j ACCEPT
|
|
218
|
+ iptables -A INPUT -p udp --dport 5354 -j ACCEPT
|
|
219
|
+ iptables -A INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT
|
|
220
|
+ iptables -A INPUT -p udp --dport $ZERONET_PORT -j ACCEPT
|
|
221
|
+ iptables -A INPUT -p tcp --dport $IPFS_PORT -j ACCEPT
|
|
222
|
+
|
|
223
|
+ systemctl restart avahi-daemon
|
|
224
|
+
|
|
225
|
+ verify
|
209
|
226
|
}
|
210
|
227
|
|
211
|
228
|
if ! grep -q "$IFACE" /proc/net/dev; then
|
212
|
|
- echo 'Interface $IFACE was not found'
|
213
|
|
- stop
|
214
|
|
- exit 1
|
|
229
|
+ echo 'Interface $IFACE was not found'
|
|
230
|
+ stop
|
|
231
|
+ exit 1
|
215
|
232
|
fi
|
216
|
233
|
|
217
|
234
|
case "$1" in
|
218
|
|
- start|stop|status)
|
219
|
|
- $1
|
220
|
|
- ;;
|
221
|
|
- restart)
|
222
|
|
- stop
|
223
|
|
- sleep 10
|
224
|
|
- start
|
225
|
|
- ;;
|
226
|
|
- ping)
|
227
|
|
- batctl ping $2
|
228
|
|
- ;;
|
229
|
|
- ls|list)
|
230
|
|
- avahi-browse -atl
|
231
|
|
- ;;
|
232
|
|
- *)
|
233
|
|
- echo "error: invalid parameter $1"
|
234
|
|
- echo 'usage: $0 {start|stop|restart|status|ping|ls|list}'
|
235
|
|
- exit 2
|
236
|
|
- ;;
|
|
235
|
+ start|stop|status)
|
|
236
|
+ $1
|
|
237
|
+ ;;
|
|
238
|
+ restart)
|
|
239
|
+ stop
|
|
240
|
+ sleep 10
|
|
241
|
+ start
|
|
242
|
+ ;;
|
|
243
|
+ ping)
|
|
244
|
+ batctl ping $2
|
|
245
|
+ ;;
|
|
246
|
+ ls|list)
|
|
247
|
+ avahi-browse -atl
|
|
248
|
+ ;;
|
|
249
|
+ *)
|
|
250
|
+ echo "error: invalid parameter $1"
|
|
251
|
+ echo 'usage: $0 {start|stop|restart|status|ping|ls|list}'
|
|
252
|
+ exit 2
|
|
253
|
+ ;;
|
237
|
254
|
esac
|
238
|
255
|
exit 0
|