nhrpd: implement next hop resolution protocol

This provides DMVPN support and integrates to strongSwan. Please read
README.nhrpd and README.kernel for more details.
diff --git a/zebra/zebra_rnh.c b/zebra/zebra_rnh.c
index 5762d3f..859b6d7 100644
--- a/zebra/zebra_rnh.c
+++ b/zebra/zebra_rnh.c
@@ -223,16 +223,27 @@
 	    {
 	      if (CHECK_FLAG (rib->status, RIB_ENTRY_REMOVED))
 		continue;
-	      if (CHECK_FLAG (rib->status, RIB_ENTRY_SELECTED_FIB))
+	      if (! CHECK_FLAG (rib->status, RIB_ENTRY_SELECTED_FIB))
+		continue;
+
+	      if (CHECK_FLAG(rnh->flags, ZEBRA_NHT_CONNECTED))
 		{
-		  if (CHECK_FLAG(rnh->flags, ZEBRA_NHT_CONNECTED))
+		  if (rib->type == ZEBRA_ROUTE_CONNECT)
+		    break;
+
+		  if (rib->type == ZEBRA_ROUTE_NHRP)
 		    {
-		      if (rib->type == ZEBRA_ROUTE_CONNECT)
+		      struct nexthop *nexthop;
+		      for (nexthop = rib->nexthop; nexthop; nexthop = nexthop->next)
+			if (nexthop->type == NEXTHOP_TYPE_IFINDEX ||
+			    nexthop->type == NEXTHOP_TYPE_IFNAME)
+			  break;
+		      if (nexthop)
 			break;
 		    }
-		  else
-		    break;
 		}
+	      else
+		break;
 	    }
 	}