db1acf09cb2b9fb93b8d9f547e6890bae8bca7e8
[onosfw.git] /
1 /*
2  * Copyright 2015 Open Networking Laboratory
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.onosproject.pcepio.types;
17
18 import java.util.Objects;
19
20 import org.jboss.netty.buffer.ChannelBuffer;
21 import org.onosproject.pcepio.protocol.PcepVersion;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24
25 import com.google.common.base.MoreObjects;
26
27 /**
28  * Provide the Maximum Link Bandwidth.
29  */
30 public class MaximumLinkBandwidthTlv implements PcepValueType {
31
32     /* Reference :[RFC5305]/3.3.
33      * 0                   1                   2                   3
34       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
35      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
36      |              Type=[TDB34]      |             Length=4         |
37      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
38      |               Maximum  Link Bandwidth                         |
39      +-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-++-+-+-+-
40      */
41
42     protected static final Logger log = LoggerFactory.getLogger(MaximumLinkBandwidthTlv.class);
43
44     public static final short TYPE = 9; //TDB34
45     public static final short LENGTH = 4;
46
47     private final int rawValue;
48
49     /**
50      * Constructor to initialize rawValue.
51      *
52      * @param rawValue Maximum-Link-Bandwidth
53      */
54
55     public MaximumLinkBandwidthTlv(int rawValue) {
56         this.rawValue = rawValue;
57     }
58
59     /**
60      * Returns newly created MaximumLinkBandwidthTlv object.
61      *
62      * @param raw value of Maximum-Link-Bandwidth
63      * @return object of MaximumLinkBandwidthTlv
64      */
65     public static MaximumLinkBandwidthTlv of(final int raw) {
66         return new MaximumLinkBandwidthTlv(raw);
67     }
68
69     /**
70      * Returns value of Maximum  Link Bandwidth.
71      *
72      * @return rawValue Maximum  Link Bandwidth
73      */
74     public int getInt() {
75         return rawValue;
76     }
77
78     @Override
79     public PcepVersion getVersion() {
80         return PcepVersion.PCEP_1;
81     }
82
83     @Override
84     public short getType() {
85         return TYPE;
86     }
87
88     @Override
89     public short getLength() {
90         return LENGTH;
91     }
92
93     @Override
94     public int hashCode() {
95         return Objects.hash(rawValue);
96     }
97
98     @Override
99     public boolean equals(Object obj) {
100         if (this == obj) {
101             return true;
102         }
103         if (obj instanceof MaximumLinkBandwidthTlv) {
104             MaximumLinkBandwidthTlv other = (MaximumLinkBandwidthTlv) obj;
105             return Objects.equals(rawValue, other.rawValue);
106         }
107         return false;
108     }
109
110     @Override
111     public int write(ChannelBuffer c) {
112         int iLenStartIndex = c.writerIndex();
113         c.writeShort(TYPE);
114         c.writeShort(LENGTH);
115         c.writeInt(rawValue);
116         return c.writerIndex() - iLenStartIndex;
117     }
118
119     /**
120      * Reads the channel buffer and returns object of MaximumLinkBandwidthTlv.
121      *
122      * @param c input channel buffer
123      * @return object of MaximumLinkBandwidthTlv
124      */
125     public static MaximumLinkBandwidthTlv read(ChannelBuffer c) {
126         return MaximumLinkBandwidthTlv.of(c.readInt());
127     }
128
129     @Override
130     public String toString() {
131         return MoreObjects.toStringHelper(getClass())
132                 .add("Type", TYPE)
133                 .add("Length", LENGTH)
134                 .add("Value", rawValue)
135                 .toString();
136     }
137 }