Committed by
Gerrit Code Review
ONOS-2739 - OSPF Basic Packet Structures , which includes encoding and decoding
Change-Id: Ifaaa4d3640c6a4fec4931db54a1f03100cc9d9e6
Showing
14 changed files
with
2899 additions
and
0 deletions
protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/subtypes/package-info.java
0 → 100644
| 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 OSPF LSA Sub Types. | ||
| 19 | + */ | ||
| 20 | +package org.onosproject.ospf.protocol.lsa.subtypes; | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa10.java
0 → 100644
| 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.ospf.protocol.lsa.types; | ||
| 17 | + | ||
| 18 | +import com.google.common.base.MoreObjects; | ||
| 19 | +import com.google.common.base.Objects; | ||
| 20 | +import com.google.common.primitives.Bytes; | ||
| 21 | +import org.jboss.netty.buffer.ChannelBuffer; | ||
| 22 | +import org.onosproject.ospf.controller.OspfLsaType; | ||
| 23 | +import org.onosproject.ospf.exceptions.OspfErrorType; | ||
| 24 | +import org.onosproject.ospf.exceptions.OspfParseException; | ||
| 25 | +import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader; | ||
| 26 | +import org.onosproject.ospf.protocol.lsa.TlvHeader; | ||
| 27 | +import org.onosproject.ospf.protocol.lsa.tlvtypes.LinkTlv; | ||
| 28 | +import org.onosproject.ospf.protocol.lsa.tlvtypes.OpaqueTopLevelTlvTypes; | ||
| 29 | +import org.onosproject.ospf.protocol.lsa.tlvtypes.RouterTlv; | ||
| 30 | +import org.onosproject.ospf.protocol.util.OspfParameters; | ||
| 31 | + | ||
| 32 | +import java.util.ArrayList; | ||
| 33 | +import java.util.List; | ||
| 34 | + | ||
| 35 | +/** | ||
| 36 | + * Representation of an Opaque LSA of type area local (10). | ||
| 37 | + */ | ||
| 38 | +public class OpaqueLsa10 extends OpaqueLsaHeader { | ||
| 39 | + /* | ||
| 40 | + 0 1 2 3 | ||
| 41 | + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||
| 42 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 43 | + | LS age | Options | 9, 10 or 11 | | ||
| 44 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 45 | + | Opaque Type | Opaque ID | | ||
| 46 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 47 | + | Advertising Router | | ||
| 48 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 49 | + | LS Sequence Number | | ||
| 50 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 51 | + | LS checksum | Length | | ||
| 52 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 53 | + | | | ||
| 54 | + + + | ||
| 55 | + | Opaque Information | | ||
| 56 | + + + | ||
| 57 | + | ... | | ||
| 58 | + | ||
| 59 | + Opaque LSA format | ||
| 60 | + REFERENCE : RFC 5250 | ||
| 61 | + */ | ||
| 62 | + private List<TopLevelTlv> topLevelValues = new ArrayList<>(); | ||
| 63 | + private byte[] opaqueInfo = null; | ||
| 64 | + | ||
| 65 | + /** | ||
| 66 | + * Creates an instance of Opaque type 10 LSA. | ||
| 67 | + * | ||
| 68 | + * @param lsaHeader LSA header instance | ||
| 69 | + */ | ||
| 70 | + public OpaqueLsa10(OpaqueLsaHeader lsaHeader) { | ||
| 71 | + populateHeader(lsaHeader); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + /** | ||
| 75 | + * Returns the list of top level TLVs. | ||
| 76 | + * | ||
| 77 | + * @return list of top level TLVs | ||
| 78 | + */ | ||
| 79 | + public List<TopLevelTlv> topLevelValues() { | ||
| 80 | + return topLevelValues; | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + /** | ||
| 84 | + * Adds TLV value. | ||
| 85 | + * | ||
| 86 | + * @param value TLV value | ||
| 87 | + */ | ||
| 88 | + public void addValue(TopLevelTlv value) { | ||
| 89 | + topLevelValues.add(value); | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + /** | ||
| 93 | + * Reads from channel buffer and populate instance. | ||
| 94 | + * | ||
| 95 | + * @param channelBuffer channelBuffer instance | ||
| 96 | + * @throws OspfParseException might throws exception while parsing buffer | ||
| 97 | + */ | ||
| 98 | + public void readFrom(ChannelBuffer channelBuffer) throws OspfParseException { | ||
| 99 | + | ||
| 100 | + try { | ||
| 101 | + if (this.opaqueId() == OspfParameters.TRAFFIC_ENGINEERING) { | ||
| 102 | + while (channelBuffer.readableBytes() > 0) { | ||
| 103 | + TlvHeader tlvHeader = new TlvHeader(); | ||
| 104 | + tlvHeader.setTlvType(channelBuffer.readUnsignedShort()); | ||
| 105 | + tlvHeader.setTlvLength(channelBuffer.readUnsignedShort()); | ||
| 106 | + if (tlvHeader.tlvType() == OpaqueTopLevelTlvTypes.ROUTER.value()) { | ||
| 107 | + RouterTlv routerTlv = new RouterTlv(tlvHeader); | ||
| 108 | + routerTlv.readFrom(channelBuffer.readBytes(tlvHeader.tlvLength())); | ||
| 109 | + this.addValue(routerTlv); | ||
| 110 | + } else if (tlvHeader.tlvType() == OpaqueTopLevelTlvTypes.LINK.value()) { | ||
| 111 | + LinkTlv linkTlv = new LinkTlv(tlvHeader); | ||
| 112 | + linkTlv.readFrom(channelBuffer.readBytes(tlvHeader.tlvLength())); | ||
| 113 | + this.addValue(linkTlv); | ||
| 114 | + } | ||
| 115 | + } | ||
| 116 | + } else { | ||
| 117 | + int length = channelBuffer.readableBytes(); | ||
| 118 | + opaqueInfo = new byte[length]; | ||
| 119 | + channelBuffer.readBytes(opaqueInfo, 0, length); | ||
| 120 | + } | ||
| 121 | + | ||
| 122 | + } catch (Exception e) { | ||
| 123 | + log.debug("Error::OpaqueLsa10:: {}", e.getMessage()); | ||
| 124 | + throw new OspfParseException(OspfErrorType.OSPF_MESSAGE_ERROR, | ||
| 125 | + OspfErrorType.BAD_MESSAGE); | ||
| 126 | + } | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + /** | ||
| 130 | + * Returns instance as bytes. | ||
| 131 | + * | ||
| 132 | + * @return instance as bytes | ||
| 133 | + * @throws Exception might throws exception while parsing packet | ||
| 134 | + */ | ||
| 135 | + public byte[] asBytes() throws Exception { | ||
| 136 | + | ||
| 137 | + byte[] lsaMessage = null; | ||
| 138 | + byte[] lsaHeader = getOpaqueLsaHeaderAsByteArray(); | ||
| 139 | + byte[] lsaBody = getLsaBodyAsByteArray(); | ||
| 140 | + lsaMessage = Bytes.concat(lsaHeader, lsaBody); | ||
| 141 | + return lsaMessage; | ||
| 142 | + | ||
| 143 | + } | ||
| 144 | + | ||
| 145 | + /** | ||
| 146 | + * Gets the LSA body as byte array. | ||
| 147 | + * | ||
| 148 | + * @return the lsa body as byte array | ||
| 149 | + * @throws Exception might throws exception while parsing packet | ||
| 150 | + */ | ||
| 151 | + public byte[] getLsaBodyAsByteArray() throws Exception { | ||
| 152 | + List<Byte> bodyLst = new ArrayList<>(); | ||
| 153 | + if (this.opaqueId() == 1) { | ||
| 154 | + for (TopLevelTlv tlv : this.topLevelValues) { | ||
| 155 | + //Check the sub type of lsa and build bytes accordingly | ||
| 156 | + if (tlv instanceof RouterTlv) { | ||
| 157 | + RouterTlv routerTlv = (RouterTlv) tlv; | ||
| 158 | + bodyLst.addAll(Bytes.asList(routerTlv.asBytes())); | ||
| 159 | + } else if (tlv instanceof LinkTlv) { | ||
| 160 | + LinkTlv linkTlv = (LinkTlv) tlv; | ||
| 161 | + bodyLst.addAll(Bytes.asList(linkTlv.asBytes())); | ||
| 162 | + } | ||
| 163 | + } | ||
| 164 | + } else { | ||
| 165 | + return opaqueInfo; | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + return Bytes.toArray(bodyLst); | ||
| 169 | + } | ||
| 170 | + | ||
| 171 | + @Override | ||
| 172 | + public OspfLsaType getOspfLsaType() { | ||
| 173 | + return OspfLsaType.AREA_LOCAL_OPAQUE_LSA; | ||
| 174 | + } | ||
| 175 | + | ||
| 176 | + @Override | ||
| 177 | + public String toString() { | ||
| 178 | + return MoreObjects.toStringHelper(getClass()) | ||
| 179 | + .omitNullValues() | ||
| 180 | + .add("topLevelValues", topLevelValues) | ||
| 181 | + .add("opaqueInfo", opaqueInfo) | ||
| 182 | + .toString(); | ||
| 183 | + } | ||
| 184 | + | ||
| 185 | + @Override | ||
| 186 | + public boolean equals(Object o) { | ||
| 187 | + if (this == o) { | ||
| 188 | + return true; | ||
| 189 | + } | ||
| 190 | + if (o == null || getClass() != o.getClass()) { | ||
| 191 | + return false; | ||
| 192 | + } | ||
| 193 | + OpaqueLsa10 that = (OpaqueLsa10) o; | ||
| 194 | + return Objects.equal(topLevelValues, that.topLevelValues) && | ||
| 195 | + Objects.equal(opaqueInfo, that.opaqueInfo); | ||
| 196 | + } | ||
| 197 | + | ||
| 198 | + @Override | ||
| 199 | + public int hashCode() { | ||
| 200 | + return Objects.hashCode(opaqueInfo, topLevelValues); | ||
| 201 | + } | ||
| 202 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/RouterLsa.java
0 → 100644
| 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.ospf.protocol.lsa.types; | ||
| 17 | + | ||
| 18 | +import com.google.common.base.MoreObjects; | ||
| 19 | +import com.google.common.base.Objects; | ||
| 20 | +import com.google.common.primitives.Bytes; | ||
| 21 | +import org.jboss.netty.buffer.ChannelBuffer; | ||
| 22 | +import org.onosproject.ospf.exceptions.OspfErrorType; | ||
| 23 | +import org.onosproject.ospf.exceptions.OspfParseException; | ||
| 24 | +import org.onosproject.ospf.protocol.lsa.LsaHeader; | ||
| 25 | +import org.onosproject.ospf.protocol.lsa.subtypes.OspfLsaLink; | ||
| 26 | +import org.onosproject.ospf.protocol.util.OspfUtil; | ||
| 27 | +import org.slf4j.Logger; | ||
| 28 | +import org.slf4j.LoggerFactory; | ||
| 29 | + | ||
| 30 | +import java.net.InetAddress; | ||
| 31 | +import java.util.ArrayList; | ||
| 32 | +import java.util.List; | ||
| 33 | + | ||
| 34 | +/** | ||
| 35 | + * Representation of a Router LSA, and the fields and methods to access them. | ||
| 36 | + */ | ||
| 37 | +public class RouterLsa extends LsaHeader { | ||
| 38 | + /* | ||
| 39 | + 0 1 2 3 | ||
| 40 | + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||
| 41 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 42 | + | LS age | Options | 1 | | ||
| 43 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 44 | + | Link State ID | | ||
| 45 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 46 | + | Advertising Router | | ||
| 47 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 48 | + | LS sequence number | | ||
| 49 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 50 | + | LS checksum | length | | ||
| 51 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 52 | + | 0 |V|E|B| 0 | # links | | ||
| 53 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 54 | + | Link ID | | ||
| 55 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 56 | + | Link Data | | ||
| 57 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 58 | + | Type | # TOS | metric | | ||
| 59 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 60 | + | ... | | ||
| 61 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 62 | + | TOS | 0 | TOS metric | | ||
| 63 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 64 | + | Link ID | | ||
| 65 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 66 | + | Link Data | | ||
| 67 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 68 | + | ... | | ||
| 69 | + */ | ||
| 70 | + private static final Logger log = | ||
| 71 | + LoggerFactory.getLogger(RouterLsa.class); | ||
| 72 | + private boolean isVirtualEndPoint; | ||
| 73 | + private boolean isAsBoundaryRouter; | ||
| 74 | + private boolean isAreaBorderRouter; | ||
| 75 | + private int noLink; | ||
| 76 | + private List<OspfLsaLink> routerLinks = new ArrayList<>(); | ||
| 77 | + | ||
| 78 | + /** | ||
| 79 | + * Creates an instance of Router LSA. | ||
| 80 | + */ | ||
| 81 | + public RouterLsa() { | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + /** | ||
| 85 | + * Creates an instance of Router LSA. | ||
| 86 | + * | ||
| 87 | + * @param lsaHeader lsa header instance | ||
| 88 | + */ | ||
| 89 | + public RouterLsa(LsaHeader lsaHeader) { | ||
| 90 | + populateHeader(lsaHeader); | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + /** | ||
| 94 | + * Sets virtual endpoint or not. | ||
| 95 | + * | ||
| 96 | + * @param isVirtualEndPoint true or false | ||
| 97 | + */ | ||
| 98 | + public void setVirtualEndPoint(boolean isVirtualEndPoint) { | ||
| 99 | + this.isVirtualEndPoint = isVirtualEndPoint; | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + /** | ||
| 103 | + * Sets if it is an AS boundary router or not. | ||
| 104 | + * | ||
| 105 | + * @param isAsBoundaryRouter true if AS boundary router else false | ||
| 106 | + */ | ||
| 107 | + public void setAsBoundaryRouter(boolean isAsBoundaryRouter) { | ||
| 108 | + this.isAsBoundaryRouter = isAsBoundaryRouter; | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | + /** | ||
| 112 | + * Sets whether it is an ABR or not. | ||
| 113 | + * | ||
| 114 | + * @param isAreaBorderRouter true if ABR else false | ||
| 115 | + */ | ||
| 116 | + public void setAreaBorderRouter(boolean isAreaBorderRouter) { | ||
| 117 | + this.isAreaBorderRouter = isAreaBorderRouter; | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + /** | ||
| 121 | + * Gets number of links. | ||
| 122 | + * | ||
| 123 | + * @return number of links | ||
| 124 | + */ | ||
| 125 | + public int noLink() { | ||
| 126 | + return noLink; | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + /** | ||
| 130 | + * Sets number of links. | ||
| 131 | + * | ||
| 132 | + * @param noLink number of links | ||
| 133 | + */ | ||
| 134 | + public void setNoLink(int noLink) { | ||
| 135 | + this.noLink = noLink; | ||
| 136 | + } | ||
| 137 | + | ||
| 138 | + | ||
| 139 | + /** | ||
| 140 | + * Adds router link. | ||
| 141 | + * | ||
| 142 | + * @param lsaLink LSA link | ||
| 143 | + */ | ||
| 144 | + public void addRouterLink(OspfLsaLink lsaLink) { | ||
| 145 | + if (!this.routerLinks.contains(lsaLink)) { | ||
| 146 | + this.routerLinks.add(lsaLink); | ||
| 147 | + } | ||
| 148 | + } | ||
| 149 | + | ||
| 150 | + /** | ||
| 151 | + * Gets router link. | ||
| 152 | + * | ||
| 153 | + * @return routerLinks LSA link list | ||
| 154 | + */ | ||
| 155 | + public List<OspfLsaLink> routerLink() { | ||
| 156 | + return this.routerLinks; | ||
| 157 | + } | ||
| 158 | + | ||
| 159 | + /** | ||
| 160 | + * Reads from channel buffer and populate this. | ||
| 161 | + * | ||
| 162 | + * @param channelBuffer channelBuffer instance. | ||
| 163 | + * @throws OspfParseException might throws exception while parsing buffer | ||
| 164 | + */ | ||
| 165 | + public void readFrom(ChannelBuffer channelBuffer) throws OspfParseException { | ||
| 166 | + | ||
| 167 | + try { | ||
| 168 | + int veb = channelBuffer.readByte(); | ||
| 169 | + int unUsed = channelBuffer.readByte(); | ||
| 170 | + //Convert the byte to veb bits | ||
| 171 | + String strVeb = Integer.toBinaryString(veb); | ||
| 172 | + if (strVeb.length() == 3) { | ||
| 173 | + this.setVirtualEndPoint((Integer.parseInt(Character.toString(strVeb.charAt(0))) == 1) ? true : false); | ||
| 174 | + this.setAsBoundaryRouter((Integer.parseInt(Character.toString(strVeb.charAt(1))) == 1) ? true : false); | ||
| 175 | + this.setAreaBorderRouter((Integer.parseInt(Character.toString(strVeb.charAt(2))) == 1) ? true : false); | ||
| 176 | + } else if (strVeb.length() == 2) { | ||
| 177 | + this.setVirtualEndPoint(false); | ||
| 178 | + this.setAsBoundaryRouter((Integer.parseInt(Character.toString(strVeb.charAt(0))) == 1) ? true : false); | ||
| 179 | + this.setAreaBorderRouter((Integer.parseInt(Character.toString(strVeb.charAt(1))) == 1) ? true : false); | ||
| 180 | + } else if (strVeb.length() == 1) { | ||
| 181 | + this.setVirtualEndPoint(false); | ||
| 182 | + this.setAsBoundaryRouter(false); | ||
| 183 | + this.setAreaBorderRouter((Integer.parseInt(Character.toString(strVeb.charAt(0))) == 1) ? true : false); | ||
| 184 | + } | ||
| 185 | + this.setNoLink(channelBuffer.readUnsignedShort()); | ||
| 186 | + while (channelBuffer.readableBytes() >= OspfUtil.TWELVE_BYTES) { | ||
| 187 | + OspfLsaLink ospfLsaLink = new OspfLsaLink(); | ||
| 188 | + | ||
| 189 | + byte[] tempByteArray = new byte[OspfUtil.FOUR_BYTES]; | ||
| 190 | + channelBuffer.readBytes(tempByteArray, 0, OspfUtil.FOUR_BYTES); | ||
| 191 | + ospfLsaLink.setLinkId(InetAddress.getByAddress(tempByteArray).getHostName()); | ||
| 192 | + tempByteArray = new byte[OspfUtil.FOUR_BYTES]; | ||
| 193 | + channelBuffer.readBytes(tempByteArray, 0, OspfUtil.FOUR_BYTES); | ||
| 194 | + ospfLsaLink.setLinkData(InetAddress.getByAddress(tempByteArray).getHostName()); | ||
| 195 | + ospfLsaLink.setLinkType(channelBuffer.readByte()); | ||
| 196 | + ospfLsaLink.setTos(channelBuffer.readByte()); | ||
| 197 | + ospfLsaLink.setMetric(channelBuffer.readUnsignedShort()); | ||
| 198 | + //add the link | ||
| 199 | + this.addRouterLink(ospfLsaLink); | ||
| 200 | + } | ||
| 201 | + } catch (Exception e) { | ||
| 202 | + log.debug("Error::RouterLsa:: {}", e.getMessage()); | ||
| 203 | + throw new OspfParseException(OspfErrorType.OSPF_MESSAGE_ERROR, OspfErrorType.BAD_MESSAGE); | ||
| 204 | + } | ||
| 205 | + } | ||
| 206 | + | ||
| 207 | + /** | ||
| 208 | + * Returns instance as bytes. | ||
| 209 | + * | ||
| 210 | + * @return instance as bytes | ||
| 211 | + * @throws OspfParseException might throws exception while parsing packet | ||
| 212 | + */ | ||
| 213 | + public byte[] asBytes() throws OspfParseException { | ||
| 214 | + byte[] lsaMessage = null; | ||
| 215 | + | ||
| 216 | + byte[] lsaHeader = getLsaHeaderAsByteArray(); | ||
| 217 | + byte[] lsaBody = getLsaBodyAsByteArray(); | ||
| 218 | + lsaMessage = Bytes.concat(lsaHeader, lsaBody); | ||
| 219 | + | ||
| 220 | + return lsaMessage; | ||
| 221 | + } | ||
| 222 | + | ||
| 223 | + /** | ||
| 224 | + * Gets the LSA body as bytes. | ||
| 225 | + * | ||
| 226 | + * @return LSA body as bytes | ||
| 227 | + */ | ||
| 228 | + public byte[] getLsaBodyAsByteArray() { | ||
| 229 | + List<Byte> bodyLst = new ArrayList<>(); | ||
| 230 | + | ||
| 231 | + try { | ||
| 232 | + int isVirtualEndPointVal = this.isVirtualEndPoint ? 1 : 0; | ||
| 233 | + int isASBoundaryRouterVal = this.isAsBoundaryRouter ? 1 : 0; | ||
| 234 | + int isAreaBorderRouterVal = this.isAreaBorderRouter ? 1 : 0; | ||
| 235 | + | ||
| 236 | + StringBuilder sb = new StringBuilder(); | ||
| 237 | + sb.append(Integer.toBinaryString(isVirtualEndPointVal)); | ||
| 238 | + sb.append(Integer.toBinaryString(isASBoundaryRouterVal)); | ||
| 239 | + sb.append(Integer.toBinaryString(isAreaBorderRouterVal)); | ||
| 240 | + | ||
| 241 | + //added VEB | ||
| 242 | + bodyLst.add((byte) Integer.parseInt(sb.toString(), 2)); | ||
| 243 | + //second byte is 0. | ||
| 244 | + bodyLst.add((byte) 0); | ||
| 245 | + //Number of links | ||
| 246 | + bodyLst.addAll(Bytes.asList(OspfUtil.convertToTwoBytes(this.noLink()))); | ||
| 247 | + | ||
| 248 | + //add each link details | ||
| 249 | + for (OspfLsaLink lsaLink : routerLinks) { | ||
| 250 | + bodyLst.addAll(Bytes.asList(InetAddress.getByName(lsaLink.linkId()).getAddress())); | ||
| 251 | + bodyLst.addAll(Bytes.asList(InetAddress.getByName(lsaLink.linkData()).getAddress())); | ||
| 252 | + bodyLst.add((byte) lsaLink.linkType()); | ||
| 253 | + bodyLst.add((byte) lsaLink.tos()); | ||
| 254 | + bodyLst.addAll(Bytes.asList(OspfUtil.convertToTwoBytes(lsaLink.metric()))); | ||
| 255 | + } | ||
| 256 | + } catch (Exception e) { | ||
| 257 | + log.debug("Error::getLsrBodyAsByteArray {}", e.getMessage()); | ||
| 258 | + return Bytes.toArray(bodyLst); | ||
| 259 | + } | ||
| 260 | + | ||
| 261 | + return Bytes.toArray(bodyLst); | ||
| 262 | + } | ||
| 263 | + | ||
| 264 | + /** | ||
| 265 | + * Increment the link by 1. | ||
| 266 | + */ | ||
| 267 | + public void incrementLinkNo() { | ||
| 268 | + this.noLink++; | ||
| 269 | + } | ||
| 270 | + | ||
| 271 | + @Override | ||
| 272 | + public String toString() { | ||
| 273 | + return MoreObjects.toStringHelper(getClass()) | ||
| 274 | + .omitNullValues() | ||
| 275 | + .add("isVirtualEndPoint", isVirtualEndPoint) | ||
| 276 | + .add("isAsBoundaryRouter", isAsBoundaryRouter) | ||
| 277 | + .add("isAreaBorderRouter", isAreaBorderRouter) | ||
| 278 | + .add("noLink", noLink) | ||
| 279 | + .add("routerLinks", routerLinks) | ||
| 280 | + .toString(); | ||
| 281 | + } | ||
| 282 | + | ||
| 283 | + @Override | ||
| 284 | + public boolean equals(Object o) { | ||
| 285 | + if (this == o) { | ||
| 286 | + return true; | ||
| 287 | + } | ||
| 288 | + if (o == null || getClass() != o.getClass()) { | ||
| 289 | + return false; | ||
| 290 | + } | ||
| 291 | + RouterLsa that = (RouterLsa) o; | ||
| 292 | + return Objects.equal(isVirtualEndPoint, that.isVirtualEndPoint) && | ||
| 293 | + Objects.equal(isAsBoundaryRouter, that.isAsBoundaryRouter) && | ||
| 294 | + Objects.equal(isAreaBorderRouter, that.isAreaBorderRouter) && | ||
| 295 | + Objects.equal(noLink, that.noLink) && | ||
| 296 | + Objects.equal(routerLinks, that.routerLinks); | ||
| 297 | + } | ||
| 298 | + | ||
| 299 | + @Override | ||
| 300 | + public int hashCode() { | ||
| 301 | + return Objects.hashCode(isVirtualEndPoint, isAsBoundaryRouter, isAreaBorderRouter, | ||
| 302 | + noLink, routerLinks); | ||
| 303 | + } | ||
| 304 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/lsa/types/package-info.java
0 → 100644
| 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 OSPF LSA types. | ||
| 19 | + */ | ||
| 20 | +package org.onosproject.ospf.protocol.lsa.types; | ||
| ... | \ 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 | +package org.onosproject.ospf.protocol.ospfpacket; | ||
| 18 | + | ||
| 19 | +import org.jboss.netty.buffer.ChannelBuffer; | ||
| 20 | +import org.onlab.packet.Ip4Address; | ||
| 21 | +import org.onosproject.ospf.exceptions.OspfErrorType; | ||
| 22 | +import org.onosproject.ospf.exceptions.OspfParseException; | ||
| 23 | +import org.onosproject.ospf.protocol.ospfpacket.types.DdPacket; | ||
| 24 | +import org.onosproject.ospf.protocol.ospfpacket.types.HelloPacket; | ||
| 25 | +import org.onosproject.ospf.protocol.ospfpacket.types.LsAcknowledge; | ||
| 26 | +import org.onosproject.ospf.protocol.ospfpacket.types.LsRequest; | ||
| 27 | +import org.onosproject.ospf.protocol.ospfpacket.types.LsUpdate; | ||
| 28 | +import org.onosproject.ospf.protocol.util.OspfParameters; | ||
| 29 | +import org.onosproject.ospf.protocol.util.OspfUtil; | ||
| 30 | +import org.slf4j.Logger; | ||
| 31 | +import org.slf4j.LoggerFactory; | ||
| 32 | + | ||
| 33 | +/** | ||
| 34 | + * A message reader which reads OSPF messages from ChannelBuffer and converts to OspfMessage instances. | ||
| 35 | + */ | ||
| 36 | +public class OspfMessageReader { | ||
| 37 | + private static final Logger log = LoggerFactory.getLogger(OspfMessageReader.class); | ||
| 38 | + | ||
| 39 | + /** | ||
| 40 | + * Reads and Converts the channel buffer to OspfMessage instance. | ||
| 41 | + * | ||
| 42 | + * @param channelBuffer channel buffer instance. | ||
| 43 | + * @return OSPF message instance. | ||
| 44 | + * @throws Exception might throws exception while parsing buffer | ||
| 45 | + */ | ||
| 46 | + public OspfMessage readFromBuffer(ChannelBuffer channelBuffer) | ||
| 47 | + throws Exception { | ||
| 48 | + | ||
| 49 | + if (channelBuffer.readableBytes() < OspfUtil.PACKET_MINIMUM_LENGTH) { | ||
| 50 | + log.error("Packet should have minimum length..."); | ||
| 51 | + throw new OspfParseException(OspfErrorType.MESSAGE_HEADER_ERROR, OspfErrorType.BAD_MESSAGE_LENGTH); | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + try { | ||
| 55 | + OspfPacketHeader ospfHeader = getOspfHeader(channelBuffer); | ||
| 56 | + int len = ospfHeader.ospfPacLength() - OspfUtil.OSPF_HEADER_LENGTH; | ||
| 57 | + | ||
| 58 | + OspfMessage ospfMessage = null; | ||
| 59 | + switch (ospfHeader.ospfType()) { | ||
| 60 | + case OspfParameters.HELLO: | ||
| 61 | + ospfMessage = new HelloPacket(ospfHeader); | ||
| 62 | + break; | ||
| 63 | + case OspfParameters.DD: | ||
| 64 | + ospfMessage = new DdPacket(ospfHeader); | ||
| 65 | + break; | ||
| 66 | + case OspfParameters.LSREQUEST: | ||
| 67 | + ospfMessage = new LsRequest(ospfHeader); | ||
| 68 | + break; | ||
| 69 | + case OspfParameters.LSUPDATE: | ||
| 70 | + ospfMessage = new LsUpdate(ospfHeader); | ||
| 71 | + break; | ||
| 72 | + case OspfParameters.LSACK: | ||
| 73 | + ospfMessage = new LsAcknowledge(ospfHeader); | ||
| 74 | + break; | ||
| 75 | + default: | ||
| 76 | + log.debug("Message Reader[Decoder] - Unknown LSA type..!!!"); | ||
| 77 | + break; | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + if (ospfMessage != null) { | ||
| 81 | + try { | ||
| 82 | + log.debug("{} Received::Message Length :: {} ", ospfMessage.ospfMessageType(), | ||
| 83 | + ospfHeader.ospfPacLength()); | ||
| 84 | + ospfMessage.readFrom(channelBuffer.readBytes(len)); | ||
| 85 | + } catch (Exception e) { | ||
| 86 | + throw new OspfParseException(OspfErrorType.OSPF_MESSAGE_ERROR, | ||
| 87 | + OspfErrorType.BAD_MESSAGE); | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + return ospfMessage; | ||
| 93 | + } catch (Exception e) { | ||
| 94 | + throw new OspfParseException(OspfErrorType.OSPF_MESSAGE_ERROR, | ||
| 95 | + OspfErrorType.BAD_MESSAGE); | ||
| 96 | + } | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + /** | ||
| 100 | + * Gets the OSPF packet Header. | ||
| 101 | + * | ||
| 102 | + * @param channelBuffer channel buffer instance. | ||
| 103 | + * @return Ospf Header instance. | ||
| 104 | + */ | ||
| 105 | + private OspfPacketHeader getOspfHeader(ChannelBuffer channelBuffer) throws Exception { | ||
| 106 | + OspfPacketHeader ospfPacketHeader = new OspfPacketHeader(); | ||
| 107 | + | ||
| 108 | + byte[] sourceIpBytes = new byte[OspfUtil.FOUR_BYTES]; | ||
| 109 | + channelBuffer.readBytes(sourceIpBytes, 0, OspfUtil.FOUR_BYTES); | ||
| 110 | + Ip4Address sourceIP = Ip4Address.valueOf(sourceIpBytes); | ||
| 111 | + | ||
| 112 | + // Determine ospf version & Packet Type | ||
| 113 | + int version = channelBuffer.readByte(); //byte 1 is ospf version | ||
| 114 | + int packetType = channelBuffer.readByte(); //byte 2 is ospf packet type | ||
| 115 | + | ||
| 116 | + // byte 3 & 4 combine is packet length. | ||
| 117 | + int packetLength = channelBuffer.readShort(); | ||
| 118 | + | ||
| 119 | + if (packetLength > channelBuffer.readableBytes() + OspfUtil.FOUR_BYTES) { | ||
| 120 | + log.error("Packet should have minimum length..."); | ||
| 121 | + throw new OspfParseException(OspfErrorType.MESSAGE_HEADER_ERROR, OspfErrorType.BAD_MESSAGE_LENGTH); | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | + byte[] tempByteArray = new byte[OspfUtil.FOUR_BYTES]; | ||
| 125 | + channelBuffer.readBytes(tempByteArray, 0, OspfUtil.FOUR_BYTES); | ||
| 126 | + Ip4Address routerId = Ip4Address.valueOf(tempByteArray); | ||
| 127 | + | ||
| 128 | + tempByteArray = new byte[OspfUtil.FOUR_BYTES]; | ||
| 129 | + channelBuffer.readBytes(tempByteArray, 0, OspfUtil.FOUR_BYTES); | ||
| 130 | + Ip4Address areaId = Ip4Address.valueOf(tempByteArray); | ||
| 131 | + | ||
| 132 | + int checkSum = channelBuffer.readUnsignedShort(); | ||
| 133 | + int auType = channelBuffer.readUnsignedShort(); | ||
| 134 | + int authentication = (int) channelBuffer.readLong(); | ||
| 135 | + | ||
| 136 | + ospfPacketHeader.setSourceIp(sourceIP); | ||
| 137 | + ospfPacketHeader.setOspfVer(version); | ||
| 138 | + ospfPacketHeader.setOspftype(packetType); | ||
| 139 | + ospfPacketHeader.setOspfPacLength(packetLength); | ||
| 140 | + ospfPacketHeader.setRouterId(routerId); | ||
| 141 | + ospfPacketHeader.setAreaId(areaId); | ||
| 142 | + ospfPacketHeader.setChecksum(checkSum); | ||
| 143 | + ospfPacketHeader.setAuthType(auType); | ||
| 144 | + ospfPacketHeader.setAuthentication(authentication); | ||
| 145 | + | ||
| 146 | + return ospfPacketHeader; | ||
| 147 | + } | ||
| 148 | +} | ||
| ... | \ 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.ospf.protocol.ospfpacket; | ||
| 17 | + | ||
| 18 | +import org.jboss.netty.buffer.ChannelBuffer; | ||
| 19 | +import org.jboss.netty.buffer.ChannelBuffers; | ||
| 20 | +import org.onosproject.ospf.protocol.util.OspfParameters; | ||
| 21 | +import org.onosproject.ospf.protocol.util.OspfUtil; | ||
| 22 | +import org.slf4j.Logger; | ||
| 23 | +import org.slf4j.LoggerFactory; | ||
| 24 | + | ||
| 25 | +/** | ||
| 26 | + * A message writer which writes an OspfMessage to ChannelBuffer. | ||
| 27 | + */ | ||
| 28 | +public class OspfMessageWriter { | ||
| 29 | + private static final Logger log = LoggerFactory.getLogger(OspfMessageWriter.class); | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * Writes OSPF message to ChannelBuffer. | ||
| 33 | + * | ||
| 34 | + * @param ospfMessage OSPF message | ||
| 35 | + * @param interfaceState interface state | ||
| 36 | + * @param interfaceType interface type | ||
| 37 | + * @return channelBuffer channel buffer instance | ||
| 38 | + * @throws Exception might throws exception while parsing message | ||
| 39 | + */ | ||
| 40 | + public ChannelBuffer writeToBuffer(OspfMessage ospfMessage, int interfaceState, | ||
| 41 | + int interfaceType) throws Exception { | ||
| 42 | + | ||
| 43 | + ChannelBuffer buf = null; | ||
| 44 | + switch (ospfMessage.ospfMessageType().value()) { | ||
| 45 | + case OspfParameters.HELLO: | ||
| 46 | + case OspfParameters.LSACK: | ||
| 47 | + buf = writeMessageToBuffer(ospfMessage, interfaceState); | ||
| 48 | + break; | ||
| 49 | + case OspfParameters.DD: | ||
| 50 | + case OspfParameters.LSREQUEST: | ||
| 51 | + case OspfParameters.LSUPDATE: | ||
| 52 | + buf = writeMessageToBuffer(ospfMessage, interfaceState); | ||
| 53 | + break; | ||
| 54 | + default: | ||
| 55 | + log.debug("Message Writer[Encoder] - Unknown Message to encode..!!!"); | ||
| 56 | + break; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + return buf; | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + /** | ||
| 63 | + * Writes an OSPF Message to channel buffer. | ||
| 64 | + * | ||
| 65 | + * @param ospfMessage OSPF Message instance | ||
| 66 | + * @param interfaceState interface state | ||
| 67 | + * @return channelBuffer instance | ||
| 68 | + */ | ||
| 69 | + private ChannelBuffer writeMessageToBuffer(OspfMessage ospfMessage, int interfaceState) throws Exception { | ||
| 70 | + ChannelBuffer channelBuffer = null; | ||
| 71 | + byte[] ospfMessageAsByte = ospfMessage.asBytes(); | ||
| 72 | + //Add the length and checksum in byte array at length position 2 & 3 and Checksum position | ||
| 73 | + ospfMessageAsByte = OspfUtil.addLengthAndCheckSum(ospfMessageAsByte, OspfUtil.OSPFPACKET_LENGTH_POS1, | ||
| 74 | + OspfUtil.OSPFPACKET_LENGTH_POS2, | ||
| 75 | + OspfUtil.OSPFPACKET_CHECKSUM_POS1, | ||
| 76 | + OspfUtil.OSPFPACKET_CHECKSUM_POS2); | ||
| 77 | + //Add Interface State Info and destination IP as metadata | ||
| 78 | + if (interfaceState == OspfParameters.DR || interfaceState == OspfParameters.BDR) { | ||
| 79 | + ospfMessageAsByte = OspfUtil.addMetadata(ospfMessageAsByte, OspfUtil.JOIN_ALL_DROUTERS, | ||
| 80 | + ospfMessage.destinationIp()); | ||
| 81 | + } else { | ||
| 82 | + ospfMessageAsByte = OspfUtil.addMetadata(ospfMessageAsByte, OspfUtil.ONLY_ALL_SPF_ROUTERS, | ||
| 83 | + ospfMessage.destinationIp()); | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + channelBuffer = ChannelBuffers.buffer(ospfMessageAsByte.length); | ||
| 87 | + channelBuffer.writeBytes(ospfMessageAsByte); | ||
| 88 | + | ||
| 89 | + return channelBuffer; | ||
| 90 | + } | ||
| 91 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/types/LsUpdate.java
0 → 100644
| 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.ospf.protocol.ospfpacket.types; | ||
| 17 | + | ||
| 18 | +import com.google.common.base.MoreObjects; | ||
| 19 | +import com.google.common.primitives.Bytes; | ||
| 20 | +import org.jboss.netty.buffer.ChannelBuffer; | ||
| 21 | +import org.onosproject.ospf.controller.OspfLsa; | ||
| 22 | +import org.onosproject.ospf.exceptions.OspfErrorType; | ||
| 23 | +import org.onosproject.ospf.exceptions.OspfParseException; | ||
| 24 | +import org.onosproject.ospf.protocol.lsa.LsaHeader; | ||
| 25 | +import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader; | ||
| 26 | +import org.onosproject.ospf.protocol.lsa.types.AsbrSummaryLsa; | ||
| 27 | +import org.onosproject.ospf.protocol.lsa.types.ExternalLsa; | ||
| 28 | +import org.onosproject.ospf.protocol.lsa.types.NetworkLsa; | ||
| 29 | +import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa10; | ||
| 30 | +import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa11; | ||
| 31 | +import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa9; | ||
| 32 | +import org.onosproject.ospf.protocol.lsa.types.RouterLsa; | ||
| 33 | +import org.onosproject.ospf.protocol.lsa.types.SummaryLsa; | ||
| 34 | +import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader; | ||
| 35 | +import org.onosproject.ospf.protocol.util.OspfPacketType; | ||
| 36 | +import org.onosproject.ospf.protocol.util.OspfParameters; | ||
| 37 | +import org.onosproject.ospf.protocol.util.OspfUtil; | ||
| 38 | +import org.slf4j.Logger; | ||
| 39 | +import org.slf4j.LoggerFactory; | ||
| 40 | + | ||
| 41 | +import java.util.ArrayList; | ||
| 42 | +import java.util.LinkedList; | ||
| 43 | +import java.util.List; | ||
| 44 | + | ||
| 45 | +/** | ||
| 46 | + * Representation of an OSPF Link State Update packet. | ||
| 47 | + * Link State Update packets are OSPF packet type 4. These packets | ||
| 48 | + * implement the flooding of LSAs. Each Link State Update packet | ||
| 49 | + * carries a collection of LSAs one hop further from their origin. | ||
| 50 | + * Several LSAs may be included in a single packet. | ||
| 51 | + */ | ||
| 52 | +public class LsUpdate extends OspfPacketHeader { | ||
| 53 | + /* | ||
| 54 | + 0 1 2 3 | ||
| 55 | + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||
| 56 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 57 | + | Version # | 4 | Packet length | | ||
| 58 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 59 | + | Router ID | | ||
| 60 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 61 | + | Area ID | | ||
| 62 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 63 | + | Checksum | AuType | | ||
| 64 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 65 | + | Authentication | | ||
| 66 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 67 | + | Authentication | | ||
| 68 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 69 | + | # LSAs | | ||
| 70 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| 71 | + | | | ||
| 72 | + +- +-+ | ||
| 73 | + | LSAs | | ||
| 74 | + +- +-+ | ||
| 75 | + | ... | | ||
| 76 | + */ | ||
| 77 | + private static final Logger log = LoggerFactory.getLogger(LsUpdate.class); | ||
| 78 | + private int numberOfLsa; | ||
| 79 | + private List<OspfLsa> lsaList = new LinkedList<>(); | ||
| 80 | + | ||
| 81 | + /** | ||
| 82 | + * Creates an instance of Link State Update packet. | ||
| 83 | + */ | ||
| 84 | + public LsUpdate() { | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + /** | ||
| 88 | + * Creates an instance of Link State Update packet. | ||
| 89 | + * | ||
| 90 | + * @param ospfHeader ospf header instance. | ||
| 91 | + */ | ||
| 92 | + public LsUpdate(OspfPacketHeader ospfHeader) { | ||
| 93 | + populateHeader(ospfHeader); | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + /** | ||
| 97 | + * Gets the LSA list. | ||
| 98 | + * | ||
| 99 | + * @return list of LSA | ||
| 100 | + */ | ||
| 101 | + public List getLsaList() { | ||
| 102 | + return lsaList; | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + /** | ||
| 106 | + * Adds the LSA to list. | ||
| 107 | + * | ||
| 108 | + * @param lsa LSA | ||
| 109 | + */ | ||
| 110 | + public void addLsa(OspfLsa lsa) { | ||
| 111 | + if (!lsaList.contains(lsa)) { | ||
| 112 | + lsaList.add(lsa); | ||
| 113 | + } | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + /** | ||
| 117 | + * Gets the number of LSA. | ||
| 118 | + * | ||
| 119 | + * @return number of LSA | ||
| 120 | + */ | ||
| 121 | + public int noLsa() { | ||
| 122 | + return numberOfLsa; | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + /** | ||
| 126 | + * Sets number of LSA. | ||
| 127 | + * | ||
| 128 | + * @param numberOfLsa number of LSA | ||
| 129 | + */ | ||
| 130 | + public void setNumberOfLsa(int numberOfLsa) { | ||
| 131 | + this.numberOfLsa = numberOfLsa; | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + | ||
| 135 | + @Override | ||
| 136 | + public OspfPacketType ospfMessageType() { | ||
| 137 | + return OspfPacketType.LSUPDATE; | ||
| 138 | + } | ||
| 139 | + | ||
| 140 | + @Override | ||
| 141 | + public void readFrom(ChannelBuffer channelBuffer) throws OspfParseException { | ||
| 142 | + try { | ||
| 143 | + //From header 4 bytes is number of lsa's | ||
| 144 | + this.setNumberOfLsa(channelBuffer.readInt()); | ||
| 145 | + //get the remaining bytes represents Number of LSA's present. Add all the LSA's | ||
| 146 | + while (channelBuffer.readableBytes() > OspfUtil.LSA_HEADER_LENGTH) { | ||
| 147 | + | ||
| 148 | + LsaHeader header = OspfUtil.readLsaHeader(channelBuffer.readBytes(OspfUtil.LSA_HEADER_LENGTH)); | ||
| 149 | + int lsaLength = header.lsPacketLen(); | ||
| 150 | + int lsType = header.lsType(); | ||
| 151 | + | ||
| 152 | + switch (lsType) { | ||
| 153 | + case OspfParameters.LINK_LOCAL_OPAQUE_LSA: | ||
| 154 | + OpaqueLsa9 opaqueLsa9 = new OpaqueLsa9((OpaqueLsaHeader) header); | ||
| 155 | + opaqueLsa9.readFrom(channelBuffer.readBytes(lsaLength - OspfUtil.LSA_HEADER_LENGTH)); | ||
| 156 | + addLsa(opaqueLsa9); | ||
| 157 | + break; | ||
| 158 | + case OspfParameters.AREA_LOCAL_OPAQUE_LSA: | ||
| 159 | + OpaqueLsa10 opaqueLsa10 = new OpaqueLsa10((OpaqueLsaHeader) header); | ||
| 160 | + opaqueLsa10.readFrom(channelBuffer.readBytes(lsaLength - OspfUtil.LSA_HEADER_LENGTH)); | ||
| 161 | + addLsa(opaqueLsa10); | ||
| 162 | + break; | ||
| 163 | + case OspfParameters.AS_OPAQUE_LSA: | ||
| 164 | + OpaqueLsa11 opaqueLsa11 = new OpaqueLsa11((OpaqueLsaHeader) header); | ||
| 165 | + opaqueLsa11.readFrom(channelBuffer.readBytes(lsaLength - OspfUtil.LSA_HEADER_LENGTH)); | ||
| 166 | + addLsa(opaqueLsa11); | ||
| 167 | + break; | ||
| 168 | + case OspfParameters.ROUTER: | ||
| 169 | + RouterLsa routerLsa = new RouterLsa(header); | ||
| 170 | + routerLsa.readFrom(channelBuffer.readBytes(lsaLength - OspfUtil.LSA_HEADER_LENGTH)); | ||
| 171 | + addLsa(routerLsa); | ||
| 172 | + break; | ||
| 173 | + case OspfParameters.NETWORK: | ||
| 174 | + NetworkLsa networkLsa = new NetworkLsa(header); | ||
| 175 | + networkLsa.readFrom(channelBuffer.readBytes(lsaLength - OspfUtil.LSA_HEADER_LENGTH)); | ||
| 176 | + addLsa(networkLsa); | ||
| 177 | + break; | ||
| 178 | + case OspfParameters.ASBR_SUMMARY: | ||
| 179 | + AsbrSummaryLsa asbrSummaryLsa = new AsbrSummaryLsa(header); | ||
| 180 | + asbrSummaryLsa.readFrom(channelBuffer.readBytes(lsaLength - OspfUtil.LSA_HEADER_LENGTH)); | ||
| 181 | + addLsa(asbrSummaryLsa); | ||
| 182 | + break; | ||
| 183 | + case OspfParameters.SUMMARY: | ||
| 184 | + SummaryLsa summaryLSA = new SummaryLsa(header); | ||
| 185 | + summaryLSA.readFrom(channelBuffer.readBytes(lsaLength - OspfUtil.LSA_HEADER_LENGTH)); | ||
| 186 | + addLsa(summaryLSA); | ||
| 187 | + break; | ||
| 188 | + case OspfParameters.EXTERNAL_LSA: | ||
| 189 | + ExternalLsa externalLsa = new ExternalLsa(header); | ||
| 190 | + externalLsa.readFrom(channelBuffer.readBytes(lsaLength - OspfUtil.LSA_HEADER_LENGTH)); | ||
| 191 | + addLsa(externalLsa); | ||
| 192 | + break; | ||
| 193 | + default: | ||
| 194 | + log.debug("LSUpdate::readLsUpdateBody::UnKnown LS Type: {}", lsType); | ||
| 195 | + break; | ||
| 196 | + } | ||
| 197 | + } | ||
| 198 | + } catch (Exception e) { | ||
| 199 | + log.debug("Error::LsUpdate:: {}", e.getMessage()); | ||
| 200 | + throw new OspfParseException(OspfErrorType.MESSAGE_HEADER_ERROR, OspfErrorType.BAD_MESSAGE_LENGTH); | ||
| 201 | + } | ||
| 202 | + } | ||
| 203 | + | ||
| 204 | + @Override | ||
| 205 | + public byte[] asBytes() { | ||
| 206 | + byte[] lsuMessage = null; | ||
| 207 | + | ||
| 208 | + byte[] ospfHeader = getLsuHeaderAsByteArray(); | ||
| 209 | + byte[] lsuBody = getLsuBodyAsByteArray(); | ||
| 210 | + lsuMessage = Bytes.concat(ospfHeader, lsuBody); | ||
| 211 | + | ||
| 212 | + return lsuMessage; | ||
| 213 | + } | ||
| 214 | + | ||
| 215 | + /** | ||
| 216 | + * Gets lsu header. | ||
| 217 | + * | ||
| 218 | + * @return lsu header as byte array | ||
| 219 | + */ | ||
| 220 | + public byte[] getLsuHeaderAsByteArray() { | ||
| 221 | + List<Byte> headerLst = new ArrayList<>(); | ||
| 222 | + try { | ||
| 223 | + headerLst.add((byte) this.ospfVersion()); | ||
| 224 | + headerLst.add((byte) this.ospfType()); | ||
| 225 | + headerLst.addAll(Bytes.asList(OspfUtil.convertToTwoBytes(this.ospfPacLength()))); | ||
| 226 | + headerLst.addAll(Bytes.asList(this.routerId().toOctets())); | ||
| 227 | + headerLst.addAll(Bytes.asList(this.areaId().toOctets())); | ||
| 228 | + headerLst.addAll(Bytes.asList(OspfUtil.convertToTwoBytes(this.checksum()))); | ||
| 229 | + headerLst.addAll(Bytes.asList(OspfUtil.convertToTwoBytes(this.authType()))); | ||
| 230 | + //Authentication is 0 always. Total 8 bytes consist of zero | ||
| 231 | + byte[] auth = new byte[OspfUtil.EIGHT_BYTES]; | ||
| 232 | + headerLst.addAll(Bytes.asList(auth)); | ||
| 233 | + } catch (Exception e) { | ||
| 234 | + log.debug("Error::LSUpdate::getLsuHeaderAsByteArray:: {}", e.getMessage()); | ||
| 235 | + return Bytes.toArray(headerLst); | ||
| 236 | + } | ||
| 237 | + | ||
| 238 | + return Bytes.toArray(headerLst); | ||
| 239 | + } | ||
| 240 | + | ||
| 241 | + /** | ||
| 242 | + * Get lsu body as byte array. | ||
| 243 | + * | ||
| 244 | + * @return lsu body as byte array | ||
| 245 | + */ | ||
| 246 | + public byte[] getLsuBodyAsByteArray() { | ||
| 247 | + List<Byte> bodyLst = new ArrayList<>(); | ||
| 248 | + | ||
| 249 | + try { | ||
| 250 | + //add number of LSA's | ||
| 251 | + bodyLst.addAll(Bytes.asList(OspfUtil.convertToFourBytes(this.noLsa()))); | ||
| 252 | + //for each type of LSA's from the list get lsa bytes | ||
| 253 | + for (OspfLsa ospfLsa : lsaList) { | ||
| 254 | + //Check the type of lsa and build bytes accordingly | ||
| 255 | + switch (ospfLsa.getOspfLsaType().value()) { | ||
| 256 | + case OspfParameters.LINK_LOCAL_OPAQUE_LSA: | ||
| 257 | + OpaqueLsa9 opaqueLsa9 = (OpaqueLsa9) ospfLsa; | ||
| 258 | + bodyLst.addAll(Bytes.asList(opaqueLsa9.asBytes())); | ||
| 259 | + break; | ||
| 260 | + case OspfParameters.AREA_LOCAL_OPAQUE_LSA: | ||
| 261 | + OpaqueLsa10 opaqueLsa10 = (OpaqueLsa10) ospfLsa; | ||
| 262 | + bodyLst.addAll(Bytes.asList(opaqueLsa10.asBytes())); | ||
| 263 | + break; | ||
| 264 | + case OspfParameters.AS_OPAQUE_LSA: | ||
| 265 | + OpaqueLsa11 opaqueLsa11 = (OpaqueLsa11) ospfLsa; | ||
| 266 | + bodyLst.addAll(Bytes.asList(opaqueLsa11.asBytes())); | ||
| 267 | + break; | ||
| 268 | + case OspfParameters.ROUTER: | ||
| 269 | + RouterLsa routerLsa = (RouterLsa) ospfLsa; | ||
| 270 | + bodyLst.addAll(Bytes.asList(routerLsa.asBytes())); | ||
| 271 | + break; | ||
| 272 | + case OspfParameters.NETWORK: | ||
| 273 | + NetworkLsa networkLsa = (NetworkLsa) ospfLsa; | ||
| 274 | + bodyLst.addAll(Bytes.asList(networkLsa.asBytes())); | ||
| 275 | + break; | ||
| 276 | + case OspfParameters.ASBR_SUMMARY: | ||
| 277 | + AsbrSummaryLsa asbrSummaryLsa = (AsbrSummaryLsa) ospfLsa; | ||
| 278 | + bodyLst.addAll(Bytes.asList(asbrSummaryLsa.asBytes())); | ||
| 279 | + break; | ||
| 280 | + case OspfParameters.SUMMARY: | ||
| 281 | + SummaryLsa summaryLsa = (SummaryLsa) ospfLsa; | ||
| 282 | + bodyLst.addAll(Bytes.asList(summaryLsa.asBytes())); | ||
| 283 | + break; | ||
| 284 | + case OspfParameters.EXTERNAL_LSA: | ||
| 285 | + ExternalLsa externalLsa = (ExternalLsa) ospfLsa; | ||
| 286 | + bodyLst.addAll(Bytes.asList(externalLsa.asBytes())); | ||
| 287 | + break; | ||
| 288 | + default: | ||
| 289 | + log.debug("LSUpdate::getLsuBodyAsByteArray::UnKnown ospfLsa: {}", ospfLsa); | ||
| 290 | + break; | ||
| 291 | + } | ||
| 292 | + } | ||
| 293 | + | ||
| 294 | + } catch (Exception e) { | ||
| 295 | + log.debug("Error::getLsuBodyAsByteArray {}", e.getMessage()); | ||
| 296 | + return Bytes.toArray(bodyLst); | ||
| 297 | + } | ||
| 298 | + | ||
| 299 | + return Bytes.toArray(bodyLst); | ||
| 300 | + } | ||
| 301 | + | ||
| 302 | + @Override | ||
| 303 | + public String toString() { | ||
| 304 | + return MoreObjects.toStringHelper(getClass()) | ||
| 305 | + .omitNullValues() | ||
| 306 | + .add("noLsa", numberOfLsa) | ||
| 307 | + .add("lsaList", lsaList) | ||
| 308 | + .toString(); | ||
| 309 | + } | ||
| 310 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/util/ChecksumCalculator.java
0 → 100644
| 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.ospf.protocol.util; | ||
| 17 | + | ||
| 18 | +import org.onosproject.ospf.controller.OspfLsa; | ||
| 19 | +import org.onosproject.ospf.controller.OspfLsaType; | ||
| 20 | +import org.onosproject.ospf.protocol.lsa.types.AsbrSummaryLsa; | ||
| 21 | +import org.onosproject.ospf.protocol.lsa.types.ExternalLsa; | ||
| 22 | +import org.onosproject.ospf.protocol.lsa.types.NetworkLsa; | ||
| 23 | +import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa10; | ||
| 24 | +import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa11; | ||
| 25 | +import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa9; | ||
| 26 | +import org.onosproject.ospf.protocol.lsa.types.RouterLsa; | ||
| 27 | +import org.onosproject.ospf.protocol.lsa.types.SummaryLsa; | ||
| 28 | +import org.onosproject.ospf.protocol.ospfpacket.OspfMessage; | ||
| 29 | +import org.onosproject.ospf.protocol.ospfpacket.types.DdPacket; | ||
| 30 | +import org.onosproject.ospf.protocol.ospfpacket.types.HelloPacket; | ||
| 31 | +import org.onosproject.ospf.protocol.ospfpacket.types.LsAcknowledge; | ||
| 32 | +import org.onosproject.ospf.protocol.ospfpacket.types.LsRequest; | ||
| 33 | +import org.onosproject.ospf.protocol.ospfpacket.types.LsUpdate; | ||
| 34 | + | ||
| 35 | +import java.util.Arrays; | ||
| 36 | + | ||
| 37 | +/** | ||
| 38 | + * Calculates checksum for different types of OSPF packets. | ||
| 39 | + */ | ||
| 40 | +public class ChecksumCalculator { | ||
| 41 | + | ||
| 42 | + /** | ||
| 43 | + * Converts given string to sixteen bits integer. | ||
| 44 | + * If hexasum is more than 16 bit value, needs to be reduced to 16 bit value. | ||
| 45 | + * | ||
| 46 | + * @param strToConvert hexasum value to convert | ||
| 47 | + * @return 16 bit integer value | ||
| 48 | + */ | ||
| 49 | + public static int convertToSixteenBits(String strToConvert) { | ||
| 50 | + StringBuilder sb = new StringBuilder(strToConvert); | ||
| 51 | + sb = sb.reverse(); | ||
| 52 | + StringBuilder s1 = new StringBuilder(sb.substring(0, 4)); | ||
| 53 | + s1 = s1.reverse(); | ||
| 54 | + StringBuilder s2 = new StringBuilder(sb.substring(4, sb.length())); | ||
| 55 | + s2 = s2.reverse(); | ||
| 56 | + int num = Integer.parseInt(s1.toString(), 16) + Integer.parseInt(s2.toString(), 16); | ||
| 57 | + return num; | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + /** | ||
| 61 | + * Checks whether checksum is valid or not in the given OSPF message. | ||
| 62 | + * | ||
| 63 | + * @param ospfMessage ospf message instance | ||
| 64 | + * @param checksumPos1 position of checksum bit in packet | ||
| 65 | + * @param checksumPos2 position of checksum bit in packet | ||
| 66 | + * @return true if valid else false | ||
| 67 | + */ | ||
| 68 | + public boolean isValidOspfCheckSum(OspfMessage ospfMessage, int checksumPos1, int checksumPos2) { | ||
| 69 | + | ||
| 70 | + switch (ospfMessage.ospfMessageType().value()) { | ||
| 71 | + case OspfParameters.HELLO: | ||
| 72 | + ospfMessage = (HelloPacket) ospfMessage; | ||
| 73 | + break; | ||
| 74 | + case OspfParameters.DD: | ||
| 75 | + ospfMessage = (DdPacket) ospfMessage; | ||
| 76 | + break; | ||
| 77 | + case OspfParameters.LSREQUEST: | ||
| 78 | + ospfMessage = (LsRequest) ospfMessage; | ||
| 79 | + break; | ||
| 80 | + case OspfParameters.LSUPDATE: | ||
| 81 | + ospfMessage = (LsUpdate) ospfMessage; | ||
| 82 | + break; | ||
| 83 | + case OspfParameters.LSACK: | ||
| 84 | + ospfMessage = (LsAcknowledge) ospfMessage; | ||
| 85 | + break; | ||
| 86 | + default: | ||
| 87 | + break; | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + byte[] messageAsBytes = ospfMessage.asBytes(); | ||
| 91 | + return validateOspfCheckSum(messageAsBytes, checksumPos1, checksumPos2); | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + /** | ||
| 95 | + * Checks whether checksum is valid or not in the given OSPF LSA. | ||
| 96 | + * | ||
| 97 | + * @param ospfLsa lsa instance | ||
| 98 | + * @param lsType lsa type | ||
| 99 | + * @param lsaChecksumPos1 lsa checksum position in packet | ||
| 100 | + * @param lsaChecksumPos2 lsa checksum position in packet | ||
| 101 | + * @return true if valid else false | ||
| 102 | + * @throws Exception might throw exception while processing | ||
| 103 | + */ | ||
| 104 | + public boolean isValidLsaCheckSum(OspfLsa ospfLsa, int lsType, int lsaChecksumPos1, | ||
| 105 | + int lsaChecksumPos2) throws Exception { | ||
| 106 | + if (lsType == OspfLsaType.ROUTER.value()) { | ||
| 107 | + RouterLsa lsa = (RouterLsa) ospfLsa; | ||
| 108 | + return validateLsaCheckSum(lsa.asBytes(), lsaChecksumPos1, lsaChecksumPos2); | ||
| 109 | + } else if (lsType == OspfLsaType.NETWORK.value()) { | ||
| 110 | + NetworkLsa lsa = (NetworkLsa) ospfLsa; | ||
| 111 | + return validateLsaCheckSum(lsa.asBytes(), lsaChecksumPos1, lsaChecksumPos2); | ||
| 112 | + } else if (lsType == OspfLsaType.SUMMARY.value()) { | ||
| 113 | + SummaryLsa lsa = (SummaryLsa) ospfLsa; | ||
| 114 | + return validateLsaCheckSum(lsa.asBytes(), lsaChecksumPos1, lsaChecksumPos2); | ||
| 115 | + } else if (lsType == OspfLsaType.ASBR_SUMMARY.value()) { | ||
| 116 | + AsbrSummaryLsa lsa = (AsbrSummaryLsa) ospfLsa; | ||
| 117 | + return validateLsaCheckSum(lsa.asBytes(), lsaChecksumPos1, lsaChecksumPos2); | ||
| 118 | + } else if (lsType == OspfLsaType.EXTERNAL_LSA.value()) { | ||
| 119 | + ExternalLsa lsa = (ExternalLsa) ospfLsa; | ||
| 120 | + return validateLsaCheckSum(lsa.asBytes(), lsaChecksumPos1, lsaChecksumPos2); | ||
| 121 | + } else if (lsType == OspfLsaType.LINK_LOCAL_OPAQUE_LSA.value()) { | ||
| 122 | + OpaqueLsa9 lsa = (OpaqueLsa9) ospfLsa; | ||
| 123 | + return validateLsaCheckSum(lsa.asBytes(), lsaChecksumPos1, lsaChecksumPos2); | ||
| 124 | + } else if (lsType == OspfLsaType.AREA_LOCAL_OPAQUE_LSA.value()) { | ||
| 125 | + OpaqueLsa10 lsa = (OpaqueLsa10) ospfLsa; | ||
| 126 | + return validateLsaCheckSum(lsa.asBytes(), lsaChecksumPos1, lsaChecksumPos2); | ||
| 127 | + } else if (lsType == OspfLsaType.AS_OPAQUE_LSA.value()) { | ||
| 128 | + OpaqueLsa11 lsa = (OpaqueLsa11) ospfLsa; | ||
| 129 | + return validateLsaCheckSum(lsa.asBytes(), lsaChecksumPos1, lsaChecksumPos2); | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + return false; | ||
| 133 | + } | ||
| 134 | + | ||
| 135 | + /** | ||
| 136 | + * Verifies the checksum is valid in given LSA packet bytes. | ||
| 137 | + * | ||
| 138 | + * @param lsaPacket lsa as byte array | ||
| 139 | + * @param lsaChecksumPos1 position of checksum bit in packet | ||
| 140 | + * @param lsaChecksumPos2 position of checksum bit in packet | ||
| 141 | + * @return true if valid else false | ||
| 142 | + */ | ||
| 143 | + public boolean validateLsaCheckSum(byte[] lsaPacket, int lsaChecksumPos1, int lsaChecksumPos2) { | ||
| 144 | + | ||
| 145 | + byte[] checksum = calculateLsaChecksum(lsaPacket, lsaChecksumPos1, lsaChecksumPos2); | ||
| 146 | + | ||
| 147 | + if (lsaPacket[lsaChecksumPos1] == checksum[0] && lsaPacket[lsaChecksumPos2] == checksum[1]) { | ||
| 148 | + return true; | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + return false; | ||
| 152 | + } | ||
| 153 | + | ||
| 154 | + /** | ||
| 155 | + * Verifies the checksum is valid in given OSPF packet bytes. | ||
| 156 | + * | ||
| 157 | + * @param ospfPacket as byte array | ||
| 158 | + * @param checksumPos1 position of checksum bit in packet | ||
| 159 | + * @param checksumPos2 position of checksum bit in packet | ||
| 160 | + * @return true if valid else false | ||
| 161 | + */ | ||
| 162 | + public boolean validateOspfCheckSum(byte[] ospfPacket, int checksumPos1, int checksumPos2) { | ||
| 163 | + | ||
| 164 | + byte[] checkSum = calculateOspfCheckSum(ospfPacket, checksumPos1, checksumPos2); | ||
| 165 | + | ||
| 166 | + if (ospfPacket[checksumPos1] == checkSum[0] && ospfPacket[checksumPos2] == checkSum[1]) { | ||
| 167 | + return true; | ||
| 168 | + } | ||
| 169 | + | ||
| 170 | + return false; | ||
| 171 | + } | ||
| 172 | + | ||
| 173 | + /** | ||
| 174 | + * Calculates the LSA checksum. | ||
| 175 | + * | ||
| 176 | + * @param lsaBytes as byte array | ||
| 177 | + * @param lsaChecksumPos1 position of checksum bit in packet | ||
| 178 | + * @param lsaChecksumPos2 position of checksum bit in packet | ||
| 179 | + * @return checksum bytes | ||
| 180 | + */ | ||
| 181 | + public byte[] calculateLsaChecksum(byte[] lsaBytes, int lsaChecksumPos1, int lsaChecksumPos2) { | ||
| 182 | + | ||
| 183 | + byte[] tempLsaByte = Arrays.copyOf(lsaBytes, lsaBytes.length); | ||
| 184 | + | ||
| 185 | + int[] checksumOut = {0, 0}; | ||
| 186 | + tempLsaByte[lsaChecksumPos1] = 0; | ||
| 187 | + tempLsaByte[lsaChecksumPos2] = 0; | ||
| 188 | + byte[] byteCheckSum = {0, 0}; | ||
| 189 | + if (lsaBytes != null) { | ||
| 190 | + for (int i = 2; i < tempLsaByte.length; i++) { | ||
| 191 | + checksumOut[0] = checksumOut[0] + ((int) tempLsaByte[i] & 0xFF); | ||
| 192 | + checksumOut[1] = checksumOut[1] + checksumOut[0]; | ||
| 193 | + } | ||
| 194 | + checksumOut[0] = checksumOut[0] % 255; | ||
| 195 | + checksumOut[1] = checksumOut[1] % 255; | ||
| 196 | + } | ||
| 197 | + int byte1 = (int) ((tempLsaByte.length - lsaChecksumPos1 - 1) * checksumOut[0] - checksumOut[1]) % 255; | ||
| 198 | + if (byte1 <= 0) { | ||
| 199 | + byte1 += 255; | ||
| 200 | + } | ||
| 201 | + int byte2 = 510 - checksumOut[0] - byte1; | ||
| 202 | + if (byte2 > 255) { | ||
| 203 | + byte2 -= 255; | ||
| 204 | + } | ||
| 205 | + | ||
| 206 | + byteCheckSum[0] = (byte) byte1; | ||
| 207 | + byteCheckSum[1] = (byte) byte2; | ||
| 208 | + | ||
| 209 | + return byteCheckSum; | ||
| 210 | + } | ||
| 211 | + | ||
| 212 | + /** | ||
| 213 | + * Calculate checksum from hexasum. | ||
| 214 | + * | ||
| 215 | + * @param hexasum total of 16 bits hexadecimal values | ||
| 216 | + * @return checksum value | ||
| 217 | + */ | ||
| 218 | + private int calculateChecksum(int hexasum) { | ||
| 219 | + | ||
| 220 | + char[] tempZeros = {'0', '0', '0', '0'}; | ||
| 221 | + StringBuffer hexaAsBinaryStr = new StringBuffer(Integer.toBinaryString(hexasum)); | ||
| 222 | + int length = hexaAsBinaryStr.length(); | ||
| 223 | + while (length > 16) { | ||
| 224 | + if (hexaAsBinaryStr.length() % 4 != 0) { | ||
| 225 | + int offset = hexaAsBinaryStr.length() % 4; | ||
| 226 | + hexaAsBinaryStr.insert(0, tempZeros, 0, 4 - offset); | ||
| 227 | + } | ||
| 228 | + StringBuffer hexaStr1 = new StringBuffer(hexaAsBinaryStr.reverse().substring(0, 16)); | ||
| 229 | + String revHexaStr1 = hexaStr1.reverse().toString(); | ||
| 230 | + StringBuffer hexaStr2 = new StringBuffer(hexaAsBinaryStr.reverse()); | ||
| 231 | + StringBuffer hexaStr3 = new StringBuffer(hexaStr2.reverse().substring(16, hexaStr2.length())); | ||
| 232 | + String revHexaStr3 = hexaStr3.reverse().toString(); | ||
| 233 | + int lastSixteenHexaBits = Integer.parseInt(revHexaStr1, 2); | ||
| 234 | + int remainingHexaBits = Integer.parseInt(revHexaStr3, 2); | ||
| 235 | + int totalCheckSum = lastSixteenHexaBits + remainingHexaBits; | ||
| 236 | + hexaAsBinaryStr = new StringBuffer(Integer.toBinaryString(totalCheckSum)); | ||
| 237 | + length = hexaAsBinaryStr.length(); | ||
| 238 | + } | ||
| 239 | + if (hexaAsBinaryStr.length() < 16) { | ||
| 240 | + int count = 16 - hexaAsBinaryStr.length(); | ||
| 241 | + String s = hexaAsBinaryStr.toString(); | ||
| 242 | + for (int i = 0; i < count; i++) { | ||
| 243 | + s = "0" + s; | ||
| 244 | + } | ||
| 245 | + | ||
| 246 | + hexaAsBinaryStr = new StringBuffer(s); | ||
| 247 | + | ||
| 248 | + } | ||
| 249 | + StringBuffer checksum = negate(hexaAsBinaryStr); | ||
| 250 | + return Integer.parseInt(checksum.toString(), 2); | ||
| 251 | + } | ||
| 252 | + | ||
| 253 | + /** | ||
| 254 | + * Negates given hexasum. | ||
| 255 | + * | ||
| 256 | + * @param binaryString binary form of hexasum | ||
| 257 | + * @return binary from of calculateChecksum | ||
| 258 | + */ | ||
| 259 | + private StringBuffer negate(StringBuffer binaryString) { | ||
| 260 | + for (int i = 0; i < binaryString.length(); i++) { | ||
| 261 | + if (binaryString.charAt(i) == '1') { | ||
| 262 | + binaryString.replace(i, i + 1, "0"); | ||
| 263 | + } else { | ||
| 264 | + binaryString.replace(i, i + 1, "1"); | ||
| 265 | + } | ||
| 266 | + } | ||
| 267 | + | ||
| 268 | + return binaryString; | ||
| 269 | + } | ||
| 270 | + | ||
| 271 | + /** | ||
| 272 | + * Calculates the OSPF checksum for the given packet. | ||
| 273 | + * | ||
| 274 | + * @param packet as byte array | ||
| 275 | + * @param checksumPos1 position of checksum bit in packet | ||
| 276 | + * @param checksumPos2 position of checksum bit in packet | ||
| 277 | + * @return checksum bytes | ||
| 278 | + */ | ||
| 279 | + public byte[] calculateOspfCheckSum(byte[] packet, int checksumPos1, int checksumPos2) { | ||
| 280 | + | ||
| 281 | + int hexasum = 0; | ||
| 282 | + for (int i = 0; i < packet.length; i = i + 2) { | ||
| 283 | + if (i != 12) { | ||
| 284 | + byte b1 = packet[i]; | ||
| 285 | + String s1 = String.format("%8s", Integer.toBinaryString(b1 & 0xFF)).replace(' ', '0'); | ||
| 286 | + b1 = packet[i + 1]; | ||
| 287 | + String s2 = String.format("%8s", Integer.toBinaryString(b1 & 0xFF)).replace(' ', '0'); | ||
| 288 | + String hexa = s1 + s2; | ||
| 289 | + int num1 = Integer.parseInt(hexa, 2); | ||
| 290 | + hexasum = hexasum + num1; | ||
| 291 | + String convertTo16 = Integer.toHexString(hexasum); | ||
| 292 | + if (convertTo16.length() > 4) { | ||
| 293 | + hexasum = convertToSixteenBits(convertTo16); | ||
| 294 | + } | ||
| 295 | + } | ||
| 296 | + } | ||
| 297 | + StringBuilder sb = new StringBuilder(Integer.toHexString(hexasum)); | ||
| 298 | + if (sb.length() > 4) { | ||
| 299 | + sb = sb.reverse(); | ||
| 300 | + StringBuilder s1 = new StringBuilder(sb.substring(0, 4)); | ||
| 301 | + s1 = s1.reverse(); | ||
| 302 | + StringBuilder s2 = new StringBuilder(sb.substring(4, sb.length())); | ||
| 303 | + s2 = s2.reverse(); | ||
| 304 | + hexasum = Integer.parseInt(s1.toString(), 16) + Integer.parseInt(s2.toString(), 16); | ||
| 305 | + } | ||
| 306 | + int finalChecksum = calculateChecksum(hexasum); | ||
| 307 | + return OspfUtil.convertToTwoBytes(finalChecksum); | ||
| 308 | + } | ||
| 309 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/types/OpaqueLsa10Test.java
0 → 100644
| 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.ospf.protocol.lsa.types; | ||
| 17 | + | ||
| 18 | +import org.jboss.netty.buffer.ChannelBuffer; | ||
| 19 | +import org.jboss.netty.buffer.ChannelBuffers; | ||
| 20 | +import org.junit.After; | ||
| 21 | +import org.junit.Before; | ||
| 22 | +import org.junit.Test; | ||
| 23 | +import org.onlab.packet.Ip4Address; | ||
| 24 | +import org.onosproject.ospf.controller.OspfLsaType; | ||
| 25 | +import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader; | ||
| 26 | +import org.onosproject.ospf.protocol.lsa.TlvHeader; | ||
| 27 | +import org.onosproject.ospf.protocol.lsa.tlvtypes.LinkTlv; | ||
| 28 | +import org.onosproject.ospf.protocol.lsa.tlvtypes.RouterTlv; | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +import java.util.List; | ||
| 32 | + | ||
| 33 | +import static org.hamcrest.MatcherAssert.assertThat; | ||
| 34 | +import static org.hamcrest.Matchers.is; | ||
| 35 | +import static org.hamcrest.Matchers.notNullValue; | ||
| 36 | + | ||
| 37 | +/** | ||
| 38 | + * Unit test class for OpaqueLsa10. | ||
| 39 | + */ | ||
| 40 | +public class OpaqueLsa10Test { | ||
| 41 | + | ||
| 42 | + private final byte[] packet = {0, 1, 0, 4, 1, 1, 1, 1, 0, 2, 0, 84, 0, 0, 0, | ||
| 43 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 44 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | ||
| 45 | + private OpaqueLsa10 opaqueLsa10; | ||
| 46 | + private TopLevelTlv tlv; | ||
| 47 | + private OpaqueLsaHeader opqueHeader; | ||
| 48 | + private ChannelBuffer channelBuffer; | ||
| 49 | + private byte[] result; | ||
| 50 | + private RouterTlv routerTlv; | ||
| 51 | + private RouterTlv routerTlv1; | ||
| 52 | + private LinkTlv linkTlv; | ||
| 53 | + private LinkTlv linkTlv1; | ||
| 54 | + private OspfLsaType ospflsaType; | ||
| 55 | + private int result1; | ||
| 56 | + private List result2; | ||
| 57 | + | ||
| 58 | + @Before | ||
| 59 | + public void setUp() throws Exception { | ||
| 60 | + opaqueLsa10 = new OpaqueLsa10(new OpaqueLsaHeader()); | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + @After | ||
| 64 | + public void tearDown() throws Exception { | ||
| 65 | + opaqueLsa10 = null; | ||
| 66 | + tlv = null; | ||
| 67 | + opqueHeader = null; | ||
| 68 | + channelBuffer = null; | ||
| 69 | + result = null; | ||
| 70 | + routerTlv = null; | ||
| 71 | + routerTlv1 = null; | ||
| 72 | + linkTlv1 = null; | ||
| 73 | + ospflsaType = null; | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + /** | ||
| 77 | + * Tests to string method. | ||
| 78 | + */ | ||
| 79 | + @Test | ||
| 80 | + public void testToString() throws Exception { | ||
| 81 | + assertThat(opaqueLsa10.toString(), is(notNullValue())); | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + /** | ||
| 85 | + * Tests addValue() method. | ||
| 86 | + */ | ||
| 87 | + @Test | ||
| 88 | + public void testAddValue() throws Exception { | ||
| 89 | + tlv = new RouterTlv(new TlvHeader()); | ||
| 90 | + opaqueLsa10.addValue(tlv); | ||
| 91 | + assertThat(opaqueLsa10, is(notNullValue())); | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + /** | ||
| 95 | + * Tests readFrom() method. | ||
| 96 | + */ | ||
| 97 | + @Test(expected = Exception.class) | ||
| 98 | + public void testReadFrom() throws Exception { | ||
| 99 | + opqueHeader = new OpaqueLsaHeader(); | ||
| 100 | + opqueHeader.setLsType(10); | ||
| 101 | + opqueHeader.setLsPacketLen(48); | ||
| 102 | + opqueHeader.setLsCheckSum(10); | ||
| 103 | + opqueHeader.setAge(4); | ||
| 104 | + opqueHeader.setOpaqueId(1); | ||
| 105 | + opqueHeader.setOpaqueType(10); | ||
| 106 | + opqueHeader.setLsSequenceNo(250); | ||
| 107 | + opqueHeader.setAdvertisingRouter(Ip4Address.valueOf("100.226.165.165")); | ||
| 108 | + opqueHeader.setOptions(66); | ||
| 109 | + opaqueLsa10 = new OpaqueLsa10(opqueHeader); | ||
| 110 | + channelBuffer = ChannelBuffers.copiedBuffer(packet); | ||
| 111 | + opaqueLsa10.readFrom(channelBuffer); | ||
| 112 | + result = opaqueLsa10.asBytes(); | ||
| 113 | + assertThat(result, is(notNullValue())); | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + /** | ||
| 117 | + * Tests asBytes() method. | ||
| 118 | + */ | ||
| 119 | + @Test(expected = Exception.class) | ||
| 120 | + public void testAsBytes() throws Exception { | ||
| 121 | + opqueHeader = new OpaqueLsaHeader(); | ||
| 122 | + opqueHeader.setLsType(10); | ||
| 123 | + opqueHeader.setLsPacketLen(48); | ||
| 124 | + opqueHeader.setLsCheckSum(10); | ||
| 125 | + opqueHeader.setAge(4); | ||
| 126 | + opqueHeader.setOpaqueId(1); | ||
| 127 | + opqueHeader.setOpaqueType(10); | ||
| 128 | + opqueHeader.setLsSequenceNo(250); | ||
| 129 | + opqueHeader.setAdvertisingRouter(Ip4Address.valueOf("100.226.165.165")); | ||
| 130 | + opqueHeader.setOptions(66); | ||
| 131 | + opaqueLsa10 = new OpaqueLsa10(opqueHeader); | ||
| 132 | + channelBuffer = ChannelBuffers.copiedBuffer(packet); | ||
| 133 | + opaqueLsa10.readFrom(channelBuffer); | ||
| 134 | + result = opaqueLsa10.getLsaBodyAsByteArray(); | ||
| 135 | + result = opaqueLsa10.asBytes(); | ||
| 136 | + assertThat(result, is(notNullValue())); | ||
| 137 | + } | ||
| 138 | + | ||
| 139 | + /** | ||
| 140 | + * Tests getLsaBodyAsByteArray() method. | ||
| 141 | + */ | ||
| 142 | + @Test(expected = Exception.class) | ||
| 143 | + public void testGetLsaBodyAsByteArray() throws Exception { | ||
| 144 | + opqueHeader = new OpaqueLsaHeader(); | ||
| 145 | + opqueHeader.setLsType(10); | ||
| 146 | + opqueHeader.setLsPacketLen(48); | ||
| 147 | + opqueHeader.setLsCheckSum(10); | ||
| 148 | + opqueHeader.setAge(4); | ||
| 149 | + opqueHeader.setOpaqueId(1); | ||
| 150 | + opqueHeader.setOpaqueType(10); | ||
| 151 | + opqueHeader.setLsSequenceNo(250); | ||
| 152 | + opqueHeader.setAdvertisingRouter(Ip4Address.valueOf("100.226.165.165")); | ||
| 153 | + opqueHeader.setOptions(2); | ||
| 154 | + opaqueLsa10 = new OpaqueLsa10(opqueHeader); | ||
| 155 | + routerTlv = new RouterTlv(new TlvHeader()); | ||
| 156 | + linkTlv = new LinkTlv(new TlvHeader()); | ||
| 157 | + opaqueLsa10.addValue(routerTlv); | ||
| 158 | + opaqueLsa10.addValue(linkTlv); | ||
| 159 | + routerTlv1 = new RouterTlv(new TlvHeader()); | ||
| 160 | + linkTlv1 = new LinkTlv(new TlvHeader()); | ||
| 161 | + opaqueLsa10.addValue(routerTlv1); | ||
| 162 | + opaqueLsa10.addValue(linkTlv1); | ||
| 163 | + channelBuffer = ChannelBuffers.copiedBuffer(packet); | ||
| 164 | + opaqueLsa10.readFrom(channelBuffer); | ||
| 165 | + result = opaqueLsa10.getLsaBodyAsByteArray(); | ||
| 166 | + assertThat(result, is(notNullValue())); | ||
| 167 | + } | ||
| 168 | + | ||
| 169 | + /** | ||
| 170 | + * Tests getLsaBodyAsByteArray() method. | ||
| 171 | + */ | ||
| 172 | + @Test(expected = Exception.class) | ||
| 173 | + public void testGetLsaBodyAsByteArray1() throws Exception { | ||
| 174 | + opqueHeader = new OpaqueLsaHeader(); | ||
| 175 | + opqueHeader.setLsType(10); | ||
| 176 | + opqueHeader.setLsPacketLen(48); | ||
| 177 | + opqueHeader.setLsCheckSum(10); | ||
| 178 | + opqueHeader.setAge(4); | ||
| 179 | + opqueHeader.setOpaqueId(1); | ||
| 180 | + opqueHeader.setOpaqueType(10); | ||
| 181 | + opqueHeader.setLsSequenceNo(250); | ||
| 182 | + opqueHeader.setAdvertisingRouter(Ip4Address.valueOf("100.226.165.165")); | ||
| 183 | + opqueHeader.setOptions(2); | ||
| 184 | + opaqueLsa10 = new OpaqueLsa10(opqueHeader); | ||
| 185 | + routerTlv = new RouterTlv(new TlvHeader()); | ||
| 186 | + opaqueLsa10.addValue(routerTlv); | ||
| 187 | + channelBuffer = ChannelBuffers.copiedBuffer(packet); | ||
| 188 | + result = opaqueLsa10.getLsaBodyAsByteArray(); | ||
| 189 | + assertThat(result, is(notNullValue())); | ||
| 190 | + } | ||
| 191 | + | ||
| 192 | + /** | ||
| 193 | + * Tests getLsaBodyAsByteArray() method. | ||
| 194 | + */ | ||
| 195 | + @Test(expected = Exception.class) | ||
| 196 | + public void testGetLsaBodyAsByteArray2() throws Exception { | ||
| 197 | + opqueHeader = new OpaqueLsaHeader(); | ||
| 198 | + opqueHeader.setLsType(10); | ||
| 199 | + opqueHeader.setLsPacketLen(48); | ||
| 200 | + opqueHeader.setLsCheckSum(10); | ||
| 201 | + opqueHeader.setAge(4); | ||
| 202 | + opqueHeader.setOpaqueId(1); | ||
| 203 | + opqueHeader.setOpaqueType(10); | ||
| 204 | + opqueHeader.setLsSequenceNo(250); | ||
| 205 | + opqueHeader.setAdvertisingRouter(Ip4Address.valueOf("100.226.165.165")); | ||
| 206 | + opqueHeader.setOptions(2); | ||
| 207 | + opaqueLsa10 = new OpaqueLsa10(opqueHeader); | ||
| 208 | + linkTlv = new LinkTlv(new TlvHeader()); | ||
| 209 | + opaqueLsa10.addValue(linkTlv); | ||
| 210 | + channelBuffer = ChannelBuffers.copiedBuffer(packet); | ||
| 211 | + opaqueLsa10.readFrom(channelBuffer); | ||
| 212 | + result = opaqueLsa10.getLsaBodyAsByteArray(); | ||
| 213 | + assertThat(result, is(notNullValue())); | ||
| 214 | + } | ||
| 215 | + | ||
| 216 | + /** | ||
| 217 | + * Tests getOspfLsaType() getter method. | ||
| 218 | + */ | ||
| 219 | + @Test | ||
| 220 | + public void testGetOspfLsaType() throws Exception { | ||
| 221 | + opaqueLsa10.setLsType(10); | ||
| 222 | + ospflsaType = opaqueLsa10.getOspfLsaType(); | ||
| 223 | + assertThat(ospflsaType, is(notNullValue())); | ||
| 224 | + assertThat(ospflsaType, is(OspfLsaType.AREA_LOCAL_OPAQUE_LSA)); | ||
| 225 | + } | ||
| 226 | + | ||
| 227 | + /** | ||
| 228 | + * Tests hashCode() method. | ||
| 229 | + */ | ||
| 230 | + @Test | ||
| 231 | + public void testHashcode() throws Exception { | ||
| 232 | + | ||
| 233 | + result1 = opaqueLsa10.hashCode(); | ||
| 234 | + assertThat(result1, is(notNullValue())); | ||
| 235 | + | ||
| 236 | + } | ||
| 237 | + | ||
| 238 | + /** | ||
| 239 | + * Tests topLevelValues() method. | ||
| 240 | + */ | ||
| 241 | + @Test | ||
| 242 | + public void testTopLevelValues() throws Exception { | ||
| 243 | + | ||
| 244 | + result2 = opaqueLsa10.topLevelValues(); | ||
| 245 | + assertThat(result2, is(notNullValue())); | ||
| 246 | + | ||
| 247 | + } | ||
| 248 | + | ||
| 249 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/types/RouterLsaTest.java
0 → 100644
| 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.ospf.protocol.lsa.types; | ||
| 17 | + | ||
| 18 | +import org.jboss.netty.buffer.ChannelBuffer; | ||
| 19 | +import org.jboss.netty.buffer.ChannelBuffers; | ||
| 20 | +import org.junit.After; | ||
| 21 | +import org.junit.Before; | ||
| 22 | +import org.junit.Test; | ||
| 23 | +import org.onlab.packet.Ip4Address; | ||
| 24 | +import org.onosproject.ospf.controller.OspfLsaType; | ||
| 25 | +import org.onosproject.ospf.protocol.lsa.LsaHeader; | ||
| 26 | +import org.onosproject.ospf.protocol.lsa.subtypes.OspfLsaLink; | ||
| 27 | + | ||
| 28 | +import static org.hamcrest.MatcherAssert.assertThat; | ||
| 29 | +import static org.hamcrest.Matchers.*; | ||
| 30 | + | ||
| 31 | +/** | ||
| 32 | + * Unit test class for RouterLsa. | ||
| 33 | + */ | ||
| 34 | +public class RouterLsaTest { | ||
| 35 | + | ||
| 36 | + private RouterLsa routerLsa; | ||
| 37 | + private int result1; | ||
| 38 | + private OspfLsaLink ospflsaLink; | ||
| 39 | + private byte[] inputArray; | ||
| 40 | + private LsaHeader lsaHeader; | ||
| 41 | + private ChannelBuffer channelBuffer; | ||
| 42 | + private byte[] result2; | ||
| 43 | + private OspfLsaType result3; | ||
| 44 | + | ||
| 45 | + @Before | ||
| 46 | + public void setUp() throws Exception { | ||
| 47 | + routerLsa = new RouterLsa(); | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + @After | ||
| 51 | + public void tearDown() throws Exception { | ||
| 52 | + routerLsa = null; | ||
| 53 | + ospflsaLink = null; | ||
| 54 | + inputArray = null; | ||
| 55 | + lsaHeader = null; | ||
| 56 | + channelBuffer = null; | ||
| 57 | + result2 = null; | ||
| 58 | + result3 = null; | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + | ||
| 62 | + /** | ||
| 63 | + * Tests virtualEndPoint() setter method. | ||
| 64 | + */ | ||
| 65 | + @Test | ||
| 66 | + public void testSetVirtualEndPoint() throws Exception { | ||
| 67 | + routerLsa.setVirtualEndPoint(true); | ||
| 68 | + assertThat(routerLsa, is(notNullValue())); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + | ||
| 72 | + /** | ||
| 73 | + * Tests isAsBoundaryRouter() setter method. | ||
| 74 | + */ | ||
| 75 | + @Test | ||
| 76 | + public void testSetAsBoundaryRouter() throws Exception { | ||
| 77 | + routerLsa.setAsBoundaryRouter(true); | ||
| 78 | + assertThat(routerLsa, is(notNullValue())); | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + /** | ||
| 82 | + * Tests areaBorderRouter() setter method. | ||
| 83 | + */ | ||
| 84 | + @Test | ||
| 85 | + public void testSetAreaBorderRouter() throws Exception { | ||
| 86 | + routerLsa.setAreaBorderRouter(true); | ||
| 87 | + assertThat(routerLsa, is(notNullValue())); | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + /** | ||
| 91 | + * Tests noLink() getter method. | ||
| 92 | + */ | ||
| 93 | + @Test | ||
| 94 | + public void testGetNoLink() throws Exception { | ||
| 95 | + routerLsa.setNoLink(10); | ||
| 96 | + result1 = routerLsa.noLink(); | ||
| 97 | + assertThat(result1, is(10)); | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + /** | ||
| 101 | + * Tests noLink() setter method. | ||
| 102 | + */ | ||
| 103 | + @Test | ||
| 104 | + public void testSetNoLink() throws Exception { | ||
| 105 | + routerLsa.setNoLink(10); | ||
| 106 | + result1 = routerLsa.noLink(); | ||
| 107 | + assertThat(result1, is(10)); | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + /** | ||
| 111 | + * Tests addRouterLink() method. | ||
| 112 | + */ | ||
| 113 | + @Test | ||
| 114 | + public void testAddRouterLink() throws Exception { | ||
| 115 | + routerLsa.setNoLink(0); | ||
| 116 | + ospflsaLink = createOspfLsaLink(); | ||
| 117 | + routerLsa.addRouterLink(ospflsaLink); | ||
| 118 | + routerLsa.incrementLinkNo(); | ||
| 119 | + result1 = routerLsa.noLink(); | ||
| 120 | + assertThat(result1, is(1)); | ||
| 121 | + | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | + | ||
| 125 | + /** | ||
| 126 | + * Tests readFrom() method. | ||
| 127 | + */ | ||
| 128 | + @Test | ||
| 129 | + public void testReadFrom() throws Exception { | ||
| 130 | + ospflsaLink = createOspfLsaLink(); | ||
| 131 | + routerLsa.addRouterLink(ospflsaLink); | ||
| 132 | + inputArray = createByteForRouterLsa(); | ||
| 133 | + lsaHeader = createLsaHeader(); | ||
| 134 | + routerLsa = new RouterLsa(lsaHeader); | ||
| 135 | + channelBuffer = ChannelBuffers.copiedBuffer(inputArray); | ||
| 136 | + routerLsa.readFrom(channelBuffer); | ||
| 137 | + assertThat(routerLsa, is(notNullValue())); | ||
| 138 | + } | ||
| 139 | + | ||
| 140 | + /** | ||
| 141 | + * Tests readFrom() method. | ||
| 142 | + */ | ||
| 143 | + @Test(expected = Exception.class) | ||
| 144 | + public void testReadFrom1() throws Exception { | ||
| 145 | + byte[] temp = {0, 0, 0}; | ||
| 146 | + ospflsaLink = createOspfLsaLink(); | ||
| 147 | + routerLsa.addRouterLink(ospflsaLink); | ||
| 148 | + inputArray = temp; | ||
| 149 | + lsaHeader = createLsaHeader(); | ||
| 150 | + routerLsa = new RouterLsa(lsaHeader); | ||
| 151 | + channelBuffer = ChannelBuffers.copiedBuffer(inputArray); | ||
| 152 | + routerLsa.readFrom(channelBuffer); | ||
| 153 | + assertThat(routerLsa, is(notNullValue())); | ||
| 154 | + } | ||
| 155 | + | ||
| 156 | + /** | ||
| 157 | + * Tests asBytes() method. | ||
| 158 | + */ | ||
| 159 | + @Test | ||
| 160 | + public void testAsBytes() throws Exception { | ||
| 161 | + result2 = routerLsa.asBytes(); | ||
| 162 | + assertThat(result2, is(notNullValue())); | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | + /** | ||
| 166 | + * Tests getLsaBodyAsByteArray() method. | ||
| 167 | + */ | ||
| 168 | + @Test | ||
| 169 | + public void testGetLsaBodyAsByteArray() throws Exception { | ||
| 170 | + routerLsa.setAreaBorderRouter(true); | ||
| 171 | + routerLsa.setVirtualEndPoint(true); | ||
| 172 | + routerLsa.setAreaBorderRouter(true); | ||
| 173 | + ospflsaLink = createOspfLsaLink(); | ||
| 174 | + routerLsa.addRouterLink(ospflsaLink); | ||
| 175 | + result2 = routerLsa.getLsaBodyAsByteArray(); | ||
| 176 | + assertThat(result2, is(notNullValue())); | ||
| 177 | + } | ||
| 178 | + | ||
| 179 | + /** | ||
| 180 | + * Tests getOspfLsaType() getter method. | ||
| 181 | + */ | ||
| 182 | + @Test | ||
| 183 | + public void testGetOspfLsaType() throws Exception { | ||
| 184 | + routerLsa.setLsType(1); | ||
| 185 | + result3 = routerLsa.getOspfLsaType(); | ||
| 186 | + assertThat(result3, is(OspfLsaType.ROUTER)); | ||
| 187 | + } | ||
| 188 | + | ||
| 189 | + /** | ||
| 190 | + * Tests incrementLinkNo() method. | ||
| 191 | + */ | ||
| 192 | + @Test | ||
| 193 | + public void testIncrementLinkNo() throws Exception { | ||
| 194 | + routerLsa.setNoLink(1); | ||
| 195 | + routerLsa.incrementLinkNo(); | ||
| 196 | + assertThat(routerLsa.noLink(), is(2)); | ||
| 197 | + } | ||
| 198 | + | ||
| 199 | + /** | ||
| 200 | + * Tests lsaHeader() method. | ||
| 201 | + */ | ||
| 202 | + @Test | ||
| 203 | + public void testGetLsaHeader() throws Exception { | ||
| 204 | + lsaHeader = (LsaHeader) routerLsa.lsaHeader(); | ||
| 205 | + assertThat(lsaHeader, instanceOf(RouterLsa.class)); | ||
| 206 | + } | ||
| 207 | + | ||
| 208 | + /** | ||
| 209 | + * Tests to string method. | ||
| 210 | + */ | ||
| 211 | + @Test | ||
| 212 | + public void testToString() throws Exception { | ||
| 213 | + assertThat(routerLsa.toString(), is(notNullValue())); | ||
| 214 | + | ||
| 215 | + } | ||
| 216 | + | ||
| 217 | + /** | ||
| 218 | + * Utility method used by junit methods. | ||
| 219 | + */ | ||
| 220 | + private OspfLsaLink createOspfLsaLink() { | ||
| 221 | + ospflsaLink = new OspfLsaLink(); | ||
| 222 | + ospflsaLink.setLinkId("10.226.165.164"); | ||
| 223 | + ospflsaLink.setMetric(10); | ||
| 224 | + ospflsaLink.setTos(50); | ||
| 225 | + ospflsaLink.setLinkType(2); | ||
| 226 | + ospflsaLink.setLinkData("10.226.165.170"); | ||
| 227 | + return ospflsaLink; | ||
| 228 | + } | ||
| 229 | + | ||
| 230 | + /** | ||
| 231 | + * Utility method used by junit methods. | ||
| 232 | + */ | ||
| 233 | + private byte[] createByteForRouterLsa() { | ||
| 234 | + byte[] packet = {2, 1, 1, 52, -64, -88, 56, 1, -64, -88, 56, 1, 0, 100, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, -64, | ||
| 235 | + -88, 56, 1, 0, 10, 1, 1, 0, 0, 0, 40, -64, -88, 56, 1, -64, -88, 56, 1, -64, -88, 56, 1, -64, -88, 56, | ||
| 236 | + 1}; | ||
| 237 | + return packet; | ||
| 238 | + } | ||
| 239 | + | ||
| 240 | + /** | ||
| 241 | + * Utility method used by junit methods. | ||
| 242 | + */ | ||
| 243 | + private LsaHeader createLsaHeader() { | ||
| 244 | + lsaHeader = new LsaHeader(); | ||
| 245 | + lsaHeader.setLsType(1); | ||
| 246 | + lsaHeader.setLsPacketLen(48); | ||
| 247 | + lsaHeader.setLsCheckSum(10); | ||
| 248 | + lsaHeader.setAge(4); | ||
| 249 | + lsaHeader.setLinkStateId("10.226.165.164"); | ||
| 250 | + lsaHeader.setLsSequenceNo(250); | ||
| 251 | + lsaHeader.setAdvertisingRouter(Ip4Address.valueOf("100.226.165.165")); | ||
| 252 | + lsaHeader.setOptions(2); | ||
| 253 | + return lsaHeader; | ||
| 254 | + } | ||
| 255 | + | ||
| 256 | + /** | ||
| 257 | + * Tests hashcode() method. | ||
| 258 | + */ | ||
| 259 | + @Test | ||
| 260 | + public void testHashcode() throws Exception { | ||
| 261 | + | ||
| 262 | + result1 = routerLsa.hashCode(); | ||
| 263 | + assertThat(result1, is(notNullValue())); | ||
| 264 | + | ||
| 265 | + } | ||
| 266 | +} |
| 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.ospf.protocol.ospfpacket; | ||
| 17 | + | ||
| 18 | +import org.jboss.netty.buffer.ChannelBuffer; | ||
| 19 | +import org.jboss.netty.buffer.ChannelBuffers; | ||
| 20 | +import org.junit.After; | ||
| 21 | +import org.junit.Before; | ||
| 22 | +import org.junit.Test; | ||
| 23 | + | ||
| 24 | +import static org.hamcrest.CoreMatchers.is; | ||
| 25 | +import static org.hamcrest.CoreMatchers.notNullValue; | ||
| 26 | +import static org.hamcrest.MatcherAssert.assertThat; | ||
| 27 | + | ||
| 28 | +/** | ||
| 29 | + * Unit test class for OspfMessageReader. | ||
| 30 | + */ | ||
| 31 | + | ||
| 32 | +public class OspfMessageReaderTest { | ||
| 33 | + | ||
| 34 | + private final byte[] packet1 = {1, 1, 1, 1, 2, 1, 0, 44, -64, -88, -86, 8, | ||
| 35 | + 0, 0, 0, 1, 39, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, | ||
| 36 | + 10, 2, 1, 0, 0, 0, 40, -64, -88, -86, 8, 0, 0, 0, 0}; | ||
| 37 | + private final byte[] packet2 = {1, 1, 1, 1, 2, 2, 0, 52, -64, -88, -86, 8, 0, | ||
| 38 | + 0, 0, 1, -96, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, -36, 2, 7, 65, 119, | ||
| 39 | + -87, 126, 0, 23, 2, 1, 10, 10, 10, 10, 10, 10, 10, 10, -128, 0, 0, 6, | ||
| 40 | + -69, 26, 0, 36}; | ||
| 41 | + private final byte[] packet3 = {1, 1, 1, 1, 2, 3, 0, 36, -64, -88, -86, 3, 0, | ||
| 42 | + 0, 0, 1, -67, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -64, -88, | ||
| 43 | + -86, 8, -64, -88, -86, 8}; | ||
| 44 | + private final byte[] packet4 = {1, 1, 1, 1, 2, 4, 1, 36, -64, -88, -86, 3, 0, | ||
| 45 | + 0, 0, 1, 54, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, | ||
| 46 | + 2, 2, 1, -64, -88, -86, 3, -64, -88, -86, 3, -128, 0 | ||
| 47 | + , 0, 1, 58, -100, 0, 48, 2, 0, 0, 2, -64, -88, -86 | ||
| 48 | + , 0, -1, -1, -1, 0, 3, 0, 0, 10, -64, -88, -86, 0, | ||
| 49 | + -1, -1, -1, 0, 3, 0, 0, 10, 0, 3, 2, 5, 80, -44, | ||
| 50 | + 16, 0, -64, -88, -86, 2, -128, 0, 0, 1, 42, 73, 0, | ||
| 51 | + 36, -1, -1, -1, -1, -128, 0, 0, 20, 0, 0, 0, 0, 0, | ||
| 52 | + 0, 0, 0, 0, 3, 2, 5, -108, 121, -85, 0, -64, -88, | ||
| 53 | + -86, 2, -128, 0, 0, 1, 52, -91, 0, 36, -1, -1, -1, | ||
| 54 | + 0, -128, 0, 0, 20, -64, -88, -86, 1, 0, 0, 0, 0, 0, | ||
| 55 | + 3, 2, 5, -64, -126, 120, 0, -64, -88, -86, 2, -128, 0, | ||
| 56 | + 0, 1, -45, 25, 0, 36, -1, -1, -1, 0, -128, 0, 0, 20, | ||
| 57 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 5, -64, -88, 0, 0, | ||
| 58 | + -64, -88, -86, 2, -128, 0, 0, 1, 55, 8, 0, 36, -1, -1 | ||
| 59 | + , -1, 0, -128, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 60 | + 3, 2, 5, -64, -88, 1, 0, -64, -88, -86, 2, -128, 0, 0, | ||
| 61 | + 1, 44, 18, 0, 36, -1, -1, -1, 0, -128, 0, 0, 20, 0, 0, | ||
| 62 | + 0, 0, 0, 0, 0, 0, 0, 3, 2, 5, -64, -88, -84, 0, -64, | ||
| 63 | + -88, -86, 2, -128, 0, 0, 1, 51, 65, 0, 36, -1, -1, -1, 0, | ||
| 64 | + -128, 0, 0, 20, -64, -88, -86, 10, 0, 0, 0, 0}; | ||
| 65 | + private final byte[] packet5 = {1, 1, 1, 1, 2, 5, 0, 44, -64, -88, -86, 8, 0, 0, | ||
| 66 | + 0, 1, -30, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 16, 2, 1, -64, -88, -86, | ||
| 67 | + 2, -64, -88, -86, 2, -128, 0, 0, 1, 74, -114, 0, 48}; | ||
| 68 | + private OspfMessageReader ospfMessageReader; | ||
| 69 | + private ChannelBuffer channelBuffer; | ||
| 70 | + | ||
| 71 | + @Before | ||
| 72 | + public void setUp() throws Exception { | ||
| 73 | + ospfMessageReader = new OspfMessageReader(); | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + @After | ||
| 77 | + public void tearDown() throws Exception { | ||
| 78 | + ospfMessageReader = null; | ||
| 79 | + channelBuffer = null; | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + /** | ||
| 83 | + * Tests readFromBuffer() method. | ||
| 84 | + */ | ||
| 85 | + @Test | ||
| 86 | + public void testReadFromBuffer() throws Exception { | ||
| 87 | + channelBuffer = ChannelBuffers.copiedBuffer(packet1); | ||
| 88 | + ospfMessageReader.readFromBuffer(channelBuffer); | ||
| 89 | + | ||
| 90 | + channelBuffer = ChannelBuffers.copiedBuffer(packet2); | ||
| 91 | + ospfMessageReader.readFromBuffer(channelBuffer); | ||
| 92 | + | ||
| 93 | + channelBuffer = ChannelBuffers.copiedBuffer(packet3); | ||
| 94 | + ospfMessageReader.readFromBuffer(channelBuffer); | ||
| 95 | + | ||
| 96 | + channelBuffer = ChannelBuffers.copiedBuffer(packet4); | ||
| 97 | + ospfMessageReader.readFromBuffer(channelBuffer); | ||
| 98 | + | ||
| 99 | + channelBuffer = ChannelBuffers.copiedBuffer(packet5); | ||
| 100 | + ospfMessageReader.readFromBuffer(channelBuffer); | ||
| 101 | + assertThat(ospfMessageReader, is(notNullValue())); | ||
| 102 | + | ||
| 103 | + } | ||
| 104 | +} |
| 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.ospf.protocol.ospfpacket; | ||
| 17 | + | ||
| 18 | +import org.junit.After; | ||
| 19 | +import org.junit.Before; | ||
| 20 | +import org.junit.Test; | ||
| 21 | +import org.onlab.packet.Ip4Address; | ||
| 22 | +import org.onosproject.ospf.protocol.ospfpacket.types.DdPacket; | ||
| 23 | +import org.onosproject.ospf.protocol.ospfpacket.types.HelloPacket; | ||
| 24 | +import org.onosproject.ospf.protocol.ospfpacket.types.LsAcknowledge; | ||
| 25 | +import org.onosproject.ospf.protocol.ospfpacket.types.LsRequest; | ||
| 26 | +import org.onosproject.ospf.protocol.ospfpacket.types.LsUpdate; | ||
| 27 | + | ||
| 28 | +import static org.hamcrest.CoreMatchers.is; | ||
| 29 | +import static org.hamcrest.CoreMatchers.notNullValue; | ||
| 30 | +import static org.junit.Assert.assertThat; | ||
| 31 | + | ||
| 32 | +/** | ||
| 33 | + * Unit test class for OspfMessageWriter. | ||
| 34 | + */ | ||
| 35 | +public class OspfMessageWriterTest { | ||
| 36 | + | ||
| 37 | + private OspfMessageWriter ospfMessageWriter; | ||
| 38 | + private HelloPacket helloPacket; | ||
| 39 | + private DdPacket ddPacket; | ||
| 40 | + private LsAcknowledge lsAck; | ||
| 41 | + private LsRequest lsReq; | ||
| 42 | + private LsUpdate lsUpdate; | ||
| 43 | + | ||
| 44 | + @Before | ||
| 45 | + public void setUp() throws Exception { | ||
| 46 | + ospfMessageWriter = new OspfMessageWriter(); | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + @After | ||
| 50 | + public void tearDown() throws Exception { | ||
| 51 | + ospfMessageWriter = null; | ||
| 52 | + helloPacket = null; | ||
| 53 | + ddPacket = null; | ||
| 54 | + lsAck = null; | ||
| 55 | + lsReq = null; | ||
| 56 | + lsUpdate = null; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + /** | ||
| 60 | + * Tests writeToBuffer() method. | ||
| 61 | + */ | ||
| 62 | + @Test | ||
| 63 | + public void testWriteToBuffer() throws Exception { | ||
| 64 | + helloPacket = new HelloPacket(); | ||
| 65 | + helloPacket.setAuthType(1); | ||
| 66 | + helloPacket.setOspftype(1); | ||
| 67 | + helloPacket.setRouterId(Ip4Address.valueOf("10.226.165.164")); | ||
| 68 | + helloPacket.setAreaId(Ip4Address.valueOf("10.226.165.100")); | ||
| 69 | + helloPacket.setChecksum(201); | ||
| 70 | + helloPacket.setAuthentication(2); | ||
| 71 | + helloPacket.setOspfPacLength(48); | ||
| 72 | + helloPacket.setOspfVer(2); | ||
| 73 | + helloPacket.setNetworkMask(Ip4Address.valueOf("255.255.255.255")); | ||
| 74 | + helloPacket.setOptions(2); //not setting now | ||
| 75 | + helloPacket.setHelloInterval(10); | ||
| 76 | + helloPacket.setRouterPriority(1); | ||
| 77 | + helloPacket.setRouterDeadInterval(40); | ||
| 78 | + helloPacket.setDr(Ip4Address.valueOf("1.1.1.1")); | ||
| 79 | + helloPacket.setBdr(Ip4Address.valueOf("2.2.2.2")); | ||
| 80 | + helloPacket.addNeighbor(Ip4Address.valueOf("8.8.8.8")); | ||
| 81 | + helloPacket.setDestinationIp(Ip4Address.valueOf("5.5.5.5")); | ||
| 82 | + ospfMessageWriter.writeToBuffer(helloPacket, 7, 1); | ||
| 83 | + assertThat(ospfMessageWriter, is(notNullValue())); | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + @Test(expected = Exception.class) | ||
| 87 | + public void testWriteToBuffer1() throws Exception { | ||
| 88 | + | ||
| 89 | + ddPacket = new DdPacket(); | ||
| 90 | + ddPacket.setAuthType(1); | ||
| 91 | + ddPacket.setOspftype(2); | ||
| 92 | + ddPacket.setRouterId(Ip4Address.valueOf("10.226.165.164")); | ||
| 93 | + ddPacket.setAreaId(Ip4Address.valueOf("10.226.165.100")); | ||
| 94 | + ddPacket.setChecksum(201); | ||
| 95 | + ddPacket.setAuthentication(2); | ||
| 96 | + ddPacket.setOspfPacLength(48); | ||
| 97 | + ddPacket.setOspfVer(2); | ||
| 98 | + ospfMessageWriter.writeToBuffer(ddPacket, 1, 1); | ||
| 99 | + assertThat(ospfMessageWriter, is(notNullValue())); | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + @Test(expected = Exception.class) | ||
| 103 | + public void testWriteToBuffer2() throws Exception { | ||
| 104 | + | ||
| 105 | + lsAck = new LsAcknowledge(); | ||
| 106 | + lsAck.setAuthType(1); | ||
| 107 | + lsAck.setOspftype(5); | ||
| 108 | + lsAck.setRouterId(Ip4Address.valueOf("10.226.165.164")); | ||
| 109 | + lsAck.setAreaId(Ip4Address.valueOf("10.226.165.100")); | ||
| 110 | + lsAck.setChecksum(201); | ||
| 111 | + lsAck.setAuthentication(2); | ||
| 112 | + lsAck.setOspfPacLength(48); | ||
| 113 | + lsAck.setOspfVer(2); | ||
| 114 | + ospfMessageWriter.writeToBuffer(lsAck, 1, 1); | ||
| 115 | + assertThat(ospfMessageWriter, is(notNullValue())); | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + @Test(expected = Exception.class) | ||
| 119 | + public void testWriteToBuffer3() throws Exception { | ||
| 120 | + lsReq = new LsRequest(); | ||
| 121 | + lsReq.setAuthType(1); | ||
| 122 | + lsReq.setOspftype(3); | ||
| 123 | + lsReq.setRouterId(Ip4Address.valueOf("10.226.165.164")); | ||
| 124 | + lsReq.setAreaId(Ip4Address.valueOf("10.226.165.100")); | ||
| 125 | + lsReq.setChecksum(201); | ||
| 126 | + lsReq.setAuthentication(2); | ||
| 127 | + lsReq.setOspfPacLength(48); | ||
| 128 | + lsReq.setOspfVer(2); | ||
| 129 | + ospfMessageWriter.writeToBuffer(lsReq, 1, 1); | ||
| 130 | + assertThat(ospfMessageWriter, is(notNullValue())); | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + @Test(expected = Exception.class) | ||
| 134 | + public void testWriteToBuffer4() throws Exception { | ||
| 135 | + lsUpdate = new LsUpdate(); | ||
| 136 | + lsUpdate.setAuthType(1); | ||
| 137 | + lsUpdate.setOspftype(3); | ||
| 138 | + lsUpdate.setRouterId(Ip4Address.valueOf("10.226.165.164")); | ||
| 139 | + lsUpdate.setAreaId(Ip4Address.valueOf("10.226.165.100")); | ||
| 140 | + lsUpdate.setChecksum(201); | ||
| 141 | + lsUpdate.setAuthentication(2); | ||
| 142 | + lsUpdate.setOspfPacLength(48); | ||
| 143 | + lsUpdate.setOspfVer(2); | ||
| 144 | + ospfMessageWriter.writeToBuffer(lsUpdate, 1, 1); | ||
| 145 | + assertThat(ospfMessageWriter, is(notNullValue())); | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | + /** | ||
| 149 | + * Tests writeToBuffer() method. | ||
| 150 | + */ | ||
| 151 | + @Test(expected = Exception.class) | ||
| 152 | + public void testWriteToBuffer5() throws Exception { | ||
| 153 | + lsAck = new LsAcknowledge(); | ||
| 154 | + lsAck.setAuthType(1); | ||
| 155 | + lsAck.setOspftype(5); | ||
| 156 | + lsAck.setRouterId(Ip4Address.valueOf("10.226.165.164")); | ||
| 157 | + lsAck.setAreaId(Ip4Address.valueOf("10.226.165.100")); | ||
| 158 | + lsAck.setChecksum(201); | ||
| 159 | + lsAck.setAuthentication(2); | ||
| 160 | + lsAck.setOspfPacLength(48); | ||
| 161 | + lsAck.setOspfVer(2); | ||
| 162 | + ospfMessageWriter.writeToBuffer(lsAck, 1, 1); | ||
| 163 | + } | ||
| 164 | +} | ||
| ... | \ 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.ospf.protocol.ospfpacket.types; | ||
| 17 | + | ||
| 18 | +import org.jboss.netty.buffer.ChannelBuffer; | ||
| 19 | +import org.jboss.netty.buffer.ChannelBuffers; | ||
| 20 | +import org.junit.After; | ||
| 21 | +import org.junit.Before; | ||
| 22 | +import org.junit.Test; | ||
| 23 | +import org.onlab.packet.Ip4Address; | ||
| 24 | +import org.onosproject.ospf.controller.OspfLsa; | ||
| 25 | +import org.onosproject.ospf.protocol.lsa.LsaHeader; | ||
| 26 | +import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader; | ||
| 27 | +import org.onosproject.ospf.protocol.lsa.types.AsbrSummaryLsa; | ||
| 28 | +import org.onosproject.ospf.protocol.lsa.types.ExternalLsa; | ||
| 29 | +import org.onosproject.ospf.protocol.lsa.types.NetworkLsa; | ||
| 30 | +import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa10; | ||
| 31 | +import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa11; | ||
| 32 | +import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa9; | ||
| 33 | +import org.onosproject.ospf.protocol.lsa.types.RouterLsa; | ||
| 34 | +import org.onosproject.ospf.protocol.lsa.types.SummaryLsa; | ||
| 35 | +import org.onosproject.ospf.protocol.ospfpacket.OspfPacketHeader; | ||
| 36 | +import org.onosproject.ospf.protocol.util.OspfPacketType; | ||
| 37 | + | ||
| 38 | +import java.util.List; | ||
| 39 | +import java.util.Vector; | ||
| 40 | + | ||
| 41 | +import static org.hamcrest.CoreMatchers.*; | ||
| 42 | +import static org.hamcrest.MatcherAssert.assertThat; | ||
| 43 | + | ||
| 44 | +/** | ||
| 45 | + * Unit test class for LsUpdate. | ||
| 46 | + */ | ||
| 47 | +public class LsUpdateTest { | ||
| 48 | + | ||
| 49 | + private final byte[] packet1 = {0, 0, 0, 2, 0, 10, 2, 1, 7, 7, 7, 7, 7, 7, 7, 7, | ||
| 50 | + -128, 0, 0, 2, 46, -126, 0, 48, 0, 0, 0, 2, 1, 1, 1, 1, 10, 10, 10, 7, 1, | ||
| 51 | + 0, 0, 10, 10, 10, 10, 0, -1, -1, -1, 0, 3, 0, 0, 10, 0, 10, 66, 10, 1, 0, | ||
| 52 | + 0, 1, 7, 7, 7, 7, -128, 0, 0, 1, -64, 79, 0, 116, 0, 1, 0, 4, 0, 0, 0, 0, | ||
| 53 | + 0, 2, 0, 84, 0, 1, 0, 1, 1, 0, 0, 0, 0, 2, 0, 4, 10, 10, 10, 0, 0, 5, 0, | ||
| 54 | + 4, 0, 0, 0, 0, 0, 6, 0, 4, 73, -104, -106, -128, 0, 7, 0, 4, 73, -104, -106, | ||
| 55 | + -128, 0, 8, 0, 32, 73, -104, -106, -128, 73, -104, -106, -128, 73, -104, -106, | ||
| 56 | + -128, 73, -104, -106, -128, 73, -104, -106, -128, 73, -104, -106, -128, 73, | ||
| 57 | + -104, -106, -128, 73, -104, -106, -128, 0, 9, 0, 4, 0, 0, 0, 0}; | ||
| 58 | + private final byte[] packet3 = {0, 0, 0, 1, 0, 100, 2, 10, 1, 0, 0, 1, 9, 9, 9, 9, | ||
| 59 | + -128, 0, 0, 1, -7, 62, 0, -124, 0, 2, 0, 108, 0, 1, 0, 1, 2, 0, 0, 0, 0, 2, | ||
| 60 | + 0, 4, -64, -88, 7, -91, 0, 3, 0, 4, -64, -88, 7, -91, 0, 4, 0, 4, 0, 0, 0, | ||
| 61 | + 0, 0, 5, 0, 4, 0, 0, 0, 1, 0, 6, 0, 4, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, | ||
| 62 | + 0, 8, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 63 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 0, 0, 0, 0, -128, 2, 0, 4, 0, | ||
| 64 | + 0, 0, 1}; | ||
| 65 | + private final byte[] packet2 = {0, 0, | ||
| 66 | + 0, 1, 0, 1, 2, 2, -64, -88, | ||
| 67 | + -86, 8, -64, -88, -86, 8, -128, 0, 0, 1, 55, -73, 0, 32, -1, -1, -1, 0, -64, | ||
| 68 | + -88, -86, 3, -64, -88, -86, 8}; | ||
| 69 | + private final byte[] packet4 = {0, 0, 0, 1, 0, 100, 2, 9, 1, 0, 0, 1, 9, 9, 9, 9, -128, | ||
| 70 | + 0, 0, 1, -7, 62, 0, -124, 0, 2, 0, 108, 0, 1, 0, 1, 2, 0, 0, 0, 0, 2, 0, 4, -64, | ||
| 71 | + -88, 7, -91, 0, 3, 0, 4, -64, -88, 7, -91, 0, 4, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, | ||
| 72 | + 0, 0, 1, 0, 6, 0, 4, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 8, 0, 32, 0, 0, 0, 0, | ||
| 73 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 74 | + 0, 0, 9, 0, 4, 0, 0, 0, 0, -128, 2, 0, 4, 0, 0, 0, 1}; | ||
| 75 | + | ||
| 76 | + private final byte[] packet5 = {0, 0, 0, 1, 0, 100, 2, 11, 1, 0, 0, 1, 9, 9, 9, 9, -128, 0, | ||
| 77 | + 0, 1, -7, 62, 0, -124, 0, 2, 0, 108, 0, 1, 0, 1, 2, 0, 0, 0, 0, 2, 0, 4, -64, -88, | ||
| 78 | + 7, -91, 0, 3, 0, 4, -64, -88, 7, -91, 0, 4, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, | ||
| 79 | + 1, 0, 6, 0, 4, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 8, 0, 32, 0, 0, 0, 0, 0, 0, | ||
| 80 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 81 | + 9, 0, 4, 0, 0, 0, 0, -128, 2, 0, 4, 0, 0, 0, 1}; | ||
| 82 | + private final byte[] packet6 = {0, 0, 0, 1, 0, 100, 2, 3, 1, 0, 0, 1, 9, 9, 9, 9, -128, | ||
| 83 | + 0, 0, 1, -7, 62, 0, -124, 0, 2, 0, 108, 0, 1, 0, 1, 2, 0, 0, 0, 0, 2, 0, 4, -64, | ||
| 84 | + -88, 7, -91, 0, 3, 0, 4, -64, -88, 7, -91, 0, 4, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, | ||
| 85 | + 0, 0, 0, 1, 0, 6, 0, 4, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 8, 0, 32, 0, 0, | ||
| 86 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 87 | + 0, 0, 0, 0, 0, 9, 0, 4, 0, 0, 0, 0, -128, 2, 0, 4, 0, 0, 0, 1}; | ||
| 88 | + private final byte[] packet7 = {0, 0, 0, 1, 0, 100, 2, 4, 1, 0, 0, 1, 9, 9, 9, 9, -128, | ||
| 89 | + 0, 0, 1, -7, 62, 0, -124, 0, 2, 0, 108, 0, 1, 0, 1, 2, 0, 0, 0, 0, 2, 0, 4, -64, | ||
| 90 | + -88, 7, -91, 0, 3, 0, 4, -64, -88, 7, -91, 0, 4, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, | ||
| 91 | + 0, 0, 1, 0, 6, 0, 4, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 8, 0, 32, 0, 0, 0, 0, | ||
| 92 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 93 | + 0, 9, 0, 4, 0, 0, 0, 0, -128, 2, 0, 4, 0, 0, 0, 1}; | ||
| 94 | + | ||
| 95 | + private final byte[] packet8 = {0, 0, 0, 2, 1, 4, 2, 1, 5, 5, 5, 5, 5, 5, 5, 5, -128, 0, 0, | ||
| 96 | + 4, -39, -84, 0, 36, 1, 0, 0, 1, -64, -88, 7, 90, -64, -88, 7, 92, 2, 0, 0, 10, 1, 4, | ||
| 97 | + 2, 4, -34, -34, -34, -34, 5, 5, 5, 5, -128, 0, 0, 1, 31, -93, 0, 28, 0, 0, 0, 0, 0, | ||
| 98 | + 0, 0, 10}; | ||
| 99 | + private LsUpdate lsUpdate; | ||
| 100 | + private RouterLsa ospflsa; | ||
| 101 | + private NetworkLsa ospflsa1; | ||
| 102 | + private SummaryLsa ospflsa2; | ||
| 103 | + private AsbrSummaryLsa ospflsa3; | ||
| 104 | + private ExternalLsa ospflsa4; | ||
| 105 | + private Vector<OspfLsa> listLSA = new Vector(); | ||
| 106 | + private List lsa; | ||
| 107 | + private int result; | ||
| 108 | + private OspfPacketType ospfMessageType; | ||
| 109 | + private OspfPacketHeader ospfPacketHeader; | ||
| 110 | + private byte[] result1; | ||
| 111 | + private ChannelBuffer channelBuffer; | ||
| 112 | + private OpaqueLsa10 opaqueLsa10; | ||
| 113 | + private OpaqueLsa9 opaqueLsa9; | ||
| 114 | + private OpaqueLsa11 opaqueLsa11; | ||
| 115 | + | ||
| 116 | + @Before | ||
| 117 | + public void setUp() throws Exception { | ||
| 118 | + lsUpdate = new LsUpdate(); | ||
| 119 | + ospflsa = new RouterLsa(); | ||
| 120 | + lsUpdate.setAuthType(1); | ||
| 121 | + lsUpdate.setOspftype(2); | ||
| 122 | + lsUpdate.setRouterId(Ip4Address.valueOf("10.226.165.164")); | ||
| 123 | + lsUpdate.setAreaId(Ip4Address.valueOf("10.226.165.100")); | ||
| 124 | + lsUpdate.setChecksum(201); | ||
| 125 | + lsUpdate.setAuthentication(2); | ||
| 126 | + lsUpdate.setOspfPacLength(48); | ||
| 127 | + lsUpdate.setOspfVer(2); | ||
| 128 | + ospflsa.setLsType(1); | ||
| 129 | + lsUpdate.addLsa(ospflsa); | ||
| 130 | + ospflsa1 = new NetworkLsa(); | ||
| 131 | + ospflsa1.setNetworkMask(Ip4Address.valueOf("10.226.165.164")); | ||
| 132 | + ospflsa1.setLsType(2); | ||
| 133 | + lsUpdate.addLsa(ospflsa1); | ||
| 134 | + ospflsa2 = new SummaryLsa(new LsaHeader()); | ||
| 135 | + ospflsa2.setLsType(3); | ||
| 136 | + lsUpdate.addLsa(ospflsa2); | ||
| 137 | + ospflsa3 = new AsbrSummaryLsa(new LsaHeader()); | ||
| 138 | + ospflsa3.setNetworkMask(Ip4Address.valueOf("10.226.165.164")); | ||
| 139 | + ospflsa3.setLsType(4); | ||
| 140 | + lsUpdate.addLsa(ospflsa3); | ||
| 141 | + ospflsa4 = new ExternalLsa(new LsaHeader()); | ||
| 142 | + ospflsa4.setLsType(5); | ||
| 143 | + lsUpdate.addLsa(ospflsa4); | ||
| 144 | + } | ||
| 145 | + | ||
| 146 | + @After | ||
| 147 | + public void tearDown() throws Exception { | ||
| 148 | + lsUpdate = null; | ||
| 149 | + ospflsa = null; | ||
| 150 | + ospflsa1 = null; | ||
| 151 | + ospflsa2 = null; | ||
| 152 | + ospflsa3 = null; | ||
| 153 | + ospflsa4 = null; | ||
| 154 | + listLSA.clear(); | ||
| 155 | + lsa = null; | ||
| 156 | + ospfMessageType = null; | ||
| 157 | + ospfPacketHeader = null; | ||
| 158 | + result1 = null; | ||
| 159 | + channelBuffer = null; | ||
| 160 | + opaqueLsa9 = null; | ||
| 161 | + opaqueLsa10 = null; | ||
| 162 | + opaqueLsa11 = null; | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | + /** | ||
| 166 | + * Tests getLsaList() getter method. | ||
| 167 | + */ | ||
| 168 | + @Test | ||
| 169 | + public void testGetListLsa() throws Exception { | ||
| 170 | + lsUpdate.addLsa(ospflsa); | ||
| 171 | + lsUpdate.addLsa(ospflsa); | ||
| 172 | + lsa = lsUpdate.getLsaList(); | ||
| 173 | + assertThat(lsa, is(notNullValue())); | ||
| 174 | + assertThat(lsa.size(), is(5)); | ||
| 175 | + } | ||
| 176 | + | ||
| 177 | + /** | ||
| 178 | + * Tests addLsa() method. | ||
| 179 | + */ | ||
| 180 | + @Test | ||
| 181 | + public void testAddLsa() throws Exception { | ||
| 182 | + lsUpdate.addLsa(ospflsa); | ||
| 183 | + assertThat(lsUpdate, is(notNullValue())); | ||
| 184 | + } | ||
| 185 | + | ||
| 186 | + /** | ||
| 187 | + * Tests noLsa() getter method. | ||
| 188 | + */ | ||
| 189 | + @Test | ||
| 190 | + public void testGetNoLsa() throws Exception { | ||
| 191 | + lsUpdate.setNumberOfLsa(5); | ||
| 192 | + result = lsUpdate.noLsa(); | ||
| 193 | + assertThat(result, is(notNullValue())); | ||
| 194 | + assertThat(result, is(5)); | ||
| 195 | + } | ||
| 196 | + | ||
| 197 | + /** | ||
| 198 | + * Tests noLsa() setter method. | ||
| 199 | + */ | ||
| 200 | + @Test | ||
| 201 | + public void testSetNoLsa() throws Exception { | ||
| 202 | + lsUpdate.setNumberOfLsa(5); | ||
| 203 | + result = lsUpdate.noLsa(); | ||
| 204 | + assertThat(result, is(notNullValue())); | ||
| 205 | + assertThat(result, is(5)); | ||
| 206 | + } | ||
| 207 | + | ||
| 208 | + /** | ||
| 209 | + * Tests ospfMessageType() getter method. | ||
| 210 | + */ | ||
| 211 | + @Test | ||
| 212 | + public void testGetOspfMessageType() throws Exception { | ||
| 213 | + ospfMessageType = lsUpdate.ospfMessageType(); | ||
| 214 | + assertThat(ospfMessageType, is(OspfPacketType.LSUPDATE)); | ||
| 215 | + } | ||
| 216 | + | ||
| 217 | + /** | ||
| 218 | + * Tests readFrom() method. | ||
| 219 | + */ | ||
| 220 | + @Test | ||
| 221 | + public void testReadFrom() throws Exception { | ||
| 222 | + ospfPacketHeader = new OspfPacketHeader(); | ||
| 223 | + ospfPacketHeader.setAreaId(Ip4Address.valueOf("1.1.1.1")); | ||
| 224 | + ospfPacketHeader.setAuthentication(0); | ||
| 225 | + ospfPacketHeader.setAuthType(0); | ||
| 226 | + ospfPacketHeader.setChecksum(12345); | ||
| 227 | + ospfPacketHeader.setDestinationIp(Ip4Address.valueOf("10.10.10.10")); | ||
| 228 | + ospfPacketHeader.setOspfPacLength(56); | ||
| 229 | + ospfPacketHeader.setOspftype(4); | ||
| 230 | + ospfPacketHeader.setOspfVer(2); | ||
| 231 | + ospfPacketHeader.setRouterId(Ip4Address.valueOf("2.2.2.2")); | ||
| 232 | + ospfPacketHeader.setSourceIp(Ip4Address.valueOf("3.3.3.3")); | ||
| 233 | + lsUpdate = new LsUpdate(ospfPacketHeader); | ||
| 234 | + result1 = createLsUpdatePacket(); | ||
| 235 | + channelBuffer = ChannelBuffers.copiedBuffer(result1); | ||
| 236 | + lsUpdate.readFrom(channelBuffer); | ||
| 237 | + channelBuffer = ChannelBuffers.copiedBuffer(packet1); | ||
| 238 | + lsUpdate.readFrom(channelBuffer); | ||
| 239 | + channelBuffer = ChannelBuffers.copiedBuffer(packet2); | ||
| 240 | + lsUpdate.readFrom(channelBuffer); | ||
| 241 | + channelBuffer = ChannelBuffers.copiedBuffer(packet3); | ||
| 242 | + lsUpdate.readFrom(channelBuffer); | ||
| 243 | + channelBuffer = ChannelBuffers.copiedBuffer(packet4); | ||
| 244 | + lsUpdate.readFrom(channelBuffer); | ||
| 245 | + channelBuffer = ChannelBuffers.copiedBuffer(packet5); | ||
| 246 | + lsUpdate.readFrom(channelBuffer); | ||
| 247 | + channelBuffer = ChannelBuffers.copiedBuffer(packet6); | ||
| 248 | + lsUpdate.readFrom(channelBuffer); | ||
| 249 | + channelBuffer = ChannelBuffers.copiedBuffer(packet7); | ||
| 250 | + lsUpdate.readFrom(channelBuffer); | ||
| 251 | + channelBuffer = ChannelBuffers.copiedBuffer(packet8); | ||
| 252 | + lsUpdate.readFrom(channelBuffer); | ||
| 253 | + assertThat(lsUpdate, is(notNullValue())); | ||
| 254 | + assertThat(lsUpdate.ospfMessageType(), is(OspfPacketType.LSUPDATE)); | ||
| 255 | + } | ||
| 256 | + | ||
| 257 | + /** | ||
| 258 | + * Tests asBytes() method. | ||
| 259 | + */ | ||
| 260 | + @Test | ||
| 261 | + public void testAsBytes() throws Exception { | ||
| 262 | + result1 = lsUpdate.asBytes(); | ||
| 263 | + assertThat(result1, is(notNullValue())); | ||
| 264 | + } | ||
| 265 | + | ||
| 266 | + /** | ||
| 267 | + * Tests getLsuHeaderAsByteArray() method. | ||
| 268 | + */ | ||
| 269 | + @Test | ||
| 270 | + public void testGetLsuHeaderAsByteArray() throws Exception { | ||
| 271 | + result1 = lsUpdate.getLsuHeaderAsByteArray(); | ||
| 272 | + assertThat(result1, is(notNullValue())); | ||
| 273 | + } | ||
| 274 | + | ||
| 275 | + /** | ||
| 276 | + * Tests getLsuBodyAsByteArray() method. | ||
| 277 | + */ | ||
| 278 | + @Test | ||
| 279 | + public void testGetLsuBodyAsByteArray() throws Exception { | ||
| 280 | + lsUpdate.setNumberOfLsa(8); | ||
| 281 | + lsUpdate.addLsa(ospflsa3); | ||
| 282 | + opaqueLsa9 = new OpaqueLsa9(new OpaqueLsaHeader()); | ||
| 283 | + opaqueLsa9.setLsType(9); | ||
| 284 | + lsUpdate.addLsa(opaqueLsa9); | ||
| 285 | + opaqueLsa10 = new OpaqueLsa10(new OpaqueLsaHeader()); | ||
| 286 | + opaqueLsa10.setLsType(10); | ||
| 287 | + lsUpdate.addLsa(opaqueLsa10); | ||
| 288 | + opaqueLsa11 = new OpaqueLsa11(new OpaqueLsaHeader()); | ||
| 289 | + opaqueLsa10.setLsType(11); | ||
| 290 | + lsUpdate.addLsa(opaqueLsa11); | ||
| 291 | + result1 = lsUpdate.getLsuBodyAsByteArray(); | ||
| 292 | + assertThat(result1, is(notNullValue())); | ||
| 293 | + } | ||
| 294 | + | ||
| 295 | + @Test | ||
| 296 | + public void testGetLsuBodyAsByteArray1() throws Exception { | ||
| 297 | + lsUpdate.setNumberOfLsa(8); | ||
| 298 | + opaqueLsa10 = new OpaqueLsa10(new OpaqueLsaHeader()); | ||
| 299 | + opaqueLsa10.setLsType(10); | ||
| 300 | + lsUpdate.addLsa(opaqueLsa10); | ||
| 301 | + assertThat(result1, is(nullValue())); | ||
| 302 | + } | ||
| 303 | + | ||
| 304 | + @Test | ||
| 305 | + public void testGetLsuBodyAsByteArray2() throws Exception { | ||
| 306 | + opaqueLsa11 = new OpaqueLsa11(new OpaqueLsaHeader()); | ||
| 307 | + opaqueLsa11.setLsType(11); | ||
| 308 | + lsUpdate.addLsa(opaqueLsa11); | ||
| 309 | + result1 = lsUpdate.getLsuBodyAsByteArray(); | ||
| 310 | + assertThat(result1, is(notNullValue())); | ||
| 311 | + } | ||
| 312 | + | ||
| 313 | + /** | ||
| 314 | + * Tests to string method. | ||
| 315 | + */ | ||
| 316 | + @Test | ||
| 317 | + public void testToString() throws Exception { | ||
| 318 | + assertThat(lsUpdate.toString(), is(notNullValue())); | ||
| 319 | + } | ||
| 320 | + | ||
| 321 | + /** | ||
| 322 | + * Utility method used by junit methods. | ||
| 323 | + */ | ||
| 324 | + private byte[] createLsUpdatePacket() { | ||
| 325 | + byte[] lsUpdatePacket = {0, 0, 0, 7, 0, 2, 2, | ||
| 326 | + 1, -64, -88, -86, 3, -64, -88, -86, 3, -128, 0, 0, 1, 58, | ||
| 327 | + -100, 0, 48, 2, 0, 0, 2, -64, -88, -86, 0, -1, -1, -1, 0, | ||
| 328 | + 3, 0, 0, 10, -64, -88, -86, 0, -1, -1, -1, 0, 3, 0, 0, 10 | ||
| 329 | + , 0, 3, 2, 5, 80, -44, 16, 0, -64, -88, -86, 2, -128, 0, 0 | ||
| 330 | + , 1, 42, 73, 0, 36, -1, -1, -1, -1, -128, 0, 0, 20, 0, 0, | ||
| 331 | + 0, 0, 0, 0, 0, 0, 0, 3, 2, 5, -108, 121, -85, 0, -64, -88 | ||
| 332 | + , -86, 2, -128, 0, 0, 1, 52, -91, 0, 36, -1, -1, -1, 0, | ||
| 333 | + -128, 0, 0, 20, -64, -88, -86, 1, 0, 0, 0, 0, 0, 3, 2, 5 | ||
| 334 | + , -64, -126, 120, 0, -64, -88, -86, 2, -128, 0, 0, 1, -45, | ||
| 335 | + 25, 0, 36, -1, -1, -1, 0, -128, 0, 0, 20, 0, 0, 0, 0, 0, | ||
| 336 | + 0, 0, 0, 0, 3, 2, 5, -64, -88, 0, 0, -64, -88, -86, 2, | ||
| 337 | + -128, 0, 0, 1, 55, 8, 0, 36, -1, -1, -1, 0, -128, 0, 0, | ||
| 338 | + 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 5, -64, -88, 1, 0, | ||
| 339 | + -64, -88, -86, 2, -128, 0, 0, 1, 44, 18, 0, 36, -1, -1, -1, 0, -128, 0, | ||
| 340 | + 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 5, -64, -88, -84, 0, -64, -88, | ||
| 341 | + -86, 2, -128, 0, 0, 1, 51, 65, 0, 36, -1, -1, -1, 0, -128, 0, 0, 20, -64, | ||
| 342 | + -88, -86, 10, 0, 0, 0, 0}; | ||
| 343 | + return lsUpdatePacket; | ||
| 344 | + } | ||
| 345 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/util/ChecksumCalculatorTest.java
0 → 100644
| 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.ospf.protocol.util; | ||
| 17 | + | ||
| 18 | +import org.junit.After; | ||
| 19 | +import org.junit.Before; | ||
| 20 | +import org.junit.Test; | ||
| 21 | +import org.onlab.packet.Ip4Address; | ||
| 22 | +import org.onosproject.ospf.protocol.lsa.LsaHeader; | ||
| 23 | +import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader; | ||
| 24 | +import org.onosproject.ospf.protocol.lsa.types.AsbrSummaryLsa; | ||
| 25 | +import org.onosproject.ospf.protocol.lsa.types.ExternalLsa; | ||
| 26 | +import org.onosproject.ospf.protocol.lsa.types.NetworkLsa; | ||
| 27 | +import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa10; | ||
| 28 | +import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa11; | ||
| 29 | +import org.onosproject.ospf.protocol.lsa.types.OpaqueLsa9; | ||
| 30 | +import org.onosproject.ospf.protocol.lsa.types.RouterLsa; | ||
| 31 | +import org.onosproject.ospf.protocol.lsa.types.SummaryLsa; | ||
| 32 | +import org.onosproject.ospf.protocol.ospfpacket.types.DdPacket; | ||
| 33 | +import org.onosproject.ospf.protocol.ospfpacket.types.HelloPacket; | ||
| 34 | +import org.onosproject.ospf.protocol.ospfpacket.types.LsAcknowledge; | ||
| 35 | +import org.onosproject.ospf.protocol.ospfpacket.types.LsRequest; | ||
| 36 | +import org.onosproject.ospf.protocol.ospfpacket.types.LsUpdate; | ||
| 37 | + | ||
| 38 | +import static org.hamcrest.CoreMatchers.is; | ||
| 39 | +import static org.hamcrest.CoreMatchers.notNullValue; | ||
| 40 | +import static org.hamcrest.MatcherAssert.assertThat; | ||
| 41 | + | ||
| 42 | +/** | ||
| 43 | + * Unit test class for ChecksumCalculator. | ||
| 44 | + */ | ||
| 45 | +public class ChecksumCalculatorTest { | ||
| 46 | + | ||
| 47 | + private final int ospfChecksumPos1 = 12; | ||
| 48 | + private final int ospfChecksumPos2 = 13; | ||
| 49 | + private final int lsaChecksumPos1 = 16; | ||
| 50 | + private final int lsaChecksumPos2 = 17; | ||
| 51 | + private final byte[] updatePacket = {1, 1, 1, 1, 2, 4, 0, -96, 9, 9, 9, 9, 5, 5, 5, 5, 62, 125, | ||
| 52 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 100, 2, 10, 1, 0, 0, 1, 9, 9, 9, 9, -128, | ||
| 53 | + 0, 0, 1, -7, 62, 0, -124, 0, 2, 0, 108, 0, 1, 0, 1, 2, 0, 0, 0, 0, 2, 0, 4, -64, -88, | ||
| 54 | + 7, -91, 0, 3, 0, 4, -64, -88, 7, -91, 0, 4, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 1, | ||
| 55 | + 0, 6, 0, 4, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 8, 0, 32, 0, 0, 0, 0, 0, 0, 0, | ||
| 56 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, | ||
| 57 | + 0, 4, 0, 0, 0, 0, -128, 2, 0, 4, 0, 0, 0, 1}; | ||
| 58 | + | ||
| 59 | + private final byte[] helloPacket = {2, 1, 0, 44, -64, -88, -86, 8, 0, 0, 0, 1, 39, 59, | ||
| 60 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 10, 2, 1, 0, 0, 0, 40, -64, -88, | ||
| 61 | + -86, 8, 0, 0, 0, 0}; | ||
| 62 | + private final byte[] rlsa = {14, 16, 2, 1, -64, -88, -86, 2, -64, -88, -86, 2, -128, 0, | ||
| 63 | + 0, 1, 74, -114, 0, 48, 2, 0, 0, 2, -64, -88, -86, 0, -1, -1, -1, 0, 3, 0, 0, 10, | ||
| 64 | + -64, -88, -86, 0, -1, -1, -1, 0, 3, 0, 0, 10}; | ||
| 65 | + private ChecksumCalculator checksumCalculator; | ||
| 66 | + private boolean validate; | ||
| 67 | + private HelloPacket hello; | ||
| 68 | + private LsUpdate message; | ||
| 69 | + private DdPacket message1; | ||
| 70 | + private LsRequest message2; | ||
| 71 | + private RouterLsa router; | ||
| 72 | + private LsAcknowledge lsack; | ||
| 73 | + private ExternalLsa external; | ||
| 74 | + private NetworkLsa external1; | ||
| 75 | + private SummaryLsa external2; | ||
| 76 | + private AsbrSummaryLsa external3; | ||
| 77 | + private OpaqueLsa9 external4; | ||
| 78 | + private OpaqueLsa10 external5; | ||
| 79 | + private OpaqueLsa11 external6; | ||
| 80 | + private byte[] result; | ||
| 81 | + | ||
| 82 | + @Before | ||
| 83 | + public void setUp() throws Exception { | ||
| 84 | + checksumCalculator = new ChecksumCalculator(); | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + @After | ||
| 88 | + public void tearDown() throws Exception { | ||
| 89 | + checksumCalculator = null; | ||
| 90 | + hello = null; | ||
| 91 | + message = null; | ||
| 92 | + message1 = null; | ||
| 93 | + message2 = null; | ||
| 94 | + router = null; | ||
| 95 | + lsack = null; | ||
| 96 | + external = null; | ||
| 97 | + external1 = null; | ||
| 98 | + external2 = null; | ||
| 99 | + external3 = null; | ||
| 100 | + result = null; | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + /** | ||
| 104 | + * Tests convertToSixteenBits() method. | ||
| 105 | + */ | ||
| 106 | + @Test | ||
| 107 | + public void testConvertToSixteenBits() throws Exception { | ||
| 108 | + int num = checksumCalculator.convertToSixteenBits("16cdd"); | ||
| 109 | + assertThat(num, is(27870)); | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + /** | ||
| 113 | + * Tests isValidOspfCheckSum() method. | ||
| 114 | + */ | ||
| 115 | + @Test | ||
| 116 | + public void testIsValidOspfCheckSum() throws Exception { | ||
| 117 | + hello = new HelloPacket(); | ||
| 118 | + hello.setOspfVer(2); | ||
| 119 | + hello.setOspftype(1); | ||
| 120 | + hello.setOspfPacLength(172); | ||
| 121 | + hello.setRouterId(Ip4Address.valueOf("192.168.170.3")); | ||
| 122 | + hello.setAreaId(Ip4Address.valueOf("0.0.0.1")); | ||
| 123 | + hello.setChecksum(5537); | ||
| 124 | + hello.setAuthType(0); | ||
| 125 | + hello.setAuthentication(0); | ||
| 126 | + validate = checksumCalculator.isValidOspfCheckSum(hello, ospfChecksumPos1, ospfChecksumPos2); | ||
| 127 | + assertThat(validate, is(false)); | ||
| 128 | + lsack = new LsAcknowledge(); | ||
| 129 | + lsack.setOspfVer(2); | ||
| 130 | + lsack.setOspftype(5); | ||
| 131 | + lsack.setOspfPacLength(172); | ||
| 132 | + lsack.setRouterId(Ip4Address.valueOf("192.168.170.3")); | ||
| 133 | + lsack.setAreaId(Ip4Address.valueOf("0.0.0.1")); | ||
| 134 | + lsack.setChecksum(37537); | ||
| 135 | + lsack.setAuthType(0); | ||
| 136 | + lsack.setAuthentication(0); | ||
| 137 | + validate = checksumCalculator.isValidOspfCheckSum(lsack, ospfChecksumPos1, ospfChecksumPos2); | ||
| 138 | + assertThat(validate, is(true)); | ||
| 139 | + message = new LsUpdate(); | ||
| 140 | + message.setOspfVer(2); | ||
| 141 | + message.setOspftype(5); | ||
| 142 | + message.setOspfPacLength(172); | ||
| 143 | + message.setRouterId(Ip4Address.valueOf("192.168.170.3")); | ||
| 144 | + message.setAreaId(Ip4Address.valueOf("0.0.0.1")); | ||
| 145 | + message.setChecksum(37537); | ||
| 146 | + message.setAuthType(0); | ||
| 147 | + message.setAuthentication(0); | ||
| 148 | + validate = checksumCalculator.isValidOspfCheckSum(message, ospfChecksumPos1, ospfChecksumPos2); | ||
| 149 | + assertThat(validate, is(true)); | ||
| 150 | + message1 = new DdPacket(); | ||
| 151 | + message1.setOspfVer(2); | ||
| 152 | + message1.setOspftype(5); | ||
| 153 | + message1.setOspfPacLength(172); | ||
| 154 | + message1.setRouterId(Ip4Address.valueOf("192.168.170.3")); | ||
| 155 | + message1.setAreaId(Ip4Address.valueOf("0.0.0.1")); | ||
| 156 | + message1.setChecksum(37537); | ||
| 157 | + message1.setAuthType(0); | ||
| 158 | + message1.setAuthentication(0); | ||
| 159 | + validate = checksumCalculator.isValidOspfCheckSum(message1, ospfChecksumPos1, ospfChecksumPos2); | ||
| 160 | + assertThat(validate, is(true)); | ||
| 161 | + message2 = new LsRequest(); | ||
| 162 | + message2.setOspfVer(2); | ||
| 163 | + message2.setOspftype(5); | ||
| 164 | + message2.setOspfPacLength(172); | ||
| 165 | + message2.setRouterId(Ip4Address.valueOf("192.168.170.3")); | ||
| 166 | + message2.setAreaId(Ip4Address.valueOf("0.0.0.1")); | ||
| 167 | + message2.setChecksum(37537); | ||
| 168 | + message2.setAuthType(0); | ||
| 169 | + message2.setAuthentication(0); | ||
| 170 | + validate = checksumCalculator.isValidOspfCheckSum(message2, ospfChecksumPos1, ospfChecksumPos2); | ||
| 171 | + assertThat(validate, is(true)); | ||
| 172 | + } | ||
| 173 | + | ||
| 174 | + /** | ||
| 175 | + * Tests isValidLsaCheckSum() method. | ||
| 176 | + */ | ||
| 177 | + @Test | ||
| 178 | + public void testIsValidLsaCheckSum() throws Exception { | ||
| 179 | + router = new RouterLsa(); | ||
| 180 | + router.setAge(1); | ||
| 181 | + router.setOptions(2); | ||
| 182 | + router.setLsType(1); | ||
| 183 | + router.setLinkStateId("192.168.170.3"); | ||
| 184 | + router.setAdvertisingRouter(Ip4Address.valueOf("192.168.170.3")); | ||
| 185 | + router.setLsSequenceNo(2147483649L); | ||
| 186 | + router.setLsCheckSum(49499); | ||
| 187 | + router.setLsPacketLen(48); | ||
| 188 | + validate = checksumCalculator.isValidLsaCheckSum(router, router.lsType(), lsaChecksumPos1, lsaChecksumPos2); | ||
| 189 | + assertThat(validate, is(true)); | ||
| 190 | + | ||
| 191 | + } | ||
| 192 | + | ||
| 193 | + /** | ||
| 194 | + * Tests isValidLsaCheckSum() method. | ||
| 195 | + */ | ||
| 196 | + @Test | ||
| 197 | + public void testIsValidLsaCheckSum4() throws Exception { | ||
| 198 | + external = new ExternalLsa(new LsaHeader()); | ||
| 199 | + external.setAge(2); | ||
| 200 | + external.setOptions(2); | ||
| 201 | + external.setLsType(5); | ||
| 202 | + external.setLinkStateId("80.212.16.0"); | ||
| 203 | + external.setAdvertisingRouter(Ip4Address.valueOf("192.168.170.2")); | ||
| 204 | + external.setLsSequenceNo(2147483649L); | ||
| 205 | + external.setLsCheckSum(25125); | ||
| 206 | + external.setLsPacketLen(36); | ||
| 207 | + validate = checksumCalculator.isValidLsaCheckSum(external, external.lsType(), lsaChecksumPos1, lsaChecksumPos2); | ||
| 208 | + assertThat(validate, is(false)); | ||
| 209 | + } | ||
| 210 | + | ||
| 211 | + /** | ||
| 212 | + * Tests isValidLsaCheckSum() method. | ||
| 213 | + */ | ||
| 214 | + @Test(expected = Exception.class) | ||
| 215 | + public void testIsValidLsaCheckSum5() throws Exception { | ||
| 216 | + external1 = new NetworkLsa(); | ||
| 217 | + external1.setAge(2); | ||
| 218 | + external1.setOptions(2); | ||
| 219 | + external1.setLsType(2); | ||
| 220 | + external1.setLinkStateId("80.212.16.0"); | ||
| 221 | + external1.setAdvertisingRouter(Ip4Address.valueOf("192.168.170.2")); | ||
| 222 | + external1.setLsSequenceNo(2147483649L); | ||
| 223 | + external1.setLsCheckSum(25125); | ||
| 224 | + external1.setLsPacketLen(36); | ||
| 225 | + validate = checksumCalculator.isValidLsaCheckSum(external1, external1.lsType(), | ||
| 226 | + lsaChecksumPos1, lsaChecksumPos2); | ||
| 227 | + assertThat(validate, is(false)); | ||
| 228 | + } | ||
| 229 | + | ||
| 230 | + /** | ||
| 231 | + * Tests isValidLsaCheckSum() method. | ||
| 232 | + */ | ||
| 233 | + @Test | ||
| 234 | + public void testIsValidLsaCheckSum6() throws Exception { | ||
| 235 | + | ||
| 236 | + external2 = new SummaryLsa(new LsaHeader()); | ||
| 237 | + external2.setAge(2); | ||
| 238 | + external2.setOptions(2); | ||
| 239 | + external2.setLsType(3); | ||
| 240 | + external2.setLinkStateId("80.212.16.0"); | ||
| 241 | + external2.setAdvertisingRouter(Ip4Address.valueOf("192.168.170.2")); | ||
| 242 | + external2.setLsSequenceNo(2147483649L); | ||
| 243 | + external2.setLsCheckSum(25125); | ||
| 244 | + external2.setLsPacketLen(36); | ||
| 245 | + validate = checksumCalculator.isValidLsaCheckSum(external2, external2.lsType(), | ||
| 246 | + lsaChecksumPos1, lsaChecksumPos2); | ||
| 247 | + assertThat(validate, is(false)); | ||
| 248 | + } | ||
| 249 | + | ||
| 250 | + /** | ||
| 251 | + * Tests isValidLsaCheckSum() method. | ||
| 252 | + */ | ||
| 253 | + @Test(expected = Exception.class) | ||
| 254 | + public void testIsValidLsaCheckSum7() throws Exception { | ||
| 255 | + external3 = new AsbrSummaryLsa(new LsaHeader()); | ||
| 256 | + external3.setAge(2); | ||
| 257 | + external3.setOptions(2); | ||
| 258 | + external3.setLsType(4); | ||
| 259 | + external3.setLinkStateId("80.212.16.0"); | ||
| 260 | + external3.setAdvertisingRouter(Ip4Address.valueOf("192.168.170.2")); | ||
| 261 | + external3.setLsSequenceNo(2147483649L); | ||
| 262 | + external3.setLsCheckSum(25125); | ||
| 263 | + external3.setLsPacketLen(36); | ||
| 264 | + validate = checksumCalculator.isValidLsaCheckSum(external3, external3.lsType(), | ||
| 265 | + lsaChecksumPos1, lsaChecksumPos2); | ||
| 266 | + assertThat(validate, is(false)); | ||
| 267 | + } | ||
| 268 | + | ||
| 269 | + /** | ||
| 270 | + * Tests isValidLsaCheckSum() method. | ||
| 271 | + */ | ||
| 272 | + @Test(expected = Exception.class) | ||
| 273 | + public void testIsValidLsaCheckSum1() throws Exception { | ||
| 274 | + external4 = new OpaqueLsa9(new OpaqueLsaHeader()); | ||
| 275 | + external4.setAge(2); | ||
| 276 | + external4.setOptions(2); | ||
| 277 | + external4.setLsType(9); | ||
| 278 | + external4.setLinkStateId("80.212.16.0"); | ||
| 279 | + external4.setAdvertisingRouter(Ip4Address.valueOf("192.168.170.2")); | ||
| 280 | + external4.setLsSequenceNo(2147483649L); | ||
| 281 | + external4.setLsCheckSum(25125); | ||
| 282 | + external4.setLsPacketLen(36); | ||
| 283 | + validate = checksumCalculator.isValidLsaCheckSum(external4, external4.lsType(), | ||
| 284 | + lsaChecksumPos1, lsaChecksumPos2); | ||
| 285 | + assertThat(validate, is(false)); | ||
| 286 | + } | ||
| 287 | + | ||
| 288 | + /** | ||
| 289 | + * Tests isValidLsaCheckSum() method. | ||
| 290 | + */ | ||
| 291 | + @Test(expected = Exception.class) | ||
| 292 | + public void testIsValidLsaCheckSum2() throws Exception { | ||
| 293 | + external5 = new OpaqueLsa10(new OpaqueLsaHeader()); | ||
| 294 | + external5.setAge(2); | ||
| 295 | + external5.setOptions(2); | ||
| 296 | + external5.setLsType(10); | ||
| 297 | + external5.setLinkStateId("80.212.16.0"); | ||
| 298 | + external5.setAdvertisingRouter(Ip4Address.valueOf("192.168.170.2")); | ||
| 299 | + external5.setLsSequenceNo(2147483649L); | ||
| 300 | + external5.setLsCheckSum(25125); | ||
| 301 | + external5.setLsPacketLen(36); | ||
| 302 | + validate = checksumCalculator.isValidLsaCheckSum(external5, external5.lsType(), | ||
| 303 | + lsaChecksumPos1, lsaChecksumPos2); | ||
| 304 | + | ||
| 305 | + assertThat(validate, is(false)); | ||
| 306 | + } | ||
| 307 | + | ||
| 308 | + /** | ||
| 309 | + * Tests isValidLsaCheckSum() method. | ||
| 310 | + */ | ||
| 311 | + @Test(expected = Exception.class) | ||
| 312 | + public void testIsValidLsaCheckSum3() throws Exception { | ||
| 313 | + external6 = new OpaqueLsa11(new OpaqueLsaHeader()); | ||
| 314 | + external6.setAge(2); | ||
| 315 | + external6.setOptions(2); | ||
| 316 | + external6.setLsType(10); | ||
| 317 | + external6.setLinkStateId("80.212.16.0"); | ||
| 318 | + external6.setAdvertisingRouter(Ip4Address.valueOf("192.168.170.2")); | ||
| 319 | + external6.setLsSequenceNo(2147483649L); | ||
| 320 | + external6.setLsCheckSum(25125); | ||
| 321 | + external6.setLsPacketLen(36); | ||
| 322 | + validate = checksumCalculator.isValidLsaCheckSum(external6, external6.lsType(), | ||
| 323 | + lsaChecksumPos1, lsaChecksumPos2); | ||
| 324 | + assertThat(validate, is(false)); | ||
| 325 | + } | ||
| 326 | + | ||
| 327 | + /** | ||
| 328 | + * Tests validateLsaCheckSum() method. | ||
| 329 | + */ | ||
| 330 | + @Test | ||
| 331 | + public void testValidateLsaCheckSum() throws Exception { | ||
| 332 | + assertThat(checksumCalculator.validateLsaCheckSum(rlsa, lsaChecksumPos1, | ||
| 333 | + lsaChecksumPos2), is(true)); | ||
| 334 | + | ||
| 335 | + } | ||
| 336 | + | ||
| 337 | + /** | ||
| 338 | + * Tests validateOspfCheckSum() method. | ||
| 339 | + */ | ||
| 340 | + @Test | ||
| 341 | + public void testValidateOspfCheckSum() throws Exception { | ||
| 342 | + assertThat(checksumCalculator.validateOspfCheckSum(helloPacket, ospfChecksumPos1, | ||
| 343 | + ospfChecksumPos2), is(true)); | ||
| 344 | + } | ||
| 345 | + | ||
| 346 | + /** | ||
| 347 | + * Tests calculateLsaChecksum() method. | ||
| 348 | + */ | ||
| 349 | + @Test | ||
| 350 | + public void testCalculateLsaChecksum() throws Exception { | ||
| 351 | + result = checksumCalculator.calculateLsaChecksum(rlsa, lsaChecksumPos1, lsaChecksumPos2); | ||
| 352 | + assertThat(result, is(notNullValue())); | ||
| 353 | + } | ||
| 354 | + | ||
| 355 | + /** | ||
| 356 | + * Tests calculateOspfCheckSum() method. | ||
| 357 | + */ | ||
| 358 | + @Test | ||
| 359 | + public void testCalculateOspfCheckSum() throws Exception { | ||
| 360 | + result = checksumCalculator.calculateOspfCheckSum(helloPacket, ospfChecksumPos1, | ||
| 361 | + ospfChecksumPos2); | ||
| 362 | + assertThat(result, is(notNullValue())); | ||
| 363 | + result = checksumCalculator.calculateOspfCheckSum(updatePacket, ospfChecksumPos1, | ||
| 364 | + ospfChecksumPos2); | ||
| 365 | + assertThat(result, is(notNullValue())); | ||
| 366 | + } | ||
| 367 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment