From 051082c3a566973ea8d1e003fbc664e7d2017e86 Mon Sep 17 00:00:00 2001 From: Loshmitha Date: Mon, 25 Nov 2019 14:59:03 +0530 Subject: [PATCH] Enhancements in BGP module Error messages and other enhancements have been added JIRA: NETVIRT-1644 Change-Id: Icbdf7a8bf8785765dc50de9999a67dcbeba7e166 Signed-off-by: Loshmitha --- .../bgpmanager/EvpnRdNetworkListener.java | 4 +- .../netvirt/bgpmanager/VtyshCli.java | 28 +++++++--- .../netvirt/bgpmanager/commands/Bfd.java | 2 +- .../bgpmanager/commands/ClearBgpCli.java | 2 +- .../netvirt/bgpmanager/oam/BgpConstants.java | 13 +++-- .../netvirt/bgpmanager/oam/BgpCounters.java | 51 +++++++++++++++++-- .../thrift/client/BgpSyncHandle.java | 2 +- 7 files changed, 80 insertions(+), 22 deletions(-) diff --git a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/EvpnRdNetworkListener.java b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/EvpnRdNetworkListener.java index 179281933d..e3ce4494e6 100644 --- a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/EvpnRdNetworkListener.java +++ b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/EvpnRdNetworkListener.java @@ -12,6 +12,7 @@ import org.opendaylight.controller.md.sal.binding.api.ClusteredDataTreeChangeLis import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.EvpnRdToNetworks; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.evpn.rd.to.networks.EvpnRdToNetwork; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -27,7 +28,8 @@ public class EvpnRdNetworkListener extends AsyncDataTreeChangeListenerBase", "display routing bgp ipv4 unicast ", + "display routing bgp bfd neighbors details", + "display routing bgp bfd neighbors", + "display routing bgp bfd neighbors details", + "display routing bgp bfd global-config", "display routing running-config" }; @@ -102,7 +106,8 @@ public class VtyshCli extends OsgiCommandSupport { try { handleCommand(cmd); } catch (IOException ioe) { - session.getConsole().println("IOException thrown."); + session.getConsole().println("I/O error to" + serverName + ":" + + SERVER_PORT + "occured " + ioe.getMessage()); } break; default: @@ -138,10 +143,12 @@ public class VtyshCli extends OsgiCommandSupport { socket = new Socket(serverName, SERVER_PORT); } catch (UnknownHostException ioe) { - System.out.println("No host exists: " + ioe.getMessage()); + System.out.println("No host to " + serverName + ":" + + SERVER_PORT + "exists: " + ioe.getMessage()); return; } catch (IOException ioe) { - System.out.println("I/O error occured " + ioe.getMessage()); + System.out.println("I/O error to" + serverName + ":" + + SERVER_PORT + "occured " + ioe.getMessage()); return; } try { @@ -150,7 +157,8 @@ public class VtyshCli extends OsgiCommandSupport { inFromSocket = new BufferedReader(new InputStreamReader(socket.getInputStream())); } catch (IOException ioe) { - System.out.println("IOException thrown."); + System.out.println("I/O error to" + serverName + ":" + + SERVER_PORT + "occured " + ioe.getMessage()); socket.close(); return; } @@ -184,7 +192,8 @@ public class VtyshCli extends OsgiCommandSupport { ip = inFromSocket.read(); } catch (SocketTimeoutException ste) { System.out.println(sb.toString()); - System.out.println("Read from Socket timed Out while verifying the password."); + System.out.println("Socket timeout while verifying the password in" + serverName + ":" + + SERVER_PORT + "occured " + ste.getMessage()); socket.close(); return; } @@ -215,7 +224,8 @@ public class VtyshCli extends OsgiCommandSupport { ip = inFromSocket.read(); } catch (SocketTimeoutException ste) { System.out.println(sb.toString()); - System.out.println("Read from Socket timed Out while sending the term len command.."); + System.out.println("Read from socket timeout while sending term len command in" + serverName + ":" + + SERVER_PORT + "occured " + ste.getMessage()); socket.close(); return; } @@ -235,7 +245,7 @@ public class VtyshCli extends OsgiCommandSupport { String inputCmd = "show " + command; outToSocket.println(inputCmd); - StringBuilder output = new StringBuilder(); + StringBuffer output = new StringBuffer(); String errorMsg = ""; while (true) { char[] opBuf = new char[100]; @@ -246,6 +256,8 @@ public class VtyshCli extends OsgiCommandSupport { } catch (SocketTimeoutException ste) { errorMsg = "Read from Socket timed Out while getting the data."; + System.out.println("Socket timeout while getting the data in" + serverName + ":" + + SERVER_PORT + "occured " + ste.getMessage()); break; } if (ret == -1) { @@ -266,7 +278,7 @@ public class VtyshCli extends OsgiCommandSupport { } - String outputStr = temp.toString().replaceAll("^\\s", ""); + String outputStr = temp.toString(); output.append(outputStr); if (output.toString().trim().endsWith(prompt)) { int index = output.toString().lastIndexOf(prompt); diff --git a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/commands/Bfd.java b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/commands/Bfd.java index 32d56f3bc4..761909ceeb 100644 --- a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/commands/Bfd.java +++ b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/commands/Bfd.java @@ -100,7 +100,7 @@ public class Bfd extends OsgiCommandSupport { } else { mintx = Integer.parseInt(minTX); if (mintx < MIN_TX_MIN || mintx > MIN_TX_MAX) { - ps.println("error: value of TX should be between 1000 and 60000"); + ps.println("error: value of TX should be between 1000 and 4294000"); return null; } } diff --git a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/commands/ClearBgpCli.java b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/commands/ClearBgpCli.java index d1d33f96e2..1e212e1fe3 100644 --- a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/commands/ClearBgpCli.java +++ b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/commands/ClearBgpCli.java @@ -64,7 +64,7 @@ public class ClearBgpCli extends OsgiCommandSupport { try { InetAddress.getByName(nbr); } catch (UnknownHostException e) { - session.getConsole().println("Invalid neighbor ip"); + session.getConsole().println("Invalid neighbor ip :" + nbr); return null; } } diff --git a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/oam/BgpConstants.java b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/oam/BgpConstants.java index 4095b06ae9..cea13939fe 100644 --- a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/oam/BgpConstants.java +++ b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/oam/BgpConstants.java @@ -21,23 +21,26 @@ public interface BgpConstants { String BGP_COUNTER_NBR_PKTS_TX = "BgpNeighborPacketsSent"; String BGP_COUNTER_RD_ROUTE_COUNT = "BgpRdRouteCount"; String BGP_COUNTER_TOTAL_PFX = "BgpTotalPrefixes:Bgp_Total_Prefixes"; + String BGP_COUNTER_IPV4_PFX = "BgpIPV4Prefixes:Bgp_IPV4_Prefixes"; + String BGP_COUNTER_IPV6_PFX = "BgpIPV6Prefixes:Bgp_IPV6_Prefixes"; String BGP_DEF_LOG_LEVEL = "debugging"; String BGP_DEF_LOG_FILE = "/opt/quagga/var/log/quagga/zrpcd.init.log"; String BFD_COUNTER_NBR_PKTS_RX = "BfdNeighborPacketsReceived"; String BFD_COUNTER_NBR_PKTS_TX = "BfdNeighborPacketsSent"; long DEFAULT_ETH_TAG = 0L; int BGP_DEFAULT_MULTIPATH = 2; - int BFD_DEFAULT_DETECT_MULT = 3; + int BFD_DEFAULT_DETECT_MULT = 8; + String BGP_CONFIG_ENTITY = "bgp"; int BFD_DEFAULT_MIN_RX = 500; - int BFD_DEFAULT_MIN_TX = 6000; + int BFD_DEFAULT_MIN_TX = 500000; int MIN_RX_MIN = 50; int MIN_RX_MAX = 50000; int MIN_TX_MIN = 1000; - int MIN_TX_MAX = 60000; - int HISTORY_LIMIT = 10000; - int HISTORY_THRESHOLD = 7500; + int MIN_TX_MAX = 4294001; int MIN_DETECT_MULT = 2; int MAX_DETECT_MULT = 255; + int HISTORY_LIMIT = 100000; + int HISTORY_THRESHOLD = 75000; int BFD_DEFAULT_FAILURE_THRESHOLD = 0; int BFD_DEFAULT_SUCCESS_THRESHOLD = 0; } diff --git a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/oam/BgpCounters.java b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/oam/BgpCounters.java index 8f758f980a..edd0844ea0 100644 --- a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/oam/BgpCounters.java +++ b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/oam/BgpCounters.java @@ -9,6 +9,7 @@ package org.opendaylight.netvirt.bgpmanager.oam; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; @@ -48,6 +49,7 @@ public class BgpCounters implements Runnable, AutoCloseable { public static final String BGP_EVPN_SUMMARY_FILE = "cmd_bgp_evpn_all_summary.txt"; public static final String BFD_NBR_DETAIL_FILE = "cmd_bfd_neighbors_details.txt"; + // BFD related constants public static final int LINE = 1; // line where the ip address of neigbor present after "NeighbroAddr" public static final int NBR_IP_WORD_INDEX = 1; // word where the ip address is present (count start from 0) @@ -57,6 +59,8 @@ public class BgpCounters implements Runnable, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(BgpCounters.class); private final Map totalPfxMap = new ConcurrentHashMap<>(); + private final Map ipv4PfxMap = new ConcurrentHashMap<>(); + private final Map ipv6PfxMap = new ConcurrentHashMap<>(); private final String bgpSdncMip; private final MetricProvider metricProvider; @@ -130,10 +134,10 @@ public class BgpCounters implements Runnable, AutoCloseable { sb.append((char) read); break; } + } - // Enable - toRouter.println("en"); + toRouter.flush(); // Wait for '#' while ((read = fromRouter.read()) != '#') { @@ -143,8 +147,11 @@ public class BgpCounters implements Runnable, AutoCloseable { } } + // Send the command toRouter.println(cmdName); + toRouter.flush(); + // Read all the router's output sb = new StringBuilder(); @@ -164,12 +171,18 @@ public class BgpCounters implements Runnable, AutoCloseable { // Store in the file toFile.write(sb.toString().trim()); + socket.close(); + toFile.flush(); + toFile.close(); + toRouter.flush(); + toRouter.close(); + fromRouter.close(); } catch (UnknownHostException e) { LOG.info("Unknown host exception occured while socket creation {} ", bgpSdncMip); } catch (SocketTimeoutException e) { LOG.info("Socket timeout Exception occured while socket creation"); } catch (IOException e) { - LOG.info("I/O exception occured while socket creation"); + LOG.error("I/O error ip {} {}",bgpSdncMip, e.getMessage()); } } @@ -279,6 +292,11 @@ public class BgpCounters implements Runnable, AutoCloseable { i = processRouteCount(rd + "_VPNV4", i + 1, inputStrs); } } + long bgpIpv4Pfxs = calculateBgpIpv4Prefixes(); + LOG.trace("BGP IPV4 Prefixes:{}",bgpIpv4Pfxs); + Counter counter = getCounter(BgpConstants.BGP_COUNTER_IPV4_PFX, null, null, null, + null, null, "bgp-peer"); + updateCounter(counter, bgpIpv4Pfxs); } /* @@ -319,6 +337,11 @@ public class BgpCounters implements Runnable, AutoCloseable { i = processRouteCount(rd + "_VPNV6", i + 1, inputStrs); } } + long bgpIpv6Pfxs = calculateBgpIpv6Prefixes(); + LOG.trace("BGP IPV6 Prefixes:{}",bgpIpv6Pfxs); + Counter counter = getCounter(BgpConstants.BGP_COUNTER_IPV6_PFX, null, null, null, + null, null, "bgp-peer"); + updateCounter(counter, bgpIpv6Pfxs); } private void parseBgpL2vpnEvpnAll() { @@ -339,6 +362,7 @@ public class BgpCounters implements Runnable, AutoCloseable { String[] result = instr.split(":"); String rd = result[1].trim() + "_" + result[2].trim(); i = processRouteCount(rd + "_EVPN", i + 1, inputStrs); + LOG.trace("BGP Total Prefixes:{}", i); } } /*populate the "BgpTotalPrefixes" counter by combining @@ -416,7 +440,6 @@ public class BgpCounters implements Runnable, AutoCloseable { String bgpRdRouteCountKey = BgpConstants.BGP_COUNTER_RD_ROUTE_COUNT + rd; Counter counter = getCounter(BgpConstants.BGP_COUNTER_RD_ROUTE_COUNT, null, null, null, null, rd, "bgp-peer"); - for (String str = inputStrs.get(num); str != null && !str.trim().equals("") && num < inputStrs.size(); str = inputStrs.get(num)) { @@ -425,7 +448,13 @@ public class BgpCounters implements Runnable, AutoCloseable { updateCounter(counter, routeCount); return num - 1; } - routeCount++; + else if (rd.contains("VPNV4")) { + ipv4PfxMap.put(bgpRdRouteCountKey, Long.toString(++routeCount)); + updateCounter(counter, routeCount); + } else if (rd.contains("VPNV6")) { + ipv6PfxMap.put(bgpRdRouteCountKey, Long.toString(++routeCount)); + updateCounter(counter, routeCount); + } num++; if (num == inputStrs.size()) { break; @@ -442,6 +471,16 @@ public class BgpCounters implements Runnable, AutoCloseable { return num - 1; } + private Long calculateBgpIpv4Prefixes() { + return ipv4PfxMap.entrySet().stream() + .map(Map.Entry::getValue).mapToLong(Long::parseLong).sum(); + } + + private Long calculateBgpIpv6Prefixes() { + return ipv6PfxMap.entrySet().stream() + .map(Map.Entry::getValue).mapToLong(Long::parseLong).sum(); + } + private Long calculateBgpTotalPrefixes() { return totalPfxMap.entrySet().stream() .map(Map.Entry::getValue).mapToLong(Long::parseLong).sum(); @@ -449,6 +488,8 @@ public class BgpCounters implements Runnable, AutoCloseable { private void resetCounters() { totalPfxMap.clear(); + ipv6PfxMap.clear(); + ipv4PfxMap.clear(); resetFile("cmd_ip_bgp_summary.txt"); resetFile("cmd_bgp_ipv4_unicast_statistics.txt"); resetFile(BGP_VPNV4_FILE); diff --git a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/thrift/client/BgpSyncHandle.java b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/thrift/client/BgpSyncHandle.java index 6549f57711..29bea23a8c 100644 --- a/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/thrift/client/BgpSyncHandle.java +++ b/bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/thrift/client/BgpSyncHandle.java @@ -57,7 +57,7 @@ public class BgpSyncHandle { //moment, we just use 8 bytes more than the size of //the C struct. - return 96; + return 168; } public int setState(int newState) { -- 2.36.6