Exemplo n.º 1
0
        private static IpV6MobilityOption CreateOption(IpV6MobilityOptionType optionType, DataSegment data)
        {
            IpV6MobilityOption prototype;

            if (!_prototypes.TryGetValue(optionType, out prototype))
            {
                return(new IpV6MobilityOptionUnknown(optionType, data));
            }
            return(prototype.CreateInstance(data));
        }
Exemplo n.º 2
0
        private static Tuple <IList <IpV6MobilityOption>, bool> Read(DataSegment data)
        {
            int offset = 0;
            List <IpV6MobilityOption> options = new List <IpV6MobilityOption>();
            bool isValid = true;

            while (offset < data.Length)
            {
                IpV6MobilityOptionType optionType = (IpV6MobilityOptionType)data[offset++];
                if (optionType == IpV6MobilityOptionType.Pad1)
                {
                    options.Add(new IpV6MobilityOptionPad1());
                    continue;
                }

                if (offset >= data.Length)
                {
                    isValid = false;
                    break;
                }

                byte optionDataLength = data[offset++];
                if (offset + optionDataLength > data.Length)
                {
                    isValid = false;
                    break;
                }

                IpV6MobilityOption option = CreateOption(optionType, data.Subsegment(ref offset, optionDataLength));
                if (option == null)
                {
                    isValid = false;
                    break;
                }

                if (!option.IsValid)
                {
                    isValid = false;
                }

                options.Add(option);
            }

            return(new Tuple <IList <IpV6MobilityOption>, bool>(options, isValid));
        }
 internal IpV6MobilityOptionNetworkPrefix(IpV6MobilityOptionType type, byte prefixLength, IpV6Address networkPrefix)
     : base(type)
 {
     PrefixLength = prefixLength;
     NetworkPrefix = networkPrefix;
 }
 internal IpV6MobilityOptionIpV4Address(IpV6MobilityOptionType type, IpV4Address address) 
     : base(type)
 {
     Address = address;
 }
Exemplo n.º 5
0
 protected IpV6MobilityOptionComplex(IpV6MobilityOptionType type)
     : base(type)
 {
 }
Exemplo n.º 6
0
 internal IpV6MobilityOptionULong(IpV6MobilityOptionType type, ulong value)
     : base(type)
 {
     Value = value;
 }
 internal IpV6MobilityOptionNetworkPrefix(IpV6MobilityOptionType type, byte prefixLength, IpV6Address networkPrefix)
     : base(type)
 {
     PrefixLength  = prefixLength;
     NetworkPrefix = networkPrefix;
 }
Exemplo n.º 8
0
 internal IpV6MobilityOptionIpV4Address(IpV6MobilityOptionType type, IpV4Address address)
     : base(type)
 {
     Address = address;
 }
Exemplo n.º 9
0
 /// <summary>
 /// Creates an instance from type and data.
 /// </summary>
 /// <param name="type">The type of the option.</param>
 /// <param name="data">The data of the option.</param>
 public IpV6MobilityOptionUnknown(IpV6MobilityOptionType type, DataSegment data)
     : base(type, data)
 {
 }
Exemplo n.º 10
0
 internal IpV6MobilityOption(IpV6MobilityOptionType type)
 {
     OptionType = type;
 }
 internal IpV6MobilityOptionSingleDataSegmentField(IpV6MobilityOptionType type, DataSegment value)
     : base(type)
 {
     Value = value;
 }
 internal IpV6MobilityOptionComplex(IpV6MobilityOptionType type)
     : base(type)
 {
 }
Exemplo n.º 13
0
 internal IpV6MobilityOptionComplex(IpV6MobilityOptionType type)
     : base(type)
 {
 }
Exemplo n.º 14
0
 protected IpV6MobilityOption(IpV6MobilityOptionType type)
 {
     OptionType = type;
 }
Exemplo n.º 15
0
 /// <summary>
 /// Creates an instance from type and data.
 /// </summary>
 /// <param name="type">The type of the option.</param>
 /// <param name="data">The data of the option.</param>
 public IpV6MobilityOptionUnknown(IpV6MobilityOptionType type, DataSegment data)
     : base(type, data)
 {
 }
Exemplo n.º 16
0
 protected IpV6MobilityOption(IpV6MobilityOptionType type)
 {
     OptionType = type;
 }
Exemplo n.º 17
0
 internal IpV6MobilityOptionReservedByteValueByte(IpV6MobilityOptionType type, byte value)
     : base(type)
 {
     Value = value;
 }
 internal IpV6MobilityOptionSingleDataSegmentField(IpV6MobilityOptionType type, DataSegment value)
     : base(type)
 {
     Value = value;
 }
