Bug 8926 - Arping dropping leading 0 from mac address
Summary: Arping dropping leading 0 from mac address
Status: RESOLVED FIXED
Alias: None
Product: Busybox
Classification: Unclassified
Component: Networking (show other bugs)
Version: 1.24.x
Hardware: All Linux
: P2 normal
Target Milestone: ---
Assignee: unassigned
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-05-15 20:11 UTC by Vito Mule
Modified: 2016-07-04 20:04 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:


Attachments
arping_drops_leading_zero.patch (2.28 KB, patch)
2016-05-15 20:36 UTC, Vito Mule
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Vito Mule 2016-05-15 20:11:54 UTC
Not sure if this is intende but busybox arping is not consistent with arping on linux, printing MAC addressed.


root@agent4:/home/vmule# arping 192.168.1.159
ARPING 192.168.1.159
60 bytes from 08:00:27:86:47:9d (192.168.1.159): index=0 time=1.002 sec

and this is busybox arping
root@agent4:/home/vmule# busybox arping 192.168.1.159
ARPING to 192.168.1.159 from 192.168.1.157 via eth0
Unicast reply from 192.168.1.159 [8:0:27:86:47:9d] 0.314ms

I wrote a small patch to fix it:


diff --git a/networking/arping.c b/networking/arping.c
index 6b0de4d..2b22451 100644
--- a/networking/arping.c
+++ b/networking/arping.c
@@ -230,12 +230,15 @@ static void recv_pack(unsigned char *buf, int len, struct sockaddr_ll *FROM)
        }
        if (!(option_mask32 & QUIET)) {
                int s_printed = 0;
+               struct ether_addr* mac = (struct ether_addr *) p;

-               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));
+                       mac->ether_addr_octet[0], mac->ether_addr_octet[1],
+                       mac->ether_addr_octet[2], mac->ether_addr_octet[3],
+                       mac->ether_addr_octet[4], mac->ether_addr_octet[5]);
                if (dst_ip.s_addr != src.s_addr) {
                        printf("for %s ", inet_ntoa(dst_ip));
                        s_printed = 1;
@@ -243,8 +246,11 @@ static void recv_pack(unsigned char *buf, int len, struct sockaddr_ll *FROM)
                if (memcmp(p + ah->ar_hln + 4, me.sll_addr, ah->ar_hln)) {
                        if (!s_printed)
                                printf("for ");
-                       printf("[%s]",
-                               ether_ntoa((struct ether_addr *) p + ah->ar_hln + 4));
+                       struct ether_addr* mac2 = mac + ah->ar_hln + 4;
+                       printf("[%02x:%02x:%02x:%02x:%02x:%02x]",
+                               mac2->ether_addr_octet[0], mac2->ether_addr_octet[1],
+                               mac2->ether_addr_octet[2], mac2->ether_addr_octet[3],
+                               mac2->ether_addr_octet[4], mac2->ether_addr_octet[5]);
                }

                if (last) {


Ideas?
Comment 1 Vito Mule 2016-05-15 20:36:15 UTC
Created attachment 6431 [details]
arping_drops_leading_zero.patch
Comment 2 Mike Frysinger 2016-05-27 17:16:37 UTC
Fixed in git, thanks