X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Flisp-gpe%2Finterface.c;h=4760f44833acc3692c86b892a55fcca0cb5f3634;hb=b4874ee8d5a92017cb91ad23b0783385dd58253c;hp=d12dc362dacda9ba20a87505566e4445750351cc;hpb=ce1b4c7f05ce28d7b73eb7ed0a8ea4bd483f09e9;p=vpp.git diff --git a/src/vnet/lisp-gpe/interface.c b/src/vnet/lisp-gpe/interface.c index d12dc362dac..4760f44833a 100644 --- a/src/vnet/lisp-gpe/interface.c +++ b/src/vnet/lisp-gpe/interface.c @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include #include @@ -185,7 +185,8 @@ format_lisp_gpe_header_with_length (u8 * s, va_list * args) s = format (s, "\n ver_res %d res %d next_protocol %d iid %d(%x)", h->ver_res, h->res, h->next_protocol, - clib_net_to_host_u32 (h->iid), clib_net_to_host_u32 (h->iid)); + clib_net_to_host_u32 (h->iid << 8), + clib_net_to_host_u32 (h->iid << 8)); return s; } @@ -794,6 +795,7 @@ lisp_gpe_add_del_iface_command_fn (vlib_main_t * vm, unformat_input_t * input, u32 table_id, vni, bd_id; u8 vni_is_set = 0, vrf_is_set = 0, bd_index_is_set = 0; u8 nsh_iface = 0; + clib_error_t *error = NULL; if (vnet_lisp_gpe_enable_disable_status () == 0) { @@ -828,27 +830,58 @@ lisp_gpe_add_del_iface_command_fn (vlib_main_t * vm, unformat_input_t * input, } else { - return clib_error_return (0, "parse error: '%U'", - format_unformat_error, line_input); + error = clib_error_return (0, "parse error: '%U'", + format_unformat_error, line_input); + goto done; } } + if (nsh_iface) + { + if (is_add) + { + if (~0 == lisp_gpe_add_nsh_iface (&lisp_gpe_main)) + { + error = clib_error_return (0, "NSH interface not created"); + goto done; + } + } + else + { + lisp_gpe_del_nsh_iface (&lisp_gpe_main); + } + goto done; + } + if (vrf_is_set && bd_index_is_set) - return clib_error_return (0, - "Cannot set both vrf and brdige domain index!"); + { + error = clib_error_return + (0, "Cannot set both vrf and brdige domain index!"); + goto done; + } if (!vni_is_set) - return clib_error_return (0, "vni must be set!"); + { + error = clib_error_return (0, "vni must be set!"); + goto done; + } if (!vrf_is_set && !bd_index_is_set) - return clib_error_return (0, "vrf or bridge domain index must be set!"); + { + error = + clib_error_return (0, "vrf or bridge domain index must be set!"); + goto done; + } if (bd_index_is_set) { if (is_add) { if (~0 == lisp_gpe_tenant_l2_iface_add_or_lock (vni, bd_id)) - return clib_error_return (0, "L2 interface not created"); + { + error = clib_error_return (0, "L2 interface not created"); + goto done; + } } else lisp_gpe_tenant_l2_iface_unlock (vni); @@ -858,34 +891,25 @@ lisp_gpe_add_del_iface_command_fn (vlib_main_t * vm, unformat_input_t * input, if (is_add) { if (~0 == lisp_gpe_tenant_l3_iface_add_or_lock (vni, table_id)) - return clib_error_return (0, "L3 interface not created"); + { + error = clib_error_return (0, "L3 interface not created"); + goto done; + } } else lisp_gpe_tenant_l3_iface_unlock (vni); } - if (nsh_iface) - { - if (is_add) - { - if (~0 == lisp_gpe_add_nsh_iface (&lisp_gpe_main)) - { - return clib_error_return (0, "NSH interface not created"); - } - else - { - lisp_gpe_del_nsh_iface (&lisp_gpe_main); - } - } - } +done: + unformat_free (line_input); - return (NULL); + return error; } /* *INDENT-OFF* */ VLIB_CLI_COMMAND (add_del_lisp_gpe_iface_command, static) = { - .path = "lisp gpe iface", - .short_help = "lisp gpe iface add/del vni vrf ", + .path = "gpe iface", + .short_help = "gpe iface add/del vni vrf ", .function = lisp_gpe_add_del_iface_command_fn, }; /* *INDENT-ON* */