OpenWRT



Router
http://wiki.openwrt.org/inbox/airties-wav281
leider nicht multiple ssid fähig (kein node und ap gleichzeitig)

Flashen
a) Image bauen
Kamikaze scheint bei mir nicht zu funktionieren, daher Attitude Adjustment.

$ wget http://downloads.openwrt.org/attitude_adjustment/12.09-rc1/lantiq/danube/OpenWrt-ImageBuilder-lantiq_danube-for-linux-i486.tar.bz2
$ cd Open...
$ make image PROFILE="ARV4520PW" PACKAGES="-atm-tools -linux-atm -kmod-atm -kmod-ltq-dsl-danube -kmod-ltq-dsl-firmware-b-danube -kmod-pppoe -kmod-ppp -kmod-pppox -kmod-pppoa -ppp-mod-pppoa -ppp-mod-pppoe -ppp -kmod-ltq-dsl -ltq-dsl-app -wpad-mini -br2684ctl olsrd freifunk-common freifunk-firewall horst ip community-profiles luci luci-app-olsr luci-mod-freifunk luci-app-meshwizard meshwizard luci-app-olsr-services luci-app-olsr-viz olsrd-mod-arprefresh olsrd-mod-nameservice olsrd-mod-watchdog"
$ du -h bin/lantiq/*.image

b) Fertiges Image nehmen
Wenn uboot geflashed wurde, einfach WLAN-Button gedrückt halten und Router anmachen. Nach 10 Sekunden sollte über 192.168.1.1 ein Webserver antworten über den der Router geflashet werden kann (z.Bsp. mit openwrt-lantiq-danube-ARV4520PW-squashfs.image)
Wichtig ist hier, dass nicht Chrome sondern zum Beispiel Firefox benutzt wird.

Konfigurieren



Beispiele

Anleitung



a) Allgemeine Vorgehensweise mit Webinterface und Meshwizard

Siehe https://github.com/gitmo/freifunk#readme

Config file diff's im git-repo https://github.com/gitmo/freifunk/commit/a4a52cb263792928a64b30768c54602e60c07e36


b) [Historisch] Erster Link zu Zwingli-Nordost mit dem Airties

1. OLSR Community Freifunk-Berlin per Webinterface gesetzt
2. /etc/config/network nach Phillips config [1] angepasst
3. /etc/config/wireless nach Phillips config [2] angepasst
        WICHTIG: in /etc/config/wireless:
                option bssid '02:CA:FF:EE:BA:BE'
                (gleiche BSSID wie Zwingli-Node)
[4. Und nicht vergessen WLAN interface zu enablen *hust*]

[1] https://github.com/gitmo/freifunk/blob/master/tm-inet-box/config/network
[2] https://github.com/gitmo/freifunk/blob/master/tm-inet-box/config/wireless


c) Freedom Fighter Box

1. LAN 4 mit Rechner verbinden
2. telnet 10.0.0.1 
        passwd  (password ändern)

auf dem rechner
3. scp freifunk_yourName.crt root@10.0.0.1:/etc/openvpn/freifunk.crt
4. scp freifunk_yourName.key root@10.0.0.1:/etc/openvpn/freifunk.key

auf dem router
5. /root/config hostname latitude longitude email
6. LAN 3 über LAN mit anderem Router verknüpfen
(7. /bin/openwifimap-update ausführen um direkt auf der Karte zu erscheinen - sonst erst das nächste Mal um 15Uhr)
8. Verbinung zu LAN4 kappen
9. Have fun

[LAN 4 - mgmt - nur von hier kann via ssh oder luci auf den router zugegriffen werden
LAN 3 - wan - hier kommt das Internet rein
LAN 2/1 - freifunk internet

/etc/init.d/repairWifi - script um Fehler des Routers mit der WIFI mac adresse zu umgehen

/usr/bin/openwifimap-update - script um Knoten auf Karte anzeigen zu lassen; davor system.@system[0].contact,longitude und latitude setzen

/root/config - config script 
setzt hostnamen (wird zu hostname-anon) 
setzt den WLAN namen auf hostname.anon.freifunk.de
kann falls angegeben lon lat n


OpenWifiMap



siehe http://wiki.apache.org/couchdb/HTTP_Document_API
und https://github.com/andrenarchy/openwifimap

Zum regelmäßigen Update Script benutzen:
https://github.com/gitmo/freifunk/blob/master/openwifimap-update.sh

Um seinen initial Knoten bekannt zumachen, reicht folgender Einzeiler:

$ curl -X PUT -H 'Content-Type: application/json' -d @simpl0n.json http://map.pberg.freifunk.net/openwifimap/simpl0n.olsr --trace-ascii -
== Info: About to connect() to map.pberg.freifunk.net port 80 (#0)
== Info:   Trying 81.169.174.233...
== Info: connected
== Info: Connected to map.pberg.freifunk.net (81.169.174.233) port 80 (#0)
=> Send header, 230 bytes (0xe6)
0000: PUT /openwifimap/simpl0n.olsr HTTP/1.1
0028: User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0
0068:  OpenSSL/0.9.8r zlib/1.2.5
0084: Host: map.pberg.freifunk.net
00a2: Accept: */*
00af: Content-Type: application/json
00cf: Content-Length: 238
00e4: 
=> Send data, 238 bytes (0xee)
0000: {"type":"node","hostname":"simpl0n.olsr","longitude":13.4628,"la
0040: titude":52.5058,"interfaces":[{"name":"simpl0n.olsr","ipv4Addres
0080: ses":["104.130.3.88"]}],"neighbors":[{"interface":"simpl0n.olsr"
00c0: ,"id":"zwingli-nordost.olsr","quality":2.34}]}
== Info: upload completely sent off: 238 out of 238 bytes
<= Recv header, 22 bytes (0x16)
0000: HTTP/1.1 201 Created
<= Recv header, 22 bytes (0x16)
0000: Server: nginx/1.0.10
<= Recv header, 37 bytes (0x25)
0000: Date: Tue, 12 Feb 2013 14:19:57 GMT
<= Recv header, 41 bytes (0x29)
0000: Content-Type: text/plain; charset=utf-8
<= Recv header, 24 bytes (0x18)
0000: Connection: keep-alive
<= Recv header, 66 bytes (0x42)
0000: Location: http://map.pberg.freifunk.net/openwifimap/simpl0n.olsr
<= Recv header, 44 bytes (0x2c)
0000: ETag: "1-b4dc6a07d64468bac904736d8d7c872e"
<= Recv header, 20 bytes (0x14)
0000: Content-Length: 75
<= Recv header, 32 bytes (0x20)
0000: Cache-Control: must-revalidate
<= Recv header, 2 bytes (0x2)
0000: 
<= Recv data, 75 bytes (0x4b)
0000: {"ok":true,"id":"simpl0n.olsr","rev":"1-b4dc6a07d64468bac904736d
0040: 8d7c872e"}.
{"ok":true,"id":"simpl0n.olsr","rev":"1-b4dc6a07d64468bac904736d8d7c872e"}
== Info: Connection #0 to host map.pberg.freifunk.net left intact
== Info: Closing connection #0

Entbricken

R64 / R80 überbrücken

serielle Verbindung aufmachen:
  $ screen /dev/ttyUSB0 115200
    
  > ROM VER: 1.0.3
  > CFG 04
  > Read EEPROMX
  >  X
  > UART

U-Boot RAM-Image hochladen (Image aus Trunk für ARV4519PW)  selbst gebaut, da die Online-Versionen nicht loady als Befehl haben - Ethernet funktioniert leider nicht) 
  $ cat arv4519pw_ram-u-boot.asc | sudo tee /dev/ttyUSB0 > /dev/null

  Image: http://cholin.spline.de/stuff/openwrt-lantiq-arv4519pw_ram-u-boot.asc
  
  > U-Boot 2010.03-svn34185 (Nov 16 2012 - 07:26:28)
  > Board: ARV4520PW
  > SoC: Danube/Twinpass/Vinax-VE V1.3, DDR Speed 111 MHz, CPU Speed 111 MHz
  > DRAM:  32 MB
  > ARV4520 =>

