blob: 05e64485860a843b67832ccf225073f3fcd9da6b [file] [log] [blame]
/*
* Copyright 2016-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.isis.io.isispacket.pdu;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import org.onlab.packet.Ip4Address;
import org.onlab.packet.MacAddress;
import org.onosproject.isis.controller.IsisInterfaceState;
import org.onosproject.isis.io.isispacket.IsisHeader;
import org.onosproject.isis.io.isispacket.tlv.AdjacencyStateTlv;
import org.onosproject.isis.io.isispacket.tlv.AreaAddressTlv;
import org.onosproject.isis.io.isispacket.tlv.IpInterfaceAddressTlv;
import org.onosproject.isis.io.isispacket.tlv.IsisNeighborTlv;
import org.onosproject.isis.io.isispacket.tlv.IsisTlv;
import java.util.ArrayList;
import java.util.List;
/**
* Representation of ISIS hello PDU.
*/
public abstract class HelloPdu extends IsisHeader {
protected List<IsisTlv> variableLengths = new ArrayList<>();
private byte circuitType;
private String sourceId;
private int holdingTime;
private int pduLength;
public void addTlv(IsisTlv isisTlv) {
variableLengths.add(isisTlv);
}
/**
* Returns the variable lengths.
*
* @return variable lengths
*/
public List<IsisTlv> tlvs() {
return variableLengths;
}
/**
* Returns the list of area addresses.
*
* @return areaAddresses area addresses
*/
public List<String> areaAddress() {
List<String> areaAddresses = null;
for (IsisTlv tlv : tlvs()) {
if (tlv instanceof AreaAddressTlv) {
areaAddresses = ((AreaAddressTlv) tlv).areaAddress();
}
}
return areaAddresses;
}
/**
* Returns the list of interface IP addresses.
*
* @return interfaceIpAddresses list of interface IP addresses
*/
public List<Ip4Address> interfaceIpAddresses() {
List<Ip4Address> interfaceIpAddresses = null;
for (IsisTlv tlv : tlvs()) {
if (tlv instanceof IpInterfaceAddressTlv) {
interfaceIpAddresses = ((IpInterfaceAddressTlv) tlv).interfaceAddress();
}
}
return interfaceIpAddresses;
}
/**
* Returns the list of neighbor list.
*
* @return macAddresses list of neighbor MAC address
*/
public List<MacAddress> neighborList() {
List<MacAddress> macAddresses = null;
for (IsisTlv tlv : tlvs()) {
if (tlv instanceof IsisNeighborTlv) {
macAddresses = ((IsisNeighborTlv) tlv).neighbor();
}
}
return macAddresses;
}
/**
* Returns the adjacency state.
*
* @return interfaceState adjacency state
*/
public IsisInterfaceState adjacencyState() {
IsisInterfaceState interfaceState = null;
for (IsisTlv tlv : tlvs()) {
if (tlv instanceof AdjacencyStateTlv) {
interfaceState = IsisInterfaceState.get(((AdjacencyStateTlv) tlv).adjacencyType());
break;
}
}
return interfaceState;
}
/**
* Returns the source ID.
*
* @return sourceId source ID
*/
public String sourceId() {
return sourceId;
}
/**
* Sets source ID.
*
* @param sourceId source ID
*/
public void setSourceId(String sourceId) {
this.sourceId = sourceId;
}
/**
* Returns the PDU length.
*
* @return pduLength PDU length
*/
public int pduLength() {
return pduLength;
}
/**
* Sets the PDU length.
*
* @param pduLength PDU length
*/
public void setPduLength(int pduLength) {
this.pduLength = pduLength;
}
/**
* Returns the holding time.
*
* @return holdingTime holding time
*/
public int holdingTime() {
return holdingTime;
}
/**
* Sets the holding time.
*
* @param holdingTime holding time
*/
public void setHoldingTime(int holdingTime) {
this.holdingTime = holdingTime;
}
/**
* Returns the circuit type.
*
* @return circuitType circuit type
*/
public byte circuitType() {
return circuitType;
}
/**
* Sets the circuit type.
*
* @param circuitType circuit type
*/
public void setCircuitType(byte circuitType) {
this.circuitType = circuitType;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(getClass())
.omitNullValues()
.add("circuitType", circuitType)
.add("sourceId", sourceId)
.add("holdingTime", holdingTime)
.add("pduLength", pduLength)
.toString();
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
HelloPdu that = (HelloPdu) o;
return Objects.equal(circuitType, that.circuitType) &&
Objects.equal(sourceId, that.sourceId) &&
Objects.equal(holdingTime, that.holdingTime) &&
Objects.equal(pduLength, that.pduLength);
}
@Override
public int hashCode() {
return Objects.hashCode(circuitType, sourceId, holdingTime, pduLength);
}
}