gluon-hoodselector docs: add package documentation

Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>

gluon-hoodselector docs: replace 'Router have' with 'Router has'

gluon-hoodselector: docs: fix spelling/grammar

docs: gluon-hoodselector.rst, chnage 'VPN-mode' to VPN mode and 'trigon polygon' to triangle

Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>

docs/package/gluon-hoodselector: update .dia and .svg to current code behave

Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>

docs/package/gluon-hoodselector: replace hood with domain update doc to current code behave

Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>

docs hoodselector: fix spelling

Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>

docs/package/gluon-hoodselector: fix spelling second round

Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>

docs:gluon-hoodselector.rst: fix spelling

Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>

docs gluon-hoodselector.rst: fix line length

Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>

docs gluon-hoodselector: rename doc imports to be assoziated with the hoodselector

docs gluon-hoodselector: fix image name and rst inmport

Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>

docs gluon-hoodselector: information without es (uncountable)

Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>

docs/package: gluon-hoodselector.rst fix grammer issues

Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>
This commit is contained in:
Jan-Tarek Butt 2018-07-15 11:26:00 +02:00 committed by Martin Weinelt
parent 90baebc2b7
commit f9a47f027b
6 changed files with 1369 additions and 0 deletions

View File

@ -62,6 +62,7 @@ Several Freifunk communities in Germany use Gluon as the foundation of their Fre
package/gluon-ebtables-filter-ra-dhcp
package/gluon-ebtables-limit-arp
package/gluon-ebtables-source-filter
package/gluon-hoodselector
package/gluon-radv-filterd
package/gluon-scheduled-domain-switch
package/gluon-web-admin

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 KiB

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="13cm" height="9cm" viewBox="348 138 253 169" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g>
<rect style="fill: #ffffff" x="389" y="164" width="158" height="115"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="389" y="164" width="158" height="115"/>
</g>
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="348" y="150">
<tspan x="348" y="150">53.22,</tspan>
<tspan x="348" y="166">8.09 #</tspan>
</text>
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="545" y="288">
<tspan x="545" y="288"># 53.36,</tspan>
<tspan x="545" y="304"> 8.32</tspan>
</text>
</svg>

After

Width:  |  Height:  |  Size: 996 B

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,130 @@
gluon-hoodselector
==================
This package provides an automated way to continuously select the correct
domain based on the geolocation of a node. The purpose of Hoodselector is to
automatically detect in which domain the node is located based on its
geolocation settings. Therefore domains are required to have bounding boxes,
defined as polygons or rectangles. Based on this information Hoodselector will
select a domain from the list of known domains and migrate towards it without
requiring a reboot. This package therefore provides a scalable and
decentralized approach to automatic domain selection.
Background information
----------------------
The main problem of the Nordwest Freifunk community was the quickly rising
number of nodes in the network. This indirectly affected the stability of the
network, because the noise inside the network, e.g. management traffic from
the batman-adv protocol, was rising, too. Inside the community there were some
ideas like building separate firmwares for each region. This solution would
cause issues with splitting regions again and nodes scattered among regions
which belong to a different region. Therefore we decided to develop a
dynamic and decentralized management of regions called domains.
The Hoodselector's task is to choose the "right" domains in an intelligent way
and to hold the network together and accessible.
A domain is defined by geostationary fixed shapes by using longitude & latitude
in combination with the domain configuration system. Below you can see a visual
example of a regional domain:
.. image:: gluon-hoodselector-domainmap.jpeg
Behaviour
------------------
The following is an abstract state diagramm which gives an overview
of the process:
.. image:: gluon-hoodselector.svg
The sequence of this diagram reflects the priority of its running modes.
Each mode will be explained separately below.
geolocation mode
^^^^^^^^^^^^^^^^
This mode will only be entered when a node has location coordinates set.
Nodes with a position will set their domain based on it.
The node will skip to the next mode when the node (a) has no position or
(b) its position is not within any of the defined bounding boxes.
default domain mode
^^^^^^^^^^^^^^^^^^^
This mode will be entered if no other mode before fits.
It provides a fallback to the default domain.
Domain shapes
-------------
There are two types of domains: the unique dehault one without a defined shape
and others which contain shapes.
* **default domain**
The default domain doesnt hold any shapes and represents the inverted area of
all other shapes held by other domains with geo coordinates. It will only be
entered if a node could not be matched to a geo domain. A suggested approach is
to define the "old" network as default domain and gradually migrate nodes from
there to geo domains.
* **geo domains**
A geo domain contains shapes, which are described by three dimensional arrays
and represents the geographical size of the domain. There are two possible
definitions of these shapes. The first one is using rectangles so that only
two coordinates per box are needed to define it (see below for an
example). The second one uses polygons which can have multiple edges.
Each domain can hold multiple shapes.
.. image:: gluon-hoodselector-rectangle-example.svg
site.conf
---------
The designer of the shapes must always ensure that no overlapping polygons
between domains will be created or else the order in the domain list will
become relevant. If for example domain A and B overlap, Hoodselector
would, for that overlapping area, only ever reach domain A, but never domain B.
Here is an example of a rectangular definition of a shape:
Example::
hoodselector = {
shapes = {
{
{
lat = 53.128,
lon = 8.187
},
{
lat = 53.163,
lon = 8.216
},
},
},
},
Here is an example of a shape defined by a triangle:
Example::
hoodselector = {
shapes = {
{
{
lat = 53.128,
lon = 8.187
},
{
lat = 53.163,
lon = 8.216
},
{
lat = 53.196,
lon = 8.194
},
},
},
},
This package is incompatible with :doc:`gluon-config-mode-domain-select`.

