@@ -12,6 +12,7 @@ def setup_db(self, dvs):
12
12
self .pdb = dvs .get_app_db ()
13
13
self .adb = dvs .get_asic_db ()
14
14
self .cdb = dvs .get_config_db ()
15
+ self .sdb = dvs .get_state_db ()
15
16
16
17
def set_admin_status (self , interface , status ):
17
18
self .cdb .update_entry ("PORT" , interface , {"admin_status" : status })
@@ -62,6 +63,23 @@ def _access_function():
62
63
63
64
wait_for_result (_access_function )
64
65
66
+ def check_route_state (self , prefix , value ):
67
+ found = False
68
+
69
+ route_entries = self .sdb .get_keys ("ROUTE_TABLE" )
70
+ for key in route_entries :
71
+ if key != prefix :
72
+ continue
73
+ found = True
74
+ fvs = self .sdb .get_entry ("ROUTE_TABLE" , key )
75
+
76
+ assert fvs != {}
77
+
78
+ for f ,v in fvs .items ():
79
+ if f == "state" :
80
+ assert v == value
81
+ assert found
82
+
65
83
def get_asic_db_key (self , destination ):
66
84
route_entries = self .adb .get_keys ("ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY" )
67
85
for route_entry in route_entries :
@@ -123,6 +141,9 @@ def test_RouteAddRemoveIpv4Route(self, dvs, testlog):
123
141
self .create_l3_intf ("Ethernet0" , "" )
124
142
self .create_l3_intf ("Ethernet4" , "" )
125
143
144
+ # check STATE route database, initial state shall be "na"
145
+ self .check_route_state ("0.0.0.0/0" , "na" )
146
+
126
147
# set ip address
127
148
self .add_ip_address ("Ethernet0" , "10.0.0.0/31" )
128
149
self .add_ip_address ("Ethernet4" , "10.0.0.2/31" )
@@ -144,15 +165,25 @@ def test_RouteAddRemoveIpv4Route(self, dvs, testlog):
144
165
# add route entry
145
166
dvs .runcmd ("vtysh -c \" configure terminal\" -c \" ip route 2.2.2.0/24 10.0.0.1\" " )
146
167
168
+ # add default route entry
169
+ fieldValues = {"nexthop" : "10.0.0.1" , "ifname" : "Ethernet0" }
170
+ self .create_route_entry ("0.0.0.0/0" , fieldValues )
171
+
147
172
# check application database
148
173
self .pdb .wait_for_entry ("ROUTE_TABLE" , "2.2.2.0/24" )
149
174
150
175
# check ASIC route database
151
176
self .check_route_entries (["2.2.2.0/24" ])
152
177
178
+ # check STATE route database
179
+ self .check_route_state ("0.0.0.0/0" , "ok" )
180
+
153
181
# remove route entry
154
182
dvs .runcmd ("vtysh -c \" configure terminal\" -c \" no ip route 2.2.2.0/24 10.0.0.1\" " )
155
183
184
+ # remove default route entry
185
+ self .remove_route_entry ("0.0.0.0/0" )
186
+
156
187
# check application database
157
188
self .pdb .wait_for_deleted_entry ("ROUTE_TABLE" , "2.2.2.0/24" )
158
189
@@ -170,6 +201,9 @@ def test_RouteAddRemoveIpv4Route(self, dvs, testlog):
170
201
self .set_admin_status ("Ethernet0" , "down" )
171
202
self .set_admin_status ("Ethernet4" , "down" )
172
203
204
+ # check STATE route database, state set to "na" after deleting the default route
205
+ self .check_route_state ("0.0.0.0/0" , "na" )
206
+
173
207
# remove ip address and default route
174
208
dvs .servers [0 ].runcmd ("ip route del default dev eth0" )
175
209
dvs .servers [0 ].runcmd ("ip address del 10.0.0.1/31 dev eth0" )
@@ -184,6 +218,9 @@ def test_RouteAddRemoveIpv6Route(self, dvs, testlog):
184
218
self .create_l3_intf ("Ethernet0" , "" )
185
219
self .create_l3_intf ("Ethernet4" , "" )
186
220
221
+ # check STATE route database, initial state shall be "na"
222
+ self .check_route_state ("::/0" , "na" )
223
+
187
224
# bring up interface
188
225
self .set_admin_status ("Ethernet0" , "up" )
189
226
self .set_admin_status ("Ethernet4" , "up" )
@@ -207,15 +244,25 @@ def test_RouteAddRemoveIpv6Route(self, dvs, testlog):
207
244
# add route entry
208
245
dvs .runcmd ("vtysh -c \" configure terminal\" -c \" ipv6 route 3000::0/64 2000::2\" " )
209
246
247
+ # add default route entry
248
+ fieldValues = {"nexthop" : "2000::2" , "ifname" : "Ethernet0" }
249
+ self .create_route_entry ("::/0" , fieldValues )
250
+
210
251
# check application database
211
252
self .pdb .wait_for_entry ("ROUTE_TABLE" , "3000::/64" )
212
253
213
254
# check ASIC route database
214
255
self .check_route_entries (["3000::/64" ])
215
256
257
+ # check STATE route database
258
+ self .check_route_state ("::/0" , "ok" )
259
+
216
260
# remove route entry
217
261
dvs .runcmd ("vtysh -c \" configure terminal\" -c \" no ipv6 route 3000::0/64 2000::2\" " )
218
262
263
+ # remove default route entry
264
+ self .remove_route_entry ("::/0" )
265
+
219
266
# check application database
220
267
self .pdb .wait_for_deleted_entry ("ROUTE_TABLE" , "3000::/64" )
221
268
@@ -233,6 +280,9 @@ def test_RouteAddRemoveIpv6Route(self, dvs, testlog):
233
280
self .set_admin_status ("Ethernet0" , "down" )
234
281
self .set_admin_status ("Ethernet4" , "down" )
235
282
283
+ # check STATE route database, state set to "na" after deleting the default route
284
+ self .check_route_state ("::/0" , "na" )
285
+
236
286
# remove ip address and default route
237
287
dvs .servers [0 ].runcmd ("ip -6 route del default dev eth0" )
238
288
dvs .servers [0 ].runcmd ("ip -6 address del 2000::2/64 dev eth0" )
0 commit comments