diff options
Diffstat (limited to 'framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv4SubObject.java')
-rw-r--r-- | framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv4SubObject.java | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv4SubObject.java b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv4SubObject.java new file mode 100644 index 00000000..031b5db6 --- /dev/null +++ b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv4SubObject.java @@ -0,0 +1,180 @@ +/* + * Copyright 2015 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. + */ + +/** + * @author b00295750 + * + */ +package org.onosproject.pcepio.types; + +import java.util.Objects; + +import org.jboss.netty.buffer.ChannelBuffer; +import org.onosproject.pcepio.protocol.PcepVersion; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.base.MoreObjects; + +/** + * Provides IPv4 Sub Object. + */ +public class IPv4SubObject implements PcepValueType { + + /*Reference : RFC 4874:3.1.1 + * 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |L| Type | Length | IPv4 address (4 bytes) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IPv4 address (continued) | Prefix Length | Resvd | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ + protected static final Logger log = LoggerFactory.getLogger(IPv4SubObject.class); + + public static final byte TYPE = 0x01; + public static final byte LENGTH = 8; + public static final byte VALUE_LENGTH = 6; + public static final byte OBJ_LENGTH = 8; + public static final byte LBIT = 0; + public static final int SHIFT_LBIT_POSITION = 7; + private int ipAddress; + private byte prefixLen; + private byte resvd; + + /** + * Constructor to initialize ipv4 address. + * + * @param ipAddr ipv4 address + */ + public IPv4SubObject(int ipAddr) { + this.ipAddress = ipAddr; + } + + /** + * constructor to initialize ipAddress, prefixLen and resvd. + * + * @param ipAddress ipv4 address + * @param prefixLen prefix length + * @param resvd reserved flags value + */ + public IPv4SubObject(int ipAddress, byte prefixLen, byte resvd) { + this.ipAddress = ipAddress; + this.prefixLen = prefixLen; + this.resvd = resvd; + } + + /** + * Returns a new instance of IPv4SubObject. + * + * @param ipAddress ipv4 address + * @param prefixLen prefix length + * @param resvd reserved flags value + * @return object of IPv4SubObject + */ + public static IPv4SubObject of(int ipAddress, byte prefixLen, byte resvd) { + return new IPv4SubObject(ipAddress, prefixLen, resvd); + } + + /** + * Returns prefixLen of IPv4 IP address. + * + * @return byte value of rawValue + */ + public byte getPrefixLen() { + return prefixLen; + } + + /** + * Returns value of IPv4 IP address. + * + * @return int value of ipv4 address + */ + public int getIpAddress() { + return ipAddress; + } + + @Override + public PcepVersion getVersion() { + return PcepVersion.PCEP_1; + } + + @Override + public short getType() { + return TYPE; + } + + @Override + public short getLength() { + return LENGTH; + } + + @Override + public int hashCode() { + return Objects.hash(ipAddress, prefixLen, resvd); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj instanceof IPv4SubObject) { + IPv4SubObject other = (IPv4SubObject) obj; + return Objects.equals(this.ipAddress, other.ipAddress) && Objects.equals(this.prefixLen, other.prefixLen) + && Objects.equals(this.resvd, other.resvd); + } + return false; + } + + /** + * Reads the channel buffer and returns object of IPv4SubObject. + * + * @param c type of channel buffer + * @return object of IPv4SubObject + */ + public static PcepValueType read(ChannelBuffer c) { + int ipAddess = c.readInt(); + byte prefixLen = c.readByte(); + byte resvd = c.readByte(); + return new IPv4SubObject(ipAddess, prefixLen, resvd); + } + + @Override + public int write(ChannelBuffer c) { + int iLenStartIndex = c.writerIndex(); + byte bValue = LBIT; + bValue = (byte) (bValue << SHIFT_LBIT_POSITION); + bValue = (byte) (bValue | TYPE); + c.writeByte(bValue); + c.writeByte(OBJ_LENGTH); + c.writeInt(ipAddress); + c.writeByte(prefixLen); + c.writeByte(resvd); + + return c.writerIndex() - iLenStartIndex; + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(getClass()) + .add("Type", TYPE) + .add("Length", LENGTH) + .add("IPv4Address", ipAddress) + .add("PrefixLength", prefixLen) + .toString(); + } +} |