瀏覽代碼

Add babel mesh routing protocol

Bob Mottram 7 年之前
父節點
當前提交
3d52e70630
共有 5 個檔案被更改,包括 111 行新增1 行删除
  1. 40
    0
      src/freedombone-image-customise
  2. 4
    0
      src/freedombone-image-mesh
  3. 16
    0
      src/freedombone-mesh-batman
  4. 29
    1
      src/freedombone-mesh-routing
  5. 22
    0
      src/freedombone-utils-mesh

+ 40
- 0
src/freedombone-image-customise 查看文件

@@ -125,6 +125,9 @@ ENABLE_ZERONET=
125 125
 
126 126
 MESH_TEXT_EDITOR='pluma'
127 127
 
128
+BABEL_REPO="https://github.com/jech/babeld"
129
+BABEL_COMMIT='d9390d1fee337c464e67255bbbd879d975e126e2'
130
+
128 131
 OLSR2_REPO="https://github.com/OLSR/OONF"
129 132
 OLSR2_COMMIT='81033251c4ee1c5699bfee9d2985112c6266ab0a'
130 133
 
@@ -671,6 +674,42 @@ mesh_shutdown_script() {
671 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 713
 install_olsr2() {
675 714
     chroot "$rootdir" apt-get -yq install cmake libnl-3-dev
676 715
 
@@ -896,6 +935,7 @@ initialise_mesh() {
896 935
     install_bmx6
897 936
     install_bmx7
898 937
     install_olsr2
938
+    install_babel
899 939
     mesh_shutdown_script
900 940
     install_vpn
901 941
     install_tomb

+ 4
- 0
src/freedombone-image-mesh 查看文件

@@ -1456,6 +1456,10 @@ if [ -f $MESH_INSTALL_SETUP ]; then
1456 1456
     systemctl disable olsr2
1457 1457
     echo $'OLSR2 disabled' >> $INSTALL_LOG
1458 1458
 
1459
+    systemctl stop babel
1460
+    systemctl disable babel
1461
+    echo $'Babel disabled' >> $INSTALL_LOG
1462
+
1459 1463
     #tomb slam all
1460 1464
     tmp_ram_disk 100
1461 1465
     enable_predictable_device_names

+ 16
- 0
src/freedombone-mesh-batman 查看文件

@@ -73,9 +73,11 @@ function stop {
73 73
     systemctl stop bmx6
74 74
     systemctl stop bmx7
75 75
     systemctl stop olsr2
76
+    systemctl stop babel
76 77
     systemctl disable bmx6
77 78
     systemctl disable bmx7
78 79
     systemctl disable olsr2
80
+    systemctl disable babel
79 81
     systemctl stop dnsmasq
80 82
     systemctl disable dnsmasq
81 83
 
@@ -210,6 +212,7 @@ function start {
210 212
     sed -i "s|ExecStart=.*|ExecStart=/usr/sbin/bmx6 dev=${IFACE}|g" /etc/systemd/system/bmx6.service
211 213
     sed -i "s|ExecStart=.*|ExecStart=/usr/sbin/bmx7 dev=${IFACE}|g" /etc/systemd/system/bmx7.service
212 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 216
     systemctl daemon-reload
214 217
 
215 218
     add_wifi_interface $IFACE $WIFI_SSID ad-hoc $CHANNEL
@@ -234,6 +237,7 @@ function start {
234 237
             sed -i "s|ExecStart=.*|ExecStart=/usr/sbin/bmx6 dev=${IFACE} dev=${EIFACE}|g" /etc/systemd/system/bmx6.service
235 238
             sed -i "s|ExecStart=.*|ExecStart=/usr/sbin/bmx7 dev=${IFACE} dev=${EIFACE}|g" /etc/systemd/system/bmx7.service
236 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 241
             systemctl daemon-reload
238 242
         else
239 243
             echo $"$EIFACE is not connected"
@@ -270,11 +274,23 @@ function start {
270 274
     fi
271 275
 
272 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 280
         systemctl enable olsr2
274 281
         systemctl restart olsr2
275 282
         sed -i 's|<type>.*|<type>_olsr2._tcp</type>|g' /etc/avahi/services/routing.service
276 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 294
     systemctl restart avahi-daemon
279 295
 
280 296
     verify

+ 29
- 1
src/freedombone-mesh-routing 查看文件

@@ -34,10 +34,24 @@ export TEXTDOMAINDIR="/usr/share/locale"
34 34
 source /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-wifi
35 35
 source /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-mesh
36 36
 
37
+clear
38
+echo ''
39
+echo $'Scanning for BMX6 protocol...'
37 40
 bmx6_peers=$(avahi-browse -at | grep routing | grep bmx6 | wc -l)
41
+
42
+clear
43
+echo ''
44
+echo $'Scanning for OLSR2 protocol...'
38 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 56
 sel=$?
43 57
 case $sel in
@@ -71,9 +85,23 @@ case $data in
71 85
         sudo systemctl disable bmx7
72 86
         sudo systemctl stop bmx6
73 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 90
         sudo systemctl enable olsr2
75 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 105
 esac
78 106
 
79 107
 rm /tmp/change_routing

+ 22
- 0
src/freedombone-utils-mesh 查看文件

@@ -32,6 +32,28 @@
32 32
 MESH_CURRENT_PROTOCOL=/root/.mesh_protocol
33 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 57
 function mesh_protocol_init {
36 58
     if [[ $1 == "start" ]]; then
37 59
         # install avahi