- strncpy(wrq.ifr_name, ifname, IFNAMSIZ);
- wrq.u.data.pointer = (caddr_t) buffer;
- wrq.u.data.length = 0;
- wrq.u.data.flags = 0;
- if(ioctl(skfd, SIOCGIWSPY, &wrq) < 0)
- {
- fprintf(stderr, "Interface doesn't accept reading addresses...\n");
- fprintf(stderr, "SIOCGIWSPY: %s\n", strerror(errno));
- return(-1);
+ /* Check if we have valid mac address type */
+ if(iw_check_mac_addr_type(skfd, ifname) < 0)
+ {
+ fprintf(stderr, "%-8.8s Interface doesn't support MAC addresses\n", ifname);
+ return(-1);
+ }
+
+ wrq.u.data.pointer = (caddr_t) buffer;
+ wrq.u.data.length = 0;
+ wrq.u.data.flags = 0;
+ if(iw_get_ext(skfd, ifname, SIOCGIWSPY, &wrq) < 0)
+ {
+ fprintf(stderr, "Interface doesn't accept reading addresses...\n");
+ fprintf(stderr, "SIOCGIWSPY: %s\n", strerror(errno));
+ return(-1);
+ }
+
+ /* Copy old addresses */
+ nbr = wrq.u.data.length;
+ memcpy(hw_address, buffer, nbr * sizeof(struct sockaddr));
+
+ i = 1; /* skip the "+" */