zebra link state detection support
diff --git a/ospfd/ospf_ase.c b/ospfd/ospf_ase.c
index 9194c56..b60aa07 100644
--- a/ospfd/ospf_ase.c
+++ b/ospfd/ospf_ase.c
@@ -154,7 +154,7 @@
 
   for (ifn = listhead (ospf_top->oiflist); ifn; nextnode (ifn))
     if ((oi = getdata (ifn)) != NULL)
-      if (if_is_up (oi->ifp))
+      if (if_is_operative (oi->ifp))
 	if (oi->type != OSPF_IFTYPE_VIRTUALLINK)
 	  if (IPV4_ADDR_SAME (&oi->address->u.prefix4, &fwd_addr))
 	    return 0;
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c
index 6d7af05..a4495e9 100644
--- a/ospfd/ospf_lsa.c
+++ b/ospfd/ospf_lsa.c
@@ -640,7 +640,7 @@
       struct interface *ifp = oi->ifp;
 
       /* Check interface is up, OSPF is enable. */
-      if (if_is_up (ifp))
+      if (if_is_operative (ifp))
 	{
 	  if (oi->state != ISM_Down)
 	    {
@@ -1391,7 +1391,7 @@
     {
       struct ospf_interface *oi = getdata (n1);
 
-      if (if_is_up (oi->ifp))
+      if (if_is_operative (oi->ifp))
 	if (oi->address->family == AF_INET)
 	  if (prefix_match (oi->address, &nh))
 	    return nexthop;
@@ -1412,7 +1412,7 @@
 
   fwd.s_addr = 0;
 
-  if (if_is_up (oi->ifp))
+  if (if_is_operative (oi->ifp))
     return oi->address->u.prefix4;
   
   return fwd;
@@ -1432,7 +1432,7 @@
     {
       struct ospf_interface *oi = getdata (n1);
 
-      if (if_is_up (oi->ifp))
+      if (if_is_operative (oi->ifp))
 	if (oi->area->external_routing == OSPF_AREA_NSSA)
 	  if (oi->address && oi->address->family == AF_INET)
 	    return (oi->address->u.prefix4 );
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index 73215fa..accf7a8 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -2526,12 +2526,11 @@
   oi_count = ospf_oi_count (ifp);
   
   /* Is interface up? */
-  if (if_is_up (ifp))
-    vty_out (vty, "%s is up, line protocol is up%s", ifp->name, VTY_NEWLINE);
-  else
-    {
-      vty_out (vty, "%s is down, line protocol is down%s", ifp->name,
-	       VTY_NEWLINE);
+  if (if_is_operative (ifp)) {
+  	vty_out (vty, "%s is up%s", ifp->name, VTY_NEWLINE);
+  } else
+  	{
+  		vty_out (vty, "%s is down%s", ifp->name, VTY_NEWLINE);
 
       
       if (oi_count == 0)
diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c
index 1ad31f2..72ffe76 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -154,6 +154,7 @@
   ifp->ifindex = stream_getl (s);
 
   /* Read interface's value. */
+  ifp->status = stream_getc (s);
   ifp->flags = stream_getl (s);
   ifp->metric = stream_getl (s);
   ifp->mtu = stream_getl (s);
@@ -175,7 +176,7 @@
     return 0;
 
   /* Interface is already up. */
-  if (if_is_up (ifp))
+  if (if_is_operative (ifp))
     {
       /* Temporarily keep ifp values. */
       memcpy (&if_tmp, ifp, sizeof (struct interface));
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index e7de8ea..e8bd360 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -761,7 +761,7 @@
 
 		ospf_area_add_if (oi->area, oi);
 
-		if (if_is_up (ifp)) 
+		if (if_is_operative (ifp)) 
 		  ospf_if_up (oi);
 
 		break;