fix IPv6 masking

This commit is contained in:
Wills Ward 2025-03-30 14:59:26 -05:00
parent 52c93ad574
commit 2678db9d2f

View File

@ -41,6 +41,7 @@ static in6_addr applyMaskV6(const in6_addr& addr, uint8_t prefixLength) {
in6_addr maskedAddr = addr; in6_addr maskedAddr = addr;
int fullBytes = prefixLength / 8; int fullBytes = prefixLength / 8;
int remainingBits = prefixLength % 8; int remainingBits = prefixLength % 8;
uint8_t partialByte = maskedAddr.s6_addr[fullBytes];
// Mask full bytes // Mask full bytes
for (int i = fullBytes; i < 16; ++i) { for (int i = fullBytes; i < 16; ++i) {
@ -50,7 +51,7 @@ static in6_addr applyMaskV6(const in6_addr& addr, uint8_t prefixLength) {
// Mask remaining bits // Mask remaining bits
if (remainingBits > 0) { if (remainingBits > 0) {
uint8_t mask = ~((1 << (8 - remainingBits)) - 1); uint8_t mask = ~((1 << (8 - remainingBits)) - 1);
maskedAddr.s6_addr[fullBytes] &= mask; maskedAddr.s6_addr[fullBytes] = partialByte & mask;
} }
return maskedAddr; return maskedAddr;