diff --git a/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java b/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
index 46599ea..0ab5ef0 100644
--- a/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
+++ b/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
@@ -689,6 +689,18 @@
         return mcastHandler.getMcastLeaders(mcastIp);
     }
 
+    @Override
+    public Map<Set<DeviceId>, NodeId> getShouldProgram() {
+        return defaultRoutingHandler == null ? ImmutableMap.of() :
+                ImmutableMap.copyOf(defaultRoutingHandler.shouldProgram);
+    }
+
+    @Override
+    public Map<DeviceId, Boolean> getShouldProgramCache() {
+        return defaultRoutingHandler == null ? ImmutableMap.of() :
+                ImmutableMap.copyOf(defaultRoutingHandler.shouldProgramCache);
+    }
+
     /**
      * Extracts the application ID from the manager.
      *
diff --git a/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingService.java b/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingService.java
index 87ba7f3..f52fad1 100644
--- a/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingService.java
+++ b/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingService.java
@@ -273,4 +273,18 @@
      * @return the mapping group-node
      */
     Map<IpAddress, NodeId> getMcastLeaders(IpAddress mcastIp);
+
+    /**
+     * Returns shouldProgram map.
+     *
+     * @return shouldProgram map
+     */
+    Map<Set<DeviceId>, NodeId> getShouldProgram();
+
+    /**
+     * Returns shouldProgram local cache.
+     *
+     * @return shouldProgram local cache
+     */
+    Map<DeviceId, Boolean> getShouldProgramCache();
 }
diff --git a/app/src/main/java/org/onosproject/segmentrouting/cli/ShouldProgramCommand.java b/app/src/main/java/org/onosproject/segmentrouting/cli/ShouldProgramCommand.java
new file mode 100644
index 0000000..43a0213
--- /dev/null
+++ b/app/src/main/java/org/onosproject/segmentrouting/cli/ShouldProgramCommand.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.segmentrouting.cli;
+
+import org.apache.karaf.shell.commands.Command;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.cluster.NodeId;
+import org.onosproject.net.DeviceId;
+import org.onosproject.segmentrouting.SegmentRoutingService;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Display current shouldProgram map.
+ */
+@Command(scope = "onos", name = "sr-should-program",
+        description = "Display current shouldProgram map")
+public class ShouldProgramCommand extends AbstractShellCommand {
+    @Override
+    protected void execute() {
+        SegmentRoutingService srService = AbstractShellCommand.get(SegmentRoutingService.class);
+        Map<Set<DeviceId>, NodeId> shouldProgram = srService.getShouldProgram();
+        Map<DeviceId, Boolean> shouldProgramCache = srService.getShouldProgramCache();
+
+        print("shouldProgram");
+        shouldProgram.forEach((k, v) -> print("%s -> %s", k, v));
+
+        print("shouldProgramCache");
+        shouldProgramCache.forEach((k, v) -> print("%s -> %s", k, v));
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index 71e80ef..1c8610a 100644
--- a/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -49,6 +49,9 @@
             <action class="org.onosproject.segmentrouting.cli.NextHopCommand"/>
         </command>
         <command>
+            <action class="org.onosproject.segmentrouting.cli.ShouldProgramCommand"/>
+        </command>
+        <command>
             <action class="org.onosproject.segmentrouting.cli.VerifyGroupsCommand"/>
             <completers>
                 <ref component-id="deviceIdCompleter"/>
