protected override bool CompareField(XElement field, Datagram datagram) { VLanTaggedFrameDatagram vLanTaggedFrameDatagram = (VLanTaggedFrameDatagram)datagram; switch (field.Name()) { case "vlan.priority": field.AssertShowDecimal((byte)vLanTaggedFrameDatagram.PriorityCodePoint); break; case "vlan.cfi": field.AssertShowDecimal(vLanTaggedFrameDatagram.CanonicalFormatIndicator); break; case "vlan.id": field.AssertShowDecimal(vLanTaggedFrameDatagram.VLanIdentifier); break; case "vlan.etype": field.AssertShowHex((ushort)vLanTaggedFrameDatagram.EtherType); break; case "vlan.len": field.AssertShowDecimal((ushort)vLanTaggedFrameDatagram.EtherType); break; case "vlan.trailer": if ( !new[] { (EthernetType)1, (EthernetType)5, (EthernetType)17, (EthernetType)30, (EthernetType)43, (EthernetType)50 }.Contains( vLanTaggedFrameDatagram.EtherType)) { field.AssertValue(vLanTaggedFrameDatagram.Trailer); } break; default: throw new InvalidOperationException("Invalid VLanTaggedFrame field " + field.Name()); } field.AssertNoFields(); return(true); }
protected override bool CompareField(XElement field, Datagram datagram) { VLanTaggedFrameDatagram vLanTaggedFrameDatagram = (VLanTaggedFrameDatagram)datagram; switch (field.Name()) { case "vlan.priority": field.AssertNoFields(); field.AssertShowDecimal((byte)vLanTaggedFrameDatagram.PriorityCodePoint); break; case "vlan.cfi": field.AssertNoFields(); field.AssertShowDecimal(vLanTaggedFrameDatagram.CanonicalFormatIndicator); break; case "vlan.id": field.AssertNoFields(); field.AssertShowDecimal(vLanTaggedFrameDatagram.VLanIdentifier); break; case "vlan.etype": field.AssertNoFields(); field.AssertShowDecimal((ushort)vLanTaggedFrameDatagram.EtherType); break; case "vlan.len": field.AssertShowDecimal((ushort)vLanTaggedFrameDatagram.EtherType); field.AssertNumFields(1); field.Fields().First().AssertName("_ws.expert"); break; case "vlan.trailer": field.AssertNoFields(); if (!new[] { (EthernetType)1, (EthernetType)5, (EthernetType)17, (EthernetType)29, (EthernetType)30, (EthernetType)43, (EthernetType)50, EthernetType.ReverseArp, // TODO: Support RARP EthernetType.ExtensibleAuthenticationProtocolOverLan, // TODO: Support this protocol. }.Contains( vLanTaggedFrameDatagram.EtherType)) { field.AssertValue(vLanTaggedFrameDatagram.ExtraData); } break; case "eth.padding": field.AssertNoFields(); if (!new[] { EthernetType.ExtensibleAuthenticationProtocolOverLan, // TODO: Support this protocol. }.Contains( vLanTaggedFrameDatagram.EtherType)) { field.AssertValue(vLanTaggedFrameDatagram.Trailer); } break; default: throw new InvalidOperationException("Invalid VLanTaggedFrame field " + field.Name()); } return(true); }