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.PcepFecObjectIPv4;
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 object.
32 public class PcepFecObjectIPv4Ver1 implements PcepFecObjectIPv4 {
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
43 FEC Object-Type is 1 IPv4 Node ID
45 protected static final Logger log = LoggerFactory.getLogger(PcepFecObjectIPv4Ver1.class);
47 public static final byte FEC_OBJ_TYPE = 1;
48 public static final byte FEC_OBJ_CLASS = 63; //to be defined
49 public static final byte FEC_OBJECT_VERSION = 1;
50 public static final short FEC_OBJ_MINIMUM_LENGTH = 8;
51 public static final int MINIMUM_COMMON_HEADER_LENGTH = 4;
53 static final PcepObjectHeader DEFAULT_FEC_OBJECT_HEADER = new PcepObjectHeader(FEC_OBJ_CLASS, FEC_OBJ_TYPE,
54 PcepObjectHeader.REQ_OBJ_OPTIONAL_PROCESS, PcepObjectHeader.RSP_OBJ_PROCESSED, FEC_OBJ_MINIMUM_LENGTH);
56 private PcepObjectHeader fecObjHeader;
60 * Constructor to initialize parameters for PCEP fec object.
62 * @param fecObjHeader fec object header
63 * @param nodeID node id
65 public PcepFecObjectIPv4Ver1(PcepObjectHeader fecObjHeader, int nodeID) {
66 this.fecObjHeader = fecObjHeader;
71 * Sets the Object Header.
73 * @param obj object header
75 public void setFecIpv4ObjHeader(PcepObjectHeader obj) {
76 this.fecObjHeader = obj;
80 public void setNodeID(int nodeID) {
85 * Returns Object Header.
87 * @return fecObjHeader fec object header
89 public PcepObjectHeader getFecIpv4ObjHeader() {
90 return this.fecObjHeader;
94 public int getNodeID() {
99 * Reads from channel buffer and returns object of PcepFecObjectIPv4.
101 * @param cb of channel buffer
102 * @return object of PcepFecObjectIPv4
103 * @throws PcepParseException when fails to read from channel buffer
105 public static PcepFecObjectIPv4 read(ChannelBuffer cb) throws PcepParseException {
107 PcepObjectHeader fecObjHeader;
109 fecObjHeader = PcepObjectHeader.read(cb);
110 nodeID = cb.readInt();
111 return new PcepFecObjectIPv4Ver1(fecObjHeader, nodeID);
115 public int write(ChannelBuffer cb) throws PcepParseException {
117 int objStartIndex = cb.writerIndex();
119 //write common header
120 int objLenIndex = fecObjHeader.write(cb);
123 //now write FEC IPv4 Object Length
124 cb.setShort(objLenIndex, (short) (cb.writerIndex() - objStartIndex));
125 return cb.writerIndex();
129 * Builder class for PCEP fec pobject IPv4.
131 public static class Builder implements PcepFecObjectIPv4.Builder {
132 private boolean bIsHeaderSet = false;
133 private boolean bIsNodeIdset = false;
135 private PcepObjectHeader fecObjHeader;
138 private boolean bIsPFlagSet = false;
139 private boolean bPFlag;
141 private boolean bIsIFlagSet = false;
142 private boolean bIFlag;
145 public PcepFecObjectIPv4 build() throws PcepParseException {
146 PcepObjectHeader fecObjHeader = this.bIsHeaderSet ? this.fecObjHeader : DEFAULT_FEC_OBJECT_HEADER;
148 if (!this.bIsNodeIdset) {
149 throw new PcepParseException("NodeID not set while building PcepFecObjectIPv4 object.");
152 fecObjHeader.setPFlag(bPFlag);
155 fecObjHeader.setIFlag(bIFlag);
157 return new PcepFecObjectIPv4Ver1(fecObjHeader, this.nodeID);
161 public Builder setPFlag(boolean value) {
163 this.bIsPFlagSet = true;
168 public Builder setIFlag(boolean value) {
170 this.bIsIFlagSet = true;
175 public PcepObjectHeader getFecIpv4ObjHeader() {
176 return this.fecObjHeader;
180 public Builder setFecIpv4ObjHeader(PcepObjectHeader obj) {
181 this.fecObjHeader = obj;
182 this.bIsHeaderSet = true;
187 public int getNodeID() {
192 public Builder setNodeID(int value) {
194 this.bIsNodeIdset = true;
201 public PcepVersion getVersion() {
202 return PcepVersion.PCEP_1;
206 public int getType() {
211 public String toString() {
212 return MoreObjects.toStringHelper(getClass())
213 .add("fecObjHeader", fecObjHeader)
214 .add("nodeID: ", nodeID)