mirror of
https://github.com/ntop/ntopng.git
synced 2026-04-29 23:49:33 +00:00
Allow relaxed format (IP only) for host pool members. Cleanup duplicated code.
This commit is contained in:
parent
50633c8fd9
commit
f1e72ffddd
4 changed files with 63 additions and 72 deletions
|
|
@ -730,40 +730,82 @@ end
|
|||
|
||||
-- ##############################################
|
||||
|
||||
function isValidPoolMember(member)
|
||||
-- Check if this is a valid pool member (MAC or CIDR@VLAN)
|
||||
-- @param fix_relaxed Fix relaxed notation (IP without net mask or vlan)
|
||||
function checkPoolMember(member, fix_relaxed)
|
||||
if isEmptyString(member) then
|
||||
return false
|
||||
return nil
|
||||
end
|
||||
|
||||
if isMacAddress(member) then
|
||||
return true
|
||||
return member
|
||||
end
|
||||
|
||||
-- vlan is mandatory here
|
||||
-- VLAN
|
||||
local vlan_id
|
||||
local vlan_idx = string.find(member, "@")
|
||||
if ((vlan_idx == nil) or (vlan_idx == 1)) then
|
||||
return false
|
||||
end
|
||||
|
||||
local other = string.sub(member, 1, vlan_idx - 1)
|
||||
local vlan = tonumber(string.sub(member, vlan_idx + 1))
|
||||
if (vlan == nil) or (vlan < 0) then
|
||||
return false
|
||||
if vlan_idx == nil then
|
||||
if fix_relaxed then
|
||||
vlan_id = 0 -- default vlan: 0
|
||||
else
|
||||
return nil -- no vlan
|
||||
end
|
||||
elseif vlan_idx == 1 then
|
||||
return nil -- bad format
|
||||
else
|
||||
local other = string.sub(member, 1, vlan_idx - 1)
|
||||
vlan_id = tonumber(string.sub(member, vlan_idx + 1))
|
||||
if vlan_id == nil or vlan_id < 0 then
|
||||
return nil
|
||||
end
|
||||
member = other
|
||||
end
|
||||
|
||||
-- prefix is mandatory here
|
||||
local address, prefix = splitNetworkPrefix(other)
|
||||
if prefix == nil then
|
||||
return false
|
||||
local address, prefix = splitNetworkPrefix(member)
|
||||
if address == nil then
|
||||
return nil -- bad format
|
||||
elseif prefix == nil then
|
||||
if fix_relaxed then
|
||||
if isIPv4(address) then
|
||||
prefix = '32' -- default mask: 32
|
||||
elseif isIPv6(address) then
|
||||
prefix = '128' -- default mask: 128
|
||||
else
|
||||
return nil -- bad format
|
||||
end
|
||||
else
|
||||
return nil -- no mask
|
||||
end
|
||||
end
|
||||
|
||||
if isIPv4(address) and (tonumber(prefix) >= 0) and (tonumber(prefix) <= 32) then
|
||||
return true
|
||||
-- ok
|
||||
elseif isIPv6(address) and (tonumber(prefix) >= 0) and (tonumber(prefix) <= 128) then
|
||||
return true
|
||||
-- ok
|
||||
else
|
||||
return nil -- bad format
|
||||
end
|
||||
|
||||
return false
|
||||
return address .. '/' .. prefix .. '@' .. vlan_id
|
||||
end
|
||||
|
||||
-- ##############################################
|
||||
|
||||
-- Check if this is a valid pool member (MAC or CIDR@VLAN)
|
||||
-- @param relaxed Allow relaxed notation (IP without net mask or vlan)
|
||||
function isValidPoolMember(member, relaxed)
|
||||
if checkPoolMember(member, relaxed) then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- ##############################################
|
||||
|
||||
function fixPoolMemberFormat(member)
|
||||
return checkPoolMember(member, true)
|
||||
end
|
||||
|
||||
-- #################################################################
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue