Änderungen

5.526 Bytes hinzugefügt ,  13:43, 1. Nov. 2017
Add Übergang von L2 zu L3
Zeile 17: Zeile 17:     
'''Optionale Erweiterung für die Layer 2 Organisation'''
 
'''Optionale Erweiterung für die Layer 2 Organisation'''
 +
 
Das jetzige hood Konzept ist ein halb-automatisiertes Konzept welches das manuelle definieren eines hoodfiles erfordert. Eine Möglichkeit der vollen Automatisierung wäre z.b. möglich indem man Voronoi Algorithmen zur automatisierten räumlichen Trennung nutzt. Diese müsste mit einigen Kriterien belegt werden, wie z.b. das mindesten 2 BATMAN-adv Gateways existieren müssen bevor ein Splitt einer hood entstehen kann.
 
Das jetzige hood Konzept ist ein halb-automatisiertes Konzept welches das manuelle definieren eines hoodfiles erfordert. Eine Möglichkeit der vollen Automatisierung wäre z.b. möglich indem man Voronoi Algorithmen zur automatisierten räumlichen Trennung nutzt. Diese müsste mit einigen Kriterien belegt werden, wie z.b. das mindesten 2 BATMAN-adv Gateways existieren müssen bevor ein Splitt einer hood entstehen kann.
 +
 +
=== Übergang von Layer 2 zu Layer 3 ===
 +
 +
Im neuen Layer 3 Konzept sollen Richtfunkverbindungen und lokale exits Gateways berücksichtigt werden. Dazu kommen wir nun zum Übergang aus dem Layer 2 ins Layer 3. Dies geschieht über sogenannte BATMAN-adv Gateways. Die Gateway Selectirung im Layer 2 erfolgt u.a. aus der announcten Bandbreite (Class 1). Aktuell haben wir in allen hoods nur ein BATMAN-adv Gateway welcher einfach die mögliche Bandbreite seines ETH Ports announced. Als Beispiel 1000/1000 MBit für einen Gigabit-Ethernet-Port oder 100/100 Mbit für einen Fast-Ethernet-Port. Das ist nicht ganz so hilfreich, weil es nur eine Partielle Bandbreite auf den weg in das Internet ist. Mit dieser Angabe wird im Grunde nur angegeben wie gut die Verbindung vom BATMAN-adv Gateway zum Rechenzentrum internen Switch ist. Interessanter wäre ein gemessener und evtl. gemittelter Wert wie hoch der Durchsatz in Internet ist. Diesen wert kann man dann Statisch fest setzen.
 +
 +
root@default02:~# speedtest-cli --simple
 +
Ping: 26.696 ms
 +
Download: 220.28 Mbits/s
 +
Upload: 144.71 Mbits/s
 +
 +
Die announcte Bandbreite ist bei einem einzigen Gateway pro hood natürlich so ziemlich egal, da sowieso immer nur dieses eine Gateway gewählt werden kann.
 +
Wenn wir aber jetzt mehrere Gateways Pro hood haben wird das Tatsächlich interessant. Hier gibt es jetzt mehrere Faktoren zu berücksichtigen.
 +
 +
# Ein direkten exit über eine DSL Leitung.
 +
# Eine Richtfunk Verbindung in eine andere hood.
 +
 +
Zu 1.:
 +
Bei einem Node der ein direkten exit über die eigene DSL Leitung anbietet ist es relativ Klar. In diesem falle sollte auch die zur Verfügung stehende Bandbreite des Anschlusses announced werden. Als Beispiel bei einem VDSL50 Anschluss dann entweder stumpf 50/10 Mbit oder eben auch hier einen gemessenden Wert Statisch setzen.
 +
 +
tata@codestulle ~ % speedtest-cli --simple
 +
Ping: 32.393 ms
 +
Download: 37.34 Mbit/s
 +
Upload: 9.21 Mbit/s
 +
 +
Zu 2.:
 +
Bei Richtfunk Verbindungen wird das ganze ein bisschen komplizierter da wir uns hier fragen müssen was genau soll hier announced werden.
 +
eine Internet Verbindung von die über die Richtfunk Verbindung erreichbar ist? Oder doch der gemessene wert der rein über die Richtfunk Verbindung möglich ist? Streng genommen würden wir im zweiten falle wie oben schon beschrieben nur eine Partielle Bandbreite ermitteln allerdings geht es bei den Richfunk Verbindungen zwischen den hoods auch eher darum das Lokale Clients/Services erreichbar sind. An dieser stelle ist denke ich noch ein TBD nötig.
 +
