summaryrefslogtreecommitdiff
path: root/mysys/my_gethwaddr.c
diff options
context:
space:
mode:
Diffstat (limited to 'mysys/my_gethwaddr.c')
-rw-r--r--mysys/my_gethwaddr.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/mysys/my_gethwaddr.c b/mysys/my_gethwaddr.c
index 46b62a0166d..0fa4fb2f995 100644
--- a/mysys/my_gethwaddr.c
+++ b/mysys/my_gethwaddr.c
@@ -23,7 +23,7 @@
#ifndef MAIN
-#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__) || defined(__sun) || defined(_WIN32)
+#if defined(_AIX) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__) || defined(__sun) || defined(_WIN32)
static my_bool memcpy_and_test(uchar *to, uchar *from, uint len)
{
uint i, res= 1;
@@ -74,7 +74,7 @@ err:
return res;
}
-#elif defined(__linux__) || defined(__sun)
+#elif defined(_AIX) || defined(__linux__) || defined(__sun)
#include <net/if.h>
#include <sys/ioctl.h>
#include <net/if_arp.h>
@@ -87,11 +87,15 @@ err:
my_bool my_gethwaddr(uchar *to)
{
int fd, res= 1;
+#ifdef _AIX
+ struct ifhwaddr_req ifr[32];
+#else
struct ifreq ifr[32];
+#endif
struct ifconf ifc;
DBUG_ENTER("my_gethwaddr");
- ifc.ifc_req= ifr;
+ ifc.ifc_req= (struct ifreq *) ifr;
ifc.ifc_len= sizeof(ifr);
fd = socket(AF_INET, SOCK_DGRAM, 0);
@@ -106,9 +110,14 @@ my_bool my_gethwaddr(uchar *to)
uint i;
for (i= 0; res && i < ifc.ifc_len / sizeof(ifr[0]); i++)
{
-#ifdef __linux__
+#if !defined(_AIX) || !defined(__linux__)
+#if defined(__linux___)
+#define HWADDR_DATA ifr[i].ifr_hwaddr.sa_data
+#else
+#define HWADDR_DATA ifr[i].ifr_hwaddr
+#endif
if (ioctl(fd, SIOCGIFHWADDR, &ifr[i]) >= 0)
- res= memcpy_and_test(to, (uchar *)&ifr[i].ifr_hwaddr.sa_data,
+ res= memcpy_and_test(to, (uchar *)&HWADDR_DATA,
ETHER_ADDR_LEN);
#else
/*