ip_prefix_t * dpref, * spref;
uword * lookup_next_index, * lgpe_sw_if_index, * lnip;
u8 ip_ver;
+
/* treat negative fwd entries separately */
if (a->is_negative)
return add_del_negative_fwd_entry (lgm, a);
+ dpref = &gid_address_ippref(&a->deid);
+ spref = &gid_address_ippref(&a->seid);
+ ip_ver = ip_prefix_version(dpref);
+
+ a->next_protocol = ip_ver == IP4 ?
+ LISP_GPE_NEXT_PROTO_IP4 : LISP_GPE_NEXT_PROTO_IP6;
+ a->flags |= LISP_GPE_FLAGS_P;
+
/* add/del tunnel to tunnels pool and prepares rewrite */
rv = add_del_tunnel (a, &tun_index);
if (rv)
return rv;
- dpref = &gid_address_ippref(&a->deid);
- spref = &gid_address_ippref(&a->seid);
- ip_ver = ip_prefix_version(dpref);
-
/* setup adjacency for eid */
memset (&adj, 0, sizeof(adj));
adj.n_adj = 1;
.function = show_lisp_gpe_tunnel_command_fn,
};
+u8
+vnet_lisp_gpe_enable_disable_status(void)
+{
+ lisp_gpe_main_t * lgm = &lisp_gpe_main;
+
+ return lgm->is_en;
+}
+
clib_error_t *
vnet_lisp_gpe_enable_disable (vnet_lisp_gpe_enable_disable_args_t * a)
{
{
/* ask cp to re-add ifaces and defaults */
}
+
+ lgm->is_en = 1;
}
else
{
vec_foreach(tunnel, tunnels) {
memset(at, 0, sizeof(at[0]));
at->is_add = 0;
- gid_address_type(&at->deid) = IP_PREFIX;
+ gid_address_type(&at->deid) = GID_ADDR_IP_PREFIX;
ip_prefix_copy(&gid_address_ippref(&at->deid), &tunnel->eid);
ip_address_copy(&at->dlocator, &tunnel->dst_loc);
vnet_lisp_gpe_add_del_fwd_entry (at, 0);
vnet_lisp_gpe_add_del_iface(ai, 0);
}
vec_free(table_ids);
+ lgm->is_en = 0;
}
return 0;
udp_register_dst_port (vm, UDP_DST_PORT_lisp_gpe,
lisp_gpe_ip4_input_node.index, 1 /* is_ip4 */);
udp_register_dst_port (vm, UDP_DST_PORT_lisp_gpe6,
- lisp_gpe_ip4_input_node.index, 0 /* is_ip4 */);
+ lisp_gpe_ip6_input_node.index, 0 /* is_ip4 */);
return 0;
}