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)); }
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; }
protected IpV6MobilityOptionComplex(IpV6MobilityOptionType type) : base(type) { }
internal IpV6MobilityOptionULong(IpV6MobilityOptionType type, ulong value) : base(type) { Value = value; }
/// <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) { }
internal IpV6MobilityOption(IpV6MobilityOptionType type) { OptionType = type; }
internal IpV6MobilityOptionSingleDataSegmentField(IpV6MobilityOptionType type, DataSegment value) : base(type) { Value = value; }
internal IpV6MobilityOptionComplex(IpV6MobilityOptionType type) : base(type) { }
protected IpV6MobilityOption(IpV6MobilityOptionType type) { OptionType = type; }
internal IpV6MobilityOptionReservedByteValueByte(IpV6MobilityOptionType type, byte value) : base(type) { Value = value; }
public IpV6MobilityOptionTypeRegistrationAttribute(IpV6MobilityOptionType optionType) { OptionType = optionType; }
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)); } }
internal IpV6MobilityOptionEmpty(IpV6MobilityOptionType type) : base(type) { }