Committed by
Jonathan Hart
ONOS-4082: Packet structures- TLV packet structures
Change-Id: Id67867d215e9e6215854bc35fc435a1b0da9bf3b
Showing
19 changed files
with
1295 additions
and
0 deletions
protocols/isis/isisio/pom.xml
0 → 100755
1 | +<!-- | ||
2 | + ~ Copyright 2016 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 | +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
17 | + xmlns="http://maven.apache.org/POM/4.0.0" | ||
18 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | ||
19 | + <modelVersion>4.0.0</modelVersion> | ||
20 | + | ||
21 | + <parent> | ||
22 | + <groupId>org.onosproject</groupId> | ||
23 | + <artifactId>onos-isis</artifactId> | ||
24 | + <version>1.6.0-SNAPSHOT</version> | ||
25 | + <relativePath>../pom.xml</relativePath> | ||
26 | + </parent> | ||
27 | + | ||
28 | + <artifactId>onos-isis-isisio</artifactId> | ||
29 | + <packaging>bundle</packaging> | ||
30 | + | ||
31 | + <description>ONOS ISIS controller protocol</description> | ||
32 | + <dependencies> | ||
33 | + <dependency> | ||
34 | + <groupId>org.onosproject</groupId> | ||
35 | + <artifactId>onos-isis-api</artifactId> | ||
36 | + <version>${project.version}</version> | ||
37 | + </dependency> | ||
38 | + <dependency> | ||
39 | + <groupId>io.netty</groupId> | ||
40 | + <artifactId>netty-buffer</artifactId> | ||
41 | + </dependency> | ||
42 | + <dependency> | ||
43 | + <groupId>org.easymock</groupId> | ||
44 | + <artifactId>easymock</artifactId> | ||
45 | + <scope>test</scope> | ||
46 | + </dependency> | ||
47 | + </dependencies> | ||
48 | + | ||
49 | +</project> |
protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/IsisConstantParameters.java
0 → 100755
1 | +/* | ||
2 | + * Copyright 2016 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; | ||
18 | + | ||
19 | +/** | ||
20 | + * Represents ISIS constant parameters. | ||
21 | + */ | ||
22 | +public final class IsisConstantParameters { | ||
23 | + | ||
24 | + public static final int IRPDISCRIMINATOR = 131; | ||
25 | + public static final int PROOCOLID = 1; | ||
26 | + public static final int VERSION = 1; | ||
27 | + public static final int RESERVED = 0; | ||
28 | + public static final int MAXAREAADDRESS = 3; | ||
29 | + public static final int IDLENGTH = 6; | ||
30 | + public static final int PROTOCOLSUPPORTED = 6; | ||
31 | + public static final int PACKETMINIMUMLENGTH = 27; | ||
32 | + public static final int PDULENGTHPOSITION = 17; | ||
33 | + public static final int PDUHEADERFORREADFROM = 8; | ||
34 | + | ||
35 | + /** | ||
36 | + * Creates an instance of this class. | ||
37 | + */ | ||
38 | + private IsisConstantParameters() { | ||
39 | + | ||
40 | + } | ||
41 | +} |
1 | +/* | ||
2 | + * Copyright 2016 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; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/AreaAddressTlv.java
0 → 100755
1 | +/* | ||
2 | + * Copyright 2016 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 io.netty.buffer.ByteBuf; | ||
22 | +import org.onosproject.isis.io.util.IsisUtil; | ||
23 | + | ||
24 | +import java.util.ArrayList; | ||
25 | +import java.util.List; | ||
26 | + | ||
27 | +/** | ||
28 | + * Represents the area address TLV. | ||
29 | + */ | ||
30 | +public class AreaAddressTlv extends TlvHeader implements IsisTlv { | ||
31 | + | ||
32 | + private List<String> areaAddress = new ArrayList(); | ||
33 | + | ||
34 | + /** | ||
35 | + * Sets TLV type and TLV length of area address TLV. | ||
36 | + * | ||
37 | + * @param tlvHeader tlvHeader. | ||
38 | + */ | ||
39 | + public AreaAddressTlv(TlvHeader tlvHeader) { | ||
40 | + | ||
41 | + this.setTlvType(tlvHeader.tlvType()); | ||
42 | + this.setTlvLength(tlvHeader.tlvLength()); | ||
43 | + | ||
44 | + } | ||
45 | + | ||
46 | + /** | ||
47 | + * Gets the area address of area address TLV. | ||
48 | + * | ||
49 | + * @return area address | ||
50 | + */ | ||
51 | + public List<String> areaAddress() { | ||
52 | + return this.areaAddress; | ||
53 | + } | ||
54 | + | ||
55 | + @Override | ||
56 | + public void readFrom(ByteBuf byteBuf) { | ||
57 | + while (byteBuf.readableBytes() > 0) { | ||
58 | + int addressLength = byteBuf.readByte(); | ||
59 | + byte[] addressBytes = new byte[IsisUtil.THREE_BYTES]; | ||
60 | + byteBuf.readBytes(addressBytes, 0, IsisUtil.THREE_BYTES); | ||
61 | + String areaAddress = IsisUtil.areaAddres(addressBytes); | ||
62 | + this.areaAddress.add(areaAddress); | ||
63 | + } | ||
64 | + } | ||
65 | + | ||
66 | + @Override | ||
67 | + public byte[] asBytes() { | ||
68 | + byte[] bytes = null; | ||
69 | + | ||
70 | + byte[] tlvHeader = tlvHeaderAsByteArray(); | ||
71 | + byte[] tlvBody = tlvBodyAsBytes(); | ||
72 | + bytes = Bytes.concat(tlvHeader, tlvBody); | ||
73 | + | ||
74 | + return bytes; | ||
75 | + } | ||
76 | + | ||
77 | + /** | ||
78 | + * Gets TLV body of area address TLV. | ||
79 | + * | ||
80 | + * @return byteArray TLV body of area address TLV | ||
81 | + */ | ||
82 | + public byte[] tlvBodyAsBytes() { | ||
83 | + | ||
84 | + List<Byte> bytes = new ArrayList(); | ||
85 | + for (String areaAddress : this.areaAddress) { | ||
86 | + bytes.add((byte) (areaAddress.length() / 2)); | ||
87 | + bytes.addAll(IsisUtil.areaAddresToBytes(areaAddress)); | ||
88 | + } | ||
89 | + byte[] byteArray = new byte[bytes.size()]; | ||
90 | + int i = 0; | ||
91 | + for (byte byt : bytes) { | ||
92 | + byteArray[i++] = byt; | ||
93 | + } | ||
94 | + return byteArray; | ||
95 | + } | ||
96 | + | ||
97 | + @Override | ||
98 | + public String toString() { | ||
99 | + return MoreObjects.toStringHelper(getClass()) | ||
100 | + .omitNullValues() | ||
101 | + .toString(); | ||
102 | + } | ||
103 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
2 | + * Copyright 2016 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.tlv; | ||
17 | + | ||
18 | +import com.google.common.base.MoreObjects; | ||
19 | +import com.google.common.primitives.Bytes; | ||
20 | +import io.netty.buffer.ByteBuf; | ||
21 | +import org.onlab.packet.Ip4Address; | ||
22 | +import org.onosproject.isis.io.util.IsisUtil; | ||
23 | + | ||
24 | +import java.util.ArrayList; | ||
25 | +import java.util.List; | ||
26 | + | ||
27 | +/** | ||
28 | + * Represents IP interface address TLV. | ||
29 | + */ | ||
30 | +public class IpInterfaceAddressTlv extends TlvHeader implements IsisTlv { | ||
31 | + private List<Ip4Address> interfaceAddress = new ArrayList(); | ||
32 | + | ||
33 | + /** | ||
34 | + * Sets TLV type and TLV length of IP interface address TLV. | ||
35 | + * | ||
36 | + * @param tlvHeader tlvHeader. | ||
37 | + */ | ||
38 | + public IpInterfaceAddressTlv(TlvHeader tlvHeader) { | ||
39 | + | ||
40 | + this.setTlvType(tlvHeader.tlvType()); | ||
41 | + this.setTlvLength(tlvHeader.tlvLength()); | ||
42 | + | ||
43 | + } | ||
44 | + | ||
45 | + /** | ||
46 | + * Gets interface address of interface address TLV. | ||
47 | + * | ||
48 | + * @return interfaceAddress interface address | ||
49 | + */ | ||
50 | + public List<Ip4Address> interfaceAddress() { | ||
51 | + return interfaceAddress; | ||
52 | + } | ||
53 | + | ||
54 | + @Override | ||
55 | + public void readFrom(ByteBuf byteBuf) { | ||
56 | + while (byteBuf.readableBytes() >= 4) { | ||
57 | + byte[] addressbytes = new byte[IsisUtil.FOUR_BYTES]; | ||
58 | + byteBuf.readBytes(addressbytes, 0, IsisUtil.FOUR_BYTES); | ||
59 | + this.interfaceAddress.add(Ip4Address.valueOf(addressbytes)); | ||
60 | + } | ||
61 | + | ||
62 | + } | ||
63 | + | ||
64 | + @Override | ||
65 | + public byte[] asBytes() { | ||
66 | + byte[] bytes = null; | ||
67 | + | ||
68 | + byte[] tlvHeader = tlvHeaderAsByteArray(); | ||
69 | + byte[] tlvBody = tlvBodyAsBytes(); | ||
70 | + bytes = Bytes.concat(tlvHeader, tlvBody); | ||
71 | + | ||
72 | + return bytes; | ||
73 | + } | ||
74 | + | ||
75 | + /** | ||
76 | + * Gets TLV body of interface address TLV. | ||
77 | + * | ||
78 | + * @return byteArray TLV body of interface address TLV. | ||
79 | + */ | ||
80 | + public byte[] tlvBodyAsBytes() { | ||
81 | + | ||
82 | + List<Byte> bytes = new ArrayList(); | ||
83 | + for (Ip4Address ip4Address : this.interfaceAddress) { | ||
84 | + bytes.addAll(Bytes.asList(ip4Address.toOctets())); | ||
85 | + } | ||
86 | + byte[] byteArray = new byte[bytes.size()]; | ||
87 | + int i = 0; | ||
88 | + for (byte byt : bytes) { | ||
89 | + byteArray[i++] = byt; | ||
90 | + } | ||
91 | + return byteArray; | ||
92 | + } | ||
93 | + | ||
94 | + @Override | ||
95 | + public String toString() { | ||
96 | + return MoreObjects.toStringHelper(getClass()) | ||
97 | + .omitNullValues() | ||
98 | + .toString(); | ||
99 | + } | ||
100 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/IsisNeighborTlv.java
0 → 100755
1 | +/* | ||
2 | + * Copyright 2016 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.tlv; | ||
17 | + | ||
18 | +import com.google.common.base.MoreObjects; | ||
19 | +import com.google.common.primitives.Bytes; | ||
20 | +import io.netty.buffer.ByteBuf; | ||
21 | +import org.onlab.packet.MacAddress; | ||
22 | +import org.onosproject.isis.io.util.IsisUtil; | ||
23 | + | ||
24 | +import java.util.ArrayList; | ||
25 | +import java.util.List; | ||
26 | + | ||
27 | +/** | ||
28 | + * Represents ISIS neighbor TLV. | ||
29 | + */ | ||
30 | +public class IsisNeighborTlv extends TlvHeader implements IsisTlv { | ||
31 | + | ||
32 | + private List<MacAddress> neighbor = new ArrayList(); | ||
33 | + | ||
34 | + /** | ||
35 | + * Sets TLV type and TLV length of ISIS neighbor TLV. | ||
36 | + * | ||
37 | + * @param tlvHeader tlvHeader. | ||
38 | + */ | ||
39 | + public IsisNeighborTlv(TlvHeader tlvHeader) { | ||
40 | + | ||
41 | + this.setTlvType(tlvHeader.tlvType()); | ||
42 | + this.setTlvLength(tlvHeader.tlvLength()); | ||
43 | + | ||
44 | + } | ||
45 | + | ||
46 | + /** | ||
47 | + * Gets the MAC address of the neighbor TLV. | ||
48 | + * | ||
49 | + * @return neighbor MAC address of the neighbor TLV | ||
50 | + */ | ||
51 | + public List<MacAddress> neighbor() { | ||
52 | + return this.neighbor; | ||
53 | + } | ||
54 | + | ||
55 | + @Override | ||
56 | + public void readFrom(ByteBuf byteBuf) { | ||
57 | + while (byteBuf.readableBytes() >= 6) { | ||
58 | + byte[] addressbytes = new byte[IsisUtil.SIX_BYTES]; | ||
59 | + byteBuf.readBytes(addressbytes, 0, IsisUtil.SIX_BYTES); | ||
60 | + this.neighbor.add(MacAddress.valueOf(addressbytes)); | ||
61 | + } | ||
62 | + | ||
63 | + } | ||
64 | + | ||
65 | + @Override | ||
66 | + public byte[] asBytes() { | ||
67 | + byte[] bytes = null; | ||
68 | + | ||
69 | + byte[] tlvHeader = tlvHeaderAsByteArray(); | ||
70 | + byte[] tlvBody = tlvBodyAsBytes(); | ||
71 | + bytes = Bytes.concat(tlvHeader, tlvBody); | ||
72 | + | ||
73 | + return bytes; | ||
74 | + | ||
75 | + } | ||
76 | + | ||
77 | + /** | ||
78 | + * Gets TLV body of neighbor TLV. | ||
79 | + * | ||
80 | + * @return byteArray TLV body of neighbor TLV | ||
81 | + */ | ||
82 | + public byte[] tlvBodyAsBytes() { | ||
83 | + | ||
84 | + List<Byte> bytes = new ArrayList(); | ||
85 | + for (MacAddress macAddress : this.neighbor) { | ||
86 | + bytes.addAll(Bytes.asList(macAddress.toBytes())); | ||
87 | + } | ||
88 | + byte[] byteArray = new byte[bytes.size()]; | ||
89 | + int i = 0; | ||
90 | + for (byte byt : bytes) { | ||
91 | + byteArray[i++] = byt; | ||
92 | + } | ||
93 | + return byteArray; | ||
94 | + } | ||
95 | + | ||
96 | + @Override | ||
97 | + public String toString() { | ||
98 | + return MoreObjects.toStringHelper(getClass()) | ||
99 | + .omitNullValues() | ||
100 | + .toString(); | ||
101 | + } | ||
102 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
2 | + * Copyright 2016 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.tlv; | ||
17 | + | ||
18 | +/** | ||
19 | + * Represents ISIS TLV. | ||
20 | + */ | ||
21 | +public interface IsisTlv { | ||
22 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/PaddingTlv.java
0 → 100755
1 | +/* | ||
2 | + * Copyright 2016 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.tlv; | ||
17 | + | ||
18 | +import com.google.common.base.MoreObjects; | ||
19 | +import com.google.common.primitives.Bytes; | ||
20 | +import io.netty.buffer.ByteBuf; | ||
21 | + | ||
22 | +import java.util.ArrayList; | ||
23 | +import java.util.List; | ||
24 | + | ||
25 | +/** | ||
26 | + * Represents padding TLV. | ||
27 | + */ | ||
28 | +public class PaddingTlv extends TlvHeader implements IsisTlv { | ||
29 | + private List<Byte> paddings = new ArrayList(); | ||
30 | + | ||
31 | + /** | ||
32 | + * Sets TLV type and TLV length of padding TLV. | ||
33 | + * | ||
34 | + * @param tlvHeader tlvHeader. | ||
35 | + */ | ||
36 | + public PaddingTlv(TlvHeader tlvHeader) { | ||
37 | + this.setTlvType(tlvHeader.tlvType()); | ||
38 | + this.setTlvLength(tlvHeader.tlvLength()); | ||
39 | + } | ||
40 | + | ||
41 | + @Override | ||
42 | + public void readFrom(ByteBuf byteBuf) { | ||
43 | + while (byteBuf.readableBytes() > 0) { | ||
44 | + this.paddings.add(byteBuf.readByte()); | ||
45 | + } | ||
46 | + } | ||
47 | + | ||
48 | + @Override | ||
49 | + public byte[] asBytes() { | ||
50 | + byte[] bytes = null; | ||
51 | + | ||
52 | + byte[] tlvHeader = tlvHeaderAsByteArray(); | ||
53 | + byte[] tlvBody = tlvBodyAsBytes(); | ||
54 | + bytes = Bytes.concat(tlvHeader, tlvBody); | ||
55 | + | ||
56 | + return bytes; | ||
57 | + } | ||
58 | + | ||
59 | + /** | ||
60 | + * Gets TLV body padding TLV. | ||
61 | + * | ||
62 | + * @return areaArea TLV body padding TLV\\ | ||
63 | + */ | ||
64 | + public byte[] tlvBodyAsBytes() { | ||
65 | + byte[] areaArea = new byte[this.tlvLength()]; | ||
66 | + return areaArea; | ||
67 | + } | ||
68 | + | ||
69 | + @Override | ||
70 | + public String toString() { | ||
71 | + return MoreObjects.toStringHelper(getClass()) | ||
72 | + .omitNullValues() | ||
73 | + .toString(); | ||
74 | + } | ||
75 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/ProtocolSupportedTlv.java
0 → 100755
1 | +/* | ||
2 | + * Copyright 2016 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.tlv; | ||
17 | + | ||
18 | +import com.google.common.primitives.Bytes; | ||
19 | +import io.netty.buffer.ByteBuf; | ||
20 | + | ||
21 | +import java.util.ArrayList; | ||
22 | +import java.util.List; | ||
23 | + | ||
24 | +/** | ||
25 | + * Represents Protocol supported TLV. | ||
26 | + */ | ||
27 | +public class ProtocolSupportedTlv extends TlvHeader implements IsisTlv { | ||
28 | + | ||
29 | + private List<Byte> protocolSupported = new ArrayList(); | ||
30 | + | ||
31 | + /** | ||
32 | + * Sets TLV type and TLV length of protocol supported TLV. | ||
33 | + * | ||
34 | + * @param tlvHeader tlvHeader. | ||
35 | + */ | ||
36 | + public ProtocolSupportedTlv(TlvHeader tlvHeader) { | ||
37 | + | ||
38 | + this.setTlvType(tlvHeader.tlvType()); | ||
39 | + this.setTlvLength(tlvHeader.tlvLength()); | ||
40 | + | ||
41 | + } | ||
42 | + | ||
43 | + /** | ||
44 | + * Gets the Protocol Supported by the TLV. | ||
45 | + * | ||
46 | + * @return Protocol Supported | ||
47 | + */ | ||
48 | + public List<Byte> protocolSupported() { | ||
49 | + | ||
50 | + return this.protocolSupported; | ||
51 | + | ||
52 | + } | ||
53 | + | ||
54 | + @Override | ||
55 | + public void readFrom(ByteBuf byteBuf) { | ||
56 | + | ||
57 | + while (byteBuf.readableBytes() > 0) { | ||
58 | + this.protocolSupported.add(byteBuf.readByte()); | ||
59 | + } | ||
60 | + } | ||
61 | + | ||
62 | + @Override | ||
63 | + public byte[] asBytes() { | ||
64 | + byte[] bytes = null; | ||
65 | + | ||
66 | + byte[] tlvHeader = tlvHeaderAsByteArray(); | ||
67 | + byte[] tlvBody = tlvBodyAsBytes(); | ||
68 | + bytes = Bytes.concat(tlvHeader, tlvBody); | ||
69 | + | ||
70 | + return bytes; | ||
71 | + } | ||
72 | + | ||
73 | + /** | ||
74 | + * Gets TLV body of protocol supported TLV. | ||
75 | + * | ||
76 | + * @return byteArray TLV body of protocol supported TLV | ||
77 | + */ | ||
78 | + public byte[] tlvBodyAsBytes() { | ||
79 | + | ||
80 | + List<Byte> bytes = new ArrayList(); | ||
81 | + for (byte byt : this.protocolSupported) { | ||
82 | + bytes.add(byt); | ||
83 | + } | ||
84 | + byte[] byteArray = new byte[bytes.size()]; | ||
85 | + int i = 0; | ||
86 | + for (byte byt : bytes) { | ||
87 | + byteArray[i++] = byt; | ||
88 | + } | ||
89 | + return byteArray; | ||
90 | + } | ||
91 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/TlvFinder.java
0 → 100755
1 | +/* | ||
2 | + * Copyright 2016 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.tlv; | ||
17 | + | ||
18 | +import io.netty.buffer.ByteBuf; | ||
19 | +import org.onosproject.isis.io.util.IsisUtil; | ||
20 | + | ||
21 | +/** | ||
22 | + * Represents TLV finder. | ||
23 | + */ | ||
24 | +public class TlvFinder extends TlvHeader { | ||
25 | + | ||
26 | + /** | ||
27 | + * Sets the value for TLV header and the body of the TLV. | ||
28 | + * | ||
29 | + * @param tlvHeader tlvHeader | ||
30 | + * @param byteBuf byteBuf | ||
31 | + * @return isisTlv ISIS TLV | ||
32 | + */ | ||
33 | + public static IsisTlv findTlv(TlvHeader tlvHeader, ByteBuf byteBuf) { | ||
34 | + | ||
35 | + IsisTlv isisTlv = null; | ||
36 | + | ||
37 | + switch (tlvHeader.tlvType()) { | ||
38 | + case IsisUtil.AREAADDRESS: | ||
39 | + AreaAddressTlv areaAddressTlv = new AreaAddressTlv(tlvHeader); | ||
40 | + areaAddressTlv.readFrom(byteBuf); | ||
41 | + isisTlv = areaAddressTlv; | ||
42 | + break; | ||
43 | + case IsisUtil.IPINTERFACEADDRESS: | ||
44 | + IpInterfaceAddressTlv ipTlv = new IpInterfaceAddressTlv(tlvHeader); | ||
45 | + ipTlv.readFrom(byteBuf); | ||
46 | + isisTlv = ipTlv; | ||
47 | + break; | ||
48 | + case IsisUtil.PROTOCOLSUPPORTED: | ||
49 | + ProtocolSupportedTlv psTlv = new ProtocolSupportedTlv(tlvHeader); | ||
50 | + psTlv.readFrom(byteBuf); | ||
51 | + isisTlv = psTlv; | ||
52 | + break; | ||
53 | + case IsisUtil.ISNEIGHBORS: | ||
54 | + IsisNeighborTlv isisNeighborTlv = new IsisNeighborTlv(tlvHeader); | ||
55 | + isisNeighborTlv.readFrom(byteBuf); | ||
56 | + isisTlv = isisNeighborTlv; | ||
57 | + break; | ||
58 | + case IsisUtil.PADDING: | ||
59 | + PaddingTlv paddingTlv = new PaddingTlv(tlvHeader); | ||
60 | + paddingTlv.readFrom(byteBuf); | ||
61 | + isisTlv = paddingTlv; | ||
62 | + break; | ||
63 | + default: | ||
64 | + break; | ||
65 | + } | ||
66 | + | ||
67 | + return isisTlv; | ||
68 | + } | ||
69 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/TlvHeader.java
0 → 100755
1 | +/* | ||
2 | + * Copyright 2016 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.tlv; | ||
17 | + | ||
18 | +import com.google.common.base.MoreObjects; | ||
19 | +import com.google.common.primitives.Bytes; | ||
20 | +import io.netty.buffer.ByteBuf; | ||
21 | + | ||
22 | +import java.util.ArrayList; | ||
23 | +import java.util.List; | ||
24 | + | ||
25 | +/** | ||
26 | + * Represents TLV header. | ||
27 | + */ | ||
28 | +public class TlvHeader implements IsisTlv { | ||
29 | + private int tlvType; | ||
30 | + private int tlvLength; | ||
31 | + | ||
32 | + /** | ||
33 | + * Gets the TLV length of the TLV. | ||
34 | + * | ||
35 | + * @return tlvLength TLV length | ||
36 | + */ | ||
37 | + public int tlvLength() { | ||
38 | + return tlvLength; | ||
39 | + } | ||
40 | + | ||
41 | + /** | ||
42 | + * Sets the TLV length for the mTLV. | ||
43 | + * | ||
44 | + * @param tlvLength TLV length | ||
45 | + */ | ||
46 | + public void setTlvLength(int tlvLength) { | ||
47 | + this.tlvLength = tlvLength; | ||
48 | + } | ||
49 | + | ||
50 | + /** | ||
51 | + * Gets the TLV type of the TLV. | ||
52 | + * | ||
53 | + * @return tlvType TLV type | ||
54 | + */ | ||
55 | + public int tlvType() { | ||
56 | + return tlvType; | ||
57 | + } | ||
58 | + | ||
59 | + /** | ||
60 | + * Sets TLV type for the TLV. | ||
61 | + * | ||
62 | + * @param tlvType TLV type | ||
63 | + */ | ||
64 | + public void setTlvType(int tlvType) { | ||
65 | + this.tlvType = tlvType; | ||
66 | + } | ||
67 | + | ||
68 | + /** | ||
69 | + * Sets the TLV values of TLV from b yte buffer. | ||
70 | + * | ||
71 | + * @param byteBuf byteBuf. | ||
72 | + */ | ||
73 | + public void readFrom(ByteBuf byteBuf) { | ||
74 | + //implemented in sub classes | ||
75 | + } | ||
76 | + | ||
77 | + | ||
78 | + /** | ||
79 | + * Gets the TLV of the TLV as bytes. | ||
80 | + * | ||
81 | + * @return null | ||
82 | + */ | ||
83 | + public byte[] asBytes() { | ||
84 | + //implemented the subclasses | ||
85 | + return null; | ||
86 | + } | ||
87 | + | ||
88 | + /** | ||
89 | + * Gets the TLV header of the TLV. | ||
90 | + * | ||
91 | + * @return headerLst TLV of the TLV | ||
92 | + */ | ||
93 | + public byte[] tlvHeaderAsByteArray() { | ||
94 | + List<Byte> headerLst = new ArrayList(); | ||
95 | + headerLst.add((byte) this.tlvType); | ||
96 | + headerLst.add((byte) this.tlvLength); | ||
97 | + return Bytes.toArray(headerLst); | ||
98 | + } | ||
99 | + | ||
100 | + @Override | ||
101 | + public String toString() { | ||
102 | + return MoreObjects.toStringHelper(getClass()) | ||
103 | + .omitNullValues() | ||
104 | + .add("tlvType", tlvType) | ||
105 | + .add("tlvLength", tlvLength) | ||
106 | + .toString(); | ||
107 | + } | ||
108 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
2 | + * Copyright 2016 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.tlv; | ||
17 | + | ||
18 | +/** | ||
19 | + * Represents various values for TLV types. | ||
20 | + */ | ||
21 | +public enum TlvType { | ||
22 | + AREAADDRESS(1), | ||
23 | + ISREACHABILITY(2), | ||
24 | + ISNEIGHBORS(6), | ||
25 | + PADDING(8), | ||
26 | + LSPENTRY(9), | ||
27 | + AUTHENTICATION(10), | ||
28 | + CHECKSUM(12), | ||
29 | + EXTENDEDISREACHABILITY(22), | ||
30 | + ISALIAS(24), | ||
31 | + IPINTERNALREACHABILITY(128), | ||
32 | + PROTOCOLSUPPORTED(129), | ||
33 | + IPEXTERNALREACHABILITY(130), | ||
34 | + IDRPINFORMATION(131), | ||
35 | + IPINTERFACEADDRESS(132); | ||
36 | + | ||
37 | + private int value; | ||
38 | + | ||
39 | + /** | ||
40 | + * Sets the TLV type value. | ||
41 | + * @param value value. | ||
42 | + */ | ||
43 | + TlvType(int value) { | ||
44 | + this.value = value; | ||
45 | + } | ||
46 | + | ||
47 | + /** | ||
48 | + * Gets value. | ||
49 | + * @return value | ||
50 | + */ | ||
51 | + public int value() { | ||
52 | + return value; | ||
53 | + } | ||
54 | +} |
protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/TlvsToBytes.java
0 → 100755
1 | +/* | ||
2 | + * Copyright 2016 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.tlv; | ||
17 | + | ||
18 | +import com.google.common.primitives.Bytes; | ||
19 | + | ||
20 | +import java.util.ArrayList; | ||
21 | +import java.util.List; | ||
22 | + | ||
23 | +/** | ||
24 | + * Represents conversion of TLV's to bytes. | ||
25 | + */ | ||
26 | +public final class TlvsToBytes { | ||
27 | + /** | ||
28 | + * Sets the ISIS TLV and returns in the form of bytes. | ||
29 | + * | ||
30 | + * @param isisTlv isisTlv | ||
31 | + * @return tlvBytes TLV bytes | ||
32 | + */ | ||
33 | + public static List<Byte> tlvToBytes(IsisTlv isisTlv) { | ||
34 | + | ||
35 | + List<Byte> tlvBytes = new ArrayList(); | ||
36 | + if (isisTlv instanceof AreaAddressTlv) { | ||
37 | + AreaAddressTlv areaAddressTlv = (AreaAddressTlv) isisTlv; | ||
38 | + tlvBytes.addAll(Bytes.asList(areaAddressTlv.asBytes())); | ||
39 | + } else if (isisTlv instanceof IpInterfaceAddressTlv) { | ||
40 | + IpInterfaceAddressTlv ipInterfaceAddressTlv = (IpInterfaceAddressTlv) isisTlv; | ||
41 | + tlvBytes.addAll(Bytes.asList(ipInterfaceAddressTlv.asBytes())); | ||
42 | + } else if (isisTlv instanceof ProtocolSupportedTlv) { | ||
43 | + ProtocolSupportedTlv protocolSupportedTlv = (ProtocolSupportedTlv) isisTlv; | ||
44 | + tlvBytes.addAll(Bytes.asList(protocolSupportedTlv.asBytes())); | ||
45 | + } else if (isisTlv instanceof PaddingTlv) { | ||
46 | + PaddingTlv paddingTlv = (PaddingTlv) isisTlv; | ||
47 | + tlvBytes.addAll(Bytes.asList(paddingTlv.asBytes())); | ||
48 | + } else if (isisTlv instanceof IsisNeighborTlv) { | ||
49 | + IsisNeighborTlv isisNeighborTlv = (IsisNeighborTlv) isisTlv; | ||
50 | + tlvBytes.addAll(Bytes.asList(isisNeighborTlv.asBytes())); | ||
51 | + } else { | ||
52 | + System.out.println("UNKNOWN TLV TYPE ::TlvsToBytes "); | ||
53 | + } | ||
54 | + | ||
55 | + return tlvBytes; | ||
56 | + } | ||
57 | + /** | ||
58 | + * Creates an instance. | ||
59 | + */ | ||
60 | + private TlvsToBytes() { | ||
61 | + //private constructor | ||
62 | + } | ||
63 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/package-info.java
0 → 100755
1 | +/* | ||
2 | + * Copyright 2016 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.tlv; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
2 | + * Copyright 2016 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; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
2 | + * Copyright 2016 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 | + | ||
19 | +import com.google.common.base.MoreObjects; | ||
20 | +import com.google.common.primitives.Bytes; | ||
21 | +import org.onosproject.isis.io.isispacket.tlv.PaddingTlv; | ||
22 | +import org.onosproject.isis.io.isispacket.tlv.TlvHeader; | ||
23 | + | ||
24 | +import javax.xml.bind.DatatypeConverter; | ||
25 | +import java.util.ArrayList; | ||
26 | +import java.util.List; | ||
27 | +import java.util.StringTokenizer; | ||
28 | + | ||
29 | +/** | ||
30 | + * Represents ISIS utils. | ||
31 | + */ | ||
32 | +public final class IsisUtil { | ||
33 | + public static final int AREAADDRESS = 1; | ||
34 | + public static final int ISREACHABILITY = 2; | ||
35 | + public static final int ISNEIGHBORS = 6; | ||
36 | + public static final int PADDING = 8; | ||
37 | + public static final int LSPENTRY = 9; | ||
38 | + public static final int AUTHENTICATION = 10; | ||
39 | + public static final int CHECKSUM = 12; | ||
40 | + public static final int EXTENDEDISREACHABILITY = 22; | ||
41 | + public static final int ISALIAS = 24; | ||
42 | + public static final int IPINTERNALREACHABILITY = 128; | ||
43 | + public static final int PROTOCOLSUPPORTED = 129; | ||
44 | + public static final int IPEXTERNALREACHABILITY = 130; | ||
45 | + public static final int IDRPINFORMATION = 131; | ||
46 | + public static final int IPINTERFACEADDRESS = 132; | ||
47 | + public static final int L1HELLOPDU = 1; | ||
48 | + public static final int L2HELLOPDU = 2; | ||
49 | + public static final int P2PHELLOPDU = 3; | ||
50 | + public static final int L1LSPDU = 18; | ||
51 | + public static final int L2LSPDU = 20; | ||
52 | + public static final int L1CSNP = 24; | ||
53 | + public static final int L2CSNP = 25; | ||
54 | + public static final int L1PSNP = 26; | ||
55 | + public static final int L2PSNP = 27; | ||
56 | + public static final int L1L2_LS_PDUHEADERLENGTH = 27; | ||
57 | + public static final int P2PPDUHEADERLENGTH = 20; | ||
58 | + public static final int PSNPPDUHEADERLENGTH = 17; | ||
59 | + public static final char ETHER_FRAME_LEN = 1514; | ||
60 | + public static final int ID_SIX_BYTES = 6; | ||
61 | + public static final int ID_PLUS_ONE_BYTE = 7; | ||
62 | + public static final int ID_PLUS_TWO_BYTE = 8; | ||
63 | + public static final int THREE_BYTES = 3; | ||
64 | + public static final int SIX_BYTES = 6; | ||
65 | + public static final int FOUR_BYTES = 4; | ||
66 | + public static final int PADDING_FIXED_LENGTH = 255; | ||
67 | + | ||
68 | + /** | ||
69 | + * Creates an instance of this class. | ||
70 | + */ | ||
71 | + private IsisUtil() { | ||
72 | + | ||
73 | + } | ||
74 | + | ||
75 | + /** | ||
76 | + * Parse byte array to string system ID. | ||
77 | + * | ||
78 | + * @param bytes system ID | ||
79 | + * @return systemId system ID. | ||
80 | + */ | ||
81 | + public static String systemId(byte[] bytes) { | ||
82 | + String systemId = ""; | ||
83 | + for (Byte byt : bytes) { | ||
84 | + String hexa = Integer.toHexString(Byte.toUnsignedInt(byt)); | ||
85 | + if (hexa.length() % 2 != 0) { | ||
86 | + hexa = "0" + hexa; | ||
87 | + } | ||
88 | + systemId = systemId + hexa; | ||
89 | + if (systemId.length() == 4 || systemId.length() == 9) { | ||
90 | + systemId = systemId + "."; | ||
91 | + } | ||
92 | + } | ||
93 | + return systemId; | ||
94 | + } | ||
95 | + | ||
96 | + /** | ||
97 | + * Parse byte array to LAN ID. | ||
98 | + * | ||
99 | + * @param bytes LAN ID | ||
100 | + * @return systemId system ID. | ||
101 | + */ | ||
102 | + public static String systemIdPlus(byte[] bytes) { | ||
103 | + String systemId = ""; | ||
104 | + for (Byte byt : bytes) { | ||
105 | + String hexa = Integer.toHexString(Byte.toUnsignedInt(byt)); | ||
106 | + if (hexa.length() % 2 != 0) { | ||
107 | + hexa = "0" + hexa; | ||
108 | + } | ||
109 | + systemId = systemId + hexa; | ||
110 | + if (systemId.length() == 4 || systemId.length() == 9 | ||
111 | + || systemId.length() == 14) { | ||
112 | + systemId = systemId + "."; | ||
113 | + } | ||
114 | + } | ||
115 | + return systemId; | ||
116 | + } | ||
117 | + | ||
118 | + /** | ||
119 | + * Parse byte array to area address. | ||
120 | + * | ||
121 | + * @param bytes area address | ||
122 | + * @return areaAddress area address | ||
123 | + */ | ||
124 | + public static String areaAddres(byte[] bytes) { | ||
125 | + int count = 0; | ||
126 | + String areaAddress = ""; | ||
127 | + for (Byte byt : bytes) { | ||
128 | + String hexa = Integer.toHexString(Byte.toUnsignedInt(byt)); | ||
129 | + if (hexa.length() % 2 != 0) { | ||
130 | + hexa = "0" + hexa; | ||
131 | + } | ||
132 | + if (count == 0) { | ||
133 | + hexa = hexa + "."; | ||
134 | + } | ||
135 | + areaAddress = areaAddress + hexa; | ||
136 | + count++; | ||
137 | + } | ||
138 | + return areaAddress; | ||
139 | + } | ||
140 | + | ||
141 | + /** | ||
142 | + * Parse area address to bytes. | ||
143 | + * | ||
144 | + * @param address area address | ||
145 | + * @return areaAddress area address | ||
146 | + */ | ||
147 | + public static List<Byte> areaAddresToBytes(String address) { | ||
148 | + List<Byte> idLst = new ArrayList(); | ||
149 | + StringTokenizer tokenizer = new StringTokenizer(address, "."); | ||
150 | + int count = 0; | ||
151 | + while (tokenizer.hasMoreElements()) { | ||
152 | + String str = tokenizer.nextToken(); | ||
153 | + if (str.length() % 2 != 0) { | ||
154 | + str = "0" + str; | ||
155 | + } | ||
156 | + if (count > 0) { | ||
157 | + | ||
158 | + for (int i = 0; i < str.length(); i = i + 2) { | ||
159 | + idLst.add((byte) Integer.parseInt(str.substring(i, i + 2), 16)); | ||
160 | + } | ||
161 | + } else { | ||
162 | + idLst.add((byte) Integer.parseInt(str, 16)); | ||
163 | + } | ||
164 | + count++; | ||
165 | + } | ||
166 | + return idLst; | ||
167 | + } | ||
168 | + | ||
169 | + /** | ||
170 | + * Gets PDU header length. | ||
171 | + * | ||
172 | + * @param pduType PDU type | ||
173 | + * @return headerLength header length | ||
174 | + */ | ||
175 | + public static int getPduHeaderLength(int pduType) { | ||
176 | + int headerLength = 0; | ||
177 | + switch (pduType) { | ||
178 | + case L1HELLOPDU: | ||
179 | + case L2HELLOPDU: | ||
180 | + case L1LSPDU: | ||
181 | + case L2LSPDU: | ||
182 | + headerLength = L1L2_LS_PDUHEADERLENGTH; | ||
183 | + break; | ||
184 | + case P2PHELLOPDU: | ||
185 | + headerLength = P2PPDUHEADERLENGTH; | ||
186 | + break; | ||
187 | + case L1PSNP: | ||
188 | + case L2PSNP: | ||
189 | + headerLength = PSNPPDUHEADERLENGTH; | ||
190 | + break; | ||
191 | + default: | ||
192 | + break; | ||
193 | + } | ||
194 | + return headerLength; | ||
195 | + } | ||
196 | + | ||
197 | + /** | ||
198 | + * Parse source and LAN ID. | ||
199 | + * | ||
200 | + * @param id source and LAN ID | ||
201 | + * @return sourceAndLanIdToBytes source and LAN ID | ||
202 | + */ | ||
203 | + public static List<Byte> sourceAndLanIdToBytes(String id) { | ||
204 | + List<Byte> idLst = new ArrayList(); | ||
205 | + | ||
206 | + StringTokenizer tokenizer = new StringTokenizer(id, "."); | ||
207 | + while (tokenizer.hasMoreElements()) { | ||
208 | + int i = 0; | ||
209 | + String str = tokenizer.nextToken(); | ||
210 | + idLst.add((byte) Integer.parseInt(str.substring(0, i + 2), 16)); | ||
211 | + if (str.length() > 2) { | ||
212 | + idLst.add((byte) Integer.parseInt(str.substring(i + 2, str.length()), 16)); | ||
213 | + } | ||
214 | + | ||
215 | + } | ||
216 | + return idLst; | ||
217 | + } | ||
218 | + | ||
219 | + /** | ||
220 | + * Parse padding for PDU based on current length. | ||
221 | + * | ||
222 | + * @param currentLength current length | ||
223 | + * @return byteArray padding array | ||
224 | + */ | ||
225 | + public static byte[] paddingForPdu(int currentLength) { | ||
226 | + List<Byte> bytes = new ArrayList<>(); | ||
227 | + while (ETHER_FRAME_LEN > currentLength) { | ||
228 | + int length = ETHER_FRAME_LEN - currentLength; | ||
229 | + TlvHeader tlvHeader = new TlvHeader(); | ||
230 | + tlvHeader.setTlvType(PADDING); | ||
231 | + if (length >= PADDING_FIXED_LENGTH) { | ||
232 | + tlvHeader.setTlvLength(PADDING_FIXED_LENGTH); | ||
233 | + } else { | ||
234 | + tlvHeader.setTlvLength(ETHER_FRAME_LEN - currentLength); | ||
235 | + } | ||
236 | + PaddingTlv tlv = new PaddingTlv(tlvHeader); | ||
237 | + bytes.addAll(Bytes.asList(tlv.asBytes())); | ||
238 | + currentLength = currentLength + tlv.tlvLength(); | ||
239 | + } | ||
240 | + byte[] byteArray = new byte[bytes.size()]; | ||
241 | + int i = 0; | ||
242 | + for (byte byt : bytes) { | ||
243 | + byteArray[i++] = byt; | ||
244 | + } | ||
245 | + return byteArray; | ||
246 | + | ||
247 | + } | ||
248 | + | ||
249 | + /** | ||
250 | + * Converts an integer to two bytes. | ||
251 | + * | ||
252 | + * @param numberToConvert number to convert | ||
253 | + * @return numInBytes given number as bytes | ||
254 | + */ | ||
255 | + public static byte[] convertToTwoBytes(int numberToConvert) { | ||
256 | + | ||
257 | + byte[] numInBytes = new byte[2]; | ||
258 | + String s1 = Integer.toHexString(numberToConvert); | ||
259 | + if (s1.length() % 2 != 0) { | ||
260 | + s1 = "0" + s1; | ||
261 | + } | ||
262 | + byte[] hexas = DatatypeConverter.parseHexBinary(s1); | ||
263 | + if (hexas.length == 1) { | ||
264 | + numInBytes[0] = 0; | ||
265 | + numInBytes[1] = hexas[0]; | ||
266 | + } else { | ||
267 | + numInBytes[0] = hexas[0]; | ||
268 | + numInBytes[1] = hexas[1]; | ||
269 | + } | ||
270 | + return numInBytes; | ||
271 | + } | ||
272 | + | ||
273 | + /** | ||
274 | + * Converts a number to four bytes. | ||
275 | + * | ||
276 | + * @param numberToConvert number to convert | ||
277 | + * @return numInBytes given number as bytes | ||
278 | + */ | ||
279 | + public static byte[] convertToFourBytes(int numberToConvert) { | ||
280 | + | ||
281 | + byte[] numInBytes = new byte[4]; | ||
282 | + String s1 = Integer.toHexString(numberToConvert); | ||
283 | + if (s1.length() % 2 != 0) { | ||
284 | + s1 = "0" + s1; | ||
285 | + } | ||
286 | + byte[] hexas = DatatypeConverter.parseHexBinary(s1); | ||
287 | + if (hexas.length == 1) { | ||
288 | + numInBytes[0] = 0; | ||
289 | + numInBytes[1] = 0; | ||
290 | + numInBytes[2] = 0; | ||
291 | + numInBytes[3] = hexas[0]; | ||
292 | + } else if (hexas.length == 2) { | ||
293 | + numInBytes[0] = 0; | ||
294 | + numInBytes[1] = 0; | ||
295 | + numInBytes[2] = hexas[0]; | ||
296 | + numInBytes[3] = hexas[1]; | ||
297 | + } else if (hexas.length == 3) { | ||
298 | + numInBytes[0] = 0; | ||
299 | + numInBytes[1] = hexas[0]; | ||
300 | + numInBytes[2] = hexas[1]; | ||
301 | + numInBytes[3] = hexas[2]; | ||
302 | + } else { | ||
303 | + numInBytes[0] = hexas[0]; | ||
304 | + numInBytes[1] = hexas[1]; | ||
305 | + numInBytes[2] = hexas[2]; | ||
306 | + numInBytes[3] = hexas[3]; | ||
307 | + } | ||
308 | + return numInBytes; | ||
309 | + } | ||
310 | + | ||
311 | + @Override | ||
312 | + public String toString() { | ||
313 | + return MoreObjects.toStringHelper(getClass()) | ||
314 | + .omitNullValues() | ||
315 | + .toString(); | ||
316 | + } | ||
317 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
2 | + * Copyright 2016 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.util; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
2 | + * Copyright 2016 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; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment