Route (reject|blackhole) support from 6Wind patch.
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index 1c38190..74edfbb 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -305,22 +305,6 @@
 }
 #endif /* HAVE_IPV6 */
 
-
-struct nexthop *
-nexthop_blackhole_add (struct rib *rib)
-{
-  struct nexthop *nexthop;
-
-  nexthop = XMALLOC (MTYPE_NEXTHOP, sizeof (struct nexthop));
-  memset (nexthop, 0, sizeof (struct nexthop));
-  nexthop->type = NEXTHOP_TYPE_BLACKHOLE;
-  SET_FLAG (rib->flags, ZEBRA_FLAG_BLACKHOLE);
-
-  nexthop_add (rib, nexthop);
-
-  return nexthop;
-}
-
 /* If force flag is not set, do not modify falgs at all for uninstall
    the route from FIB. */
 int
@@ -739,9 +723,6 @@
 	}
       break;
 #endif /* HAVE_IPV6 */
-    case NEXTHOP_TYPE_BLACKHOLE:
-      SET_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE);
-      break;
     default:
       break;
     }
@@ -1289,9 +1270,6 @@
 	case STATIC_IPV4_IFNAME:
 	  nexthop_ifname_add (rib, si->gate.ifname);
 	  break;
-	case STATIC_IPV4_BLACKHOLE:
-	  nexthop_blackhole_add (rib);
-	  break;
 	}
       rib_process (rn, NULL);
     }
@@ -1314,11 +1292,11 @@
 	case STATIC_IPV4_IFNAME:
 	  nexthop_ifname_add (rib, si->gate.ifname);
 	  break;
-	case STATIC_IPV4_BLACKHOLE:
-	  nexthop_blackhole_add (rib);
-	  break;
 	}
 
+      /* Save the flags of this static routes (reject, blackhole) */
+      rib->flags = si->flags;
+
       /* Link this rib to the tree. */
       rib_addnode (rn, rib);
 
@@ -1338,9 +1316,6 @@
       && si->type == STATIC_IPV4_IFNAME
       && strcmp (nexthop->ifname, si->gate.ifname) == 0)
     return 1;
-  if (nexthop->type == NEXTHOP_TYPE_BLACKHOLE
-      && si->type == STATIC_IPV4_BLACKHOLE)
-    return 1;
   return 0;;
 }
 
@@ -1408,7 +1383,7 @@
 /* Add static route into static route configuration. */
 int
 static_add_ipv4 (struct prefix *p, struct in_addr *gate, char *ifname,
-		 u_char distance, u_int32_t vrf_id)
+		 u_char flags, u_char distance, u_int32_t vrf_id)
 {
   u_char type = 0;
   struct route_node *rn;
@@ -1429,10 +1404,8 @@
   /* Make flags. */
   if (gate)
     type = STATIC_IPV4_GATEWAY;
-  else if (ifname)
+  if (ifname)
     type = STATIC_IPV4_IFNAME;
-  else
-    type = STATIC_IPV4_BLACKHOLE;
 
   /* Do nothing if there is a same static route.  */
   for (si = rn->info; si; si = si->next)
@@ -1461,6 +1434,7 @@
 
   si->type = type;
   si->distance = distance;
+  si->flags = flags;
 
   if (gate)
     si->gate.ipv4 = *gate;
@@ -1525,8 +1499,6 @@
     type = STATIC_IPV4_GATEWAY;
   else if (ifname)
     type = STATIC_IPV4_IFNAME;
-  else
-    type = STATIC_IPV4_BLACKHOLE;
 
   /* Find same static route is the tree */
   for (si = rn->info; si; si = si->next)
@@ -1869,6 +1841,9 @@
 	  break;
 	}
 
+      /* Save the flags of this static routes (reject, blackhole) */
+      rib->flags = si->flags;
+
       /* Link this rib to the tree. */
       rib_addnode (rn, rib);
 
@@ -1958,7 +1933,7 @@
 /* Add static route into static route configuration. */
 int
 static_add_ipv6 (struct prefix *p, u_char type, struct in6_addr *gate,
-		 char *ifname, u_char distance, u_int32_t vrf_id)
+		 char *ifname, u_char flags, u_char distance, u_int32_t vrf_id)
 {
   struct route_node *rn;
   struct static_ipv6 *si;
@@ -1993,6 +1968,7 @@
 
   si->type = type;
   si->distance = distance;
+  si->flags = flags;
 
   switch (type)
     {