Ignore:
Timestamp:
Dec 20, 2016, 4:07:32 PM (7 years ago)
Author:
Bruno Cornec
Message:

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

Location:
branches/3.3
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/3.3/mindi-busybox/networking/arping.c

    r3232 r3621  
    1414//usage:     "\n    -q      Quiet"
    1515//usage:     "\n    -b      Keep broadcasting, don't go unicast"
    16 //usage:     "\n    -D      Duplicated address detection mode"
     16//usage:     "\n    -D      Exit with 1 if DST_IP replies"
    1717//usage:     "\n    -U      Unsolicited ARP mode, update your neighbors"
    1818//usage:     "\n    -A      ARP answer mode, update your neighbors"
    1919//usage:     "\n    -c N        Stop after sending N ARP requests"
    20 //usage:     "\n    -w TIMEOUT  Time to wait for ARP reply, seconds"
     20//usage:     "\n    -w TIMEOUT  Seconds to wait for ARP reply"
    2121//usage:     "\n    -I IFACE    Interface to use (default eth0)"
    2222//usage:     "\n    -s SRC_IP   Sender IP address"
     
    2929
    3030#include "libbb.h"
     31#include "common_bufsiz.h"
    3132
    3233/* We don't expect to see 1000+ seconds delay, unsigned is enough */
     
    6162    unsigned req_recv;
    6263} FIX_ALIASING;
    63 #define G (*(struct globals*)&bb_common_bufsiz1)
     64#define G (*(struct globals*)bb_common_bufsiz1)
    6465#define src        (G.src       )
    6566#define dst        (G.dst       )
     
    7778#define req_recv   (G.req_recv  )
    7879#define INIT_G() do { \
     80    setup_common_bufsiz(); \
    7981    count = -1; \
    8082} while (0)
     
    163165}
    164166
    165 static bool recv_pack(unsigned char *buf, int len, struct sockaddr_ll *FROM)
     167static void recv_pack(unsigned char *buf, int len, struct sockaddr_ll *FROM)
    166168{
    167169    struct arphdr *ah = (struct arphdr *) buf;
     
    182184     && FROM->sll_pkttype != PACKET_BROADCAST
    183185     && FROM->sll_pkttype != PACKET_MULTICAST)
    184         return false;
     186        return;
    185187
    186188    /* Only these types are recognized */
    187189    if (ah->ar_op != htons(ARPOP_REQUEST) && ah->ar_op != htons(ARPOP_REPLY))
    188         return false;
     190        return;
    189191
    190192    /* ARPHRD check and this darned FDDI hack here :-( */
    191193    if (ah->ar_hrd != htons(FROM->sll_hatype)
    192194     && (FROM->sll_hatype != ARPHRD_FDDI || ah->ar_hrd != htons(ARPHRD_ETHER)))
    193         return false;
     195        return;
    194196
    195197    /* Protocol must be IP. */
     
    198200     || (ah->ar_hln != me.sll_halen)
    199201     || (len < (int)(sizeof(*ah) + 2 * (4 + ah->ar_hln))))
    200         return false;
     202        return;
    201203
    202204    move_from_unaligned32(src_ip.s_addr, p + ah->ar_hln);
     
    204206
    205207    if (dst.s_addr != src_ip.s_addr)
    206         return false;
     208        return;
    207209    if (!(option_mask32 & DAD)) {
    208210        if ((src.s_addr != dst_ip.s_addr)
    209             || (memcmp(p + ah->ar_hln + 4, &me.sll_addr, ah->ar_hln)))
    210             return false;
     211         || (memcmp(p + ah->ar_hln + 4, &me.sll_addr, ah->ar_hln)))
     212            return;
    211213    } else {
    212214        /* DAD packet was:
     
    225227        if ((memcmp(p, &me.sll_addr, me.sll_halen) == 0)
    226228         || (src.s_addr && src.s_addr != dst_ip.s_addr))
    227             return false;
     229            return;
    228230    }
    229231    if (!(option_mask32 & QUIET)) {
    230232        int s_printed = 0;
    231233
    232         printf("%scast re%s from %s [%s]",
     234        printf("%scast re%s from %s [%02x:%02x:%02x:%02x:%02x:%02x]",
    233235            FROM->sll_pkttype == PACKET_HOST ? "Uni" : "Broad",
    234236            ah->ar_op == htons(ARPOP_REPLY) ? "ply" : "quest",
    235237            inet_ntoa(src_ip),
    236             ether_ntoa((struct ether_addr *) p));
     238            p[0], p[1], p[2], p[3], p[4], p[5]
     239        );
    237240        if (dst_ip.s_addr != src.s_addr) {
    238241            printf("for %s ", inet_ntoa(dst_ip));
     
    240243        }
    241244        if (memcmp(p + ah->ar_hln + 4, me.sll_addr, ah->ar_hln)) {
     245            unsigned char *pp = p + ah->ar_hln + 4;
    242246            if (!s_printed)
    243247                printf("for ");
    244             printf("[%s]",
    245                 ether_ntoa((struct ether_addr *) p + ah->ar_hln + 4));
     248            printf("[%02x:%02x:%02x:%02x:%02x:%02x]",
     249                pp[0], pp[1], pp[2], pp[3], pp[4], pp[5]
     250            );
    246251        }
    247252
     
    250255            printf(" %u.%03ums\n", diff / 1000, diff % 1000);
    251256        } else {
    252             printf(" UNSOLICITED?\n");
     257            puts(" UNSOLICITED?");
    253258        }
    254259        fflush_all();
     
    265270        option_mask32 |= UNICASTING;
    266271    }
    267     return true;
    268272}
    269273
     
    285289    //xsetuid(getuid());
    286290
    287     err_str = xasprintf("interface %s %%s", device);
    288291    {
    289292        unsigned opt;
     
    303306
    304307    target = argv[optind];
    305 
     308    err_str = xasprintf("interface %s %%s", device);
    306309    xfunc_error_retval = 2;
    307310
     
    360363            saddr.sin_addr = dst;
    361364
    362             if (setsockopt(probe_fd, SOL_SOCKET, SO_DONTROUTE, &const_int_1, sizeof(const_int_1)) == -1)
    363                 bb_perror_msg("setsockopt(SO_DONTROUTE)");
     365            if (setsockopt_SOL_SOCKET_1(probe_fd, SO_DONTROUTE) != 0)
     366                bb_perror_msg("setsockopt(%s)", "SO_DONTROUTE");
    364367            xconnect(probe_fd, (struct sockaddr *) &saddr, sizeof(saddr));
    365368            getsockname(probe_fd, (struct sockaddr *) &saddr, &alen);
Note: See TracChangeset for help on using the changeset viewer.