2 * Copyright 2015 Open Networking Laboratory
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.onosproject.pcepio.protocol.ver1;
19 import org.jboss.netty.buffer.ChannelBuffer;
20 import org.onosproject.pcepio.exceptions.PcepParseException;
21 import org.onosproject.pcepio.protocol.PcepFecObjectIPv4UnnumberedAdjacency;
22 import org.onosproject.pcepio.protocol.PcepVersion;
23 import org.onosproject.pcepio.types.PcepObjectHeader;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
27 import com.google.common.base.MoreObjects;
30 * Provides Pcep Fec Object IPv4 Unnumbered Adjacency object.
32 public class PcepFecObjectIPv4UnnumberedAdjacencyVer1 implements PcepFecObjectIPv4UnnumberedAdjacency {
35 * ref : draft-zhao-pce-pcep-extension-for-pce-controller-01 , section : 7.5
38 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
39 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
41 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
42 | Local Interface ID |
43 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
45 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
46 | Remote Interface ID |
47 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
49 FEC Object-Type is 5, Unnumbered Adjacency with IPv4 NodeIDs
51 protected static final Logger log = LoggerFactory.getLogger(PcepFecObjectIPv4UnnumberedAdjacencyVer1.class);
53 public static final byte FEC_OBJ_TYPE = 5;
54 public static final byte FEC_OBJ_CLASS = 63; //to be defined
55 public static final byte FEC_OBJECT_VERSION = 1;
56 public static final short FEC_OBJ_MINIMUM_LENGTH = 20;
57 public static final int MINIMUM_COMMON_HEADER_LENGTH = 4;
59 static final PcepObjectHeader DEFAULT_FEC_OBJECT_HEADER = new PcepObjectHeader(FEC_OBJ_CLASS, FEC_OBJ_TYPE,
60 PcepObjectHeader.REQ_OBJ_OPTIONAL_PROCESS, PcepObjectHeader.RSP_OBJ_PROCESSED, FEC_OBJ_MINIMUM_LENGTH);
62 private PcepObjectHeader fecObjHeader;
63 private int localNodeID;
64 private int localInterfaceID;
65 private int remoteNodeID;
66 private int remoteInterfaceID;
69 * Constructor to initialize parameter for PCEP fec object.
71 * @param fecObjHeader fec object header
72 * @param localNodeID local node ID
73 * @param localInterfaceID local interface ID
74 * @param remoteNodeID remote node ID
75 * @param remoteInterfaceID remote interface ID
77 public PcepFecObjectIPv4UnnumberedAdjacencyVer1(PcepObjectHeader fecObjHeader, int localNodeID,
78 int localInterfaceID, int remoteNodeID, int remoteInterfaceID) {
79 this.fecObjHeader = fecObjHeader;
80 this.localNodeID = localNodeID;
81 this.localInterfaceID = localInterfaceID;
82 this.remoteNodeID = remoteNodeID;
83 this.remoteInterfaceID = remoteInterfaceID;
89 * @param obj object header
91 public void setFecIpv4UnnumberedAdjacencyObjHeader(PcepObjectHeader obj) {
92 this.fecObjHeader = obj;
96 public void setLocalNodeID(int localNodeID) {
97 this.localNodeID = localNodeID;
101 * Returns Object Header.
103 * @return fecObjHeader fec object header
105 public PcepObjectHeader getFecIpv4UnnumberedAdjacencyObjHeader() {
106 return this.fecObjHeader;
110 public int getLocalNodeID() {
111 return this.localNodeID;
115 public int getLocalInterfaceID() {
116 return this.localInterfaceID;
120 public void setLocalInterfaceID(int localInterfaceID) {
121 this.localInterfaceID = localInterfaceID;
125 public int getRemoteNodeID() {
126 return this.remoteNodeID;
130 public void setRemoteNodeID(int remoteNodeID) {
131 this.remoteNodeID = remoteNodeID;
135 public int getRemoteInterfaceID() {
136 return this.remoteInterfaceID;
140 public void setRemoteInterfaceID(int remoteInterfaceID) {
141 this.remoteInterfaceID = remoteInterfaceID;
145 * Reads from channel buffer and returns object of PcepFecObjectIPv4UnnumberedAdjacency.
147 * @param cb of channel buffer
148 * @return object of PcepFecObjectIPv4UnnumberedAdjacency
149 * @throws PcepParseException when fails to read from channel buffer
151 public static PcepFecObjectIPv4UnnumberedAdjacency read(ChannelBuffer cb) throws PcepParseException {
153 PcepObjectHeader fecObjHeader;
155 int localInterfaceID;
157 int remoteInterfaceID;
159 fecObjHeader = PcepObjectHeader.read(cb);
161 //take only FEC IPv4 Unnumbered Adjacency Object buffer.
162 ChannelBuffer tempCb = cb.readBytes(fecObjHeader.getObjLen() - MINIMUM_COMMON_HEADER_LENGTH);
163 localNodeID = tempCb.readInt();
164 localInterfaceID = tempCb.readInt();
165 remoteNodeID = tempCb.readInt();
166 remoteInterfaceID = tempCb.readInt();
168 return new PcepFecObjectIPv4UnnumberedAdjacencyVer1(fecObjHeader, localNodeID, localInterfaceID, remoteNodeID,
173 public int write(ChannelBuffer cb) throws PcepParseException {
175 int objStartIndex = cb.writerIndex();
177 //Write common header
178 int objLenIndex = fecObjHeader.write(cb);
179 cb.writeInt(localNodeID);
180 cb.writeInt(localInterfaceID);
181 cb.writeInt(remoteNodeID);
182 cb.writeInt(remoteInterfaceID);
184 //Now write FEC IPv4 Unnumbered Adjacency Object Length
185 cb.setShort(objLenIndex, (short) (cb.writerIndex() - objStartIndex));
187 return cb.writerIndex();
191 * Builder class for PCEP Fec object IPv4 unnumbered Adjacency.
193 public static class Builder implements PcepFecObjectIPv4UnnumberedAdjacency.Builder {
194 private boolean bIsHeaderSet = false;
195 private boolean bIsLocalNodeIDset = false;
196 private boolean bIsLocalInterfaceIDset = false;
197 private boolean bIsRemoteNodeIDset = false;
198 private boolean bIsRemoteInterfaceIDset = false;
200 private PcepObjectHeader fecObjHeader;
201 private int localNodeID;
202 private int localInterfaceID;
203 private int remoteNodeID;
204 private int remoteInterfaceID;
206 private boolean bIsPFlagSet = false;
207 private boolean bPFlag;
209 private boolean bIsIFlagSet = false;
210 private boolean bIFlag;
213 public PcepFecObjectIPv4UnnumberedAdjacency build() throws PcepParseException {
214 PcepObjectHeader fecObjHeader = this.bIsHeaderSet ? this.fecObjHeader : DEFAULT_FEC_OBJECT_HEADER;
216 if (!this.bIsLocalNodeIDset) {
217 throw new PcepParseException(
218 " Local Node ID not set while building PcepFecObjectIPv4UnnumberedAdjacency object.");
220 if (!this.bIsLocalInterfaceIDset) {
221 throw new PcepParseException(
222 " Local Interface ID not set while building PcepFecObjectIPv4UnnumberedAdjacency object.");
224 if (!this.bIsRemoteNodeIDset) {
225 throw new PcepParseException(
226 " Remote Node ID not set while building PcepFecObjectIPv4UnnumberedAdjacency object.");
228 if (!this.bIsRemoteInterfaceIDset) {
229 throw new PcepParseException(
230 " Remote Interface ID not set while building PcepFecObjectIPv4UnnumberedAdjacency object.");
233 fecObjHeader.setPFlag(bPFlag);
236 fecObjHeader.setIFlag(bIFlag);
238 return new PcepFecObjectIPv4UnnumberedAdjacencyVer1(fecObjHeader, this.localNodeID, this.localInterfaceID,
239 this.remoteNodeID, this.remoteInterfaceID);
243 public Builder setPFlag(boolean value) {
245 this.bIsPFlagSet = true;
250 public Builder setIFlag(boolean value) {
252 this.bIsIFlagSet = true;
257 public PcepObjectHeader getFecIpv4UnnumberedAdjacencyObjHeader() {
258 return this.fecObjHeader;
262 public Builder setFecIpv4UnnumberedAdjacencyObjHeader(PcepObjectHeader obj) {
263 this.fecObjHeader = obj;
264 this.bIsHeaderSet = true;
269 public int getLocalNodeID() {
270 return this.localNodeID;
274 public Builder setLocalNodeID(int value) {
275 this.localNodeID = value;
276 this.bIsLocalNodeIDset = true;
281 public int getLocalInterfaceID() {
282 return this.localInterfaceID;
286 public Builder setLocalInterfaceID(int value) {
287 this.localInterfaceID = value;
288 this.bIsLocalInterfaceIDset = true;
293 public int getRemoteNodeID() {
294 return this.remoteNodeID;
298 public Builder setRemoteNodeID(int value) {
299 this.remoteNodeID = value;
300 this.bIsRemoteNodeIDset = true;
305 public int getRemoteInterfaceID() {
306 return this.remoteInterfaceID;
310 public Builder setRemoteInterfaceID(int value) {
311 this.remoteInterfaceID = value;
312 this.bIsRemoteInterfaceIDset = true;
318 public PcepVersion getVersion() {
319 return PcepVersion.PCEP_1;
323 public int getType() {
328 public String toString() {
329 return MoreObjects.toStringHelper(getClass())
330 .add("LocalNodeID: ", localNodeID)
331 .add("LocalInterfaceID: ", localInterfaceID).add("RemoteNodeID: ", remoteNodeID)
332 .add("RemoteInterfaceID: ", remoteInterfaceID).toString();