]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
socket: add support for selecting interface again
authorMiroslav Lichvar <mlichvar@redhat.com>
Tue, 30 Jun 2020 13:26:55 +0000 (15:26 +0200)
committerMiroslav Lichvar <mlichvar@redhat.com>
Wed, 1 Jul 2020 14:19:44 +0000 (16:19 +0200)
Revert commit e49aececceaa ("socket: don't set interface for sent
packets") to allow the interface to be selected for outgoing packets,
but don't set it in the callers yet.

cmdmon.c
ntp_io.c
socket.c

index 1ade206272441ad6671ef88cbcf77ce11aa1b3a3..37dc94498abaf152683f47194ce74e566ee0242d 100644 (file)
--- 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;
 }
index 1ba5efb0452c978ec1637561b1e1a221b2fbce1e..58b22243aa0d8e8cfa9db8bc14e672fdf3d2b8df 100644 (file)
--- 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 &&
index 9eaf9fda256378c367ee9437e551693b87793b18..dbcf6240cf66fb5099dcd31ae775a33097e6e344 100644 (file)
--- 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
   }