diff --git a/cmdmon.c b/cmdmon.c index 1ade206..37dc944 100644 --- a/cmdmon.c +++ b/cmdmon.c @@ -301,6 +301,9 @@ transmit_reply(int sock_fd, SCK_Message *message) { message->length = PKL_ReplyLength((CMD_Reply *)message->data); + /* Don't require the response to use the same interface */ + message->if_index = INVALID_IF_INDEX; + if (!SCK_SendMessage(sock_fd, message, 0)) return; } diff --git a/ntp_io.c b/ntp_io.c index 1ba5efb..58b2224 100644 --- a/ntp_io.c +++ b/ntp_io.c @@ -452,9 +452,11 @@ NIO_SendPacket(NTP_Packet *packet, NTP_Remote_Address *remote_addr, message.remote_addr.ip.port = remote_addr->port; } - message.if_index = local_addr->if_index; message.local_addr.ip = local_addr->ip_addr; + /* Don't require the response to use the same interface */ + message.if_index = INVALID_IF_INDEX; + #if !defined(HAVE_IN_PKTINFO) && defined(IP_SENDSRCADDR) /* On FreeBSD a local IPv4 address cannot be specified on bound socket */ if (message.local_addr.ip.family == IPADDR_INET4 && diff --git a/socket.c b/socket.c index 9eaf9fd..dbcf624 100644 --- a/socket.c +++ b/socket.c @@ -1049,6 +1049,8 @@ send_message(int sock_fd, SCK_Message *message, int flags) return 0; ipi->ipi_spec_dst.s_addr = htonl(message->local_addr.ip.addr.in4); + if (message->if_index != INVALID_IF_INDEX) + ipi->ipi_ifindex = message->if_index; #elif defined(IP_SENDSRCADDR) struct in_addr *addr; @@ -1073,6 +1075,8 @@ send_message(int sock_fd, SCK_Message *message, int flags) memcpy(&ipi->ipi6_addr.s6_addr, &message->local_addr.ip.addr.in6, sizeof(ipi->ipi6_addr.s6_addr)); + if (message->if_index != INVALID_IF_INDEX) + ipi->ipi6_ifindex = message->if_index; } #endif }