New way to handle secondary addresses from Gilad Arnold.
diff --git a/zebra/connected.c b/zebra/connected.c
index 21af3e9..df0b56a 100644
--- a/zebra/connected.c
+++ b/zebra/connected.c
@@ -32,6 +32,7 @@
 
 #include "zebra/zserv.h"
 #include "zebra/redistribute.h"
+#include "zebra/interface.h"
 
 /* If same interface address is already exist... */
 struct connected *
@@ -136,6 +137,8 @@
   /* Update interface address information to protocol daemon. */
   if (! CHECK_FLAG (ifc->conf, ZEBRA_IFC_REAL))
     {
+      if_subnet_add (ifp, ifc);
+
       SET_FLAG (ifc->conf, ZEBRA_IFC_REAL);
 
       zebra_interface_address_add_update (ifp, ifc);
@@ -203,16 +206,15 @@
     {
       zebra_interface_address_delete_update (ifp, ifc);
 
+      if_subnet_delete (ifp, ifc);
+
       connected_down_ipv4 (ifp, ifc);
 
       UNSET_FLAG (ifc->conf, ZEBRA_IFC_REAL);
     }
 
-  if (! CHECK_FLAG (ifc->conf, ZEBRA_IFC_CONFIGURED))
-    {
-      listnode_delete (ifp->connected, ifc);
-      connected_free (ifc);
-    }
+  listnode_delete (ifp->connected, ifc);
+  connected_free (ifc);
 }
 
 #ifdef HAVE_IPV6
@@ -389,10 +391,7 @@
       UNSET_FLAG (ifc->conf, ZEBRA_IFC_REAL);
     }
 
-  if (! CHECK_FLAG (ifc->conf, ZEBRA_IFC_CONFIGURED))
-    {
-      listnode_delete (ifp->connected, ifc);
-      connected_free (ifc);
-    }
+  listnode_delete (ifp->connected, ifc);
+  connected_free (ifc);
 }
 #endif /* HAVE_IPV6 */