/* * This file is part of jsFlow. * * Copyright (c) 2009 DE-CIX Management GmbH <http://www.de-cix.net> - All rights * reserved. * * Author: Thomas King <thomas.king@de-cix.net> * * This software is licensed under the Apache License, version 2.0. A copy of * the license agreement is included in this distribution. */ package net.decix.jsflow.header; import net.decix.util.HeaderBytesException; import net.decix.util.HeaderParseException; import net.decix.util.Utility; public class EthernetInterfaceCounterHeader { // enterprise = 0, format = 2 private long dot3StatsAlignmentErrors; private long dot3StatsFCSErrors; private long dot3StatsSingleCollisionFrames; private long dot3StatsMultipleCollisionFrames; private long dot3StatsSQETestErrors; private long dot3StatsDeferredTransmissions; private long dot3StatsLateCollisions; private long dot3StatsExcessiveCollisions; private long dot3StatsInternalMacTransmitErrors; private long dot3StatsCarrierSenseErrors; private long dot3StatsFrameTooLongs; private long dot3StatsInternalMacReceiveErrors; private long dot3StatsSymbolErrors; private CounterData counterData; public long getDot3StatsAlignmentErrors() { return dot3StatsAlignmentErrors; } public long getDot3StatsFCSErrors() { return dot3StatsFCSErrors; } public long getDot3StatsSingleCollisionFrames() { return dot3StatsSingleCollisionFrames; } public long getDot3StatsMultipleCollisionFrames() { return dot3StatsMultipleCollisionFrames; } public long getDot3StatsSQETestErrors() { return dot3StatsSQETestErrors; } public long getDot3StatsDeferredTransmissions() { return dot3StatsDeferredTransmissions; } public long getDot3StatsLateCollisions() { return dot3StatsLateCollisions; } public long getDot3StatsExcessiveCollisions() { return dot3StatsExcessiveCollisions; } public long getDot3StatsInternalMacTransmitErrors() { return dot3StatsInternalMacTransmitErrors; } public long getDot3StatsCarrierSenseErrors() { return dot3StatsCarrierSenseErrors; } public long getDot3StatsFrameTooLongs() { return dot3StatsFrameTooLongs; } public long getDot3StatsInternalMacReceiveErrors() { return dot3StatsInternalMacReceiveErrors; } public long getDot3StatsSymbolErrors() { return dot3StatsSymbolErrors; } public void setDot3StatsAlignmentErrors(long dot3StatsAlignmentErrors) { this.dot3StatsAlignmentErrors = dot3StatsAlignmentErrors; } public void setDot3StatsFCSErrors(long dot3StatsFCSErrors) { this.dot3StatsFCSErrors = dot3StatsFCSErrors; } public void setDot3StatsSingleCollisionFrames(long dot3StatsSingleCollisionFrames) { this.dot3StatsSingleCollisionFrames = dot3StatsSingleCollisionFrames; } public void setDot3StatsMultipleCollisionFrames( long dot3StatsMultipleCollisionFrames) { this.dot3StatsMultipleCollisionFrames = dot3StatsMultipleCollisionFrames; } public void setDot3StatsSQETestErrors(long dot3StatsSQETestErrors) { this.dot3StatsSQETestErrors = dot3StatsSQETestErrors; } public void setDot3StatsDeferredTransmissions( long dot3StatsDeferredTransmissions) { this.dot3StatsDeferredTransmissions = dot3StatsDeferredTransmissions; } public void setDot3StatsLateCollisions(long dot3StatsLateCollisions) { this.dot3StatsLateCollisions = dot3StatsLateCollisions; } public void setDot3StatsExcessiveCollisions(long dot3StatsExcessiveCollisions) { this.dot3StatsExcessiveCollisions = dot3StatsExcessiveCollisions; } public void setDot3StatsInternalMacTransmitErrors(long dot3StatsInternalMacTransmitErrors) { this.dot3StatsInternalMacTransmitErrors = dot3StatsInternalMacTransmitErrors; } public void setDot3StatsCarrierSenseErrors(long dot3StatsCarrierSenseErrors) { this.dot3StatsCarrierSenseErrors = dot3StatsCarrierSenseErrors; } public void setDot3StatsFrameTooLongs(long dot3StatsFrameTooLongs) { this.dot3StatsFrameTooLongs = dot3StatsFrameTooLongs; } public void setDot3StatsInternalMacReceiveErrors(long dot3StatsInternalMacReceiveErrors) { this.dot3StatsInternalMacReceiveErrors = dot3StatsInternalMacReceiveErrors; } public void setDot3StatsSymbolErrors(long dot3StatsSymbolErrors) { this.dot3StatsSymbolErrors = dot3StatsSymbolErrors; } public void setCounterData(CounterData counterData) { this.counterData = counterData; } public CounterData getCounterData() { return counterData; } public static EthernetInterfaceCounterHeader parse(byte[] data) throws HeaderParseException { try { if (data.length < 52) throw new HeaderParseException("Data array too short."); EthernetInterfaceCounterHeader eic = new EthernetInterfaceCounterHeader(); // dot3StatsAlignmentErrors byte[] dot3StatsAlignmentErrors = new byte[4]; System.arraycopy(data, 0, dot3StatsAlignmentErrors, 0, 4); eic.setDot3StatsAlignmentErrors(Utility.fourBytesToLong(dot3StatsAlignmentErrors)); // dot3StatsAlignmentErrors byte[] dot3StatsFCSErrors = new byte[4]; System.arraycopy(data, 4, dot3StatsFCSErrors, 0, 4); eic.setDot3StatsFCSErrors(Utility.fourBytesToLong(dot3StatsFCSErrors)); // dot3StatsSingleCollisionFrames byte[] dot3StatsSingleCollisionFrames = new byte[4]; System.arraycopy(data, 8, dot3StatsSingleCollisionFrames, 0, 4); eic.setDot3StatsSingleCollisionFrames(Utility.fourBytesToLong(dot3StatsSingleCollisionFrames)); // dot3StatsMultipleCollisionFrames byte[] dot3StatsMultipleCollisionFrames = new byte[4]; System.arraycopy(data, 12, dot3StatsMultipleCollisionFrames, 0, 4); eic.setDot3StatsMultipleCollisionFrames(Utility.fourBytesToLong(dot3StatsMultipleCollisionFrames)); // dot3StatsSQETestErrors byte[] dot3StatsSQETestErrors = new byte[4]; System.arraycopy(data, 16, dot3StatsSQETestErrors, 0, 4); eic.setDot3StatsSQETestErrors(Utility.fourBytesToLong(dot3StatsSQETestErrors)); // dot3StatsDeferredTransmissions byte[] dot3StatsDeferredTransmissions = new byte[4]; System.arraycopy(data, 20, dot3StatsDeferredTransmissions, 0, 4); eic.setDot3StatsDeferredTransmissions(Utility.fourBytesToLong(dot3StatsDeferredTransmissions)); // dot3StatsLateCollisions byte[] dot3StatsLateCollisions = new byte[4]; System.arraycopy(data, 24, dot3StatsLateCollisions, 0, 4); eic.setDot3StatsLateCollisions(Utility.fourBytesToLong(dot3StatsLateCollisions)); // dot3StatsExcessiveCollisions byte[] dot3StatsExcessiveCollisions = new byte[4]; System.arraycopy(data, 28, dot3StatsExcessiveCollisions, 0, 4); eic.setDot3StatsExcessiveCollisions(Utility.fourBytesToLong(dot3StatsExcessiveCollisions)); // dot3StatsInternalMacTransmitErrors byte[] dot3StatsInternalMacTransmitErrors = new byte[4]; System.arraycopy(data, 32, dot3StatsInternalMacTransmitErrors, 0, 4); eic.setDot3StatsInternalMacTransmitErrors(Utility.fourBytesToLong(dot3StatsInternalMacTransmitErrors)); // dot3StatsCarrierSenseErrors byte[] dot3StatsCarrierSenseErrors = new byte[4]; System.arraycopy(data, 36, dot3StatsCarrierSenseErrors, 0, 4); eic.setDot3StatsCarrierSenseErrors(Utility.fourBytesToLong(dot3StatsCarrierSenseErrors)); // dot3StatsFrameTooLongs byte[] dot3StatsFrameTooLongs = new byte[4]; System.arraycopy(data, 40, dot3StatsFrameTooLongs, 0, 4); eic.setDot3StatsFrameTooLongs(Utility.fourBytesToLong(dot3StatsFrameTooLongs)); // dot3StatsInternalMacReceiveErrors byte[] dot3StatsInternalMacReceiveErrors = new byte[4]; System.arraycopy(data, 44, dot3StatsInternalMacReceiveErrors, 0, 4); eic.setDot3StatsInternalMacReceiveErrors(Utility.fourBytesToLong(dot3StatsInternalMacReceiveErrors)); // dot3StatsSymbolErrors byte[] dot3StatsSymbolErrors = new byte[4]; System.arraycopy(data, 48, dot3StatsSymbolErrors, 0, 4); eic.setDot3StatsSymbolErrors(Utility.fourBytesToLong(dot3StatsSymbolErrors)); // counter data byte[] subData = new byte[data.length - 52]; System.arraycopy(data, 52, subData, 0, data.length - 52); CounterData cd = CounterData.parse(subData); eic.setCounterData(cd); return eic; } catch (Exception e) { throw new HeaderParseException("Parse error: " + e.getMessage()); } } public byte[] getBytes() throws HeaderBytesException { try { byte[] counterDataBytes = counterData.getBytes(); byte[] data = new byte[52 + counterDataBytes.length]; // dot3StatsAlignmentErrors System.arraycopy(Utility.longToFourBytes(dot3StatsAlignmentErrors), 0, data, 0, 4); // dot3StatsFCSErrors System.arraycopy(Utility.longToFourBytes(dot3StatsFCSErrors), 0, data, 4, 4); // dot3StatsSingleCollisionFrames System.arraycopy(Utility.longToFourBytes(dot3StatsSingleCollisionFrames), 0, data, 8, 4); // dot3StatsMultipleCollisionFrames System.arraycopy(Utility.longToFourBytes(dot3StatsMultipleCollisionFrames), 0, data, 12, 4); // dot3StatsSQETestErrors System.arraycopy(Utility.longToFourBytes(dot3StatsSQETestErrors), 0, data, 16, 4); // dot3StatsDeferredTransmissions System.arraycopy(Utility.longToFourBytes(dot3StatsDeferredTransmissions), 0, data, 20, 4); // dot3StatsLateCollisions System.arraycopy(Utility.longToFourBytes(dot3StatsLateCollisions), 0, data, 24, 4); // dot3StatsExcessiveCollisions System.arraycopy(Utility.longToFourBytes(dot3StatsExcessiveCollisions), 0, data, 28, 4); // dot3StatsInternalMacTransmitErrors System.arraycopy(Utility.longToFourBytes(dot3StatsInternalMacTransmitErrors), 0, data, 32, 4); // dot3StatsCarrierSenseErrors System.arraycopy(Utility.longToFourBytes(dot3StatsCarrierSenseErrors), 0, data, 36, 4); // dot3StatsFrameTooLongs System.arraycopy(Utility.longToFourBytes(dot3StatsFrameTooLongs), 0, data, 40, 4); // dot3StatsInternalMacReceiveErrors System.arraycopy(Utility.longToFourBytes(dot3StatsInternalMacReceiveErrors), 0, data, 44, 4); // dot3StatsSymbolErrors System.arraycopy(Utility.longToFourBytes(dot3StatsSymbolErrors), 0, data, 48, 4); // counter data System.arraycopy(counterDataBytes, 0, data, 52, counterDataBytes.length); return data; } catch (Exception e) { throw new HeaderBytesException("Error while generating the bytes: " + e.getMessage()); } } public String toString() { StringBuilder sb = new StringBuilder(); sb.append("[EthernetInterfaceCounterHeader]:"); sb.append("AlignmentErrors: "); sb.append(getDot3StatsAlignmentErrors()); sb.append(", FCSErrors: " + this.getDot3StatsFCSErrors()); sb.append(", SingleCollisionFrames: "); sb.append(getDot3StatsSingleCollisionFrames()); sb.append(", MultipleCollisionFrames: "); sb.append(getDot3StatsMultipleCollisionFrames()); sb.append(", SQETestErrors: "); sb.append(getDot3StatsSQETestErrors()); sb.append(", DeferredTransmissions: "); sb.append(getDot3StatsDeferredTransmissions()); sb.append(", LateCollisions: "); sb.append(getDot3StatsLateCollisions()); sb.append(", ExcessiveCollisions: "); sb.append(getDot3StatsExcessiveCollisions()); sb.append(", InternalMACTransmitErrors: "); sb.append(getDot3StatsInternalMacTransmitErrors()); sb.append(", CarrierSenseErrors: "); sb.append(getDot3StatsCarrierSenseErrors()); sb.append(", FrameTooLongs: "); sb.append(getDot3StatsFrameTooLongs()); sb.append(", InternalMACReceiveErrors: "); sb.append(getDot3StatsInternalMacReceiveErrors()); sb.append(", SymbolErrors: "); sb.append(getDot3StatsSymbolErrors()); return sb.toString(); } }