cord-646, Addressed the Comments for Patch set1

Change-Id: I2a77b86e2fe4c28fb72c807e7903569ff530030f
diff --git a/apps/routing/src/main/java/org/onosproject/routing/impl/ControlPlaneRedirectManager.java b/apps/routing/src/main/java/org/onosproject/routing/impl/ControlPlaneRedirectManager.java
index c276158..90d0905 100644
--- a/apps/routing/src/main/java/org/onosproject/routing/impl/ControlPlaneRedirectManager.java
+++ b/apps/routing/src/main/java/org/onosproject/routing/impl/ControlPlaneRedirectManager.java
@@ -67,6 +67,7 @@
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkState;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -566,11 +567,41 @@
                 2000 * prefix.prefixLength() + MIN_IP_PRIORITY :
                 500 * prefix.prefixLength() + MIN_IP_PRIORITY;
     }
+
+    /**
+     * Update the flows comparing previous event and current event.
+     *
+     * @param prevIntf the previous interface event
+     * @param intf the current occured update envent
+     **/
+    private void updateInterface(Interface prevIntf, Interface intf) {
+        if (!prevIntf.vlan().equals(intf.vlan()) || !prevIntf.mac().equals(intf)) {
+            removeInterface(prevIntf);
+            provisionInterface(intf);
+        } else {
+            List<InterfaceIpAddress> removeIps =
+                    prevIntf.ipAddressesList().stream()
+                    .filter(pre -> !intf.ipAddressesList().contains(pre))
+                    .collect(Collectors.toList());
+            List<InterfaceIpAddress> addIps =
+                    intf.ipAddressesList().stream()
+                    .filter(cur -> !prevIntf.ipAddressesList().contains(cur))
+                    .collect(Collectors.toList());
+            // removing flows with match parameters present in previous subject
+            modifyBasicInterfaceForwarding(new Interface(prevIntf.name(), prevIntf.connectPoint(),
+                    removeIps, prevIntf.mac(), prevIntf.vlan()), false);
+            // adding flows with match parameters present in event subject
+            modifyBasicInterfaceForwarding(new Interface(intf.name(), intf.connectPoint(),
+                    addIps, intf.mac(), intf.vlan()), true);
+        }
+    }
+
     private class InternalInterfaceListener implements InterfaceListener {
 
         @Override
         public void event(InterfaceEvent event) {
              Interface intf = event.subject();
+             Interface prevIntf = event.prevSubject();
                 switch (event.type()) {
                 case INTERFACE_ADDED:
                     if (intf != null && !intf.connectPoint().equals(controlPlaneConnectPoint)) {
@@ -578,6 +609,9 @@
                     }
                     break;
                 case INTERFACE_UPDATED:
+                    if (intf != null && !intf.connectPoint().equals(controlPlaneConnectPoint)) {
+                        updateInterface(prevIntf, intf);
+                    }
                     break;
                 case INTERFACE_REMOVED:
                     if (intf != null && !intf.connectPoint().equals(controlPlaneConnectPoint)) {