diff options
author | Denys Vlasenko | 2010-05-30 23:41:23 +0200 |
---|---|---|
committer | Denys Vlasenko | 2010-05-30 23:41:23 +0200 |
commit | b7d19cc400f14ccd64a1fedebe14022fe115029a (patch) | |
tree | cd4a50e2694628413a2460d3e1d2a706462d0e2b /networking/udhcp/packet.c | |
parent | c88c1a01904b5791dfd1ca5342c805a9f392e17f (diff) | |
download | busybox-b7d19cc400f14ccd64a1fedebe14022fe115029a.zip busybox-b7d19cc400f14ccd64a1fedebe14022fe115029a.tar.gz |
dhcp: readability cleanups and small code shrink
function old new delta
udhcp_run_script 654 617 -37
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'networking/udhcp/packet.c')
-rw-r--r-- | networking/udhcp/packet.c | 46 |
1 files changed, 19 insertions, 27 deletions
diff --git a/networking/udhcp/packet.c b/networking/udhcp/packet.c index 1bfe120..c01fb7d 100644 --- a/networking/udhcp/packet.c +++ b/networking/udhcp/packet.c @@ -167,44 +167,40 @@ uint16_t FAST_FUNC udhcp_checksum(void *addr, int count) /* Construct a ip/udp header for a packet, send packet */ int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt, - uint32_t source_ip, int source_port, - uint32_t dest_ip, int dest_port, const uint8_t *dest_arp, + uint32_t source_nip, int source_port, + uint32_t dest_nip, int dest_port, const uint8_t *dest_arp, int ifindex) { - struct sockaddr_ll dest; + struct sockaddr_ll dest_sll; struct ip_udp_dhcp_packet packet; int fd; int result = -1; const char *msg; - enum { - 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), - }; - fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP)); if (fd < 0) { msg = "socket(%s)"; goto ret_msg; } - memset(&dest, 0, sizeof(dest)); - memset(&packet, 0, sizeof(packet)); + 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_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(dest)) < 0) { + 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; } packet.ip.protocol = IPPROTO_UDP; - packet.ip.saddr = source_ip; - packet.ip.daddr = dest_ip; + packet.ip.saddr = source_nip; + packet.ip.daddr = dest_nip; packet.udp.source = htons(source_port); packet.udp.dest = htons(dest_port); /* size, excluding IP header: */ @@ -225,7 +221,7 @@ int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt, */ udhcp_dump_packet(dhcp_pkt); result = sendto(fd, &packet, IP_UPD_DHCP_SIZE, 0, - (struct sockaddr *) &dest, sizeof(dest)); + (struct sockaddr *) &dest_sll, sizeof(dest_sll)); msg = "sendto"; ret_close: close(fd); @@ -239,18 +235,14 @@ int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt, /* Let the kernel do all the work for packet generation */ int FAST_FUNC udhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt, - uint32_t source_ip, int source_port, - uint32_t dest_ip, int dest_port) + uint32_t source_nip, int source_port, + uint32_t dest_nip, int dest_port) { struct sockaddr_in client; int fd; 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)"; @@ -261,7 +253,7 @@ int FAST_FUNC udhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt, memset(&client, 0, sizeof(client)); client.sin_family = AF_INET; client.sin_port = htons(source_port); - client.sin_addr.s_addr = source_ip; + client.sin_addr.s_addr = source_nip; if (bind(fd, (struct sockaddr *)&client, sizeof(client)) == -1) { msg = "bind(%s)"; goto ret_close; @@ -270,7 +262,7 @@ int FAST_FUNC udhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt, memset(&client, 0, sizeof(client)); client.sin_family = AF_INET; client.sin_port = htons(dest_port); - client.sin_addr.s_addr = dest_ip; + client.sin_addr.s_addr = dest_nip; if (connect(fd, (struct sockaddr *)&client, sizeof(client)) == -1) { msg = "connect"; goto ret_close; |