internal static void CompareProtocols(object currentDatagram, XElement layersContainer)
        {
            foreach (var layer in layersContainer.Protocols())
            {
                switch (layer.Name())
                {
                case "geninfo":
                case "raw":
                    break;

                case "frame":
                    CompareFrame(layer, (Packet)currentDatagram);
                    break;

                default:
                    var comparer = WiresharkDatagramComparer.GetComparer(layer.Name());
                    if (comparer == null)
                    {
                        return;
                    }
                    currentDatagram = comparer.Compare(layer, currentDatagram);
                    if (currentDatagram == null)
                    {
                        return;
                    }
                    break;
                }
            }
        }
        internal static void CompareProtocols(object currentDatagram, XElement layersContainer, bool parentLayerSuccess)
        {
            Dictionary <string, int> layerNameToCount = new Dictionary <string, int>();

            foreach (var layer in layersContainer.Protocols())
            {
                string layerName = layer.Name();
                if (!layerNameToCount.ContainsKey(layerName))
                {
                    layerNameToCount[layerName] = 1;
                }
                else
                {
                    ++layerNameToCount[layerName];
                }
                switch (layerName)
                {
                case "geninfo":
                case "raw":
                    break;

                case "frame":
                    CompareFrame(layer, (Packet)currentDatagram);
                    break;

                default:
                    var comparer = WiresharkDatagramComparer.GetComparer(layer.Name(), layerNameToCount[layerName], layersContainer.Name(),
                                                                         parentLayerSuccess);
                    if (comparer == null)
                    {
                        return;
                    }
                    currentDatagram = comparer.Compare(layer, currentDatagram);
                    if (currentDatagram == null)
                    {
                        return;
                    }
                    break;
                }
            }
        }