View File

@ -0,0 +1,142 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="44cm" height="21cm" viewBox="36 65 864 412" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="102.36" y1="128.823" x2="185.552" y2="129.326"/>
<polygon style="fill: #000000" points="185.521,134.325 195.551,129.386 185.582,124.326 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" points="185.521,134.325 195.551,129.386 185.582,124.326 "/>
</g>
<g>
<ellipse style="fill: #ffffff" cx="257.52" cy="129.76" rx="60.966" ry="46.2698"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" cx="257.52" cy="129.76" rx="60.966" ry="46.2698"/>
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="257.52" y="133.66">
<tspan x="257.52" y="133.66">Load domains</tspan>
</text>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="318.984" y1="129.76" x2="345.941" y2="129.76"/>
<polygon style="fill: #000000" points="345.941,134.76 355.941,129.76 345.941,124.76 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" points="345.941,134.76 355.941,129.76 345.941,124.76 "/>
</g>
<g>
<rect style="fill: #00ff00" x="106" y="65.1" width="77.75" height="14.95"/>
<text font-size="12.8" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="106" y="77">
<tspan x="106" y="77">initialization</tspan>
</text>
</g>
<g>
<rect style="fill: #00ff00" x="360.45" y="65.1" width="115.1" height="14.95"/>
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="418" y="77">
<tspan x="418" y="77">geolocation mode</tspan>
</text>
</g>
<g>
<ellipse style="fill: #ffffff" cx="420.521" cy="129.76" rx="63.5828" ry="36.4784"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" cx="420.521" cy="129.76" rx="63.5828" ry="36.4784"/>
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="420.521" y="133.66">
<tspan x="420.521" y="133.66">geo pos. exist</tspan>
</text>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="484.092" y1="129.344" x2="596.635" y2="128.607"/>
<polygon style="fill: #000000" points="596.668,133.607 606.635,128.541 596.602,123.607 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" points="596.668,133.607 606.635,128.541 596.602,123.607 "/>
</g>
<text font-size="12.8" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="521" y="122">
<tspan x="521" y="122">false</tspan>
</text>
<g>
<ellipse style="fill: #ffffff" cx="419.999" cy="263.001" rx="64.5067" ry="32.2534"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" cx="419.999" cy="263.001" rx="64.5067" ry="32.2534"/>
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="419.999" y="266.901">
<tspan x="419.999" y="266.901">get geoDomain</tspan>
</text>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="420.376" y1="166.73" x2="420.169" y2="219.76"/>
<polygon style="fill: #000000" points="415.169,219.74 420.129,229.76 425.168,219.779 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" points="415.169,219.74 420.129,229.76 425.168,219.779 "/>
</g>
<text font-size="12.8" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="428" y="195">
<tspan x="428" y="195">true</tspan>
</text>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="420" y1="295.735" x2="420" y2="321.575"/>
<polygon style="fill: #000000" points="415,321.575 420,331.575 425,321.575 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" points="415,321.575 420,331.575 425,321.575 "/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="465.257" y1="239.593" x2="620.21" y2="159.449"/>
<polygon style="fill: #000000" points="622.507,163.89 629.092,154.855 617.913,155.008 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" points="622.507,163.89 629.092,154.855 617.913,155.008 "/>
</g>
<g>
<ellipse style="fill: #ffffff" cx="420.001" cy="364.499" rx="63.8471" ry="31.9236"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" cx="420.001" cy="364.499" rx="63.8471" ry="31.9236"/>
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="420.001" y="368.399">
<tspan x="420.001" y="368.399">set geoDomain</tspan>
</text>
</g>
<text font-size="12.8" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="516" y="195.25">
<tspan x="516" y="195.25">false</tspan>
</text>
<text font-size="12.8" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="430" y="313.25">
<tspan x="430" y="313.25">true</tspan>
</text>
<g>
<ellipse style="fill: #ffffff" cx="420.001" cy="453.499" rx="44.2427" ry="22.1213"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" cx="420.001" cy="453.499" rx="44.2427" ry="22.1213"/>
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="420.001" y="457.399">
<tspan x="420.001" y="457.399">Exit</tspan>
</text>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="420.001" y1="396.929" x2="420.001" y2="420.38"/>
<polygon style="fill: #000000" points="415.001,420.38 420.001,430.38 425.001,420.38 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" points="415.001,420.38 420.001,430.38 425.001,420.38 "/>
</g>
<text font-size="12.8" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="912.352" y="129.946">
<tspan x="912.352" y="129.946"></tspan>
</text>
<text font-size="12.8" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="912.352" y="129.946">
<tspan x="912.352" y="129.946"></tspan>
</text>
<text font-size="12.8" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="96.5" y="236.5">
<tspan x="96.5" y="236.5"></tspan>
</text>
<text font-size="12.8" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="95.5" y="251.5">
<tspan x="95.5" y="251.5"></tspan>
</text>
<g>
<ellipse style="fill: #ffffff" cx="69.241" cy="128.624" rx="32.641" ry="23.7236"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" cx="69.241" cy="128.624" rx="32.641" ry="23.7236"/>
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="69.241" y="132.524">
<tspan x="69.241" y="132.524">Start</tspan>
</text>
</g>
<g>
<rect style="fill: #00ff00" x="610.675" y="65.4" width="137.45" height="14.95"/>
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="679.4" y="77.3">
<tspan x="679.4" y="77.3">default domain mode</tspan>
</text>
</g>
<g>
<ellipse style="fill: #ffffff" cx="680.909" cy="128.055" rx="73.3093" ry="36.6546"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" cx="680.909" cy="128.055" rx="73.3093" ry="36.6546"/>
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="680.909" y="131.955">
<tspan x="680.909" y="131.955">set defaultDomain</tspan>
</text>
</g>
<g>
<ellipse style="fill: #ffffff" cx="855.001" cy="126" rx="44.2427" ry="22.1213"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" cx="855.001" cy="126" rx="44.2427" ry="22.1213"/>
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="855.001" y="129.9">
<tspan x="855.001" y="129.9">Exit</tspan>
</text>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 0.02; stroke: #000000" x1="754.705" y1="127.184" x2="800.277" y2="126.646"/>
<polygon style="fill: #000000" points="800.336,131.645 810.276,126.528 800.218,121.646 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.02; stroke: #000000" points="800.336,131.645 810.276,126.528 800.218,121.646 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.2 KiB