in common/ipprefix.h [58:88]
inline IpAddress getMask() const
{
switch (m_ip.getIp().family)
{
case AF_INET:
{
return IpAddress(htonl((uint32_t)((0xFFFFFFFFLL << (32 - m_mask)) & 0xFFFFFFFFLL)));
}
case AF_INET6:
{
ip_addr_t ipa;
ipa.family = AF_INET6;
assert(m_mask >= 0 && m_mask <= 128);
int mid = m_mask >> 3;
int bits = m_mask & 0x7;
memset(ipa.ip_addr.ipv6_addr, 0xFF, mid);
if (mid < 16)
{
assert(mid >= 0 && mid < 16);
ipa.ip_addr.ipv6_addr[mid] = (uint8_t)(0xFF << (8 - bits));
memset(ipa.ip_addr.ipv6_addr + mid + 1, 0, 16 - mid - 1);
}
return IpAddress(ipa);
}
default:
{
throw std::logic_error("Invalid family");
}
}
}