X-Git-Url: http://git.ozo.com/?p=openwrt-10.03%2F.git;a=blobdiff_plain;f=package%2Fbusybox%2Fpatches%2F241-udhcpc-oversized_packets.patch;h=0ee4c542ee7d3153545664f0e11ad3f9dc6a2b45;hp=6d5ec3607d1b6c9287eb09c24da901bedb21f3c1;hb=a656395fe8018b9cdc0432a53e551a3af890b698;hpb=ac2d02c3e08c4c3d62859bffb4dd3bb891b3d5c6 diff --git a/package/busybox/patches/241-udhcpc-oversized_packets.patch b/package/busybox/patches/241-udhcpc-oversized_packets.patch index 6d5ec3607..0ee4c542e 100644 --- a/package/busybox/patches/241-udhcpc-oversized_packets.patch +++ b/package/busybox/patches/241-udhcpc-oversized_packets.patch @@ -1,39 +1,40 @@ --- a/networking/udhcp/packet.c +++ b/networking/udhcp/packet.c -@@ -114,6 +114,10 @@ +@@ -164,6 +164,11 @@ uint16_t FAST_FUNC udhcp_checksum(void * return ~sum; } -+int udhcp_get_payload_len(struct dhcpMessage *payload) ++int udhcp_get_payload_len(struct dhcp_packet *dhcp_pkt) +{ -+ return sizeof(struct dhcpMessage) - DHCP_OPTIONS_BUFSIZE + end_option(payload->options) + sizeof(payload->options[0]); ++ return sizeof(struct dhcp_packet) - DHCP_OPTIONS_BUFSIZE + end_option(dhcp_pkt->options) + sizeof(dhcp_pkt->options[0]); +} - ++ /* Construct a ip/udp header for a packet, send packet */ - int udhcp_send_raw_packet(struct dhcpMessage *payload, -@@ -125,11 +129,7 @@ + int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt, + uint32_t source_ip, int source_port, +@@ -175,11 +180,7 @@ int FAST_FUNC udhcp_send_raw_packet(stru int fd; int result = -1; const char *msg; - - enum { -- IP_UPD_DHCP_SIZE = sizeof(struct udp_dhcp_packet) - CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS, -- UPD_DHCP_SIZE = IP_UPD_DHCP_SIZE - offsetof(struct udp_dhcp_packet, udp), +- IP_UPD_DHCP_SIZE = sizeof(struct ip_udp_dhcp_packet) - CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS, +- UPD_DHCP_SIZE = IP_UPD_DHCP_SIZE - offsetof(struct ip_udp_dhcp_packet, udp), - }; -+ int p_len = udhcp_get_payload_len(payload); ++ int p_len = udhcp_get_payload_len(dhcp_pkt); fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP)); if (fd < 0) { -@@ -139,7 +139,7 @@ +@@ -189,7 +190,7 @@ int FAST_FUNC udhcp_send_raw_packet(stru memset(&dest, 0, sizeof(dest)); memset(&packet, 0, sizeof(packet)); -- packet.data = *payload; /* struct copy */ -+ memcpy(&(packet.data), payload, p_len); +- packet.data = *dhcp_pkt; /* struct copy */ ++ memcpy(&(packet.data), dhcp_pkt, p_len); dest.sll_family = AF_PACKET; dest.sll_protocol = htons(ETH_P_IP); -@@ -156,23 +156,18 @@ +@@ -206,24 +207,19 @@ int FAST_FUNC udhcp_send_raw_packet(stru packet.ip.daddr = dest_ip; packet.udp.source = htons(source_port); packet.udp.dest = htons(dest_port); @@ -58,18 +59,31 @@ - * If you need to change this: last byte of the packet is - * packet.data.options[end_option(packet.data.options)] - */ + udhcp_dump_packet(dhcp_pkt); - result = sendto(fd, &packet, IP_UPD_DHCP_SIZE, 0, + result = sendto(fd, &packet, p_len, 0, (struct sockaddr *) &dest, sizeof(dest)); msg = "sendto"; ret_close: -@@ -224,8 +219,7 @@ +@@ -245,10 +241,6 @@ int FAST_FUNC udhcp_send_kernel_packet(s + int result = -1; + const char *msg; + +- enum { +- DHCP_SIZE = sizeof(struct dhcp_packet) - CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS, +- }; +- + fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (fd < 0) { + msg = "socket(%s)"; +@@ -274,9 +266,8 @@ int FAST_FUNC udhcp_send_kernel_packet(s goto ret_close; } - /* Currently we send full-sized DHCP packets (see above) */ -- result = safe_write(fd, payload, DHCP_SIZE); -+ result = safe_write(fd, payload, udhcp_get_payload_len(payload)); + udhcp_dump_packet(dhcp_pkt); +- result = safe_write(fd, dhcp_pkt, DHCP_SIZE); ++ result = safe_write(fd, dhcp_pkt, udhcp_get_payload_len(dhcp_pkt)); msg = "write"; ret_close: close(fd);