-
- if (ip6_address_is_link_local_unicast (&local_addr->ip6))
- {
- const ip6_address_t *ll_addr;
- ll_addr = ip6_get_link_local_address (sw_if_index);
- if (ll_addr && ip6_address_is_equal (ll_addr, &local_addr->ip6))
- {
- /* valid address for this interface */
- local_ip_valid = 1;
- }
- }
- else
- {
- ip6_main_t *im = &ip6_main;
- /* *INDENT-OFF* */
- foreach_ip_interface_address (
- &im->lookup_main, ia, sw_if_index, 0 /* honor unnumbered */, ({
- ip6_address_t *x =
- ip_interface_address_get_address (&im->lookup_main, ia);
- if (local_addr->ip6.as_u64[0] == x->as_u64[0] &&
- local_addr->ip6.as_u64[1] == x->as_u64[1])
- {
- /* valid address for this interface */
- local_ip_valid = 1;
- break;
- }
- }));
- /* *INDENT-ON* */
- }
- }
-
- if (!local_ip_valid)
- {
- vlib_log_err (bum->log_class,
- "local address %U not found on interface with index %u",
- format_ip46_address, local_addr, IP46_TYPE_ANY,
- sw_if_index);
- return VNET_API_ERROR_ADDRESS_NOT_FOUND_FOR_INTERFACE;