summaryrefslogtreecommitdiff
path: root/server/dhcpleasequery.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/dhcpleasequery.c')
-rw-r--r--server/dhcpleasequery.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/server/dhcpleasequery.c b/server/dhcpleasequery.c
index e16de0fe..40de910d 100644
--- a/server/dhcpleasequery.c
+++ b/server/dhcpleasequery.c
@@ -152,6 +152,7 @@ dhcpleasequery(struct packet *packet, int ms_nulltp) {
u_int32_t time_rebinding;
u_int32_t time_expiry;
u_int32_t client_last_transaction_time;
+ u_int16_t relay_port = 0;
struct sockaddr_in to;
struct in_addr siaddr;
struct data_string prl;
@@ -660,12 +661,16 @@ dhcpleasequery(struct packet *packet, int ms_nulltp) {
#endif
memset(to.sin_zero, 0, sizeof(to.sin_zero));
+#if defined(RELAY_PORT)
+ relay_port = dhcp_check_relayport(packet);
+#endif
+
/*
* Leasequery packets are be sent to the gateway address.
*/
to.sin_addr = packet->raw->giaddr;
if (packet->raw->giaddr.s_addr != htonl(INADDR_LOOPBACK)) {
- to.sin_port = local_port;
+ to.sin_port = relay_port ? relay_port : local_port;
} else {
to.sin_port = remote_port; /* XXXSK: For debugging. */
}