示例#1
0
 public DHCPv6Packet(IPv6HeaderInformation header, UInt32 transactionId, DHCPv6PacketTypes packetType, IEnumerable <DHCPv6PacketOption> options)
 {
     Header        = header;
     TransactionId = transactionId;
     PacketType    = packetType;
     _options      = new List <DHCPv6PacketOption>(options);
 }
示例#2
0
        public async Task GetErrorCodesPerDHCPV6RequestType()
        {
            Random          random    = new Random();
            DHCPv6RootScope rootScope = GetRootScope();

            var               response   = new Dictionary <Int32, Int32>();
            DateTime          start      = DateTime.UtcNow.AddHours(-random.Next(5, 10));
            DateTime          end        = DateTime.UtcNow.AddHours(-random.Next(1, 2));
            DHCPv6PacketTypes packetType = random.GetEnumValue <DHCPv6PacketTypes>();

            Mock <IDHCPv6ReadStore> readStoreMock = new Mock <IDHCPv6ReadStore>(MockBehavior.Strict);

            readStoreMock.Setup(x => x.GetErrorCodesPerDHCPV6RequestType(start, end, packetType)).ReturnsAsync(response).Verifiable();

            var controller   = new DHCPv6StatisticsController(rootScope, readStoreMock.Object);
            var actionResult = await controller.GetErrorCodesPerDHCPV6RequestType(new DHCPv6PacketTypeBasedTimeSeriesFilterRequest
            {
                Start      = start,
                End        = end,
                PacketType = packetType,
            });

            var result = actionResult.EnsureOkObjectResult <IDictionary <Int32, Int32> >(true);

            Assert.NotNull(result);
            Assert.Equal(response, result);

            readStoreMock.Verify();
        }
示例#3
0
 private void CheckPacket(DHCPv6Packet packet, DHCPv6PacketTypes expectedType)
 {
     if (packet == null || packet.IsValid == false || packet.GetInnerPacket().PacketType != expectedType)
     {
         _logger.LogError("unexpected packet type found");
         throw new ScopeException(DHCPv4ScopeExceptionReasons.InvalidPacket);
     }
 }
示例#4
0
 internal DHCPv6RelayPacket(
     DHCPv6PacketTypes type,
     Byte hopCount,
     IPv6Address linkAddress, IPv6Address peerAddress,
     IEnumerable <DHCPv6PacketOption> options,
     DHCPv6Packet innerPacket) : base(type, options)
 {
     HopCount    = hopCount;
     LinkAddress = linkAddress;
     PeerAddress = peerAddress;
     InnerPacket = innerPacket;
 }
示例#5
0
                private DHCPv6PacketHandledEntry(DHCPv6PacketHandledEvent handledEvent, DHCPv6PacketTypes type) : this()
                {
                    Timestamp   = handledEvent.Timestamp;
                    RequestType = type;
                    Request     = new DHCPv6PacketInformation(handledEvent.Request);
                    ResultCode  = handledEvent.ErrorCode;
                    ScopeId     = handledEvent.ScopeId;

                    if (handledEvent.Response != null)
                    {
                        ResponseType = handledEvent.Response.GetInnerPacket().PacketType;
                        Response     = new DHCPv6PacketInformation(handledEvent.Response);
                    }
                }
示例#6
0
        internal static DHCPv6RelayPacket FromByteArray(byte[] rawData, int offset)
        {
            DHCPv6PacketTypes type = (DHCPv6PacketTypes)rawData[offset];

            offset += 1;

            Byte hopCount = rawData[offset];

            offset += 1;
            IPv6Address linkAddress = IPv6Address.FromByteArray(rawData, offset);

            offset += 16;
            IPv6Address peerAddress = IPv6Address.FromByteArray(rawData, offset);

            offset += 16;

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

            Byte[] innerPacketOptionValue = null;

            Int32 byteIndex = offset;

            while (byteIndex < rawData.Length)
            {
                UInt16 optionCode = ByteHelper.ConvertToUInt16FromByte(rawData, byteIndex);
                UInt16 length     = ByteHelper.ConvertToUInt16FromByte(rawData, byteIndex + 2);
                Byte[] optionData = ByteHelper.CopyData(rawData, byteIndex, length + 4);

                if (optionCode == (Byte)DHCPv6PacketOptionTypes.RelayMessage)
                {
                    innerPacketOptionValue = ByteHelper.CopyData(optionData, 4);
                }
                else
                {
                    DHCPv6PacketOption suboption = DHCPv6PacketOptionFactory.GetOption(optionCode, optionData);
                    options.Add(suboption);
                }

                byteIndex += 4 + length;
            }

            return(new DHCPv6RelayPacket(
                       type,
                       hopCount,
                       linkAddress, peerAddress,
                       options,
                       DHCPv6Packet.FromByteArray(innerPacketOptionValue)));
        }
