You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[neighbor_advertiser] Verify that DIPs returned from ferret are not in device VLAN (sonic-net#670)
* [neighbor_advertiser] Verify that DIPs returned from ferret are not in device VLANs
* Add a method in neighbor_advertiser to check if a DIP is in any of the device's VLANs
* Check that DIPs returned from ferret are not in any of the device's VLANs before proceeding
* Add a retry to attempt to request different DIPs from a given ferret VIP
Signed-off-by: Danny Allen [email protected]
* Remove extraneous local var
* Handle error cases
* Incorporate PR feedback
* Revert structure and clarifying comments
* Show retry attempts
* Clarify device vlan check
* Filters out interfaces that have no subnet or an IPv6 subnet
* Refactor to use is_ip_prefix_in_key
* Fix runtime errors
log_info('{} does not have a subnet, skipping...'.format(vlan_interface))
112
+
continue
113
+
114
+
vlan_subnet=IPNetwork(vlan_interface[1])
115
+
116
+
ifferret_dip.version!=vlan_subnet.version:
117
+
log_info('{} version (IPv{}) does not match provided DIP version (IPv{}), skipping...'.format(vlan_interface[0], vlan_subnet.version, ferret_dip.version))
log_error('Failed to set up neighbor advertiser slice, vip: {}, no response obtained'.format(ferret_service_vip))
356
+
returnNone
357
+
ifresponseandnotresponse.ok:
358
+
log_error('Failed to set up neighbor advertiser slice, vip: {}, error_code: {}, error_content: {}'.format(ferret_service_vip, response.status_code, response.content))
# Retry the request if the provided DIP is in the device VLAN
365
+
ifis_dip_in_device_vlan(ferret_server_ipv4_addr):
366
+
log_info('Failed to set up neighbor advertiser slice, vip: {}, dip {} is in device VLAN (attempt {}/{})'.format(ferret_service_vip, ferret_server_ipv4_addr, retry+1, DEFAULT_FERRET_QUERY_RETRIES))
367
+
continue
368
+
369
+
# If all the proceeding checks pass, return the provided DIP
log_info('Successfully set up neighbor advertiser slice, vip: {}, dip: {}'.format(ferret_service_vip, ferret_server_ipv4_addr))
323
-
elifresponse:
324
-
log_error('Failed to set up neighbor advertiser slice, vip: {}, error_code: {}, error_content: {}'.format(ferret_service_vip, response.status_code, response.content))
325
-
else:
326
-
log_error('Failed to set up neighbor advertiser slice, vip: {}, no response obtained'.format(ferret_service_vip))
372
+
returnferret_server_ipv4_addr
327
373
328
-
returnferret_server_ipv4_addr
374
+
log_error('Failed to set up neighbor advertiser slice, vip: {}, returned dips were in device VLAN'.format(ferret_service_vip))
0 commit comments