blob: 07cfea7f47b37e0e8fa13d603880239ed7792a3c [file] [log] [blame]
Sho SHIMIZUe81e4db2015-09-03 09:44:38 -07001/*
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 */
16package org.onosproject.pcepio.types;
17
Satish Kff6c11c2015-11-22 13:13:28 +053018import java.util.Arrays;
Sho SHIMIZUe81e4db2015-09-03 09:44:38 -070019
20import org.jboss.netty.buffer.ChannelBuffer;
21import org.onosproject.pcepio.protocol.PcepVersion;
22import org.slf4j.Logger;
23import org.slf4j.LoggerFactory;
24
25import com.google.common.base.MoreObjects;
26import com.google.common.base.MoreObjects.ToStringHelper;
27
28/**
29 * Provides IGP Link Metric .
30 */
31public class IGPMetricTlv implements PcepValueType {
32
33 /* Reference :[I-D.ietf-idr-ls-distribution] /3.3.2.4
34 * 0 1 2 3
35 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
36 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
37 | Type=TDB40 | Length |
38 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
39 // IGP Link Metric (variable length) //
40 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
41 */
42
43 protected static final Logger log = LoggerFactory.getLogger(IGPMetricTlv.class);
44
45 public static final short TYPE = 1095; //TODO:NEED TO HANDLE TDB40
46 private short hLength;
47
48 private final byte[] rawValue;
49
50 /**
51 * Constructor to initialize raw value.
52 *
53 * @param rawValue IGP Link Metric
54 * @param hLength length
55 */
56 public IGPMetricTlv(byte[] rawValue, short hLength) {
57 this.rawValue = rawValue;
58 this.hLength = hLength;
59 }
60
61 /**
62 * Returns newly created IGPMetricTlv object.
63 *
64 * @param raw value of IGP Link Metric
65 * @param hLength length
66 * @return object of IGPMetricTlv
67 */
68 public static IGPMetricTlv of(final byte[] raw, short hLength) {
69 return new IGPMetricTlv(raw, hLength);
70 }
71
72 /**
73 * Returns value of IGP Link Metric.
74 *
75 * @return rawValue of IGP Link Metric
76 */
77 public byte[] getValue() {
78 return rawValue;
79 }
80
81 @Override
82 public PcepVersion getVersion() {
83 return PcepVersion.PCEP_1;
84 }
85
86 @Override
87 public short getType() {
88 return TYPE;
89 }
90
91 @Override
92 public short getLength() {
93 return hLength;
94 }
95
96 @Override
97 public int hashCode() {
Satish Kff6c11c2015-11-22 13:13:28 +053098 return Arrays.hashCode(rawValue);
Sho SHIMIZUe81e4db2015-09-03 09:44:38 -070099 }
100
101 @Override
102 public boolean equals(Object obj) {
103 if (this == obj) {
104 return true;
105 }
106 if (obj instanceof IGPMetricTlv) {
107 IGPMetricTlv other = (IGPMetricTlv) obj;
Satish Kff6c11c2015-11-22 13:13:28 +0530108 return Arrays.equals(rawValue, other.rawValue);
Sho SHIMIZUe81e4db2015-09-03 09:44:38 -0700109 }
110 return false;
111 }
112
113 @Override
114 public int write(ChannelBuffer c) {
115 int iLenStartIndex = c.writerIndex();
116 c.writeShort(TYPE);
117 c.writeShort(hLength);
118 c.writeBytes(rawValue);
119 return c.writerIndex() - iLenStartIndex;
120 }
121
122 /**
123 * Reads the channel buffer and returns object of IGPMetricTlv.
124 *
125 * @param c input channel buffer
126 * @param hLength length
127 * @return object of IGPMetricTlv
128 */
129 public static PcepValueType read(ChannelBuffer c, short hLength) {
130 byte[] iIGPMetric = new byte[hLength];
131 c.readBytes(iIGPMetric, 0, hLength);
132 return new IGPMetricTlv(iIGPMetric, hLength);
133 }
134
135 @Override
136 public String toString() {
137 ToStringHelper toStrHelper = MoreObjects.toStringHelper(getClass());
138
139 toStrHelper.add("Type", TYPE);
140 toStrHelper.add("Length", hLength);
141
142 StringBuffer result = new StringBuffer();
143 for (byte b : rawValue) {
144 result.append(String.format("%02X ", b));
145 }
146 toStrHelper.add("Value", result);
147
148 return toStrHelper.toString();
149 }
150}