diff --git a/src/posix/platform/infra_if.cpp b/src/posix/platform/infra_if.cpp index 05a56da52..ed8f195b9 100644 --- a/src/posix/platform/infra_if.cpp +++ b/src/posix/platform/infra_if.cpp @@ -41,6 +41,7 @@ #include #include +#include #include // clang-format off #include @@ -182,7 +183,13 @@ int InfraNetif::CreateIcmp6Socket(const char *aInfraIfName) #ifdef __linux__ rval = setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, aInfraIfName, strlen(aInfraIfName)); #else // __NetBSD__ || __FreeBSD__ || __APPLE__ - rval = setsockopt(sock, IPPROTO_IPV6, IPV6_BOUND_IF, aInfraIfName, strlen(aInfraIfName)); + { + // IPV6_BOUND_IF takes an interface index, not a name. + unsigned int ifIndex = if_nametoindex(aInfraIfName); + + VerifyOrDie(ifIndex != 0, OT_EXIT_INVALID_ARGUMENTS); + rval = setsockopt(sock, IPPROTO_IPV6, IPV6_BOUND_IF, &ifIndex, sizeof(ifIndex)); + } #endif // __linux__ VerifyOrDie(rval == 0, OT_EXIT_ERROR_ERRNO);