+int
+vnet_lisp_eid_table_map (u32 vni, u32 vrf, u8 is_add)
+{
+ lisp_cp_main_t * lcm = vnet_lisp_cp_get_main ();
+ uword * table_id, * vnip;
+
+ if (vnet_lisp_enable_disable_status () == 0)
+ {
+ clib_warning ("LISP is disabled!");
+ return -1;
+ }
+
+ if (vni == 0 || vrf == 0)
+ {
+ clib_warning ("can't add/del default vni-vrf mapping!");
+ return -1;
+ }
+
+ table_id = hash_get (lcm->table_id_by_vni, vni);
+ vnip = hash_get (lcm->vni_by_table_id, vrf);
+
+ if (is_add)
+ {
+ if (table_id || vnip)
+ {
+ clib_warning ("vni %d or vrf %d already used in any vrf/vni "
+ "mapping!", vni, vrf);
+ return -1;
+ }
+ hash_set (lcm->table_id_by_vni, vni, vrf);
+ hash_set (lcm->vni_by_table_id, vrf, vni);
+ }
+ else
+ {
+ if (!table_id || !vnip)
+ {
+ clib_warning ("vni %d or vrf %d not used in any vrf/vni! "
+ "mapping!", vni, vrf);
+ return -1;
+ }
+ hash_unset (lcm->table_id_by_vni, vni);
+ hash_unset (lcm->vni_by_table_id, vrf);
+ }
+ return 0;
+}
+
+static clib_error_t *
+lisp_eid_table_map_command_fn (vlib_main_t * vm,
+ unformat_input_t * input,
+ vlib_cli_command_t * cmd)
+{
+ u8 is_add = 1;
+ u32 vni = 0, vrf = 0;
+ unformat_input_t _line_input, * line_input = &_line_input;
+
+ /* Get a line of input. */
+ if (! unformat_user (input, unformat_line_input, line_input))
+ return 0;
+
+ while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
+ {
+ if (unformat (line_input, "del"))
+ is_add = 0;
+ else if (unformat (line_input, "vni %d", &vni))
+ ;
+ else if (unformat (line_input, "vrf %d", &vrf))
+ ;
+ else
+ {
+ return unformat_parse_error (line_input);
+ }
+ }
+ vnet_lisp_eid_table_map (vni, vrf, is_add);
+ return 0;
+}
+
+VLIB_CLI_COMMAND (lisp_eid_table_map_command) = {
+ .path = "lisp eid-table map",
+ .short_help = "lisp eid-table map [del] vni <vni> vrf <vrf>",
+ .function = lisp_eid_table_map_command_fn,
+};
+