private static IPAddress PrefixLengthToSubnetMask(byte prefixLength, AddressFamily family)
{
Debug.Assert((0 <= prefixLength) && (prefixLength <= 126));
Debug.Assert((family == AddressFamily.InterNetwork) || (family == AddressFamily.InterNetworkV6));
byte[] addressBytes;
if (family == AddressFamily.InterNetwork)
{
addressBytes = new byte[4];
}
else
{
Debug.Assert(family == AddressFamily.InterNetworkV6);
addressBytes = new byte[16];
}
Debug.Assert(prefixLength <= (addressBytes.Length * 8));
// Enable bits one at a time from left/high to right/low.
for (int bit = 0; bit < prefixLength; bit++)
{
addressBytes[bit / 8] |= (byte)(0x80 >> (bit % 8));
}
return new IPAddress(addressBytes);
}
}