diff options
Diffstat (limited to 'networking/udhcp/dhcpd.c')
-rw-r--r-- | networking/udhcp/dhcpd.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c index b67dfc3bc..0f5edb75c 100644 --- a/networking/udhcp/dhcpd.c +++ b/networking/udhcp/dhcpd.c | |||
@@ -614,6 +614,10 @@ static void send_packet_to_relay(struct dhcp_packet *dhcp_pkt) | |||
614 | udhcp_send_kernel_packet(dhcp_pkt, | 614 | udhcp_send_kernel_packet(dhcp_pkt, |
615 | server_data.server_nip, SERVER_PORT, | 615 | server_data.server_nip, SERVER_PORT, |
616 | dhcp_pkt->gateway_nip, SERVER_PORT, | 616 | dhcp_pkt->gateway_nip, SERVER_PORT, |
617 | /* Yes, relay agents receive (and send) all their packets on SERVER_PORT, | ||
618 | * even those which are clients' requests and would normally | ||
619 | * (i.e. without relay) use CLIENT_PORT. See RFC 1542. | ||
620 | */ | ||
617 | server_data.interface); | 621 | server_data.interface); |
618 | } | 622 | } |
619 | 623 | ||
@@ -1025,6 +1029,9 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv) | |||
1025 | * socket read inside this call is restarted on caught signals. | 1029 | * socket read inside this call is restarted on caught signals. |
1026 | */ | 1030 | */ |
1027 | bytes = udhcp_recv_kernel_packet(&packet, server_socket); | 1031 | bytes = udhcp_recv_kernel_packet(&packet, server_socket); |
1032 | //NB: we do not check source port here. Should we? | ||
1033 | //It should be CLIENT_PORT for clients, | ||
1034 | //or SERVER_PORT for relay agents (in which case giaddr must be != 0.0.0.0) | ||
1028 | if (bytes < 0) { | 1035 | if (bytes < 0) { |
1029 | /* bytes can also be -2 ("bad packet data") */ | 1036 | /* bytes can also be -2 ("bad packet data") */ |
1030 | if (bytes == -1 && errno != EINTR) { | 1037 | if (bytes == -1 && errno != EINTR) { |