/// The Group Address field is set to zero when sending a General Query,
/// and set to the IP multicast address being queried when sending a Group-Specific Query or Group-and-Source-Specific Query.
/// In a Membership Report of version 1 or 2 or Leave Group message, the group address field holds the IP multicast group address of the group being reported or left.
/// In a Membership Report of version 3 this field is meaningless.
/// When set to one, the S Flag indicates to any receiving multicast routers that they are to suppress the normal timer updates they perform upon hearing a Query.
/// It does not, however, suppress the querier election or the normal "host-side" processing of a Query
/// that a router may be required to perform as a consequence of itself being a group member.
/// If non-zero, the QRV field contains the [Robustness Variable] value used by the querier, i.e., the sender of the Query.
/// If the querier's [Robustness Variable] exceeds 7, the maximum value of the QRV field, the QRV is set to zero.
/// Routers adopt the QRV value from the most recently received Query as their own [Robustness Variable] value,
/// unless that most recently received QRV was zero, in which case the receivers use the default [Robustness Variable] value or a statically configured value.
/// The Querier's Query Interval Code field specifies the [Query Interval] used by the querier.
/// The actual interval, called the Querier's Query Interval (QQI), is represented in units of seconds and is derived from the Querier's Query Interval Code as follows:
/// <list type="bullet">
/// <item>If QQIC < 128, QQI = QQIC</item>
/// <item>
/// If QQIC >= 128, QQIC represents a floating-point value as follows:
/// <pre>
/// 0 1 2 3 4 5 6 7
/// +-+-+-+-+-+-+-+-+
/// |1| exp | mant |
/// +-+-+-+-+-+-+-+-+
/// </pre>
/// QQI = (mant | 0x10) << (exp + 3)
/// </item>
/// </list>
/// Multicast routers that are not the current querier adopt the QQI value from the most recently received Query as their own [Query Interval] value,
/// unless that most recently received QQI was zero, in which case the receiving routers use the default [Query Interval] value.
/// The actual interval, called the Querier's Query Interval (QQI), is represented in units of seconds and is derived from the Querier's Query Interval Code as follows:
/// <list type="bullet">
/// <item>If QQIC < 128, QQI = QQIC</item>
/// <item>
/// If QQIC >= 128, QQIC represents a floating-point value as follows:
/// <pre>
/// 0 1 2 3 4 5 6 7
/// +-+-+-+-+-+-+-+-+
/// |1| exp | mant |
/// +-+-+-+-+-+-+-+-+
/// </pre>
/// QQI = (mant | 0x10) << (exp + 3)
/// </item>
/// </list>
/// </summary>
/// <remarks>
/// Valid only on query of version 3.
/// </remarks>
publicTimeSpanQueriersQueryInterval
{
get
{
intnumSeconds=QueriersQueryIntervalCode<128
?QueriersQueryIntervalCode
:CodeToValue(QueriersQueryIntervalCode);
returnTimeSpan.FromSeconds(numSeconds);
}
}
/// <summary>
/// The Number of Sources (N) field specifies how many source addresses are present in the Query.
/// This number is zero in a General Query or a Group-Specific Query, and non-zero in a Group-and-Source-Specific Query.
/// This number is limited by the MTU of the network over which the Query is transmitted.
/// For example, on an Ethernet with an MTU of 1500 octets, the IP header including the Router Alert option consumes 24 octets,
/// and the IGMP fields up to including the Number of Sources (N) field consume 12 octets, leaving 1464 octets for source addresses,
/// which limits the number of source addresses to 366 (1464/4).
/// The Aux Data Len field contains the length of the Auxiliary Data field in this Group Record, in bytes (after a translation from 32 bit words length).
/// It may contain zero, to indicate the absence of any auxiliary data.
/// </summary>
publicintAuxiliaryDataLength
{
get{return4*this[Offset.AuxiliaryDataLength];}
}
/// <summary>
/// The Number of Sources (N) field specifies how many source addresses are present in this Group Record.
/// The Auxiliary Data field, if present, contains additional information pertaining to this Group Record.
/// The protocol specified in this document, IGMPv3, does not define any auxiliary data.
/// Therefore, implementations of IGMPv3 MUST NOT include any auxiliary data (i.e., MUST set the Aux Data Len field to zero) in any transmitted Group Record,
/// and MUST ignore any auxiliary data present in any received Group Record.
/// The semantics and internal encoding of the Auxiliary Data field are to be defined by any future version or extension of IGMP that uses this field.
/// A "Current-State Record" is sent by a system in response to a Query received on an interface.
/// It reports the current reception state of that interface, with respect to a single multicast address.
/// <para>
/// MODE_IS_INCLUDE - indicates that the interface has a filter mode of INCLUDE for the specified multicast address.
/// The Source Address [i] fields in this Group Record contain the interface's source list for the specified multicast address, if it is non-empty.
/// </para>
/// </summary>
CurrentStateRecordModeIsInclude=1,
/// <summary>
/// A "Current-State Record" is sent by a system in response to a Query received on an interface.
/// It reports the current reception state of that interface, with respect to a single multicast address.
/// <para>
/// MODE_IS_EXCLUDE - indicates that the interface has a filter mode of EXCLUDE for the specified multicast address.
/// The Source Address [i] fields in this Group Record contain the interface's source list for the specified multicast address, if it is non-empty.
/// </para>
/// </summary>
CurrentStateRecordModeIsExclude=2,
/// <summary>
/// A "Filter-Mode-Change Record" is sent by a system whenever a local invocation of IPMulticastListen causes a change of the filter mode
/// (i.e., a change from INCLUDE to EXCLUDE, or from EXCLUDE to INCLUDE),
/// of the interface-level state entry for a particular multicast address.
/// The Record is included in a Report sent from the interface on which the change occurred.
/// <para>
/// CHANGE_TO_INCLUDE_MODE - indicates that the interface has changed to INCLUDE filter mode for the specified multicast address.
/// The Source Address [i] fields in this Group Record contain the interface's new source list for the specified multicast address, if it is non-empty.
/// </para>
/// </summary>
FilterModeChangeToInclude=3,
/// <summary>
/// A "Filter-Mode-Change Record" is sent by a system whenever a local invocation of IPMulticastListen causes a change of the filter mode
/// (i.e., a change from INCLUDE to EXCLUDE, or from EXCLUDE to INCLUDE),
/// of the interface-level state entry for a particular multicast address.
/// The Record is included in a Report sent from the interface on which the change occurred.
/// <para>
/// CHANGE_TO_EXCLUDE_MODE - indicates that the interface has changed to EXCLUDE filter mode for the specified multicast address.
/// The Source Address [i] fields in this Group Record contain the interface's new source list for the specified multicast address, if it is non-empty.
/// </para>
/// </summary>
FilterModeChangeToExclude=4,
/// <summary>
/// A "Source-List-Change Record" is sent by a system whenever a local invocation of IPMulticastListen causes a change of source list
/// that is *not* coincident with a change of filter mode, of the interface-level state entry for a particular multicast address.
/// The Record is included in a Report sent from the interface on which the change occurred.
/// <para>
/// ALLOW_NEW_SOURCES - indicates that the Source Address [i] fields in this Group Record contain a list of the additional sources
/// that the system wishes to hear from, for packets sent to the specified multicast address.
/// If the change was to an INCLUDE source list, these are the addresses that were added to the list; if the change was to an EXCLUDE source list,
/// these are the addresses that were deleted from the list.
/// </para>
/// <para>
/// If a change of source list results in both allowing new sources and blocking old sources,
/// then two Group Records are sent for the same multicast address, one of type ALLOW_NEW_SOURCES and one of type BLOCK_OLD_SOURCES.
/// </para>
/// </summary>
SourceListChangeAllowNewSources=5,
/// <summary>
/// A "Source-List-Change Record" is sent by a system whenever a local invocation of IPMulticastListen causes a change of source list
/// that is *not* coincident with a change of filter mode, of the interface-level state entry for a particular multicast address.
/// The Record is included in a Report sent from the interface on which the change occurred.
/// <para>
/// BLOCK_OLD_SOURCES - indicates that the Source Address [i] fields in this Group Record contain a list of the sources
/// that the system no longer wishes to hear from, for packets sent to the specified multicast address.
/// If the change was to an INCLUDE source list, these are the addresses that were deleted from the list; if the change was to an EXCLUDE source list,
/// these are the addresses that were added to the list.
/// </para>
/// If a change of source list results in both allowing new sources and blocking old sources,
/// then two Group Records are sent for the same multicast address, one of type ALLOW_NEW_SOURCES and one of type BLOCK_OLD_SOURCES.