A bunch of defined(__GLIBC__) added. static-linking warning expanded
[oweals/busybox.git] / networking / udhcp / packet.c
index e79542d082214418b0708e2b344463b72c850a66..25c55faab1c9d5f7a174bdac2fbd31f5a759ecef 100644 (file)
@@ -1,7 +1,7 @@
 /* vi: set sw=4 ts=4: */
 
 #include <netinet/in.h>
-#if (__GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1) || defined _NEWLIB_VERSION
+#if (defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1) || defined _NEWLIB_VERSION
 #include <netpacket/packet.h>
 #include <net/ethernet.h>
 #else
@@ -109,6 +109,7 @@ uint16_t udhcp_checksum(void *addr, int count)
 
 
 /* Construct a ip/udp header for a packet, and specify the source and dest hardware address */
+void BUG_sizeof_struct_udp_dhcp_packet_must_be_576(void);
 int udhcp_raw_packet(struct dhcpMessage *payload,
                uint32_t source_ip, int source_port,
                uint32_t dest_ip, int dest_port, uint8_t *dest_arp, int ifindex)
@@ -154,6 +155,9 @@ int udhcp_raw_packet(struct dhcpMessage *payload,
        packet.ip.ttl = IPDEFTTL;
        packet.ip.check = udhcp_checksum(&(packet.ip), sizeof(packet.ip));
 
+       if (sizeof(struct udp_dhcp_packet) != 576)
+               BUG_sizeof_struct_udp_dhcp_packet_must_be_576();
+
        result = sendto(fd, &packet, sizeof(struct udp_dhcp_packet), 0,
                        (struct sockaddr *) &dest, sizeof(dest));
        if (result <= 0) {
@@ -169,7 +173,6 @@ int udhcp_kernel_packet(struct dhcpMessage *payload,
                uint32_t source_ip, int source_port,
                uint32_t dest_ip, int dest_port)
 {
-       int n = 1;
        int fd, result;
        struct sockaddr_in client;
 
@@ -177,7 +180,7 @@ int udhcp_kernel_packet(struct dhcpMessage *payload,
        if (fd < 0)
                return -1;
 
-       if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *) &n, sizeof(n)) == -1) {
+       if (setsockopt_reuseaddr(fd) == -1) {
                close(fd);
                return -1;
        }