Dhruv Dhody
Committed by Gerrit Code Review

ONOS-4083, ONOS-4084, ONOS-4096, ONOS-4097:ISIS PDU Data Structures

Change-Id: I22d30e8f7ba7d414e75254fdec6d0865bf471ff9
Showing 43 changed files with 2205 additions and 243 deletions
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
16 package org.onosproject.isis.controller; 16 package org.onosproject.isis.controller;
17 17
18 import java.util.List; 18 import java.util.List;
19 +import java.util.Map;
19 20
20 /** 21 /**
21 * Representation of an ISIS link state database. 22 * Representation of an ISIS link state database.
...@@ -93,4 +94,18 @@ public interface IsisLsdb { ...@@ -93,4 +94,18 @@ public interface IsisLsdb {
93 * @param lsp LSP instance 94 * @param lsp LSP instance
94 */ 95 */
95 void deleteLsp(IsisMessage lsp); 96 void deleteLsp(IsisMessage lsp);
96 -} 97 +
98 + /**
99 + * Gets the neighbor database information.
100 + *
101 + * @return neighbor database information
102 + */
103 + Map<String, LspWrapper> getL1Db();
104 +
105 + /**
106 + * Gets the neighbor database information.
107 + *
108 + * @return neighbor database information
109 + */
110 + Map<String, LspWrapper> getL2Db();
111 +}
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -84,4 +84,18 @@ public interface IsisNeighbor { ...@@ -84,4 +84,18 @@ public interface IsisNeighbor {
84 * @param localExtendedCircuitId neighbor extended circuit ID 84 * @param localExtendedCircuitId neighbor extended circuit ID
85 */ 85 */
86 void setLocalExtendedCircuitId(int localExtendedCircuitId); 86 void setLocalExtendedCircuitId(int localExtendedCircuitId);
87 +
88 + /**
89 + * Returns Holding time of neighbor.
90 + *
91 + * @return Holding time of neighbor
92 + */
93 + int holdingTime();
94 +
95 + /**
96 + * Sets Holding time of neighbor.
97 + *
98 + * @param holdingTime Holding time of neighbor
99 + */
100 + void setHoldingTime(int holdingTime);
87 } 101 }
......
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.isis.exceptions;
17 +
18 +/**
19 + * Defines all error codes and error sub codes.
20 + */
21 +public final class IsisErrorType {
22 +
23 + //Represents an invalid ISIS message header
24 + public static final byte MESSAGE_HEADER_ERROR = 1;
25 + //Represents an invalid ISIS message body
26 + public static final byte ISIS_MESSAGE_ERROR = 2;
27 + //Message Header error sub codes
28 + //Represents an invalid ISIS message length
29 + public static final byte BAD_MESSAGE_LENGTH = 3;
30 + //Represents an invalid ISIS message
31 + public static final byte BAD_MESSAGE = 4;
32 +
33 + /**
34 + * Creates an instance of ISIS error type.
35 + */
36 + private IsisErrorType() {
37 + }
38 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.isis.exceptions;
17 +
18 +import com.google.common.base.MoreObjects;
19 +
20 +/**
21 + * Representation of a custom exception for ISIS.
22 + */
23 +public class IsisParseException extends Exception {
24 +
25 + private static final long serialVersionUID = 1L;
26 + private byte errorCode;
27 + private byte errorSubCode;
28 +
29 + /**
30 + * Creates a new ISIS exception.
31 + */
32 + public IsisParseException() {
33 + super();
34 + }
35 +
36 + /**
37 + * Creates a new ISIS exception based on the given arguments.
38 + *
39 + * @param message the detail of exception in string
40 + * @param cause underlying cause of the error
41 + */
42 + public IsisParseException(final String message, final Throwable cause) {
43 + super(message, cause);
44 + }
45 +
46 + /**
47 + * Creates a new ISIS exception for the given message.
48 + *
49 + * @param message the detail of exception in string
50 + */
51 + public IsisParseException(final String message) {
52 + super(message);
53 + }
54 +
55 + /**
56 + * Creates a new ISIS exception from throwable instance.
57 + *
58 + * @param cause underlying cause of the error
59 + */
60 + public IsisParseException(final Throwable cause) {
61 + super(cause);
62 + }
63 +
64 + /**
65 + * Creates a new ISIS exception from error code and error sub code.
66 + *
67 + * @param errorCode error code of ISIS message
68 + * @param errorSubCode error sub code of ISIS message
69 + */
70 + public IsisParseException(final byte errorCode, final byte errorSubCode) {
71 + super();
72 + this.errorCode = errorCode;
73 + this.errorSubCode = errorSubCode;
74 + }
75 +
76 + /**
77 + * Returns error code for this exception.
78 + *
79 + * @return error code for this exception
80 + */
81 + public byte errorCode() {
82 + return this.errorCode;
83 + }
84 +
85 + /**
86 + * Returns error sub code for this exception.
87 + *
88 + * @return error sub code for this exception
89 + */
90 + public byte errorSubCode() {
91 + return this.errorSubCode;
92 + }
93 +
94 + @Override
95 + public String toString() {
96 + return MoreObjects.toStringHelper(getClass())
97 + .omitNullValues()
98 + .add("errorCode", errorCode)
99 + .add("errorSubCode", errorSubCode)
100 + .toString();
101 + }
102 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present 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 +/**
18 + * Implementation of the ISIS protocol exceptions.
19 + */
20 +package org.onosproject.isis.exceptions;
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.isis.io.isispacket;
17 +
18 +import org.jboss.netty.buffer.ChannelBuffer;
19 +import org.onlab.packet.MacAddress;
20 +import org.onosproject.isis.controller.IsisMessage;
21 +import org.onosproject.isis.controller.IsisPduType;
22 +
23 +/**
24 + * Representation of ISIS message header.
25 + */
26 +public class IsisHeader implements IsisMessage {
27 +
28 + private MacAddress sourceMac;
29 + private int interfaceIndex;
30 + private MacAddress interfaceMac;
31 + private int isisPduType;
32 + private byte irpDiscriminator;
33 + private byte pduHeaderLength;
34 + private byte version2;
35 + private byte idLength;
36 + private byte version;
37 + private byte reserved;
38 + private byte maximumAreaAddresses;
39 +
40 + /**
41 + * Returns the interface index on which the message received.
42 + *
43 + * @return interface index on which the message received
44 + */
45 + public int interfaceIndex() {
46 + return interfaceIndex;
47 + }
48 +
49 + /**
50 + * Sets the interface index on which the message received.
51 + *
52 + * @param interfaceIndex interface index on which the message received
53 + */
54 + public void setInterfaceIndex(int interfaceIndex) {
55 + this.interfaceIndex = interfaceIndex;
56 + }
57 +
58 + /**
59 + * Returns the interface mac address on which the message received.
60 + *
61 + * @return interface mac address on which the message received
62 + */
63 + public MacAddress interfaceMac() {
64 + return interfaceMac;
65 + }
66 +
67 + /**
68 + * Returns the mac address of the message sender.
69 + *
70 + * @return mac address of the message sender
71 + */
72 + public MacAddress sourceMac() {
73 + return sourceMac;
74 + }
75 +
76 + /**
77 + * Sets the mac address of the message sender.
78 + *
79 + * @param sourceMac mac address of the message sender
80 + */
81 + public void setSourceMac(MacAddress sourceMac) {
82 + this.sourceMac = sourceMac;
83 + }
84 +
85 + /**
86 + * Sets the interface mac address on which the message received.
87 + *
88 + * @param interfaceMac mac address on which the message received
89 + */
90 + public void setInterfaceMac(MacAddress interfaceMac) {
91 + this.interfaceMac = interfaceMac;
92 + }
93 +
94 + /**
95 + * Returns the version of TLV header.
96 + *
97 + * @return version version of TLV header
98 + */
99 + public byte version2() {
100 + return version2;
101 + }
102 +
103 + /**
104 + * Sets the version of TLV header.
105 + *
106 + * @param version2 version of TLV header
107 + */
108 + public void setVersion2(byte version2) {
109 + this.version2 = version2;
110 + }
111 +
112 + /**
113 + * Returns maximum area address.
114 + *
115 + * @return maximum area address
116 + */
117 + public byte maximumAreaAddresses() {
118 + return maximumAreaAddresses;
119 + }
120 +
121 + /**
122 + * Sets maximum area address.
123 + *
124 + * @param maximumAreaAddresses maximum area address
125 + */
126 + public void setMaximumAreaAddresses(byte maximumAreaAddresses) {
127 + this.maximumAreaAddresses = maximumAreaAddresses;
128 + }
129 +
130 + /**
131 + * Returns reserved field value on which data received.
132 + *
133 + * @return reserved
134 + */
135 + public byte reserved() {
136 + return reserved;
137 + }
138 +
139 + /**
140 + * Sets reserved.
141 + *
142 + * @param reserved reserved
143 + */
144 + public void setReserved(byte reserved) {
145 + this.reserved = reserved;
146 + }
147 +
148 + /**
149 + * Returns version.
150 + *
151 + * @return version
152 + */
153 + public byte version() {
154 + return version;
155 + }
156 +
157 + /**
158 + * Returns ID length.
159 + *
160 + * @return ID length
161 + */
162 + public byte idLength() {
163 + return idLength;
164 + }
165 +
166 + /**
167 + * Sets ID length.
168 + *
169 + * @param idLength ID length
170 + */
171 + public void setIdLength(byte idLength) {
172 + this.idLength = idLength;
173 + }
174 +
175 + /**
176 + * Returns the PDU type.
177 + *
178 + * @return PDU type
179 + */
180 + public int pduType() {
181 +
182 + return this.isisPduType;
183 + }
184 +
185 + /**
186 + * Sets PDU type.
187 + *
188 + * @param isisPduType PDU type
189 + */
190 + public void setIsisPduType(int isisPduType) {
191 + this.isisPduType = isisPduType;
192 + }
193 +
194 + /**
195 + * Sets protocol ID.
196 + *
197 + * @param version protocol ID
198 + */
199 + public void setVersion(byte version) {
200 + this.version = version;
201 + }
202 +
203 + /**
204 + * Returns length indicator.
205 + *
206 + * @return length indicator
207 + */
208 + public byte pduHeaderLength() {
209 + return pduHeaderLength;
210 + }
211 +
212 + /**
213 + * Sets length indicator.
214 + *
215 + * @param pduHeaderLength length indicator
216 + */
217 + public void setPduHeaderLength(byte pduHeaderLength) {
218 + this.pduHeaderLength = pduHeaderLength;
219 + }
220 +
221 + /**
222 + * Returns IRP discriminator.
223 + *
224 + * @return IRP discriminator
225 + */
226 + public byte irpDiscriminator() {
227 + return irpDiscriminator;
228 + }
229 +
230 + /**
231 + * Sets IRP discriminator.
232 + *
233 + * @param irpDiscriminator IRP discriminator
234 + */
235 + public void setIrpDiscriminator(byte irpDiscriminator) {
236 +
237 + this.irpDiscriminator = irpDiscriminator;
238 + }
239 +
240 + @Override
241 + public IsisPduType isisPduType() {
242 +
243 + return IsisPduType.get(this.isisPduType);
244 + }
245 +
246 + @Override
247 + public void readFrom(ChannelBuffer channelBuffer) {
248 + //implemented in the sub classes
249 + }
250 +
251 + @Override
252 + public byte[] asBytes() {
253 + return null;
254 + }
255 +
256 + /**
257 + * Populates ISIS header.
258 + *
259 + * @param isisHeader ISIS header
260 + */
261 + public void populateHeader(IsisHeader isisHeader) {
262 + this.setIrpDiscriminator(isisHeader.irpDiscriminator());
263 + this.setPduHeaderLength(isisHeader.pduHeaderLength());
264 + this.setVersion(isisHeader.version());
265 + this.setIdLength(isisHeader.idLength());
266 + this.setIsisPduType(isisHeader.pduType());
267 + this.setVersion2(isisHeader.version2());
268 + this.setReserved(isisHeader.reserved());
269 + this.setMaximumAreaAddresses(isisHeader.maximumAreaAddresses());
270 + }
271 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.isis.io.isispacket;
17 +
18 +import org.jboss.netty.buffer.ChannelBuffer;
19 +import org.onosproject.isis.controller.IsisMessage;
20 +import org.onosproject.isis.exceptions.IsisErrorType;
21 +import org.onosproject.isis.exceptions.IsisParseException;
22 +import org.onosproject.isis.io.isispacket.pdu.Csnp;
23 +import org.onosproject.isis.io.isispacket.pdu.L1L2HelloPdu;
24 +import org.onosproject.isis.io.isispacket.pdu.LsPdu;
25 +import org.onosproject.isis.io.isispacket.pdu.P2PHelloPdu;
26 +import org.onosproject.isis.io.isispacket.pdu.Psnp;
27 +import org.onosproject.isis.io.util.IsisConstants;
28 +import org.slf4j.Logger;
29 +import org.slf4j.LoggerFactory;
30 +
31 +/**
32 + * Represents ISIS message reader.
33 + */
34 +public class IsisMessageReader {
35 +
36 + protected static final Logger log = LoggerFactory.getLogger(IsisMessageReader.class);
37 +
38 + /**
39 + * Reads from ISIS packet from buffer.
40 + *
41 + * @param channelBuffer buffer
42 + * @return ISIS message
43 + * @throws Exception exception
44 + */
45 + public IsisMessage readFromBuffer(ChannelBuffer channelBuffer) throws Exception {
46 +
47 + int dataLength = channelBuffer.readableBytes();
48 + log.debug("IsisMessageReader::readFromBuffer Data length {}", dataLength);
49 + if (channelBuffer.readableBytes() < IsisConstants.PDU_LENGTH) {
50 + log.debug("Packet should have minimum length...");
51 + throw new IsisParseException(IsisErrorType.MESSAGE_HEADER_ERROR, IsisErrorType.BAD_MESSAGE_LENGTH);
52 + }
53 + IsisHeader isisHeader = getIsisHeader(channelBuffer);
54 + int totalLength = 0;
55 + IsisMessage isisMessage = null;
56 + switch (isisHeader.isisPduType()) {
57 + case L1HELLOPDU:
58 + case L2HELLOPDU:
59 + isisMessage = new L1L2HelloPdu(isisHeader);
60 + totalLength = channelBuffer.getShort(IsisConstants.PDULENGTHPOSITION);
61 + break;
62 + case P2PHELLOPDU:
63 + isisMessage = new P2PHelloPdu(isisHeader);
64 + totalLength = channelBuffer.getShort(IsisConstants.PDULENGTHPOSITION);
65 + break;
66 + case L1LSPDU:
67 + case L2LSPDU:
68 + isisMessage = new LsPdu(isisHeader);
69 + totalLength = channelBuffer.getShort(8);
70 + break;
71 + case L1CSNP:
72 + case L2CSNP:
73 + isisMessage = new Csnp(isisHeader);
74 + totalLength = channelBuffer.getShort(8);
75 + break;
76 + case L1PSNP:
77 + case L2PSNP:
78 + isisMessage = new Psnp(isisHeader);
79 + totalLength = channelBuffer.getShort(8);
80 + break;
81 + default:
82 + log.debug("Message Reader[Decoder] - Unknown PDU type..!!!");
83 + break;
84 + }
85 +
86 + if (isisMessage != null) {
87 + try {
88 + int bodyLength = totalLength - IsisConstants.COMMONHEADERLENGTH;
89 + isisMessage.readFrom(channelBuffer.readBytes(bodyLength));
90 +
91 + } catch (Exception e) {
92 + throw new IsisParseException(IsisErrorType.ISIS_MESSAGE_ERROR,
93 + IsisErrorType.BAD_MESSAGE);
94 + }
95 +
96 + }
97 +
98 + return isisMessage;
99 + }
100 +
101 + /**
102 + * Gets ISIS header.
103 + *
104 + * @param channelBuffer ISIS header
105 + * @return ISIS header
106 + * @throws Exception
107 + */
108 + private IsisHeader getIsisHeader(ChannelBuffer channelBuffer) throws Exception {
109 +
110 + IsisHeader isisHeader = new IsisHeader();
111 + isisHeader.setIrpDiscriminator(channelBuffer.readByte());
112 + isisHeader.setPduHeaderLength(channelBuffer.readByte());
113 + isisHeader.setVersion(channelBuffer.readByte());
114 + isisHeader.setIdLength(channelBuffer.readByte());
115 + isisHeader.setIsisPduType(channelBuffer.readByte());
116 + isisHeader.setVersion2(channelBuffer.readByte());
117 + isisHeader.setReserved(channelBuffer.readByte());
118 + isisHeader.setMaximumAreaAddresses(channelBuffer.readByte());
119 +
120 + return isisHeader;
121 + }
122 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.isis.io.isispacket.pdu;
17 +
18 +import java.util.EnumSet;
19 +import java.util.HashMap;
20 +import java.util.Map;
21 +
22 +/**
23 + * Representation of attached to other areas.
24 + */
25 +public enum AttachedToOtherAreas {
26 + DEFAULTMETRIC(1),
27 + DELAYMETRIC(2),
28 + EXPENSEMETRIC(4),
29 + ERRORMETRIC(8),
30 + NONE(0);
31 + // Reverse lookup table
32 + private static final Map<Integer, AttachedToOtherAreas> LOOKUP = new HashMap<>();
33 +
34 + // Populate the lookup table on loading time
35 + static {
36 + for (AttachedToOtherAreas attachedToOtherAreas :
37 + EnumSet.allOf(AttachedToOtherAreas.class)) {
38 + LOOKUP.put(attachedToOtherAreas.value(), attachedToOtherAreas);
39 + }
40 + }
41 +
42 + private int value;
43 +
44 + /**
45 + * Returns the attached to other areas value.
46 + *
47 + * @param value attached to other areas value
48 + */
49 + AttachedToOtherAreas(int value) {
50 + this.value = value;
51 + }
52 +
53 + /**
54 + * Returns the value for attached to other areas from pdu type value.
55 + *
56 + * @param pduTypeValue to get attached areas value
57 + * @return attachedToOtherAreas value of the enum
58 + */
59 + public static AttachedToOtherAreas get(int pduTypeValue) {
60 + return LOOKUP.get(pduTypeValue);
61 + }
62 +
63 + /**
64 + * Returns the value representing PDU type.
65 + *
66 + * @return value represents PDU type
67 + */
68 + public int value() {
69 + return value;
70 + }
71 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.isis.io.isispacket.pdu;
17 +
18 +import com.google.common.base.MoreObjects;
19 +import com.google.common.base.Objects;
20 +import com.google.common.primitives.Bytes;
21 +import org.jboss.netty.buffer.ChannelBuffer;
22 +import org.onosproject.isis.io.isispacket.IsisHeader;
23 +import org.onosproject.isis.io.isispacket.tlv.IsisTlv;
24 +import org.onosproject.isis.io.isispacket.tlv.TlvFinder;
25 +import org.onosproject.isis.io.isispacket.tlv.TlvHeader;
26 +import org.onosproject.isis.io.isispacket.tlv.TlvType;
27 +import org.onosproject.isis.io.isispacket.tlv.TlvsToBytes;
28 +import org.onosproject.isis.io.util.IsisUtil;
29 +
30 +import java.util.ArrayList;
31 +import java.util.List;
32 +
33 +/**
34 + * Representation of complete sequence number PDU.
35 + */
36 +public class Csnp extends IsisHeader {
37 +
38 + /*
39 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
40 + | Intra-domain Routing Protocol Discriminator |
41 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
42 + | Length Indicator |
43 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
44 + | Version/Protocol ID Extension |
45 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
46 + | ID Length |
47 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
48 + | R | R | R | PDU Type |
49 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
50 + | Version |
51 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
52 + | Reserved |
53 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
54 + | Maximum area address |
55 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
56 + | PDU Length |
57 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
58 + | Source ID |
59 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
60 + | Start LSP ID |
61 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
62 + | End LSP ID |
63 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
64 + | Variable Lengths Fields |
65 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
66 +
67 + CSNP Message Format
68 + REFERENCE : ISO/IEC 10589
69 + */
70 + private int pduLength;
71 + private String sourceId;
72 + private String startLspId;
73 + private String endLspId;
74 + private List<IsisTlv> variableLengths = new ArrayList<>();
75 +
76 + /**
77 + * Creates the instance for this class.
78 + *
79 + * @param isisHeader ISIS header
80 + */
81 + public Csnp(IsisHeader isisHeader) {
82 + populateHeader(isisHeader);
83 + }
84 +
85 + /**
86 + * Returns the list of all tlvs.
87 + *
88 + * @return variableLengths list of tlvs
89 + */
90 + public List<IsisTlv> getAllTlv() {
91 + return variableLengths;
92 + }
93 +
94 + /**
95 + * Returns the source ID of csnp.
96 + *
97 + * @return sourceId source ID
98 + */
99 + public String sourceId() {
100 + return sourceId;
101 + }
102 +
103 + /**
104 + * Sets the source ID for csnp.
105 + *
106 + * @param sourceId source ID
107 + */
108 + public void setSourceId(String sourceId) {
109 + this.sourceId = sourceId;
110 + }
111 +
112 + /**
113 + * Returns the initial link state packet ID of csnp.
114 + *
115 + * @return startLspId start link state packet ID
116 + */
117 + public String startLspId() {
118 + return startLspId;
119 + }
120 +
121 + /**
122 + * Sets the initial link state packet ID for csnp.
123 + *
124 + * @param startLspId start link state packet ID
125 + */
126 + public void setStartLspId(String startLspId) {
127 + this.startLspId = startLspId;
128 + }
129 +
130 + /**
131 + * Returns the end link state packet ID of csnp.
132 + *
133 + * @return endLspId end link state packet ID of csnp.
134 + */
135 + public String endLspId() {
136 + return endLspId;
137 + }
138 +
139 + /**
140 + * Sets the end link state packet ID for csnp.
141 + *
142 + * @param endLspId end link state packet ID of csnp.
143 + */
144 + public void setEndLspId(String endLspId) {
145 + this.endLspId = endLspId;
146 + }
147 +
148 + /**
149 + * Returns the packet data unit length of link state packet.
150 + * Entire length of this PDU, in octets
151 + *
152 + * @return pduLength packet date unit length
153 + */
154 + public int pduLength() {
155 + return pduLength;
156 + }
157 +
158 + /**
159 + * Sets the packet data unit length for link state packet.
160 + * Entire Length of this PDU, in octets
161 + *
162 + * @param pduLength packet data length
163 + */
164 + public void setPduLength(int pduLength) {
165 + this.pduLength = pduLength;
166 + }
167 +
168 + @Override
169 + public void readFrom(ChannelBuffer channelBuffer) {
170 + this.setPduLength(channelBuffer.readUnsignedShort());
171 + //source id + 1 value
172 + byte[] tempByteArray = new byte[IsisUtil.ID_PLUS_ONE_BYTE];
173 + channelBuffer.readBytes(tempByteArray, 0, IsisUtil.ID_PLUS_ONE_BYTE);
174 + this.setSourceId(IsisUtil.systemIdPlus(tempByteArray));
175 + //start lsp id + 2 value
176 + tempByteArray = new byte[IsisUtil.ID_PLUS_TWO_BYTE];
177 + channelBuffer.readBytes(tempByteArray, 0, IsisUtil.ID_PLUS_TWO_BYTE);
178 + this.setStartLspId(IsisUtil.systemIdPlus(tempByteArray));
179 + //end lsp id + 2 value
180 + tempByteArray = new byte[IsisUtil.ID_PLUS_TWO_BYTE];
181 + channelBuffer.readBytes(tempByteArray, 0, IsisUtil.ID_PLUS_TWO_BYTE);
182 + this.setEndLspId(IsisUtil.systemIdPlus(tempByteArray));
183 + //tlv here
184 + while (channelBuffer.readableBytes() > 0) {
185 + TlvHeader tlvHeader = new TlvHeader();
186 + tlvHeader.setTlvType(channelBuffer.readUnsignedByte());
187 + tlvHeader.setTlvLength(channelBuffer.readUnsignedByte());
188 + TlvType tlvValue = TlvType.get(tlvHeader.tlvType());
189 + if (tlvValue != null) {
190 + IsisTlv tlv = TlvFinder.findTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength()));
191 + this.variableLengths.add(tlv);
192 + } else {
193 + channelBuffer.readBytes(tlvHeader.tlvLength());
194 + }
195 + }
196 + }
197 +
198 + @Override
199 + public byte[] asBytes() {
200 + byte[] csnpMessage = null;
201 + byte[] isisPduHeader = isisPduHeader();
202 + byte[] csnpBody = completeSequenceNumberPduBody();
203 + csnpMessage = Bytes.concat(isisPduHeader, csnpBody);
204 + return csnpMessage;
205 + }
206 +
207 + /**
208 + * Builds ISIS PDU header for complete sequence numbers PDU.
209 + *
210 + * @return isisPduHeader ISIS PDU header
211 + */
212 + public byte[] isisPduHeader() {
213 + List<Byte> headerList = new ArrayList<>();
214 + headerList.add(this.irpDiscriminator());
215 + headerList.add((byte) IsisUtil.getPduHeaderLength(this.pduType()));
216 + headerList.add(this.version());
217 + headerList.add(this.idLength());
218 + headerList.add((byte) this.pduType());
219 + headerList.add(this.version2());
220 + headerList.add(this.reserved());
221 + headerList.add(this.maximumAreaAddresses());
222 + return Bytes.toArray(headerList);
223 + }
224 +
225 + /**
226 + * Builds complete sequence numbers PDU body.
227 + *
228 + * @return bodyList complete sequence numbers PDU body
229 + */
230 + public byte[] completeSequenceNumberPduBody() {
231 + List<Byte> bodyList = new ArrayList<>();
232 + bodyList.addAll(Bytes.asList(IsisUtil.convertToTwoBytes(this.pduLength())));
233 + bodyList.addAll(IsisUtil.sourceAndLanIdToBytes(this.sourceId()));
234 + bodyList.addAll(IsisUtil.sourceAndLanIdToBytes(this.startLspId()));
235 + bodyList.addAll(IsisUtil.sourceAndLanIdToBytes(this.endLspId()));
236 + for (IsisTlv isisTlv : variableLengths) {
237 + bodyList.addAll(TlvsToBytes.tlvToBytes(isisTlv));
238 + }
239 + return Bytes.toArray(bodyList);
240 + }
241 +
242 + @Override
243 + public String toString() {
244 + return MoreObjects.toStringHelper(getClass())
245 + .omitNullValues()
246 + .add("pduLength", pduLength)
247 + .add("sourceId", sourceId)
248 + .add("startLspId", startLspId)
249 + .add("endLspId", endLspId)
250 + .toString();
251 + }
252 +
253 + @Override
254 + public boolean equals(Object o) {
255 + if (this == o) {
256 + return true;
257 + }
258 + if (o == null || getClass() != o.getClass()) {
259 + return false;
260 + }
261 + Csnp that = (Csnp) o;
262 + return Objects.equal(pduLength, that.pduLength) &&
263 + Objects.equal(sourceId, that.sourceId) &&
264 + Objects.equal(startLspId, that.startLspId) &&
265 + Objects.equal(endLspId, that.endLspId);
266 + }
267 +
268 + @Override
269 + public int hashCode() {
270 + return Objects.hashCode(pduLength, sourceId, startLspId, endLspId);
271 + }
272 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.isis.io.isispacket.pdu;
17 +
18 +import com.google.common.base.MoreObjects;
19 +import com.google.common.base.Objects;
20 +import org.onlab.packet.Ip4Address;
21 +import org.onlab.packet.MacAddress;
22 +import org.onosproject.isis.controller.IsisInterfaceState;
23 +import org.onosproject.isis.io.isispacket.IsisHeader;
24 +import org.onosproject.isis.io.isispacket.tlv.AdjacencyStateTlv;
25 +import org.onosproject.isis.io.isispacket.tlv.AreaAddressTlv;
26 +import org.onosproject.isis.io.isispacket.tlv.IpInterfaceAddressTlv;
27 +import org.onosproject.isis.io.isispacket.tlv.IsisNeighborTlv;
28 +import org.onosproject.isis.io.isispacket.tlv.IsisTlv;
29 +
30 +import java.util.ArrayList;
31 +import java.util.List;
32 +
33 +/**
34 + * Representation of ISIS hello PDU.
35 + */
36 +public abstract class HelloPdu extends IsisHeader {
37 +
38 + protected List<IsisTlv> variableLengths = new ArrayList<>();
39 + private byte circuitType;
40 + private String sourceId;
41 + private int holdingTime;
42 + private int pduLength;
43 +
44 + public void addTlv(IsisTlv isisTlv) {
45 + variableLengths.add(isisTlv);
46 + }
47 +
48 + /**
49 + * Returns the variable lengths.
50 + *
51 + * @return variable lengths
52 + */
53 + public List<IsisTlv> tlvs() {
54 + return variableLengths;
55 + }
56 +
57 + /**
58 + * Returns the list of area addresses.
59 + *
60 + * @return areaAddresses area addresses
61 + */
62 + public List<String> areaAddress() {
63 + List<String> areaAddresses = null;
64 + for (IsisTlv tlv : tlvs()) {
65 + if (tlv instanceof AreaAddressTlv) {
66 + areaAddresses = ((AreaAddressTlv) tlv).areaAddress();
67 + }
68 + }
69 + return areaAddresses;
70 + }
71 +
72 + /**
73 + * Returns the list of interface IP addresses.
74 + *
75 + * @return interfaceIpAddresses list of interface IP addresses
76 + */
77 + public List<Ip4Address> interfaceIpAddresses() {
78 + List<Ip4Address> interfaceIpAddresses = null;
79 + for (IsisTlv tlv : tlvs()) {
80 + if (tlv instanceof IpInterfaceAddressTlv) {
81 + interfaceIpAddresses = ((IpInterfaceAddressTlv) tlv).interfaceAddress();
82 + }
83 + }
84 + return interfaceIpAddresses;
85 + }
86 +
87 + /**
88 + * Returns the list of neighbor list.
89 + *
90 + * @return macAddresses list of neighbor MAC address
91 + */
92 + public List<MacAddress> neighborList() {
93 + List<MacAddress> macAddresses = null;
94 + for (IsisTlv tlv : tlvs()) {
95 + if (tlv instanceof IsisNeighborTlv) {
96 + macAddresses = ((IsisNeighborTlv) tlv).neighbor();
97 + }
98 + }
99 + return macAddresses;
100 + }
101 +
102 + /**
103 + * Returns the adjacency state.
104 + *
105 + * @return interfaceState adjacency state
106 + */
107 + public IsisInterfaceState adjacencyState() {
108 + IsisInterfaceState interfaceState = null;
109 + for (IsisTlv tlv : tlvs()) {
110 + if (tlv instanceof AdjacencyStateTlv) {
111 + interfaceState = IsisInterfaceState.get(((AdjacencyStateTlv) tlv).adjacencyType());
112 + break;
113 + }
114 + }
115 + return interfaceState;
116 + }
117 +
118 + /**
119 + * Returns the source ID.
120 + *
121 + * @return sourceId source ID
122 + */
123 + public String sourceId() {
124 + return sourceId;
125 + }
126 +
127 + /**
128 + * Sets source ID.
129 + *
130 + * @param sourceId source ID
131 + */
132 + public void setSourceId(String sourceId) {
133 + this.sourceId = sourceId;
134 + }
135 +
136 + /**
137 + * Returns the PDU length.
138 + *
139 + * @return pduLength PDU length
140 + */
141 + public int pduLength() {
142 + return pduLength;
143 + }
144 +
145 + /**
146 + * Sets the PDU length.
147 + *
148 + * @param pduLength PDU lenght
149 + */
150 + public void setPduLength(int pduLength) {
151 + this.pduLength = pduLength;
152 + }
153 +
154 + /**
155 + * Returns the holding time.
156 + *
157 + * @return holdingTime holding time
158 + */
159 + public int holdingTime() {
160 + return holdingTime;
161 + }
162 +
163 + /**
164 + * Sets the holding time.
165 + *
166 + * @param holdingTime holding time
167 + */
168 + public void setHoldingTime(int holdingTime) {
169 + this.holdingTime = holdingTime;
170 + }
171 +
172 + /**
173 + * Returns the circuit type.
174 + *
175 + * @return circuitType circuit type
176 + */
177 + public byte circuitType() {
178 + return circuitType;
179 + }
180 +
181 + /**
182 + * Sets the circuit type.
183 + *
184 + * @param circuitType circuit type
185 + */
186 + public void setCircuitType(byte circuitType) {
187 + this.circuitType = circuitType;
188 + }
189 +
190 + @Override
191 + public String toString() {
192 + return MoreObjects.toStringHelper(getClass())
193 + .omitNullValues()
194 + .add("circuitType", circuitType)
195 + .add("sourceId", sourceId)
196 + .add("holdingTime", holdingTime)
197 + .add("pduLength", pduLength)
198 + .toString();
199 + }
200 +
201 + @Override
202 + public boolean equals(Object o) {
203 + if (this == o) {
204 + return true;
205 + }
206 + if (o == null || getClass() != o.getClass()) {
207 + return false;
208 + }
209 + HelloPdu that = (HelloPdu) o;
210 + return Objects.equal(circuitType, that.circuitType) &&
211 + Objects.equal(sourceId, that.sourceId) &&
212 + Objects.equal(holdingTime, that.holdingTime) &&
213 + Objects.equal(pduLength, that.pduLength);
214 + }
215 +
216 + @Override
217 + public int hashCode() {
218 + return Objects.hashCode(circuitType, sourceId, holdingTime, pduLength);
219 + }
220 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.isis.io.isispacket.pdu;
17 +
18 +import com.google.common.base.MoreObjects;
19 +import com.google.common.base.Objects;
20 +import com.google.common.primitives.Bytes;
21 +import org.jboss.netty.buffer.ChannelBuffer;
22 +import org.onosproject.isis.io.isispacket.IsisHeader;
23 +import org.onosproject.isis.io.isispacket.tlv.IsisTlv;
24 +import org.onosproject.isis.io.isispacket.tlv.TlvFinder;
25 +import org.onosproject.isis.io.isispacket.tlv.TlvHeader;
26 +import org.onosproject.isis.io.isispacket.tlv.TlvType;
27 +import org.onosproject.isis.io.isispacket.tlv.TlvsToBytes;
28 +import org.onosproject.isis.io.util.IsisUtil;
29 +
30 +import java.util.ArrayList;
31 +import java.util.List;
32 +
33 +/**
34 + * Representation of L1L2 hello PDU.
35 + */
36 +public class L1L2HelloPdu extends HelloPdu {
37 +
38 + /*
39 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
40 + | Intra-domain Routing Protocol Discriminator |
41 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
42 + | Length Indicator |
43 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
44 + | Version/Protocol ID Extension |
45 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
46 + | ID Length |
47 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
48 + | R | R | R | PDU Type |
49 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
50 + | Version |
51 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
52 + | Reserved |
53 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
54 + | Maximum area address |
55 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
56 + | Circuit Type |
57 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
58 + | Source ID |
59 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
60 + | Holding Time |
61 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
62 + | PDU Length |
63 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
64 + | PDU Length |
65 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
66 + | R | Priority |
67 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
68 + | LAN ID |
69 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
70 + | Variable Lengths Fields |
71 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
72 +
73 + Hello Message Format
74 + REFERENCE : ISO/IEC 10589
75 + */
76 +
77 + private byte priority;
78 + private String lanId;
79 +
80 + /**
81 + * Parametrized constructor.
82 + *
83 + * @param isisHeader ISIs header
84 + */
85 + public L1L2HelloPdu(IsisHeader isisHeader) {
86 + populateHeader(isisHeader);
87 + }
88 +
89 + /**
90 + * Returns the LAN ID.
91 + *
92 + * @return LAN ID
93 + */
94 +
95 + public String lanId() {
96 + return lanId;
97 + }
98 +
99 + /**
100 + * Sets the LAN ID.
101 + *
102 + * @param lanId LAN ID
103 + */
104 + public void setLanId(String lanId) {
105 + this.lanId = lanId;
106 + }
107 +
108 + /**
109 + * Returns the priority.
110 + *
111 + * @return priority
112 + */
113 + public byte priority() {
114 + return priority;
115 + }
116 +
117 + /**
118 + * Sets priority.
119 + *
120 + * @param priority priority
121 + */
122 + public void setPriority(byte priority) {
123 + this.priority = priority;
124 + }
125 +
126 + @Override
127 + public void readFrom(ChannelBuffer channelBuffer) {
128 + this.setCircuitType(channelBuffer.readByte());
129 + //sorce id
130 + byte[] tempByteArray = new byte[IsisUtil.ID_SIX_BYTES];
131 + channelBuffer.readBytes(tempByteArray, 0, IsisUtil.ID_SIX_BYTES);
132 + this.setSourceId(IsisUtil.systemId(tempByteArray));
133 + this.setHoldingTime(channelBuffer.readUnsignedShort());
134 + this.setPduLength(channelBuffer.readUnsignedShort());
135 + this.setPriority(channelBuffer.readByte());
136 + //landid id + 1 value
137 + tempByteArray = new byte[IsisUtil.ID_PLUS_ONE_BYTE];
138 + channelBuffer.readBytes(tempByteArray, 0, IsisUtil.ID_PLUS_ONE_BYTE);
139 + this.setLanId(IsisUtil.systemIdPlus(tempByteArray));
140 + //tlv here
141 + while (channelBuffer.readableBytes() > 0) {
142 + TlvHeader tlvHeader = new TlvHeader();
143 + tlvHeader.setTlvType(channelBuffer.readUnsignedByte());
144 + tlvHeader.setTlvLength(channelBuffer.readUnsignedByte());
145 + TlvType tlvType = TlvType.get(tlvHeader.tlvType());
146 + if (tlvType != null) {
147 + IsisTlv tlv = TlvFinder.findTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength()));
148 + this.variableLengths.add(tlv);
149 + } else {
150 + channelBuffer.readBytes(tlvHeader.tlvLength());
151 + }
152 + }
153 + }
154 +
155 + @Override
156 + public byte[] asBytes() {
157 + byte[] helloMessage = null;
158 + byte[] helloHeader = l1l2IsisPduHeader();
159 + byte[] helloBody = l1l2HelloPduBody();
160 + helloMessage = Bytes.concat(helloHeader, helloBody);
161 + return helloMessage;
162 + }
163 +
164 + /**
165 + * Parse the ISIS L1L2 PDU header.
166 + *
167 + * @return ISIS L1L2 PDU header
168 + */
169 + public byte[] l1l2IsisPduHeader() {
170 + List<Byte> headerLst = new ArrayList<>();
171 + headerLst.add(this.irpDiscriminator());
172 + headerLst.add((byte) IsisUtil.getPduHeaderLength(this.pduType()));
173 + headerLst.add(this.version());
174 + headerLst.add(this.idLength());
175 + headerLst.add((byte) this.pduType());
176 + headerLst.add(this.version2());
177 + headerLst.add(this.reserved());
178 + headerLst.add(this.maximumAreaAddresses());
179 + return Bytes.toArray(headerLst);
180 + }
181 +
182 + /**
183 + * Parse the ISIS L1L2 PDU body.
184 + *
185 + * @return ISIS L1L2 PDU body
186 + */
187 + public byte[] l1l2HelloPduBody() {
188 + List<Byte> bodyLst = new ArrayList<>();
189 +
190 + bodyLst.add(this.circuitType());
191 + bodyLst.addAll(IsisUtil.sourceAndLanIdToBytes(this.sourceId()));
192 + bodyLst.addAll(Bytes.asList(IsisUtil.convertToTwoBytes(this.holdingTime())));
193 + bodyLst.addAll(Bytes.asList(IsisUtil.convertToTwoBytes(this.pduLength())));
194 + bodyLst.add(this.priority);
195 + bodyLst.addAll(IsisUtil.sourceAndLanIdToBytes(this.lanId()));
196 + for (IsisTlv isisTlv : variableLengths) {
197 + bodyLst.addAll(TlvsToBytes.tlvToBytes(isisTlv));
198 + }
199 + return Bytes.toArray(bodyLst);
200 + }
201 +
202 + @Override
203 + public String toString() {
204 + return MoreObjects.toStringHelper(getClass())
205 + .omitNullValues()
206 + .add("priority", priority)
207 + .add("lanId", lanId)
208 + .toString();
209 + }
210 +
211 + @Override
212 + public boolean equals(Object o) {
213 + if (this == o) {
214 + return true;
215 + }
216 + if (o == null || getClass() != o.getClass()) {
217 + return false;
218 + }
219 + L1L2HelloPdu that = (L1L2HelloPdu) o;
220 + return Objects.equal(priority, that.priority) &&
221 + Objects.equal(lanId, that.lanId);
222 + }
223 +
224 + @Override
225 + public int hashCode() {
226 + return Objects.hashCode(priority, lanId);
227 + }
228 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.isis.io.isispacket.pdu;
17 +
18 +import com.google.common.base.MoreObjects;
19 +import com.google.common.base.Objects;
20 +import com.google.common.primitives.Bytes;
21 +import org.jboss.netty.buffer.ChannelBuffer;
22 +import org.onosproject.isis.io.isispacket.IsisHeader;
23 +import org.onosproject.isis.io.isispacket.tlv.IsisTlv;
24 +import org.onosproject.isis.io.isispacket.tlv.TlvFinder;
25 +import org.onosproject.isis.io.isispacket.tlv.TlvHeader;
26 +import org.onosproject.isis.io.isispacket.tlv.TlvType;
27 +import org.onosproject.isis.io.isispacket.tlv.TlvsToBytes;
28 +import org.onosproject.isis.io.util.IsisUtil;
29 +
30 +import java.util.ArrayList;
31 +import java.util.List;
32 +
33 +/**
34 + * Representation of P2P hello.
35 + */
36 +public class P2PHelloPdu extends HelloPdu {
37 + /*
38 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
39 + | Intra-domain Routing Protocol Discriminator |
40 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
41 + | Length Indicator |
42 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
43 + | Version/Protocol ID Extension |
44 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
45 + | ID Length |
46 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
47 + | R | R | R | PDU Type |
48 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
49 + | Version |
50 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
51 + | Reserved |
52 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
53 + | Maximum area address |
54 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
55 + | Circuit Type |
56 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
57 + | Source ID |
58 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
59 + | Holding Time |
60 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
61 + | PDU Length |
62 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
63 + | Local Circuit Id |
64 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
65 + | Variable Lengths Fields |
66 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
67 +
68 + P2P Hello Message Format
69 + REFERENCE : ISO/IEC 10589
70 + */
71 + private byte localCircuitId;
72 +
73 + /**
74 + * Sets the ISIS header.
75 + *
76 + * @param isisHeader isisHeader
77 + */
78 + public P2PHelloPdu(IsisHeader isisHeader) {
79 + populateHeader(isisHeader);
80 + }
81 +
82 + /**
83 + * Returns the local circuit ID.
84 + *
85 + * @return Local circuit ID
86 + */
87 + public byte localCircuitId() {
88 + return localCircuitId;
89 + }
90 +
91 + /**
92 + * Sets the local circuit ID.
93 + *
94 + * @param localCircuitId Local circuit ID
95 + */
96 + public void setLocalCircuitId(byte localCircuitId) {
97 + this.localCircuitId = localCircuitId;
98 + }
99 +
100 + /**
101 + * Sets the variable lengths.
102 + *
103 + * @param variableLengths variable lengths.
104 + */
105 + public void setVariableLengths(List<IsisTlv> variableLengths) {
106 + this.variableLengths = variableLengths;
107 + }
108 +
109 +
110 + @Override
111 + public void readFrom(ChannelBuffer channelBuffer) {
112 + this.setCircuitType(channelBuffer.readByte());
113 + //source id
114 + byte[] tempByteArray = new byte[IsisUtil.ID_SIX_BYTES];
115 + channelBuffer.readBytes(tempByteArray, 0, IsisUtil.ID_SIX_BYTES);
116 + this.setSourceId(IsisUtil.systemId(tempByteArray));
117 + this.setHoldingTime(channelBuffer.readUnsignedShort());
118 + this.setPduLength(channelBuffer.readUnsignedShort());
119 + this.setLocalCircuitId((byte) channelBuffer.readUnsignedByte());
120 + while (channelBuffer.readableBytes() > 0) {
121 + TlvHeader tlvHeader = new TlvHeader();
122 + tlvHeader.setTlvType(channelBuffer.readUnsignedByte());
123 + tlvHeader.setTlvLength(channelBuffer.readUnsignedByte());
124 + TlvType tlvType = TlvType.get(tlvHeader.tlvType());
125 + if (tlvType != null) {
126 + IsisTlv tlv = TlvFinder.findTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength()));
127 + this.variableLengths.add(tlv);
128 + } else {
129 + channelBuffer.readBytes(tlvHeader.tlvLength());
130 + }
131 + }
132 + }
133 +
134 + @Override
135 + public byte[] asBytes() {
136 + byte[] helloMessage = null;
137 + byte[] helloHeader = p2PHeader();
138 + byte[] helloBody = p2P2HelloPduBody();
139 + helloMessage = Bytes.concat(helloHeader, helloBody);
140 + return helloMessage;
141 + }
142 +
143 + /**
144 + * Builds the point to point header.
145 + *
146 + * @return headerList point to point header
147 + */
148 + public byte[] p2PHeader() {
149 + List<Byte> headerList = new ArrayList<>();
150 + headerList.add(this.irpDiscriminator());
151 + headerList.add((byte) IsisUtil.getPduHeaderLength(this.pduType()));
152 + headerList.add(this.version());
153 + headerList.add(this.idLength());
154 + headerList.add((byte) this.pduType());
155 + headerList.add(this.version2());
156 + headerList.add(this.reserved());
157 + headerList.add(this.maximumAreaAddresses());
158 + return Bytes.toArray(headerList);
159 + }
160 +
161 + /**
162 + * Builds the point to point hello PDU body.
163 + *
164 + * @return bodyList point to point hello PDU body
165 + */
166 + public byte[] p2P2HelloPduBody() {
167 + List<Byte> bodyList = new ArrayList<>();
168 + bodyList.add(this.circuitType());
169 + bodyList.addAll(IsisUtil.sourceAndLanIdToBytes(this.sourceId()));
170 + bodyList.addAll(Bytes.asList(IsisUtil.convertToTwoBytes(this.holdingTime())));
171 + bodyList.addAll(Bytes.asList(IsisUtil.convertToTwoBytes(this.pduLength())));
172 + bodyList.add((byte) this.localCircuitId());
173 + for (IsisTlv isisTlv : variableLengths) {
174 + bodyList.addAll(TlvsToBytes.tlvToBytes(isisTlv));
175 + }
176 + return Bytes.toArray(bodyList);
177 + }
178 +
179 + @Override
180 + public String toString() {
181 + return MoreObjects.toStringHelper(getClass())
182 + .omitNullValues()
183 + .add("localCircuitId", localCircuitId)
184 + .toString();
185 + }
186 +
187 + @Override
188 + public boolean equals(Object o) {
189 + if (this == o) {
190 + return true;
191 + }
192 + if (o == null || getClass() != o.getClass()) {
193 + return false;
194 + }
195 + P2PHelloPdu that = (P2PHelloPdu) o;
196 + return Objects.equal(localCircuitId, that.localCircuitId);
197 + }
198 +
199 + @Override
200 + public int hashCode() {
201 + return Objects.hashCode(localCircuitId);
202 + }
203 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.isis.io.isispacket.pdu;
17 +
18 +import com.google.common.base.MoreObjects;
19 +import com.google.common.base.Objects;
20 +import com.google.common.primitives.Bytes;
21 +import org.jboss.netty.buffer.ChannelBuffer;
22 +import org.onosproject.isis.io.isispacket.IsisHeader;
23 +import org.onosproject.isis.io.isispacket.tlv.IsisTlv;
24 +import org.onosproject.isis.io.isispacket.tlv.TlvFinder;
25 +import org.onosproject.isis.io.isispacket.tlv.TlvHeader;
26 +import org.onosproject.isis.io.isispacket.tlv.TlvType;
27 +import org.onosproject.isis.io.isispacket.tlv.TlvsToBytes;
28 +import org.onosproject.isis.io.util.IsisUtil;
29 +
30 +import java.util.ArrayList;
31 +import java.util.List;
32 +
33 +/**
34 + * Representation of partial sequence number PDU.
35 + */
36 +public class Psnp extends IsisHeader {
37 + /*
38 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
39 + | Intradomain Routing Protocol Discriminator |
40 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
41 + | Length Indicator |
42 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
43 + | Version/Protocol ID Extension |
44 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
45 + | ID Length |
46 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
47 + | R | R | R | PDU Type |
48 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
49 + | Version |
50 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
51 + | Reserved |
52 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
53 + | Maximum area address |
54 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
55 + | PDU Length |
56 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
57 + | Source ID |
58 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
59 + | Start LSP ID |
60 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
61 + | End LSP ID |
62 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
63 + | Variable Lengths Fields |
64 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
65 +
66 + Hello Message Format
67 + REFERENCE : ISO/IEC 10589
68 + */
69 + private int pduLength;
70 + private String sourceId;
71 + private List<IsisTlv> variableLengths = new ArrayList<>();
72 +
73 + /**
74 + * Creates the instance for this class.
75 + *
76 + * @param isisHeader ISIS header
77 + */
78 + public Psnp(IsisHeader isisHeader) {
79 + populateHeader(isisHeader);
80 + }
81 +
82 + public void addTlv(IsisTlv isisTlv) {
83 + variableLengths.add(isisTlv);
84 + }
85 +
86 + /**
87 + * Returns the source ID of csnp.
88 + *
89 + * @return sourceId source ID
90 + */
91 + public String sourceId() {
92 + return sourceId;
93 + }
94 +
95 + /**
96 + * Sets the source ID for csnp.
97 + *
98 + * @param sourceId source ID
99 + */
100 + public void setSourceId(String sourceId) {
101 + this.sourceId = sourceId;
102 + }
103 +
104 + /**
105 + * Returns the packet data unit length of link state packet.
106 + * Entire length of this PDU, in octets
107 + *
108 + * @return pduLength packte date unit length
109 + */
110 + public int pduLength() {
111 + return pduLength;
112 + }
113 +
114 + /**
115 + * Sets the packet data unit length for link state packet.
116 + * Entire Length of this PDU, in octets
117 + *
118 + * @param pduLength packte data length
119 + */
120 + public void setPduLength(int pduLength) {
121 + this.pduLength = pduLength;
122 + }
123 +
124 + @Override
125 + public void readFrom(ChannelBuffer channelBuffer) {
126 + this.setPduLength(channelBuffer.readUnsignedShort());
127 + //source id + 2 value
128 + byte[] tempByteArray = new byte[IsisUtil.ID_PLUS_ONE_BYTE];
129 + channelBuffer.readBytes(tempByteArray, 0, IsisUtil.ID_PLUS_ONE_BYTE);
130 + this.setSourceId(IsisUtil.systemIdPlus(tempByteArray));
131 + //tlv here
132 + while (channelBuffer.readableBytes() > 0) {
133 + TlvHeader tlvHeader = new TlvHeader();
134 + tlvHeader.setTlvType(channelBuffer.readUnsignedByte());
135 + tlvHeader.setTlvLength(channelBuffer.readUnsignedByte());
136 + TlvType tlvValue = TlvType.get(tlvHeader.tlvType());
137 + if (tlvValue != null) {
138 + IsisTlv tlv = TlvFinder.findTlv(tlvHeader, channelBuffer.readBytes(tlvHeader.tlvLength()));
139 + this.variableLengths.add(tlv);
140 + } else {
141 + channelBuffer.readBytes(tlvHeader.tlvLength());
142 + }
143 + }
144 + }
145 +
146 +
147 + @Override
148 + public byte[] asBytes() {
149 + byte[] psnpMessage = null;
150 + byte[] isisPduHeader = isisPduHeader();
151 + byte[] psnpBody = partialSequenceNumberPduBody();
152 + psnpMessage = Bytes.concat(isisPduHeader, psnpBody);
153 + return psnpMessage;
154 + }
155 +
156 + /**
157 + * Builds the ISIS PDU header.
158 + *
159 + * @return headerList ISIS PDU header
160 + */
161 + public byte[] isisPduHeader() {
162 + List<Byte> headerList = new ArrayList<>();
163 + headerList.add(this.irpDiscriminator());
164 + headerList.add((byte) IsisUtil.getPduHeaderLength(this.pduType()));
165 + headerList.add(this.version());
166 + headerList.add(this.idLength());
167 + headerList.add((byte) this.pduType());
168 + headerList.add(this.version2());
169 + headerList.add(this.reserved());
170 + headerList.add(this.maximumAreaAddresses());
171 + return Bytes.toArray(headerList);
172 + }
173 +
174 + /**
175 + * Builds the partial sequence number PDU body.
176 + *
177 + * @return bodyList partial sequence number PDU body
178 + */
179 + public byte[] partialSequenceNumberPduBody() {
180 + List<Byte> bodyList = new ArrayList<>();
181 + bodyList.addAll(Bytes.asList(IsisUtil.convertToTwoBytes(this.pduLength())));
182 + bodyList.addAll(IsisUtil.sourceAndLanIdToBytes(this.sourceId()));
183 + for (IsisTlv isisTlv : variableLengths) {
184 + bodyList.addAll(TlvsToBytes.tlvToBytes(isisTlv));
185 + }
186 + return Bytes.toArray(bodyList);
187 + }
188 +
189 + @Override
190 + public String toString() {
191 + return MoreObjects.toStringHelper(getClass())
192 + .omitNullValues()
193 + .add("pduLength", pduLength)
194 + .add("sourceId", sourceId)
195 + .toString();
196 + }
197 +
198 + @Override
199 + public boolean equals(Object o) {
200 + if (this == o) {
201 + return true;
202 + }
203 + if (o == null || getClass() != o.getClass()) {
204 + return false;
205 + }
206 + Psnp that = (Psnp) o;
207 + return Objects.equal(pduLength, that.pduLength);
208 + }
209 +
210 + @Override
211 + public int hashCode() {
212 + return Objects.hashCode(sourceId, pduLength);
213 + }
214 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present 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 +/**
18 + * Implementation of the isis protocol.
19 + */
20 +package org.onosproject.isis.io.isispacket.pdu;
...\ No newline at end of file ...\ No newline at end of file
...@@ -36,7 +36,7 @@ public class AdjacencyStateTlv extends TlvHeader implements IsisTlv { ...@@ -36,7 +36,7 @@ public class AdjacencyStateTlv extends TlvHeader implements IsisTlv {
36 /** 36 /**
37 * Creates an instance of adjacency state TLV.. 37 * Creates an instance of adjacency state TLV..
38 * 38 *
39 - * @param tlvHeader tlvHeader 39 + * @param tlvHeader TLV header
40 */ 40 */
41 public AdjacencyStateTlv(TlvHeader tlvHeader) { 41 public AdjacencyStateTlv(TlvHeader tlvHeader) {
42 this.setTlvType(tlvHeader.tlvType()); 42 this.setTlvType(tlvHeader.tlvType());
...@@ -118,8 +118,8 @@ public class AdjacencyStateTlv extends TlvHeader implements IsisTlv { ...@@ -118,8 +118,8 @@ public class AdjacencyStateTlv extends TlvHeader implements IsisTlv {
118 @Override 118 @Override
119 public void readFrom(ChannelBuffer channelBuffer) { 119 public void readFrom(ChannelBuffer channelBuffer) {
120 this.setAdjacencyType(channelBuffer.readByte()); 120 this.setAdjacencyType(channelBuffer.readByte());
121 + this.setLocalCircuitId(channelBuffer.readInt());
121 if (channelBuffer.readableBytes() > 0) { 122 if (channelBuffer.readableBytes() > 0) {
122 - this.setLocalCircuitId(channelBuffer.readInt());
123 byte[] tempByteArray = new byte[IsisUtil.ID_SIX_BYTES]; 123 byte[] tempByteArray = new byte[IsisUtil.ID_SIX_BYTES];
124 channelBuffer.readBytes(tempByteArray, 0, IsisUtil.ID_SIX_BYTES); 124 channelBuffer.readBytes(tempByteArray, 0, IsisUtil.ID_SIX_BYTES);
125 this.setNeighborSystemId(IsisUtil.systemId(tempByteArray)); 125 this.setNeighborSystemId(IsisUtil.systemId(tempByteArray));
...@@ -146,8 +146,10 @@ public class AdjacencyStateTlv extends TlvHeader implements IsisTlv { ...@@ -146,8 +146,10 @@ public class AdjacencyStateTlv extends TlvHeader implements IsisTlv {
146 List<Byte> bytes = new ArrayList<>(); 146 List<Byte> bytes = new ArrayList<>();
147 bytes.add(this.adjacencyType); 147 bytes.add(this.adjacencyType);
148 bytes.addAll(Bytes.asList(IsisUtil.convertToFourBytes(this.localCircuitId))); 148 bytes.addAll(Bytes.asList(IsisUtil.convertToFourBytes(this.localCircuitId)));
149 + if (this.neighborSystemId != null) {
149 bytes.addAll(IsisUtil.sourceAndLanIdToBytes(this.neighborSystemId)); 150 bytes.addAll(IsisUtil.sourceAndLanIdToBytes(this.neighborSystemId));
150 bytes.addAll(Bytes.asList(IsisUtil.convertToFourBytes(this.neighborLocalCircuitId))); 151 bytes.addAll(Bytes.asList(IsisUtil.convertToFourBytes(this.neighborLocalCircuitId)));
152 + }
151 return Bytes.toArray(bytes); 153 return Bytes.toArray(bytes);
152 } 154 }
153 155
......
...@@ -33,7 +33,7 @@ public class AreaAddressTlv extends TlvHeader implements IsisTlv { ...@@ -33,7 +33,7 @@ public class AreaAddressTlv extends TlvHeader implements IsisTlv {
33 /** 33 /**
34 * Creates an instance of area address TLV. 34 * Creates an instance of area address TLV.
35 * 35 *
36 - * @param tlvHeader tlvHeader 36 + * @param tlvHeader TLV header
37 */ 37 */
38 public AreaAddressTlv(TlvHeader tlvHeader) { 38 public AreaAddressTlv(TlvHeader tlvHeader) {
39 this.setTlvType(tlvHeader.tlvType()); 39 this.setTlvType(tlvHeader.tlvType());
......
...@@ -28,7 +28,7 @@ public class HostNameTlv extends TlvHeader { ...@@ -28,7 +28,7 @@ public class HostNameTlv extends TlvHeader {
28 /** 28 /**
29 * Creates an instance of host name TLV. 29 * Creates an instance of host name TLV.
30 * 30 *
31 - * @param tlvHeader tlvHeader. 31 + * @param tlvHeader TLV header
32 */ 32 */
33 public HostNameTlv(TlvHeader tlvHeader) { 33 public HostNameTlv(TlvHeader tlvHeader) {
34 this.setTlvType(tlvHeader.tlvType()); 34 this.setTlvType(tlvHeader.tlvType());
......
...@@ -29,7 +29,7 @@ public class IdrpInformationTlv extends TlvHeader implements IsisTlv { ...@@ -29,7 +29,7 @@ public class IdrpInformationTlv extends TlvHeader implements IsisTlv {
29 /** 29 /**
30 * Creates an instance of IDRP information TLV. 30 * Creates an instance of IDRP information TLV.
31 * 31 *
32 - * @param tlvHeader tlvHeader 32 + * @param tlvHeader TLV header
33 */ 33 */
34 public IdrpInformationTlv(TlvHeader tlvHeader) { 34 public IdrpInformationTlv(TlvHeader tlvHeader) {
35 this.setTlvType(tlvHeader.tlvType()); 35 this.setTlvType(tlvHeader.tlvType());
......
...@@ -21,6 +21,7 @@ import com.google.common.primitives.Bytes; ...@@ -21,6 +21,7 @@ import com.google.common.primitives.Bytes;
21 import org.jboss.netty.buffer.ChannelBuffer; 21 import org.jboss.netty.buffer.ChannelBuffer;
22 import org.onosproject.isis.io.isispacket.tlv.subtlv.SubTlvFinder; 22 import org.onosproject.isis.io.isispacket.tlv.subtlv.SubTlvFinder;
23 import org.onosproject.isis.io.isispacket.tlv.subtlv.SubTlvToBytes; 23 import org.onosproject.isis.io.isispacket.tlv.subtlv.SubTlvToBytes;
24 +import org.onosproject.isis.io.isispacket.tlv.subtlv.SubTlvType;
24 import org.onosproject.isis.io.isispacket.tlv.subtlv.TrafficEngineeringSubTlv; 25 import org.onosproject.isis.io.isispacket.tlv.subtlv.TrafficEngineeringSubTlv;
25 import org.onosproject.isis.io.util.IsisUtil; 26 import org.onosproject.isis.io.util.IsisUtil;
26 27
...@@ -32,15 +33,18 @@ import java.util.List; ...@@ -32,15 +33,18 @@ import java.util.List;
32 */ 33 */
33 public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv { 34 public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv {
34 35
35 - private String sysIdAndPseudoNumber; 36 + private boolean down;
36 - private int defaultMetric; 37 + private boolean subTlvPresence;
38 + private int prefixLength;
39 + private int metric;
37 private byte subTlvLength; 40 private byte subTlvLength;
41 + private String prefix;
38 private List<TrafficEngineeringSubTlv> trafEnginSubTlv = new ArrayList<>(); 42 private List<TrafficEngineeringSubTlv> trafEnginSubTlv = new ArrayList<>();
39 43
40 /** 44 /**
41 * Creates an instance of IP external reachability TLV. 45 * Creates an instance of IP external reachability TLV.
42 * 46 *
43 - * @param tlvHeader tlvHeader 47 + * @param tlvHeader TLV header
44 */ 48 */
45 public IpExtendedReachabilityTlv(TlvHeader tlvHeader) { 49 public IpExtendedReachabilityTlv(TlvHeader tlvHeader) {
46 this.setTlvType(tlvHeader.tlvType()); 50 this.setTlvType(tlvHeader.tlvType());
...@@ -48,21 +52,75 @@ public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv { ...@@ -48,21 +52,75 @@ public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv {
48 } 52 }
49 53
50 /** 54 /**
51 - * Returns the system ID and pseudo number of IP external reachability TLV. 55 + * Returns the prefix of IP external reachability TLV.
52 * 56 *
53 - * @return sysIdAndPseudoNumber system ID and pseudo number 57 + * @return prefix
54 */ 58 */
55 - public String sysIdAndPseudoNumber() { 59 + public String prefix() {
56 - return sysIdAndPseudoNumber; 60 + return prefix;
57 } 61 }
58 62
59 /** 63 /**
60 - * Sets the system ID and pseudo number for IP external reachability TLV. 64 + * Sets the prefix of IP external reachability TLV.
61 * 65 *
62 - * @param sysIdAndPseudoNumber system ID and pseudo number 66 + * @param prefix prefix
63 */ 67 */
64 - public void setSysIdAndPseudoNumber(String sysIdAndPseudoNumber) { 68 + public void setPrefix(String prefix) {
65 - this.sysIdAndPseudoNumber = sysIdAndPseudoNumber; 69 + this.prefix = prefix;
70 + }
71 +
72 + /**
73 + * Returns if down true else false of IP external reachability TLV.
74 + *
75 + * @return if down true else false
76 + */
77 + public boolean isDown() {
78 + return down;
79 + }
80 +
81 + /**
82 + * Sets if down true else false of IP external reachability TLV.
83 + *
84 + * @param upOrDown if down true else false
85 + */
86 + public void setDown(boolean upOrDown) {
87 + this.down = upOrDown;
88 + }
89 +
90 + /**
91 + * Returns true if sub TLV present else false of IP external reachability TLV.
92 + *
93 + * @return true if present else false
94 + */
95 + public boolean isSubTlvPresence() {
96 + return subTlvPresence;
97 + }
98 +
99 + /**
100 + * Sets true if sub TLV present else false of IP external reachability TLV.
101 + *
102 + * @param subTlvPresence true if present else false
103 + */
104 + public void setSubTlvPresence(boolean subTlvPresence) {
105 + this.subTlvPresence = subTlvPresence;
106 + }
107 +
108 + /**
109 + * Sets the prefix length of IP external reachability TLV.
110 + *
111 + * @return prefix length
112 + */
113 + public int prefixLength() {
114 + return prefixLength;
115 + }
116 +
117 + /**
118 + * Returns the prefix length of IP external reachability TLV.
119 + *
120 + * @param prefixLength the prefix length of IP external reachability TLV
121 + */
122 + public void setPrefixLength(int prefixLength) {
123 + this.prefixLength = prefixLength;
66 } 124 }
67 125
68 /** 126 /**
...@@ -93,39 +151,70 @@ public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv { ...@@ -93,39 +151,70 @@ public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv {
93 } 151 }
94 152
95 /** 153 /**
96 - * Returns default metric of IP external reachability TLV. 154 + * Returns metric of IP external reachability TLV.
97 * 155 *
98 - * @return default metric 156 + * @return metric
99 */ 157 */
100 - public int defaultMetric() { 158 + public int metric() {
101 - return defaultMetric; 159 + return metric;
102 } 160 }
103 161
104 /** 162 /**
105 * Sets default metric for IP external reachability TLV. 163 * Sets default metric for IP external reachability TLV.
106 * 164 *
107 - * @param defaultMetric default metric 165 + * @param metric default metric
108 */ 166 */
109 - public void setDefaultMetric(int defaultMetric) { 167 + public void setMetric(int metric) {
110 - this.defaultMetric = defaultMetric; 168 + this.metric = metric;
111 } 169 }
112 170
113 @Override 171 @Override
114 public void readFrom(ChannelBuffer channelBuffer) { 172 public void readFrom(ChannelBuffer channelBuffer) {
115 - byte[] tempByteArray = new byte[IsisUtil.ID_PLUS_ONE_BYTE]; 173 + this.setMetric(channelBuffer.readInt());
116 - channelBuffer.readBytes(tempByteArray, 0, IsisUtil.ID_PLUS_ONE_BYTE); 174 + int controlInfo = channelBuffer.readByte();
117 - this.setSysIdAndPseudoNumber(IsisUtil.systemIdPlus(tempByteArray)); 175 + byte[] tempByteArray = null;
118 - this.setDefaultMetric(channelBuffer.readUnsignedMedium()); 176 +
119 - this.setSubTlvLength((byte) channelBuffer.readByte()); 177 + String string = IsisUtil.toEightBitBinary(Integer.toBinaryString(controlInfo));
120 - while (channelBuffer.readableBytes() > 0) { 178 + if (string.charAt(0) == '0') {
121 - TlvHeader tlvHeader = new TlvHeader(); 179 + this.setDown(false);
122 - tlvHeader.setTlvType(channelBuffer.readByte()); 180 + }
123 - tlvHeader.setTlvLength(channelBuffer.readByte()); 181 + if (string.charAt(1) == '1') {
124 - this.addSubTlv(SubTlvFinder.findSubTlv(tlvHeader, 182 + this.setSubTlvPresence(true);
125 - channelBuffer.readBytes(tlvHeader.tlvLength()))); 183 + }
184 + this.setPrefixLength(Integer.parseInt(string.substring(2, string.length()), 2));
185 + if (this.prefixLength >= 0 && this.prefixLength <= 8) {
186 + channelBuffer.readByte();
187 + } else if (this.prefixLength >= 8 && this.prefixLength <= 16) {
188 + tempByteArray = new byte[IsisUtil.TWO_BYTES];
189 + channelBuffer.readBytes(tempByteArray, 0, IsisUtil.TWO_BYTES);
190 + this.setPrefix(IsisUtil.prefixConversion(tempByteArray));
191 + } else if (this.prefixLength >= 17 && this.prefixLength <= 24) {
192 + tempByteArray = new byte[IsisUtil.THREE_BYTES];
193 + channelBuffer.readBytes(tempByteArray, 0, IsisUtil.THREE_BYTES);
194 + this.setPrefix(IsisUtil.prefixConversion(tempByteArray));
195 + } else if (this.prefixLength >= 24 && this.prefixLength <= 32) {
196 + tempByteArray = new byte[IsisUtil.FOUR_BYTES];
197 + channelBuffer.readBytes(tempByteArray, 0, IsisUtil.FOUR_BYTES);
198 + this.setPrefix(IsisUtil.prefixConversion(tempByteArray));
199 + }
200 + if (this.isSubTlvPresence()) {
201 + this.setSubTlvLength(channelBuffer.readByte());
202 + while (channelBuffer.readableBytes() > 0) {
203 + TlvHeader tlvHeader = new TlvHeader();
204 + tlvHeader.setTlvType(channelBuffer.readByte());
205 + tlvHeader.setTlvLength(channelBuffer.readByte());
206 + SubTlvType tlvValue = SubTlvType.get(tlvHeader.tlvType());
207 + if (tlvValue != null) {
208 + this.addSubTlv(SubTlvFinder.findSubTlv(tlvHeader,
209 + channelBuffer.readBytes(tlvHeader.tlvLength())));
210 + } else {
211 + channelBuffer.readBytes(tlvHeader.tlvLength());
212 + }
213 + }
126 } 214 }
127 } 215 }
128 216
217 +
129 @Override 218 @Override
130 public byte[] asBytes() { 219 public byte[] asBytes() {
131 byte[] bytes = null; 220 byte[] bytes = null;
...@@ -145,11 +234,26 @@ public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv { ...@@ -145,11 +234,26 @@ public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv {
145 */ 234 */
146 private byte[] tlvBodyAsBytes() { 235 private byte[] tlvBodyAsBytes() {
147 List<Byte> bodyLst = new ArrayList<>(); 236 List<Byte> bodyLst = new ArrayList<>();
148 - bodyLst.addAll(IsisUtil.sourceAndLanIdToBytes(this.sysIdAndPseudoNumber())); 237 + bodyLst.addAll(Bytes.asList(IsisUtil.convertToFourBytes(this.metric())));
149 - bodyLst.addAll(Bytes.asList(IsisUtil.convertToThreeBytes(this.defaultMetric()))); 238 + String controlInfo = "";
150 - bodyLst.add(this.subTlvLength()); 239 + if (this.isDown()) {
151 - for (TrafficEngineeringSubTlv trafficEngineeringSubTlv : this.trafEnginSubTlv) { 240 + controlInfo = controlInfo + "1";
152 - bodyLst.addAll(SubTlvToBytes.tlvToBytes(trafficEngineeringSubTlv)); 241 + } else {
242 + controlInfo = controlInfo + "0";
243 + }
244 + if (this.isSubTlvPresence()) {
245 + controlInfo = controlInfo + "1";
246 + } else {
247 + controlInfo = controlInfo + "0";
248 + }
249 + String prefixlength = IsisUtil.toEightBitBinary(Integer.toBinaryString(this.prefixLength()));
250 + controlInfo = controlInfo + prefixlength.substring(2, prefixlength.length());
251 + bodyLst.add(Byte.parseByte(controlInfo, 2));
252 + if (this.isSubTlvPresence()) {
253 + bodyLst.add(this.subTlvLength());
254 + for (TrafficEngineeringSubTlv trafficEngineeringSubTlv : this.trafEnginSubTlv) {
255 + bodyLst.addAll(SubTlvToBytes.tlvToBytes(trafficEngineeringSubTlv));
256 + }
153 } 257 }
154 return Bytes.toArray(bodyLst); 258 return Bytes.toArray(bodyLst);
155 } 259 }
...@@ -158,9 +262,12 @@ public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv { ...@@ -158,9 +262,12 @@ public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv {
158 public String toString() { 262 public String toString() {
159 return MoreObjects.toStringHelper(getClass()) 263 return MoreObjects.toStringHelper(getClass())
160 .omitNullValues() 264 .omitNullValues()
161 - .add("sysIdAndPseudoNumber", sysIdAndPseudoNumber) 265 + .add("down", down)
162 - .add("defaultMetric", defaultMetric) 266 + .add("subTlvPresence", subTlvPresence)
267 + .add("prefixLength", prefixLength)
268 + .add("metric", metric)
163 .add("subTlvLength", subTlvLength) 269 .add("subTlvLength", subTlvLength)
270 + .add("prefix", prefix)
164 .add("trafEnginSubTlv", trafEnginSubTlv) 271 .add("trafEnginSubTlv", trafEnginSubTlv)
165 .toString(); 272 .toString();
166 } 273 }
......
1 -/*
2 - * Copyright 2016-present 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.isis.io.isispacket.tlv;
18 -
19 -import com.google.common.base.MoreObjects;
20 -import com.google.common.primitives.Bytes;
21 -import org.jboss.netty.buffer.ChannelBuffer;
22 -import org.onosproject.isis.io.isispacket.tlv.subtlv.SubTlvFinder;
23 -import org.onosproject.isis.io.isispacket.tlv.subtlv.SubTlvToBytes;
24 -import org.onosproject.isis.io.isispacket.tlv.subtlv.TrafficEngineeringSubTlv;
25 -import org.onosproject.isis.io.util.IsisUtil;
26 -
27 -import java.util.ArrayList;
28 -import java.util.List;
29 -
30 -/**
31 - * Representation of IP external reachability TLV.
32 - */
33 -public class IpExternalReachabilityTlv extends TlvHeader implements IsisTlv {
34 -
35 - private String sysIdAndPseudoNumber;
36 - private int defaultMetric;
37 - private byte subTlvLength;
38 - private List<TrafficEngineeringSubTlv> trafEnginSubTlv = new ArrayList<>();
39 -
40 - /**
41 - * Sets TLV type and TLV length for IP external reachability TLV.
42 - *
43 - * @param tlvHeader tlvHeader
44 - */
45 - public IpExternalReachabilityTlv(TlvHeader tlvHeader) {
46 - this.setTlvType(tlvHeader.tlvType());
47 - this.setTlvLength(tlvHeader.tlvLength());
48 - }
49 -
50 - /**
51 - * Gets the system ID and pseudo number of IP external reachability TLV.
52 - *
53 - * @return sysIdAndPseudoNumber system ID and pseudo number
54 - */
55 - public String sysIdAndPseudoNumber() {
56 - return sysIdAndPseudoNumber;
57 - }
58 -
59 - /**
60 - * Gets the system ID and pseudo number for IP external reachability TLV.
61 - *
62 - * @param sysIdAndPseudoNumber system ID and pseudo number
63 - */
64 - public void setSysIdAndPseudoNumber(String sysIdAndPseudoNumber) {
65 - this.sysIdAndPseudoNumber = sysIdAndPseudoNumber;
66 - }
67 -
68 - /**
69 - * Adds the traffic engineering sub TLV to IP external reachability TLV.
70 - *
71 - * @param trafEnginSubTlv traffic engineering sub TLV
72 - */
73 - public void addSubTlv(TrafficEngineeringSubTlv trafEnginSubTlv) {
74 - this.trafEnginSubTlv.add(trafEnginSubTlv);
75 - }
76 -
77 - /**
78 - * Gets the sub TLV length of IP external reachability TLV.
79 - *
80 - * @return sub TLV length
81 - */
82 - public byte subTlvLength() {
83 - return subTlvLength;
84 - }
85 -
86 - /**
87 - * Sets the sub TLV length for IP external reachability TLV.
88 - *
89 - * @param subTlvLength sub TLV length
90 - */
91 - public void setSubTlvLength(byte subTlvLength) {
92 - this.subTlvLength = subTlvLength;
93 - }
94 -
95 - /**
96 - * Gets default metric of IP external reachability TLV.
97 - *
98 - * @return default metric
99 - */
100 - public int defaultMetric() {
101 - return defaultMetric;
102 - }
103 -
104 - /**
105 - * Sets default metric for IP external reachability TLV.
106 - *
107 - * @param defaultMetric default metric
108 - */
109 - public void setDefaultMetric(int defaultMetric) {
110 - this.defaultMetric = defaultMetric;
111 - }
112 -
113 - @Override
114 - public void readFrom(ChannelBuffer channelBuffer) {
115 - byte[] tempByteArray = new byte[IsisUtil.ID_PLUS_ONE_BYTE];
116 - channelBuffer.readBytes(tempByteArray, 0, IsisUtil.ID_PLUS_ONE_BYTE);
117 - this.setSysIdAndPseudoNumber(IsisUtil.systemIdPlus(tempByteArray));
118 - this.setDefaultMetric(channelBuffer.readUnsignedMedium());
119 - this.setSubTlvLength((byte) channelBuffer.readByte());
120 - while (channelBuffer.readableBytes() > 0) {
121 - TlvHeader tlvHeader = new TlvHeader();
122 - tlvHeader.setTlvType(channelBuffer.readByte());
123 - tlvHeader.setTlvLength(channelBuffer.readByte());
124 - this.addSubTlv(SubTlvFinder.findSubTlv(tlvHeader,
125 - channelBuffer.readBytes(tlvHeader.tlvLength())));
126 - }
127 - }
128 -
129 - @Override
130 - public byte[] asBytes() {
131 - byte[] bytes = null;
132 - byte[] tlvHeader = tlvHeaderAsByteArray();
133 - byte[] tlvBody = tlvBodyAsBytes();
134 - //systemID + pseudo number+length of subtlv=11l
135 - tlvBody[10] = (byte) (tlvBody.length - 11);
136 - tlvHeader[1] = (byte) tlvBody.length;
137 - bytes = Bytes.concat(tlvHeader, tlvBody);
138 - return bytes;
139 - }
140 -
141 - /**
142 - * Gets TLV body of IP external reachability TLV.
143 - *
144 - * @return byteArray TLV body of IP external reachability TLV.
145 - */
146 - public byte[] tlvBodyAsBytes() {
147 - List<Byte> bodyLst = new ArrayList<>();
148 - bodyLst.addAll(IsisUtil.sourceAndLanIdToBytes(this.sysIdAndPseudoNumber()));
149 - bodyLst.addAll(Bytes.asList(IsisUtil.convertToThreeBytes(this.defaultMetric())));
150 - bodyLst.add(this.subTlvLength());
151 - for (TrafficEngineeringSubTlv trafficEngineeringSubTlv : this.trafEnginSubTlv) {
152 - bodyLst.addAll(SubTlvToBytes.tlvToBytes(trafficEngineeringSubTlv));
153 - }
154 - return Bytes.toArray(bodyLst);
155 - }
156 -
157 - @Override
158 - public String toString() {
159 - return MoreObjects.toStringHelper(getClass())
160 - .omitNullValues()
161 - .add("sysIdAndPseudoNumber", sysIdAndPseudoNumber)
162 - .add("defaultMetric", defaultMetric)
163 - .add("subTlvLength", subTlvLength)
164 - .toString();
165 - }
166 -}
...\ No newline at end of file ...\ No newline at end of file
...@@ -34,7 +34,7 @@ public class IpInterfaceAddressTlv extends TlvHeader implements IsisTlv { ...@@ -34,7 +34,7 @@ public class IpInterfaceAddressTlv extends TlvHeader implements IsisTlv {
34 /** 34 /**
35 * Creates an instance of IP interface address TLV. 35 * Creates an instance of IP interface address TLV.
36 * 36 *
37 - * @param tlvHeader tlvHeader. 37 + * @param tlvHeader TLV header
38 */ 38 */
39 public IpInterfaceAddressTlv(TlvHeader tlvHeader) { 39 public IpInterfaceAddressTlv(TlvHeader tlvHeader) {
40 40
......
...@@ -31,7 +31,7 @@ public class IpInternalReachabilityTlv extends TlvHeader implements IsisTlv { ...@@ -31,7 +31,7 @@ public class IpInternalReachabilityTlv extends TlvHeader implements IsisTlv {
31 /** 31 /**
32 * Creates an instance of IP internal reachability TLV. 32 * Creates an instance of IP internal reachability TLV.
33 * 33 *
34 - * @param tlvHeader tlvHeader. 34 + * @param tlvHeader TLV header
35 */ 35 */
36 public IpInternalReachabilityTlv(TlvHeader tlvHeader) { 36 public IpInternalReachabilityTlv(TlvHeader tlvHeader) {
37 this.setTlvType(tlvHeader.tlvType()); 37 this.setTlvType(tlvHeader.tlvType());
......
...@@ -33,7 +33,7 @@ public class IsReachabilityTlv extends TlvHeader { ...@@ -33,7 +33,7 @@ public class IsReachabilityTlv extends TlvHeader {
33 /** 33 /**
34 * Creates an instance of IS reachability TLV. 34 * Creates an instance of IS reachability TLV.
35 * 35 *
36 - * @param tlvHeader tlvHeader. 36 + * @param tlvHeader TLV header
37 */ 37 */
38 public IsReachabilityTlv(TlvHeader tlvHeader) { 38 public IsReachabilityTlv(TlvHeader tlvHeader) {
39 this.setTlvType(tlvHeader.tlvType()); 39 this.setTlvType(tlvHeader.tlvType());
......
...@@ -34,7 +34,7 @@ public class IsisNeighborTlv extends TlvHeader implements IsisTlv { ...@@ -34,7 +34,7 @@ public class IsisNeighborTlv extends TlvHeader implements IsisTlv {
34 /** 34 /**
35 * Creates an instance of ISIS neighbor TLV. 35 * Creates an instance of ISIS neighbor TLV.
36 * 36 *
37 - * @param tlvHeader tlvHeader 37 + * @param tlvHeader TLV header
38 */ 38 */
39 public IsisNeighborTlv(TlvHeader tlvHeader) { 39 public IsisNeighborTlv(TlvHeader tlvHeader) {
40 this.setTlvType(tlvHeader.tlvType()); 40 this.setTlvType(tlvHeader.tlvType());
......
...@@ -31,7 +31,7 @@ public class LspEntriesTlv extends TlvHeader implements IsisTlv { ...@@ -31,7 +31,7 @@ public class LspEntriesTlv extends TlvHeader implements IsisTlv {
31 /** 31 /**
32 * Creates an instance of LSP entries TLV. 32 * Creates an instance of LSP entries TLV.
33 * 33 *
34 - * @param tlvHeader tlvHeader. 34 + * @param tlvHeader TLV header
35 */ 35 */
36 public LspEntriesTlv(TlvHeader tlvHeader) { 36 public LspEntriesTlv(TlvHeader tlvHeader) {
37 this.setTlvType(tlvHeader.tlvType()); 37 this.setTlvType(tlvHeader.tlvType());
......
...@@ -46,7 +46,7 @@ public class LspEntry { ...@@ -46,7 +46,7 @@ public class LspEntry {
46 /** 46 /**
47 * Sets LSP sequenceNumber for LSP entry. 47 * Sets LSP sequenceNumber for LSP entry.
48 * 48 *
49 - * @param lspSequenceNumber lspSequenceNumber. 49 + * @param lspSequenceNumber lspSequenceNumber
50 */ 50 */
51 public void setLspSequenceNumber(int lspSequenceNumber) { 51 public void setLspSequenceNumber(int lspSequenceNumber) {
52 this.lspSequenceNumber = lspSequenceNumber; 52 this.lspSequenceNumber = lspSequenceNumber;
...@@ -113,11 +113,11 @@ public class LspEntry { ...@@ -113,11 +113,11 @@ public class LspEntry {
113 */ 113 */
114 public void readFrom(ChannelBuffer channelBuffer) { 114 public void readFrom(ChannelBuffer channelBuffer) {
115 this.setRemainingTime(channelBuffer.readUnsignedShort()); 115 this.setRemainingTime(channelBuffer.readUnsignedShort());
116 - byte[] tempByteArray = new byte[IsisUtil.ID_PLUS_ONE_BYTE]; 116 + byte[] tempByteArray = new byte[IsisUtil.ID_PLUS_TWO_BYTE];
117 - channelBuffer.readBytes(tempByteArray, 0, IsisUtil.ID_PLUS_ONE_BYTE); 117 + channelBuffer.readBytes(tempByteArray, 0, IsisUtil.ID_PLUS_TWO_BYTE);
118 this.setLspId(IsisUtil.systemIdPlus(tempByteArray)); 118 this.setLspId(IsisUtil.systemIdPlus(tempByteArray));
119 this.setLspSequenceNumber(channelBuffer.readInt()); 119 this.setLspSequenceNumber(channelBuffer.readInt());
120 - this.setLspChecksum(channelBuffer.readUnsignedByte()); 120 + this.setLspChecksum(channelBuffer.readUnsignedShort());
121 } 121 }
122 122
123 /** 123 /**
......
...@@ -226,7 +226,7 @@ public class MetricOfInternalReachability { ...@@ -226,7 +226,7 @@ public class MetricOfInternalReachability {
226 /** 226 /**
227 * Returns error metric of metric of internal reachability. 227 * Returns error metric of metric of internal reachability.
228 * 228 *
229 - * @return errorMetric error metic 229 + * @return errorMetric error metric
230 */ 230 */
231 public byte errorMetric() { 231 public byte errorMetric() {
232 return errorMetric; 232 return errorMetric;
......
...@@ -217,7 +217,7 @@ public class MetricsOfReachability { ...@@ -217,7 +217,7 @@ public class MetricsOfReachability {
217 /** 217 /**
218 * Sets delay metric for metric of reachability. 218 * Sets delay metric for metric of reachability.
219 * 219 *
220 - * @param delayMetric delay metric. 220 + * @param delayMetric delay metric
221 */ 221 */
222 public void setDelayMetric(byte delayMetric) { 222 public void setDelayMetric(byte delayMetric) {
223 this.delayMetric = delayMetric; 223 this.delayMetric = delayMetric;
...@@ -235,7 +235,7 @@ public class MetricsOfReachability { ...@@ -235,7 +235,7 @@ public class MetricsOfReachability {
235 /** 235 /**
236 * Sets Expense metric for metric of reachability. 236 * Sets Expense metric for metric of reachability.
237 * 237 *
238 - * @param expenseMetric Expense metric. 238 + * @param expenseMetric Expense metric
239 */ 239 */
240 public void setExpenseMetric(byte expenseMetric) { 240 public void setExpenseMetric(byte expenseMetric) {
241 this.expenseMetric = expenseMetric; 241 this.expenseMetric = expenseMetric;
...@@ -253,7 +253,7 @@ public class MetricsOfReachability { ...@@ -253,7 +253,7 @@ public class MetricsOfReachability {
253 /** 253 /**
254 * Sets Error metric for metric of reachability. 254 * Sets Error metric for metric of reachability.
255 * 255 *
256 - * @param errorMetric Error metric. 256 + * @param errorMetric Error metric
257 */ 257 */
258 public void setErrorMetric(byte errorMetric) { 258 public void setErrorMetric(byte errorMetric) {
259 this.errorMetric = errorMetric; 259 this.errorMetric = errorMetric;
......
...@@ -31,7 +31,7 @@ public class PaddingTlv extends TlvHeader implements IsisTlv { ...@@ -31,7 +31,7 @@ public class PaddingTlv extends TlvHeader implements IsisTlv {
31 /** 31 /**
32 * Creates an instance of padding TLV. 32 * Creates an instance of padding TLV.
33 * 33 *
34 - * @param tlvHeader tlvHeader. 34 + * @param tlvHeader TLV header
35 */ 35 */
36 public PaddingTlv(TlvHeader tlvHeader) { 36 public PaddingTlv(TlvHeader tlvHeader) {
37 this.setTlvType(tlvHeader.tlvType()); 37 this.setTlvType(tlvHeader.tlvType());
......
...@@ -32,7 +32,7 @@ public class ProtocolSupportedTlv extends TlvHeader implements IsisTlv { ...@@ -32,7 +32,7 @@ public class ProtocolSupportedTlv extends TlvHeader implements IsisTlv {
32 /** 32 /**
33 * Creates an instance of protocol supported TLV. 33 * Creates an instance of protocol supported TLV.
34 * 34 *
35 - * @param tlvHeader tlvHeader. 35 + * @param tlvHeader TLV header
36 */ 36 */
37 public ProtocolSupportedTlv(TlvHeader tlvHeader) { 37 public ProtocolSupportedTlv(TlvHeader tlvHeader) {
38 38
......
...@@ -44,6 +44,11 @@ public class TlvFinder extends TlvHeader { ...@@ -44,6 +44,11 @@ public class TlvFinder extends TlvHeader {
44 case EXTENDEDISREACHABILITY: 44 case EXTENDEDISREACHABILITY:
45 //TODO 45 //TODO
46 break; 46 break;
47 + case HOSTNAME:
48 + HostNameTlv hostNameTlv = new HostNameTlv(tlvHeader);
49 + hostNameTlv.readFrom(channelBuffer);
50 + isisTlv = hostNameTlv;
51 + break;
47 case IDRPINFORMATION: 52 case IDRPINFORMATION:
48 IdrpInformationTlv idrpInformationTlv = new IdrpInformationTlv(tlvHeader); 53 IdrpInformationTlv idrpInformationTlv = new IdrpInformationTlv(tlvHeader);
49 idrpInformationTlv.readFrom(channelBuffer); 54 idrpInformationTlv.readFrom(channelBuffer);
......
...@@ -40,7 +40,7 @@ public class AdministrativeGroup extends TlvHeader implements TrafficEngineering ...@@ -40,7 +40,7 @@ public class AdministrativeGroup extends TlvHeader implements TrafficEngineering
40 } 40 }
41 41
42 /** 42 /**
43 - * Gets administrative group value. 43 + * Returns administrative group value.
44 * 44 *
45 * @return administrative group value 45 * @return administrative group value
46 */ 46 */
...@@ -58,7 +58,7 @@ public class AdministrativeGroup extends TlvHeader implements TrafficEngineering ...@@ -58,7 +58,7 @@ public class AdministrativeGroup extends TlvHeader implements TrafficEngineering
58 } 58 }
59 59
60 /** 60 /**
61 - * Gets administrative group value. 61 + * Returns administrative group value.
62 * 62 *
63 * @return administrativeGroup value 63 * @return administrativeGroup value
64 */ 64 */
...@@ -93,7 +93,7 @@ public class AdministrativeGroup extends TlvHeader implements TrafficEngineering ...@@ -93,7 +93,7 @@ public class AdministrativeGroup extends TlvHeader implements TrafficEngineering
93 } 93 }
94 94
95 /** 95 /**
96 - * Gets administrative group body as byte array. 96 + * Returns administrative group body as byte array.
97 * 97 *
98 * @return byte array of sub tlv administrative group 98 * @return byte array of sub tlv administrative group
99 */ 99 */
......
...@@ -31,7 +31,7 @@ public class MaximumBandwidth extends TlvHeader implements TrafficEngineeringSub ...@@ -31,7 +31,7 @@ public class MaximumBandwidth extends TlvHeader implements TrafficEngineeringSub
31 /** 31 /**
32 * Creates an instance of maximum bandwidth. 32 * Creates an instance of maximum bandwidth.
33 * 33 *
34 - * @param header tlv header instance 34 + * @param header TLV header instance
35 */ 35 */
36 public MaximumBandwidth(TlvHeader header) { 36 public MaximumBandwidth(TlvHeader header) {
37 this.setTlvType(header.tlvType()); 37 this.setTlvType(header.tlvType());
...@@ -48,7 +48,7 @@ public class MaximumBandwidth extends TlvHeader implements TrafficEngineeringSub ...@@ -48,7 +48,7 @@ public class MaximumBandwidth extends TlvHeader implements TrafficEngineeringSub
48 } 48 }
49 49
50 /** 50 /**
51 - * Gets value of maximum bandwidth. 51 + * Returns value of maximum bandwidth.
52 * 52 *
53 * @return maximumBandwidth value of maximum bandwidth 53 * @return maximumBandwidth value of maximum bandwidth
54 */ 54 */
...@@ -69,7 +69,7 @@ public class MaximumBandwidth extends TlvHeader implements TrafficEngineeringSub ...@@ -69,7 +69,7 @@ public class MaximumBandwidth extends TlvHeader implements TrafficEngineeringSub
69 } 69 }
70 70
71 /** 71 /**
72 - * Gets byte array of maximum bandwidth sub tlv. 72 + * Returns byte array of maximum bandwidth sub tlv.
73 * 73 *
74 * @return byte array of maximum bandwidth sub tlv 74 * @return byte array of maximum bandwidth sub tlv
75 */ 75 */
...@@ -83,7 +83,7 @@ public class MaximumBandwidth extends TlvHeader implements TrafficEngineeringSub ...@@ -83,7 +83,7 @@ public class MaximumBandwidth extends TlvHeader implements TrafficEngineeringSub
83 } 83 }
84 84
85 /** 85 /**
86 - * Gets maximum bandwidth sub tlv byte array. 86 + * Returns maximum bandwidth sub tlv byte array.
87 * 87 *
88 * @return byte array of maximum bandwidth sub tlv 88 * @return byte array of maximum bandwidth sub tlv
89 */ 89 */
...@@ -92,7 +92,7 @@ public class MaximumBandwidth extends TlvHeader implements TrafficEngineeringSub ...@@ -92,7 +92,7 @@ public class MaximumBandwidth extends TlvHeader implements TrafficEngineeringSub
92 linkSubTypeBody = IsisUtil.convertToFourBytes(Float.floatToIntBits(this.maximumBandwidth)); 92 linkSubTypeBody = IsisUtil.convertToFourBytes(Float.floatToIntBits(this.maximumBandwidth));
93 return linkSubTypeBody; 93 return linkSubTypeBody;
94 } 94 }
95 - 95 + @Override
96 public String toString() { 96 public String toString() {
97 return MoreObjects.toStringHelper(getClass()) 97 return MoreObjects.toStringHelper(getClass())
98 .add("maximumBandwidth", maximumBandwidth) 98 .add("maximumBandwidth", maximumBandwidth)
......
...@@ -31,7 +31,7 @@ public class MaximumReservableBandwidth extends TlvHeader implements TrafficEngi ...@@ -31,7 +31,7 @@ public class MaximumReservableBandwidth extends TlvHeader implements TrafficEngi
31 /** 31 /**
32 * Creates an instance of maximum reservable bandwidth. 32 * Creates an instance of maximum reservable bandwidth.
33 * 33 *
34 - * @param header tlv header 34 + * @param header TLV header
35 */ 35 */
36 public MaximumReservableBandwidth(TlvHeader header) { 36 public MaximumReservableBandwidth(TlvHeader header) {
37 this.setTlvType(header.tlvType()); 37 this.setTlvType(header.tlvType());
...@@ -48,7 +48,7 @@ public class MaximumReservableBandwidth extends TlvHeader implements TrafficEngi ...@@ -48,7 +48,7 @@ public class MaximumReservableBandwidth extends TlvHeader implements TrafficEngi
48 } 48 }
49 49
50 /** 50 /**
51 - * Gets value of maximum reversible bandwidth. 51 + * Returns value of maximum reversible bandwidth.
52 * 52 *
53 * @return maximumBandwidth maximum reversible bandwidth 53 * @return maximumBandwidth maximum reversible bandwidth
54 */ 54 */
...@@ -84,7 +84,7 @@ public class MaximumReservableBandwidth extends TlvHeader implements TrafficEngi ...@@ -84,7 +84,7 @@ public class MaximumReservableBandwidth extends TlvHeader implements TrafficEngi
84 } 84 }
85 85
86 /** 86 /**
87 - * Gets maximum reservable bandwidth sub tlv body as byte array. 87 + * Returns maximum reservable bandwidth sub tlv body as byte array.
88 * 88 *
89 * @return byte of maximum reservable bandwidth sub tlv body 89 * @return byte of maximum reservable bandwidth sub tlv body
90 */ 90 */
......
...@@ -51,7 +51,7 @@ public enum SubTlvType { ...@@ -51,7 +51,7 @@ public enum SubTlvType {
51 } 51 }
52 52
53 /** 53 /**
54 - * Gets the enum instance from type value - reverse lookup purpose. 54 + * Returns the enum instance from type value - reverse lookup purpose.
55 * 55 *
56 * @param subTlvTypeValue TLV type value 56 * @param subTlvTypeValue TLV type value
57 * @return ISIS sub TLV type instance 57 * @return ISIS sub TLV type instance
...@@ -61,7 +61,7 @@ public enum SubTlvType { ...@@ -61,7 +61,7 @@ public enum SubTlvType {
61 } 61 }
62 62
63 /** 63 /**
64 - * Gets value. 64 + * Returns value.
65 * 65 *
66 * @return value 66 * @return value
67 */ 67 */
......
...@@ -47,7 +47,7 @@ public class TrafficEngineeringMetric extends TlvHeader implements TrafficEngine ...@@ -47,7 +47,7 @@ public class TrafficEngineeringMetric extends TlvHeader implements TrafficEngine
47 } 47 }
48 48
49 /** 49 /**
50 - * Gets TE metric value. 50 + * Returns TE metric value.
51 * 51 *
52 * @return value of traffic engineering metric 52 * @return value of traffic engineering metric
53 */ 53 */
...@@ -67,7 +67,7 @@ public class TrafficEngineeringMetric extends TlvHeader implements TrafficEngine ...@@ -67,7 +67,7 @@ public class TrafficEngineeringMetric extends TlvHeader implements TrafficEngine
67 } 67 }
68 68
69 /** 69 /**
70 - * Gets instance as byte array. 70 + * Returns instance as byte array.
71 * 71 *
72 * @return instance as byte array 72 * @return instance as byte array
73 */ 73 */
...@@ -82,7 +82,7 @@ public class TrafficEngineeringMetric extends TlvHeader implements TrafficEngine ...@@ -82,7 +82,7 @@ public class TrafficEngineeringMetric extends TlvHeader implements TrafficEngine
82 } 82 }
83 83
84 /** 84 /**
85 - * Gets trafficEngineeringMetric as byte array . 85 + * Returns trafficEngineeringMetric as byte array .
86 * 86 *
87 * @return byte array of trafficEngineeringMetric 87 * @return byte array of trafficEngineeringMetric
88 */ 88 */
......
...@@ -50,7 +50,7 @@ public class UnreservedBandwidth extends TlvHeader implements TrafficEngineering ...@@ -50,7 +50,7 @@ public class UnreservedBandwidth extends TlvHeader implements TrafficEngineering
50 } 50 }
51 51
52 /** 52 /**
53 - * Gets list of un reserved bandwidth . 53 + * Returns list of un reserved bandwidth .
54 * 54 *
55 * @return List of un reserved bandwidth 55 * @return List of un reserved bandwidth
56 */ 56 */
...@@ -71,7 +71,7 @@ public class UnreservedBandwidth extends TlvHeader implements TrafficEngineering ...@@ -71,7 +71,7 @@ public class UnreservedBandwidth extends TlvHeader implements TrafficEngineering
71 } 71 }
72 72
73 /** 73 /**
74 - * Gets instance as byte array. 74 + * Returns instance as byte array.
75 * 75 *
76 * @return instance as byte array 76 * @return instance as byte array
77 */ 77 */
...@@ -86,7 +86,7 @@ public class UnreservedBandwidth extends TlvHeader implements TrafficEngineering ...@@ -86,7 +86,7 @@ public class UnreservedBandwidth extends TlvHeader implements TrafficEngineering
86 } 86 }
87 87
88 /** 88 /**
89 - * Gets unreserved bandwidth as byte array. 89 + * Returns unreserved bandwidth as byte array.
90 * 90 *
91 * @return unreserved bandwidth as byte array 91 * @return unreserved bandwidth as byte array
92 */ 92 */
......
...@@ -32,6 +32,7 @@ public class ChecksumCalculator { ...@@ -32,6 +32,7 @@ public class ChecksumCalculator {
32 * @return true if valid else false 32 * @return true if valid else false
33 */ 33 */
34 public boolean validateLspCheckSum(byte[] lspPacket, int lspChecksumPos1, int lspChecksumPos2) { 34 public boolean validateLspCheckSum(byte[] lspPacket, int lspChecksumPos1, int lspChecksumPos2) {
35 +
35 byte[] checksum = calculateLspChecksum(lspPacket, lspChecksumPos1, lspChecksumPos2); 36 byte[] checksum = calculateLspChecksum(lspPacket, lspChecksumPos1, lspChecksumPos2);
36 if (lspPacket[lspChecksumPos1] == checksum[0] && lspPacket[lspChecksumPos2] == checksum[1]) { 37 if (lspPacket[lspChecksumPos1] == checksum[0] && lspPacket[lspChecksumPos2] == checksum[1]) {
37 return true; 38 return true;
......
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.isis.io.util;
17 +
18 +import com.fasterxml.jackson.databind.JsonNode;
19 +
20 +/**
21 + * Representation of ISIS config.
22 + */
23 +public enum IsisConfig {
24 + INSTANCE;
25 + private JsonNode jsonNodes = null;
26 +
27 + /**
28 + * Returns the config value.
29 + *
30 + * @return jsonNodes json node
31 + */
32 + public JsonNode config() {
33 + return jsonNodes;
34 + }
35 +
36 + /**
37 + * Sets the config value for jsonNode.
38 + *
39 + * @param jsonNodes json node
40 + */
41 + public void setConfig(JsonNode jsonNodes) {
42 + this.jsonNodes = jsonNodes;
43 + }
44 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
17 package org.onosproject.isis.io.util; 17 package org.onosproject.isis.io.util;
18 18
19 /** 19 /**
20 - * Representation of ISIS constants. 20 + * Representation of ISIS Constants.
21 */ 21 */
22 public final class IsisConstants { 22 public final class IsisConstants {
23 public static final char PDU_LENGTH = 1497; // mtu (1500) - (3) LLC 23 public static final char PDU_LENGTH = 1497; // mtu (1500) - (3) LLC
......
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.isis.io.util;
17 +
18 +import org.onlab.packet.Ip4Address;
19 +import org.onlab.packet.MacAddress;
20 +import org.onosproject.isis.controller.IsisInterface;
21 +import org.onosproject.isis.controller.IsisNeighbor;
22 +import org.onosproject.isis.controller.IsisNetworkType;
23 +import org.onosproject.isis.controller.IsisPduType;
24 +import org.onosproject.isis.io.isispacket.IsisHeader;
25 +import org.onosproject.isis.io.isispacket.pdu.AttachedToOtherAreas;
26 +import org.onosproject.isis.io.isispacket.pdu.LsPdu;
27 +import org.onosproject.isis.io.isispacket.tlv.AreaAddressTlv;
28 +import org.onosproject.isis.io.isispacket.tlv.HostNameTlv;
29 +import org.onosproject.isis.io.isispacket.tlv.IpInterfaceAddressTlv;
30 +import org.onosproject.isis.io.isispacket.tlv.IpInternalReachabilityTlv;
31 +import org.onosproject.isis.io.isispacket.tlv.IsReachabilityTlv;
32 +import org.onosproject.isis.io.isispacket.tlv.MetricOfInternalReachability;
33 +import org.onosproject.isis.io.isispacket.tlv.MetricsOfReachability;
34 +import org.onosproject.isis.io.isispacket.tlv.ProtocolSupportedTlv;
35 +import org.onosproject.isis.io.isispacket.tlv.TlvHeader;
36 +import org.onosproject.isis.io.isispacket.tlv.TlvType;
37 +
38 +import java.util.List;
39 +
40 +/**
41 + * Representation of link state PDU generator.
42 + */
43 +public class LspGenerator {
44 +
45 + public LsPdu getLsp(IsisInterface isisInterface, String lspId, IsisPduType isisPduType,
46 + List<Ip4Address> allConfiguredInterfaceIps) {
47 + IsisHeader header = getHeader(isisPduType);
48 + LsPdu lsp = new LsPdu(header);
49 +
50 + lsp.setPduLength(0);
51 + lsp.setRemainingLifeTime(IsisConstants.LSPMAXAGE);
52 + lsp.setLspId(lspId);
53 + lsp.setSequenceNumber(isisInterface.isisLsdb().lsSequenceNumber(isisPduType));
54 + lsp.setCheckSum(0);
55 + if (isisPduType == IsisPduType.L1LSPDU) {
56 + lsp.setTypeBlock((byte) 1);
57 + lsp.setIntermediateSystemType((byte) 1);
58 + } else if (isisPduType == IsisPduType.L2LSPDU) {
59 + lsp.setTypeBlock((byte) 3);
60 + lsp.setIntermediateSystemType((byte) 3);
61 + }
62 + lsp.setAttachedToOtherAreas(AttachedToOtherAreas.NONE);
63 + lsp.setPartitionRepair(false);
64 + lsp.setLspDbol(false);
65 +
66 + TlvHeader tlvHeader = new TlvHeader();
67 + tlvHeader.setTlvType(TlvType.AREAADDRESS.value());
68 + tlvHeader.setTlvLength(0);
69 + AreaAddressTlv areaAddressTlv = new AreaAddressTlv(tlvHeader);
70 + areaAddressTlv.addAddress(isisInterface.areaAddress());
71 + lsp.addTlv(areaAddressTlv);
72 +
73 + tlvHeader.setTlvType(TlvType.PROTOCOLSUPPORTED.value());
74 + tlvHeader.setTlvLength(0);
75 + ProtocolSupportedTlv protocolSupportedTlv = new ProtocolSupportedTlv(tlvHeader);
76 + protocolSupportedTlv.addProtocolSupported((byte) IsisConstants.PROTOCOLSUPPORTED);
77 + lsp.addTlv(protocolSupportedTlv);
78 +
79 + tlvHeader.setTlvType(TlvType.IPINTERFACEADDRESS.value());
80 + tlvHeader.setTlvLength(0);
81 + IpInterfaceAddressTlv ipInterfaceAddressTlv = new IpInterfaceAddressTlv(tlvHeader);
82 + for (Ip4Address ipaddress : allConfiguredInterfaceIps) {
83 + ipInterfaceAddressTlv.addInterfaceAddres(ipaddress);
84 + }
85 + lsp.addTlv(ipInterfaceAddressTlv);
86 +
87 + tlvHeader.setTlvType(TlvType.HOSTNAME.value());
88 + tlvHeader.setTlvLength(0);
89 + HostNameTlv hostNameTlv = new HostNameTlv(tlvHeader);
90 + hostNameTlv.setHostName(isisInterface.intermediateSystemName());
91 + lsp.addTlv(hostNameTlv);
92 +
93 + tlvHeader.setTlvType(TlvType.ISREACHABILITY.value());
94 + tlvHeader.setTlvLength(0);
95 + IsReachabilityTlv isReachabilityTlv = new IsReachabilityTlv(tlvHeader);
96 + isReachabilityTlv.setReserved(0);
97 + MetricsOfReachability metricsOfReachability = new MetricsOfReachability();
98 + metricsOfReachability.setDefaultMetric((byte) 10);
99 + metricsOfReachability.setDefaultIsInternal(true);
100 + metricsOfReachability.setDelayMetric((byte) 10);
101 + metricsOfReachability.setDelayIsInternal(true);
102 + metricsOfReachability.setDelayMetricSupported(true);
103 + metricsOfReachability.setExpenseMetric((byte) 10);
104 + metricsOfReachability.setExpenseIsInternal(true);
105 + metricsOfReachability.setExpenseMetricSupported(true);
106 + metricsOfReachability.setErrorMetric((byte) 10);
107 + metricsOfReachability.setErrorIsInternal(true);
108 + metricsOfReachability.setErrorMetricSupported(true);
109 + if (isisInterface.networkType() == IsisNetworkType.BROADCAST) {
110 + if (isisPduType == IsisPduType.L1LSPDU) {
111 + metricsOfReachability.setNeighborId(isisInterface.l1LanId());
112 + } else if (isisPduType == IsisPduType.L2LSPDU) {
113 + metricsOfReachability.setNeighborId(isisInterface.l2LanId());
114 + }
115 + } else if (isisInterface.networkType() == IsisNetworkType.P2P) {
116 + MacAddress neighborMac = isisInterface.neighbors().iterator().next();
117 + IsisNeighbor neighbor = isisInterface.lookup(neighborMac);
118 + metricsOfReachability.setNeighborId(neighbor.neighborSystemId());
119 + }
120 +
121 + isReachabilityTlv.addMeticsOfReachability(metricsOfReachability);
122 + lsp.addTlv(isReachabilityTlv);
123 +
124 + tlvHeader.setTlvType(TlvType.IPINTERNALREACHABILITY.value());
125 + tlvHeader.setTlvLength(0);
126 + IpInternalReachabilityTlv ipInterReacTlv = new IpInternalReachabilityTlv(tlvHeader);
127 + MetricOfInternalReachability metricOfIntRea = new MetricOfInternalReachability();
128 + metricOfIntRea.setDefaultMetric((byte) 10);
129 + metricOfIntRea.setDefaultIsInternal(true);
130 + metricOfIntRea.setDefaultDistributionDown(true);
131 + metricOfIntRea.setDelayMetric((byte) 0);
132 + metricOfIntRea.setDelayMetricSupported(false);
133 + metricOfIntRea.setDelayIsInternal(true);
134 + metricOfIntRea.setExpenseMetric((byte) 0);
135 + metricOfIntRea.setExpenseMetricSupported(false);
136 + metricOfIntRea.setExpenseIsInternal(true);
137 + metricOfIntRea.setErrorMetric((byte) 0);
138 + metricOfIntRea.setErrorMetricSupported(false);
139 + metricOfIntRea.setExpenseIsInternal(true);
140 + metricOfIntRea.setIpAddress(isisInterface.interfaceIpAddress());
141 + metricOfIntRea.setSubnetAddres(Ip4Address.valueOf(isisInterface.networkMask()));
142 + ipInterReacTlv.addInternalReachabilityMetric(metricOfIntRea);
143 + lsp.addTlv(ipInterReacTlv);
144 + return lsp;
145 + }
146 +
147 + public IsisHeader getHeader(IsisPduType pduType) {
148 + IsisHeader isisHeader = new IsisHeader();
149 + isisHeader.setIrpDiscriminator((byte) IsisConstants.IRPDISCRIMINATOR);
150 + isisHeader.setPduHeaderLength((byte) IsisUtil.getPduHeaderLength(pduType.value()));
151 + isisHeader.setVersion((byte) IsisConstants.ISISVERSION);
152 + isisHeader.setIdLength((byte) IsisConstants.IDLENGTH);
153 + isisHeader.setIsisPduType(pduType.value());
154 + isisHeader.setVersion2((byte) IsisConstants.ISISVERSION);
155 + isisHeader.setReserved((byte) IsisConstants.RESERVED);
156 + isisHeader.setMaximumAreaAddresses((byte) IsisConstants.MAXAREAADDRESS);
157 + return isisHeader;
158 + }
159 +}
...\ No newline at end of file ...\ No newline at end of file