Example #1
0
        public void SerializeAndDeserialize()
        {
            Random random = new Random();

            JsonSerializerSettings settings = new JsonSerializerSettings();

            settings.Converters.Add(new IPv6AddressJsonConverter());
            settings.Converters.Add(new DHCPv6ScopePropertyJsonConverter());
            settings.Converters.Add(new DHCPv6ScopePropertiesJsonConverter());

            var input = new DHCPv6ScopeProperties(
                new DHCPv6AddressListScopeProperty(random.NextUInt16(), random.GetIPv6Addresses()),
                new DHCPv6NumericValueScopeProperty(random.NextUInt16(), random.NextUInt32(), NumericScopePropertiesValueTypes.UInt32, DHCPv6ScopePropertyType.UInt32),
                new DHCPv6NumericValueScopeProperty(random.NextUInt16(), random.NextUInt16(), NumericScopePropertiesValueTypes.UInt16, DHCPv6ScopePropertyType.UInt16),
                new DHCPv6NumericValueScopeProperty(random.NextUInt16(), random.NextByte(), NumericScopePropertiesValueTypes.Byte, DHCPv6ScopePropertyType.Byte)
                );

            input.RemoveFromInheritance(random.NextUInt16());
            input.RemoveFromInheritance(random.NextUInt16());
            input.RemoveFromInheritance(random.NextUInt16());

            String serialized = JsonConvert.SerializeObject(input, settings);
            var    actual     = JsonConvert.DeserializeObject <DHCPv6ScopeProperties>(serialized, settings);

            Assert.Equal(input, actual);
        }
Example #2
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            DHCPv6ScopeProperties item = (DHCPv6ScopeProperties)value;

            serializer.Serialize(writer, new EeasySerialibleVersionOfDHCPv6ScopeProperties
            {
                Properties = item.Properties.Where(x => x != null),
                ExcludedFromInheritance = item.GetMarkedFromInheritanceOptionCodes(),
            });
        }
Example #3
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var info = serializer.Deserialize <EeasySerialibleVersionOfDHCPv6ScopeProperties>(reader);

            DHCPv6ScopeProperties result = new DHCPv6ScopeProperties(info.Properties);

            foreach (var item in info.ExcludedFromInheritance ?? Array.Empty <UInt16>())
            {
                result.RemoveFromInheritance(item);
            }

            return(result);
        }
Example #4
0
        public void Contructor()
        {
            Random random = new Random();

            List <DHCPv6ScopeProperty> propertiesToAdd = new List <DHCPv6ScopeProperty>();

            for (UInt16 i = 160; i < 15; i++)
            {
                DHCPv6AddressListScopeProperty property = new DHCPv6AddressListScopeProperty(i, random.GetIPv6Addresses());
                propertiesToAdd.Add(property);
            }

            var properties = new DHCPv6ScopeProperties(propertiesToAdd);

            Assert.NotNull(properties);
            Assert.Equal(propertiesToAdd.Count, properties.Properties.Count());
        }
Example #5
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);
        }
Example #6
0
        protected static DHCPv6ScopeProperties GetScopeProperties(IScopeChangeCommand request)
        {
            List <DHCPv6ScopeProperty> properties = new List <DHCPv6ScopeProperty>();
            List <ushort> optionsToRemove         = new List <ushort>();

            foreach (var item in request.Properties ?? Array.Empty <DHCPv6ScopePropertyRequest>())
            {
                if (item.MarkAsRemovedInInheritance == true)
                {
                    optionsToRemove.Add(item.OptionCode);
                }
                else
                {
                    switch (item)
                    {
                    case DHCPv6AddressListScopePropertyRequest property:
                        properties.Add(new DHCPv6AddressListScopeProperty(item.OptionCode, property.Addresses.Select(x => IPv6Address.FromString(x)).ToList()));
                        break;

                    case DHCPv6NumericScopePropertyRequest property:
                        properties.Add(new DHCPv6NumericValueScopeProperty(item.OptionCode, property.Value, property.NumericType, item.Type));
                        break;

                    default:
                        break;
                    }
                }
            }

            var result = new DHCPv6ScopeProperties(properties);

            foreach (var item in optionsToRemove)
            {
                result.RemoveFromInheritance(item);
            }

            return(result);
        }
