private static void CompareIgmpGroupRecord(XElement groupRecord, IgmpGroupRecordDatagram groupRecordDatagram) { int sourceAddressIndex = 0; foreach (var field in groupRecord.Fields()) { switch (field.Name()) { case "igmp.record_type": field.AssertShowDecimal((byte)groupRecordDatagram.RecordType); break; case "igmp.aux_data_len": field.AssertShowDecimal(groupRecordDatagram.AuxiliaryDataLength / 4); break; case "igmp.num_src": field.AssertShowDecimal(groupRecordDatagram.NumberOfSources); break; case "igmp.maddr": field.AssertShow(groupRecordDatagram.MulticastAddress.ToString()); break; case "igmp.saddr": field.AssertShow(groupRecordDatagram.SourceAddresses[sourceAddressIndex++].ToString()); break; case "igmp.aux_data": field.AssertShow(groupRecordDatagram.AuxiliaryData); break; default: throw new InvalidOperationException("Invalid igmp group record field " + field.Name()); } } }
internal static int GetReportVersion3Length(IEnumerable <IgmpGroupRecord> igmpGroupRecords) { return(HeaderLength + igmpGroupRecords.Sum(record => IgmpGroupRecordDatagram.GetLength(record.SourceAddresses.Count, record.AuxiliaryData.Length))); }