public static DHCPv6Packet AsReleaseResponse(DHCPv6Packet requestPacket, UInt32 identityAssocicationId, UInt32 prefixIdentityAssociation, DUID serverDuid) { DHCPv6Packet innerReceivedPacket = requestPacket.GetInnerPacket(); List <DHCPv6PacketOption> packetOptions = new List <DHCPv6PacketOption>(); { foreach (var item in innerReceivedPacket.Options) { switch (item) { case DHCPv6PacketIdentityAssociationNonTemporaryAddressesOption option: packetOptions.Add(DHCPv6PacketIdentityAssociationNonTemporaryAddressesOption.Error(option, option.Id == identityAssocicationId ? DHCPv6StatusCodes.Success : DHCPv6StatusCodes.NoBinding)); break; case DHCPv6PacketIdentityAssociationPrefixDelegationOption option: packetOptions.Add(DHCPv6PacketIdentityAssociationPrefixDelegationOption.Error(option, option.Id == prefixIdentityAssociation ? DHCPv6StatusCodes.Success : DHCPv6StatusCodes.NoBinding)); break; default: break; } } } AddOptions(packetOptions, requestPacket, serverDuid, null, null, true); DHCPv6Packet innerResponse = new DHCPv6Packet(DHCPv6PacketTypes.REPLY, innerReceivedPacket.TransactionId, packetOptions); DHCPv6Packet response = ConstructPacketWithHeader(requestPacket, innerResponse); return(response); }
public static DHCPv6Packet AsError(DHCPv6Packet requestPacket, DHCPv6StatusCodes errorCode, DUID serverDuid) { DHCPv6Packet innerReceivedPacket = requestPacket.GetInnerPacket(); List <DHCPv6PacketOption> packetOptions = new List <DHCPv6PacketOption>(); { foreach (var item in innerReceivedPacket.Options) { switch (item) { case DHCPv6PacketIdentityAssociationPrefixDelegationOption option: if (errorCode == DHCPv6StatusCodes.NoAddrsAvail) { packetOptions.Add(DHCPv6PacketIdentityAssociationPrefixDelegationOption.NotAvailable(option)); } else { packetOptions.Add(DHCPv6PacketIdentityAssociationPrefixDelegationOption.Error(option, errorCode)); } break; case DHCPv6PacketIdentityAssociationNonTemporaryAddressesOption option: packetOptions.Add(DHCPv6PacketIdentityAssociationNonTemporaryAddressesOption.Error(option, errorCode)); break; default: break; } } } AddOptions(packetOptions, requestPacket, serverDuid, null, null, true); DHCPv6Packet innerResponse = new DHCPv6Packet(DHCPv6PacketTypes.REPLY, innerReceivedPacket.TransactionId, packetOptions); DHCPv6Packet response = ConstructPacketWithHeader(requestPacket, innerResponse); return(response); }