diff --git a/Freifunk_Dresden.mw b/Freifunk_Dresden.mw index fb231907..6b6d2798 100644 --- a/Freifunk_Dresden.mw +++ b/Freifunk_Dresden.mw @@ -109,209 +109,13 @@ Ideen dazu werden [[Diskussion:Freifunk Dresden|diskutiert]], um die jetzigen Be == Technische Informationen == -Bitte konsultiert zuerst das [http://wiki.freifunk-dresden.de/ Wiki Freifunk Dresden] und -[http://wiki.freifunk-dresden.de/index.php/Knoten_Spezifikation Knoten Spezifikationen] für aktuelle Informationen, -Derzeit enthält es noch keine techischen Informationen (ist aber in Arbeit). - Die Informationen hier in diesem Wiki sind derzeit veraltet und sind nicht mehr kompatibel mit dem Freifunk Dresden Netz. Sie sollten daher - nicht mehr verwendet werden, da es damit zu IP Konflikten kommt. +Grundsätzlich soll das [http://wiki.freifunk-dresden.de/ Wiki Freifunk Dresden] Informationen, insbesondere auch technische Informationen, bereitstellen. Das ist wohl aber noch nicht der Fall und soll wohl in Arbeit sein. -=== WLAN-Einstellungen === +=== Quellcode === -Die detailierten Einstellungen werden [[Intern:Freifunk Dresden|derzeit intern]] beschrieben. +Der Quellcode soll auf [[#GitHub]] verfügbar sein. Dies gilt insbesondere für die [[#Firmware]].https://github.com/ddmesh/firmware-freifunk-dresden -=== Adressvergabe === - -==== IP-Adressberechnungs mit Shell- und Lua Script ==== - -Die Berechnung kann sich in künftigen Versionen ändern, derzeit wird u.a. eine Aufteilung des Netzwerkes in "original"-FFF und "custom" erwogen. Deshalb ist Vorsicht geboten was die Aktualität des Inhaltes angeht - bitte überprüfen bevor ihr peert. - -Die Scripte deren Algorithmus formalisiert werden soll: - -===== usr/bin/ddmesh-ipcalc.sh ===== - -#!/bin/sh - -if [ "$1" = "" ] -then - echo "" - echo "ddmesh-ipcalc.sh (lua) Stephan Enderlein (c) 2013 V1.7" - echo "" - echo "Calculates all the addresses for the ddmesh freifunk node" - echo "usage: ddmesh-ipcalc.sh [-n node] | [ip]" - echo "" - exit 1 -fi - -if [ "$1" = "-n" ]; then - node=`echo "$2" | sed 's/[\$\`\(\)]/0/g'` - lua -lddmesh -e "ipcalc.print($node)" -else - ip=`echo "$1" | sed 's/[\$\`\(\)]/0/g'` - lua -lddmesh -e "print(iplookup(\"$ip\"))" -fi - - - -===== usr/lib/lua/ddmesh.lua ===== - - ---[[---------------------------------------------------------------------------------------- -ddmesh.lua -library for different freifunk functions -version: 6 --------------------------------------------------------------------------------------------]] - ------------------ ipcalc --------------- -ipcalc={} -ipcalc.data={} -ipcalc.data.max=2048 - -function split(str, delim, maxNb) - -- Eliminate bad cases... - if string.find(str, delim) == nil then - return { str } - end - if maxNb == nil or maxNb < 1 then - maxNb = 0 -- No limit - end - local result = {} - local pat = "(.-)" .. delim .. "()" - local nb = 0 - local lastPos - for part, pos in string.gfind(str, pat) do - nb = nb + 1 - result[nb] = part - lastPos = pos - if nb == maxNb then break end - end - -- Handle the last field - if nb ~= maxNb then - result[nb + 1] = string.sub(str, lastPos) - end - return result -end - -function ipcalc.rCalcIp(ip) - if ip==nil or ip=="" then return -1 end - a = split(ip, "[.]") - if #a ~= 4 then return -1 end - if a[1]==nil or a[1]=="" or tonumber(a[1]) ~= 10 then return -1 end - if a[2]==nil or a[2]=="" or tonumber(a[2]) ~= 200 and tonumber(a[2]) ~= 201 then return -1 end - if a[3]==nil or a[3]=="" or tonumber(a[3]) < 0 or tonumber(a[3]) > 255 then return -1 end - if a[4]==nil or a[4]=="" or tonumber(a[4]) < 0 or tonumber(a[4]) > 255 then return -1 end - - middle = a[3] - if a[2]=="201" then middle = middle + 256 end - minor = math.floor(a[4]/64) --x>>6 - node = middle*4+minor --x<<2 - if node < 0 or node > ipcalc.data.max then return -1 end - return node -end - -function ipcalc.calc(node) - --node has to be a number n \in N_0, 0 <= n <= 2048 - if node==nil or node=="" then return -1 end - node=tonumber(node) - if node==nil or node=="" then return -1 end - if node < 0 or node > ipcalc.data.max then return -1 end - - local domain = "freifunk-dresden.de" - - --Ternary Operator in use - -- major network for nodes n < 1024: 200, for nodes > 1023: 201 - local major = node >= 1024 and 201 or 200 --a[2] - -- etc. - local middle = node >= 1024 and math.floor((node-1024) / 4) or math.floor(node / 4) --a[3] - local minor = (node % 4) * 64 - - local meshnet = "10" - local nodeip = meshnet .. "." .. major .. "." .. middle .. "." .. minor + 1 - local meshnetmask = "255.0.0.0" - local meshpre = 15 - local meshbroadcast = "10.255.255.255" - local meshnetwork = "10.200.0.0" - - local dhcpstart = meshnet .. "." .. major .. "." .. middle .. "." .. minor + 2 - local dhcpend = meshnet .. "." .. major .. "." .. middle .. "." .. minor + 63 - local dhcpoffset = 1 --used by config/dhcp - local dhcplimit = 62 --used by config/dhcp - local dhcprangepre = 26 - local dhcprangemask = "255.255.255.192" - local dhcpnetmask = "255.255.255.255" - local dhcpbroadcast = "10.255.255.255" -- needed, else dnsmasq will not start - local dhcpnetwork = meshnet .. "." .. major .. "." .. middle .. "." .. minor - - local hna = meshnet .. "." .. major .. "." .. middle .. "." .. minor .. "/" .. dhcprangepre - local mesh6pre = "48" - local mesh6net = "fd11:11ae:7466::" - -- client range - local mesh6nodenet= "fd11:11ae:7466:" .. string.format("%x", node) .. "::" - local mesh6ip = mesh6nodenet .. "1" - local mesh6nodepre= "64" - - -- preparing variabled to be expoted - ipcalc.data.node = node - ipcalc.data.domain = domain - ipcalc.data.hostname = "r" .. node - ipcalc.data.ip = nodeip - ipcalc.data.network = meshnetwork - ipcalc.data.netpre = meshpre - ipcalc.data.netmask = meshnetmask - ipcalc.data.broadcast = meshbroadcast - ipcalc.data.dhcpstart = dhcpstart - ipcalc.data.dhcpend = dhcpend - ipcalc.data.dhcpoffset = dhcpoffset - ipcalc.data.dhcplimit = dhcplimit - ipcalc.data.dhcprangepre = dhcprangepre - ipcalc.data.dhcprangemask = dhcprangemask - ipcalc.data.dhcpnetwork = dhcpnetwork - ipcalc.data.dhcpbroadcast = dhcpbroadcast - ipcalc.data.dhcpnetmask = dhcpnetmask - ipcalc.data.clienthna = hna - ipcalc.data.mesh6ip = mesh6ip - ipcalc.data.mesh6net = mesh6net - ipcalc.data.mesh6pre = mesh6pre - ipcalc.data.mesh6nodenet = mesh6nodenet - ipcalc.data.mesh6nodepre = mesh6nodepre -end - -function ipcalc.print(node) - - if node==nil or node=="" then print("ERROR"); return -1 end - node=tonumber(node) - if node==nil then print("ERROR"); return -1 end - if node < 0 or node > ipcalc.data.max then return -1 end - ipcalc.calc(node) - - for k,v in pairs(ipcalc.data) do - print("export _ddmesh_"..k.."="..v) - end -end - ---not needed for ip address calculation -function iplookup(ip) - if ip==nil then return -1 end - n=ipcalc.rCalcIp(ip) - if n == -1 then return -1 end - ipcalc.calc(n) - return ipcalc.data.hostname -end - ---not needed for ip address calculation -function lookup(node) - if node==nil then return -1 end - if string.sub(node,1,1) == "r" then - n=tonumber(string.sub(node,2)) - else - n=tonumber(node) - end - if n==nil then return -1 end - if n < 0 or n > ipcalc.data.max then return -1 end - ipcalc.calc(n) - return ipcalc.data.ip -end - ----- +=== mögliche Probleme beim Betrieb der Technik === == Metadaten ==