need_string_match(in_domain({'next_node', 'ip6'}), '^[%x:]+$', false)
need_string_match(in_domain({'next_node', 'ip4'}), '^%d+.%d+.%d+.%d+$', false)

if need_boolean({'mesh', 'olsrd', 'v1_6', 'enable'}, false) then
  need_table({'mesh', 'olsrd', 'v1_6', 'config'}, nil, false)
end

if need_boolean({'mesh', 'olsrd', 'v1_4', 'enable'}, false) then
  need_table({'mesh', 'olsrd', 'v1_4', 'config'}, nil, false)
end

if need_boolean({'mesh', 'olsrd', 'v2', 'enable'}, false) then
  need_table({'mesh', 'olsrd', 'v2', 'config'}, nil, false)
  need_boolean({'mesh', 'olsrd', 'v2', 'ip6_exclusive_mode'}, false)
  need_boolean({'mesh', 'olsrd', 'v2', 'ip4_exclusive_mode'}, false)
  if need_boolean({'mesh', 'olsrd', 'v2', 'ip4_exclusive_mode'}, false) and need_boolean({'mesh', 'olsrd', 'v2', 'ip6_exclusive_mode'}, false) then
    -- FIXME: we could check the value but idk how to do that. basically both options are xor.
    error('you cant enable both olsrv2 ip4 and ip6 exclusive mode')
  end
end