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
This commit is contained in:
Matthias Schiffer 2018-04-27 17:36:47 +02:00
parent 5d92f125cd
commit 1f7ed28b76
No known key found for this signature in database
GPG Key ID: 16EF3F64CB201D9C
7 changed files with 26 additions and 12 deletions

View File

@ -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 = {

View File

@ -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
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
:: ::
mesh = { mesh = {
vxlan = true,
filter_membership_reports = false, filter_membership_reports = false,
batman_adv = { batman_adv = {
gw_sel_class = 1, gw_sel_class = 1,

View File

@ -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)

View File

@ -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() {
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

View File

@ -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')

View File

@ -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')

View File

@ -1,2 +1,5 @@
-- 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)