blob: 5a4a0c904af596468c1763432dca92fc12432ffe [file] [log] [blame]
/*
* Copyright 2018-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.lacp;
import org.onlab.packet.Deserializer;
import org.onlab.packet.MacAddress;
import java.nio.ByteBuffer;
import java.util.Objects;
import static com.google.common.base.MoreObjects.toStringHelper;
import static org.onlab.packet.PacketUtils.checkInput;
/**
* Represents LACP ActorInfo or PartnerInfo information.
*/
public class LacpBaseTlv extends LacpTlv {
public static final byte LENGTH = 20;
private static final byte[] RESERVED = new byte[3];
private short systemPriority;
private MacAddress systemMac;
private short key;
private short portPriority;
private short port;
private LacpState state;
/**
* Gets system priority.
*
* @return system priority
*/
public short getSystemPriority() {
return systemPriority;
}
/**
* Sets system priority.
*
* @param systemPriority system priority
* @return this
*/
public LacpBaseTlv setSystemPriority(short systemPriority) {
this.systemPriority = systemPriority;
return this;
}
/**
* Gets system MAC address.
*
* @return system MAC address
*/
public MacAddress getSystemMac() {
return systemMac;
}
/**
* Sets system MAC address.
*
* @param systemMac system MAC
* @return this
*/
public LacpBaseTlv setSystemMac(MacAddress systemMac) {
this.systemMac = systemMac;
return this;
}
/**
* Gets key.
*
* @return key
*/
public short getKey() {
return key;
}
/**
* Sets key.
*
* @param key key
* @return this
*/
public LacpBaseTlv setKey(short key) {
this.key = key;
return this;
}
/**
* Gets port priority.
*
* @return port priority
*/
public short getPortPriority() {
return portPriority;
}
/**
* Sets port priority.
*
* @param portPriority port priority
* @return this
*/
public LacpBaseTlv setPortPriority(short portPriority) {
this.portPriority = portPriority;
return this;
}
/**
* Gets port.
*
* @return port
*/
public short getPort() {
return port;
}
/**
* Sets port.
*
* @param port port
* @return this
*/
public LacpBaseTlv setPort(short port) {
this.port = port;
return this;
}
/**
* Gets state.
*
* @return state
*/
public LacpState getState() {
return state;
}
/**
* Sets state.
*
* @param state state
* @return this
*/
public LacpBaseTlv setState(byte state) {
this.state = new LacpState(state);
return this;
}
/**
* Deserializer function for LacpBaseTlv packets.
*
* @return deserializer function
*/
public static Deserializer<LacpBaseTlv> deserializer() {
return (data, offset, length) -> {
checkInput(data, offset, length, LENGTH - HEADER_LENGTH);
LacpBaseTlv lacpBaseTlv = new LacpBaseTlv();
ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
lacpBaseTlv.setSystemPriority(bb.getShort());
byte[] mac = new byte[6];
bb.get(mac);
lacpBaseTlv.setSystemMac(MacAddress.valueOf(mac));
lacpBaseTlv.setKey(bb.getShort());
lacpBaseTlv.setPortPriority(bb.getShort());
lacpBaseTlv.setPort(bb.getShort());
lacpBaseTlv.setState(bb.get());
return lacpBaseTlv;
};
}
@Override
public byte[] serialize() {
final byte[] data = new byte[LENGTH - HEADER_LENGTH];
final ByteBuffer bb = ByteBuffer.wrap(data);
bb.putShort(this.systemPriority);
bb.put(this.systemMac.toBytes());
bb.putShort(this.key);
bb.putShort(this.portPriority);
bb.putShort(this.port);
bb.put(this.state.toByte());
bb.put(RESERVED);
return data;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!super.equals(obj)) {
return false;
}
if (!(obj instanceof LacpBaseTlv)) {
return false;
}
final LacpBaseTlv other = (LacpBaseTlv) obj;
return systemPriority == other.systemPriority &&
key == other.key &&
portPriority == other.portPriority &&
port == other.port &&
Objects.equals(state, other.state) &&
Objects.equals(systemMac, other.systemMac);
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), systemPriority, systemMac, key,
portPriority, port, state);
}
@Override
public String toString() {
return toStringHelper(getClass())
.add("systemPriority", Short.toString(systemPriority))
.add("systemMac", systemMac.toString())
.add("key", Short.toString(key))
.add("portPriority", Short.toString(portPriority))
.add("port", Short.toString(port))
.add("state", state.toString())
.toString();
}
}