ONOS-4083, ONOS-4084, ONOS-4096, ONOS-4097:ISIS PDU Data Structures
Change-Id: I22d30e8f7ba7d414e75254fdec6d0865bf471ff9
diff --git a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/pdu/HelloPdu.java b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/pdu/HelloPdu.java
new file mode 100644
index 0000000..6ce37c8
--- /dev/null
+++ b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/pdu/HelloPdu.java
@@ -0,0 +1,220 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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 lenght
+ */
+ 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);
+ }
+}
\ No newline at end of file