udhcpc: make DHCP packets to have at least 300 DHCP bytes
No binary (build failed)
—
(log yok)
| @@ -143,8 +143,15 @@ int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt, | |
| * | |
| * In order to work with those buggy servers, | |
| * we truncate packets after end option byte. | |
| + | * |
| + | * However, RFC 1542 says "The IP Total Length and UDP Length |
| + | * must be large enough to contain the minimal BOOTP header of 300 octets". |
| + | * Thus, we retain enough padding to not go below 300 BOOTP bytes. |
| + | * Some devices have filters which drop DHCP packets shorter than that. |
| */ | |
| padding = DHCP_OPTIONS_BUFSIZE - 1 - udhcp_end_option(packet.data.options); | |
| + | if (padding > DHCP_SIZE - 300) |
| + | padding = DHCP_SIZE - 300; |
| packet.ip.protocol = IPPROTO_UDP; | |
| packet.ip.saddr = source_nip; | |
| @@ -215,6 +222,8 @@ int FAST_FUNC udhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt, | |
| udhcp_dump_packet(dhcp_pkt); | |
| padding = DHCP_OPTIONS_BUFSIZE - 1 - udhcp_end_option(dhcp_pkt->options); | |
| + | if (padding > DHCP_SIZE - 300) |
| + | padding = DHCP_SIZE - 300; |
| result = safe_write(fd, dhcp_pkt, DHCP_SIZE - padding); | |
| msg = "write"; | |
| ret_close: | |