示例#7
0
        protected static DHCPv6Packet FromByteArray(Byte[] rawData)
        {
            DHCPv6PacketTypes type = (DHCPv6PacketTypes)rawData[0];

            DHCPv6Packet result;

            if (type == DHCPv6PacketTypes.RELAY_REPL || type == DHCPv6PacketTypes.RELAY_FORW)
            {
                result = DHCPv6RelayPacket.FromByteArray(rawData, 0);
            }
            else
            {
                UInt32 transactionId = (UInt32)((rawData[1] << 16) | (rawData[2] << 8) | rawData[3]);

                result = new DHCPv6Packet(
                    type, transactionId,
                    DHCPv6PacketOptionFactory.GetOptions(rawData, 4));
            }

            return(result);
        }
示例#8
0
        protected static void CheckPrefixPacket(
            DHCPv6Packet result, DHCPv6PacketTypes type, DHCPv6PrefixDelegation prefixDelegation)
        {
            Assert.NotNull(result);
            Assert.NotEqual(DHCPv6Packet.Empty, result);
            Assert.True(result.IsValid);

            Assert.Equal(type, result.PacketType);

            var iaOption = result.GetPrefixDelegationIdentiyAssocation(prefixDelegation.IdentityAssociation);

            Assert.NotNull(iaOption);

            var uncastedSuboption = iaOption.Suboptions.First();

            Assert.NotNull(uncastedSuboption);
            Assert.IsAssignableFrom <DHCPv6PacketIdentityAssociationPrefixDelegationSuboption>(uncastedSuboption);

            var addressSubOption = (DHCPv6PacketIdentityAssociationPrefixDelegationSuboption)uncastedSuboption;

            Assert.Equal(prefixDelegation.Mask.Identifier, addressSubOption.PrefixLength);
            Assert.Equal(prefixDelegation.NetworkAddress, addressSubOption.Address);

            Assert.NotEmpty(addressSubOption.Suboptions);
            Assert.Single(addressSubOption.Suboptions);

            var uncastedSubSuboption = addressSubOption.Suboptions.First();

            Assert.NotNull(uncastedSubSuboption);
            Assert.IsAssignableFrom <DHCPv6PacketStatusCodeSuboption>(uncastedSubSuboption);

            var statusSubOption = (DHCPv6PacketStatusCodeSuboption)uncastedSubSuboption;

            Assert.Equal((UInt16)DHCPv6StatusCodes.Success, statusSubOption.StatusCode);
            Assert.False(String.IsNullOrEmpty(statusSubOption.Message));
        }
示例#9
0
 public DHCPv6PacketReconfigureOption(DHCPv6PacketTypes type) : base(DHCPv6PacketOptionTypes.Reconfigure, (Byte)type)
 {
     MessageType = type;
 }
示例#10
0
 private DHCPv6Packet(DHCPv6PacketTypes type, UInt32 transactionId, IEnumerable <DHCPv6PacketOption> options)
 {
     PacketType    = type;
     TransactionId = transactionId;
     _options      = new List <DHCPv6PacketOption>(options);
 }
示例#11
0
 protected DHCPv6Packet(DHCPv6PacketTypes type, IEnumerable <DHCPv6PacketOption> options)
 {
     PacketType = type;
     _options   = new List <DHCPv6PacketOption>(options ?? Array.Empty <DHCPv6PacketOption>());
 }
示例#12
0
 public static DHCPv6Packet AsInner(UInt32 transactionId, DHCPv6PacketTypes packetType, IEnumerable <DHCPv6PacketOption> options) =>
 new DHCPv6Packet(null, transactionId, packetType, options);
