Skip to content
Snippets Groups Projects
Unverified Commit 1f7ed28b authored by Matthias Schiffer's avatar Matthias Schiffer
Browse files

gluon-core: set VXLAN/legacy mode in site config

In multidomain setups, VXLAN is enabled by default, but can be disabled in
domain configs using the mesh/vxlan option. In single domain setups, the
mesh/vxlan option is mandatory.

The UCI option for legacy mode is removed.

Fixes #1364
parent 5d92f125
No related branches found
No related tags found
No related merge requests found
...@@ -79,6 +79,10 @@ ...@@ -79,6 +79,10 @@
}, },
}, },
mesh = {
vxlan = true,
},
-- The next node feature allows clients to always reach the node it is -- The next node feature allows clients to always reach the node it is
-- connected to using a known IP address. -- connected to using a known IP address.
next_node = { next_node = {
......
...@@ -182,9 +182,16 @@ next_node \: package ...@@ -182,9 +182,16 @@ next_node \: package
in isolated mesh segments). This is possible by providing one or more names in isolated mesh segments). This is possible by providing one or more names
in the ``name`` field. in the ``name`` field.
mesh \: optional mesh
Configuration of general mesh functionality. Configuration of general mesh functionality.
To avoid inter-mesh links, Gluon can encapsulate the mesh protocol in VXLAN
for Mesh-on-LAN/WAN. It is recommended to set *mesh.vxlan* to ``true`` to
enable VXLAN in new setups. Setting it to ``false`` disables this
encapsulation to allow meshing with other nodes that don't support VXLAN
(Gluon 2017.1.x and older). In multi-domain setups, *mesh.vxlan* is optional
and defaults to ``true``.
Gluon generally segments layer-2 meshes so that each node becomes IGMP/MLD Gluon generally segments layer-2 meshes so that each node becomes IGMP/MLD
querier for its own local clients. This is necessary for reliable multicast querier for its own local clients. This is necessary for reliable multicast
snooping. The segmentation is realized by preventing IGMP/MLD queries from snooping. The segmentation is realized by preventing IGMP/MLD queries from
...@@ -197,7 +204,7 @@ mesh \: optional ...@@ -197,7 +204,7 @@ mesh \: optional
the mesh; this is usually not a problem, as such setups are unusual. If the mesh; this is usually not a problem, as such setups are unusual. If
you run a special-purpose mesh that requires membership reports to be you run a special-purpose mesh that requires membership reports to be
working, this filtering can be disabled by setting the working, this filtering can be disabled by setting the
*filter_membership_reports* option to ``false``. optional *filter_membership_reports* value to ``false``.
In addition, options specific to the batman-adv routing protocol can be set In addition, options specific to the batman-adv routing protocol can be set
in the *batman_adv* section: in the *batman_adv* section:
...@@ -208,6 +215,7 @@ mesh \: optional ...@@ -208,6 +215,7 @@ mesh \: optional
:: ::
mesh = { mesh = {
vxlan = true,
filter_membership_reports = false, filter_membership_reports = false,
batman_adv = { batman_adv = {
gw_sel_class = 1, gw_sel_class = 1,
......
...@@ -73,6 +73,8 @@ need_string_array(in_domain({'next_node', 'name'}), false) ...@@ -73,6 +73,8 @@ need_string_array(in_domain({'next_node', 'name'}), false)
need_string_match(in_domain({'next_node', 'ip6'}), '^[%x:]+$', false) need_string_match(in_domain({'next_node', 'ip6'}), '^[%x:]+$', false)
need_string_match(in_domain({'next_node', 'ip4'}), '^%d+.%d+.%d+.%d+$', false) need_string_match(in_domain({'next_node', 'ip4'}), '^%d+.%d+.%d+.%d+$', false)
need_boolean(in_domain({'mesh', 'vxlan'}), false)
need_boolean(in_site({'mesh_on_wan'}), false) need_boolean(in_site({'mesh_on_wan'}), false)
need_boolean(in_site({'mesh_on_lan'}), false) need_boolean(in_site({'mesh_on_lan'}), false)
need_boolean(in_site({'single_as_lan'}), false) need_boolean(in_site({'single_as_lan'}), false)
...@@ -7,7 +7,6 @@ init_proto "$@" ...@@ -7,7 +7,6 @@ init_proto "$@"
proto_gluon_wired_init_config() { proto_gluon_wired_init_config() {
proto_config_add_boolean transitive proto_config_add_boolean transitive
proto_config_add_int index proto_config_add_int index
proto_config_add_boolean legacy
} }
xor2() { xor2() {
...@@ -28,13 +27,15 @@ proto_gluon_wired_setup() { ...@@ -28,13 +27,15 @@ proto_gluon_wired_setup() {
local meshif="$config" local meshif="$config"
local transitive index legacy local vxlan="$(lua -e 'print(require("gluon.site").mesh.vxlan(true))')"
json_get_vars transitive index legacy
local transitive index
json_get_vars transitive index
proto_init_update "$ifname" 1 proto_init_update "$ifname" 1
proto_send_update "$config" proto_send_update "$config"
if [ "${legacy:-0}" -eq 0 ]; then if [ "$vxlan" = 'true' ]; then
meshif="vx_$config" meshif="vx_$config"
json_init json_init
......
...@@ -22,11 +22,9 @@ uci:set('network', 'mesh_wan', 'disabled', not enable) ...@@ -22,11 +22,9 @@ uci:set('network', 'mesh_wan', 'disabled', not enable)
if uci:get('network', 'mesh_wan', 'transitive') == nil then if uci:get('network', 'mesh_wan', 'transitive') == nil then
uci:set('network', 'mesh_wan', 'transitive', true) uci:set('network', 'mesh_wan', 'transitive', true)
end end
if uci:get('network', 'mesh_wan', 'legacy') == nil then
uci:set('network', 'mesh_wan', 'legacy', old_proto == 'gluon_mesh')
end
uci:delete('network', 'mesh_wan', 'auto') uci:delete('network', 'mesh_wan', 'auto')
uci:delete('network', 'mesh_wan', 'fixed_mtu') uci:delete('network', 'mesh_wan', 'fixed_mtu')
uci:delete('network', 'mesh_wan', 'legacy')
uci:save('network') uci:save('network')
...@@ -50,11 +50,9 @@ uci:set('network', 'mesh_lan', 'disabled', not enable) ...@@ -50,11 +50,9 @@ uci:set('network', 'mesh_lan', 'disabled', not enable)
if uci:get('network', 'mesh_lan', 'transitive') == nil then if uci:get('network', 'mesh_lan', 'transitive') == nil then
uci:set('network', 'mesh_lan', 'transitive', true) uci:set('network', 'mesh_lan', 'transitive', true)
end end
if uci:get('network', 'mesh_lan', 'legacy') == nil then
uci:set('network', 'mesh_lan', 'legacy', old_proto == 'gluon_mesh')
end
uci:delete('network', 'mesh_lan', 'auto') uci:delete('network', 'mesh_lan', 'auto')
uci:delete('network', 'mesh_lan', 'fixed_mtu') uci:delete('network', 'mesh_lan', 'fixed_mtu')
uci:delete('network', 'mesh_lan', 'legacy')
uci:save('network') uci:save('network')
-- mesh/vxlan is required in single domain setups (this_domain() is nil)
need_boolean(in_domain({'mesh', 'vxlan'}), not this_domain())
need_number({'mesh', 'batman_adv', 'gw_sel_class'}, false) need_number({'mesh', 'batman_adv', 'gw_sel_class'}, false)
need_one_of({'mesh', 'batman_adv', 'routing_algo'}, {'BATMAN_IV', 'BATMAN_V'}, false) need_one_of({'mesh', 'batman_adv', 'routing_algo'}, {'BATMAN_IV', 'BATMAN_V'}, false)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment