Fixed CLI router command
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
index cb5fa32..668ceaa 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -31,6 +31,7 @@
 import net.floodlightcontroller.util.MACAddress;
 import net.onrc.onos.api.packet.IPacketListener;
 import net.onrc.onos.api.packet.IPacketService;
+import net.onrc.onos.apps.segmentrouting.web.SegmentRoutingWebRoutable;
 import net.onrc.onos.core.flowprogrammer.IFlowPusherService;
 import net.onrc.onos.core.intent.Path;
 import net.onrc.onos.core.main.config.IConfigInfoService;
@@ -69,6 +70,7 @@
 import net.onrc.onos.core.util.Dpid;
 import net.onrc.onos.core.util.IPv4Net;
 import net.onrc.onos.core.util.SwitchPort;
+import net.floodlightcontroller.restserver.IRestApiService;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -88,7 +90,7 @@
     private IPacketService packetService;
     private MutableTopology mutableTopology;
     private ConcurrentLinkedQueue<IPv4> ipPacketQueue;
-
+    private IRestApiService restApi;
     private List<ArpEntry> arpEntries;
     private ArpHandler arpHandler;
     private GenericIpHandler ipHandler;
@@ -105,9 +107,6 @@
     private ConcurrentLinkedQueue<TopologyEvents> topologyEventQueue;
     private HashMap<Integer, HashMap<String, PolicyRouteInfo>> stitchInfo;
     private HashMap<Integer, HashMap<String, Integer>> tunnelGroupMap;
-    private HashMap<Integer, PolicyInfo> policyTable;
-
-    private int testMode = 0;
 
     private int numOfEvents = 0;
     private int numOfEventProcess = 0;
@@ -116,11 +115,6 @@
     private final int DELAY_TO_ADD_LINK = 10;
     private final int MAX_NUM_LABELS = 3;
 
-    private final int POLICY_ADD1 = 1;
-    private final int POLICY_ADD2 = 2;
-    private final int POLICY_REMOVE1 = 3;
-    private final int POLICY_REMOVE2 = 4;
-
     @Override
     public Collection<Class<? extends IFloodlightService>> getModuleServices() {
         // TODO Auto-generated method stub
@@ -143,6 +137,7 @@
         l.add(IPacketService.class);
         l.add(IFlowPusherService.class);
         l.add(ITopologyService.class);
+        l.add(IRestApiService.class);
 
         return l;
 
@@ -166,7 +161,7 @@
         stitchInfo = new HashMap<Integer, HashMap<String, PolicyRouteInfo>>();
         packetService = context.getServiceImpl(IPacketService.class);
         tunnelGroupMap = new HashMap<Integer, HashMap<String, Integer>>();
-        policyTable = new HashMap<Integer, PolicyInfo>();
+        restApi = context.getServiceImpl(IRestApiService.class);
 
         packetService.registerPacketListener(this);
         topologyService.addListener(this, false);
@@ -177,6 +172,7 @@
     @Override
     public void startUp(FloodlightModuleContext context) throws FloodlightModuleException {
         ScheduledExecutorService ses = threadPool.getScheduledExecutor();
+        restApi.addRestletRoutable(new SegmentRoutingWebRoutable());
 
         discoveryTask = new SingletonTask(ses, new Runnable() {
             @Override
@@ -199,11 +195,11 @@
             }
         });
 
-        //policy routing test task
-        testMode = POLICY_ADD1;
-        testTask.reschedule(20, TimeUnit.SECONDS);
+        // policy routing test task
+        //testTask.reschedule(20, TimeUnit.SECONDS);
     }
 
+
     @Override
     public void receive(Switch sw, Port inPort, Ethernet payload) {
         if (payload.getEtherType() == Ethernet.TYPE_ARP)
@@ -683,6 +679,7 @@
 
     }
 
+
     /**
      * This class is used only for link recovery optimization in
      * modifyEcmpRoutingRules() function.
@@ -1160,60 +1157,46 @@
         return true;
     }
 
-    public void removeTunnel(int tunnelId) {
-
-    }
-
-
-    class PolicyInfo {
-
-        int policyId;
-        PacketMatch match;
-        int priority;
-        int tunnelId;
-
-        PolicyInfo(int pid, PacketMatch match, int priority, int tid) {
-            this.policyId = pid;
-            this.match = match;
-            this.priority = priority;
-            this.tunnelId = tid;
-        }
-    }
-
     /**
      * Set policy table for policy routing
      *
      * @param sw
      * @param mplsLabel
      */
-    public void setPolicyTable(int pid, MACAddress srcMac, MACAddress dstMac,
+    public void setPolicyTable(MACAddress srcMac, MACAddress dstMac,
             Short etherType, IPv4Net srcIp, IPv4Net dstIp, Byte ipProto,
-            Short srcTcpPort, Short dstTcpPort, int priority, int tid) {
+            Short srcTcpPort, Short dstTcpPort, int tid) {
 
         HashMap<String, PolicyRouteInfo> routeInfo = stitchInfo.get(Integer.valueOf(tid));
         HashMap<String, Integer> switchGroupPair = tunnelGroupMap.get(Integer.valueOf(tid));
-
-        PacketMatchBuilder packetBuilder = new PacketMatchBuilder();
-
-        if (srcMac != null)
-            packetBuilder.setSrcMac(srcMac);
-        if (dstMac != null)
-            packetBuilder.setDstMac(dstMac);
-        if (etherType != null)
-            packetBuilder.setEtherType(etherType);
-        if (srcIp != null)
-            packetBuilder.setSrcIp(srcIp.address(), srcIp.prefixLen());
-        if (dstIp != null)
-            packetBuilder.setDstIp(dstIp.address(), dstIp.prefixLen());
-        if (ipProto != null)
-            packetBuilder.setIpProto(ipProto);
-        if (srcTcpPort > 0)
-            packetBuilder.setSrcTcpPort(srcTcpPort);
-        if (dstTcpPort > 0)
-            packetBuilder.setDstTcpPort(dstTcpPort);
-        PacketMatch packetMatch = packetBuilder.build();
-
         for (String srcDpid: routeInfo.keySet()) {
+
+            PacketMatchBuilder packetBuilder = new PacketMatchBuilder();
+
+            if (srcMac != null)
+                packetBuilder.setSrcMac(srcMac);
+            if (dstMac != null)
+                packetBuilder.setDstMac(dstMac);
+            if (etherType != null) {
+                packetBuilder.setEtherType(etherType);
+            }
+            if (srcIp != null) {
+                packetBuilder.setSrcIp(srcIp.address(), srcIp.prefixLen());
+            }
+            if (dstIp != null) {
+                packetBuilder.setDstIp(dstIp.address(), dstIp.prefixLen());
+            }
+            if (ipProto != null) {
+                packetBuilder.setIpProto(ipProto);
+            }
+            if (srcTcpPort > 0) {
+                packetBuilder.setSrcTcpPort(srcTcpPort);
+            }
+            if (dstTcpPort > 0) {
+                packetBuilder.setDstTcpPort(dstTcpPort);
+            }
+            PacketMatch policyMatch = packetBuilder.build();
+
             List<Action> actions = new ArrayList<>();
             GroupAction groupAction = new GroupAction();
             int gropuId = switchGroupPair.get(srcDpid);
@@ -1222,8 +1205,7 @@
 
             MatchAction matchAction = new MatchAction(new MatchActionId(
                     matchActionId++),
-                    new SwitchPort((long) 0, (short) 0), packetMatch, priority,
-                    actions);
+                    new SwitchPort((long) 0, (short) 0), policyMatch, actions);
             MatchActionOperationEntry maEntry =
                     new MatchActionOperationEntry(Operator.ADD, matchAction);
 
@@ -1236,68 +1218,9 @@
                     sw13.pushFlow(maEntry);
                 } catch (IOException e) {
                     e.printStackTrace();
-                    log.debug("Policy was not set due to pushFlow() error");
                 }
             }
         }
