X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip_api.c;h=20e192057568ab13444982f1522d2d122a35e88c;hb=810086d8fd08445919ae03bf36161037e53a712a;hp=d9ec4b479980fd902844b3683b755e93603fd28d;hpb=d91c1dbdb31f80db7d967f2f57c43d0a81d65297;p=vpp.git diff --git a/src/vnet/ip/ip_api.c b/src/vnet/ip/ip_api.c index d9ec4b47998..20e19205756 100644 --- a/src/vnet/ip/ip_api.c +++ b/src/vnet/ip/ip_api.c @@ -79,7 +79,8 @@ _(IP6ND_PROXY_ADD_DEL, ip6nd_proxy_add_del) \ _(IP6ND_PROXY_DUMP, ip6nd_proxy_dump) \ _(SW_INTERFACE_IP6_ENABLE_DISABLE, sw_interface_ip6_enable_disable ) \ _(SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS, \ - sw_interface_ip6_set_link_local_address) + sw_interface_ip6_set_link_local_address) \ +_(IP_CONTAINER_PROXY_ADD_DEL, ip_container_proxy_add_del ) extern void stats_dslock_with_hint (int hint, int tag); extern void stats_dsunlock (void); @@ -364,7 +365,7 @@ send_ip6_fib_details (vpe_api_main_t * am, } fp->weight = api_rpath->rpath.frp_weight; fp->preference = api_rpath->rpath.frp_preference; - fp->sw_if_index = api_rpath->rpath.frp_sw_if_index; + fp->sw_if_index = htonl (api_rpath->rpath.frp_sw_if_index); copy_fib_next_hop (api_rpath, fp); fp++; } @@ -830,10 +831,13 @@ add_del_route_t_handler (u8 is_multipath, u8 is_interface_rx, u8 is_rpf_id, u8 is_l2_bridged, + u8 is_source_lookup, + u8 is_udp_encap, u32 fib_index, const fib_prefix_t * prefix, dpo_proto_t next_hop_proto, const ip46_address_t * next_hop, + u32 next_hop_id, u32 next_hop_sw_if_index, u8 next_hop_fib_index, u16 next_hop_weight, @@ -877,8 +881,15 @@ add_del_route_t_handler (u8 is_multipath, path_flags |= FIB_ROUTE_PATH_INTF_RX; if (is_rpf_id) path_flags |= FIB_ROUTE_PATH_RPF_ID; + if (is_source_lookup) + path_flags |= FIB_ROUTE_PATH_SOURCE_LOOKUP; if (is_multicast) entry_flags |= FIB_ENTRY_FLAG_MULTICAST; + if (is_udp_encap) + { + path_flags |= FIB_ROUTE_PATH_UDP_ENCAP; + path.frp_udp_encap_id = next_hop_id; + } path.frp_flags = path_flags; @@ -1107,8 +1118,11 @@ ip4_add_del_route_t_handler (vl_api_ip_add_del_route_t * mp) mp->is_resolve_host, mp->is_resolve_attached, 0, 0, mp->is_l2_bridged, + mp->is_source_lookup, + mp->is_udp_encap, fib_index, &pfx, DPO_PROTO_IP4, &nh, + ntohl (mp->next_hop_id), ntohl (mp->next_hop_sw_if_index), next_hop_fib_index, mp->next_hop_weight, @@ -1167,8 +1181,11 @@ ip6_add_del_route_t_handler (vl_api_ip_add_del_route_t * mp) mp->is_resolve_host, mp->is_resolve_attached, 0, 0, mp->is_l2_bridged, + mp->is_source_lookup, + mp->is_udp_encap, fib_index, &pfx, DPO_PROTO_IP6, - &nh, ntohl (mp->next_hop_sw_if_index), + &nh, ntohl (mp->next_hop_id), + ntohl (mp->next_hop_sw_if_index), next_hop_fib_index, mp->next_hop_weight, mp->next_hop_preference, @@ -1844,6 +1861,29 @@ vl_api_mfib_signal_dump_t_handler (vl_api_mfib_signal_dump_t * mp) ; } +static void + vl_api_ip_container_proxy_add_del_t_handler + (vl_api_ip_container_proxy_add_del_t * mp) +{ + vl_api_ip_container_proxy_add_del_reply_t *rmp; + vnet_ip_container_proxy_args_t args; + int rv = 0; + clib_error_t *error; + + memset (&args, 0, sizeof (args)); + ip_set (&args.prefix.fp_addr, mp->ip, mp->is_ip4); + args.prefix.fp_len = mp->plen ? mp->plen : (mp->is_ip4 ? 32 : 128); + args.sw_if_index = clib_net_to_host_u32 (mp->sw_if_index); + args.is_add = mp->is_add; + if ((error = vnet_ip_container_proxy_add_del (&args))) + { + rv = clib_error_get_code (error); + clib_error_report (error); + } + + REPLY_MACRO (VL_API_IP_CONTAINER_PROXY_ADD_DEL_REPLY); +} + #define vl_msg_name_crc_list #include #undef vl_msg_name_crc_list