Exemplo n.º 19
0
 internal IpV6MobilityOptionULong(IpV6MobilityOptionType type, ulong value)
     : base(type)
 {
     Value = value;
 }
 internal IpV6MobilityOptionReservedByteValueByte(IpV6MobilityOptionType type, byte value)
     : base(type)
 {
     Value = value;
 }
 public IpV6MobilityOptionTypeRegistrationAttribute(IpV6MobilityOptionType optionType)
 {
     OptionType = optionType;
 }
Exemplo n.º 22
0
        public static IpV6MobilityOption NextIpV6MobilityOption(this Random random)
        {
            IpV6MobilityOptionType optionType = random.NextEnum <IpV6MobilityOptionType>();

            switch (optionType)
            {
            case IpV6MobilityOptionType.Pad1:
                return(new IpV6MobilityOptionPad1());

            case IpV6MobilityOptionType.PadN:
                return(new IpV6MobilityOptionPadN(random.NextInt(0, 10)));

            case IpV6MobilityOptionType.BindingRefreshAdvice:
                return(new IpV6MobilityOptionBindingRefreshAdvice(random.NextUShort()));

            case IpV6MobilityOptionType.AlternateCareOfAddress:
                return(new IpV6MobilityOptionAlternateCareOfAddress(random.NextIpV6Address()));

            case IpV6MobilityOptionType.NonceIndexes:
                return(new IpV6MobilityOptionNonceIndexes(random.NextUShort(), random.NextUShort()));

            case IpV6MobilityOptionType.BindingAuthorizationData:
                return(new IpV6MobilityOptionBindingAuthorizationData(random.NextDataSegment(random.NextInt(0, 100))));

            case IpV6MobilityOptionType.MobileNetworkPrefix:
                return(new IpV6MobilityOptionMobileNetworkPrefix(random.NextByte(), random.NextIpV6Address()));

            case IpV6MobilityOptionType.LinkLayerAddress:
                return(new IpV6MobilityOptionLinkLayerAddress(random.NextEnum <IpV6MobilityLinkLayerAddressCode>(),
                                                              random.NextDataSegment(random.NextInt(0, 100))));

            case IpV6MobilityOptionType.MobileNodeIdentifier:
                IpV6MobileNodeIdentifierSubtype mobileNodeIdentifierSubtype = random.NextEnum <IpV6MobileNodeIdentifierSubtype>();
                return(new IpV6MobilityOptionMobileNodeIdentifier(
                           mobileNodeIdentifierSubtype,
                           random.NextDataSegment(random.NextInt(mobileNodeIdentifierSubtype == IpV6MobileNodeIdentifierSubtype.NetworkAccessIdentifier ? 1 : 0,
                                                                 100))));

            case IpV6MobilityOptionType.Authentication:
                return(new IpV6MobilityOptionAuthentication(random.NextEnum <IpV6AuthenticationSubtype>(), random.NextUInt(),
                                                            random.NextDataSegment(random.NextInt(0, 100))));

            case IpV6MobilityOptionType.ReplayProtection:
                return(new IpV6MobilityOptionReplayProtection(random.NextULong()));

            case IpV6MobilityOptionType.CryptographicallyGeneratedAddressParametersRequest:
                return(new IpV6MobilityOptionCryptographicallyGeneratedAddressParametersRequest());

            case IpV6MobilityOptionType.CryptographicallyGeneratedAddressParameters:
                return(new IpV6MobilityOptionCryptographicallyGeneratedAddressParameters(random.NextDataSegment(random.NextInt(0, 100))));

            case IpV6MobilityOptionType.Signature:
                return(new IpV6MobilityOptionSignature(random.NextDataSegment(random.NextInt(0, 100))));

            case IpV6MobilityOptionType.PermanentHomeKeygenToken:
                return(new IpV6MobilityOptionPermanentHomeKeygenToken(random.NextDataSegment(random.NextInt(0, 100))));

            case IpV6MobilityOptionType.CareOfTestInit:
                return(new IpV6MobilityOptionCareOfTestInit());

            case IpV6MobilityOptionType.CareOfTest:
                return(new IpV6MobilityOptionCareOfTest(random.NextULong()));

            case IpV6MobilityOptionType.DnsUpdate:
                return(new IpV6MobilityOptionDnsUpdate(random.NextEnum <IpV6DnsUpdateStatus>(), random.NextBool(),
                                                       random.NextDataSegment(random.NextInt(0, 100))));

            case IpV6MobilityOptionType.Experimental:
                return(new IpV6MobilityOptionExperimental(random.NextDataSegment(random.NextInt(0, 100))));

            case IpV6MobilityOptionType.VendorSpecific:
                return(new IpV6MobilityOptionVendorSpecific(random.NextUInt(), random.NextByte(), random.NextDataSegment(random.NextInt(0, 100))));

            case IpV6MobilityOptionType.ServiceSelection:
                return(new IpV6MobilityOptionServiceSelection(random.NextDataSegment(random.NextInt(1, 100))));

            case IpV6MobilityOptionType.BindingAuthorizationDataForFmIpV6:
                return(new IpV6MobilityOptionBindingAuthorizationDataForFmIpV6(random.NextUInt(), random.NextDataSegment(random.NextInt(0, 100))));

            case IpV6MobilityOptionType.HomeNetworkPrefix:
                return(new IpV6MobilityOptionHomeNetworkPrefix(random.NextByte(), random.NextIpV6Address()));

            case IpV6MobilityOptionType.HandoffIndicator:
                return(new IpV6MobilityOptionHandoffIndicator(random.NextEnum <IpV6HandoffIndicator>()));

            case IpV6MobilityOptionType.AccessTechnologyType:
                return(new IpV6MobilityOptionAccessTechnologyType(random.NextEnum <IpV6AccessTechnologyType>()));

            case IpV6MobilityOptionType.MobileNodeLinkLayerIdentifier:
                return(new IpV6MobilityOptionMobileNodeLinkLayerIdentifier(random.NextDataSegment(random.NextInt(0, 100))));

            case IpV6MobilityOptionType.LinkLocalAddress:
                return(new IpV6MobilityOptionLinkLocalAddress(random.NextIpV6Address()));

            case IpV6MobilityOptionType.Timestamp:
                return(new IpV6MobilityOptionTimestamp(random.NextULong() % (500000000000L << 16)));

            case IpV6MobilityOptionType.RestartCounter:
                return(new IpV6MobilityOptionRestartCounter(random.NextUInt()));

            case IpV6MobilityOptionType.IpV4HomeAddress:
                return(new IpV6MobilityOptionIpV4HomeAddress(random.NextByte(IpV6MobilityOptionIpV4HomeAddress.MaxPrefixLength + 1), random.NextBool(),
                                                             random.NextIpV4Address()));

            case IpV6MobilityOptionType.IpV4AddressAcknowledgement:
                return(new IpV6MobilityOptionIpV4AddressAcknowledgement(random.NextEnum <IpV6AddressAcknowledgementStatus>(),
                                                                        random.NextByte(IpV6MobilityOptionIpV4AddressAcknowledgement.MaxPrefixLength + 1),
                                                                        random.NextIpV4Address()));

            case IpV6MobilityOptionType.NatDetection:
                return(new IpV6MobilityOptionNatDetection(random.NextBool(), random.NextUInt()));

            case IpV6MobilityOptionType.IpV4CareOfAddress:
                return(new IpV6MobilityOptionIpV4CareOfAddress(random.NextIpV4Address()));

            case IpV6MobilityOptionType.GreKey:
                return(new IpV6MobilityOptionGreKey(random.NextUInt()));

            case IpV6MobilityOptionType.IpV6AddressPrefix:
                return(new IpV6MobilityOptionIpV6AddressPrefix(random.NextEnum <IpV6MobilityIpV6AddressPrefixCode>(),
                                                               random.NextByte(IpV6MobilityOptionIpV6AddressPrefix.MaxPrefixLength + 1),
                                                               random.NextIpV6Address()));

            case IpV6MobilityOptionType.BindingIdentifier:
                ushort bindingId = random.NextUShort();
                IpV6BindingAcknowledgementStatus status = random.NextEnum <IpV6BindingAcknowledgementStatus>();
                bool simultaneousHomeAndForeignBinding  = random.NextBool();
                byte priority = random.NextByte(IpV6MobilityOptionBindingIdentifier.MaxPriority + 1);
                if (random.NextBool(3))
                {
                    return(new IpV6MobilityOptionBindingIdentifier(bindingId, status, simultaneousHomeAndForeignBinding, priority));
                }
                if (random.NextBool())
                {
                    return(new IpV6MobilityOptionBindingIdentifier(bindingId, status, simultaneousHomeAndForeignBinding, priority, random.NextIpV4Address()));
                }
                return(new IpV6MobilityOptionBindingIdentifier(bindingId, status, simultaneousHomeAndForeignBinding, priority, random.NextIpV6Address()));

            case IpV6MobilityOptionType.IpV4HomeAddressRequest:
                return(new IpV6MobilityOptionIpV4HomeAddressRequest(random.NextByte(IpV6MobilityOptionIpV4HomeAddressRequest.MaxPrefixLength + 1),
                                                                    random.NextIpV4Address()));

            case IpV6MobilityOptionType.IpV4HomeAddressReply:
                return(new IpV6MobilityOptionIpV4HomeAddressReply(random.NextEnum <IpV6IpV4HomeAddressReplyStatus>(),
                                                                  random.NextByte(IpV6MobilityOptionIpV4HomeAddressReply.MaxPrefixLength + 1),
                                                                  random.NextIpV4Address()));

            case IpV6MobilityOptionType.IpV4DefaultRouterAddress:
                return(new IpV6MobilityOptionIpV4DefaultRouterAddress(random.NextIpV4Address()));

            case IpV6MobilityOptionType.IpV4DhcpSupportMode:
                return(new IpV6MobilityOptionIpV4DhcpSupportMode(random.NextBool()));

            case IpV6MobilityOptionType.ContextRequest:
                return
                    (new IpV6MobilityOptionContextRequest(
                         ((Func <IpV6MobilityOptionContextRequestEntry>)(() => new IpV6MobilityOptionContextRequestEntry(
                                                                             random.NextByte(), random.NextDataSegment(random.NextInt(0, 25))))).
                         GenerateArray(random.NextInt(0, 10))));

            case IpV6MobilityOptionType.LocalMobilityAnchorAddress:
                if (random.NextBool())
                {
                    return(new IpV6MobilityOptionLocalMobilityAnchorAddress(random.NextIpV4Address()));
                }
                return(new IpV6MobilityOptionLocalMobilityAnchorAddress(random.NextIpV6Address()));

            case IpV6MobilityOptionType.MobileNodeLinkLocalAddressInterfaceIdentifier:
                return(new IpV6MobilityOptionMobileNodeLinkLocalAddressInterfaceIdentifier(random.NextULong()));

            case IpV6MobilityOptionType.TransientBinding:
                return(new IpV6MobilityOptionTransientBinding(random.NextBool(), random.NextByte()));

            case IpV6MobilityOptionType.FlowSummary:
                return(new IpV6MobilityOptionFlowSummary(((Func <ushort>)(random.NextUShort)).GenerateArray(random.NextInt(1, 10))));

            case IpV6MobilityOptionType.FlowIdentification:
                return(new IpV6MobilityOptionFlowIdentification(random.NextUShort(), random.NextUShort(), random.NextEnum <IpV6FlowIdentificationStatus>(),
                                                                random.NextIpV6FlowIdentificationSubOptions()));

            case IpV6MobilityOptionType.RedirectCapability:
                return(new IpV6MobilityOptionRedirectCapability());

            case IpV6MobilityOptionType.Redirect:
                if (random.NextBool())
                {
                    return(new IpV6MobilityOptionRedirect(random.NextIpV4Address()));
                }
                return(new IpV6MobilityOptionRedirect(random.NextIpV6Address()));

            case IpV6MobilityOptionType.LoadInformation:
                return(new IpV6MobilityOptionLoadInformation(random.NextUShort(), random.NextUInt(), random.NextUInt(), random.NextUInt(), random.NextUInt()));

            case IpV6MobilityOptionType.AlternateIpV4CareOfAddress:
                return(new IpV6MobilityOptionAlternateIpV4CareOfAddress(random.NextIpV4Address()));

            case IpV6MobilityOptionType.MobileNodeGroupIdentifier:
                return(new IpV6MobilityOptionMobileNodeGroupIdentifier(random.NextEnum <IpV6MobileNodeGroupIdentifierSubtype>(), random.NextUInt()));

            case IpV6MobilityOptionType.MobileAccessGatewayIpV6Address:
                return(new IpV6MobilityOptionMobileAccessGatewayIpV6Address(random.NextIpV6Address()));

            case IpV6MobilityOptionType.AccessNetworkIdentifier:
                return(new IpV6MobilityOptionAccessNetworkIdentifier(random.NextIpV6AccessNetworkIdentifierSubOptions()));

            default:
                throw new InvalidOperationException(string.Format("Invalid optionType value {0}", optionType));
            }
        }
Exemplo n.º 23
0
 protected IpV6MobilityOptionComplex(IpV6MobilityOptionType type)
     : base(type)
 {
 }
 public IpV6MobilityOptionTypeRegistrationAttribute(IpV6MobilityOptionType optionType)
 {
     OptionType = optionType;
 }
Exemplo n.º 25
0
 internal IpV6MobilityOptionEmpty(IpV6MobilityOptionType type)
     : base(type)
 {
 }
 internal IpV6MobilityOptionEmpty(IpV6MobilityOptionType type)
     : base(type)
 {
 }