diff options
author | CNlucius <lukai1@huawei.com> | 2016-09-13 11:40:12 +0800 |
---|---|---|
committer | CNlucius <lukai1@huawei.com> | 2016-09-13 11:41:53 +0800 |
commit | b731e2f1dd0972409b136aebc7b463dd72c9cfad (patch) | |
tree | 5107d7d80c19ad8076c2c97c2b5ef8d1cf3ab903 /framework/src/onos/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerImpl.java | |
parent | ee93993458266114c29271a481ef9ce7ce621b2a (diff) |
ONOSFW-171
O/S-SFC-ONOS scenario documentation
Change-Id: I51ae1cf736ea24ab6680f8edca1b2bf5dd598365
Signed-off-by: CNlucius <lukai1@huawei.com>
Diffstat (limited to 'framework/src/onos/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerImpl.java')
-rw-r--r-- | framework/src/onos/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerImpl.java | 346 |
1 files changed, 0 insertions, 346 deletions
diff --git a/framework/src/onos/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerImpl.java b/framework/src/onos/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerImpl.java deleted file mode 100644 index e3f09f30..00000000 --- a/framework/src/onos/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerImpl.java +++ /dev/null @@ -1,346 +0,0 @@ -/* - * 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.bgp.controller.impl; - -import java.net.InetSocketAddress; -import java.net.SocketAddress; -import java.util.Collections; -import java.util.List; -import java.util.ListIterator; -import java.util.concurrent.RejectedExecutionException; - -import org.jboss.netty.channel.Channel; -import org.onlab.packet.IpAddress; -import org.onosproject.bgp.controller.BgpController; -import org.onosproject.bgp.controller.BgpPeer; -import org.onosproject.bgp.controller.BgpSessionInfo; -import org.onosproject.bgp.controller.BgpLocalRib; -import org.onosproject.bgpio.exceptions.BgpParseException; -import org.onosproject.bgpio.protocol.BgpFactories; -import org.onosproject.bgpio.protocol.BgpFactory; -import org.onosproject.bgpio.protocol.BgpLSNlri; -import org.onosproject.bgpio.protocol.BgpMessage; -import org.onosproject.bgpio.protocol.linkstate.BgpNodeLSNlriVer4; -import org.onosproject.bgpio.protocol.linkstate.BgpPrefixIPv4LSNlriVer4; -import org.onosproject.bgpio.protocol.linkstate.BgpLinkLsNlriVer4; -import org.onosproject.bgpio.protocol.linkstate.PathAttrNlriDetails; -import org.onosproject.bgpio.types.BgpValueType; -import org.onosproject.bgpio.types.MpReachNlri; -import org.onosproject.bgpio.types.MpUnReachNlri; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.base.MoreObjects; - -/** - * BGPPeerImpl implements BGPPeer, maintains peer information and store updates in RIB . - */ -public class BgpPeerImpl implements BgpPeer { - - protected final Logger log = LoggerFactory.getLogger(BgpPeerImpl.class); - - private static final String SHUTDOWN_MSG = "Worker has already been shutdown"; - - private BgpController bgpController; - private Channel channel; - protected String channelId; - private boolean connected; - protected boolean isHandShakeComplete = false; - private BgpSessionInfo sessionInfo; - private BgpPacketStatsImpl pktStats; - private BgpLocalRib bgplocalRIB; - private BgpLocalRib bgplocalRIBVpn; - private AdjRibIn adjRib; - private VpnAdjRibIn vpnAdjRib; - - /** - * Return the adjacency RIB-IN. - * - * @return adjRib the adjacency RIB-IN - */ - public AdjRibIn adjacencyRib() { - return adjRib; - } - - /** - * Return the adjacency RIB-IN with VPN. - * - * @return vpnAdjRib the adjacency RIB-IN with VPN - */ - public VpnAdjRibIn vpnAdjacencyRib() { - return vpnAdjRib; - } - - @Override - public BgpSessionInfo sessionInfo() { - return sessionInfo; - } - - /** - * Initialize peer. - * - *@param bgpController controller instance - *@param sessionInfo bgp session info - *@param pktStats packet statistics - */ - public BgpPeerImpl(BgpController bgpController, BgpSessionInfo sessionInfo, BgpPacketStatsImpl pktStats) { - this.bgpController = bgpController; - this.sessionInfo = sessionInfo; - this.pktStats = pktStats; - this.bgplocalRIB = bgpController.bgpLocalRib(); - this.bgplocalRIBVpn = bgpController.bgpLocalRibVpn(); - this.adjRib = new AdjRibIn(); - this.vpnAdjRib = new VpnAdjRibIn(); - } - - - @Override - public void buildAdjRibIn(List<BgpValueType> pathAttr) throws BgpParseException { - ListIterator<BgpValueType> iterator = pathAttr.listIterator(); - while (iterator.hasNext()) { - BgpValueType attr = iterator.next(); - if (attr instanceof MpReachNlri) { - List<BgpLSNlri> nlri = ((MpReachNlri) attr).mpReachNlri(); - callAdd(this, nlri, pathAttr); - } - if (attr instanceof MpUnReachNlri) { - List<BgpLSNlri> nlri = ((MpUnReachNlri) attr).mpUnReachNlri(); - callRemove(this, nlri); - } - } - } - - /** - * Updates NLRI identifier node in a tree separately based on afi and safi. - * - * @param peerImpl BGP peer instance - * @param nlri MpReachNlri path attribute - * @param pathAttr list of BGP path attributes - * @throws BgpParseException throws exception - */ - public void callAdd(BgpPeerImpl peerImpl, List<BgpLSNlri> nlri, List<BgpValueType> pathAttr) - throws BgpParseException { - ListIterator<BgpLSNlri> listIterator = nlri.listIterator(); - while (listIterator.hasNext()) { - BgpLSNlri nlriInfo = listIterator.next(); - if (nlriInfo instanceof BgpNodeLSNlriVer4) { - PathAttrNlriDetails details = setPathAttrDetails(nlriInfo, pathAttr); - if (!((BgpNodeLSNlriVer4) nlriInfo).isVpnPresent()) { - adjRib.add(nlriInfo, details); - bgplocalRIB.add(sessionInfo(), nlriInfo, details); - } else { - vpnAdjRib.addVpn(nlriInfo, details, ((BgpNodeLSNlriVer4) nlriInfo).getRouteDistinguisher()); - bgplocalRIBVpn.add(sessionInfo(), nlriInfo, details, - ((BgpNodeLSNlriVer4) nlriInfo).getRouteDistinguisher()); - } - } else if (nlriInfo instanceof BgpLinkLsNlriVer4) { - PathAttrNlriDetails details = setPathAttrDetails(nlriInfo, pathAttr); - if (!((BgpLinkLsNlriVer4) nlriInfo).isVpnPresent()) { - adjRib.add(nlriInfo, details); - bgplocalRIB.add(sessionInfo(), nlriInfo, details); - } else { - vpnAdjRib.addVpn(nlriInfo, details, ((BgpLinkLsNlriVer4) nlriInfo).getRouteDistinguisher()); - bgplocalRIBVpn.add(sessionInfo(), nlriInfo, details, - ((BgpLinkLsNlriVer4) nlriInfo).getRouteDistinguisher()); - } - } else if (nlriInfo instanceof BgpPrefixIPv4LSNlriVer4) { - PathAttrNlriDetails details = setPathAttrDetails(nlriInfo, pathAttr); - if (!((BgpPrefixIPv4LSNlriVer4) nlriInfo).isVpnPresent()) { - adjRib.add(nlriInfo, details); - bgplocalRIB.add(sessionInfo(), nlriInfo, details); - } else { - vpnAdjRib.addVpn(nlriInfo, details, ((BgpPrefixIPv4LSNlriVer4) nlriInfo).getRouteDistinguisher()); - bgplocalRIBVpn.add(sessionInfo(), nlriInfo, details, - ((BgpPrefixIPv4LSNlriVer4) nlriInfo).getRouteDistinguisher()); - } - } - } - } - - /** - * Sets BGP path attribute and NLRI details. - * - * @param nlriInfo MpReachNlri path attribute - * @param pathAttr list of BGP path attributes - * @return details object of PathAttrNlriDetails - * @throws BgpParseException throw exception - */ - public PathAttrNlriDetails setPathAttrDetails(BgpLSNlri nlriInfo, List<BgpValueType> pathAttr) - throws BgpParseException { - PathAttrNlriDetails details = new PathAttrNlriDetails(); - details.setProtocolID(nlriInfo.getProtocolId()); - details.setIdentifier(nlriInfo.getIdentifier()); - details.setPathAttribute(pathAttr); - return details; - } - - /** - * Removes NLRI identifier node in a tree separately based on afi and safi. - * - * @param peerImpl BGP peer instance - * @param nlri NLRI information - */ - public void callRemove(BgpPeerImpl peerImpl, List<BgpLSNlri> nlri) { - ListIterator<BgpLSNlri> listIterator = nlri.listIterator(); - while (listIterator.hasNext()) { - BgpLSNlri nlriInfo = listIterator.next(); - if (nlriInfo instanceof BgpNodeLSNlriVer4) { - if (!((BgpNodeLSNlriVer4) nlriInfo).isVpnPresent()) { - adjRib.remove(nlriInfo); - bgplocalRIB.delete(nlriInfo); - } else { - vpnAdjRib.removeVpn(nlriInfo, ((BgpNodeLSNlriVer4) nlriInfo).getRouteDistinguisher()); - bgplocalRIBVpn.delete(nlriInfo, ((BgpNodeLSNlriVer4) nlriInfo).getRouteDistinguisher()); - } - } else if (nlriInfo instanceof BgpLinkLsNlriVer4) { - if (!((BgpLinkLsNlriVer4) nlriInfo).isVpnPresent()) { - adjRib.remove(nlriInfo); - bgplocalRIB.delete(nlriInfo); - } else { - vpnAdjRib.removeVpn(nlriInfo, ((BgpLinkLsNlriVer4) nlriInfo).getRouteDistinguisher()); - bgplocalRIBVpn.delete(nlriInfo, ((BgpLinkLsNlriVer4) nlriInfo).getRouteDistinguisher()); - } - } else if (nlriInfo instanceof BgpPrefixIPv4LSNlriVer4) { - if (!((BgpPrefixIPv4LSNlriVer4) nlriInfo).isVpnPresent()) { - adjRib.remove(nlriInfo); - bgplocalRIB.delete(nlriInfo); - } else { - vpnAdjRib.removeVpn(nlriInfo, ((BgpPrefixIPv4LSNlriVer4) nlriInfo).getRouteDistinguisher()); - bgplocalRIBVpn.delete(nlriInfo, ((BgpPrefixIPv4LSNlriVer4) nlriInfo).getRouteDistinguisher()); - } - } - } - } - - /** - * Return the adjacency RIB-IN. - * - * @return adjRib the adjacency RIB-IN - */ - public AdjRibIn adjRib() { - return adjRib; - } - - /** - * Return the adjacency RIB-IN with VPN. - * - * @return vpnAdjRib the adjacency RIB-IN with VPN - */ - public VpnAdjRibIn vpnAdjRib() { - return vpnAdjRib; - } - - /** - * Update localRIB on peer disconnect. - * - */ - public void updateLocalRIBOnPeerDisconnect() { - BgpLocalRibImpl localRib = (BgpLocalRibImpl) bgplocalRIB; - BgpLocalRibImpl localRibVpn = (BgpLocalRibImpl) bgplocalRIBVpn; - - localRib.localRIBUpdate(adjacencyRib()); - localRibVpn.localRIBUpdate(vpnAdjacencyRib()); - } - - // ************************ - // Channel related - // ************************ - - @Override - public final void disconnectPeer() { - this.channel.close(); - } - - @Override - public final void sendMessage(BgpMessage m) { - log.debug("Sending message to {}", channel.getRemoteAddress()); - try { - channel.write(Collections.singletonList(m)); - this.pktStats.addOutPacket(); - } catch (RejectedExecutionException e) { - log.warn(e.getMessage()); - if (!e.getMessage().contains(SHUTDOWN_MSG)) { - throw e; - } - } - } - - @Override - public final void sendMessage(List<BgpMessage> msgs) { - try { - channel.write(msgs); - this.pktStats.addOutPacket(msgs.size()); - } catch (RejectedExecutionException e) { - log.warn(e.getMessage()); - if (!e.getMessage().contains(SHUTDOWN_MSG)) { - throw e; - } - } - } - - @Override - public final boolean isConnected() { - return this.connected; - } - - @Override - public final void setConnected(boolean connected) { - this.connected = connected; - }; - - @Override - public final void setChannel(Channel channel) { - this.channel = channel; - final SocketAddress address = channel.getRemoteAddress(); - if (address instanceof InetSocketAddress) { - final InetSocketAddress inetAddress = (InetSocketAddress) address; - final IpAddress ipAddress = IpAddress.valueOf(inetAddress.getAddress()); - if (ipAddress.isIp4()) { - channelId = ipAddress.toString() + ':' + inetAddress.getPort(); - } else { - channelId = '[' + ipAddress.toString() + "]:" + inetAddress.getPort(); - } - } - }; - - @Override - public final Channel getChannel() { - return this.channel; - }; - - @Override - public String channelId() { - return channelId; - } - - @Override - public BgpFactory factory() { - return BgpFactories.getFactory(sessionInfo.remoteBgpVersion()); - } - - @Override - public boolean isHandshakeComplete() { - return isHandShakeComplete; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()).omitNullValues() - .add("channel", channelId()) - .add("BgpId", sessionInfo().remoteBgpId()).toString(); - } -} |