--- net-tools-1.60/arp.c 2001-04-08 10:05:05.000000000 -0700 +++ net-tools-1.60.new/arp.c 2006-01-31 13:10:01.479716750 -0800 @@ -100,7 +100,7 @@ static int arp_del(char **args) { char host[128]; struct arpreq req; - struct sockaddr sa; + struct sockaddr_storage ss; int flags = 0; int err; @@ -112,12 +112,12 @@ static int arp_del(char **args) return (-1); } safe_strncpy(host, *args, (sizeof host)); - if (ap->input(0, host, &sa) < 0) { + if (ap->input(0, host, (struct sockaddr*)&ss) < 0) { ap->herror(host); return (-1); } /* If a host has more than one address, use the correct one! */ - memcpy((char *) &req.arp_pa, (char *) &sa, sizeof(struct sockaddr)); + memcpy((char *) &req.arp_pa, (char *) &ss, sizeof(struct sockaddr)); if (hw_set) req.arp_ha.sa_family = hw->type; @@ -177,11 +177,11 @@ static int arp_del(char **args) usage(); if (strcmp(*args, "255.255.255.255") != 0) { strcpy(host, *args); - if (ap->input(0, host, &sa) < 0) { + if (ap->input(0, host, (struct sockaddr*)&ss) < 0) { ap->herror(host); return (-1); } - memcpy((char *) &req.arp_netmask, (char *) &sa, + memcpy((char *) &req.arp_netmask, (char *) &ss, sizeof(struct sockaddr)); req.arp_flags |= ATF_NETMASK; } @@ -260,7 +260,7 @@ static int arp_set(char **args) { char host[128]; struct arpreq req; - struct sockaddr sa; + struct sockaddr_storage ss; int flags; memset((char *) &req, 0, sizeof(req)); @@ -271,12 +271,12 @@ static int arp_set(char **args) return (-1); } safe_strncpy(host, *args++, (sizeof host)); - if (ap->input(0, host, &sa) < 0) { + if (ap->input(0, host, (struct sockaddr*)&ss) < 0) { ap->herror(host); return (-1); } /* If a host has more than one address, use the correct one! */ - memcpy((char *) &req.arp_pa, (char *) &sa, sizeof(struct sockaddr)); + memcpy((char *) &req.arp_pa, (char *) &ss, sizeof(struct sockaddr)); /* Fetch the hardware address. */ if (*args == NULL) { @@ -346,11 +346,11 @@ static int arp_set(char **args) usage(); if (strcmp(*args, "255.255.255.255") != 0) { strcpy(host, *args); - if (ap->input(0, host, &sa) < 0) { + if (ap->input(0, host, (struct sockaddr*)&ss) < 0) { ap->herror(host); return (-1); } - memcpy((char *) &req.arp_netmask, (char *) &sa, + memcpy((char *) &req.arp_netmask, (char *) &ss, sizeof(struct sockaddr)); flags |= ATF_NETMASK; } @@ -519,7 +519,7 @@ static void arp_disp(char *name, char *i static int arp_show(char *name) { char host[100]; - struct sockaddr sa; + struct sockaddr_storage ss; char ip[100]; char hwa[100]; char mask[100]; @@ -535,11 +535,11 @@ static int arp_show(char *name) if (name != NULL) { /* Resolve the host name. */ safe_strncpy(host, name, (sizeof host)); - if (ap->input(0, host, &sa) < 0) { + if (ap->input(0, host, (struct sockaddr*)&ss) < 0) { ap->herror(host); return (-1); } - safe_strncpy(host, ap->sprint(&sa, 1), sizeof(host)); + safe_strncpy(host, ap->sprint((struct sockaddr*)&ss, 1), sizeof(host)); } /* Open the PROCps kernel table. */ if ((fp = fopen(_PATH_PROCNET_ARP, "r")) == NULL) { @@ -575,10 +575,11 @@ static int arp_show(char *name) if (opt_n) hostname = "?"; else { - if (ap->input(0, ip, &sa) < 0) + if (ap->input(0, ip, (struct sockaddr*)&ss) < 0) hostname = ip; else - hostname = ap->sprint(&sa, opt_n | 0x8000); + hostname = ap->sprint((struct sockaddr*)&ss, + opt_n | 0x8000); if (strcmp(hostname, ip) == 0) hostname = "?"; }