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:
parent
5d92f125cd
commit
1f7ed28b76
@ -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
|
|||||||
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,
|
||||||
|
@ -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 "$@"
|
|||||||
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
|
||||||
|
@ -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)
|
|||||||
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')
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user