From 7db90b541184b41873e10beaaa457d8812e8631e Mon Sep 17 00:00:00 2001
From: Vishnu Emmadi <vishnu.emmadi@bigswitch.com>
Date: Wed, 12 Jun 2013 18:37:20 -0700
Subject: [PATCH] Updated show controller-node <> summary to include switches,
 hosts, tenants & virtual routers

---
 .../core/internal/Controller.java                  | 14 +++++++++++++-
 .../devicemanager/internal/DeviceManagerImpl.java  |  1 +
 .../internal/LinkDiscoveryManager.java             | 14 ++++++++++----
 3 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index 9f2d5ded1..6bfd413d3 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -126,7 +126,7 @@ import com.bigswitch.floodlight.vendor.OFVendorActions;
  * The main controller class.  Handles all setup and network listeners
  */
 public class Controller implements IFloodlightProviderService,
-            IStorageSourceListener {
+            IStorageSourceListener, IInfoProvider {
 
     protected static final Logger log = LoggerFactory.getLogger(Controller.class);
     protected static final INotificationManager notifier =
@@ -2361,6 +2361,8 @@ public class Controller implements IFloodlightProviderService,
             throw new FloodlightModuleException(e.getMessage());
         }
 
+        addInfoProvider("summary", this);
+
         registerControllerDebugEvents();
     }
 
@@ -2703,4 +2705,14 @@ public class Controller implements IFloodlightProviderService,
     IStoreListener<Long> getStoreListener() {
         return this.switchManager;
     }
+
+    @Override
+    public Map<String, Object> getInfo(String type) {
+        if (!"summary".equals(type)) return null;
+
+        Map<String, Object> info = new HashMap<String, Object>();
+
+        info.put("# Switches", this.getAllSwitchDpids().size());
+        return info;
+    }
 }
diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
index ddc4e77fd..5223fb6ed 100755
--- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
+++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
@@ -899,6 +899,7 @@ IFlowReconcileListener, IInfoProvider {
         } catch (SyncException e) {
             throw new FloodlightModuleException("Error while setting up sync service", e);
         }
+        floodlightProvider.addInfoProvider("summary", this);
     }
 
     private void registerDeviceManagerDebugCounters() throws FloodlightModuleException {
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
index 6bf90514d..fe9be26b1 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
@@ -2261,10 +2261,16 @@ public class LinkDiscoveryManager implements IOFMessageListener,
 
         Map<String, Object> info = new HashMap<String, Object>();
 
-        int num_links = 0;
-        for (Set<Link> links : switchLinks.values())
-            num_links += links.size();
-        info.put("# inter-switch links", num_links / 2);
+        int numDirectLinks = 0;
+        for (Set<Link> links : switchLinks.values()) {
+            for (Link link : links) {
+                LinkInfo linkInfo = this.getLinkInfo(link);
+                if (linkInfo.getLinkType() == LinkType.DIRECT_LINK) {
+                    numDirectLinks++;
+                }
+            }
+        }
+        info.put("# inter-switch links", numDirectLinks / 2);
         info.put("# quarantine ports", quarantineQueue.size());
         return info;
     }
-- 
GitLab