Example #7
0
        public void DHCPv6Scope_ScopePropertiesInherientce()
        {
            Random random = new Random();

            Byte onylGrandParentOptionIdentifier   = 47;
            Byte onlyParentOptionIdentifier        = 55;
            Byte onlyChildOptionIdentifier         = 90;
            Byte overridenByParentOptionIdentifier = 100;
            Byte overridenByChildOptionIdentifier  = 110;
            Byte deletedByChildOptionIdentifier    = 140;

            Dictionary <Byte, String> inputs = new Dictionary <byte, String>
            {
                { onylGrandParentOptionIdentifier, random.GetAlphanumericString() },
                { onlyParentOptionIdentifier, random.GetAlphanumericString() },
                { onlyChildOptionIdentifier, random.GetAlphanumericString() },
                { overridenByParentOptionIdentifier, random.GetAlphanumericString() },
                { overridenByChildOptionIdentifier, random.GetAlphanumericString() },
                { deletedByChildOptionIdentifier, random.GetAlphanumericString() },
            };

            DHCPv6ScopeProperties grantParentProperties = new DHCPv6ScopeProperties(
                new DHCPv6TextScopeProperty(onylGrandParentOptionIdentifier, inputs[onylGrandParentOptionIdentifier]),
                new DHCPv6TextScopeProperty(overridenByParentOptionIdentifier, random.GetAlphanumericString()),
                new DHCPv6TextScopeProperty(overridenByChildOptionIdentifier, random.GetAlphanumericString()),
                new DHCPv6TextScopeProperty(deletedByChildOptionIdentifier, random.GetAlphanumericString())
                );

            DHCPv6ScopeProperties parentProperties = new DHCPv6ScopeProperties(
                new DHCPv6TextScopeProperty(onlyParentOptionIdentifier, inputs[onlyParentOptionIdentifier]),
                new DHCPv6TextScopeProperty(overridenByParentOptionIdentifier, inputs[overridenByParentOptionIdentifier]),
                new DHCPv6TextScopeProperty(deletedByChildOptionIdentifier, random.GetAlphanumericString())
                );

            DHCPv6ScopeProperties childProperties = new DHCPv6ScopeProperties(
                new DHCPv6TextScopeProperty(onlyChildOptionIdentifier, inputs[onlyChildOptionIdentifier]),
                new DHCPv6TextScopeProperty(overridenByChildOptionIdentifier, inputs[overridenByChildOptionIdentifier])
                );

            childProperties.RemoveFromInheritance(deletedByChildOptionIdentifier);

            DHCPv6ScopeProperties expectedProperties = new DHCPv6ScopeProperties(
                new DHCPv6TextScopeProperty(onylGrandParentOptionIdentifier, inputs[onylGrandParentOptionIdentifier]),
                new DHCPv6TextScopeProperty(onlyParentOptionIdentifier, inputs[onlyParentOptionIdentifier]),
                new DHCPv6TextScopeProperty(onlyChildOptionIdentifier, inputs[onlyChildOptionIdentifier]),
                new DHCPv6TextScopeProperty(overridenByParentOptionIdentifier, inputs[overridenByParentOptionIdentifier]),
                new DHCPv6TextScopeProperty(overridenByChildOptionIdentifier, inputs[overridenByChildOptionIdentifier])
                );

            Guid grantParentId = Guid.NewGuid();
            Guid parentId      = Guid.NewGuid();
            Guid childId       = Guid.NewGuid();

            List <DomainEvent> events = new List <DomainEvent>
            {
                new DHCPv6ScopeAddedEvent(new DHCPv6ScopeCreateInstruction
                {
                    Id = grantParentId,
                    ScopeProperties = grantParentProperties,
                }),
                new DHCPv6ScopeAddedEvent(new DHCPv6ScopeCreateInstruction
                {
                    Id              = parentId,
                    ParentId        = grantParentId,
                    ScopeProperties = parentProperties,
                }),
                new DHCPv6ScopeAddedEvent(new DHCPv6ScopeCreateInstruction
                {
                    Id              = childId,
                    ParentId        = parentId,
                    ScopeProperties = childProperties,
                }),
            };

            DHCPv6RootScope rootScope = GetRootScope();

            rootScope.Load(events);

            var scope            = rootScope.GetScopeById(childId);
            var actualProperties = scope.GetScopeProperties();

            Assert.Equal(expectedProperties, actualProperties);
        }
Example #8
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);
        }
Example #9
0
        public static DHCPv6Packet AsPrefixReplyWithRapitCommit(DHCPv6Packet requestPacket, DHCPv6ScopeAddressProperties addressProperties, DHCPv6ScopeProperties properties, DHCPv6Lease lease, DUID serverDuid)
        {
            DHCPv6Packet response = AsPrefixAdvertise(requestPacket, addressProperties, properties, lease, serverDuid);

            AddRapitCommitOption(response);

            return(response);
        }
Example #10
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);
        }
Example #11
0
        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;
                }
            }
        }
Example #12
0
 public DHCPv6ScopePropertiesUpdatedEvent(Guid scopeId, DHCPv6ScopeProperties properites) : base(scopeId)
 {
     Properties = properites;
 }