Skip to content

Commit 6c4a42a

Browse files
Update jellyfish.c
1 parent 9961292 commit 6c4a42a

File tree

1 file changed

+32
-31
lines changed

1 file changed

+32
-31
lines changed

code/logic/jellyfish.c

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -139,63 +139,64 @@ uint64_t get_time_microseconds(void) {
139139

140140
static uint64_t get_device_salt(void) {
141141
uint64_t salt = DEFAULT_SALT;
142+
ULONG size = 15000;
143+
IP_ADAPTER_ADDRESSES *adapters = (IP_ADAPTER_ADDRESSES *)malloc(size);
144+
if (!adapters) return salt;
142145

143-
ULONG outBufLen = 15000;
144-
IP_ADAPTER_ADDRESSES *addresses = (IP_ADAPTER_ADDRESSES *)malloc(outBufLen);
145-
if (!addresses) return salt;
146-
147-
if (GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_SKIP_ANYCAST, NULL, addresses, &outBufLen) == NO_ERROR) {
148-
for (IP_ADAPTER_ADDRESSES *addr = addresses; addr != NULL; addr = addr->Next) {
149-
if (addr->PhysicalAddressLength == 6) {
146+
if (GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_SKIP_ANYCAST, NULL, adapters, &size) == NO_ERROR) {
147+
for (IP_ADAPTER_ADDRESSES *a = adapters; a; a = a->Next) {
148+
if (a->PhysicalAddressLength == 6) {
150149
for (ULONG i = 0; i < 6; ++i) {
151-
salt ^= addr->PhysicalAddress[i];
150+
salt ^= a->PhysicalAddress[i];
152151
salt *= 0x100000001b3ULL;
153152
}
154153
break;
155154
}
156155
}
157156
}
158-
159-
free(addresses);
157+
free(adapters);
160158
return salt;
161159
}
162160

163161
#elif defined(__APPLE__) && defined(__MACH__)
164-
// ==========================================
165-
// macOS implementation using getifaddrs()
166-
// ==========================================
162+
// ========================
163+
// macOS / Darwin
164+
// ========================
167165
#include <ifaddrs.h>
168166
#include <net/if_dl.h>
167+
#include <net/if.h> // for IFNAMSIZ
168+
#include <sys/socket.h> // for struct sockaddr and AF_LINK
169169

170170
static uint64_t get_device_salt(void) {
171-
struct ifaddrs *ifap = NULL;
172171
uint64_t salt = DEFAULT_SALT;
172+
struct ifaddrs *ifap = NULL;
173173

174-
if (getifaddrs(&ifap) == 0) {
175-
for (struct ifaddrs *ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
176-
if (!ifa->ifa_addr || ifa->ifa_addr->sa_family != AF_LINK)
177-
continue;
174+
if (getifaddrs(&ifap) != 0 || !ifap)
175+
return salt;
178176

179-
struct sockaddr_dl *sdl = (struct sockaddr_dl *)ifa->ifa_addr;
180-
const unsigned char *mac = (const unsigned char *)LLADDR(sdl);
181-
if (sdl->sdl_alen == 6) {
182-
for (int i = 0; i < 6; ++i) {
183-
salt ^= mac[i];
184-
salt *= 0x100000001b3ULL;
185-
}
186-
break;
177+
for (struct ifaddrs *ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
178+
if (!ifa->ifa_addr || ifa->ifa_addr->sa_family != AF_LINK)
179+
continue;
180+
181+
struct sockaddr_dl *sdl = (struct sockaddr_dl *)ifa->ifa_addr;
182+
const unsigned char *mac = (const unsigned char *)LLADDR(sdl);
183+
if (sdl->sdl_alen == 6) {
184+
for (int i = 0; i < 6; ++i) {
185+
salt ^= mac[i];
186+
salt *= 0x100000001b3ULL;
187187
}
188+
break;
188189
}
189-
freeifaddrs(ifap);
190190
}
191191

192+
freeifaddrs(ifap);
192193
return salt;
193194
}
194195

195196
#else
196-
// ==========================================
197-
// Linux implementation using ioctl
198-
// ==========================================
197+
// ========================
198+
// Linux and Unix-like OS
199+
// ========================
199200
#include <unistd.h>
200201
#include <sys/ioctl.h>
201202
#include <net/if.h>
@@ -213,7 +214,7 @@ static uint64_t get_device_salt(void) {
213214
memset(&ifr, 0, sizeof(ifr));
214215
strncpy(ifr.ifr_name, interfaces[i], IFNAMSIZ - 1);
215216

216-
// SIOCGIFHWADDR = 0x8927 on Linux
217+
// 0x8927 = SIOCGIFHWADDR on Linux
217218
if (ioctl(sock, 0x8927, &ifr) == 0) {
218219
unsigned char *mac = (unsigned char *)ifr.ifr_hwaddr.sa_data;
219220
for (int j = 0; j < 6; ++j) {

0 commit comments

Comments
 (0)