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 [10.02.2017 15:27] – [Alfred-JSON] havelockalfred [17.07.2017 19:13] havelock
Zeile 20: Zeile 20:
 allerdings mit ''mac_to_ipv6(&interface->hwaddr, &interface->address);'' ermittelt wurde. allerdings mit ''mac_to_ipv6(&interface->hwaddr, &interface->address);'' ermittelt wurde.
 Insbesondere bei Bridge-Interfaces schlägt dieses aus o.a. Gründen fehl. Insbesondere bei Bridge-Interfaces schlägt dieses aus o.a. Gründen fehl.
 +
  
 Voraussetzungen Voraussetzungen
Zeile 31: Zeile 32:
 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.1
 </code> </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 Anschließend bauen. Den [[GPS]]-Daemon brauchen wir nicht
 <code> <code>
 +git apply -v ffpi.patch
 make CONFIG_ALFRED_GPSD=n make CONFIG_ALFRED_GPSD=n
 make install CONFIG_ALFRED_GPSD=n make install CONFIG_ALFRED_GPSD=n
alfred.txt · Zuletzt geändert: 24.07.2017 10:08 von havelock