blob: fb4ceeff83ce72744c1d697d2f5ebefbf5fd22d8 [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 */
16
17package org.onosproject.pcepio.types;
18
19import java.util.Objects;
20
21import org.jboss.netty.buffer.ChannelBuffer;
22import org.onosproject.pcepio.protocol.PcepVersion;
23import org.slf4j.Logger;
24import org.slf4j.LoggerFactory;
25
26import com.google.common.base.MoreObjects;
27
28/**
29 * NexthopUnnumberedIPv4IDTlv provides the next node's ID and Interface ID.
30 */
31public class NexthopUnnumberedIPv4IDTlv implements PcepValueType {
32
33 /*
34 Reference : draft-zhao-pce-pcep-extension-for-pce-controller-01.
35
36 0 1 2 3
37 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
38 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
39 | Type=TBD | Length = 12 |
40 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
41 | Node-ID |
42 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
43 | Interface ID |
44 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
45
46 NEXTHOP-UNNUMBERED-IPV4-ID TLV
47
48 */
49 protected static final Logger log = LoggerFactory.getLogger(NexthopUnnumberedIPv4IDTlv.class);
50
51 public static final short TYPE = 1; //to be defined
52 //Length is header + value
53 public static final short LENGTH = 12;
54
55 private final int nodeID;
56 private final int interfaceID;
57
58 /**
59 * constructor to initialize nodeID and interfaceID.
60 *
61 * @param nodeID node ID
62 * @param interfaceID interface ID
63 */
64 public NexthopUnnumberedIPv4IDTlv(int nodeID, int interfaceID) {
65 this.nodeID = nodeID;
66 this.interfaceID = interfaceID;
67 }
68
69 /**
70 * Returns new object of NexthopUnnumberedIPv4IDTlv.
71 *
72 * @param nodeID node ID
73 * @param interfaceID interface ID
74 * @return NexthopUnnumberedIPv4IDTlv
75 */
76 public static NexthopUnnumberedIPv4IDTlv of(int nodeID, int interfaceID) {
77 return new NexthopUnnumberedIPv4IDTlv(nodeID, interfaceID);
78 }
79
80 /**
81 * Returns Node Id.
82 *
83 * @return node ID
84 */
85 public int getNodeID() {
86 return nodeID;
87 }
88
89 /**
90 * Returns Interface Id.
91 *
92 * @return interface ID
93 */
94 public int getInterfaceID() {
95 return interfaceID;
96 }
97
98 @Override
99 public PcepVersion getVersion() {
100 return PcepVersion.PCEP_1;
101 }
102
103 @Override
104 public short getType() {
105 return TYPE;
106 }
107
108 @Override
109 public short getLength() {
110 return LENGTH;
111 }
112
113 @Override
114 public int hashCode() {
115 return Objects.hash(nodeID, interfaceID);
116 }
117
118 @Override
119 public boolean equals(Object obj) {
120 if (this == obj) {
121 return true;
122 }
123 if (obj instanceof NexthopUnnumberedIPv4IDTlv) {
124 NexthopUnnumberedIPv4IDTlv other = (NexthopUnnumberedIPv4IDTlv) obj;
125 return Objects.equals(this.nodeID, other.nodeID) && Objects.equals(this.interfaceID, other.interfaceID);
126 }
127 return false;
128 }
129
130 @Override
131 public int write(ChannelBuffer c) {
132 int iLenStartIndex = c.writerIndex();
133 c.writeShort(TYPE);
134 c.writeShort(LENGTH);
135
136 c.writeInt(nodeID);
137 c.writeInt(interfaceID);
138
139 return c.writerIndex() - iLenStartIndex;
140 }
141
142 /**
143 * Reads the channel buffer and returns object of NexthopUnnumberedIPv4IDTlv.
144 *
145 * @param cb type of channel buffer
146 * @return object of NexthopUnnumberedIPv4IDTlv
147 */
148 public static NexthopUnnumberedIPv4IDTlv read(ChannelBuffer cb) {
149 int nodeID = cb.readInt();
150 int interfaceID = cb.readInt();
151 return new NexthopUnnumberedIPv4IDTlv(nodeID, interfaceID);
152 }
153
154 @Override
155 public String toString() {
Sho SHIMIZU7cdbcf72015-09-03 14:43:05 -0700156 return MoreObjects.toStringHelper(getClass())
157 .add("Type", TYPE)
158 .add("Length", LENGTH)
159 .add("NodeId", nodeID)
160 .add("InterfaceId", interfaceID)
161 .toString();
Sho SHIMIZUe81e4db2015-09-03 09:44:38 -0700162 }
163}