+ mgre_walk_ctx_t *ctx = data;
+ adj_midchain_fixup_t f;
+
+ f = (ctx->t->tunnel_dst.fp_proto == FIB_PROTOCOL_IP4 ?
+ gre4_fixup : gre6_fixup);
+
+ adj_nbr_midchain_update_rewrite
+ (ai, f, NULL, ADJ_FLAG_MIDCHAIN_IP_STACK,
+ gre_build_rewrite (vnet_get_main (),
+ ctx->t->sw_if_index,
+ adj_get_link_type (ai),
+ &nhrp_entry_get_nh (ctx->ne)->fp_addr));
+
+ nhrp_entry_adj_stack (ctx->ne, ai);
+
+ return (ADJ_WALK_RC_CONTINUE);
+}
+
+adj_walk_rc_t
+mgre_mk_incomplete_walk (adj_index_t ai, void *data)
+{
+ gre_tunnel_t *t = data;
+ adj_midchain_fixup_t f;
+
+ f = (t->tunnel_dst.fp_proto == FIB_PROTOCOL_IP4 ? gre4_fixup : gre6_fixup);
+
+ adj_nbr_midchain_update_rewrite (ai, f, NULL, ADJ_FLAG_NONE, NULL);
+
+ adj_midchain_delegate_unstack (ai);