diff --git a/source/common/network/io_socket_handle_impl.cc b/source/common/network/io_socket_handle_impl.cc index c40e9f03d77e0..35708c61f508e 100644 --- a/source/common/network/io_socket_handle_impl.cc +++ b/source/common/network/io_socket_handle_impl.cc @@ -587,11 +587,19 @@ absl::optional IoSocketHandleImpl::interfaceName() { return absl::nullopt; } + if (socket_address->ip()->version() != Address::IpVersion::v4 && + socket_address->ip()->version() != Address::IpVersion::v6) { + ENVOY_BUG(false, fmt::format("unexpected IP family {}", socket_address->ip()->version())); + } + Api::InterfaceAddressVector interface_addresses{}; const Api::SysCallIntResult rc = os_syscalls_singleton.getifaddrs(interface_addresses); RELEASE_ASSERT(!rc.return_value_, fmt::format("getiffaddrs error: {}", rc.errno_)); absl::optional selected_interface_name{}; + absl::uint128 socket_address_value = socket_address->ip()->version() == Address::IpVersion::v4 + ? socket_address->ip()->ipv4()->address() + : socket_address->ip()->ipv6()->address(); for (const auto& interface_address : interface_addresses) { if (!interface_address.interface_addr_) { continue; @@ -600,20 +608,10 @@ absl::optional IoSocketHandleImpl::interfaceName() { if (socket_address->ip()->version() == interface_address.interface_addr_->ip()->version()) { // Compare address _without port_. // TODO: create common addressAsStringWithoutPort method to simplify code here. - absl::uint128 socket_address_value; - absl::uint128 interface_address_value; - switch (socket_address->ip()->version()) { - case Address::IpVersion::v4: - socket_address_value = socket_address->ip()->ipv4()->address(); - interface_address_value = interface_address.interface_addr_->ip()->ipv4()->address(); - break; - case Address::IpVersion::v6: - socket_address_value = socket_address->ip()->ipv6()->address(); - interface_address_value = interface_address.interface_addr_->ip()->ipv6()->address(); - break; - default: - ENVOY_BUG(false, fmt::format("unexpected IP family {}", socket_address->ip()->version())); - } + absl::uint128 interface_address_value = + interface_address.interface_addr_->ip()->version() == Address::IpVersion::v4 + ? interface_address.interface_addr_->ip()->ipv4()->address() + : interface_address.interface_addr_->ip()->ipv6()->address(); if (socket_address_value == interface_address_value) { selected_interface_name = interface_address.interface_name_;