*** From dhcp-server -- To unsubscribe, see the end of this message. ***
Can you try the following patch and see if it solves your problem?
_MelloN_
Index: dhcp.c
===================================================================
RCS file: /proj/src/isc/cvs-1/DHCP/server/dhcp.c,v
retrieving revision 1.57.2.21
diff -c -r1.57.2.21 dhcp.c
*** dhcp.c 1999/03/05 16:10:56 1.57.2.21
--- dhcp.c 1999/03/18 17:44:54
***************
*** 1186,1220 ****
result = send_packet (fallback_interface,
(struct packet *)0,
&raw, packet_length,
! raw.siaddr, &to, &hto);
free_lease_state (state, "dhcp_reply fallback 1");
lease -> state = (struct lease_state *)0;
return;
}
! /* If it comes from a client that already knows its address and
! is not requesting a broadcast response, sent it directly to
! that client. */
! } else if (raw.ciaddr.s_addr && state -> offer == DHCPACK &&
! !(raw.flags & htons (BOOTP_BROADCAST)) &&
! can_unicast_without_arp ()) {
! to.sin_addr = state -> ciaddr;
! to.sin_port = remote_port; /* XXX */
if (fallback_interface) {
result = send_packet (fallback_interface,
(struct packet *)0,
&raw, packet_length,
! raw.siaddr, &to, &hto);
! free_lease_state (state, "dhcp_reply fallback 1");
lease -> state = (struct lease_state *)0;
return;
}
} else {
- /* Otherwise, broadcast it on the local network. */
to.sin_addr.s_addr = htonl (INADDR_BROADCAST);
! to.sin_port = remote_port; /* XXX */
}
memcpy (&from, state -> from.iabuf, sizeof from);
--- 1186,1230 ----
result = send_packet (fallback_interface,
(struct packet *)0,
&raw, packet_length,
! raw.siaddr,
! &to, (struct hardware *)0);
free_lease_state (state, "dhcp_reply fallback 1");
lease -> state = (struct lease_state *)0;
return;
}
! /* If the client is RENEWING, unicast to the client using the
! regular IP stack. */
! } else if (raw.ciaddr.s_addr && state -> offer == DHCPACK) {
! to.sin_addr = raw.ciaddr;
! to.sin_port = remote_port;
if (fallback_interface) {
result = send_packet (fallback_interface,
(struct packet *)0,
&raw, packet_length,
! raw.siaddr, &to,
! (struct hardware *)0);
! free_lease_state (state,
! "dhcp_reply fallback 2");
lease -> state = (struct lease_state *)0;
return;
}
+
+ /* If it comes from a client that already knows its address
+ and is not requesting a broadcast response, and we can
+ unicast to a client without using the ARP protocol, sent it
+ directly to that client. */
+ } else if (!(raw.flags & htons (BOOTP_BROADCAST)) &&
+ can_unicast_without_arp ()) {
+ to.sin_addr = raw.yiaddr;
+ to.sin_port = remote_port;
+
+ /* Otherwise, broadcast it on the local network. */
} else {
to.sin_addr.s_addr = htonl (INADDR_BROADCAST);
! to.sin_port = remote_port;
}
memcpy (&from, state -> from.iabuf, sizeof from);
------------------------------------------------------------------------------
To unsubscribe from this list, please visit http://www.fugue.com/dhcp/lists
If you are without web access, or if you are having trouble with the web page,
please send mail to [EMAIL PROTECTED] Please try to use the web
page first - it will take a long time for your request to be processed by hand.
------------------------------------------------------------------------------