Wir gehen Erstmal davon aus auch hier die Gemessene Bandbreite ins Internet announced wird.
 +
 +
[[Datei:L2_zu_L3_uebergang.jpeg]]
 +
 +
Um eine Überlastung einzelner annoncierter Batman-adv Gateways zu vermeiden, könnte man in einen Intervall die zur Verfügung gestellte Bandbreite - der aktuell genutzten Bandbreite announcend, also die noch zur Verfügung stehende Rest-Bandbreite. Die [https://wiki.freifunk-franken.de/w/Freifunk-Gateway_aufsetzen#B.A.T.M.A.N_Gateway_Selection Freifunk franken community hat zufälligerweise schon genau so ein Script gebaut].
 +
 +
 +
#!/bin/bash
 +
gwsel_lockfile="/tmp/gwsel_lockfile"  # lockfile to allow for low bandwidth settings
 +
 +
if [ -z "$1" ]; then
 +
        echo
 +
        echo "usage: $0 <network-interface> <update_interval [sec]> <total BW up [Mbit/sec]> <total BW down [Mbit/sec]>"
 +
        echo
 +
        echo "e.g. $0 eth0 60 10 10"
 +
        echo
 +
        exit
 +
fi
 +
 +
while true
 +
do
 +
    if [ ! -e ${gwsel_lockfile} ]; then    # lockfile not present
 +
        # Bandwidth currently used (time averaged)
 +
        R1=$(cat "/sys/class/net/$1/statistics/rx_bytes")
 +
        T1=$(cat "/sys/class/net/$1/statistics/tx_bytes")
 +
        sleep "$2"
 +
        R2=$(cat "/sys/class/net/$1/statistics/rx_bytes")
 +
        T2=$(cat "/sys/class/net/$1/statistics/tx_bytes")
 +
        TkbitPS=$(echo "scale=0; ($T2 - $T1) / 1024 * 8 / $2" | bc -l)
 +
        RkbitPS=$(echo "scale=0; ($R2 - $R1) / 1024 * 8 / $2" | bc -l)
 +
#        echo "BW used      -- up $1: $TkbitPS kBit/s; down $1: $RkbitPS kBit/s"
 +
 +
        # Remaining bandwidth available; cut-off negative values
 +
        Tavail_kbitPS=$(echo "scale=0; if (($3 * 1024 - $TkbitPS) >0) ($3 * 1024 - $TkbitPS) else 0" | bc -l)
 +
        Ravail_kbitPS=$(echo "scale=0; if (($4 * 1024 - $RkbitPS) >0) ($4 * 1024 - $RkbitPS) else 0" | bc -l)
 +
#        echo "BW available -- up $1: $Tavail_kbitPS kBit/s; down $1: $Ravail_kbitPS kBit/s"
 +
    else                                    # lockfile present
 +
        Tavail_kbitPS=0
 +
        Ravail_kbitPS=0
 +
        sleep "$2"
 +
    fi
 +
 +
    for bat in /sys/class/net/bat*; do
 +
              iface=${bat##*/}
 +
              batctl -m $iface gw_mode server "${Ravail_kbitPS}kbit/${Tavail_kbitPS}kbit"
 +
    done
 +
done
 +
 +
Es würde dazu frühen das, wenn ein Batman-adv Gateway voll ausgelastet ist die annoncierte Bandbreite stark sinken würde und somit andere Gateways mit höher annoncierter Bandbreite bevorzugt werden.
 +
 +
'''Optionale Erweiterung für das Bandbreiten anouncemend'''
 +
 +
Das statische setzen der Bandbreite könnte durch eine dynamische Lösung ersetze werden. Indem der Gateway selber schaut wie gut seine Bandbreite ins Internet ist. Das könnte z.b. für Volumen begrenzte oder auch stark schwankende Anschlüsse interessant sein. Das würde die Menschliche Komponente an der stelle ausmerzten. Andererseits kann man das statische setzen der Möglichen Bandbreite auch zur Begrenzung nehmen, falls man nicht den gesamten Anschluss zur Verfügung stellen möchte.
 +
    
=== Layer 3 Organisation ===
 
=== Layer 3 Organisation ===