[git commit] arping: avoid use of ether_ntoa(). Closes 8926

Denys Vlasenko vda.linux at googlemail.com
Thu May 26 19:35:46 UTC 2016


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

This is the only non-debug use of ether_ntoa(). By not using it,
we reduce bss:

function                                             old     new   delta
arping_main                                         1568    1665     +97
static.asc                                            18       -     -18
ether_ntoa                                            57       -     -57
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 1/0 up/down: 97/-75)             Total: 22 bytes
   text    data     bss     dec     hex filename
 911020     493    7352  918865   e0551 busybox_old
 911069     493    7336  918898   e0572 busybox_unstripped

Also, "standard" arping zero-pads MAC. ether_ntoa() does not.

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/arping.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/networking/arping.c b/networking/arping.c
index 6b0de4d..4f207ea 100644
--- a/networking/arping.c
+++ b/networking/arping.c
@@ -231,20 +231,23 @@ static void recv_pack(unsigned char *buf, int len, struct sockaddr_ll *FROM)
 	if (!(option_mask32 & QUIET)) {
 		int s_printed = 0;
 
-		printf("%scast re%s from %s [%s]",
+		printf("%scast re%s from %s [%02x:%02x:%02x:%02x:%02x:%02x]",
 			FROM->sll_pkttype == PACKET_HOST ? "Uni" : "Broad",
 			ah->ar_op == htons(ARPOP_REPLY) ? "ply" : "quest",
 			inet_ntoa(src_ip),
-			ether_ntoa((struct ether_addr *) p));
+			p[0], p[1], p[2], p[3], p[4], p[5]
+		);
 		if (dst_ip.s_addr != src.s_addr) {
 			printf("for %s ", inet_ntoa(dst_ip));
 			s_printed = 1;
 		}
 		if (memcmp(p + ah->ar_hln + 4, me.sll_addr, ah->ar_hln)) {
+			unsigned char *pp = p + ah->ar_hln + 4;
 			if (!s_printed)
 				printf("for ");
-			printf("[%s]",
-				ether_ntoa((struct ether_addr *) p + ah->ar_hln + 4));
+			printf("[%02x:%02x:%02x:%02x:%02x:%02x]",
+				pp[0], pp[1], pp[2], pp[3], pp[4], pp[5]
+			);
 		}
 
 		if (last) {


More information about the busybox-cvs mailing list