Beispiel #1
0
        public static DHCPv6Packet AsReply(DHCPv6Packet requestPacket, DHCPv6ScopeAddressProperties addressProperties, DHCPv6ScopeProperties properties, DHCPv6Lease lease, Boolean adjustTimers, DUID serverDuid, Boolean isRapitCommit)
        {
            DHCPv6Packet innerReceivedPacket = requestPacket.GetInnerPacket();

            GetTimeValues(addressProperties, lease, adjustTimers, out TimeSpan preferredLifetime, out TimeSpan validLifetime, out TimeSpan T1, out TimeSpan T2);

            List <DHCPv6PacketOption> packetOptions = new List <DHCPv6PacketOption>();

            if (innerReceivedPacket.HasOption(DHCPv6PacketOptionTypes.IdentityAssociation_NonTemporary) == true)
            {
                packetOptions.Add(DHCPv6PacketIdentityAssociationNonTemporaryAddressesOption.AsSuccess(
                                      lease.IdentityAssocicationId, T1, T2, lease.Address, preferredLifetime, validLifetime));
            }

            if (innerReceivedPacket.HasOption(DHCPv6PacketOptionTypes.IdentityAssociation_PrefixDelegation) == true)
            {
                if (lease.PrefixDelegation == DHCPv6PrefixDelegation.None)
                {
                    packetOptions.Add(DHCPv6PacketIdentityAssociationPrefixDelegationOption.NotAvailable(
                                          innerReceivedPacket.GetOption <DHCPv6PacketIdentityAssociationPrefixDelegationOption>(DHCPv6PacketOptionTypes.IdentityAssociation_PrefixDelegation)));
                }
                else
                {
                    packetOptions.Add(DHCPv6PacketIdentityAssociationPrefixDelegationOption.AsSuccess(lease.PrefixDelegation.IdentityAssociation, T1, T2, lease.PrefixDelegation.Mask.Identifier, lease.PrefixDelegation.NetworkAddress, preferredLifetime, validLifetime));
                }
            }

            if (isRapitCommit == true)
            {
                packetOptions.Add(new DHCPv6PacketTrueOption(DHCPv6PacketOptionTypes.RapitCommit));
            }

            AddOptions(packetOptions, requestPacket, serverDuid, addressProperties, properties, false);

            DHCPv6Packet innerResponse = new DHCPv6Packet(DHCPv6PacketTypes.REPLY,
                                                          innerReceivedPacket.TransactionId,
                                                          packetOptions);

            DHCPv6Packet response = ConstructPacketWithHeader(requestPacket, innerResponse);

            return(response);
        }
Beispiel #2
0
        public static DHCPv6Packet AsAdvertise(
            DHCPv6Packet requestPacket,
            DHCPv6Lease lease,
            DHCPv6PrefixDelegation prefixDelegation,
            DHCPv6ScopeAddressProperties addressProperties,
            DHCPv6ScopeProperties properties,
            DUID serverDuid
            )
        {
            DHCPv6Packet innerReceivedPacket = requestPacket.GetInnerPacket();

            GetTimeValues(addressProperties, lease, false, out TimeSpan preferredLifetime, out TimeSpan validLifetime, out TimeSpan T1, out TimeSpan T2);

            List <DHCPv6PacketOption> packetOptions = new List <DHCPv6PacketOption>
            {
                DHCPv6PacketIdentityAssociationNonTemporaryAddressesOption.AsSuccess(innerReceivedPacket.GetNonTemporaryIdentityAssocationId().Value, T1, T2, lease.Address, preferredLifetime, validLifetime)
            };

            if (innerReceivedPacket.HasOption(DHCPv6PacketOptionTypes.IdentityAssociation_PrefixDelegation) == true)
            {
                if (prefixDelegation == DHCPv6PrefixDelegation.None)
                {
                    packetOptions.Add(DHCPv6PacketIdentityAssociationPrefixDelegationOption.NotAvailable(
                                          requestPacket.GetOption <DHCPv6PacketIdentityAssociationPrefixDelegationOption>(DHCPv6PacketOptionTypes.IdentityAssociation_PrefixDelegation)));
                }
                else
                {
                    packetOptions.Add(DHCPv6PacketIdentityAssociationPrefixDelegationOption.AsSuccess(prefixDelegation.IdentityAssociation, T1, T2, prefixDelegation.Mask.Identifier, prefixDelegation.NetworkAddress, preferredLifetime, validLifetime));
                }
            }

            AddOptions(packetOptions, requestPacket, serverDuid, addressProperties, properties, false);

            DHCPv6Packet innerResponse = new DHCPv6Packet(DHCPv6PacketTypes.ADVERTISE,
                                                          innerReceivedPacket.TransactionId,
                                                          packetOptions);

            DHCPv6Packet response = ConstructPacketWithHeader(requestPacket, innerResponse);

            return(response);
        }
Beispiel #3
0
        public static DHCPv6Packet AsPrefixAdvertise(DHCPv6Packet requestPacket, DHCPv6ScopeAddressProperties addressProperties, DHCPv6ScopeProperties properties, DHCPv6Lease lease, DUID serverDuid)
        {
            DHCPv6Packet innerReceivedPacket = requestPacket.GetInnerPacket();

            GetTimeValues(addressProperties, lease, false, out TimeSpan preferredLifetime, out TimeSpan validLifetime, out TimeSpan T1, out TimeSpan T2);

            List <DHCPv6PacketOption> packetOptions = new List <DHCPv6PacketOption>
            {
                DHCPv6PacketIdentityAssociationPrefixDelegationOption.AsSuccess(lease.PrefixDelegation.IdentityAssociation, T1, T2, lease.PrefixDelegation.Mask.Identifier, lease.PrefixDelegation.NetworkAddress, preferredLifetime, validLifetime)
            };

            AddOptions(packetOptions, requestPacket, serverDuid, addressProperties, properties, false);

            DHCPv6Packet innerResponse = new DHCPv6Packet(DHCPv6PacketTypes.ADVERTISE,
                                                          innerReceivedPacket.TransactionId,
                                                          packetOptions);

            DHCPv6Packet response = ConstructPacketWithHeader(requestPacket, innerResponse);

            return(response);
        }