Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • firmware/gluon
  • 0x4A6F/gluon
  • patrick/gluon
3 results
Select Git revision
Show changes
Showing
with 1664 additions and 147 deletions
WLAN configuration
==================
Gluon allows to configure 2.4GHz and 5GHz radios independently. The configuration
may include one or both of the two networks "client" (AP mode) and "mesh" (802.11s
mode), which can be used simultaneously. See :doc:`../user/site` for details on the
configuration.
Outdoor mode
------------
Configuring the node for outdoor use tunes the 5 GHz radio to a frequency and transmission power that conforms with the local regulatory requirements.
It also enables dynamic frequency selection (DFS; radar detection).
At the same time, mesh functionality is disabled as it requires neighbouring nodes to stay on the same channel permanently.
Upgrade behaviour
-----------------
For each of these networks, the site configuration may define a `disabled` flag (by
default, all configured networks are enabled). This flag is merely a default setting,
on upgrades the existing setting is always retained (as this setting may have been changed
by the user). This means that it is not possible to enable or disable an existing network
configurations during upgrades.
During upgrades the wifi channel of the 2.4GHz and 5GHz radio will be restored to the channel
configured in the site.conf. The channel width will be reset to Gluon's default. If you need to preserve
these settings during upgrades you can configure this via the uci section ``gluon-core.wireless``::
uci set gluon.wireless.preserve_channels='1'
When channels should be preserved, toggling the outdoor mode will have no effect on the channel settings.
Therefore, the Outdoor mode settings won't be displayed in config mode.
Keep in mind that nodes running wifi interfaces on custom channels can't mesh with default nodes anymore!
Welcome to Gluon
================
Gluon is a modular framework for creating OpenWrt-based firmwares for wireless mesh nodes.
Several Freifunk communities in Germany use Gluon as the foundation of their Freifunk firmwares.
Gluon is a modular framework for creating OpenWrt-based firmware images for wireless mesh nodes.
Several Freifunk communities in Germany use Gluon as the foundation of their Freifunk firmware.
User Documentation
------------------
.. toctree::
:caption: User Documentation
:maxdepth: 2
user/getting_started
user/site
user/supported_devices
user/x86
user/faq
Features
--------
user/mtu
.. toctree::
:caption: Features
:maxdepth: 2
features/configmode
features/autoupdater
features/wlan-configuration
features/private-wlan
features/mesh-on-wan
features/announce
features/wired-mesh
features/tls
features/dns-cache
features/monitoring
features/multidomain
features/authorized-keys
features/roles
Developer Documentation
-----------------------
features/vpn
features/status-page
.. toctree::
:caption: Developer Documentation
:maxdepth: 2
dev/basics
dev/hardware
dev/packages
dev/upgrade
dev/configmode
dev/wan
dev/i18n
Releases
--------
dev/uplink
dev/mac_addresses
dev/site_library
dev/build
dev/debugging
.. toctree::
:caption: gluon-web Reference
:maxdepth: 1
releases/v2015.1
releases/v2014.4
releases/v2014.3.1
releases/v2014.3
Supported Devices & Architectures
---------------------------------
ar71xx-generic
^^^^^^^^^^^^^^
* Allnet
- ALL0315N
* Buffalo
- WZR-HP-AG300H / WZR-600DHP
- WZR-HP-G450H
* D-Link
- DIR-825 (B1)
- DIR-615 (C1)
* GL-Inet
- 6408A (v1)
- 6416A (v1)
* Linksys
- WRT160NL
dev/web/controller
dev/web/model
dev/web/view
dev/web/i18n
dev/web/config-mode
* Netgear
- WNDR3700 (v1, v2)
- WNDR3800
- WNDRMAC (v2)
* TP-Link
- CPE210 (v1)
- CPE220 (v1)
- CPE510 (v1)
- CPE520 (v1)
- TL-MR3020 (v1)
- TL-MR3040 (v1, v2)
- TL-MR3220 (v1, v2)
- TL-MR3420 (v1, v2)
- TL-WA701N/ND (v1)
- TL-WA750RE (v1)
- TL-WA801N/ND (v2)
- TL-WA850RE (v1)
- TL-WA860RE (v1)
- TL-WA901N/ND (v2, v3)
- TL-WDR3500 (v1)
- TL-WDR3600 (v1)
- TL-WDR4300 (v1)
- TL-WR1043N/ND (v1, v2)
- TL-WR703N (v1)
- TL-WR710N (v1)
- TL-WR740N (v1, v3, v4)
- TL-WR741N/ND (v1, v2, v4)
- TL-WR743N/ND (v1, v2)
- TL-WR841N/ND (v3, v5, v7, v8, v9)
- TL-WR842N/ND (v1, v2)
- TL-WR941N/ND (v2, v3, v4, v5)
- TL-WR2543N/ND (v1)
* Ubiquiti
- Bullet M2
- Nanostation M2
- Nanostation M XW
- Loco M XW
- Picostation M2
- Rocket M2
- UniFi AP
- UniFi AP Pro
- UniFi AP Outdoor
ar71xx-nand
^^^^^^^^^^^
* Netgear
- WNDR3700 (v4)
- WNDR4300 (v1)
mpc85xx-generic
^^^^^^^^^^^^^^^
* TP-Link
- TL-WDR4900 (v1)
x86-generic
^^^^^^^^^^^
* x86-generic
* x86-virtualbox
* x86-vmware
.. toctree::
:caption: Packages
:maxdepth: 1
See also: :doc:`user/x86`
package/gluon-client-bridge
package/gluon-config-mode-domain-select
package/gluon-config-mode-geo-location-osm
package/gluon-ebtables-filter-multicast
package/gluon-ebtables-filter-ra-dhcp
package/gluon-ebtables-limit-arp
package/gluon-ebtables-source-filter
package/gluon-hoodselector
package/gluon-logging
package/gluon-mesh-batman-adv
package/gluon-mesh-wireless-sae
package/gluon-radv-filterd
package/gluon-scheduled-domain-switch
package/gluon-web-admin
package/gluon-web-cellular
package/gluon-web-network
package/gluon-web-logging
x86-kvm_guest
^^^^^^^^^^^^^
* x86-kvm
.. toctree::
:caption: Releases
:maxdepth: 1
See also: :doc:`user/x86`
releases/index
License
-------
See LICENCE_
.. _LICENCE: https://github.com/freifunk-gluon/gluon/blob/master/LICENSE
.. _LICENCE: https://github.com/freifunk-gluon/gluon/blob/main/LICENSE
Indices and tables
==================
* :ref:`genindex`
* :ref:`search`
{
-- multiple codes/names can be defined, the first one is the primary name
-- additional aliases can be defined
domain_names = {
alpha_centauri = 'Alpha Centauri',
rigil_kentaurus = 'Rigil Kentaurus',
proxima_centauri = 'Proxima Centauri',
},
-- 32 byte random data in hexadecimal encoding
-- This data must be unique among all sites and domains!
-- Can be generated using: echo $(hexdump -v -n 32 -e '1/1 "%02x"' </dev/urandom)
domain_seed = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
-- unique network prefixes per domain
prefix4 = '10.xxx.0.0/20',
prefix6 = 'fdxx:xxxx:xxxx:xxxx::/64',
next_node = {
ip4 = '10.xxx.yyy.zzz',
ip6 = 'fdxx:xxxx:xxxx:xxxx::xxxx',
},
wifi24 = {
channel = 1,
ap = {
ssid = "alpha-centauri.example.org",
},
mesh = {
id = 'ueH3uXjdp', -- usually you don't want users to connect to this mesh-SSID, so use a cryptic id that no one will accidentally mistake for the client WiFi
},
},
wifi5 = {
channel = 44,
ap = {
ssid = "alpha-centauri.example.org",
},
mesh = {
id = 'ueH3uXjdp',
},
},
mesh = {
batman_adv = {
routing_algo = 'BATMAN_IV',
},
},
mesh_vpn = {
fastd = {
groups = {
backbone = {
peers = {
peer1 = {
key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
remotes = {'"peer1.example.org" port xxxxx'},
},
peer2 = {
key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
remotes = {'"peer2.example.org" port xxxxx'},
},
},
},
},
},
},
}
../site-example/i18n/
\ No newline at end of file
features {
'autoupdater',
'ebtables-filter-multicast',
'ebtables-filter-ra-dhcp',
'ebtables-limit-arp',
'mesh-batman-adv-15',
'mesh-vpn-fastd',
'respondd',
'status-page',
'web-advanced',
'web-wizard',
}
packages {
'iwinfo',
}
if not device_class('tiny') then
features {'wireless-encryption-wpa3'}
end
../site-example/modules
\ No newline at end of file
{
site_name = 'Centauri Mesh',
site_code = 'centauri',
default_domain = 'alpha_centauri',
timezone = 'CET-1CEST,M3.5.0,M10.5.0/3',
ntp_server = {'ntp1.example.org', 'ntp2.example.org'},
regdom = 'DE',
wifi24 = {
mesh = {
mcast_rate = 12000,
},
},
wifi5 = {
mesh = {
mcast_rate = 12000,
},
},
mesh_vpn = {
fastd = {
methods = {'salsa2012+umac'},
mtu = 1312,
},
bandwidth_limit = {
enabled = false,
egress = 200, -- kbit/s
ingress = 3000, -- kbit/s
},
},
autoupdater = {
branch = 'stable',
branches = {
stable = {
name = 'stable',
mirrors = {
'http://1.updates.example.org/stable/sysupgrade',
-- Requires the tls feature in image-customization.lua
-- 'https://2.updates.example.org/stable/sysupgrade',
-- Uses http or https depending on the tls feature in image-customization.lua
'//3.updates.example.org/stable/sysupgrade',
},
good_signatures = 2,
pubkeys = {
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', -- Alice
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', -- Bob
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', -- Mary
},
},
},
},
}
## gluon site.mk makefile example
## GLUON_MULTIDOMAIN
# Build gluon with multidomain support.
GLUON_MULTIDOMAIN=1
## DEFAULT_GLUON_RELEASE
# version string to use for images
# gluon relies on
# opkg compare-versions "$1" '>>' "$2"
# to decide if a version is newer or not.
DEFAULT_GLUON_RELEASE := 0.6+exp$(shell date '+%Y%m%d')
# Variables set with ?= can be overwritten from the command line
## GLUON_RELEASE
# call make with custom GLUON_RELEASE flag, to use your own release version scheme.
# e.g.:
# $ make images GLUON_RELEASE=23.42+5
# would generate images named like this:
# gluon-ff%site_code%-23.42+5-%router_model%.bin
GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
# Default priority for updates.
GLUON_PRIORITY ?= 0
# Region code required for some images; supported values: us eu
GLUON_REGION ?= eu
# Languages to include
GLUON_LANGS ?= en de
gluon-client-bridge
===================
This package provides a bridge (*br-client*) for connecting clients. It will
also setup a wireless interface, provided it is configured in *site.conf*.
site.conf
---------
wifi24.ap.ssid / wifi5.ap.ssid
SSID for the client network
gluon-config-mode-domain-select
===============================
This package provides a drop-down list for the config mode to select the domain
the node will be placed in. If the selection has changed the upgrade scripts in
``/lib/gluon/upgrade/`` are triggered to update the nodes configuration.
Hiding domains could be useful for default or testing domains, which should not
be accidentally selected by a node operator.
domains/\*.conf
---------------
hide_domain \: optional (defaults to false)
- ``false`` shows this domain in drop-down list
- ``true`` hides this domain
Example::
hide_domain = true
docs/package/gluon-config-mode-geo-location-osm.png

