common/fdb_flush.v2.lua (34 lines of code) (raw):
redis.log(redis.LOG_NOTICE, "swid", KEYS[1], "bvid", KEYS[2], "port", KEYS[3], "type", KEYS[4])
local swid = KEYS[1]
local bvid = KEYS[2]
local port = KEYS[3]
local type = KEYS[4]
if swid == "oid:0x0" then swid = "" end
if bvid == "oid:0x0" then bvid = "" end
if port == "oid:0x0" then port = "" end
redis.log(redis.LOG_NOTICE, "swid '" .. swid .. "' bvid '" .. bvid .. "' port '" .. port .. "' type '" .. type .. "'")
local pattern = "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY:*bvid*" .. bvid .. "*switch_id*" .. swid .. "*";
local keys = redis.call('KEYS', pattern);
local n = table.getn(keys)
redis.log(redis.LOG_WARNING, "n = " .. n .. " pattern", pattern)
for i = 1, n do
-- redis.log(redis.LOG_WARNING, "k = ", keys[i])
if port == "" and type == "" then
redis.call('DEL', keys[i])
elseif port == "" and type ~= "" then
local etype = redis.call('HGET', keys[i], "SAI_FDB_ENTRY_ATTR_TYPE");
if etype == type then
redis.call('DEL', keys[i])
end
elseif port ~= "" and type == "" then
local eport = redis.call('HGET', keys[i], "SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID");
if eport == port then
redis.call('DEL', keys[i])
end
else -- port =~ "" and type =~ ""
local etype = redis.call('HGET', keys[i], "SAI_FDB_ENTRY_ATTR_TYPE");
local eport = redis.call('HGET', keys[i], "SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID");
if eport == port and etype == type then
redis.call('DEL', keys[i])
end
end
end