diff --git a/common/Makefile.am b/common/Makefile.am index f28eda096..575ef7a04 100644 --- a/common/Makefile.am +++ b/common/Makefile.am @@ -6,7 +6,8 @@ EXTRA_DIST = \ consumer_state_table_pops.lua \ consumer_table_pops.lua \ producer_state_table_apply_view.lua \ - table_dump.lua + table_dump.lua \ + fdb_flush.lua swssdir = $(datadir)/swss diff --git a/common/fdb_flush.lua b/common/fdb_flush.lua new file mode 100644 index 000000000..d98841abc --- /dev/null +++ b/common/fdb_flush.lua @@ -0,0 +1,25 @@ +local keys = redis.call('KEYS', KEYS[1]) +local n = table.getn(keys) + +for i = 1, n do + if KEYS[2] == "" and KEYS[3] == "1" then + redis.call('DEL', keys[i]) + elseif KEYS[2] == "" and KEYS[3] == "0" then + local type = redis.call('HGET', keys[i], "SAI_FDB_ENTRY_ATTR_TYPE"); + if type == "SAI_FDB_ENTRY_TYPE_DYNAMIC" then + redis.call('DEL', keys[i]) + end + elseif KEYS[2] ~= "" then + local bridge_port = redis.call('HGET', keys[i], "SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID"); + if bridge_port == KEYS[2] then + if KEYS[3] == "1" then + redis.call('DEL', keys[i]) + else + local type = redis.call('HGET', keys[i], "SAI_FDB_ENTRY_ATTR_TYPE"); + if type == "SAI_FDB_ENTRY_TYPE_DYNAMIC" then + redis.call('DEL', keys[i]) + end + end + end + end +end diff --git a/common/schema.h b/common/schema.h index d60c37053..7b2c92a40 100644 --- a/common/schema.h +++ b/common/schema.h @@ -67,6 +67,7 @@ namespace swss { /***** COUNTER DATABASE *****/ #define COUNTERS_PORT_NAME_MAP "COUNTERS_PORT_NAME_MAP" +#define COUNTERS_LAG_NAME_MAP "COUNTERS_LAG_NAME_MAP" #define COUNTERS_TABLE "COUNTERS" #define COUNTERS_QUEUE_NAME_MAP "COUNTERS_QUEUE_NAME_MAP" #define COUNTERS_QUEUE_PORT_MAP "COUNTERS_QUEUE_PORT_MAP" @@ -141,6 +142,7 @@ namespace swss { #define CFG_LAG_MEMBER_TABLE_NAME "PORTCHANNEL_MEMBER" #define CFG_VLAN_TABLE_NAME "VLAN" #define CFG_VLAN_MEMBER_TABLE_NAME "VLAN_MEMBER" +#define CFG_FDB_TABLE_NAME "FDB" #define CFG_SWITCH_TABLE_NAME "SWITCH" #define CFG_VRF_TABLE_NAME "VRF" #define CFG_CRM_TABLE_NAME "CRM"