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); }
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(), }); }
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); }
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()); }
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); }
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); }
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); }
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); }
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); }
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); }
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; } } }
public DHCPv6ScopePropertiesUpdatedEvent(Guid scopeId, DHCPv6ScopeProperties properites) : base(scopeId) { Properties = properites; }