Wiki - Freifunk Pinneberg

Freies WLAN im Kreis Pinneberg

Benutzer-Werkzeuge

Webseiten-Werkzeuge


alfred

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
alfred [21.11.2016 20:26] – [Alfred] havelockalfred [17.07.2017 22:08] havelock
Zeile 3: Zeile 3:
 siehe: http://www.open-mesh.org/projects/alfred/wiki siehe: http://www.open-mesh.org/projects/alfred/wiki
  
-Es gibt bereits die Versionen 2015.1, 2015.2 sowie 2016.0 +Produktiv wird die Version 2015.0 bzwdie gepatchte Version 2017.1 eingesetzt.
-Wir setzen sie aber noch nicht für den Produktivbetrieb ein:+
  
-<wrap em>Die o.a. Versionen funktionieren nicht und werden den Fehler+Ab der Version 2015.1 gibt es anscheinend Probleme
-can't bind: Cannot assign requested address +  can't bind: Cannot assign requested address 
-Failed to open interfaces+  Failed to open interfaces 
 + 
 +Das Verhalten tritt auf, wenn die Link-Lokale IPv6-Adresse des Bridge-Interfaces (über den Parameter ''-i'') nicht zu der MAC-Adresse paßt. Vermutlich kann als Workaround die MAC-Adresse für das betreffende Interface mit ''bridge_hw <MAC>'' fixiert werden. 
 + 
 +Wenn man das nicht macht, führt das Hinzufügen von ''bat0'' zur Bridge dazu, daß  
 +die Bridge die MAC vom ''bat0''-Interface übernimmt.  
 + 
 +Details: In der Funktion ''netsock_open'' in ''netsock.c'' wird in Version 2015.0 ein bind 
 +mit ''in6addr_any'' gemacht. In den darauffolgenden Versionen geht der bind auf die Interface-Adresse, die allerdings mit ''mac_to_ipv6(&interface->hwaddr, &interface->address);'' ermittelt wurde. 
 +Insbesondere bei Bridge-Interfaces schlägt dieses aus o.a. Gründen fehl.
  
-Eventuell irgendetwas mit Multicast... 
-</wrap> 
  
 Voraussetzungen Voraussetzungen
   aptitude install git cmake pkg-config ca-certificates   aptitude install git cmake pkg-config ca-certificates
 +
 +Für Version 2016.5 zusätzlich:
 +  aptitude install libnl-genl-3-dev
  
 Quellen herunterladen und entpacken Quellen herunterladen und entpacken
Zeile 20: Zeile 29:
 cd /usr/local/src cd /usr/local/src
 aptitude install libcap-dev aptitude install libcap-dev
-wget http://downloads.open-mesh.org/batman/stable/sources/alfred/alfred-2015.0.tar.gz +wget http://downloads.open-mesh.org/batman/stable/sources/alfred/alfred-2017.1.tar.gz 
-tar xzf alfred-2015.0.tar.gz +tar xzf alfred-2017.1.tar.gz 
-cd alfred-2015.0+cd alfred-2017.
 +</code> 
 + 
 +++++ Patch für alfred >= 2016.5 | 
 +<file patch ffpi.patch> 
 +diff --git a/netsock.c b/netsock.c 
 +index 86db8a6..9b137f1 100644 
 +--- a/netsock.c 
 ++++ b/netsock.c 
 +@@ -25,6 +25,7 @@ 
 + #include <net/ethernet.h> 
 + #include <net/if.h> 
 + #include <netinet/in.h> 
 ++#include <ifaddrs.h> 
 + #include <stdio.h> 
 + #include <string.h> 
 + #include <sys/ioctl.h> 
 +@@ -210,6 +211,30 @@ out: 
 +  return ret; 
 + } 
 +  
 ++static int get_link_local_addr(uint32_t scope_id, struct in6_addr *addr) 
 ++{ 
 ++ struct ifaddrs *ifaddr, *ifa; 
 +
 ++ if (getifaddrs(&ifaddr) == -1) { 
 ++ perror("getifaddrs"); 
 ++ return -1; 
 ++ } 
 ++ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { 
 ++ if (ifa->ifa_addr == NULL) 
 ++ continue; 
 ++ if (ifa->ifa_addr->sa_family != AF_INET6) 
 ++ continue; 
 +
 ++ struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) ifa->ifa_addr; 
 ++ if (sin6->sin6_scope_id == scope_id) { 
 ++ memcpy(addr, &sin6->sin6_addr ,sizeof(struct in6_addr)); 
 ++ break; 
 ++ } 
 ++ } 
 ++ freeifaddrs(ifaddr); 
 ++ return 0
 ++} 
 +
 + static int netsock_open(struct interface *interface) 
 + { 
 +  int sock; 
 +@@ -256,7 +281,10 @@ static int netsock_open(struct interface *interface) 
 +  memset(&sin6, 0, sizeof(sin6)); 
 +  sin6.sin6_port = htons(ALFRED_PORT); 
 +  sin6.sin6_family = AF_INET6; 
 +- memcpy(&sin6.sin6_addr, &interface->address, sizeof(sin6.sin6_addr)); 
 ++ if (get_link_local_addr(interface->scope_id, &sin6.sin6_addr) < 0) { 
 ++ perror("cannot get link local address"); 
 ++ goto err; 
 ++ } 
 +  sin6.sin6_scope_id = interface->scope_id; 
 +  
 +  memset(&sin6_mc, 0, sizeof(sin6_mc)); 
 +</file> 
 +++++ 
 + 
 +Anschließend bauen. Den [[GPS]]-Daemon brauchen wir nicht 
 +<code> 
 +git apply -v ffpi.patch 
 +make CONFIG_ALFRED_GPSD=n 
 +make install CONFIG_ALFRED_GPSD=n
 </code> </code>
  
Zeile 50: Zeile 126:
 </file> </file>
 ++++ ++++
- 
-Anschließend bauen. Den [[GPS]]-Daemon brauchen wir nicht 
-<code> 
-make CONFIG_ALFRED_GPSD=n 
-make install CONFIG_ALFRED_GPSD=n 
-</code> 
  
  
Zeile 81: Zeile 151:
 make install make install
 </code> </code>
 +
 +Tests:
 +  * ''alfred-json -zr 158''
  
 ===== Übersicht über die Alfred-Datenstrukturen ===== ===== Übersicht über die Alfred-Datenstrukturen =====
alfred.txt · Zuletzt geändert: 24.07.2017 10:08 von havelock