internal static IpV6ExtensionHeader CreateInstanceStandard(IpV4Protocol nextHeader, DataSegment extensionHeaderData, out int numBytesRead) { numBytesRead = 0; if (extensionHeaderData.Length < MinimumLength) { return(null); } IpV4Protocol nextNextHeader = (IpV4Protocol)extensionHeaderData[Offset.NextHeader]; int length = (extensionHeaderData[Offset.HeaderExtensionLength] + 1) * 8; if (extensionHeaderData.Length < length) { return(null); } DataSegment data = extensionHeaderData.Subsegment(Offset.Data, length - Offset.Data); numBytesRead = length; // TODO: Implement Shim6. switch (nextHeader) { case IpV4Protocol.IpV6HopByHopOption: // 0 return(IpV6ExtensionHeaderHopByHopOptions.ParseData(nextNextHeader, data)); case IpV4Protocol.IpV6Route: // 43 return(IpV6ExtensionHeaderRouting.ParseData(nextNextHeader, data)); case IpV4Protocol.FragmentHeaderForIpV6: // 44 return(IpV6ExtensionHeaderFragmentData.ParseData(nextNextHeader, data)); case IpV4Protocol.IpV6Opts: // 60 return(IpV6ExtensionHeaderDestinationOptions.ParseData(nextNextHeader, data)); case IpV4Protocol.MobilityHeader: // 135 return(IpV6ExtensionHeaderMobility.ParseData(nextNextHeader, data)); default: throw new InvalidOperationException("Invalid next header value" + nextHeader); } }
private bool EqualsData(IpV6ExtensionHeaderFragmentData other) { return(other != null && FragmentOffset == other.FragmentOffset && MoreFragments == other.MoreFragments && Identification == other.Identification); }
private bool EqualsData(IpV6ExtensionHeaderFragmentData other) { return other != null && FragmentOffset == other.FragmentOffset && MoreFragments == other.MoreFragments && Identification == other.Identification; }