mirror of
https://github.com/opennetworkinglab/onos.git
synced 2026-05-05 20:26:16 +02:00
ONOS-4082: Packet structures- TLV packet structures
Change-Id: Id67867d215e9e6215854bc35fc435a1b0da9bf3b
This commit is contained in:
parent
4563aa2f9e
commit
e04626fc2d
49
protocols/isis/isisio/pom.xml
Executable file
49
protocols/isis/isisio/pom.xml
Executable file
@ -0,0 +1,49 @@
|
||||
<!--
|
||||
~ Copyright 2016 Open Networking Laboratory
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.onosproject</groupId>
|
||||
<artifactId>onos-isis</artifactId>
|
||||
<version>1.6.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<artifactId>onos-isis-isisio</artifactId>
|
||||
<packaging>bundle</packaging>
|
||||
|
||||
<description>ONOS ISIS controller protocol</description>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.onosproject</groupId>
|
||||
<artifactId>onos-isis-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-buffer</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.easymock</groupId>
|
||||
<artifactId>easymock</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.onosproject.isis.io.isispacket;
|
||||
|
||||
/**
|
||||
* Represents ISIS constant parameters.
|
||||
*/
|
||||
public final class IsisConstantParameters {
|
||||
|
||||
public static final int IRPDISCRIMINATOR = 131;
|
||||
public static final int PROOCOLID = 1;
|
||||
public static final int VERSION = 1;
|
||||
public static final int RESERVED = 0;
|
||||
public static final int MAXAREAADDRESS = 3;
|
||||
public static final int IDLENGTH = 6;
|
||||
public static final int PROTOCOLSUPPORTED = 6;
|
||||
public static final int PACKETMINIMUMLENGTH = 27;
|
||||
public static final int PDULENGTHPOSITION = 17;
|
||||
public static final int PDUHEADERFORREADFROM = 8;
|
||||
|
||||
/**
|
||||
* Creates an instance of this class.
|
||||
*/
|
||||
private IsisConstantParameters() {
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implementation of the ISIS protocol.
|
||||
*/
|
||||
package org.onosproject.isis.io.isispacket;
|
||||
@ -0,0 +1,103 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.onosproject.isis.io.isispacket.tlv;
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
import com.google.common.primitives.Bytes;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import org.onosproject.isis.io.util.IsisUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Represents the area address TLV.
|
||||
*/
|
||||
public class AreaAddressTlv extends TlvHeader implements IsisTlv {
|
||||
|
||||
private List<String> areaAddress = new ArrayList();
|
||||
|
||||
/**
|
||||
* Sets TLV type and TLV length of area address TLV.
|
||||
*
|
||||
* @param tlvHeader tlvHeader.
|
||||
*/
|
||||
public AreaAddressTlv(TlvHeader tlvHeader) {
|
||||
|
||||
this.setTlvType(tlvHeader.tlvType());
|
||||
this.setTlvLength(tlvHeader.tlvLength());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the area address of area address TLV.
|
||||
*
|
||||
* @return area address
|
||||
*/
|
||||
public List<String> areaAddress() {
|
||||
return this.areaAddress;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFrom(ByteBuf byteBuf) {
|
||||
while (byteBuf.readableBytes() > 0) {
|
||||
int addressLength = byteBuf.readByte();
|
||||
byte[] addressBytes = new byte[IsisUtil.THREE_BYTES];
|
||||
byteBuf.readBytes(addressBytes, 0, IsisUtil.THREE_BYTES);
|
||||
String areaAddress = IsisUtil.areaAddres(addressBytes);
|
||||
this.areaAddress.add(areaAddress);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] asBytes() {
|
||||
byte[] bytes = null;
|
||||
|
||||
byte[] tlvHeader = tlvHeaderAsByteArray();
|
||||
byte[] tlvBody = tlvBodyAsBytes();
|
||||
bytes = Bytes.concat(tlvHeader, tlvBody);
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets TLV body of area address TLV.
|
||||
*
|
||||
* @return byteArray TLV body of area address TLV
|
||||
*/
|
||||
public byte[] tlvBodyAsBytes() {
|
||||
|
||||
List<Byte> bytes = new ArrayList();
|
||||
for (String areaAddress : this.areaAddress) {
|
||||
bytes.add((byte) (areaAddress.length() / 2));
|
||||
bytes.addAll(IsisUtil.areaAddresToBytes(areaAddress));
|
||||
}
|
||||
byte[] byteArray = new byte[bytes.size()];
|
||||
int i = 0;
|
||||
for (byte byt : bytes) {
|
||||
byteArray[i++] = byt;
|
||||
}
|
||||
return byteArray;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return MoreObjects.toStringHelper(getClass())
|
||||
.omitNullValues()
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,100 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.onosproject.isis.io.isispacket.tlv;
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
import com.google.common.primitives.Bytes;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import org.onlab.packet.Ip4Address;
|
||||
import org.onosproject.isis.io.util.IsisUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Represents IP interface address TLV.
|
||||
*/
|
||||
public class IpInterfaceAddressTlv extends TlvHeader implements IsisTlv {
|
||||
private List<Ip4Address> interfaceAddress = new ArrayList();
|
||||
|
||||
/**
|
||||
* Sets TLV type and TLV length of IP interface address TLV.
|
||||
*
|
||||
* @param tlvHeader tlvHeader.
|
||||
*/
|
||||
public IpInterfaceAddressTlv(TlvHeader tlvHeader) {
|
||||
|
||||
this.setTlvType(tlvHeader.tlvType());
|
||||
this.setTlvLength(tlvHeader.tlvLength());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets interface address of interface address TLV.
|
||||
*
|
||||
* @return interfaceAddress interface address
|
||||
*/
|
||||
public List<Ip4Address> interfaceAddress() {
|
||||
return interfaceAddress;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFrom(ByteBuf byteBuf) {
|
||||
while (byteBuf.readableBytes() >= 4) {
|
||||
byte[] addressbytes = new byte[IsisUtil.FOUR_BYTES];
|
||||
byteBuf.readBytes(addressbytes, 0, IsisUtil.FOUR_BYTES);
|
||||
this.interfaceAddress.add(Ip4Address.valueOf(addressbytes));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] asBytes() {
|
||||
byte[] bytes = null;
|
||||
|
||||
byte[] tlvHeader = tlvHeaderAsByteArray();
|
||||
byte[] tlvBody = tlvBodyAsBytes();
|
||||
bytes = Bytes.concat(tlvHeader, tlvBody);
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets TLV body of interface address TLV.
|
||||
*
|
||||
* @return byteArray TLV body of interface address TLV.
|
||||
*/
|
||||
public byte[] tlvBodyAsBytes() {
|
||||
|
||||
List<Byte> bytes = new ArrayList();
|
||||
for (Ip4Address ip4Address : this.interfaceAddress) {
|
||||
bytes.addAll(Bytes.asList(ip4Address.toOctets()));
|
||||
}
|
||||
byte[] byteArray = new byte[bytes.size()];
|
||||
int i = 0;
|
||||
for (byte byt : bytes) {
|
||||
byteArray[i++] = byt;
|
||||
}
|
||||
return byteArray;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return MoreObjects.toStringHelper(getClass())
|
||||
.omitNullValues()
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,102 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.onosproject.isis.io.isispacket.tlv;
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
import com.google.common.primitives.Bytes;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import org.onlab.packet.MacAddress;
|
||||
import org.onosproject.isis.io.util.IsisUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Represents ISIS neighbor TLV.
|
||||
*/
|
||||
public class IsisNeighborTlv extends TlvHeader implements IsisTlv {
|
||||
|
||||
private List<MacAddress> neighbor = new ArrayList();
|
||||
|
||||
/**
|
||||
* Sets TLV type and TLV length of ISIS neighbor TLV.
|
||||
*
|
||||
* @param tlvHeader tlvHeader.
|
||||
*/
|
||||
public IsisNeighborTlv(TlvHeader tlvHeader) {
|
||||
|
||||
this.setTlvType(tlvHeader.tlvType());
|
||||
this.setTlvLength(tlvHeader.tlvLength());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the MAC address of the neighbor TLV.
|
||||
*
|
||||
* @return neighbor MAC address of the neighbor TLV
|
||||
*/
|
||||
public List<MacAddress> neighbor() {
|
||||
return this.neighbor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFrom(ByteBuf byteBuf) {
|
||||
while (byteBuf.readableBytes() >= 6) {
|
||||
byte[] addressbytes = new byte[IsisUtil.SIX_BYTES];
|
||||
byteBuf.readBytes(addressbytes, 0, IsisUtil.SIX_BYTES);
|
||||
this.neighbor.add(MacAddress.valueOf(addressbytes));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] asBytes() {
|
||||
byte[] bytes = null;
|
||||
|
||||
byte[] tlvHeader = tlvHeaderAsByteArray();
|
||||
byte[] tlvBody = tlvBodyAsBytes();
|
||||
bytes = Bytes.concat(tlvHeader, tlvBody);
|
||||
|
||||
return bytes;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets TLV body of neighbor TLV.
|
||||
*
|
||||
* @return byteArray TLV body of neighbor TLV
|
||||
*/
|
||||
public byte[] tlvBodyAsBytes() {
|
||||
|
||||
List<Byte> bytes = new ArrayList();
|
||||
for (MacAddress macAddress : this.neighbor) {
|
||||
bytes.addAll(Bytes.asList(macAddress.toBytes()));
|
||||
}
|
||||
byte[] byteArray = new byte[bytes.size()];
|
||||
int i = 0;
|
||||
for (byte byt : bytes) {
|
||||
byteArray[i++] = byt;
|
||||
}
|
||||
return byteArray;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return MoreObjects.toStringHelper(getClass())
|
||||
.omitNullValues()
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.onosproject.isis.io.isispacket.tlv;
|
||||
|
||||
/**
|
||||
* Represents ISIS TLV.
|
||||
*/
|
||||
public interface IsisTlv {
|
||||
}
|
||||
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.onosproject.isis.io.isispacket.tlv;
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
import com.google.common.primitives.Bytes;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Represents padding TLV.
|
||||
*/
|
||||
public class PaddingTlv extends TlvHeader implements IsisTlv {
|
||||
private List<Byte> paddings = new ArrayList();
|
||||
|
||||
/**
|
||||
* Sets TLV type and TLV length of padding TLV.
|
||||
*
|
||||
* @param tlvHeader tlvHeader.
|
||||
*/
|
||||
public PaddingTlv(TlvHeader tlvHeader) {
|
||||
this.setTlvType(tlvHeader.tlvType());
|
||||
this.setTlvLength(tlvHeader.tlvLength());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFrom(ByteBuf byteBuf) {
|
||||
while (byteBuf.readableBytes() > 0) {
|
||||
this.paddings.add(byteBuf.readByte());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] asBytes() {
|
||||
byte[] bytes = null;
|
||||
|
||||
byte[] tlvHeader = tlvHeaderAsByteArray();
|
||||
byte[] tlvBody = tlvBodyAsBytes();
|
||||
bytes = Bytes.concat(tlvHeader, tlvBody);
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets TLV body padding TLV.
|
||||
*
|
||||
* @return areaArea TLV body padding TLV\\
|
||||
*/
|
||||
public byte[] tlvBodyAsBytes() {
|
||||
byte[] areaArea = new byte[this.tlvLength()];
|
||||
return areaArea;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return MoreObjects.toStringHelper(getClass())
|
||||
.omitNullValues()
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.onosproject.isis.io.isispacket.tlv;
|
||||
|
||||
import com.google.common.primitives.Bytes;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Represents Protocol supported TLV.
|
||||
*/
|
||||
public class ProtocolSupportedTlv extends TlvHeader implements IsisTlv {
|
||||
|
||||
private List<Byte> protocolSupported = new ArrayList();
|
||||
|
||||
/**
|
||||
* Sets TLV type and TLV length of protocol supported TLV.
|
||||
*
|
||||
* @param tlvHeader tlvHeader.
|
||||
*/
|
||||
public ProtocolSupportedTlv(TlvHeader tlvHeader) {
|
||||
|
||||
this.setTlvType(tlvHeader.tlvType());
|
||||
this.setTlvLength(tlvHeader.tlvLength());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Protocol Supported by the TLV.
|
||||
*
|
||||
* @return Protocol Supported
|
||||
*/
|
||||
public List<Byte> protocolSupported() {
|
||||
|
||||
return this.protocolSupported;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFrom(ByteBuf byteBuf) {
|
||||
|
||||
while (byteBuf.readableBytes() > 0) {
|
||||
this.protocolSupported.add(byteBuf.readByte());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] asBytes() {
|
||||
byte[] bytes = null;
|
||||
|
||||
byte[] tlvHeader = tlvHeaderAsByteArray();
|
||||
byte[] tlvBody = tlvBodyAsBytes();
|
||||
bytes = Bytes.concat(tlvHeader, tlvBody);
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets TLV body of protocol supported TLV.
|
||||
*
|
||||
* @return byteArray TLV body of protocol supported TLV
|
||||
*/
|
||||
public byte[] tlvBodyAsBytes() {
|
||||
|
||||
List<Byte> bytes = new ArrayList();
|
||||
for (byte byt : this.protocolSupported) {
|
||||
bytes.add(byt);
|
||||
}
|
||||
byte[] byteArray = new byte[bytes.size()];
|
||||
int i = 0;
|
||||
for (byte byt : bytes) {
|
||||
byteArray[i++] = byt;
|
||||
}
|
||||
return byteArray;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.onosproject.isis.io.isispacket.tlv;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import org.onosproject.isis.io.util.IsisUtil;
|
||||
|
||||
/**
|
||||
* Represents TLV finder.
|
||||
*/
|
||||
public class TlvFinder extends TlvHeader {
|
||||
|
||||
/**
|
||||
* Sets the value for TLV header and the body of the TLV.
|
||||
*
|
||||
* @param tlvHeader tlvHeader
|
||||
* @param byteBuf byteBuf
|
||||
* @return isisTlv ISIS TLV
|
||||
*/
|
||||
public static IsisTlv findTlv(TlvHeader tlvHeader, ByteBuf byteBuf) {
|
||||
|
||||
IsisTlv isisTlv = null;
|
||||
|
||||
switch (tlvHeader.tlvType()) {
|
||||
case IsisUtil.AREAADDRESS:
|
||||
AreaAddressTlv areaAddressTlv = new AreaAddressTlv(tlvHeader);
|
||||
areaAddressTlv.readFrom(byteBuf);
|
||||
isisTlv = areaAddressTlv;
|
||||
break;
|
||||
case IsisUtil.IPINTERFACEADDRESS:
|
||||
IpInterfaceAddressTlv ipTlv = new IpInterfaceAddressTlv(tlvHeader);
|
||||
ipTlv.readFrom(byteBuf);
|
||||
isisTlv = ipTlv;
|
||||
break;
|
||||
case IsisUtil.PROTOCOLSUPPORTED:
|
||||
ProtocolSupportedTlv psTlv = new ProtocolSupportedTlv(tlvHeader);
|
||||
psTlv.readFrom(byteBuf);
|
||||
isisTlv = psTlv;
|
||||
break;
|
||||
case IsisUtil.ISNEIGHBORS:
|
||||
IsisNeighborTlv isisNeighborTlv = new IsisNeighborTlv(tlvHeader);
|
||||
isisNeighborTlv.readFrom(byteBuf);
|
||||
isisTlv = isisNeighborTlv;
|
||||
break;
|
||||
case IsisUtil.PADDING:
|
||||
PaddingTlv paddingTlv = new PaddingTlv(tlvHeader);
|
||||
paddingTlv.readFrom(byteBuf);
|
||||
isisTlv = paddingTlv;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return isisTlv;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,108 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.onosproject.isis.io.isispacket.tlv;
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
import com.google.common.primitives.Bytes;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Represents TLV header.
|
||||
*/
|
||||
public class TlvHeader implements IsisTlv {
|
||||
private int tlvType;
|
||||
private int tlvLength;
|
||||
|
||||
/**
|
||||
* Gets the TLV length of the TLV.
|
||||
*
|
||||
* @return tlvLength TLV length
|
||||
*/
|
||||
public int tlvLength() {
|
||||
return tlvLength;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the TLV length for the mTLV.
|
||||
*
|
||||
* @param tlvLength TLV length
|
||||
*/
|
||||
public void setTlvLength(int tlvLength) {
|
||||
this.tlvLength = tlvLength;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the TLV type of the TLV.
|
||||
*
|
||||
* @return tlvType TLV type
|
||||
*/
|
||||
public int tlvType() {
|
||||
return tlvType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets TLV type for the TLV.
|
||||
*
|
||||
* @param tlvType TLV type
|
||||
*/
|
||||
public void setTlvType(int tlvType) {
|
||||
this.tlvType = tlvType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the TLV values of TLV from b yte buffer.
|
||||
*
|
||||
* @param byteBuf byteBuf.
|
||||
*/
|
||||
public void readFrom(ByteBuf byteBuf) {
|
||||
//implemented in sub classes
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the TLV of the TLV as bytes.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
public byte[] asBytes() {
|
||||
//implemented the subclasses
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the TLV header of the TLV.
|
||||
*
|
||||
* @return headerLst TLV of the TLV
|
||||
*/
|
||||
public byte[] tlvHeaderAsByteArray() {
|
||||
List<Byte> headerLst = new ArrayList();
|
||||
headerLst.add((byte) this.tlvType);
|
||||
headerLst.add((byte) this.tlvLength);
|
||||
return Bytes.toArray(headerLst);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return MoreObjects.toStringHelper(getClass())
|
||||
.omitNullValues()
|
||||
.add("tlvType", tlvType)
|
||||
.add("tlvLength", tlvLength)
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.onosproject.isis.io.isispacket.tlv;
|
||||
|
||||
/**
|
||||
* Represents various values for TLV types.
|
||||
*/
|
||||
public enum TlvType {
|
||||
AREAADDRESS(1),
|
||||
ISREACHABILITY(2),
|
||||
ISNEIGHBORS(6),
|
||||
PADDING(8),
|
||||
LSPENTRY(9),
|
||||
AUTHENTICATION(10),
|
||||
CHECKSUM(12),
|
||||
EXTENDEDISREACHABILITY(22),
|
||||
ISALIAS(24),
|
||||
IPINTERNALREACHABILITY(128),
|
||||
PROTOCOLSUPPORTED(129),
|
||||
IPEXTERNALREACHABILITY(130),
|
||||
IDRPINFORMATION(131),
|
||||
IPINTERFACEADDRESS(132);
|
||||
|
||||
private int value;
|
||||
|
||||
/**
|
||||
* Sets the TLV type value.
|
||||
* @param value value.
|
||||
*/
|
||||
TlvType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets value.
|
||||
* @return value
|
||||
*/
|
||||
public int value() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.onosproject.isis.io.isispacket.tlv;
|
||||
|
||||
import com.google.common.primitives.Bytes;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Represents conversion of TLV's to bytes.
|
||||
*/
|
||||
public final class TlvsToBytes {
|
||||
/**
|
||||
* Sets the ISIS TLV and returns in the form of bytes.
|
||||
*
|
||||
* @param isisTlv isisTlv
|
||||
* @return tlvBytes TLV bytes
|
||||
*/
|
||||
public static List<Byte> tlvToBytes(IsisTlv isisTlv) {
|
||||
|
||||
List<Byte> tlvBytes = new ArrayList();
|
||||
if (isisTlv instanceof AreaAddressTlv) {
|
||||
AreaAddressTlv areaAddressTlv = (AreaAddressTlv) isisTlv;
|
||||
tlvBytes.addAll(Bytes.asList(areaAddressTlv.asBytes()));
|
||||
} else if (isisTlv instanceof IpInterfaceAddressTlv) {
|
||||
IpInterfaceAddressTlv ipInterfaceAddressTlv = (IpInterfaceAddressTlv) isisTlv;
|
||||
tlvBytes.addAll(Bytes.asList(ipInterfaceAddressTlv.asBytes()));
|
||||
} else if (isisTlv instanceof ProtocolSupportedTlv) {
|
||||
ProtocolSupportedTlv protocolSupportedTlv = (ProtocolSupportedTlv) isisTlv;
|
||||
tlvBytes.addAll(Bytes.asList(protocolSupportedTlv.asBytes()));
|
||||
} else if (isisTlv instanceof PaddingTlv) {
|
||||
PaddingTlv paddingTlv = (PaddingTlv) isisTlv;
|
||||
tlvBytes.addAll(Bytes.asList(paddingTlv.asBytes()));
|
||||
} else if (isisTlv instanceof IsisNeighborTlv) {
|
||||
IsisNeighborTlv isisNeighborTlv = (IsisNeighborTlv) isisTlv;
|
||||
tlvBytes.addAll(Bytes.asList(isisNeighborTlv.asBytes()));
|
||||
} else {
|
||||
System.out.println("UNKNOWN TLV TYPE ::TlvsToBytes ");
|
||||
}
|
||||
|
||||
return tlvBytes;
|
||||
}
|
||||
/**
|
||||
* Creates an instance.
|
||||
*/
|
||||
private TlvsToBytes() {
|
||||
//private constructor
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implementation of the ISIS protocol.
|
||||
*/
|
||||
package org.onosproject.isis.io.isispacket.tlv;
|
||||
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implementation of the ISIS protocol.
|
||||
*/
|
||||
package org.onosproject.isis.io;
|
||||
317
protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisUtil.java
Executable file
317
protocols/isis/isisio/src/main/java/org/onosproject/isis/io/util/IsisUtil.java
Executable file
@ -0,0 +1,317 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.onosproject.isis.io.util;
|
||||
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
import com.google.common.primitives.Bytes;
|
||||
import org.onosproject.isis.io.isispacket.tlv.PaddingTlv;
|
||||
import org.onosproject.isis.io.isispacket.tlv.TlvHeader;
|
||||
|
||||
import javax.xml.bind.DatatypeConverter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
/**
|
||||
* Represents ISIS utils.
|
||||
*/
|
||||
public final class IsisUtil {
|
||||
public static final int AREAADDRESS = 1;
|
||||
public static final int ISREACHABILITY = 2;
|
||||
public static final int ISNEIGHBORS = 6;
|
||||
public static final int PADDING = 8;
|
||||
public static final int LSPENTRY = 9;
|
||||
public static final int AUTHENTICATION = 10;
|
||||
public static final int CHECKSUM = 12;
|
||||
public static final int EXTENDEDISREACHABILITY = 22;
|
||||
public static final int ISALIAS = 24;
|
||||
public static final int IPINTERNALREACHABILITY = 128;
|
||||
public static final int PROTOCOLSUPPORTED = 129;
|
||||
public static final int IPEXTERNALREACHABILITY = 130;
|
||||
public static final int IDRPINFORMATION = 131;
|
||||
public static final int IPINTERFACEADDRESS = 132;
|
||||
public static final int L1HELLOPDU = 1;
|
||||
public static final int L2HELLOPDU = 2;
|
||||
public static final int P2PHELLOPDU = 3;
|
||||
public static final int L1LSPDU = 18;
|
||||
public static final int L2LSPDU = 20;
|
||||
public static final int L1CSNP = 24;
|
||||
public static final int L2CSNP = 25;
|
||||
public static final int L1PSNP = 26;
|
||||
public static final int L2PSNP = 27;
|
||||
public static final int L1L2_LS_PDUHEADERLENGTH = 27;
|
||||
public static final int P2PPDUHEADERLENGTH = 20;
|
||||
public static final int PSNPPDUHEADERLENGTH = 17;
|
||||
public static final char ETHER_FRAME_LEN = 1514;
|
||||
public static final int ID_SIX_BYTES = 6;
|
||||
public static final int ID_PLUS_ONE_BYTE = 7;
|
||||
public static final int ID_PLUS_TWO_BYTE = 8;
|
||||
public static final int THREE_BYTES = 3;
|
||||
public static final int SIX_BYTES = 6;
|
||||
public static final int FOUR_BYTES = 4;
|
||||
public static final int PADDING_FIXED_LENGTH = 255;
|
||||
|
||||
/**
|
||||
* Creates an instance of this class.
|
||||
*/
|
||||
private IsisUtil() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse byte array to string system ID.
|
||||
*
|
||||
* @param bytes system ID
|
||||
* @return systemId system ID.
|
||||
*/
|
||||
public static String systemId(byte[] bytes) {
|
||||
String systemId = "";
|
||||
for (Byte byt : bytes) {
|
||||
String hexa = Integer.toHexString(Byte.toUnsignedInt(byt));
|
||||
if (hexa.length() % 2 != 0) {
|
||||
hexa = "0" + hexa;
|
||||
}
|
||||
systemId = systemId + hexa;
|
||||
if (systemId.length() == 4 || systemId.length() == 9) {
|
||||
systemId = systemId + ".";
|
||||
}
|
||||
}
|
||||
return systemId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse byte array to LAN ID.
|
||||
*
|
||||
* @param bytes LAN ID
|
||||
* @return systemId system ID.
|
||||
*/
|
||||
public static String systemIdPlus(byte[] bytes) {
|
||||
String systemId = "";
|
||||
for (Byte byt : bytes) {
|
||||
String hexa = Integer.toHexString(Byte.toUnsignedInt(byt));
|
||||
if (hexa.length() % 2 != 0) {
|
||||
hexa = "0" + hexa;
|
||||
}
|
||||
systemId = systemId + hexa;
|
||||
if (systemId.length() == 4 || systemId.length() == 9
|
||||
|| systemId.length() == 14) {
|
||||
systemId = systemId + ".";
|
||||
}
|
||||
}
|
||||
return systemId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse byte array to area address.
|
||||
*
|
||||
* @param bytes area address
|
||||
* @return areaAddress area address
|
||||
*/
|
||||
public static String areaAddres(byte[] bytes) {
|
||||
int count = 0;
|
||||
String areaAddress = "";
|
||||
for (Byte byt : bytes) {
|
||||
String hexa = Integer.toHexString(Byte.toUnsignedInt(byt));
|
||||
if (hexa.length() % 2 != 0) {
|
||||
hexa = "0" + hexa;
|
||||
}
|
||||
if (count == 0) {
|
||||
hexa = hexa + ".";
|
||||
}
|
||||
areaAddress = areaAddress + hexa;
|
||||
count++;
|
||||
}
|
||||
return areaAddress;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse area address to bytes.
|
||||
*
|
||||
* @param address area address
|
||||
* @return areaAddress area address
|
||||
*/
|
||||
public static List<Byte> areaAddresToBytes(String address) {
|
||||
List<Byte> idLst = new ArrayList();
|
||||
StringTokenizer tokenizer = new StringTokenizer(address, ".");
|
||||
int count = 0;
|
||||
while (tokenizer.hasMoreElements()) {
|
||||
String str = tokenizer.nextToken();
|
||||
if (str.length() % 2 != 0) {
|
||||
str = "0" + str;
|
||||
}
|
||||
if (count > 0) {
|
||||
|
||||
for (int i = 0; i < str.length(); i = i + 2) {
|
||||
idLst.add((byte) Integer.parseInt(str.substring(i, i + 2), 16));
|
||||
}
|
||||
} else {
|
||||
idLst.add((byte) Integer.parseInt(str, 16));
|
||||
}
|
||||
count++;
|
||||
}
|
||||
return idLst;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets PDU header length.
|
||||
*
|
||||
* @param pduType PDU type
|
||||
* @return headerLength header length
|
||||
*/
|
||||
public static int getPduHeaderLength(int pduType) {
|
||||
int headerLength = 0;
|
||||
switch (pduType) {
|
||||
case L1HELLOPDU:
|
||||
case L2HELLOPDU:
|
||||
case L1LSPDU:
|
||||
case L2LSPDU:
|
||||
headerLength = L1L2_LS_PDUHEADERLENGTH;
|
||||
break;
|
||||
case P2PHELLOPDU:
|
||||
headerLength = P2PPDUHEADERLENGTH;
|
||||
break;
|
||||
case L1PSNP:
|
||||
case L2PSNP:
|
||||
headerLength = PSNPPDUHEADERLENGTH;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return headerLength;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse source and LAN ID.
|
||||
*
|
||||
* @param id source and LAN ID
|
||||
* @return sourceAndLanIdToBytes source and LAN ID
|
||||
*/
|
||||
public static List<Byte> sourceAndLanIdToBytes(String id) {
|
||||
List<Byte> idLst = new ArrayList();
|
||||
|
||||
StringTokenizer tokenizer = new StringTokenizer(id, ".");
|
||||
while (tokenizer.hasMoreElements()) {
|
||||
int i = 0;
|
||||
String str = tokenizer.nextToken();
|
||||
idLst.add((byte) Integer.parseInt(str.substring(0, i + 2), 16));
|
||||
if (str.length() > 2) {
|
||||
idLst.add((byte) Integer.parseInt(str.substring(i + 2, str.length()), 16));
|
||||
}
|
||||
|
||||
}
|
||||
return idLst;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse padding for PDU based on current length.
|
||||
*
|
||||
* @param currentLength current length
|
||||
* @return byteArray padding array
|
||||
*/
|
||||
public static byte[] paddingForPdu(int currentLength) {
|
||||
List<Byte> bytes = new ArrayList<>();
|
||||
while (ETHER_FRAME_LEN > currentLength) {
|
||||
int length = ETHER_FRAME_LEN - currentLength;
|
||||
TlvHeader tlvHeader = new TlvHeader();
|
||||
tlvHeader.setTlvType(PADDING);
|
||||
if (length >= PADDING_FIXED_LENGTH) {
|
||||
tlvHeader.setTlvLength(PADDING_FIXED_LENGTH);
|
||||
} else {
|
||||
tlvHeader.setTlvLength(ETHER_FRAME_LEN - currentLength);
|
||||
}
|
||||
PaddingTlv tlv = new PaddingTlv(tlvHeader);
|
||||
bytes.addAll(Bytes.asList(tlv.asBytes()));
|
||||
currentLength = currentLength + tlv.tlvLength();
|
||||
}
|
||||
byte[] byteArray = new byte[bytes.size()];
|
||||
int i = 0;
|
||||
for (byte byt : bytes) {
|
||||
byteArray[i++] = byt;
|
||||
}
|
||||
return byteArray;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts an integer to two bytes.
|
||||
*
|
||||
* @param numberToConvert number to convert
|
||||
* @return numInBytes given number as bytes
|
||||
*/
|
||||
public static byte[] convertToTwoBytes(int numberToConvert) {
|
||||
|
||||
byte[] numInBytes = new byte[2];
|
||||
String s1 = Integer.toHexString(numberToConvert);
|
||||
if (s1.length() % 2 != 0) {
|
||||
s1 = "0" + s1;
|
||||
}
|
||||
byte[] hexas = DatatypeConverter.parseHexBinary(s1);
|
||||
if (hexas.length == 1) {
|
||||
numInBytes[0] = 0;
|
||||
numInBytes[1] = hexas[0];
|
||||
} else {
|
||||
numInBytes[0] = hexas[0];
|
||||
numInBytes[1] = hexas[1];
|
||||
}
|
||||
return numInBytes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a number to four bytes.
|
||||
*
|
||||
* @param numberToConvert number to convert
|
||||
* @return numInBytes given number as bytes
|
||||
*/
|
||||
public static byte[] convertToFourBytes(int numberToConvert) {
|
||||
|
||||
byte[] numInBytes = new byte[4];
|
||||
String s1 = Integer.toHexString(numberToConvert);
|
||||
if (s1.length() % 2 != 0) {
|
||||
s1 = "0" + s1;
|
||||
}
|
||||
byte[] hexas = DatatypeConverter.parseHexBinary(s1);
|
||||
if (hexas.length == 1) {
|
||||
numInBytes[0] = 0;
|
||||
numInBytes[1] = 0;
|
||||
numInBytes[2] = 0;
|
||||
numInBytes[3] = hexas[0];
|
||||
} else if (hexas.length == 2) {
|
||||
numInBytes[0] = 0;
|
||||
numInBytes[1] = 0;
|
||||
numInBytes[2] = hexas[0];
|
||||
numInBytes[3] = hexas[1];
|
||||
} else if (hexas.length == 3) {
|
||||
numInBytes[0] = 0;
|
||||
numInBytes[1] = hexas[0];
|
||||
numInBytes[2] = hexas[1];
|
||||
numInBytes[3] = hexas[2];
|
||||
} else {
|
||||
numInBytes[0] = hexas[0];
|
||||
numInBytes[1] = hexas[1];
|
||||
numInBytes[2] = hexas[2];
|
||||
numInBytes[3] = hexas[3];
|
||||
}
|
||||
return numInBytes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return MoreObjects.toStringHelper(getClass())
|
||||
.omitNullValues()
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implementation of the ISIS protocol.
|
||||
*/
|
||||
package org.onosproject.isis.io.util;
|
||||
20
protocols/isis/isisio/src/main/java/org/onosproject/isis/package-info.java
Executable file
20
protocols/isis/isisio/src/main/java/org/onosproject/isis/package-info.java
Executable file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2016 Open Networking Laboratory
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implementation of the ISIS protocol.
|
||||
*/
|
||||
package org.onosproject.isis;
|
||||
@ -33,6 +33,7 @@
|
||||
|
||||
<modules>
|
||||
<module>api</module>
|
||||
<module>isisio</module>
|
||||
</modules>
|
||||
|
||||
</project>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user