From e8b0894dc8d8db630f7faf56c68138d6e39d7cdc Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 5 Apr 2022 15:47:09 +1000 Subject: [PATCH] MDEV-28243: AIX missing my_gethwaddr implementation and failing spider partition test. With some small datatype changes to the Linux/Solaris my_gethwaddr implementation the hardware address of AIX can be returned. This is an important aspect in Spider (and UUID). Spider test change reviewed by Nayuta Yanagisawa. my_gethwaddr review by Monty in #2081 --- mysys/my_gethwaddr.c | 19 ++++++++++++++----- .../mysql-test/spider/t/partition_mrr.test | 6 +++--- 2 files changed, 17 insertions(+), 8 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 #include #include @@ -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 /* diff --git a/storage/spider/mysql-test/spider/t/partition_mrr.test b/storage/spider/mysql-test/spider/t/partition_mrr.test index 2816d65cadb..710e2781242 100644 --- a/storage/spider/mysql-test/spider/t/partition_mrr.test +++ b/storage/spider/mysql-test/spider/t/partition_mrr.test @@ -179,21 +179,21 @@ if ($USE_CHILD_GROUP2) --connection child2_1 if ($USE_GENERAL_LOG) { ---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/ +--replace_regex /tmp_spider_bka_(0x)?[0-9a-f]*/tmp_spider_bka_xxxx/ eval $CHILD2_1_SELECT_ARGUMENT1; } eval $CHILD2_1_SELECT_TABLES; --connection child2_2 if ($USE_GENERAL_LOG) { ---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/ +--replace_regex /tmp_spider_bka_(0x)?[0-9a-f]*/tmp_spider_bka_xxxx/ eval $CHILD2_2_SELECT_ARGUMENT1; } eval $CHILD2_2_SELECT_TABLES; --connection child2_3 if ($USE_GENERAL_LOG) { ---replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/ +--replace_regex /tmp_spider_bka_(0x)?[0-9a-f]*/tmp_spider_bka_xxxx/ eval $CHILD2_3_SELECT_ARGUMENT1; } eval $CHILD2_3_SELECT_TABLES;