Schreibschutz für Boot-Speicher aufheben
  protect off 0xB0000000 +0x1FFFF
  > Un-Protected 9 sectors

Speicher leeren
  erase 0xB0000000 +0x1FFFF
  > ......... done
  > Erased 9 sector

U-Boot konfigurieren um Image übertragen zu können
  loady

Flash-U-Boot-Image übertragen (in Screen, sb ist im Packet 'lrzsz' zu finden) 
  ^A : exec !!.| sb --ymodem /path/to/u-boot-bootstrap.bin

Image: http://downloads.openwrt.org/attitude_adjustment/12.09-rc1/lantiq/danube/uboot-lantiq-arv4520PW_flash/u-boot-bootstrap.bin

  > ## Ready for binary (ymodem) download to 0x81000000 at 115200 bps...
  > CSending: u-boot-bootstrap.bin
  > Ymodem sectors/kbytes sent:   0/ 0kRetry 0: NAK on sector
  > Retry 0: NAK on sector
  > Bytes Sent:  65536   BPS:1891                            
  > Sending: 
  > Ymodem sectors/kbytes sent:   0/ 0k
  > Transfer complete
  > dem - CRC mode, 514(SOH)/0(STX)/0(CAN) packets, 5 retries
  > ##  Total Size      = 0x00010000 = 65536 Bytes

