inline IpAddress getMask()

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");
            }
        }
    }