Freifunk Nordwest

Das Bürgernetz im Nordwesten

Titelbild
23. August 2016 13:58 Uhr
Monitoring and quality assurance of open wifi networks out of client view (final evaluation)
<p class="western" style="margin-bottom: 0cm; line-height: 100%;">
       ] 
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    },
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    A hood has the following definition:
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    – name
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    The name describes the region depending on its geo coordinates. For example, if you create a hood over the city Oldenburg(Oldb) (Germany), a good name could be Oldenburg or ol as short. Every name has to be unique inside a hoodfile. Redundant names are not allowed!
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    – bssid
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    The bssid will be set for the adhoc wireless interface. This is the main part of splitting the layer 2 network. Inside the bssid there is the IPv4 sub-network encoded which is in use inside the hood. In the above json part the following IPv4 sub-network is encoded “10.18.160.0/21” dec to bin => “0000’1010 0001’0010 1010’0000 0000’0000” bin to hex => 0x0A 0x12 0xA0 0x00 hex to mac => 02:00:0A:12:A0:00. Therefore the bssid should also be unique.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    – defaulthood
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    The defaulthood boolean is only true on the default hood. The default hood doesn’t have coordinates and is the inverted form of all other hoods with geo coordinates.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    – servers
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    Contains an array of VPN connection informations. These informations are:
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    VPN server address (host)
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    VPN port
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    VPN crypto key
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    One VPN server should be used for one hood only! If two hoods have the same VPN server, batman-adv will loop them over VPN.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    – boxes
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    This 3 dimensional array describes the geographical size of the hood. The surface is rectangular. You just need two points per box to reconstruct it. Here is an example:
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
                                              53.22,
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
                                              8.09 #____________
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
                                                       |                   |
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
                                                       |                   |
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
                                                       |                   |
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
                                                       |____________|
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
                                                                          # 53.36,
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
                                                                              8.32
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    Each hood can have any number of rectangles inside the boxes array.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    To make your life a little easier you can use the hoodgen<a href="http://hood.ffnw/hoodgen.html#">[6]</a> and source<a href="https://git.nordwest.freifunk.net/ffnw-server/hoodgen">[7]</a> to write your json with the required informations. This is a simple web visualization tool to plan hoods and generate the right json format for the hoodfile. This tool has been written by Eike Baran. Big Thanks to him for this helpful tool!
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    Now to the hoodselector.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    It is a software that creates decentralized, semi automated ISO OSI layer 2 network segmentation for batman-adv layer 2 routing networks. This program reads the geobased sub-networks called hoods from the above mentioned hoodfile. The decision of choosing the right hood is made on following points: first, the hoodselector checks, if the router has a VPN connection. If it has, the hoodselector then checks, if a static geoposition was set on the router. If not, it tries to get a position using wireless based localization with the so called geolocator. The geolocator <a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/tree/master/libwlocate">[8]</a><a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/tree/master/lwtrace">[9]</a><a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/tree/master/ffnw-node-info">[10]</a> is a software which makes it possible to receive a position based on wireless networks “seen” around. These informations will be sent to the openwifi map project <a href="http://openwifi.su/">[11]</a>. Knowing the position of the router the hoodselector can find the right hood, because each hood is defined with geocoordinates. If the Router doesn’t have a VPN connection e.g. as a mesh only router, the hoodselector triggers a WIFI scan and searches for neighboured mesh routers in other hoods. If there is an other router with a different BSSID but with the same mesh SSID, the router chooses it’s hood based on the neighboured BSSID. I got much positive feedback from many other Freifunk Communities. Someone even created a integration request issue for gluon <a href="https://github.com/freifunk-gluon/gluon/issues/789">[12]</a>. Gluon is a framework based on openWRT<a href="https://openwrt.org/">[13]</a> and is very popular in the Freifunk community <a href="http://gluon.readthedocs.io/en/latest/">[14]</a>. Before I will send this as a patch to gluon there remains one last urgent issue <a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/issues/63">[15]</a>. The current hoodselector is not able to handle mesh on LAN or WAN connections. So there is still a potential point of failure. Because persons who are not familiar enough with the hood-networking concept can accidentally interconnect hoods over the mesh on cable functions. I plan to fix this problem up to mid of september. When this issue is closed I would like sending patches for integration to gluon. Other issues can be found here<a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/issues?label_name%5B%5D=hoodselector">[16]</a>.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    On the Nordwest Freifunk community we currently have 10 active hoods including a default hood. That is a special hood where all routers will connect to, if they are not able to choose a hood, including also routers there out of ranges from other real hoods. After the last 3 months we can safely say that the setup works. Commits can be found here<a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/commits/master/hoodselector">[17]</a> All currently active hoods can be see here in this picture.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
     <img loading="lazy" class="alignnone wp-image-2393 size-full" src="https://i0.wp.com/ffnw.de/wp-content/uploads/2016/08/map_0.jpeg?resize=538%2C528&#038;ssl=1" alt="map_0" width="538" height="528" srcset="https://i0.wp.com/eol.ffnw.de/wp-content/uploads/2016/08/map_0.jpeg?w=538&ssl=1 538w, https://i0.wp.com/eol.ffnw.de/wp-content/uploads/2016/08/map_0.jpeg?resize=300%2C294&ssl=1 300w, https://i0.wp.com/eol.ffnw.de/wp-content/uploads/2016/08/map_0.jpeg?resize=153%2C150&ssl=1 153w" sizes="(max-width: 538px) 100vw, 538px" data-recalc-dims="1" />
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    As next I would like to tell you about the second sub-project as a prework for the mainline project. In that part I work on a proper workaround with the continuous-integration (CI) system of Gitlab<a href="https://about.gitlab.com/gitlab-ci/">[18]</a>. As I explained in the midterm evaluation, on our Nordwest community we started automatically building of nightly testing firmware images for our community firmware. The CI works now with a dynamical multiple core build processes and auto generated architecture targets out of source. At the moment it is not possible for Gitlab to handle high verbose inside the web-engine while the build process. I discussed the problem with the gitlab team and open an issue <a href="https://gitlab.com/gitlab-org/gitlab-ce/issues/18039">[19]</a>. The CI builder is very helpful for the developing process of the monitoring drone. Here you can see the result for the local community image<a href="https://git.nordwest.freifunk.net/ffnw-firmware/siteconf/builds">[20]</a> and for the monitoring-drone <a href="https://git.nordwest.freifunk.net/ffnw-firmware/monitoring-drone/builds">[21]</a>.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    Mainline Project.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    The mainline project was to create a new firmware for monitoring and quality assurance of open wireless networks. So I started reading of informatins about openWRT <a href="https://openwrt.org/">[13]</a> and LEDE <a href="https://lede-project.org/">[2]</a>. I decided to use LEDE as base system. I know there still no release to use this as a defined base structure (we are all looking forward to this moment) but since july 2016 I am on the developer list and the way where LEDE is growing looks good. Next I looked for a build management script. First I thought about using make and Makefiles but this was not my favourite, so I decided to use the buildscript from the Franken Freifunk community as base, which is written in bash. Now I’ll explain the structure how to work with and use it. The following directories and files are important for basic work:
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    buildscript ← File
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
         BSP ← Dir
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
         Community ← Dir
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
         build_patches ← Dir
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
         modules ← File
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    The buildscript is mainly a bash script for a humanly working with this buildroot. In other words it is an abstraction from the LEDE build ENV.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    Inside the BSP directory are all necessary architecture specific informations.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    BSP means Board-Support-Package. Also inside this directory are default informations like the shell banner system configs and so on.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    The community directory includes community specific configurations, similar like the gluon siteconf <a href="https://github.com/freifunk-gluon/gluon/tree/master/docs/site-example">[22]</a>. Currently there are only two config parameters inside: first the &#8222;AP SSID&#8220; to set a default SSID with witch WIFI network should the monitoring-drone connect and the second parameter, the &#8222;AP BSSID&#8220; to set a node specific BSSID in case if more than one router with the same SSID is present. Then the monitoring drone is pinned on one specific node. This config parameter will be dropped in the future because it is not really effectively if a default BSSID is set . In future I plan to configure thous parameters over an extra web interface<a href="https://git.nordwest.freifunk.net/ffnw-firmware/monitoring-drone/tree/master">[23]</a>.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    In the build_patches directory you can put patches for LEDE or if you what you can also put patches for each package repository. Here is a schemata:
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    build_patches
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
         lede
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
             0001-this is a patch.patch
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
             0002-this is another one.patch
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
         ffnw-packages
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
             0001-this is a patch.patch
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
             0002-this is another one.patch
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    The last file is called modules. Inside this file you can add external package repositories and also select specific packages out of this repositories. Following an example:
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    OPENWRT=(ffnw-packages
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
         $PACKAGEURL
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
         $PACKAGEREV)
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    OPENWRT_PKGS=&#8220;libwlocate lwtrace ffnw-node-info hoodselector&#8220;
  </p>
  
  <p>
    Clemens and I discussed about the API design<a href="https://git.nordwest.freifunk.net/groups/netmon-sc">[24]</a> regarding the communication between the monitoring drone and the netmon core. So we met together. Here a picture:
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    <img loading="lazy" class="alignnone size-full wp-image-2394" src="https://i1.wp.com/ffnw.de/wp-content/uploads/2016/08/IMG_20160722_194330_0.jpg?resize=375%2C500&#038;ssl=1" alt="IMG_20160722_194330_0" width="375" height="500" srcset="https://i0.wp.com/eol.ffnw.de/wp-content/uploads/2016/08/IMG_20160722_194330_0.jpg?w=375&ssl=1 375w, https://i0.wp.com/eol.ffnw.de/wp-content/uploads/2016/08/IMG_20160722_194330_0.jpg?resize=225%2C300&ssl=1 225w, https://i0.wp.com/eol.ffnw.de/wp-content/uploads/2016/08/IMG_20160722_194330_0.jpg?resize=113%2C150&ssl=1 113w" sizes="(max-width: 375px) 100vw, 375px" data-recalc-dims="1" />
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    At last point were the seminars. During the Google Summer of Code we started to gave seminars for technical aspects of Freifunk because we have not enough developers and system administrators. That is mostly a big problem in volunteer activities. On the hacking sessions we follow a simple structure:
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    – two lectures about Freifunk technical aspects.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    – discus about the contend of the lectures
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    – work session on projects
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    On the first hacking session at the 28. may 2:00 PM we created video recordings of the two lectures, you can find them here<a href="https://www.youtube.com/channel/UCX0nJzimLNF38pfgQIuZLEQ">[25]</a>. The next hacking session were failures because of Clemens and my exams. In future there will follow other streams about tecnical aspects of Freifunk.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    Last but not least, my future plans:
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    For the hoodselector, I plan to close up the last urgent issue<a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/issues/63">[15]</a> that I mentored in the above for the migration into gluon I also started prework on gluon for this. One part was the implementation of a sequential code minifying process at compile time <a href="https://github.com/freifunk-gluon/gluon/commits/master?author=2tata">[26]</a>. Also some other issues are still open so I will continuing the work on the hoodselector<a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/issues?label_name%5B%5D=hoodselector">[16]</a>.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    For the monitoring firmware they currently is just configurable over ssh. A web interface should follow soon and also a plugin system for community specific monitoring data requests.
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    On the Kieler Linux information days<a href="http://www.kilux.de/">[27]</a> inside the Kieler Innovations- and technology center I will hold amongst others 4 presantations about Freifunk relevants themes:
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
        Hoodselector – Network segmentation for Layer 2 routing at 11:00 (16.09.2016)<a href="http://www.kilux.de/index.php?seite=programm.html&untermenu=Besucher-Info#248">[28]</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
        Wireless-based localization (openwifi.su project) at 13:00 (16.09.2016)<a href="http://www.kilux.de/index.php?seite=programm.html&untermenu=Besucher-Info#246">[29]</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
        OpenWRT Embedded Linux distribution at 16:00 (16.09.2016)<a href="http://www.kilux.de/index.php?seite=programm.html&untermenu=Besucher-Info#247">[30]</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
        Freifunk Kiel/Nordwest (2016) – year review at 16:00 (17.09.2016)<a href="http://www.kilux.de/index.php?seite=programm.html&untermenu=Besucher-Info#263">[31]</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [0] <a href="http://blog.freifunk.net/2016/monitoring-and-quality-assurance-open-wifi-networks-out-client-view">http://blog.freifunk.net/2016/monitoring-and-quality-assurance-open-wifi-networks-out-client-view</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [1] <a href="http://blog.freifunk.net/2016/monitoring-and-quality-assurance-open-wifi-networks-out-client-view-midterm-evaluation">http://blog.freifunk.net/2016/monitoring-and-quality-assurance-open-wifi-networks-out-client-view-midterm-evaluation</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [2] <a href="https://lede-project.org/">https://lede-project.org/</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [3] <a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/blob/master/hoods/files/lib/ffnw/hoods/hoods.json">https://git.nordwest.freifunk.net/ffnw-firmware/packages/blob/master/hoods/files/lib/ffnw/hoods/hoods.json</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [4] <a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/blob/master/hoodselector/luasrc/hoodselector">https://git.nordwest.freifunk.net/ffnw-firmware/packages/blob/master/hoodselector/luasrc/hoodselector</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [5] <a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/commits/master/hoods">https://git.nordwest.freifunk.net/ffnw-firmware/packages/commits/master/hoods</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [6] <a href="http://hood.ffnw/hoodgen.html#">http://hood.ffnw/hoodgen.html#</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [7] <a href="https://git.nordwest.freifunk.net/ffnw-server/hoodgen">https://git.nordwest.freifunk.net/ffnw-server/hoodgen</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [8] <a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/tree/master/libwlocate">https://git.nordwest.freifunk.net/ffnw-firmware/packages/tree/master/libwlocate</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [9] <a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/tree/master/lwtrace">https://git.nordwest.freifunk.net/ffnw-firmware/packages/tree/master/lwtrace</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [10] <a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/tree/master/ffnw-node-info">https://git.nordwest.freifunk.net/ffnw-firmware/packages/tree/master/ffnw-node-info</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [11] <a href="http://openwifi.su/">http://openwifi.su/</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [12] <a href="https://github.com/freifunk-gluon/gluon/issues/789">https://github.com/freifunk-gluon/gluon/issues/789</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [13] <a href="https://openwrt.org/">https://openwrt.org/</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [14] <a href="http://gluon.readthedocs.io/en/latest/">http://gluon.readthedocs.io/en/latest/</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [15] <a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/issues/63">https://git.nordwest.freifunk.net/ffnw-firmware/packages/issues/63</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [16] <a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/issues?label_name%5B%5D=hoodselector">https://git.nordwest.freifunk.net/ffnw-firmware/packages/issues?label_name%5B%5D=hoodselector</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [17] <a href="https://git.nordwest.freifunk.net/ffnw-firmware/packages/commits/master/hoodselector">https://git.nordwest.freifunk.net/ffnw-firmware/packages/commits/master/hoodselector</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [18] <a href="https://about.gitlab.com/gitlab-ci/">https://about.gitlab.com/gitlab-ci/</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [19] <a href="https://gitlab.com/gitlab-org/gitlab-ce/issues/18039">https://gitlab.com/gitlab-org/gitlab-ce/issues/18039</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [20] <a href="https://git.nordwest.freifunk.net/ffnw-firmware/siteconf/builds">https://git.nordwest.freifunk.net/ffnw-firmware/siteconf/builds</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [21] <a href="https://git.nordwest.freifunk.net/ffnw-firmware/monitoring-drone/builds">https://git.nordwest.freifunk.net/ffnw-firmware/monitoring-drone/builds</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [22] <a href="https://github.com/freifunk-gluon/gluon/tree/master/docs/site-example">https://github.com/freifunk-gluon/gluon/tree/master/docs/site-example</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [23] <a href="https://git.nordwest.freifunk.net/ffnw-firmware/monitoring-drone/tree/master">https://git.nordwest.freifunk.net/ffnw-firmware/monitoring-drone/tree/master</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [24] <a href="https://git.nordwest.freifunk.net/groups/netmon-sc">https://git.nordwest.freifunk.net/groups/netmon-sc</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [25] <a href="https://www.youtube.com/channel/UCX0nJzimLNF38pfgQIuZLEQ">https://www.youtube.com/channel/UCX0nJzimLNF38pfgQIuZLEQ</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [26] <a href="https://github.com/freifunk-gluon/gluon/commits/master?author=2tata">https://github.com/freifunk-gluon/gluon/commits/master?author=2tata</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [27] <a href="http://www.kilux.de/">http://www.kilux.de/</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [28] <a href="http://www.kilux.de/index.php?seite=programm.html&untermenu=Besucher-Info#248">http://www.kilux.de/index.php?seite=programm.html&untermenu=Besucher-Info#248</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [29] <a href="http://www.kilux.de/index.php?seite=programm.html&untermenu=Besucher-Info#246">http://www.kilux.de/index.php?seite=programm.html&untermenu=Besucher-Info#246</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [30] <a href="http://www.kilux.de/index.php?seite=programm.html&untermenu=Besucher-Info#247">http://www.kilux.de/index.php?seite=programm.html&untermenu=Besucher-Info#247</a>
  </p>
  
  <p class="western" style="margin-bottom: 0cm; line-height: 100%;">
    [31] <a href="http://www.kilux.de/index.php?seite=programm.html&untermenu=Besucher-Info#263">http://www.kilux.de/index.php?seite=programm.html&untermenu=Besucher-Info#263</a>
  </p>