示例#13
0
 public static DHCPv6Packet AsOuter(IPv6HeaderInformation header, UInt32 transactionId, DHCPv6PacketTypes packetType, IEnumerable <DHCPv6PacketOption> options) =>
 new DHCPv6Packet(header, transactionId, packetType, options);
示例#14
0
        protected static void CheckPacket(DHCPv6Packet request,
                                          IPv6Address expectedAdress, UInt32 iaId, DHCPv6Packet response, DHCPv6PacketTypes type, DHCPv6PrefixDelegation prefixDelegation)
        {
            Assert.NotNull(response);
            Assert.NotEqual(DHCPv6Packet.Empty, response);
            Assert.True(response.IsValid);

            Assert.Equal(type, response.GetInnerPacket().PacketType);

            CheckIfPacketIsCorrectReply(request, response);

            if (iaId != 0)
            {
                var iaOption = response.GetInnerPacket().GetNonTemporaryIdentiyAssocation(iaId);
                Assert.NotNull(iaOption);

                var uncastedSuboption = iaOption.Suboptions.First();
                Assert.NotNull(uncastedSuboption);
                Assert.IsAssignableFrom <DHCPv6PacketIdentityAssociationAddressSuboption>(uncastedSuboption);

                var addressSubOption = (DHCPv6PacketIdentityAssociationAddressSuboption)uncastedSuboption;

                Assert.Equal(expectedAdress, addressSubOption.Address);

                Assert.NotEmpty(addressSubOption.Suboptions);
                Assert.Single(addressSubOption.Suboptions);

                var uncastedSubSuboption = addressSubOption.Suboptions.First();
                Assert.NotNull(uncastedSubSuboption);
                Assert.IsAssignableFrom <DHCPv6PacketStatusCodeSuboption>(uncastedSubSuboption);

                var statusSubOption = (DHCPv6PacketStatusCodeSuboption)uncastedSubSuboption;
                Assert.Equal((UInt16)DHCPv6StatusCodes.Success, statusSubOption.StatusCode);
                Assert.False(String.IsNullOrEmpty(statusSubOption.Message));
            }
            if (prefixDelegation != DHCPv6PrefixDelegation.None)
            {
                var iaOption = response.GetInnerPacket().GetPrefixDelegationIdentiyAssocation(prefixDelegation.IdentityAssociation);
                Assert.NotNull(iaOption);

                Assert.Equal(prefixDelegation.IdentityAssociation, iaOption.Id);

                Assert.NotEmpty(iaOption.Suboptions);
                Assert.Single(iaOption.Suboptions);

                var uncastedSuboption = iaOption.Suboptions.First();
                Assert.NotNull(uncastedSuboption);
                Assert.IsAssignableFrom <DHCPv6PacketIdentityAssociationPrefixDelegationSuboption>(uncastedSuboption);

                var addressSubOption = (DHCPv6PacketIdentityAssociationPrefixDelegationSuboption)uncastedSuboption;

                Assert.Equal(prefixDelegation.Mask.Identifier, addressSubOption.PrefixLength);

                Assert.NotEmpty(addressSubOption.Suboptions);
                Assert.Single(addressSubOption.Suboptions);

                var uncastedSubSuboption = addressSubOption.Suboptions.First();
                Assert.NotNull(uncastedSubSuboption);
                Assert.IsAssignableFrom <DHCPv6PacketStatusCodeSuboption>(uncastedSubSuboption);

                var statusSubOption = (DHCPv6PacketStatusCodeSuboption)uncastedSubSuboption;
                Assert.Equal((UInt16)DHCPv6StatusCodes.Success, statusSubOption.StatusCode);
                Assert.False(String.IsNullOrEmpty(statusSubOption.Message));
            }
        }
示例#15
0
 public async Task <IDictionary <Int32, Int32> > GetErrorCodesPerDHCPV6RequestType(DateTime?start, DateTime?end, DHCPv6PacketTypes packetType) =>
 await GetSimpleStatisticsData <Int32, Int32>(AppendTimeRangeToUrl($"/api/Statistics/ErrorCodesPerDHCPV6RequestType?PacketType={packetType}", start, end));