X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip_api.c;h=60fa2faf9263d4fda3747f8613051736f122ab2f;hb=75e7d13;hp=f4db43c9df62107edc60f87d1df8b198bcffec91;hpb=af0ff5af0cd471033169e63c6111d23cd801928c;p=vpp.git diff --git a/src/vnet/ip/ip_api.c b/src/vnet/ip/ip_api.c index f4db43c9df6..60fa2faf926 100644 --- a/src/vnet/ip/ip_api.c +++ b/src/vnet/ip/ip_api.c @@ -42,6 +42,8 @@ #include #include #include +#include +#include #include @@ -97,7 +99,9 @@ _(IOAM_DISABLE, ioam_disable) \ _(IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL, \ ip_source_and_port_range_check_add_del) \ _(IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL, \ - ip_source_and_port_range_check_interface_add_del) + ip_source_and_port_range_check_interface_add_del) \ +_(IP_REASSEMBLY_SET, ip_reassembly_set) \ +_(IP_REASSEMBLY_GET, ip_reassembly_get) extern void stats_dslock_with_hint (int hint, int tag); extern void stats_dsunlock (void); @@ -273,14 +277,14 @@ typedef struct vl_api_ip_fib_dump_walk_ctx_t_ fib_node_index_t *feis; } vl_api_ip_fib_dump_walk_ctx_t; -static int +static fib_table_walk_rc_t vl_api_ip_fib_dump_walk (fib_node_index_t fei, void *arg) { vl_api_ip_fib_dump_walk_ctx_t *ctx = arg; vec_add1 (ctx->feis, fei); - return (1); + return (FIB_TABLE_WALK_CONTINUE); } static void @@ -1022,23 +1026,11 @@ add_del_route_check (fib_protocol_t table_proto, { vnet_main_t *vnm = vnet_get_main (); - /* Temporaray whilst I do the CSIT dance */ - u8 create_missing_tables = 1; - *fib_index = fib_table_find (table_proto, ntohl (table_id)); if (~0 == *fib_index) { - if (create_missing_tables) - { - *fib_index = fib_table_find_or_create_and_lock (table_proto, - ntohl (table_id), - FIB_SOURCE_API); - } - else - { - /* No such VRF, and we weren't asked to create one */ - return VNET_API_ERROR_NO_SUCH_FIB; - } + /* No such VRF, and we weren't asked to create one */ + return VNET_API_ERROR_NO_SUCH_FIB; } if (!is_rpf_id && ~0 != ntohl (next_hop_sw_if_index)) @@ -1067,26 +1059,8 @@ add_del_route_check (fib_protocol_t table_proto, if (~0 == *next_hop_fib_index) { - if (create_missing_tables) - { - if (is_rpf_id) - *next_hop_fib_index = - mfib_table_find_or_create_and_lock (fib_nh_proto, - ntohl - (next_hop_table_id), - MFIB_SOURCE_API); - else - *next_hop_fib_index = - fib_table_find_or_create_and_lock (fib_nh_proto, - ntohl - (next_hop_table_id), - FIB_SOURCE_API); - } - else - { - /* No such VRF, and we weren't asked to create one */ - return VNET_API_ERROR_NO_SUCH_FIB; - } + /* No such VRF, and we weren't asked to create one */ + return VNET_API_ERROR_NO_SUCH_FIB; } } @@ -1688,7 +1662,7 @@ typedef struct api_ip6nd_proxy_fib_table_walk_ctx_t_ u32 *indices; } api_ip6nd_proxy_fib_table_walk_ctx_t; -static int +static fib_table_walk_rc_t api_ip6nd_proxy_fib_table_walk (fib_node_index_t fei, void *arg) { api_ip6nd_proxy_fib_table_walk_ctx_t *ctx = arg; @@ -1698,7 +1672,7 @@ api_ip6nd_proxy_fib_table_walk (fib_node_index_t fei, void *arg) vec_add1 (ctx->indices, fei); } - return (1); + return (FIB_TABLE_WALK_CONTINUE); } static void @@ -2816,6 +2790,61 @@ vl_api_set_arp_neighbor_limit_t_handler (vl_api_set_arp_neighbor_limit_t * mp) REPLY_MACRO (VL_API_SET_ARP_NEIGHBOR_LIMIT_REPLY); } +void +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->expire_walk_interval_ms)); + } + else + { + 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->expire_walk_interval_ms)); + } + + REPLY_MACRO (VL_API_IP_REASSEMBLY_SET_REPLY); +} + +void +vl_api_ip_reassembly_get_t_handler (vl_api_ip_reassembly_get_t * mp) +{ + unix_shared_memory_queue_t *q; + + q = vl_api_client_index_to_input_queue (mp->client_index); + + if (q == 0) + return; + + vl_api_ip_reassembly_get_reply_t *rmp = vl_msg_api_alloc (sizeof (*rmp)); + memset (rmp, 0, sizeof (*rmp)); + rmp->_vl_msg_id = ntohs (VL_API_IP_REASSEMBLY_GET_REPLY); + rmp->context = mp->context; + rmp->retval = 0; + if (mp->is_ip6) + { + 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->expire_walk_interval_ms); + } + rmp->timeout_ms = clib_host_to_net_u32 (rmp->timeout_ms); + rmp->max_reassemblies = clib_host_to_net_u32 (rmp->max_reassemblies); + rmp->expire_walk_interval_ms = + clib_host_to_net_u32 (rmp->expire_walk_interval_ms); + vl_msg_api_send_shmem (q, (u8 *) & rmp); +} + #define vl_msg_name_crc_list #include #undef vl_msg_name_crc_list