--
-- (C) 2017 - ntop.org
--
dirs = ntop.getDirs()
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
require "lua_utils"
local host_pools_utils = require "host_pools_utils"
local template = require "template_utils"
if(ntop.isPro()) then
package.path = dirs.installdir .. "/pro/scripts/lua/modules/?.lua;" .. package.path
shaper_utils = require "shaper_utils"
end
if not isAdministrator() then
return
end
if _POST["edit_pools"] ~= nil then
local config = paramsPairsDecode(_POST, true)
for pool_id, pool_name in pairs(config) do
if tonumber(pool_id) == nil then
http_lint.validationError(_POST, "pool_id", pool_id, "Invalid pool id")
end
-- create or rename
host_pools_utils.createPool(ifId, pool_id, pool_name)
if(interface.isBridgeInterface(ifId) == true) then
-- create default shapers
shaper_utils.setProtocolShapers(ifId,
pool_id,
shaper_utils.POOL_SHAPER_DEFAULT_PROTO_KEY,
shaper_utils.DEFAULT_SHAPER_ID --[[ ingress shaper --]],
shaper_utils.DEFAULT_SHAPER_ID --[[ egress shaper --]],
true) -- Set only if the key does NOT exist
end
end
-- Note: do not call reload here
elseif _POST["pool_to_delete"] ~= nil then
local pool_id = _POST["pool_to_delete"]
host_pools_utils.deletePool(ifId, pool_id)
if(interface.isBridgeInterface(ifId) == true) then
shaper_utils.flushPoolRules(ifId, pool_id)
end
-- Note: this will also realod the shaping rules
interface.reloadHostPools()
elseif (_POST["edit_members"] ~= nil) then
local pool_to_edit = _POST["pool"]
local config = paramsPairsDecode(_POST, true)
-- This code handles member address changes. The starting '_' is used for icons and alias
-- delete old addresses
for k,old_member in pairs(config) do
if not starts(k, "_") then
if((not isEmptyString(old_member)) and (k ~= old_member)) then
if not isValidPoolMember(old_member) then
http_lint.validationError(_POST, "old_member", old_member, "Invalid pool member")
else
host_pools_utils.deletePoolMember(ifId, pool_to_edit, old_member)
end
end
end
end
-- add new addresses
for new_member,k in pairs(config) do
if not starts(new_member, "_") then
if not isValidPoolMember(new_member) then
http_lint.validationError(_POST, "new_member", new_member, "Invalid pool member")
end
local is_new_member = (k ~= new_member)
if is_new_member then
host_pools_utils.addPoolMember(ifId, pool_to_edit, new_member)
end
local host_key, is_network = host_pools_utils.getMemberKey(new_member)
if not is_network then
local alias = config["_alias_" .. new_member]
if((not is_new_member) or (not isEmptyString(alias))) then
setHostAltName(host_key, alias)
end
local icon = config["_icon_" .. new_member]
if((not is_new_member) or (not isEmptyString(icon))) then
setHostIcon(host_key, icon)
end
end
end
end
interface.reloadHostPools()
elseif _POST["member_to_delete"] ~= nil then
local pool_to_edit = _POST["pool"]
host_pools_utils.deletePoolMember(ifId, pool_to_edit, _POST["member_to_delete"])
interface.reloadHostPools()
elseif _POST["empty_pool"] ~= nil then
host_pools_utils.emptyPool(ifId, _POST["empty_pool"])
interface.reloadHostPools()
end
function printPoolNameField(pool_id_str)
print[[
]]
print[[]]
print[[]]
print[[
]]
end
function printMemberAddressField(member_str, origin_value_str)
print[[
]]
print[[]]
print[[]]
print[[
]]
end
function printMemberVlanField(member_str)
print[[
]]
print[[]]
print[[]]
print[[
]]
end
function printIconField(member_str)
print[[]]
end
function printAliasField(member_str)
print[[]]
end
--------------------------------------------------------------------------------
local selected_pool_id = _GET["pool"]
local selected_pool = nil
local available_pools = host_pools_utils.getPoolsList(ifId)
for _, pool in ipairs(available_pools) do
if pool.id == selected_pool_id then
selected_pool = pool
end
end
if selected_pool == nil then
if #available_pools == 1 then
-- only the default pool is available
selected_pool = available_pools[1]
else
selected_pool = available_pools[2]
end
end
local perPageMembers
if tonumber(tablePreferences("hostPoolMembers")) == nil then
perPageMembers = "10"
else
perPageMembers = tablePreferences("hostPoolMembers")
end
local member_filtering = _GET["member"]
local manage_url = "?ifid="..ifId.."&page=pools&pool="..selected_pool.id.."#manage"
--------------------------------------------------------------------------------
print [[
') print(i18n("host_pools.pool")) print(': ')
local ifstats = interface.getStats()
local is_bridge_iface = (ifstats["bridge.device_a"] ~= nil) and (ifstats["bridge.device_b"] ~= nil)
if is_bridge_iface then
print("")
end
print('
\n')
if member_filtering ~= nil then
local member_name = split(member_filtering, "/")[1]
print[[