fb4ceeff83ce72744c1d697d2f5ebefbf5fd22d8
[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
17 package org.onosproject.pcepio.types;
18
19 import java.util.Objects;
20
21 import org.jboss.netty.buffer.ChannelBuffer;
22 import org.onosproject.pcepio.protocol.PcepVersion;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25
26 import com.google.common.base.MoreObjects;
27
28 /**
29  * NexthopUnnumberedIPv4IDTlv provides the next node's ID and Interface ID.
30  */
31 public 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() {
156         return MoreObjects.toStringHelper(getClass())
157                 .add("Type", TYPE)
158                 .add("Length", LENGTH)
159                 .add("NodeId", nodeID)
160                 .add("InterfaceId", interfaceID)
161                 .toString();
162     }
163 }