Image in den Flash-Speicher kopieren
  cp.b 0x81000000 0xB0000000 0x10000
  > Copy to Flash... done

Speicher wieder schreibschützen
  protect on 0xB0000000 +0x1FFFF

Router ausschalten und R64 / R80 entlöten. Danach kann sollte der Router wieder funktionsfähig sein und es kann zum Beispiel über den HTTP-Server OpenWRT geflashed werden.


DHCP und OLSR:

1. Block von mind. 16 IPs registrieren
   zb. 104.130.3.96-104.130.3.111

2. Network address, Subnet, min/max Host IP für DHCP-Range berechnen
http://jodies.de/ipcalc?host=104.130.3.96&mask1=28&mask2=

  =>Network:   104.130.3.96/28
  Broadcast: 104.130.3.111
  HostMin:   104.130.3.97
  HostMax:   104.130.3.110
  Hosts/Net: 14             

2.a Oft passen die vorregistrierten Adressen nicht perfekt ins /28-Netz -> noch mehr registrieren bisset reicht ;)

3. Router bekommt die erste mögliche IP 104.130.3.97

4. DHCP vergibt den Rest .98-.110 -> 13 Adressen

5. Offset vom Anfang des Ranges 104.130.3.98 zu 104.0.0.0 berechnen so wie hier
  http://wiki.openwrt.org/doc/uci/dhcp#assigning.dhcp.pool.to.a.subnet.in.a.large.network

  130*2^16 + 3*2^8 + 98[*2^0] = 8520546
  
  Check:
  root@simpl0n:~# ipcalc.sh 104.130.3.96 255.0.0.0 8520546 12
  IP=104.130.3.96
  NETMASK=255.0.0.0
  BROADCAST=104.255.255.255
  NETWORK=104.0.0.0
  PREFIX=8
  START=104.130.3.98
  END=104.130.3.110

  # Als Netzmaske wird hier fälschlicherweise 255.0.0.0 als Basis genommen zu der dann der Offset berechnet wird. Das liegt daran das aus /etc/config/dhcp immer eine /tmp/etc/dnsmasq.conf generiert wird, die automatisch die Netmask vom 'wlan0' interface übernimmt.

6. /etc/config/dhcp editieren
  config dhcp 'wireless0'
    option interface 'wireless0'
    option start '8520546'
    option limit '12'
    option leasetime 1h
    list 'dhcp_option' '1,255.255.255.240'
# Letzte Zeile zwingt letztendlich dnsmasq dazu nicht die 255.0.0.0 (subnet vom OLSR) herauszugeben, sondern nur die Maske für unser /28 Netz.

7. HNA4 route in /etc/config/olsrd announcen

  config Hna4
      option netaddr '104.130.3.96'
      option netmask '255.255.255.240'
  # Alles 3x überprüfen!!! ;)
  
Hier gibts noch ne schöne kleine Grafik: http://wiki.freifunk.net/Freifunk_FirmwaKnotenre/FFF_%28English%29#Using_DHCP_with_an_OLSR_Network . HNA4 und Subnet-Problematik werden nicht erwähnt. Liegt wohl daran dass das Setup dort NAT macht? Eventuell könnte man seine unbedarften DHCP-User NAT'en um sie ein wenig vor dem "gefährlichen" OLSR zu schützen.