blob: 25910a9ef65af15429e7d44f4f74297f38dc8ae7 [file] [log] [blame]
Priyanka B0bee1f82015-10-13 15:39:49 +05301/*
2 * Copyright 2015 Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Jonathan Hart317f4762015-11-09 16:05:36 -080016package org.onosproject.bgpio.protocol.linkstate;
Priyanka B0bee1f82015-10-13 15:39:49 +053017
18import java.util.Objects;
19
20import org.jboss.netty.buffer.ChannelBuffer;
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053021import org.onosproject.bgpio.exceptions.BgpParseException;
22import org.onosproject.bgpio.types.BgpErrorType;
Priyanka B0bee1f82015-10-13 15:39:49 +053023import org.onosproject.bgpio.util.Constants;
24import org.slf4j.Logger;
25import org.slf4j.LoggerFactory;
26
27import com.google.common.base.MoreObjects;
28
29/**
30 * Implementation of Node Identifier which includes local node descriptor/remote node descriptors.
31 */
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053032public class BgpNodeLSIdentifier {
Priyanka B0bee1f82015-10-13 15:39:49 +053033
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053034 protected static final Logger log = LoggerFactory.getLogger(BgpNodeLSIdentifier.class);
Priyanka B0bee1f82015-10-13 15:39:49 +053035 private NodeDescriptors nodeDescriptors;
36
37 /**
38 * Resets fields.
39 */
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053040 public BgpNodeLSIdentifier() {
Priyanka B0bee1f82015-10-13 15:39:49 +053041 this.nodeDescriptors = null;
42 }
43
44 /**
45 * Constructor to initialize fields.
46 *
47 * @param nodeDescriptors local/remote node descriptor
48 */
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053049 public BgpNodeLSIdentifier(NodeDescriptors nodeDescriptors) {
Priyanka B0bee1f82015-10-13 15:39:49 +053050 this.nodeDescriptors = nodeDescriptors;
51 }
52
53 /**
54 * Parse local node descriptors.
55 *
56 * @param cb ChannelBuffer
57 * @param protocolId protocol identifier
58 * @return object of this BGPNodeLSIdentifier
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053059 * @throws BgpParseException while parsing local node descriptors
Priyanka B0bee1f82015-10-13 15:39:49 +053060 */
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053061 public static BgpNodeLSIdentifier parseLocalNodeDescriptors(ChannelBuffer cb, byte protocolId)
62 throws BgpParseException {
Priyanka B0bee1f82015-10-13 15:39:49 +053063 ChannelBuffer tempBuf = cb;
64 short type = cb.readShort();
65 short length = cb.readShort();
66 if (cb.readableBytes() < length) {
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053067 throw new BgpParseException(BgpErrorType.UPDATE_MESSAGE_ERROR, BgpErrorType.OPTIONAL_ATTRIBUTE_ERROR,
Priyanka B0bee1f82015-10-13 15:39:49 +053068 tempBuf.readBytes(cb.readableBytes() + Constants.TYPE_AND_LEN));
69 }
70 NodeDescriptors nodeDescriptors = new NodeDescriptors();
71 ChannelBuffer tempCb = cb.readBytes(length);
72
73 if (type == NodeDescriptors.LOCAL_NODE_DES_TYPE) {
74 nodeDescriptors = NodeDescriptors.read(tempCb, length, type, protocolId);
75 } else {
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053076 throw new BgpParseException(BgpErrorType.UPDATE_MESSAGE_ERROR, BgpErrorType.MALFORMED_ATTRIBUTE_LIST, null);
Priyanka B0bee1f82015-10-13 15:39:49 +053077 }
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053078 return new BgpNodeLSIdentifier(nodeDescriptors);
Priyanka B0bee1f82015-10-13 15:39:49 +053079 }
80
81 /**
82 * Returns node descriptors.
83 *
84 * @return node descriptors
85 */
86 public NodeDescriptors getNodedescriptors() {
87 return this.nodeDescriptors;
88 }
89
90 @Override
91 public boolean equals(Object obj) {
92 if (this == obj) {
93 return true;
94 }
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053095 if (obj instanceof BgpNodeLSIdentifier) {
96 BgpNodeLSIdentifier other = (BgpNodeLSIdentifier) obj;
Priyanka B0bee1f82015-10-13 15:39:49 +053097 return Objects.equals(nodeDescriptors, other.nodeDescriptors);
98 }
99 return false;
100 }
101
102 @Override
103 public int hashCode() {
104 return Objects.hash(nodeDescriptors);
105 }
106
107 @Override
108 public String toString() {
109 return MoreObjects.toStringHelper(getClass())
110 .add("NodeDescriptors", nodeDescriptors)
111 .toString();
112 }
Jonathan Hart317f4762015-11-09 16:05:36 -0800113}