use of org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.peers.Peer in project netvirt by opendaylight.
the class BgpConfigurationManager method extractMd5Secret.
private static String extractMd5Secret(final Neighbors val) {
String md5Secret = null;
TcpSecurityOption tcpSecOpt = val.getTcpSecurityOption();
if (tcpSecOpt != null) {
if (tcpSecOpt instanceof TcpMd5SignatureOption) {
md5Secret = ((TcpMd5SignatureOption) tcpSecOpt).getTcpMd5SignaturePassword().getValue();
} else {
// unknown TcpSecurityOption
LOG.debug("neighbors Ignored unknown tcp-security-option of peer {}", val.getAddress().getValue());
}
}
return md5Secret;
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.peers.Peer in project netvirt by opendaylight.
the class BgpConfigurationManager method replayNbrConfig.
private static boolean replayNbrConfig(List<Neighbors> neighbors, BgpRouter br) {
if (neighbors == null || neighbors.isEmpty()) {
LOG.error("Replaying nbr configuration, received NULL list ");
return true;
}
List<ReplayNbr> replayNbrList = new ArrayList<>();
for (Neighbors nbr : neighbors) {
if (nbr != null) {
replayNbrList.add(new ReplayNbr(nbr, true));
}
}
final int numberOfNbrRetries = 3;
RetryOnException nbrRetry = new RetryOnException(numberOfNbrRetries);
do {
for (ReplayNbr replayNbr : replayNbrList) {
if (!replayNbr.isShouldRetry()) {
continue;
}
boolean replayDone = false;
LOG.debug("Replaying addNbr {}", replayNbr.getNbr().getAddress().getValue());
replayDone = false;
try {
final String md5password = extractMd5Secret(replayNbr.getNbr());
br.addNeighbor(replayNbr.getNbr().getAddress().getValue(), replayNbr.getNbr().getRemoteAs().longValue(), md5password);
replayDone = true;
} catch (TApplicationException tae) {
LOG.debug("Replaying addNbr {}, tapplicationexception: ", replayNbr.getNbr().getAddress().getValue(), tae);
if (tae.getType() == BgpRouterException.BGP_ERR_PEER_EXISTS) {
LOG.debug("Replaying addNbr Neighbor already present");
replayDone = true;
} else {
LOG.error("Replaying addNbr {}, exception: ", replayNbr.getNbr().getAddress().getValue(), tae);
}
} catch (TException | BgpRouterException eNbr) {
LOG.debug("Replaying addNbr {}, exception: ", replayNbr.getNbr().getAddress().getValue(), eNbr);
}
LOG.debug("Replay addNbr {} successful", replayNbr.getNbr().getAddress().getValue());
// Update Source handling
UpdateSource us = replayNbr.getNbr().getUpdateSource();
if (us != null) {
LOG.debug("Replaying updatesource {} to peer {}", us.getSourceIp().getValue(), us.getPeerIp().getValue());
try {
br.addUpdateSource(us.getPeerIp().getValue(), us.getSourceIp().getValue());
} catch (TException | BgpRouterException eUs) {
LOG.debug("Replaying UpdateSource for Nbr {}, exception:", replayNbr.getNbr().getAddress().getValue(), eUs);
}
LOG.debug("Replay updatesource {} successful", us.getSourceIp().getValue());
}
// Ebgp Multihope
EbgpMultihop en = replayNbr.getNbr().getEbgpMultihop();
if (en != null) {
try {
br.addEbgpMultihop(en.getPeerIp().getValue(), en.getNhops().intValue());
} catch (TException | BgpRouterException eEbgpMhop) {
LOG.debug("Replaying EbgpMultihop for Nbr {}, exception: ", replayNbr.getNbr().getAddress().getValue(), eEbgpMhop);
}
}
// keyAddressFamiliesMap
Map<AddressFamiliesKey, AddressFamilies> keyAddressFamiliesMap = replayNbr.getNbr().getAddressFamilies();
if (keyAddressFamiliesMap != null) {
for (AddressFamilies af : keyAddressFamiliesMap.values()) {
af_afi afi = af_afi.findByValue(af.getAfi().intValue());
af_safi safi = af_safi.findByValue(af.getSafi().intValue());
try {
br.addAddressFamily(af.getPeerIp().getValue(), afi, safi);
} catch (TException | BgpRouterException eAFs) {
LOG.debug("Replaying AddressFamily for Nbr {}, exception:", replayNbr.getNbr().getAddress().getValue(), eAFs);
}
}
}
// replay is success --> no need to replay this nbr in next iteration.
replayNbr.setShouldRetry(replayDone ? false : true);
}
} while (nbrRetry.decrementAndRetry());
boolean replaySuccess = true;
for (ReplayNbr replayNbr : replayNbrList) {
replaySuccess = replaySuccess && !replayNbr.isShouldRetry();
if (replaySuccess == false) {
LOG.error("replayNbrConfig: will be cancelling stale cleanup, cfg nbr: {} Failed:", replayNbr.getNbr().getAddress().getValue());
}
}
return replaySuccess;
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.peers.Peer in project netvirt by opendaylight.
the class BgpManager method getAllPeerStatus.
public void getAllPeerStatus() {
Map<NeighborsKey, Neighbors> keyNeighborsMap = null;
Bgp bgp = getConfig();
if (bgp != null && bgp.getNeighborsContainer() != null) {
keyNeighborsMap = bgp.getNeighborsContainer().getNeighbors();
} else {
LOG.error("BGP Neighbor configuration NOT exist");
return;
}
if (keyNeighborsMap == null) {
return;
}
for (Neighbors nbr : keyNeighborsMap.values()) {
try {
LOG.trace("nbr {} checking status, AS num: {}", nbr.getAddress().getValue(), nbr.getRemoteAs());
bcm.getPeerStatus(nbr.getAddress().getValue(), nbr.getRemoteAs().toJava());
LOG.trace("nbr {} status is: PEER UP", nbr.getAddress().getValue());
} catch (BgpRouterException bre) {
if (bre.getErrorCode() == BgpRouterException.BGP_PEER_DOWN) {
LOG.trace("nbr {} status is: DOWN", nbr.getAddress().getValue());
} else if (bre.getErrorCode() == BgpRouterException.BGP_PEER_NOTCONFIGURED) {
LOG.trace("nbr {} status is: NOT CONFIGURED", nbr.getAddress().getValue());
} else if (bre.getErrorCode() == BgpRouterException.BGP_PEER_UNKNOWN) {
LOG.info("nbr {} status is: Unknown", nbr.getAddress().getValue());
} else {
LOG.info("nbr {} status is: Unknown, invalid BgpRouterException:", nbr.getAddress().getValue(), bre);
}
} catch (TException tae) {
LOG.error("nbr {} status is: Unknown, received TException ", nbr.getAddress().getValue(), tae);
}
}
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.peers.Peer in project netvirt by opendaylight.
the class BgpAlarms method processNeighborStatusMap.
private void processNeighborStatusMap(Map<String, String> nbrStatusMap, List<Neighbors> nbrs) {
if (nbrs == null || nbrs.isEmpty()) {
LOG.trace("No BGP neighbors configured.");
return;
}
LOG.debug("Fetching neighbor status' from BGP, #of neighbors: {}", nbrList.size());
for (Neighbors nbr : nbrList) {
boolean alarmToRaise = false;
try {
LOG.trace("nbr {} checking status, AS num: {}", nbr.getAddress().getValue(), nbr.getRemoteAs());
bgpMgr.getPeerStatus(nbr.getAddress().getValue(), nbr.getRemoteAs().longValue());
LOG.trace("nbr {} status is: PEER UP", nbr.getAddress().getValue());
} catch (BgpRouterException bre) {
if (bre.getErrorCode() == BgpRouterException.BGP_PEER_DOWN) {
LOG.error("nbr {} status is: DOWN", nbr.getAddress().getValue());
alarmToRaise = true;
} else if (bre.getErrorCode() == BgpRouterException.BGP_PEER_NOTCONFIGURED) {
LOG.info("nbr {} status is: NOT CONFIGURED", nbr.getAddress().getValue());
} else if (bre.getErrorCode() == BgpRouterException.BGP_PEER_UNKNOWN) {
LOG.info("nbr {} status is: Unknown", nbr.getAddress().getValue());
} else {
LOG.info("nbr {} status is: Unknown, invalid BgpRouterException: ", nbr.getAddress().getValue(), bre);
}
} catch (TException tae) {
LOG.error("nbr {} status is: Unknown, received TException: ", nbr.getAddress().getValue(), tae);
}
final BgpAlarmStatus alarmStatus = neighborsRaisedAlarmStatusMap.get(nbr.getAddress().getValue());
if (alarmToRaise) {
if (alarmStatus == null || alarmStatus != BgpAlarmStatus.RAISED) {
LOG.trace("alarm raised for {}.", nbr.getAddress().getValue());
raiseBgpNbrDownAlarm(nbr.getAddress().getValue());
} else {
LOG.trace("alarm raised already for {}", nbr.getAddress().getValue());
}
} else {
if (alarmStatus == null || alarmStatus != BgpAlarmStatus.CLEARED) {
clearBgpNbrDownAlarm(nbr.getAddress().getValue());
LOG.trace("alarm cleared for {}", nbr.getAddress().getValue());
} else {
LOG.trace("alarm cleared already for {}", nbr.getAddress().getValue());
}
}
}
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.peers.Peer in project bgpcep by opendaylight.
the class BmpMonitorImplTest method testMonitoringStation.
private Channel testMonitoringStation(final String remoteRouterIpAddr) throws InterruptedException, ExecutionException {
final Channel channel = connectTestClient(remoteRouterIpAddr, msgRegistry);
final RouterId routerId = getRouterId(remoteRouterIpAddr);
readDataOperational(getDataBroker(), MONITOR_IID, monitor -> {
// now find the current router instance
Router router = null;
for (final Router r : monitor.nonnullRouter().values()) {
if (routerId.equals(r.getRouterId())) {
router = r;
break;
}
}
assertNotNull(router);
assertEquals(Status.Down, router.getStatus());
assertNull(router.getPeer());
return router;
});
waitWriteAndFlushSuccess(channel.writeAndFlush(TestUtil.createInitMsg("description", "name", "some info")));
readDataOperational(getDataBroker(), MONITOR_IID, monitor -> {
Router retRouter = null;
for (final Router r : monitor.nonnullRouter().values()) {
if (routerId.equals(r.getRouterId())) {
retRouter = r;
break;
}
}
assertNotNull(retRouter);
assertEquals("some info;", retRouter.getInfo());
assertEquals("name", retRouter.getName());
assertEquals("description", retRouter.getDescription());
assertEquals(routerId, retRouter.getRouterId());
assertNull(retRouter.getPeer());
assertEquals(Status.Up, retRouter.getStatus());
return retRouter;
});
waitWriteAndFlushSuccess(channel.writeAndFlush(TestUtil.createPeerUpNotification(PEER1, true)));
final KeyedInstanceIdentifier<Router, RouterKey> routerIId = MONITOR_IID.child(Router.class, new RouterKey(routerId));
readDataOperational(getDataBroker(), routerIId, router -> {
final Map<PeerKey, Peer> peers = router.getPeer();
assertNotNull(peers);
assertEquals(1, peers.size());
final Peer peer = peers.values().iterator().next();
assertEquals(PeerType.Global, peer.getType());
assertEquals(PEER_ID, peer.getPeerId());
assertEquals(PEER1, peer.getBgpId());
assertEquals(TestUtil.IPV4_ADDRESS_10, peer.getAddress().getIpv4AddressNoZone());
assertEquals(TestUtil.PEER_AS, peer.getAs());
assertNull(peer.getPeerDistinguisher());
assertNull(peer.getStats());
assertNotNull(peer.getPrePolicyRib());
assertEquals(1, peer.getPrePolicyRib().nonnullTables().size());
final Tables prePolicyTable = peer.getPrePolicyRib().nonnullTables().values().iterator().next();
assertEquals(Ipv4AddressFamily.class, prePolicyTable.getAfi());
assertEquals(UnicastSubsequentAddressFamily.class, prePolicyTable.getSafi());
assertFalse(prePolicyTable.getAttributes().getUptodate());
assertNotNull(peer.getPostPolicyRib());
assertEquals(1, peer.getPostPolicyRib().nonnullTables().size());
final Tables postPolicyTable = peer.getPrePolicyRib().nonnullTables().values().iterator().next();
assertEquals(Ipv4AddressFamily.class, postPolicyTable.getAfi());
assertEquals(UnicastSubsequentAddressFamily.class, postPolicyTable.getSafi());
assertFalse(postPolicyTable.getAttributes().getUptodate());
assertNotNull(peer.getPeerSession());
final PeerSession peerSession = peer.getPeerSession();
assertEquals(TestUtil.IPV4_ADDRESS_10, peerSession.getLocalAddress().getIpv4AddressNoZone());
assertEquals(TestUtil.PEER_LOCAL_PORT, peerSession.getLocalPort());
assertEquals(TestUtil.PEER_REMOTE_PORT, peerSession.getRemotePort());
assertEquals(Status.Up, peerSession.getStatus());
assertNotNull(peerSession.getReceivedOpen());
assertNotNull(peerSession.getSentOpen());
return router;
});
final StatsReportsMessage statsMsg = TestUtil.createStatsReportMsg(PEER1);
waitWriteAndFlushSuccess(channel.writeAndFlush(statsMsg));
final KeyedInstanceIdentifier<Peer, PeerKey> peerIId = routerIId.child(Peer.class, new PeerKey(PEER_ID));
readDataOperational(getDataBroker(), peerIId.child(Stats.class), peerStats -> {
assertNotNull(peerStats.getTimestampSec());
final Tlvs tlvs = statsMsg.getTlvs();
assertEquals(tlvs.getAdjRibsInRoutesTlv().getCount(), peerStats.getAdjRibsInRoutes());
assertEquals(tlvs.getDuplicatePrefixAdvertisementsTlv().getCount(), peerStats.getDuplicatePrefixAdvertisements());
assertEquals(tlvs.getDuplicateWithdrawsTlv().getCount(), peerStats.getDuplicateWithdraws());
assertEquals(tlvs.getInvalidatedAsConfedLoopTlv().getCount(), peerStats.getInvalidatedAsConfedLoop());
assertEquals(tlvs.getInvalidatedAsPathLoopTlv().getCount(), peerStats.getInvalidatedAsPathLoop());
assertEquals(tlvs.getInvalidatedClusterListLoopTlv().getCount(), peerStats.getInvalidatedClusterListLoop());
assertEquals(tlvs.getInvalidatedOriginatorIdTlv().getCount(), peerStats.getInvalidatedOriginatorId());
assertEquals(tlvs.getLocRibRoutesTlv().getCount(), peerStats.getLocRibRoutes());
assertEquals(tlvs.getRejectedPrefixesTlv().getCount(), peerStats.getRejectedPrefixes());
assertEquals(tlvs.getPerAfiSafiAdjRibInTlv().getCount().toString(), peerStats.getPerAfiSafiAdjRibInRoutes().nonnullAfiSafi().values().iterator().next().getCount().toString());
assertEquals(tlvs.getPerAfiSafiLocRibTlv().getCount().toString(), peerStats.getPerAfiSafiLocRibRoutes().nonnullAfiSafi().values().iterator().next().getCount().toString());
return peerStats;
});
// route mirror message test
final RouteMirroringMessage routeMirrorMsg = TestUtil.createRouteMirrorMsg(PEER1);
waitWriteAndFlushSuccess(channel.writeAndFlush(routeMirrorMsg));
readDataOperational(getDataBroker(), peerIId.child(Mirrors.class), routeMirrors -> {
assertNotNull(routeMirrors.getTimestampSec());
return routeMirrors;
});
waitWriteAndFlushSuccess(channel.writeAndFlush(createRouteMonitMsg(false, PEER1, AdjRibInType.PrePolicy)));
waitWriteAndFlushSuccess(channel.writeAndFlush(createRouteMonMsgWithEndOfRibMarker(PEER1, AdjRibInType.PrePolicy)));
readDataOperational(getDataBroker(), peerIId.child(PrePolicyRib.class), prePolicyRib -> {
assertFalse(prePolicyRib.nonnullTables().isEmpty());
final Tables tables = prePolicyRib.nonnullTables().values().iterator().next();
assertTrue(tables.getAttributes().getUptodate());
assertEquals(3, ((Ipv4RoutesCase) tables.getRoutes()).getIpv4Routes().nonnullIpv4Route().size());
return tables;
});
waitWriteAndFlushSuccess(channel.writeAndFlush(createRouteMonitMsg(false, PEER1, AdjRibInType.PostPolicy)));
waitWriteAndFlushSuccess(channel.writeAndFlush(createRouteMonMsgWithEndOfRibMarker(PEER1, AdjRibInType.PostPolicy)));
readDataOperational(getDataBroker(), peerIId.child(PostPolicyRib.class), postPolicyRib -> {
assertFalse(postPolicyRib.nonnullTables().isEmpty());
final Tables tables = postPolicyRib.nonnullTables().values().iterator().next();
assertTrue(tables.getAttributes().getUptodate());
assertEquals(3, ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.bmp.monitor.monitor.router.peer.post.policy.rib.tables.routes.Ipv4RoutesCase) tables.getRoutes()).getIpv4Routes().nonnullIpv4Route().size());
return tables;
});
waitWriteAndFlushSuccess(channel.writeAndFlush(TestUtil.createPeerDownNotification(PEER1)));
readDataOperational(getDataBroker(), routerIId, router -> {
assertNull(router.getPeer());
return router;
});
return channel;
}
Aggregations