private static void AddOptions(ICollection <DHCPv6PacketOption> packetOptions, DHCPv6Packet requestPacket, DUID serverDuid, DHCPv6ScopeAddressProperties addressProperties, DHCPv6ScopeProperties properties, Boolean onlyMinimialOptions) { DHCPv6Packet innerReceivedPacket = requestPacket.GetInnerPacket(); packetOptions.Add(new DHCPv6PacketIdentifierOption(DHCPv6PacketOptionTypes.ServerIdentifer, serverDuid)); packetOptions.Add(new DHCPv6PacketIdentifierOption(DHCPv6PacketOptionTypes.ClientIdentifier, innerReceivedPacket.GetClientIdentifer())); if (onlyMinimialOptions == true) { return; } if (addressProperties?.SupportDirectUnicast == true) { packetOptions.Add(new DHCPv6PacketIPAddressOption(DHCPv6PacketOptionTypes.ServerUnicast, requestPacket.Header.ListenerAddress)); } foreach (var item in properties?.Properties) { switch (item) { case DHCPv6AddressListScopeProperty property: packetOptions.Add(new DHCPv6PacketIPAddressListOption(property.OptionIdentifier, property.Addresses)); break; case DHCPv6NumericValueScopeProperty property: switch (property.NumericType) { case NumericScopePropertiesValueTypes.Byte: packetOptions.Add(new DHCPv6PacketByteOption(property.OptionIdentifier, (Byte)property.Value)); break; case NumericScopePropertiesValueTypes.UInt16: packetOptions.Add(new DHCPv6PacketUInt16Option(property.OptionIdentifier, (UInt16)property.Value)); break; case NumericScopePropertiesValueTypes.UInt32: packetOptions.Add(new DHCPv6PacketUInt32Option(property.OptionIdentifier, (UInt32)property.Value)); break; default: break; } break; default: break; } } }
private Boolean ShouldHaveClientAndServerIdentifier(DUID clientIdentifier, DUID serverIdentiifer) => clientIdentifier != DUID.Empty && serverIdentiifer != DUID.Empty;
internal DHCPv6Lease GetLeaseByClientDuid(DUID clientIdentifier) => GetLeaseByExpression(x => x.ClientDUID == clientIdentifier);
public static String ToFriendlyString(this DUID input) => input switch {
internal DHCPv6Lease GetLeaseAssociationIdAndDuid(UInt32 associationId, DUID clientId) => GetLeaseByExpression(x => x.IdentityAssocicationId == associationId && x.ClientDUID == clientId);