All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.onlab.packet.bmp.Bmp Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2021-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.onlab.packet.bmp;

import com.google.common.base.MoreObjects;
import org.onlab.packet.BasePacket;
import org.onlab.packet.Deserializer;

import java.nio.ByteBuffer;
import java.util.Objects;

import static org.onlab.packet.PacketUtils.checkInput;

/**
 * The following common header appears in all BMP messages.  The rest of
 * the data in a BMP message is dependent on the Message Type field in
 * the common header.
 * 

* Version (1 byte): Indicates the BMP version. This is set to '3' * for all messages defined in this specification. ('1' and '2' were * used by draft versions of this document.) Version 0 is reserved * and MUST NOT be sent. *

* Message Length (4 bytes): Length of the message in bytes * (including headers, data, and encapsulated messages, if any). *

* Message Type (1 byte): This identifies the type of the BMP * message. A BMP implementation MUST ignore unrecognized message * types upon receipt. *

* Type = 0: Route Monitoring * Type = 1: Statistics Report * Type = 2: Peer Down Notification * Type = 3: Peer Up Notification * Type = 4: Initiation Message * Type = 5: Termination Message * Type = 6: Route Mirroring Message */ public class Bmp extends BasePacket { /* 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+ | Version | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Message Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Msg. Type | +---------------+ */ public static final short DEFAULT_HEADER_LENGTH = 6; public static final int DEFAULT_PACKET_MINIMUM_LENGTH = 4; protected byte version; protected byte type; protected int length; /** * Sets version field. * * @param version message version field */ public void setVersion(byte version) { this.version = version; } /** * Sets message type. * * @param type message type */ public void setType(byte type) { this.type = type; } /** * Sets message length. * * @param length message length */ public void setLength(int length) { this.length = length; } /** * Returns message length. * * @return message length */ public int getLength() { return this.length; } /** * Returns message version. * * @return message version */ public byte getVersion() { return this.version; } /** * Returns message type. * * @return message type */ public byte getType() { return this.type; } @Override public byte[] serialize() { final byte[] data = new byte[DEFAULT_HEADER_LENGTH]; final ByteBuffer bb = ByteBuffer.wrap(data); bb.put(this.version); bb.putInt(this.length); bb.put(this.type); return data; } /** * Deserializer function for Bmp Packets. * * @return deserializer function */ public static Deserializer deserializer() { return (data, offset, length) -> { checkInput(data, offset, length, DEFAULT_HEADER_LENGTH); ByteBuffer bb = ByteBuffer.wrap(data, offset, length); Bmp bmp = new Bmp(); bmp.version = bb.get(); bmp.length = bb.getInt(); bmp.type = bb.get(); return bmp; }; } @Override public String toString() { return MoreObjects.toStringHelper(getClass()) .add("version", version) .add("type", type) .add("length", length) .toString(); } @Override public int hashCode() { return Objects.hash(super.hashCode(), version, type, length); } @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } if (!(obj instanceof Bmp)) { return false; } final Bmp other = (Bmp) obj; if (this.version != other.version) { return false; } if (this.type != other.type) { return false; } if (this.length != other.length) { return false; } return true; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy