Procházet zdrojové kódy

Add babel mesh routing protocol

Bob Mottram před 7 roky
rodič
revize
3d52e70630

+ 40
- 0
src/freedombone-image-customise Zobrazit soubor

125
 
125
 
126
 MESH_TEXT_EDITOR='pluma'
126
 MESH_TEXT_EDITOR='pluma'
127
 
127
 
128
+BABEL_REPO="https://github.com/jech/babeld"
129
+BABEL_COMMIT='d9390d1fee337c464e67255bbbd879d975e126e2'
130
+
128
 OLSR2_REPO="https://github.com/OLSR/OONF"
131
 OLSR2_REPO="https://github.com/OLSR/OONF"
129
 OLSR2_COMMIT='81033251c4ee1c5699bfee9d2985112c6266ab0a'
132
 OLSR2_COMMIT='81033251c4ee1c5699bfee9d2985112c6266ab0a'
130
 
133
 
671
     chroot "$rootdir" systemctl enable meshshutdown
674
     chroot "$rootdir" systemctl enable meshshutdown
672
 }
675
 }
673
 
676
 
677
+install_babel() {
678
+    git clone $BABEL_REPO $rootdir/etc/babel
679
+
680
+    cat <<EOF > $rootdir/usr/bin/install_babel
681
+#!/bin/bash
682
+cd /etc/babel
683
+git checkout $BABEL_COMMIT -b $BABEL_COMMIT
684
+cd /etc/babel
685
+make
686
+make install
687
+EOF
688
+    chroot "$rootdir" chmod +x /usr/bin/install_babel
689
+    chroot "$rootdir" /usr/bin/install_babel
690
+
691
+    if [ ! -f $rootdir/usr/local/bin/babeld ]; then
692
+        echo $'Unable to build Babel'
693
+        exit 52382524
694
+    fi
695
+
696
+    rm $rootdir/usr/bin/install_babel
697
+
698
+    echo '[Unit]' > $rootdir/etc/systemd/system/babel.service
699
+    echo 'Description=Babel mesh routing protocol' >> $rootdir/etc/systemd/system/babel.service
700
+    echo 'Requires=network.target' >> $rootdir/etc/systemd/system/babel.service
701
+    echo 'After=network.target' >> $rootdir/etc/systemd/system/babel.service
702
+    echo '' >> $rootdir/etc/systemd/system/babel.service
703
+    echo '[Service]' >> $rootdir/etc/systemd/system/babel.service
704
+    echo 'User=root' >> $rootdir/etc/systemd/system/babel.service
705
+    echo 'Group=root' >> $rootdir/etc/systemd/system/babel.service
706
+    echo 'ExecStart=/usr/local/bin/babeld wlan0' >> $rootdir/etc/systemd/system/babel.service
707
+    echo 'Restart=on-failure' >> $rootdir/etc/systemd/system/babel.service
708
+    echo '' >> $rootdir/etc/systemd/system/babel.service
709
+    echo '[Install]' >> $rootdir/etc/systemd/system/babel.service
710
+    echo 'WantedBy=multi-user.target' >> $rootdir/etc/systemd/system/babel.service
711
+}
712
+
674
 install_olsr2() {
713
 install_olsr2() {
675
     chroot "$rootdir" apt-get -yq install cmake libnl-3-dev
714
     chroot "$rootdir" apt-get -yq install cmake libnl-3-dev
676
 
715
 
896
     install_bmx6
935
     install_bmx6
897
     install_bmx7
936
     install_bmx7
898
     install_olsr2
937
     install_olsr2
938
+    install_babel
899
     mesh_shutdown_script
939
     mesh_shutdown_script
900
     install_vpn
940
     install_vpn
901
     install_tomb
941
     install_tomb

+ 4
- 0
src/freedombone-image-mesh Zobrazit soubor

1456
     systemctl disable olsr2
1456
     systemctl disable olsr2
1457
     echo $'OLSR2 disabled' >> $INSTALL_LOG
1457
     echo $'OLSR2 disabled' >> $INSTALL_LOG
1458
 
1458
 
1459
+    systemctl stop babel
1460
+    systemctl disable babel
1461
+    echo $'Babel disabled' >> $INSTALL_LOG
1462
+
1459
     #tomb slam all
1463
     #tomb slam all
1460
     tmp_ram_disk 100
1464
     tmp_ram_disk 100
1461
     enable_predictable_device_names
1465
     enable_predictable_device_names

+ 16
- 0
src/freedombone-mesh-batman Zobrazit soubor

73
     systemctl stop bmx6
73
     systemctl stop bmx6
74
     systemctl stop bmx7
74
     systemctl stop bmx7
75
     systemctl stop olsr2
75
     systemctl stop olsr2
76
+    systemctl stop babel
76
     systemctl disable bmx6
77
     systemctl disable bmx6
77
     systemctl disable bmx7
78
     systemctl disable bmx7
78
     systemctl disable olsr2
79
     systemctl disable olsr2
80
+    systemctl disable babel
79
     systemctl stop dnsmasq
81
     systemctl stop dnsmasq
80
     systemctl disable dnsmasq
82
     systemctl disable dnsmasq
81
 
83
 
210
     sed -i "s|ExecStart=.*|ExecStart=/usr/sbin/bmx6 dev=${IFACE}|g" /etc/systemd/system/bmx6.service
212
     sed -i "s|ExecStart=.*|ExecStart=/usr/sbin/bmx6 dev=${IFACE}|g" /etc/systemd/system/bmx6.service
211
     sed -i "s|ExecStart=.*|ExecStart=/usr/sbin/bmx7 dev=${IFACE}|g" /etc/systemd/system/bmx7.service
213
     sed -i "s|ExecStart=.*|ExecStart=/usr/sbin/bmx7 dev=${IFACE}|g" /etc/systemd/system/bmx7.service
212
     sed -i "s|ExecStart=.*|ExecStart=/usr/local/sbin/olsrd2_static ${IFACE}|g" /etc/systemd/system/olsr2.service
214
     sed -i "s|ExecStart=.*|ExecStart=/usr/local/sbin/olsrd2_static ${IFACE}|g" /etc/systemd/system/olsr2.service
215
+    sed -i "s|ExecStart=.*|ExecStart=/usr/local/bin/babeld ${IFACE}|g" /etc/systemd/system/babel.service
213
     systemctl daemon-reload
216
     systemctl daemon-reload
214
 
217
 
215
     add_wifi_interface $IFACE $WIFI_SSID ad-hoc $CHANNEL
218
     add_wifi_interface $IFACE $WIFI_SSID ad-hoc $CHANNEL
234
             sed -i "s|ExecStart=.*|ExecStart=/usr/sbin/bmx6 dev=${IFACE} dev=${EIFACE}|g" /etc/systemd/system/bmx6.service
237
             sed -i "s|ExecStart=.*|ExecStart=/usr/sbin/bmx6 dev=${IFACE} dev=${EIFACE}|g" /etc/systemd/system/bmx6.service
235
             sed -i "s|ExecStart=.*|ExecStart=/usr/sbin/bmx7 dev=${IFACE} dev=${EIFACE}|g" /etc/systemd/system/bmx7.service
238
             sed -i "s|ExecStart=.*|ExecStart=/usr/sbin/bmx7 dev=${IFACE} dev=${EIFACE}|g" /etc/systemd/system/bmx7.service
236
             sed -i "s|ExecStart=.*|ExecStart=/usr/local/sbin/olsrd2_static ${IFACE} ${EIFACE}|g" /etc/systemd/system/olsr2.service
239
             sed -i "s|ExecStart=.*|ExecStart=/usr/local/sbin/olsrd2_static ${IFACE} ${EIFACE}|g" /etc/systemd/system/olsr2.service
240
+            sed -i "s|ExecStart=.*|ExecStart=/usr/local/bin/babeld ${IFACE} ${EIFACE}|g" /etc/systemd/system/babel.service
237
             systemctl daemon-reload
241
             systemctl daemon-reload
238
         else
242
         else
239
             echo $"$EIFACE is not connected"
243
             echo $"$EIFACE is not connected"
270
     fi
274
     fi
271
 
275
 
272
     if grep -q "olsr" $MESH_DEFAULT_PROTOCOL; then
276
     if grep -q "olsr" $MESH_DEFAULT_PROTOCOL; then
277
+        IFACE=$(cat /etc/systemd/system/olsr2.service | grep ExecStart | awk -F ' ' '{print $2}')
278
+        mesh_generate_ipv6_address $IFACE
279
+
273
         systemctl enable olsr2
280
         systemctl enable olsr2
274
         systemctl restart olsr2
281
         systemctl restart olsr2
275
         sed -i 's|<type>.*|<type>_olsr2._tcp</type>|g' /etc/avahi/services/routing.service
282
         sed -i 's|<type>.*|<type>_olsr2._tcp</type>|g' /etc/avahi/services/routing.service
276
     fi
283
     fi
277
 
284
 
285
+    if grep -q "babel" $MESH_DEFAULT_PROTOCOL; then
286
+        IFACE=$(cat /etc/systemd/system/babel.service | grep ExecStart | awk -F ' ' '{print $2}')
287
+        mesh_generate_ipv6_address $IFACE
288
+
289
+        systemctl enable babel
290
+        systemctl restart babel
291
+        sed -i 's|<type>.*|<type>_babel._tcp</type>|g' /etc/avahi/services/routing.service
292
+    fi
293
+
278
     systemctl restart avahi-daemon
294
     systemctl restart avahi-daemon
279
 
295
 
280
     verify
296
     verify

+ 29
- 1
src/freedombone-mesh-routing Zobrazit soubor

34
 source /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-wifi
34
 source /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-wifi
35
 source /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-mesh
35
 source /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-mesh
36
 
36
 
37
+clear
38
+echo ''
39
+echo $'Scanning for BMX6 protocol...'
37
 bmx6_peers=$(avahi-browse -at | grep routing | grep bmx6 | wc -l)
40
 bmx6_peers=$(avahi-browse -at | grep routing | grep bmx6 | wc -l)
41
+
42
+clear
43
+echo ''
44
+echo $'Scanning for OLSR2 protocol...'
38
 olsr2_peers=$(avahi-browse -at | grep routing | grep olsr2 | wc -l)
45
 olsr2_peers=$(avahi-browse -at | grep routing | grep olsr2 | wc -l)
39
 
46
 
40
-data=$(zenity --list 1 $"BMX6 ($bmx6_peers)" 2 $"OLSR2 ($olsr2_peers)" $"Select Mesh Protocol" --column="id" --title $"Mesh Protocol" --column=$"Choose the mesh protocol:" --hide-column=1 --print-column=1 --height=150)
47
+clear
48
+echo ''
49
+echo $'Scanning for Babel protocol...'
50
+babel_peers=$(avahi-browse -at | grep routing | grep babel | wc -l)
51
+
52
+clear
53
+
54
+data=$(zenity --list 1 $"BMX6 ($bmx6_peers)" 2 $"OLSR2 ($olsr2_peers)" 3 $"Babel ($babel_peers)" $"Select Mesh Protocol" --column="id" --title $"Mesh Protocol" --column=$"Choose the mesh protocol:" --hide-column=1 --print-column=1 --height=150)
41
 
55
 
42
 sel=$?
56
 sel=$?
43
 case $sel in
57
 case $sel in
71
         sudo systemctl disable bmx7
85
         sudo systemctl disable bmx7
72
         sudo systemctl stop bmx6
86
         sudo systemctl stop bmx6
73
         sudo systemctl disable bmx6
87
         sudo systemctl disable bmx6
88
+        IFACE=$(cat /etc/systemd/system/olsr2.service | grep ExecStart | awk -F ' ' '{print $2}')
89
+        mesh_generate_ipv6_address $IFACE
74
         sudo systemctl enable olsr2
90
         sudo systemctl enable olsr2
75
         sudo systemctl start olsr2
91
         sudo systemctl start olsr2
76
         ;;
92
         ;;
93
+    3)  sudo /tmp/change_routing 'babel'
94
+        sudo systemctl stop bmx7
95
+        sudo systemctl disable bmx7
96
+        sudo systemctl stop bmx6
97
+        sudo systemctl disable bmx6
98
+        sudo systemctl stop olsr2
99
+        sudo systemctl disable olsr2
100
+        IFACE=$(cat /etc/systemd/system/babel.service | grep ExecStart | awk -F ' ' '{print $2}')
101
+        mesh_generate_ipv6_address $IFACE
102
+        sudo systemctl enable babel
103
+        sudo systemctl start babel
104
+        ;;
77
 esac
105
 esac
78
 
106
 
79
 rm /tmp/change_routing
107
 rm /tmp/change_routing

+ 22
- 0
src/freedombone-utils-mesh Zobrazit soubor

32
 MESH_CURRENT_PROTOCOL=/root/.mesh_protocol
32
 MESH_CURRENT_PROTOCOL=/root/.mesh_protocol
33
 MESH_DEFAULT_PROTOCOL=/root/.mesh_protocol_default
33
 MESH_DEFAULT_PROTOCOL=/root/.mesh_protocol_default
34
 
34
 
35
+function mesh_generate_ipv6_address {
36
+    network=fd66:66:66
37
+
38
+    if [ $1 ]; then
39
+        search_ipv6=$(ifconfig $1 | grep $network)
40
+        if [ $search_ipv6 ]; then
41
+            result=$(ifconfig $1 | grep $network | awk -F ' ' '{print $2}')
42
+            ip -6 addr add ${result}/128 dev wlan0
43
+            return
44
+        fi
45
+    fi
46
+
47
+    ipv6_array=( 1 2 3 4 5 6 7 8 9 0 a b c d e f )
48
+    a=${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}
49
+    b=${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}
50
+    c=${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}
51
+    d=${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}
52
+    e=${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}
53
+    result=$network:$a:$b:$c:$d:$e
54
+    ip -6 addr add ${result}/128 dev $1
55
+}
56
+
35
 function mesh_protocol_init {
57
 function mesh_protocol_init {
36
     if [[ $1 == "start" ]]; then
58
     if [[ $1 == "start" ]]; then
37
         # install avahi
59
         # install avahi