5 * Created by f.dhaeyer on 30/03/11.
6 * Copyright 2011 Parrot SA. All rights reserved.
14 #include <sys/ioctl.h>
15 #include <sys/types.h>
16 #include <sys/socket.h>
17 #include <netinet/in.h>
19 #include <arpa/inet.h>
20 #include <sys/sockio.h>
23 #include <net/if_dl.h>
24 #include <net/ethernet.h>
26 #define max(a,b) ((a > b) ? a : b)
28 #define BUFFERSIZE 4000
30 char iphone_mac_address[] = "00:00:00:00:00:00";
32 void get_iphone_mac_address(const char *itfName)
39 char buffer[BUFFERSIZE], *cp, *cplim;
42 sockfd = socket(AF_INET, SOCK_DGRAM, 0);
45 ifc.ifc_len = BUFFERSIZE;
48 if (ioctl(sockfd, SIOCGIFCONF, (char *)&ifc) >= 0)
52 cplim = buffer + ifc.ifc_len;
53 for (cp = buffer ; cp < cplim ; )
55 ifr = (struct ifreq *)cp;
56 if (ifr->ifr_addr.sa_family == AF_LINK)
58 struct sockaddr_dl *sdl = (struct sockaddr_dl *)&ifr->ifr_addr;
61 strcpy(temp, (char *)ether_ntoa((const struct ether_addr *)LLADDR(sdl)));
62 sscanf(temp, "%x:%x:%x:%x:%x:%x", &a, &b, &c, &d, &e, &f);
63 sprintf(temp, "%02X:%02X:%02X:%02X:%02X:%02X",a,b,c,d,e,f);
64 if(strcmp(ifr->ifr_name, itfName) == 0)
66 strcpy(iphone_mac_address, temp);
70 cp += sizeof(ifr->ifr_name) + max(sizeof(ifr->ifr_addr), ifr->ifr_addr.sa_len);