From eedc8a504aaedc9e771cf4212fb3a51d3bd8ee70 Mon Sep 17 00:00:00 2001 From: Nick Briggs Date: Thu, 30 Oct 2025 13:45:34 -0700 Subject: [PATCH] Uses endian independent structure layouts to access returned ethernet packet length field --- src/ether_nethub.c | 4 +--- src/ether_sunos.c | 10 +++++----- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/ether_nethub.c b/src/ether_nethub.c index e9803e2..d7d0f47 100644 --- a/src/ether_nethub.c +++ b/src/ether_nethub.c @@ -297,12 +297,10 @@ static int recvPacket(void) { #if defined(BYTESWAP) log_debug((" recvPacket() :: byte-swapping %d bytes at %p\n", bLen, (void *)ether_buf)); dblwordsSwap(ether_buf, bLen); - IOPage->dlethernet[2] = bLen; #else log_debug((" recvPacket() :: %d bytes at %p\n", bLen, (void *)ether_buf)); - IOPage->dlethernet[3] = bLen; #endif - + ((DLETHERCSB *)IOPage->dlethernet)->DLFIRSTICB = blen; ether_bsize = 0; diff --git a/src/ether_sunos.c b/src/ether_sunos.c index ba75cf1..73799fc 100644 --- a/src/ether_sunos.c +++ b/src/ether_sunos.c @@ -477,7 +477,7 @@ int *ether_debug(void) { estat[0] = 0; if (ether_fd < 0) return (NIL); printf("fd %d bsize %d buf %p icb %X in %d out %d\n ", ether_fd, ether_bsize, (void *)ether_buf, - IOPage->dlethernet[3], ether_in, ether_out); + ((DLETHERCSB *)IOPage->dlethernet)->DLFIRSTICB, ether_in, ether_out); #endif /* MAIKO_ENABLE_ETHERNET */ return (estat); @@ -542,7 +542,7 @@ LispPTR check_ether(void) { memcpy(ðer_buf[0], &nit_buf[nitpos], fromlen); ether_bsize = 0; /* deactivate receiver */ ether_in++; - IOPage->dlethernet[3] = fromlen; + ((DLETHERCSB *)IOPage->dlethernet)->DLFIRSTICB = fromlen; DBPRINT( ("Found packet len %d, at pos %d in buflen %d.\n", fromlen, nitpos, nitlen)); nitpos += fromlen; @@ -586,7 +586,7 @@ LispPTR check_ether(void) { memcpy(ðer_buf[0], nit_buf, data.len); ether_bsize = 0; ether_in++; - IOPage->dlethernet[3] = data.len; + ((DLETHERCSB *)IOPage->dlethernet)->DLFIRSTICB = data.len; ((INTSTAT *)NativeAligned4FromLAddr(*INTERRUPTSTATE_word))->ETHERInterrupt = 1; ETHEREventCount++; Irq_Stk_Check = Irq_Stk_End = 0; @@ -649,7 +649,7 @@ LispPTR get_packet(void) { memcpy(ðer_buf[0], &nit_buf[nitpos], fromlen); ether_bsize = 0; /* deactivate receiver */ ether_in++; - IOPage->dlethernet[3] = fromlen; + ((DLETHERCSB *)IOPage->dlethernet)->DLFIRSTICB = fromlen; DBPRINT(("Found packet len %d, at pos %d in buflen %d.\n", fromlen, nitpos, nitlen)); nitpos += fromlen; return (ATOM_T); @@ -683,7 +683,7 @@ LispPTR get_packet(void) { memcpy(ðer_buf[0], nit_buf, data.len); ether_bsize = 0; ether_in++; - IOPage->dlethernet[3] = data.len; + ((DLETHERCSB *)IOPage->dlethernet)->DLFIRSTICB = data.len; return (ATOM_T); } } else if (errno != EWOULDBLOCK)