blob: aa85d9bd3b1edc4dba85767b53a2bf892c1020da [file] [log] [blame]
/*
* Copyright 2024-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.sflow;
import com.google.common.base.MoreObjects;
import java.nio.ByteBuffer;
import org.onlab.packet.BasePacket;
import org.onlab.packet.Deserializer;
import java.util.function.BiPredicate;
/**
* Represents VG counters for network interfaces.
*/
public final class VgCounter extends BasePacket {
public static final int VG_COUNTER_LENGTH = 80;
private InterfaceCounter generic;
private int dot12InHighPriorityFrames;
private long dot12InHighPriorityOctets;
private int dot12InNormPriorityFrames;
private long dot12InNormPriorityOctets;
private int dot12InIpmErrors;
private int dot12InOversizeFrameErrors;
private int dot12InDataErrors;
private int dot12InNullAddressedFrames;
private int dot12OutHighPriorityFrames;
private long dot12OutHighPriorityOctets;
private int dot12TransitionIntoTrainings;
private long dot12HCInHighPriorityOctets;
private long dot12HCInNormPriorityOctets;
private long dot12HCOutHighPriorityOctets;
private VgCounter(Builder builder) {
this.generic = builder.generic;
this.dot12InHighPriorityFrames = builder.dot12InHighPriorityFrames;
this.dot12InHighPriorityOctets = builder.dot12InHighPriorityOctets;
this.dot12InNormPriorityFrames = builder.dot12InNormPriorityFrames;
this.dot12InNormPriorityOctets = builder.dot12InNormPriorityOctets;
this.dot12InIpmErrors = builder.dot12InIpmErrors;
this.dot12InOversizeFrameErrors = builder.dot12InOversizeFrameErrors;
this.dot12InDataErrors = builder.dot12InDataErrors;
this.dot12InNullAddressedFrames = builder.dot12InNullAddressedFrames;
this.dot12OutHighPriorityFrames = builder.dot12OutHighPriorityFrames;
this.dot12OutHighPriorityOctets = builder.dot12OutHighPriorityOctets;
this.dot12TransitionIntoTrainings = builder.dot12TransitionIntoTrainings;
this.dot12HCInHighPriorityOctets = builder.dot12HCInHighPriorityOctets;
this.dot12HCInNormPriorityOctets = builder.dot12HCInNormPriorityOctets;
this.dot12HCOutHighPriorityOctets = builder.dot12HCOutHighPriorityOctets;
}
/**
* Gets the generic interface counter.
*
* @return generic interface counter.
*/
public InterfaceCounter getGeneric() {
return generic;
}
/**
* Gets the count of high priority frames.
*
* @return count of high priority frames.
*/
public int getDot12InHighPriorityFrames() {
return dot12InHighPriorityFrames;
}
/**
* Gets the count of high priority octets.
*
* @return high priority octets.
*/
public long getDot12InHighPriorityOctets() {
return dot12InHighPriorityOctets;
}
/**
* Gets the count of normal priority frames.
*
* @return count of normal priority frames.
*/
public int getDot12InNormPriorityFrames() {
return dot12InNormPriorityFrames;
}
/**
* Gets the count of normal priority octets.
*
* @return count of normal priority octets.
*/
public long getDot12InNormPriorityOctets() {
return dot12InNormPriorityOctets;
}
/**
* Gets the count of ipm errors.
*
* @return count of ipm errors.
*/
public int getDot12InIpmErrors() {
return dot12InIpmErrors;
}
/**
* Gets the count of over size frame errors.
*
* @return count of over size frame errors.
*/
public int getDot12InOversizeFrameErrors() {
return dot12InOversizeFrameErrors;
}
/**
* Gets the count of in data errors.
*
* @return count of in data errors.
*/
public int getDot12InDataErrors() {
return dot12InDataErrors;
}
/**
* Gets the count of in null addressed frames.
*
* @return count of in null addressed frames.
*/
public int getDot12InNullAddressedFrames() {
return dot12InNullAddressedFrames;
}
/**
* Gets the count of out high priority frames.
*
* @return count of out high priority frames.
*/
public int getDot12OutHighPriorityFrames() {
return dot12OutHighPriorityFrames;
}
/**
* Gets the count of out high priority octets.
*
* @return count of out high priority octets.
*/
public long getDot12OutHighPriorityOctets() {
return dot12OutHighPriorityOctets;
}
/**
* Gets the count of transition.
*
* @return count of transition.
*/
public int getDot12TransitionIntoTrainings() {
return dot12TransitionIntoTrainings;
}
/**
* Gets the count of high priority octets.
*
* @return count of high priority octets.
*/
public long getDot12HCInHighPriorityOctets() {
return dot12HCInHighPriorityOctets;
}
/**
* Gets the count of in normal priority octets.
*
* @return count of in normal priority octets.
*/
public long getDot12HCInNormPriorityOctets() {
return dot12HCInNormPriorityOctets;
}
/**
* Gets the count of out high priority octets.
*
* @return count of out high priority octets.
*/
public long getDot12HCOutHighPriorityOctets() {
return dot12HCOutHighPriorityOctets;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(getClass())
.add("generic", generic)
.add("dot12InHighPriorityFrames", dot12InHighPriorityFrames)
.add("dot12InHighPriorityOctets", dot12InHighPriorityOctets)
.add("dot12InNormPriorityFrames", dot12InNormPriorityFrames)
.add("dot12InNormPriorityOctets", dot12InNormPriorityOctets)
.add("dot12InIPMErrors", dot12InIpmErrors)
.add("dot12InOversizeFrameErrors", dot12InOversizeFrameErrors)
.add("dot12InDataErrors", dot12InDataErrors)
.add("dot12InNullAddressedFrames", dot12InNullAddressedFrames)
.add("dot12OutHighPriorityFrames", dot12OutHighPriorityFrames)
.add("dot12OutHighPriorityOctets", dot12OutHighPriorityOctets)
.add("dot12TransitionIntoTrainings", dot12TransitionIntoTrainings)
.add("dot12HCInHighPriorityOctets", dot12HCInHighPriorityOctets)
.add("dot12HCInNormPriorityOctets", dot12HCInNormPriorityOctets)
.add("dot12HCOutHighPriorityOctets", dot12HCOutHighPriorityOctets)
.toString();
}
/**
* Deserializer function for sFlow interface vg counter.
*
* @return deserializer function
*/
public static Deserializer<VgCounter> deserializer() {
return (data, offset, length) -> {
BiPredicate<ByteBuffer, Integer> isValidBuffer = (b, l)
-> b.hasRemaining() && b.remaining() >= l;
ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
byte[] ifCounterBytes;
if (!isValidBuffer.test(bb, InterfaceCounter.INTERFACE_COUNTER_LENGTH)) {
throw new IllegalStateException("Invalid interface vg counter buffer size.");
}
ifCounterBytes = new byte[InterfaceCounter.INTERFACE_COUNTER_LENGTH];
bb.get(ifCounterBytes);
InterfaceCounter interfaceCounter = InterfaceCounter.deserializer().deserialize(ifCounterBytes,
0, InterfaceCounter.INTERFACE_COUNTER_LENGTH);
if (!isValidBuffer.test(bb, VG_COUNTER_LENGTH)) {
throw new IllegalStateException("Invalid interface vg counter buffer size.");
}
Builder builder = new Builder();
return builder.generic(interfaceCounter)
.dot12InHighPriorityFrames(bb.getInt())
.dot12InHighPriorityOctets(bb.getLong())
.dot12InNormPriorityFrames(bb.getInt())
.dot12InNormPriorityOctets(bb.getLong())
.dot12InIpmErrors(bb.getInt())
.dot12InOversizeFrameErrors(bb.getInt())
.dot12InDataErrors(bb.getInt())
.dot12InNullAddressedFrames(bb.getInt())
.dot12OutHighPriorityFrames(bb.getInt())
.dot12OutHighPriorityOctets(bb.getLong())
.dot12TransitionIntoTrainings(bb.getInt())
.dot12HCInHighPriorityOctets(bb.getLong())
.dot12HCInNormPriorityOctets(bb.getLong())
.dot12HCOutHighPriorityOctets(bb.getLong())
.build();
};
}
@Override
public byte[] serialize() {
throw new UnsupportedOperationException("Not supported yet.");
}
/**
* Builder pattern to create an instance of InterfaceCounter.
*/
private static class Builder {
private InterfaceCounter generic;
private int dot12InHighPriorityFrames;
private long dot12InHighPriorityOctets;
private int dot12InNormPriorityFrames;
private long dot12InNormPriorityOctets;
private int dot12InIpmErrors;
private int dot12InOversizeFrameErrors;
private int dot12InDataErrors;
private int dot12InNullAddressedFrames;
private int dot12OutHighPriorityFrames;
private long dot12OutHighPriorityOctets;
private int dot12TransitionIntoTrainings;
private long dot12HCInHighPriorityOctets;
private long dot12HCInNormPriorityOctets;
private long dot12HCOutHighPriorityOctets;
/**
* Sets the generic interface counter.
*
* @param generic the generic interface counter.
* @return this builder instance.
*/
public Builder generic(InterfaceCounter generic) {
this.generic = generic;
return this;
}
/**
* Sets the count of high priority frames.
*
* @param dot12InHighPriorityFrames the count of high priority frames.
* @return this builder instance.
*/
public Builder dot12InHighPriorityFrames(int dot12InHighPriorityFrames) {
this.dot12InHighPriorityFrames = dot12InHighPriorityFrames;
return this;
}
/**
* Sets the count of high priority octets.
*
* @param dot12InHighPriorityOctets the high priority octets.
* @return this builder instance.
*/
public Builder dot12InHighPriorityOctets(long dot12InHighPriorityOctets) {
this.dot12InHighPriorityOctets = dot12InHighPriorityOctets;
return this;
}
/**
* Sets the count of normal priority frames.
*
* @param dot12InNormPriorityFrames the count of normal priority frames.
* @return this builder instance.
*/
public Builder dot12InNormPriorityFrames(int dot12InNormPriorityFrames) {
this.dot12InNormPriorityFrames = dot12InNormPriorityFrames;
return this;
}
/**
* Sets the count of normal priority octets.
*
* @param dot12InNormPriorityOctets the count of normal priority octets.
* @return this builder instance.
*/
public Builder dot12InNormPriorityOctets(long dot12InNormPriorityOctets) {
this.dot12InNormPriorityOctets = dot12InNormPriorityOctets;
return this;
}
/**
* Sets the count of ipm errors.
*
* @param dot12InIPMErrors the count of ipm errors.
* @return this builder instance.
*/
public Builder dot12InIpmErrors(int dot12InIpmErrors) {
this.dot12InIpmErrors = dot12InIpmErrors;
return this;
}
/**
* Sets the count of over size frame errors.
*
* @param dot12InOversizeFrameErrors the count of over size frame errors.
* @return this builder instance.
*/
public Builder dot12InOversizeFrameErrors(int dot12InOversizeFrameErrors) {
this.dot12InOversizeFrameErrors = dot12InOversizeFrameErrors;
return this;
}
/**
* Sets the count of in data errors.
*
* @param dot12InDataErrors the count of in data errors.
* @return this builder instance.
*/
public Builder dot12InDataErrors(int dot12InDataErrors) {
this.dot12InDataErrors = dot12InDataErrors;
return this;
}
/**
* Sets the count of in null addressed frames.
*
* @param dot12InNullAddressedFrames the count of in null addressed frames.
* @return this builder instance.
*/
public Builder dot12InNullAddressedFrames(int dot12InNullAddressedFrames) {
this.dot12InNullAddressedFrames = dot12InNullAddressedFrames;
return this;
}
/**
* Sets the count of out high priority frames.
*
* @param dot12OutHighPriorityFrames the count of out high priority frames.
* @return this builder instance.
*/
public Builder dot12OutHighPriorityFrames(int dot12OutHighPriorityFrames) {
this.dot12OutHighPriorityFrames = dot12OutHighPriorityFrames;
return this;
}
/**
* Sets the count of out high priority octets.
*
* @param dot12OutHighPriorityOctets the count of out high priority octets.
* @return this builder instance.
*/
public Builder dot12OutHighPriorityOctets(long dot12OutHighPriorityOctets) {
this.dot12OutHighPriorityOctets = dot12OutHighPriorityOctets;
return this;
}
/**
* Sets the count of transition.
*
* @param dot12TransitionIntoTrainings the count of transition.
* @return this builder instance.
*/
public Builder dot12TransitionIntoTrainings(int dot12TransitionIntoTrainings) {
this.dot12TransitionIntoTrainings = dot12TransitionIntoTrainings;
return this;
}
/**
* Sets the count of high priority octets.
*
* @param dot12HCInHighPriorityOctets the count of high priority octets.
* @return this builder instance.
*/
public Builder dot12HCInHighPriorityOctets(long dot12HCInHighPriorityOctets) {
this.dot12HCInHighPriorityOctets = dot12HCInHighPriorityOctets;
return this;
}
/**
* Sets the count of in normal priority octets.
*
* @param dot12HCInNormPriorityOctets the count of in normal priority octets.
* @return this builder instance.
*/
public Builder dot12HCInNormPriorityOctets(long dot12HCInNormPriorityOctets) {
this.dot12HCInNormPriorityOctets = dot12HCInNormPriorityOctets;
return this;
}
/**
* Sets the count of out high priority octets.
*
* @param dot12HCOutHighPriorityOctets the count of out high priority octets.
* @return this builder instance.
*/
public Builder dot12HCOutHighPriorityOctets(long dot12HCOutHighPriorityOctets) {
this.dot12HCOutHighPriorityOctets = dot12HCOutHighPriorityOctets;
return this;
}
/**
* Builds an instance of VgCounter based on the configured parameters.
*
* @return an instance of VgCounter.
*/
public VgCounter build() {
return new VgCounter(this);
}
}
}