0de5543e03aeeb693e32c67898359f3a9760b469
[onosfw.git] /
1 package org.onosproject.pcepio.types;
2
3 import org.jboss.netty.buffer.ChannelBuffer;
4 import org.onosproject.pcepio.protocol.PcepVersion;
5
6 import com.google.common.base.MoreObjects;
7
8 /**
9  * Provides Pcep Rsvp Ipv6 Error Spec.
10  */
11 public class PcepRsvpIpv6ErrorSpec implements PcepRsvpErrorSpec {
12
13     /*
14         0             1              2             3
15     +-------------+-------------+-------------+-------------+
16     |       Length (bytes)      |  Class-Num  |   C-Type    |
17     +-------------+-------------+-------------+-------------+
18     |                                                       |
19     //                  (Object contents)                   //
20     |                                                       |
21     +-------------+-------------+-------------+-------------+
22
23     Ref :  ERROR_SPEC @ RFC2205
24
25     IPv6 ERROR_SPEC object: Class = 6, C-Type = 2
26     +-------------+-------------+-------------+-------------+
27     |                                                       |
28     +                                                       +
29     |                                                       |
30     +           IPv6 Error Node Address (16 bytes)          +
31     |                                                       |
32     +                                                       +
33     |                                                       |
34     +-------------+-------------+-------------+-------------+
35     |    Flags    |  Error Code |        Error Value        |
36     +-------------+-------------+-------------+-------------+     */
37
38     PcepRsvpSpecObjHeader objHeader;
39     public static final byte CLASS_NUM = 0x06;
40     public static final byte CLASS_TYPE = 0x02;
41     public static final byte CLASS_LENGTH = 0x18;
42     public static final byte IPV6_LEN = 0x10;
43
44     private byte[] ipv6Addr;
45     private byte flags;
46     private byte errCode;
47     private short errValue;
48
49     /**
50      * Constructor to initialize obj header, ipv6 addr, flags, err code and err value.
51      *
52      * @param objHeader rsvp ipv6 error spec object header
53      * @param ipv6Addr ipv6 address
54      * @param flags flags value
55      * @param errCode error code
56      * @param errValue error value
57      */
58     public PcepRsvpIpv6ErrorSpec(PcepRsvpSpecObjHeader objHeader, byte[] ipv6Addr, byte flags, byte errCode,
59             short errValue) {
60         this.objHeader = objHeader;
61         this.ipv6Addr = ipv6Addr;
62         this.flags = flags;
63         this.errCode = errCode;
64         this.errValue = errValue;
65     }
66
67     /**
68      * Constructor to initialize ipv6 addr, flags, err code and err value.
69      *
70      * @param ipv6Addr ipv6 address
71      * @param flags flags value
72      * @param errCode error code
73      * @param errValue error value
74      */
75     public PcepRsvpIpv6ErrorSpec(byte[] ipv6Addr, byte flags, byte errCode, short errValue) {
76         this.objHeader = new PcepRsvpSpecObjHeader(CLASS_LENGTH, CLASS_NUM, CLASS_TYPE);
77         this.ipv6Addr = ipv6Addr;
78         this.flags = flags;
79         this.errCode = errCode;
80         this.errValue = errValue;
81     }
82
83     @Override
84     public int write(ChannelBuffer cb) {
85         int objLenIndex = objHeader.write(cb);
86         cb.writeBytes(ipv6Addr);
87         cb.writeByte(flags);
88         cb.writeByte(errCode);
89         cb.writeShort(errValue);
90         short objLen = (short) (cb.writerIndex() - objLenIndex);
91         cb.setShort(objLenIndex, objLen);
92         return objLen;
93     }
94
95     /**
96      * Returns PCEP rsvp IPv6 error spce object.
97      *
98      * @param cb channel buffer
99      * @return PCEP rsvp IPv6 error spce object
100      */
101     public static PcepRsvpErrorSpec read(ChannelBuffer cb) {
102         PcepRsvpSpecObjHeader objHeader;
103         byte[] ipv6Addr = new byte[IPV6_LEN];
104         byte flags;
105         byte errCode;
106         short errValue;
107
108         objHeader = PcepRsvpSpecObjHeader.read(cb);
109         cb.readBytes(ipv6Addr, 0, IPV6_LEN);
110         flags = cb.readByte();
111         errCode = cb.readByte();
112         errValue = cb.readShort();
113         return new PcepRsvpIpv6ErrorSpec(objHeader, ipv6Addr, flags, errCode, errValue);
114     }
115
116     @Override
117     public PcepVersion getVersion() {
118         return PcepVersion.PCEP_1;
119     }
120
121     @Override
122     public short getType() {
123         return StatefulRsvpErrorSpecTlv.TYPE;
124     }
125
126     @Override
127     public short getLength() {
128         return CLASS_LENGTH;
129     }
130
131     @Override
132     public byte getClassNum() {
133         return CLASS_NUM;
134     }
135
136     @Override
137     public byte getClassType() {
138         return CLASS_TYPE;
139     }
140
141     @Override
142     public String toString() {
143         return MoreObjects.toStringHelper(getClass())
144                 .add("IPv6Address", ipv6Addr)
145                 .add("flags", flags)
146                 .add("errorCode", errCode)
147                 .add("errorValue", errValue)
148                 .toString();
149     }
150 }