/* Veraltete Technische Informationen */

This commit is contained in:
Vater 2015-05-20 02:14:43 +00:00
parent ee4fe01823
commit 9d8745db86
1 changed files with 0 additions and 279 deletions

View File

@ -129,285 +129,6 @@ Es existiert eine Inter-Community-API analog zur SpaceAPI. Beispiel: [http://cho
Jeder Knoten bietet ein JSON-Dokument unter http://10.200.../sysinfo-json.cgi an. Es enthält Versionsstände, Geokoordinaten, Kontaktinfo, Auslastung und alle Routen.
== Veraltete 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,
da diese immer aktueller sind.<br/>
Derzeit enthält es noch keine techischen Informationen (ist aber in Arbeit).
<font color="red">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.</font>
=== WLAN-Einstellungen ===
In Syntax der <code>/etc/config/wireless</code> unter OpenWRT:
<pre>
config wifi-device 'radio0'
option type 'mac80211'
option hwmode '11ng'
option macaddr 'a0:f3:c1:84:a3:e2'
# Je Nach Verbindungsqualität auch HT40-
option htmode 'HT20'
list ht_capab 'LDPC'
list ht_capab 'SHORT-GI-20'
list ht_capab 'SHORT-GI-40'
list ht_capab 'TX-STBC'
list ht_capab 'RX-STBC1'
list ht_capab 'DSSS_CCK-40'
option channel '13'
option country 'DE'
config wifi-iface
option device 'radio0'
option encryption 'none'
option network 'mesh'
# WLAN-Modus:
option mode 'adhoc'
# Zellen-Id, muss gleich sein:
option bssid '64:64:6d:65:73:68'
# Name zum Wiedererkennen:
option ssid 'Freifunk Dresden [adhoc]'
</pre>
Oder manuell, bis zum nächsten Reboot:
<pre>
iw phy phy0 interface add adhoc0 type ibss
iw dev adhoc0 ibss join "Freifunk Dresden [adhoc]" HT20 fixed-freq 64:64:6d:65:73:68
</pre>
Viele WLAN-Treiber unter Linux lassen mehrere Interfaces pro Adapter zu. Du kannst Adhoc also auch mit AccessPoints konfigurieren. Allerdings sollte der Channel übereinstimmen.
=== Adressvergabe ===
Die Berechnung erfolgt über ein Script ''ddmesh-ipcalc.sh''. Die Berechnung hier in diesem Wiki ist veraltet.
=== Knotennummer reservieren ===
''registerkey'' ist ein eindeutiger Registrierungskey, mit dem der Knoten im Freifunk Netz registriert wird. Dieser wird derzeit
aus den MAC Adressen der Netzwerkkarten im Router und dem ssh-fingerprint generiert. Die Keylänge ist dabei zu erfüllen.
<pre>
curl http://register.ddmesh.de/bot.php\?registerkey\=d4:1d:8c:d9:8f:00:b2:04:e9:80:09:98:ec:f8:42:7e:d4:1d:8c:d9:8f:00:b2:04:e9:80:09:98:ec:f8:42:7e
OK:141<br />
</pre>
'''TODO:''' Aktuell einen Monat lang gültig, wie wird die Erreichbarkeit gecheckt?
=== Adressen berechnen ===
Auf der Original-Firmware gibts ein Skript für die Knotennummer. Bis jemand die Berechnung formalisiert, müssen wir darauf zurückgreifen:
<pre>
TP-LINK TL-WR841N/ND v8 @ r150:~# ddmesh-ipcalc.sh -n 141
export _ddmesh_dhcplimit=62
export _ddmesh_netmask=255.0.0.0
export _ddmesh_ip=10.200.35.65
export _ddmesh_dhcpoffset=1
export _ddmesh_mesh6net=fd11:11ae:7466::
export _ddmesh_hostname=r141
export _ddmesh_node=141
export _ddmesh_dhcpstart=10.200.35.66
export _ddmesh_dhcpnetwork=10.200.35.64
export _ddmesh_broadcast=10.255.255.255
export _ddmesh_network=10.200.0.0
export _ddmesh_mesh6nodenet=fd11:11ae:7466:8d::
export _ddmesh_max=2048
export _ddmesh_mesh6nodepre=64
export _ddmesh_domain=freifunk-dresden.de
export _ddmesh_mesh6pre=48
export _ddmesh_mesh6ip=fd11:11ae:7466:8d::1
export _ddmesh_clienthna=10.200.35.64/26
export _ddmesh_netpre=15
export _ddmesh_dhcpnetmask=255.255.255.255
export _ddmesh_dhcpbroadcast=10.255.255.255
export _ddmesh_dhcprangemask=255.255.255.192
export _ddmesh_dhcprangepre=26
export _ddmesh_dhcpend=10.200.35.127
</pre>
Für die Knotennummer 141 generiert es ein Netzzuweisung von '''10.200.35.64/26'''. Die erste nutzbare Adresse wird als '''10.200.35.65/8''' auf das Adhoc-Interface konfiguriert. Dann sollte auch die Broadcast-Adresse '''10.255.255.255''' stimmen.
==== IP-Adressberechnungs mit Shell- und Lua Script ====
Die Scripte deren Algorithmus formalisiert werden soll:
'''usr/bin/ddmesh-ipcalc.sh'''
<pre>
#!/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
</pre>
'''usr/lib/lua/ddmesh.lua'''
<pre>
--[[----------------------------------------------------------------------------------------
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)
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"
local major = node >= 1024 and 201 or 200 --a[2]
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"
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
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
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
</pre>
== IPv4-Meshing mit bmxd ==
=== Bauen ===