| /* |
| * Copyright 2015-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.pcepio.types; |
| |
| import org.jboss.netty.buffer.ChannelBuffer; |
| import org.onosproject.pcepio.protocol.PcepVersion; |
| |
| import com.google.common.base.MoreObjects; |
| |
| /** |
| * Provides Pcep Rsvp Ipv6 Error Spec. |
| */ |
| public class PcepRsvpIpv6ErrorSpec implements PcepRsvpErrorSpec { |
| |
| /* |
| 0 1 2 3 |
| +-------------+-------------+-------------+-------------+ |
| | Length (bytes) | Class-Num | C-Type | |
| +-------------+-------------+-------------+-------------+ |
| | | |
| // (Object contents) // |
| | | |
| +-------------+-------------+-------------+-------------+ |
| |
| Ref : ERROR_SPEC @ RFC2205 |
| |
| IPv6 ERROR_SPEC object: Class = 6, C-Type = 2 |
| +-------------+-------------+-------------+-------------+ |
| | | |
| + + |
| | | |
| + IPv6 Error Node Address (16 bytes) + |
| | | |
| + + |
| | | |
| +-------------+-------------+-------------+-------------+ |
| | Flags | Error Code | Error Value | |
| +-------------+-------------+-------------+-------------+ */ |
| |
| PcepRsvpSpecObjHeader objHeader; |
| public static final byte CLASS_NUM = 0x06; |
| public static final byte CLASS_TYPE = 0x02; |
| public static final byte CLASS_LENGTH = 0x18; |
| public static final byte IPV6_LEN = 0x10; |
| |
| private byte[] ipv6Addr; |
| private byte flags; |
| private byte errCode; |
| private short errValue; |
| |
| /** |
| * Constructor to initialize obj header, ipv6 addr, flags, err code and err value. |
| * |
| * @param objHeader rsvp ipv6 error spec object header |
| * @param ipv6Addr ipv6 address |
| * @param flags flags value |
| * @param errCode error code |
| * @param errValue error value |
| */ |
| public PcepRsvpIpv6ErrorSpec(PcepRsvpSpecObjHeader objHeader, byte[] ipv6Addr, byte flags, byte errCode, |
| short errValue) { |
| this.objHeader = objHeader; |
| this.ipv6Addr = ipv6Addr; |
| this.flags = flags; |
| this.errCode = errCode; |
| this.errValue = errValue; |
| } |
| |
| /** |
| * Constructor to initialize ipv6 addr, flags, err code and err value. |
| * |
| * @param ipv6Addr ipv6 address |
| * @param flags flags value |
| * @param errCode error code |
| * @param errValue error value |
| */ |
| public PcepRsvpIpv6ErrorSpec(byte[] ipv6Addr, byte flags, byte errCode, short errValue) { |
| this.objHeader = new PcepRsvpSpecObjHeader(CLASS_LENGTH, CLASS_NUM, CLASS_TYPE); |
| this.ipv6Addr = ipv6Addr; |
| this.flags = flags; |
| this.errCode = errCode; |
| this.errValue = errValue; |
| } |
| |
| @Override |
| public int write(ChannelBuffer cb) { |
| int objLenIndex = objHeader.write(cb); |
| cb.writeBytes(ipv6Addr); |
| cb.writeByte(flags); |
| cb.writeByte(errCode); |
| cb.writeShort(errValue); |
| short objLen = (short) (cb.writerIndex() - objLenIndex); |
| cb.setShort(objLenIndex, objLen); |
| return objLen; |
| } |
| |
| /** |
| * Returns PCEP rsvp IPv6 error spce object. |
| * |
| * @param cb channel buffer |
| * @return PCEP rsvp IPv6 error spce object |
| */ |
| public static PcepRsvpErrorSpec read(ChannelBuffer cb) { |
| PcepRsvpSpecObjHeader objHeader; |
| byte[] ipv6Addr = new byte[IPV6_LEN]; |
| byte flags; |
| byte errCode; |
| short errValue; |
| |
| objHeader = PcepRsvpSpecObjHeader.read(cb); |
| cb.readBytes(ipv6Addr, 0, IPV6_LEN); |
| flags = cb.readByte(); |
| errCode = cb.readByte(); |
| errValue = cb.readShort(); |
| return new PcepRsvpIpv6ErrorSpec(objHeader, ipv6Addr, 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("IPv6Address", ipv6Addr) |
| .add("flags", flags) |
| .add("errorCode", errCode) |
| .add("errorValue", errValue) |
| .toString(); |
| } |
| } |