[git commit] udhcpc6: code shrink - sending functions do not need ifindex parameter

Denys Vlasenko vda.linux at googlemail.com
Tue Dec 15 20:55:15 UTC 2020


commit: https://git.busybox.net/busybox/commit/?id=f3d6711c971cde8ed3890a47020c5083a383e606
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
d6_send_raw_packet_from_client_data_ifindex            -     427    +427
d6_send_kernel_packet_from_client_data_ifindex         -     275    +275
send_d6_renew                                        182     176      -6
perform_d6_release                                   246     240      -6
d6_mcast_from_client_data_ifindex                     45      39      -6
d6_send_kernel_packet                                274       -    -274
d6_send_raw_packet                                   429       -    -429
------------------------------------------------------------------------------
(add/remove: 2/2 grow/shrink: 0/3 up/down: 702/-721)          Total: -19 bytes

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/udhcp/d6_common.h | 10 ++++------
 networking/udhcp/d6_dhcpc.c  | 15 ++++++---------
 networking/udhcp/d6_packet.c | 19 +++++++++----------
 3 files changed, 19 insertions(+), 25 deletions(-)

diff --git a/networking/udhcp/d6_common.h b/networking/udhcp/d6_common.h
index 688f5d6c7..9dfde7709 100644
--- a/networking/udhcp/d6_common.h
+++ b/networking/udhcp/d6_common.h
@@ -159,18 +159,16 @@ int FAST_FUNC d6_recv_kernel_packet(
 		struct d6_packet *packet, int fd
 );
 
