- memset(&dest, 0, sizeof(dest));
- memset(&packet, 0, sizeof(packet));
- packet.data = *payload; /* struct copy */
-
- dest.sll_family = AF_PACKET;
- dest.sll_protocol = htons(ETH_P_IP);
- dest.sll_ifindex = ifindex;
- dest.sll_halen = 6;
- memcpy(dest.sll_addr, dest_arp, 6);
- if (bind(fd, (struct sockaddr *)&dest, sizeof(struct sockaddr_ll)) < 0) {
- bb_perror_msg("bind");
- close(fd);
- return -1;
+ memset(&dest_sll, 0, sizeof(dest_sll));
+ memset(&packet, 0, offsetof(struct ip_udp_dhcp_packet, data));
+ packet.data = *dhcp_pkt; /* struct copy */
+
+ dest_sll.sll_family = AF_PACKET;
+ dest_sll.sll_protocol = htons(ETH_P_IP);
+ dest_sll.sll_ifindex = ifindex;
+ dest_sll.sll_halen = 6;
+ memcpy(dest_sll.sll_addr, dest_arp, 6);
+
+ if (bind(fd, (struct sockaddr *)&dest_sll, sizeof(dest_sll)) < 0) {
+ msg = "bind(%s)";
+ goto ret_close;