Priyanka B

[ONOS-2602]Implement Link NLRI

Change-Id: Ia17868c0a2f701a88d82171943c52fe7b7880fba
......@@ -29,19 +29,19 @@ public interface BgpLinkLsNlri extends BGPLSNlri {
*
* @return local node descriptors
*/
NodeDescriptors getLocalNodeDescriptors();
NodeDescriptors localNodeDescriptors();
/**
* Returns remote node descriptors.
*
* @return remote node descriptors
*/
NodeDescriptors getRemoteNodeDescriptors();
NodeDescriptors remoteNodeDescriptors();
/**
* Returns link descriptors.
*
* @return link descriptors
*/
List<BGPValueType> getLinkDescriptors();
List<BGPValueType> linkDescriptors();
}
\ No newline at end of file
......
/*
* Copyright 2015 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.bgpio.protocol.linkstate;
import java.util.List;
import org.jboss.netty.buffer.ChannelBuffer;
import org.onosproject.bgpio.exceptions.BGPParseException;
import org.onosproject.bgpio.protocol.BgpLinkLsNlri;
import org.onosproject.bgpio.protocol.NlriType;
import org.onosproject.bgpio.protocol.linkstate.BGPNodeLSNlriVer4.PROTOCOLTYPE;
import org.onosproject.bgpio.types.BGPErrorType;
import org.onosproject.bgpio.types.BGPValueType;
import org.onosproject.bgpio.types.RouteDistinguisher;
import org.onosproject.bgpio.util.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.MoreObjects;
/**
* Implementation of Link LS NLRI.
*/
public class BgpLinkLsNlriVer4 implements BgpLinkLsNlri {
/*
* REFERENCE : draft-ietf-idr-ls-distribution-11
0 1 2 3
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
+-+-+-+-+-+-+-+-+
| Protocol-ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier |
| (64 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Local Node Descriptors (variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Remote Node Descriptors (variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Link Descriptors (variable) //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure : The Link NLRI format
*/
private static final Logger log = LoggerFactory.getLogger(BgpLinkLsNlriVer4.class);
public static final int LINK_NLRITYPE = 2;
private BGPLinkLSIdentifier linkLSIdentifier;
private byte protocolId;
private long identifier;
private RouteDistinguisher routeDistinguisher;
private boolean isVpn;
/**
* Initialize fields.
*/
public BgpLinkLsNlriVer4() {
this.protocolId = 0;
this.identifier = 0;
this.linkLSIdentifier = null;
this.routeDistinguisher = null;
this.isVpn = false;
}
/**
* Constructor to initialize parameters for BGP LinkLSNlri.
*
* @param protocolId protocol Id
* @param identifier field in BGP LinkLSNlri
* @param linkLSIdentifier link LS identifier
* @param routeDistinguisher route distinguisher from message
* @param isVpn vpn info availability in message
*/
public BgpLinkLsNlriVer4(byte protocolId, long identifier, BGPLinkLSIdentifier linkLSIdentifier,
RouteDistinguisher routeDistinguisher, boolean isVpn) {
this.protocolId = protocolId;
this.identifier = identifier;
this.linkLSIdentifier = linkLSIdentifier;
this.routeDistinguisher = routeDistinguisher;
this.isVpn = isVpn;
}
/**
* Reads from channelBuffer and parses Link LS Nlri.
*
* @param cb ChannelBuffer
* @param afi Address Family Identifier
* @param safi Subsequent Address Family Identifier
* @return object of this class
* @throws BGPParseException while parsing Link LS NLRI
*/
public static BgpLinkLsNlriVer4 read(ChannelBuffer cb, short afi, byte safi) throws BGPParseException {
boolean isVpn = false;
RouteDistinguisher routeDistinguisher = null;
if ((afi == Constants.AFI_VALUE) && (safi == Constants.VPN_SAFI_VALUE)) {
routeDistinguisher = new RouteDistinguisher();
routeDistinguisher = RouteDistinguisher.read(cb);
isVpn = true;
} else {
isVpn = false;
}
byte protocolId = cb.readByte();
long identifier = cb.readLong();
BGPLinkLSIdentifier linkLSIdentifier = new BGPLinkLSIdentifier();
linkLSIdentifier = BGPLinkLSIdentifier.parseLinkIdendifier(cb, protocolId);
return new BgpLinkLsNlriVer4(protocolId, identifier, linkLSIdentifier, routeDistinguisher, isVpn);
}
@Override
public NlriType getNlriType() {
return NlriType.LINK;
}
@Override
public long getIdentifier() {
return this.identifier;
}
/**
* Set the link LS identifier.
*
* @param linkLSIdentifier link LS identifier to set
*/
public void setLinkLSIdentifier(BGPLinkLSIdentifier linkLSIdentifier) {
this.linkLSIdentifier = linkLSIdentifier;
}
@Override
public PROTOCOLTYPE getProtocolId() throws BGPParseException {
switch (protocolId) {
case Constants.ISIS_LEVELONE:
return PROTOCOLTYPE.ISIS_LevelOne;
case Constants.ISIS_LEVELTWO:
return PROTOCOLTYPE.ISIS_LevelTwo;
case Constants.OSPFV2:
return PROTOCOLTYPE.OSPFv2;
case Constants.DIRECT:
return PROTOCOLTYPE.Direct;
case Constants.STATIC_CONFIGURATION:
return PROTOCOLTYPE.Static_Configuration;
case Constants.OSPFV3:
return PROTOCOLTYPE.OSPFv3;
default:
throw new BGPParseException(BGPErrorType.UPDATE_MESSAGE_ERROR, (byte) 0, null);
}
}
@Override
public NodeDescriptors localNodeDescriptors() {
return this.linkLSIdentifier.localNodeDescriptors();
}
@Override
public NodeDescriptors remoteNodeDescriptors() {
return this.linkLSIdentifier.remoteNodeDescriptors();
}
/**
* Returns whether VPN is present or not.
*
* @return whether VPN is present or not
*/
public boolean isVpnPresent() {
return this.isVpn;
}
@Override
public RouteDistinguisher getRouteDistinguisher() {
return this.routeDistinguisher;
}
/**
* Returns link identifier.
*
* @return link identifier
*/
public BGPLinkLSIdentifier getLinkIdentifier() {
return this.linkLSIdentifier;
}
@Override
public List<BGPValueType> linkDescriptors() {
return this.linkLSIdentifier.linkDescriptors();
}
@Override
public String toString() {
return MoreObjects.toStringHelper(getClass())
.omitNullValues()
.add("protocolId", protocolId)
.add("identifier", identifier)
.add("RouteDistinguisher ", routeDistinguisher)
.add("linkLSIdentifier", linkLSIdentifier)
.toString();
}
}
\ No newline at end of file