@@ -20,29 +20,14 @@ def create_entry_pst(db, table, key, pairs):
20
20
tbl = swsscommon .ProducerStateTable (db , table )
21
21
create_entry (tbl , key , pairs )
22
22
23
-
24
- def get_map_iface_bridge_port_id (asic_db , dvs ):
25
- port_id_2_iface = dvs .asicdb .portoidmap
26
- tbl = swsscommon .Table (asic_db , "ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT" )
27
- iface_2_bridge_port_id = {}
28
- for key in tbl .getKeys ():
29
- status , data = tbl .get (key )
30
- assert status
31
- values = dict (data )
32
- iface_id = values ["SAI_BRIDGE_PORT_ATTR_PORT_ID" ]
33
- iface_name = port_id_2_iface [iface_id ]
34
- iface_2_bridge_port_id [iface_name ] = key
35
-
36
- return iface_2_bridge_port_id
37
-
38
23
def how_many_entries_exist (db , table ):
39
24
tbl = swsscommon .Table (db , table )
40
25
return len (tbl .getKeys ())
41
26
42
27
def test_fdb_notifications (dvs ):
43
28
dvs .setup_db ()
44
29
45
- # dvs.runcmd("sonic-clear fdb all")
30
+ dvs .runcmd ("sonic-clear fdb all" )
46
31
47
32
dvs .runcmd ("crm config polling interval 1" )
48
33
dvs .setReadOnlyAttr ('SAI_OBJECT_TYPE_SWITCH' , 'SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY' , '1000' )
@@ -55,6 +40,20 @@ def test_fdb_notifications(dvs):
55
40
dvs .create_vlan_member ("6" , "Ethernet64" )
56
41
dvs .create_vlan_member ("6" , "Ethernet68" )
57
42
43
+ # Get mapping between interface name and its bridge port_id
44
+ time .sleep (2 )
45
+ iface_2_bridge_port_id = dvs .get_map_iface_bridge_port_id (dvs .adb )
46
+
47
+ # check FDB learning mode
48
+ ok , extra = dvs .is_table_entry_exists (dvs .adb , 'ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT' ,
49
+ iface_2_bridge_port_id ["Ethernet64" ],
50
+ [("SAI_BRIDGE_PORT_ATTR_FDB_LEARNING_MODE" , "SAI_BRIDGE_PORT_FDB_LEARNING_MODE_HW" )])
51
+ assert ok , str (extra )
52
+ ok , extra = dvs .is_table_entry_exists (dvs .adb , 'ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT' ,
53
+ iface_2_bridge_port_id ["Ethernet68" ],
54
+ [("SAI_BRIDGE_PORT_ATTR_FDB_LEARNING_MODE" , "SAI_BRIDGE_PORT_FDB_LEARNING_MODE_HW" )])
55
+ assert ok , str (extra )
56
+
58
57
# bring up vlan and member
59
58
dvs .set_interface_status ("Vlan6" , "up" )
60
59
dvs .add_ip_address ("Vlan6" , "6.6.6.1/24" )
@@ -72,9 +71,6 @@ def test_fdb_notifications(dvs):
72
71
rc = dvs .servers [17 ].runcmd ("ping -c 1 6.6.6.6" )
73
72
assert rc == 0
74
73
75
- # Get mapping between interface name and its bridge port_id
76
- time .sleep (2 )
77
- iface_2_bridge_port_id = get_map_iface_bridge_port_id (dvs .adb , dvs )
78
74
79
75
# check that the FDB entries were inserted into ASIC DB
80
76
ok , extra = dvs .is_fdb_entry_exists (dvs .adb , "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY" ,
@@ -113,24 +109,34 @@ def test_fdb_notifications(dvs):
113
109
assert ok , str (extra )
114
110
115
111
# enable warm restart
116
- # TODO: use cfg command to config it
117
- create_entry_tbl (
118
- dvs .cdb ,
119
- swsscommon .CFG_WARM_RESTART_TABLE_NAME , "swss" ,
120
- [
121
- ("enable" , "true" ),
122
- ]
123
- )
112
+ (exitcode , result ) = dvs .runcmd ("config warm_restart enable swss" )
113
+ assert exitcode == 0
114
+
115
+ # freeze orchagent for warm restart
116
+ (exitcode , result ) = dvs .runcmd ("/usr/bin/orchagent_restart_check" )
117
+ assert result == "RESTARTCHECK succeeded\n "
118
+ time .sleep (2 )
124
119
125
120
try :
126
121
# restart orchagent
127
122
dvs .stop_swss ()
123
+
124
+ # check FDB learning mode
125
+ ok , extra = dvs .is_table_entry_exists (dvs .adb , 'ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT' ,
126
+ iface_2_bridge_port_id ["Ethernet64" ],
127
+ [("SAI_BRIDGE_PORT_ATTR_FDB_LEARNING_MODE" , "SAI_BRIDGE_PORT_FDB_LEARNING_MODE_DISABLE" )])
128
+ assert ok , str (extra )
129
+ ok , extra = dvs .is_table_entry_exists (dvs .adb , 'ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT' ,
130
+ iface_2_bridge_port_id ["Ethernet68" ],
131
+ [("SAI_BRIDGE_PORT_ATTR_FDB_LEARNING_MODE" , "SAI_BRIDGE_PORT_FDB_LEARNING_MODE_DISABLE" )])
132
+ assert ok , str (extra )
133
+
128
134
dvs .start_swss ()
129
135
time .sleep (2 )
130
136
131
137
# Get mapping between interface name and its bridge port_id
132
138
# Note: they are changed
133
- iface_2_bridge_port_id = get_map_iface_bridge_port_id (dvs .adb , dvs )
139
+ iface_2_bridge_port_id = dvs . get_map_iface_bridge_port_id (dvs .adb )
134
140
135
141
# check that the FDB entries were inserted into ASIC DB
136
142
ok , extra = dvs .is_fdb_entry_exists (dvs .adb , "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY" ,
@@ -148,17 +154,22 @@ def test_fdb_notifications(dvs):
148
154
)
149
155
assert ok , str (extra )
150
156
157
+ # check FDB learning mode
158
+ ok , extra = dvs .is_table_entry_exists (dvs .adb , 'ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT' ,
159
+ iface_2_bridge_port_id ["Ethernet64" ],
160
+ [("SAI_BRIDGE_PORT_ATTR_FDB_LEARNING_MODE" , "SAI_BRIDGE_PORT_FDB_LEARNING_MODE_HW" )])
161
+ assert ok , str (extra )
162
+ ok , extra = dvs .is_table_entry_exists (dvs .adb , 'ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT' ,
163
+ iface_2_bridge_port_id ["Ethernet68" ],
164
+ [("SAI_BRIDGE_PORT_ATTR_FDB_LEARNING_MODE" , "SAI_BRIDGE_PORT_FDB_LEARNING_MODE_HW" )])
165
+ assert ok , str (extra )
166
+
151
167
time .sleep (2 )
152
168
counter_restarted = dvs .getCrmCounterValue ('STATS' , 'crm_stats_fdb_entry_used' )
153
169
assert counter_inserted == counter_restarted
154
170
155
171
finally :
156
- # disable warm restart
157
- # TODO: use cfg command to config it
158
- create_entry_tbl (
159
- dvs .cdb ,
160
- swsscommon .CFG_WARM_RESTART_TABLE_NAME , "swss" ,
161
- [
162
- ("enable" , "false" ),
163
- ]
164
- )
172
+ # enable warm restart
173
+ dvs .runcmd ("config warm_restart enable swss" )
174
+ # slow down crm polling
175
+ dvs .runcmd ("crm config polling interval 10000" )
0 commit comments