示例#1
0
        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);
        }
示例#2
0
        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);
        }