- /* If it is not a hardware address (prefixed by hw)... */
- if(strcmp(argv[i], "hw"))
- {
- /* Read interface address */
- if(ap->input(argv[i++], &if_address) < 0)
- {
- fprintf(stderr, "Invalid interface address %s\n", argv[i - 1]);
- continue;
- }
-
- /* Translate IP addresses to MAC addresses */
- memcpy((char *) &(arp_query.arp_pa),
- (char *) &if_address,
- sizeof(struct sockaddr));
- arp_query.arp_ha.sa_family = 0;
- arp_query.arp_flags = 0;
- /* The following restrict the search to the interface only */
- strcpy(arp_query.arp_dev, ifname);
- if((ioctl(inet_sock, SIOCGARP, &arp_query) < 0) ||
- !(arp_query.arp_flags & ATF_COM))
- {
- fprintf(stderr, "Arp failed for %s... (%d) Try to ping the address before.\n",
- ap->sprint(&if_address, 1), errno);
- continue;
- }
-
- /* Store new MAC address */
- memcpy((char *) &(hw_address[nbr++]),
- (char *) &(arp_query.arp_ha),
- sizeof(struct sockaddr));
-
-#ifdef DEBUG
- printf("IP Address %s => Hw Address = %s - %d\n",
- ap->sprint(&if_address, 1),
- hw->print(hw_address[nbr - 1].sa_data));
-#endif
- }
- else /* If it's an hardware address */
- {
- if(++i >= argc)
- {
- fprintf(stderr, "hw must be followed by an address...\n");
- continue;
- }
-
- /* Get the hardware address */
- if(hw->input(argv[i++], &(hw_address[nbr])) < 0)
- {
- fprintf(stderr, "Invalid hardware address %s\n", argv[i - 1]);
- continue;
- }
- nbr++;
-
-#ifdef DEBUG
- printf("Hw Address = %s - %d\n",
- hw->print(hw_address[nbr - 1].sa_data));
-#endif
- }
- } /* Loop on all addresses */
-