-
-        PolicyInfo policyInfo = new PolicyInfo(pid, packetMatch, priority, tid);
-        policyTable.put(Integer.valueOf(pid), policyInfo);
-    }
-
-    /**
-     * Remove all policies applied to specific tunnel.
-     *
-     * @param srcMac
-     * @param dstMac
-     * @param etherType
-     * @param srcIp
-     * @param dstIp
-     * @param ipProto
-     * @param srcTcpPort
-     * @param dstTcpPort
-     * @param tid
-     */
-    public void removePolicy(int pid) {
-
-        PolicyInfo policyInfo =  policyTable.get(Integer.valueOf(pid));
-        PacketMatch policyMatch = policyInfo.match;
-        int tid = policyInfo.tunnelId;
-        int priority = policyInfo.priority;
-
-        List<Action> actions = new ArrayList<>();
-        int gropuId = 0; // dummy group ID
-        GroupAction groupAction = new GroupAction();
-        groupAction.setGroupId(gropuId);
-        actions.add(groupAction);
-
-        MatchAction matchAction = new MatchAction(new MatchActionId(
-                matchActionId++),
-                new SwitchPort((long) 0, (short) 0), policyMatch, priority,
-                actions);
-        MatchActionOperationEntry maEntry =
-                new MatchActionOperationEntry(Operator.REMOVE, matchAction);
-
-        HashMap<String, Integer> groupInfo = tunnelGroupMap.get(
-                Integer.valueOf(tid));
-
-        for (String dpid: groupInfo.keySet()) {
-            IOF13Switch sw13 = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                    getSwId(dpid));
-
-            if (sw13 != null) {
-                printMatchActionOperationEntry(sw13, maEntry);
-                try {
-                    sw13.pushFlow(maEntry);
-                } catch (IOException e) {
-                    e.printStackTrace();
-                    log.debug("policy remove failed due to pushFlow() exception");
-                    return;
-                }
-            }
-        }
-
-        log.debug("Policy {} is removed.", pid);
     }
 
     /**
@@ -1382,60 +1305,19 @@
 
     private void runTest() {
 
-        if (testMode == POLICY_ADD1) {
-            String[] routeArray = {"101", "105", "110"};
-            List<String> routeList = new ArrayList<String>();
-            for (int i = 0; i < routeArray.length; i++)
-                routeList.add(routeArray[i]);
+        String[] routeArray = {"101", "102", "103", "104", "105", "108", "110"};
+        List<String> routeList = new ArrayList<String>();
+        for (int i = 0; i < routeArray.length; i++)
+            routeList.add(routeArray[i]);
 
-            if (createTunnel(1, routeList)) {
-                IPv4Net srcIp = new IPv4Net("10.0.1.1/24");
-                IPv4Net dstIp = new IPv4Net("10.1.2.1/24");
+        if (createTunnel(1, routeList)) {
+            IPv4Net srcIp = new IPv4Net("10.0.1.1/24");
+            IPv4Net dstIp = new IPv4Net("10.1.2.1/24");
 
-                log.debug("Set the policy 1");
-                this.setPolicyTable(1, null, null, Ethernet.TYPE_IPV4, srcIp,
-                        dstIp, IPv4.PROTOCOL_ICMP, (short)-1, (short)-1, 10000,
-                        1);
-                testMode = POLICY_ADD2;
-                testTask.reschedule(10, TimeUnit.SECONDS);
-            }
-            else {
-                // retry it
-                testTask.reschedule(5, TimeUnit.SECONDS);
-            }
+            this.setPolicyTable(null, null, Ethernet.TYPE_IPV4, srcIp, dstIp, IPv4.PROTOCOL_ICMP, (short)-1, (short)-1, 1);
         }
-        else if (testMode == POLICY_ADD2) {
-            String[] routeArray = {"101", "102", "103", "104", "105", "108",
-                    "110"};
-            List<String> routeList = new ArrayList<String>();
-            for (int i = 0; i < routeArray.length; i++)
-                routeList.add(routeArray[i]);
-
-            if (createTunnel(2, routeList)) {
-                IPv4Net srcIp = new IPv4Net("10.0.1.1/24");
-                IPv4Net dstIp = new IPv4Net("10.1.2.1/24");
-
-                log.debug("Set the policy 2");
-                this.setPolicyTable(2, null, null, Ethernet.TYPE_IPV4, srcIp,
-                        dstIp, IPv4.PROTOCOL_ICMP, (short)-1, (short)-1, 20000,
-                        2);
-                testMode = POLICY_REMOVE1;
-                testTask.reschedule(10, TimeUnit.SECONDS);
-            }
-            else {
-                log.debug("Retry it");
-                testTask.reschedule(5, TimeUnit.SECONDS);
-            }
-        }
-        else if (testMode == POLICY_REMOVE1){
-            log.debug("Remove the policy 1");
-            this.removePolicy(2);
-            testMode = POLICY_REMOVE2;
-            testTask.reschedule(10, TimeUnit.SECONDS);
-        }
-        else if (testMode == POLICY_REMOVE2) {
-            log.debug("Remove the policy 2");
-            this.removePolicy(1);
+        else {
+            testTask.reschedule(5, TimeUnit.SECONDS);
         }
     }
 
@@ -1509,9 +1391,7 @@
 
     }
 
-    /**
-     * Strore policy routing info
-     */
+
     class PolicyRouteInfo {
 
         String srcSwDpid;
@@ -1552,6 +1432,7 @@
         }
     }
 
+
     /**
      *
      *
@@ -1669,6 +1550,8 @@
 
     }
 
+
+
     /**
      * Debugging function to print out the Match Action Entry
      * @param sw13
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPortInfo.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPortInfo.java
index a25d4de..73c1334 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPortInfo.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPortInfo.java
@@ -13,12 +13,10 @@
 public class SegmentRouterPortInfo {
     //TODO set attributes to private and provide setter and getter.
     public String subnetIp= null;
-    //private int portNo;
     public Port  port = null;
     
     public SegmentRouterPortInfo(String ssubnets, Port pport){
         this.port = pport;
-        //this.portNo = portNo;
         this.subnetIp = ssubnets;
     }