X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip_api.c;h=322a3ed115ab195d5e76c7984f65e4ee7fb9e949;hb=2429f8bdac28cae419d8d95ee4f039554f95d9a5;hp=8dbd3e6ce12c525bb0b631bcd97644b6174b145b;hpb=33a58171e5995d9e649b414bfc77f2aab26e4c58;p=vpp.git diff --git a/src/vnet/ip/ip_api.c b/src/vnet/ip/ip_api.c index 8dbd3e6ce12..322a3ed115a 100644 --- a/src/vnet/ip/ip_api.c +++ b/src/vnet/ip/ip_api.c @@ -43,8 +43,10 @@ #include #include #include -#include -#include +#include +#include +#include +#include #include #include @@ -987,7 +989,7 @@ vl_api_ip_unnumbered_dump_t_handler (vl_api_ip_unnumbered_dump_t * mp) si = vnet_get_sw_interface (vnm, ntohl (mp->sw_if_index)); - if (!(si->flags & VNET_SW_INTERFACE_FLAG_UNNUMBERED)) + if (si->flags & VNET_SW_INTERFACE_FLAG_UNNUMBERED) { send_ip_unnumbered_details (am, reg, sw_if_index, @@ -1051,6 +1053,8 @@ vl_api_ip_dump_t_handler (vl_api_ip_dump_t * mp) send_ip_details (am, reg, sw_if_index, mp->is_ipv6, mp->context); } } + + vec_free (sorted_sis); } static void @@ -2734,19 +2738,51 @@ vl_api_ip_reassembly_set_t_handler (vl_api_ip_reassembly_set_t * mp) { vl_api_ip_reassembly_set_reply_t *rmp; int rv = 0; - if (mp->is_ip6) - { - rv = ip6_reass_set (clib_net_to_host_u32 (mp->timeout_ms), - clib_net_to_host_u32 (mp->max_reassemblies), - clib_net_to_host_u32 (mp->max_reassembly_length), - clib_net_to_host_u32 (mp->expire_walk_interval_ms)); - } - else + switch ((vl_api_ip_reass_type_t) clib_net_to_host_u32 (mp->type)) { - rv = ip4_reass_set (clib_net_to_host_u32 (mp->timeout_ms), - clib_net_to_host_u32 (mp->max_reassemblies), - clib_net_to_host_u32 (mp->max_reassembly_length), - clib_net_to_host_u32 (mp->expire_walk_interval_ms)); + case IP_REASS_TYPE_FULL: + if (mp->is_ip6) + { + rv = ip6_full_reass_set (clib_net_to_host_u32 (mp->timeout_ms), + clib_net_to_host_u32 + (mp->max_reassemblies), + clib_net_to_host_u32 + (mp->max_reassembly_length), + clib_net_to_host_u32 + (mp->expire_walk_interval_ms)); + } + else + { + rv = ip4_full_reass_set (clib_net_to_host_u32 (mp->timeout_ms), + clib_net_to_host_u32 + (mp->max_reassemblies), + clib_net_to_host_u32 + (mp->max_reassembly_length), + clib_net_to_host_u32 + (mp->expire_walk_interval_ms)); + } + break; + case IP_REASS_TYPE_SHALLOW_VIRTUAL: + if (mp->is_ip6) + { + rv = + ip6_sv_reass_set (clib_net_to_host_u32 (mp->timeout_ms), + clib_net_to_host_u32 (mp->max_reassemblies), + clib_net_to_host_u32 + (mp->max_reassembly_length), + clib_net_to_host_u32 + (mp->expire_walk_interval_ms)); + } + else + { + rv = ip4_sv_reass_set (clib_net_to_host_u32 (mp->timeout_ms), + clib_net_to_host_u32 (mp->max_reassemblies), + clib_net_to_host_u32 + (mp->max_reassembly_length), + clib_net_to_host_u32 + (mp->expire_walk_interval_ms)); + } + break; } REPLY_MACRO (VL_API_IP_REASSEMBLY_SET_REPLY); @@ -2766,18 +2802,42 @@ vl_api_ip_reassembly_get_t_handler (vl_api_ip_reassembly_get_t * mp) rmp->_vl_msg_id = ntohs (VL_API_IP_REASSEMBLY_GET_REPLY); rmp->context = mp->context; rmp->retval = 0; - if (mp->is_ip6) + u32 timeout_ms; + u32 max_reassemblies; + u32 max_reassembly_length; + u32 expire_walk_interval_ms; + switch ((vl_api_ip_reass_type_t) clib_net_to_host_u32 (mp->type)) { - rmp->is_ip6 = 1; - ip6_reass_get (&rmp->timeout_ms, &rmp->max_reassemblies, - &rmp->expire_walk_interval_ms); - } - else - { - rmp->is_ip6 = 0; - ip4_reass_get (&rmp->timeout_ms, &rmp->max_reassemblies, - &rmp->max_reassembly_length, - &rmp->expire_walk_interval_ms); + case IP_REASS_TYPE_FULL: + if (mp->is_ip6) + { + rmp->is_ip6 = 1; + ip6_full_reass_get (&timeout_ms, &max_reassemblies, + &max_reassembly_length, + &expire_walk_interval_ms); + } + else + { + rmp->is_ip6 = 0; + ip4_full_reass_get (&timeout_ms, &max_reassemblies, + &max_reassembly_length, + &expire_walk_interval_ms); + } + break; + case IP_REASS_TYPE_SHALLOW_VIRTUAL: + if (mp->is_ip6) + { + rmp->is_ip6 = 1; + ip6_sv_reass_get (&timeout_ms, &max_reassemblies, + &max_reassembly_length, &expire_walk_interval_ms); + } + else + { + rmp->is_ip6 = 0; + ip4_sv_reass_get (&timeout_ms, &max_reassemblies, + &max_reassembly_length, &expire_walk_interval_ms); + } + break; } rmp->timeout_ms = clib_host_to_net_u32 (rmp->timeout_ms); rmp->max_reassemblies = clib_host_to_net_u32 (rmp->max_reassemblies); @@ -2792,12 +2852,28 @@ void { vl_api_ip_reassembly_enable_disable_reply_t *rmp; int rv = 0; - rv = ip4_reass_enable_disable (clib_net_to_host_u32 (mp->sw_if_index), - mp->enable_ip4); - if (0 == rv) + switch ((vl_api_ip_reass_type_t) clib_net_to_host_u32 (mp->type)) { - rv = ip6_reass_enable_disable (clib_net_to_host_u32 (mp->sw_if_index), - mp->enable_ip6); + case IP_REASS_TYPE_FULL: + rv = + ip4_full_reass_enable_disable (clib_net_to_host_u32 (mp->sw_if_index), + mp->enable_ip4); + if (0 == rv) + rv = + ip6_full_reass_enable_disable (clib_net_to_host_u32 + (mp->sw_if_index), mp->enable_ip6); + break; + case IP_REASS_TYPE_SHALLOW_VIRTUAL: + rv = + ip4_sv_reass_enable_disable (clib_net_to_host_u32 (mp->sw_if_index), + mp->enable_ip4); + if (0 == rv) + { + rv = + ip6_sv_reass_enable_disable (clib_net_to_host_u32 + (mp->sw_if_index), mp->enable_ip6); + } + break; } REPLY_MACRO (VL_API_IP_REASSEMBLY_ENABLE_DISABLE_REPLY);