345 KiB

.. _package-gluon-config-mode-geo-location-osm:
gluon-config-mode-geo-location-osm
==================================
When package *gluon-config-mode-geo-location-osm* is enabled, the configuration wizard will
try to load an OSM-based map to allow the user to specify the node location.
Loading the map requires a working internet connection, for example via WLAN
(while connected to the Gluon node via Ethernet).
.. image:: gluon-config-mode-geo-location-osm.png
gluon-ebtables-filter-multicast
===============================
The *gluon-ebtables-filter-multicast* package filters out various kinds of
non-essential multicast traffic, as this traffic often constitutes a
disproportionate burden on the mesh network. Unfortunately, this breaks many useful services
(Avahi, Bonjour chat, ...), but this seems unavoidable, as the current Avahi implementation is
optimized for small local networks and causes too much traffic in large mesh networks.
The multicast packets are filtered between the nodes' client bridge (*br-client*) and mesh
interface (*bat0*) on output.
The following packet types are considered essential and aren't filtered:
* ARP (except requests for/replies from 0.0.0.0)
* DHCP, DHCPv6
* ICMPv6 (except Echo Requests (ping) and Node Information Queries (RFC4620)
* IGMP
In addition, the following packet types are allowed to allow experimentation with
layer 3 routing protocols.
* Babel
* OSPF
* RIPng
The following packet types are also allowed:
* BitTorrent Local Peer Discovery (it seems better to have local peers for BitTorrent than sending everything through the internet)
gluon-ebtables-filter-ra-dhcp
=============================
The *gluon-ebtables-filter-ra-dhcp* package tries to prevent common
misconfigurations (i.e. connecting the client interface of a Gluon
node to a private network) from causing issues for either of the
networks.
The rules are the following:
* DHCP requests, DHCPv6 requests and Router Solicitations may only be sent from clients to the mesh, but aren't forwarded
from the mesh to clients
* DHCP replies, DHCPv6 replies and Router Advertisements from clients aren't forwarded to the mesh
gluon-ebtables-limit-arp
========================
The *gluon-ebtables-limit-arp* package adds filters to limit the
amount of ARP requests client devices are allowed to send into the
mesh.
The limits per client device, identified by its MAC address, are
6 packets per minute and 1 per second per node in total.
A burst of up to 50 ARP requests is allowed until the rate-limiting
takes effect (see ``--limit-burst`` in ``ebtables(8)``).
Furthermore, ARP requests for a target IP already present in the
batman-adv DAT cache are excluded from rate-limiting, in regard
to both counting and filtering, as batman-adv will be able
to respond locally without a burden for the mesh. Therefore, this
limiter should not affect popular target IP addresses, like those
of gateways or nameservers.
However it mitigates the impact on the mesh when a larger range of
its IPv4 subnet is being scanned, which would otherwise result in
a significant amount of ARP chatter, even for unused IP addresses.
This package is installed by default if the selected routing
feature is *mesh-batman-adv-15*.
It can be unselected via::
packages {
'-gluon-ebtables-limit-arp',
}
gluon-ebtables-source-filter
============================
The *gluon-ebtables-source-filter* package adds an additional layer-2 filter
ruleset to prevent unreasonable traffic entering the network via the nodes.
Unreasonable means traffic entering the mesh via a node which source IP does
not belong to the configured IP space.
You may first check if there is a certain proportion of unreasonable traffic,
before adding this package to the firmware image. Furthermore, you should not
use this package if some kind of gateway or upstream network is provided by
a device connected to the client port.
site.conf
---------
prefix4 : optional
- IPv4 subnet
prefix6 :
- IPv6 subnet
extra_prefixes6 : optional
- list of additional IPv6 subnets
Example::
prefix4 = '198.51.100.0/21',
prefix6 = '2001:db8:8::/64',
extra_prefixes6 = {
'2001:db8:9::/64',
'2001:db8:100::/60',
},
docs/package/gluon-hoodselector-domainmap.jpeg

291 KiB

<?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>
<?xml version="1.0" encoding="UTF-8"?>
<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
<dia:diagramdata>
<dia:attribute name="background">
<dia:color val="#ffffff"/>
</dia:attribute>
<dia:attribute name="pagebreak">
<dia:color val="#000099"/>
</dia:attribute>
<dia:attribute name="paper">
<dia:composite type="paper">
<dia:attribute name="name">
<dia:string>#A4#</dia:string>
</dia:attribute>
<dia:attribute name="tmargin">
<dia:real val="2.8222000598907471"/>
</dia:attribute>
<dia:attribute name="bmargin">
<dia:real val="2.8222000598907471"/>
</dia:attribute>
<dia:attribute name="lmargin">
<dia:real val="2.8222000598907471"/>
</dia:attribute>
<dia:attribute name="rmargin">
<dia:real val="2.8222000598907471"/>
</dia:attribute>
<dia:attribute name="is_portrait">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="scaling">
<dia:real val="1"/>
</dia:attribute>
<dia:attribute name="fitto">
<dia:boolean val="false"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
<dia:attribute name="grid">
<dia:composite type="grid">
<dia:attribute name="width_x">
<dia:real val="1"/>
</dia:attribute>
<dia:attribute name="width_y">
<dia:real val="1"/>
</dia:attribute>
<dia:attribute name="visible_x">
<dia:int val="1"/>
</dia:attribute>
<dia:attribute name="visible_y">
<dia:int val="1"/>
</dia:attribute>
<dia:composite type="color"/>
</dia:composite>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#d8e5e5"/>
</dia:attribute>
<dia:attribute name="guides">
<dia:composite type="guides">
<dia:attribute name="hguides"/>
<dia:attribute name="vguides"/>
</dia:composite>
</dia:attribute>
</dia:diagramdata>
<dia:layer name="Background" visible="true" active="true">
<dia:object type="Standard - Line" version="0" id="O0">
<dia:attribute name="obj_pos">
<dia:point val="5.118,6.44117"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="5.09285,6.17583;9.85847,6.75673"/>
</dia:attribute>
<dia:attribute name="conn_endpoints">
<dia:point val="5.118,6.44117"/>
<dia:point val="9.80257,6.46945"/>
</dia:attribute>
<dia:attribute name="numcp">
<dia:int val="1"/>
</dia:attribute>
<dia:attribute name="line_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="end_arrow">
<dia:enum val="3"/>
</dia:attribute>
<dia:attribute name="end_arrow_length">
<dia:real val="0.5"/>
</dia:attribute>
<dia:attribute name="end_arrow_width">
<dia:real val="0.5"/>
</dia:attribute>
<dia:connections>
<dia:connection handle="0" to="O22" connection="16"/>
<dia:connection handle="1" to="O1" connection="16"/>
</dia:connections>
</dia:object>
<dia:object type="Flowchart - Ellipse" version="0" id="O1">
<dia:attribute name="obj_pos">
<dia:point val="9.82771,4.17451"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="9.80271,4.14951;15.9493,8.82649"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="9.82771,4.17451"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="6.0965962127718223"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="4.6269755421061918"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="padding">
<dia:real val="0.35355339059327379"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#Load domains#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="12.876,6.68206"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Line" version="0" id="O2">
<dia:attribute name="obj_pos">
<dia:point val="15.9492,6.48801"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="15.9242,6.19756;17.8779,6.77846"/>
</dia:attribute>
<dia:attribute name="conn_endpoints">
<dia:point val="15.9492,6.48801"/>
<dia:point val="17.822,6.48801"/>
</dia:attribute>
<dia:attribute name="numcp">
<dia:int val="1"/>
</dia:attribute>
<dia:attribute name="line_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="end_arrow">
<dia:enum val="3"/>
</dia:attribute>
<dia:attribute name="end_arrow_length">
<dia:real val="0.5"/>
</dia:attribute>
<dia:attribute name="end_arrow_width">
<dia:real val="0.5"/>
</dia:attribute>
<dia:connections>
<dia:connection handle="0" to="O1" connection="16"/>
<dia:connection handle="1" to="O5" connection="16"/>
</dia:connections>
</dia:object>
<dia:object type="Standard - Text" version="1" id="O3">
<dia:attribute name="obj_pos">
<dia:point val="5.3,3.85"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="5.3,3.25594;9.1875,4.00094"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#initialization#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="5.3,3.85"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="0"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
<dia:attribute name="valign">
<dia:enum val="3"/>
</dia:attribute>
<dia:attribute name="fill_color">
<dia:color val="#00ff00"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Text" version="1" id="O4">
<dia:attribute name="obj_pos">
<dia:point val="20.9,3.85"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="18.0225,3.25594;23.7775,4.00094"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#geolocation mode#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="20.9,3.85"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
<dia:attribute name="valign">
<dia:enum val="3"/>
</dia:attribute>
<dia:attribute name="fill_color">
<dia:color val="#00ff00"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
</dia:object>
<dia:object type="Flowchart - Ellipse" version="0" id="O5">
<dia:attribute name="obj_pos">
<dia:point val="17.8469,4.6641"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="17.8219,4.6391;24.2302,8.33694"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="17.8469,4.6641"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="6.3582762174076271"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="3.6478378887872491"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="padding">
<dia:real val="0.35355339059327379"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#geo pos. exist#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="21.026,6.68208"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Line" version="0" id="O6">
<dia:attribute name="obj_pos">
<dia:point val="24.2046,6.4672"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="24.1794,6.13989;30.4126,6.72078"/>
</dia:attribute>
<dia:attribute name="conn_endpoints">
<dia:point val="24.2046,6.4672"/>
<dia:point val="30.3567,6.4269"/>
</dia:attribute>
<dia:attribute name="numcp">
<dia:int val="1"/>
</dia:attribute>
<dia:attribute name="line_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="end_arrow">
<dia:enum val="3"/>
</dia:attribute>
<dia:attribute name="end_arrow_length">
<dia:real val="0.5"/>
</dia:attribute>
<dia:attribute name="end_arrow_width">
<dia:real val="0.5"/>
</dia:attribute>
<dia:connections>
<dia:connection handle="0" to="O5" connection="16"/>
<dia:connection handle="1" to="O24" connection="16"/>
</dia:connections>
</dia:object>
<dia:object type="Standard - Text" version="1" id="O7">
<dia:attribute name="obj_pos">
<dia:point val="26.05,6.1"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="26.05,5.50594;27.5725,6.25094"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#false#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="26.05,6.1"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="0"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
<dia:attribute name="valign">
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
<dia:object type="Flowchart - Ellipse" version="0" id="O8">
<dia:attribute name="obj_pos">
<dia:point val="17.7746,11.5374"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="17.7496,11.5124;24.2503,14.7877"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="17.7746,11.5374"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="6.4506704922983635"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="3.2253352461491853"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="padding">
<dia:real val="0.35355339059327379"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#get geoDomain#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="20.9999,13.3441"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Line" version="0" id="O9">
<dia:attribute name="obj_pos">
<dia:point val="21.0188,8.33651"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="20.718,8.31141;21.2989,11.5689"/>
</dia:attribute>
<dia:attribute name="conn_endpoints">
<dia:point val="21.0188,8.33651"/>
<dia:point val="21.0063,11.513"/>
</dia:attribute>
<dia:attribute name="numcp">
<dia:int val="1"/>
</dia:attribute>
<dia:attribute name="line_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="end_arrow">
<dia:enum val="3"/>
</dia:attribute>
<dia:attribute name="end_arrow_length">
<dia:real val="0.5"/>
</dia:attribute>
<dia:attribute name="end_arrow_width">
<dia:real val="0.5"/>
</dia:attribute>
<dia:connections>
<dia:connection handle="0" to="O5" connection="16"/>
<dia:connection handle="1" to="O8" connection="16"/>
</dia:connections>
</dia:object>
<dia:object type="Standard - Text" version="1" id="O10">
<dia:attribute name="obj_pos">
<dia:point val="21.4,9.75"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="21.4,9.15594;22.7125,9.90094"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#true#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="21.4,9.75"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="0"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
<dia:attribute name="valign">
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Line" version="0" id="O11">
<dia:attribute name="obj_pos">
<dia:point val="21,14.7868"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="20.7096,14.7618;21.2905,16.6597"/>
</dia:attribute>
<dia:attribute name="conn_endpoints">
<dia:point val="21,14.7868"/>
<dia:point val="21,16.6038"/>
</dia:attribute>
<dia:attribute name="numcp">
<dia:int val="1"/>
</dia:attribute>
<dia:attribute name="line_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="end_arrow">
<dia:enum val="3"/>
</dia:attribute>
<dia:attribute name="end_arrow_length">
<dia:real val="0.5"/>
</dia:attribute>
<dia:attribute name="end_arrow_width">
<dia:real val="0.5"/>
</dia:attribute>
<dia:connections>
<dia:connection handle="0" to="O8" connection="16"/>
<dia:connection handle="1" to="O13" connection="16"/>
</dia:connections>
</dia:object>
<dia:object type="Standard - Line" version="0" id="O12">
<dia:attribute name="obj_pos">
<dia:point val="23.2628,11.9797"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="23.2291,7.69635;31.5265,12.0134"/>
</dia:attribute>
<dia:attribute name="conn_endpoints">
<dia:point val="23.2628,11.9797"/>
<dia:point val="31.4768,7.73128"/>
</dia:attribute>
<dia:attribute name="numcp">
<dia:int val="1"/>
</dia:attribute>
<dia:attribute name="line_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="end_arrow">
<dia:enum val="3"/>
</dia:attribute>
<dia:attribute name="end_arrow_length">
<dia:real val="0.5"/>
</dia:attribute>
<dia:attribute name="end_arrow_width">
<dia:real val="0.5"/>
</dia:attribute>
<dia:connections>
<dia:connection handle="0" to="O8" connection="16"/>
<dia:connection handle="1" to="O24" connection="16"/>
</dia:connections>
</dia:object>
<dia:object type="Flowchart - Ellipse" version="0" id="O13">
<dia:attribute name="obj_pos">
<dia:point val="17.8077,16.6288"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="17.7827,16.6038;24.2174,19.8462"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="17.8077,16.6288"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="6.3847117521647201"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="3.19235587608236"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="padding">
<dia:real val="0.35355339059327379"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#set geoDomain#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="21.0001,18.419"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Text" version="1" id="O14">
<dia:attribute name="obj_pos">
<dia:point val="25.8,9.7625"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="25.8,9.16844;27.3225,9.91344"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#false#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="25.8,9.7625"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="0"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
<dia:attribute name="valign">
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Text" version="1" id="O15">
<dia:attribute name="obj_pos">
<dia:point val="21.5,15.6625"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="21.5,15.0684;22.8125,15.8134"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#true#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="21.5,15.6625"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="0"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
<dia:attribute name="valign">
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
<dia:object type="Flowchart - Ellipse" version="0" id="O16">
<dia:attribute name="obj_pos">
<dia:point val="18.7879,21.5689"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="18.7629,21.5439;23.2372,23.806"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="18.7879,21.5689"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="4.4242658164348718"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="2.2121329082174381"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="padding">
<dia:real val="0.35355339059327379"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#Exit#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="21,22.869"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Line" version="0" id="O17">
<dia:attribute name="obj_pos">
<dia:point val="21,19.8465"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="20.7096,19.8215;21.2905,21.5999"/>
</dia:attribute>
<dia:attribute name="conn_endpoints">
<dia:point val="21,19.8465"/>
<dia:point val="21,21.544"/>
</dia:attribute>
<dia:attribute name="numcp">
<dia:int val="1"/>
</dia:attribute>
<dia:attribute name="line_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="end_arrow">
<dia:enum val="3"/>
</dia:attribute>
<dia:attribute name="end_arrow_length">
<dia:real val="0.5"/>
</dia:attribute>
<dia:attribute name="end_arrow_width">
<dia:real val="0.5"/>
</dia:attribute>
<dia:connections>
<dia:connection handle="0" to="O13" connection="16"/>
<dia:connection handle="1" to="O16" connection="16"/>
</dia:connections>
</dia:object>
<dia:object type="Standard - Text" version="1" id="O18">
<dia:attribute name="obj_pos">
<dia:point val="45.6176,6.49732"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="45.6176,5.90326;45.6176,6.64826"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="45.6176,6.49732"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="0"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
<dia:attribute name="valign">
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Text" version="1" id="O19">
<dia:attribute name="obj_pos">
<dia:point val="45.6176,6.49732"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="45.6176,5.90326;45.6176,6.64826"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="45.6176,6.49732"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="0"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
<dia:attribute name="valign">
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Text" version="1" id="O20">
<dia:attribute name="obj_pos">
<dia:point val="4.825,11.825"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="4.825,11.2309;4.825,11.9759"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="4.825,11.825"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="0"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
<dia:attribute name="valign">
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Text" version="1" id="O21">
<dia:attribute name="obj_pos">
<dia:point val="4.775,12.575"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="4.775,11.9809;4.775,12.7259"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="4.775,12.575"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="0"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
<dia:attribute name="valign">
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
<dia:object type="Flowchart - Ellipse" version="0" id="O22">
<dia:attribute name="obj_pos">
<dia:point val="1.83,5.245"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="1.805,5.22;5.1191,7.64236"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="1.83,5.245"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="3.2640983876135579"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="2.372360167974596"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="padding">
<dia:real val="0.35355339059327379"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#Start#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="3.46205,6.62524"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Text" version="1" id="O23">
<dia:attribute name="obj_pos">
<dia:point val="33.97,3.865"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="30.5337,3.27094;37.4062,4.01594"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#default domain mode#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="33.97,3.865"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
<dia:attribute name="valign">
<dia:enum val="3"/>
</dia:attribute>
<dia:attribute name="fill_color">
<dia:color val="#00ff00"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
</dia:object>
<dia:object type="Flowchart - Ellipse" version="0" id="O24">
<dia:attribute name="obj_pos">
<dia:point val="30.38,4.57"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="30.355,4.545;37.7359,8.26046"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="30.38,4.57"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="7.3309270381183858"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="3.6654635190591929"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="padding">
<dia:real val="0.35355339059327379"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#set defaultDomain#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="34.0455,6.59679"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Flowchart - Ellipse" version="0" id="O25">
<dia:attribute name="obj_pos">
<dia:point val="40.5379,5.19393"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="40.5129,5.16893;44.9872,7.43106"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="40.5379,5.19393"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="4.4242658164348629"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="2.2121329082174346"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="padding">
<dia:real val="0.35355339059327379"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>#Exit#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="42.75,6.49406"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Line" version="0" id="O26">
<dia:attribute name="obj_pos">
<dia:point val="37.7352,6.35918"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="37.7099,6.04215;40.5698,6.62302"/>
</dia:attribute>
<dia:attribute name="conn_endpoints">
<dia:point val="37.7352,6.35918"/>
<dia:point val="40.5139,6.32639"/>
</dia:attribute>
<dia:attribute name="numcp">
<dia:int val="1"/>
</dia:attribute>
<dia:attribute name="line_width">
<dia:real val="0.05000000074505806"/>
</dia:attribute>
<dia:attribute name="end_arrow">
<dia:enum val="3"/>
</dia:attribute>
<dia:attribute name="end_arrow_length">
<dia:real val="0.5"/>
</dia:attribute>
<dia:attribute name="end_arrow_width">
<dia:real val="0.5"/>
</dia:attribute>
<dia:connections>
<dia:connection handle="0" to="O24" connection="16"/>
<dia:connection handle="1" to="O25" connection="16"/>
</dia:connections>
</dia:object>
</dia:layer>
</dia:diagram>
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:
.. figure:: ./gluon-hoodselector-domainmap.jpeg
:alt: Regional domains visualized as shapes defined by latitude & longitude
© OpenStreetMap contributors
Behaviour
------------------
The following is an abstract state diagram 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 default one without a defined shape
and others which contain shapes.
* **default domain**
The default domain doesn't 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`.