-int FAST_FUNC d6_send_raw_packet(
+int FAST_FUNC d6_send_raw_packet_from_client_data_ifindex(
 		struct d6_packet *d6_pkt, unsigned d6_pkt_size,
 		struct in6_addr *src_ipv6, int source_port,
-		struct in6_addr *dst_ipv6, int dest_port, const uint8_t *dest_arp,
-		int ifindex
+		struct in6_addr *dst_ipv6, int dest_port, const uint8_t *dest_arp
 );
 
-int FAST_FUNC d6_send_kernel_packet(
+int FAST_FUNC d6_send_kernel_packet_from_client_data_ifindex(
 		struct d6_packet *d6_pkt, unsigned d6_pkt_size,
 		struct in6_addr *src_ipv6, int source_port,
-		struct in6_addr *dst_ipv6, int dest_port,
-		int ifindex
+		struct in6_addr *dst_ipv6, int dest_port
 );
 
 #if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 2
diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c
index ac8af91d3..744448cee 100644
--- a/networking/udhcp/d6_dhcpc.c
+++ b/networking/udhcp/d6_dhcpc.c
@@ -558,11 +558,10 @@ static int d6_mcast_from_client_data_ifindex(struct d6_packet *packet, uint8_t *
 		0x33, 0x33, 0x00, 0x01, 0x00, 0x02,
 	};
 
-	return d6_send_raw_packet(
+	return d6_send_raw_packet_from_client_data_ifindex(
 		packet, (end - (uint8_t*) packet),
 		/*src*/ &client6_data.ll_ip6, CLIENT_PORT6,
-		/*dst*/ (struct in6_addr*)FF02__1_2, SERVER_PORT6, MAC_DHCP6MCAST_ADDR,
-		client_data.ifindex
+		/*dst*/ (struct in6_addr*)FF02__1_2, SERVER_PORT6, MAC_DHCP6MCAST_ADDR
 	);
 }
 
@@ -864,11 +863,10 @@ static NOINLINE int send_d6_renew(uint32_t xid, struct in6_addr *server_ipv6, st
 
 	bb_info_msg("sending %s", "renew");
 	if (server_ipv6)
-		return d6_send_kernel_packet(
+		return d6_send_kernel_packet_from_client_data_ifindex(
 			&packet, (opt_ptr - (uint8_t*) &packet),
 			our_cur_ipv6, CLIENT_PORT6,
-			server_ipv6, SERVER_PORT6,
-			client_data.ifindex
+			server_ipv6, SERVER_PORT6
 		);
 	return d6_mcast_from_client_data_ifindex(&packet, opt_ptr);
 }
@@ -893,11 +891,10 @@ int send_d6_release(struct in6_addr *server_ipv6, struct in6_addr *our_cur_ipv6)
 		opt_ptr = mempcpy(opt_ptr, client6_data.ia_pd, client6_data.ia_pd->len + 2+2);
 
 	bb_info_msg("sending %s", "release");
-	return d6_send_kernel_packet(
+	return d6_send_kernel_packet_from_client_data_ifindex(
 		&packet, (opt_ptr - (uint8_t*) &packet),
 		our_cur_ipv6, CLIENT_PORT6,
-		server_ipv6, SERVER_PORT6,
-		client_data.ifindex
+		server_ipv6, SERVER_PORT6
 	);
 }
 
diff --git a/networking/udhcp/d6_packet.c b/networking/udhcp/d6_packet.c
index 167a813e3..172f8e1ab 100644
--- a/networking/udhcp/d6_packet.c
+++ b/networking/udhcp/d6_packet.c
@@ -6,6 +6,7 @@
  */
 #include "common.h"
 #include "d6_common.h"
+#include "dhcpc.h"
 #include "dhcpd.h"
 #include <netinet/in.h>
 #include <netinet/if_ether.h>
@@ -50,11 +51,10 @@ int FAST_FUNC d6_recv_kernel_packet(struct in6_addr *peer_ipv6
 }
 
 /* Construct a ipv6+udp header for a packet, send packet */
-int FAST_FUNC d6_send_raw_packet(
+int FAST_FUNC d6_send_raw_packet_from_client_data_ifindex(
 		struct d6_packet *d6_pkt, unsigned d6_pkt_size,
 		struct in6_addr *src_ipv6, int source_port,
-		struct in6_addr *dst_ipv6, int dest_port, const uint8_t *dest_arp,
-		int ifindex)
+		struct in6_addr *dst_ipv6, int dest_port, const uint8_t *dest_arp)
 {
 	struct sockaddr_ll dest_sll;
 	struct ip6_udp_d6_packet packet;
@@ -74,7 +74,7 @@ int FAST_FUNC d6_send_raw_packet(
 
 	dest_sll.sll_family = AF_PACKET;
 	dest_sll.sll_protocol = htons(ETH_P_IPV6);
-	dest_sll.sll_ifindex = ifindex;
+	dest_sll.sll_ifindex = client_data.ifindex;
 	/*dest_sll.sll_hatype = ARPHRD_???;*/
 	/*dest_sll.sll_pkttype = PACKET_???;*/
 	dest_sll.sll_halen = 6;
@@ -103,8 +103,8 @@ int FAST_FUNC d6_send_raw_packet(
 	 */
 	packet.ip6.ip6_hlim = IPPROTO_UDP;
 	packet.udp.check = inet_cksum(
-				(uint8_t *)&packet + 4,
-				offsetof(struct ip6_udp_d6_packet, data) - 4 + d6_pkt_size
+			(uint8_t *)&packet + 4,
+			offsetof(struct ip6_udp_d6_packet, data) - 4 + d6_pkt_size
 	);
 	/* fix 'hop limit' and 'next header' after UDP checksumming */
 	packet.ip6.ip6_hlim = 1; /* observed Windows machines to use hlim=1 */
@@ -126,11 +126,10 @@ int FAST_FUNC d6_send_raw_packet(
 }
 
 /* Let the kernel do all the work for packet generation */
-int FAST_FUNC d6_send_kernel_packet(
+int FAST_FUNC d6_send_kernel_packet_from_client_data_ifindex(
 		struct d6_packet *d6_pkt, unsigned d6_pkt_size,
 		struct in6_addr *src_ipv6, int source_port,
-		struct in6_addr *dst_ipv6, int dest_port,
-		int ifindex)
+		struct in6_addr *dst_ipv6, int dest_port)
 {
 	struct sockaddr_in6 sa;
 	int fd;
@@ -157,7 +156,7 @@ int FAST_FUNC d6_send_kernel_packet(
 	sa.sin6_family = AF_INET6;
 	sa.sin6_port = htons(dest_port);
 	sa.sin6_addr = *dst_ipv6; /* struct copy */
-	sa.sin6_scope_id = ifindex;
+	sa.sin6_scope_id = client_data.ifindex;
 	if (connect(fd, (struct sockaddr *)&sa, sizeof(sa)) == -1) {
 		msg = "connect";
 		goto ret_close;


More information about the busybox-cvs mailing list