Support VLAN in cidr filters

This commit is contained in:
Alfredo Cardigliano 2023-01-30 17:50:17 +01:00
parent c47858004d
commit 63074fd0df
2 changed files with 23 additions and 5 deletions

View file

@ -1514,9 +1514,9 @@ local known_parameters = {
["old_member"] = validateMember,
["network"] = validateNumber, -- A network ID/name
["network_name"] = validateFilters(validateNetwork),
["network_cidr"] = validateEmptyOr(validateListOfTypeInline(validateFilters(validateNetwork))), -- An IPv4 or IPv6 subnet in CIDR format
["cli_network_cidr"] = validateEmptyOr(validateListOfTypeInline(validateFilters(validateNetwork))), -- An IPv4 or IPv6 subnet in CIDR format
["srv_network_cidr"] = validateEmptyOr(validateListOfTypeInline(validateFilters(validateNetwork))), -- An IPv4 or IPv6 subnet in CIDR format
["network_cidr"] = validateEmptyOr(validateListOfTypeInline(validateFilters(validateNetworkWithVLAN))), -- An IPv4 or IPv6 subnet in CIDR format
["cli_network_cidr"] = validateEmptyOr(validateListOfTypeInline(validateFilters(validateNetworkWithVLAN))), -- An IPv4 or IPv6 subnet in CIDR format
["srv_network_cidr"] = validateEmptyOr(validateListOfTypeInline(validateFilters(validateNetworkWithVLAN))), -- An IPv4 or IPv6 subnet in CIDR format
["cli_network"] = validateEmptyOr(validateListOfTypeInline(validateFilters(validateNumber))), -- A network ID
["srv_network"] = validateEmptyOr(validateListOfTypeInline(validateFilters(validateNumber))), -- A network ID
["ip"] = validateEmptyOr(validateListOfTypeInline(validateFilters(validateServer))), -- An IPv4 or IPv6 address or an Hostname

View file

@ -180,36 +180,54 @@ end
-- ##############################################
function isIPv4Network(address)
local parts = split(address, "/")
-- Check for @ VLAN
local parts = split(address, "@")
if #parts == 2 then
address = parts[1]
end
-- Parse CIDR
parts = split(address, "/")
if #parts == 2 then
local prefix = tonumber(parts[2])
if (prefix == nil) or (math.floor(prefix) ~= prefix) or (prefix < 0) or (prefix > 32) then
return false
end
-- Check empty
elseif #parts ~= 1 then
return false
end
-- Check IP
return isIPv4(parts[1])
end
-- ##############################################
function isIPv6Network(address)
local parts = split(address, "/")
-- Check for @ VLAN
local parts = split(address, "@")
if #parts == 2 then
address = parts[1]
end
-- Parse CIDR
parts = split(address, "/")
if #parts == 2 then
local prefix = tonumber(parts[2])
if (prefix == nil) or (math.floor(prefix) ~= prefix) or (prefix < 0) or (prefix > 128) then
return false
end
-- Check empty
elseif #parts ~= 1 then
return false
end
-- Check IPv6
return isIPv6(parts[1])
end