public static DhcpServerHardwareAddress FromNative(DhcpServerHardwareType type, IntPtr pointer, int length)
        {
            if (pointer == IntPtr.Zero)
            {
                throw new ArgumentNullException(nameof(pointer));
            }
            if (length > MaximumLength)
            {
                throw new ArgumentOutOfRangeException(nameof(length));
            }

            var hwAddr1 = 0UL;
            var hwAddr2 = 0UL;

            if (length == 0)
            {
                return(new DhcpServerHardwareAddress(type, (byte)length, hwAddr1, hwAddr2));
            }

            hwAddr1 = (ulong)BitHelper.ReadIntVar(pointer, 0, length > 7 ? 8 : length);

            if (length > 8)
            {
                hwAddr2 = (ulong)BitHelper.ReadIntVar(pointer, 8, length - 8);
            }

            return(new DhcpServerHardwareAddress(type, (byte)length, hwAddr1, hwAddr2));
        }
        internal DhcpServerHardwareAddress(DhcpServerHardwareType type, byte length, ulong addr1, ulong addr2)
        {
            if (length > MaximumLength)
            {
                throw new ArgumentOutOfRangeException(nameof(length), $"Exceeds maximum length {MaximumLength}");
            }

            hwAddrType = type;
            hwAddrLen  = length;
            hwAddr1    = addr1;
            hwAddr2    = addr2;
        }
        public static DhcpServerHardwareAddress FromNative(DhcpServerHardwareType type, byte[] hardwareAddress)
        {
            if (hardwareAddress.Length > MaximumLength)
            {
                throw new ArgumentOutOfRangeException(nameof(hardwareAddress));
            }

            return(new DhcpServerHardwareAddress(
                       type,
                       (byte)hardwareAddress.Length,
                       Marshal(hardwareAddress, 0),
                       hardwareAddress.Length > 8 ? Marshal(hardwareAddress, 8) : 0UL));
        }
        public static DhcpServerHardwareAddress FromNative(DhcpServerHardwareType type, byte[] buffer, int hardwareAddressOffset, int hardwareAddressLength)
        {
            if (hardwareAddressLength > MaximumLength)
            {
                throw new ArgumentOutOfRangeException(nameof(hardwareAddressLength));
            }
            if (buffer == null)
            {
                throw new ArgumentNullException(nameof(buffer));
            }
            if (buffer.Length < hardwareAddressOffset + hardwareAddressLength)
            {
                throw new ArgumentOutOfRangeException(nameof(hardwareAddressOffset));
            }

            return(new DhcpServerHardwareAddress(
                       type,
                       (byte)hardwareAddressLength,
                       Marshal(buffer, hardwareAddressOffset, hardwareAddressLength),
                       hardwareAddressLength > 8 ? Marshal(buffer, hardwareAddressOffset + 8, hardwareAddressLength - 8) : 0UL));
        }
 internal static DhcpServerHardwareAddress FromNative(DhcpServerHardwareType type, byte hardwareAddressLength, ulong hardwareAddress1, ulong hardwareAddress2)
 {
     return(new DhcpServerHardwareAddress(type, hardwareAddressLength, hardwareAddress1, hardwareAddress2));
 }