diff options
Diffstat (limited to 'framework/src/onos/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv4ErrorSpec.java')
-rw-r--r-- | framework/src/onos/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv4ErrorSpec.java | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/framework/src/onos/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv4ErrorSpec.java b/framework/src/onos/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv4ErrorSpec.java new file mode 100644 index 00000000..326b66b7 --- /dev/null +++ b/framework/src/onos/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv4ErrorSpec.java @@ -0,0 +1,160 @@ +/* + * 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. + */ +package org.onosproject.pcepio.types; + +import org.jboss.netty.buffer.ChannelBuffer; +import org.onosproject.pcepio.protocol.PcepVersion; + +import com.google.common.base.MoreObjects; + +/** + * Provides Pcep Rsvp Ipv4 Error Spec. + */ +public class PcepRsvpIpv4ErrorSpec implements PcepRsvpErrorSpec { + + /* + RSVP error spec object header. + 0 1 2 3 + +-------------+-------------+-------------+-------------+ + | Length (bytes) | Class-Num | C-Type | + +-------------+-------------+-------------+-------------+ + | | + // (Object contents) // + | | + +-------------+-------------+-------------+-------------+ + + Ref : ERROR_SPEC @ RFC2205 + + IPv4 ERROR_SPEC object: Class = 6, C-Type = 1 + +-------------+-------------+-------------+-------------+ + | IPv4 Error Node Address (4 bytes) | + +-------------+-------------+-------------+-------------+ + | Flags | Error Code | Error Value | + +-------------+-------------+-------------+-------------+ + + */ + + PcepRsvpSpecObjHeader objHeader; + public static final byte CLASS_NUM = 0x06; + public static final byte CLASS_TYPE = 0x01; + public static final byte CLASS_LENGTH = 0x0c; + private int ipv4Addr; + private byte flags; + private byte errCode; + private short errValue; + + /** + * Constructor to initialize obj header, ipv4 addr, flags, err code and err value. + * + * @param objHeader rsvp ipv4 error spec object header + * @param ipv4Addr ipv4 address + * @param flags flags value + * @param errCode error code value + * @param errValue error value + */ + public PcepRsvpIpv4ErrorSpec(PcepRsvpSpecObjHeader objHeader, int ipv4Addr, byte flags, byte errCode, + short errValue) { + this.objHeader = objHeader; + this.ipv4Addr = ipv4Addr; + this.flags = flags; + this.errCode = errCode; + this.errValue = errValue; + } + + /** + * Constructor to initialize ipv4 address, flags, err code and err value. + * + * @param ipv4Addr ipv4 address + * @param flags flags value + * @param errCode error code + * @param errValue error value + */ + public PcepRsvpIpv4ErrorSpec(int ipv4Addr, byte flags, byte errCode, short errValue) { + this.objHeader = new PcepRsvpSpecObjHeader(CLASS_LENGTH, CLASS_NUM, CLASS_TYPE); + this.ipv4Addr = ipv4Addr; + this.flags = flags; + this.errCode = errCode; + this.errValue = errValue; + } + + @Override + public int write(ChannelBuffer cb) { + int objLenIndex = objHeader.write(cb); + cb.writeInt(ipv4Addr); + cb.writeByte(flags); + cb.writeByte(errCode); + cb.writeShort(errValue); + short objLen = (short) (cb.writerIndex() - objLenIndex); + cb.setShort(objLenIndex, objLen); + return objLen; + } + + /** + * Reads PCPE RSVP error spec from channel buffer and returns PCEP rsvp IPv4 error spec object. + * + * @param cb channel buffer + * @return PCEP rsvp IPv4 error spec object + */ + public static PcepRsvpErrorSpec read(ChannelBuffer cb) { + PcepRsvpSpecObjHeader objHeader; + int ipv4Addr; + byte flags; + byte errCode; + short errValue; + + objHeader = PcepRsvpSpecObjHeader.read(cb); + ipv4Addr = cb.readInt(); + flags = cb.readByte(); + errCode = cb.readByte(); + errValue = cb.readShort(); + return new PcepRsvpIpv4ErrorSpec(objHeader, ipv4Addr, flags, errCode, errValue); + } + + @Override + public PcepVersion getVersion() { + return PcepVersion.PCEP_1; + } + + @Override + public short getType() { + return StatefulRsvpErrorSpecTlv.TYPE; + } + + @Override + public short getLength() { + return CLASS_LENGTH; + } + + @Override + public byte getClassNum() { + return CLASS_NUM; + } + + @Override + public byte getClassType() { + return CLASS_TYPE; + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(getClass()) + .add("IPv4Address", ipv4Addr) + .add("flags", flags) + .add("errorCode", errCode) + .add("errorValue", errValue) + .toString(); + } +} |