/* API message handler */ static void vl_api_nsim_cross_connect_enable_disable_t_handler (vl_api_nsim_cross_connect_enable_disable_t * mp) { vl_api_nsim_cross_connect_enable_disable_reply_t *rmp; nsim_main_t *nsm = &nsim_main; int rv; u32 sw_if_index0, sw_if_index1; sw_if_index0 = clib_net_to_host_u32 (mp->sw_if_index0); sw_if_index1 = clib_net_to_host_u32 (mp->sw_if_index1); if (!vnet_sw_if_index_is_api_valid (sw_if_index0)) { rv = VNET_API_ERROR_INVALID_SW_IF_INDEX; goto bad_sw_if_index; } if (!vnet_sw_if_index_is_api_valid (sw_if_index1)) { rv = VNET_API_ERROR_INVALID_SW_IF_INDEX_2; goto bad_sw_if_index; } rv = nsim_cross_connect_enable_disable (nsm, sw_if_index0, sw_if_index1, (int) (mp->enable_disable)); BAD_SW_IF_INDEX_LABEL; REPLY_MACRO (VL_API_NSIM_CROSS_CONNECT_ENABLE_DISABLE_REPLY); }
void vl_api_flowprobe_params_t_handler (vl_api_flowprobe_params_t * mp) { flowprobe_main_t *fm = &flowprobe_main; vl_api_flowprobe_params_reply_t *rmp; int rv = 0; rv = flowprobe_params (fm, mp->record_l2, mp->record_l3, mp->record_l4, clib_net_to_host_u32 (mp->active_timer), clib_net_to_host_u32 (mp->passive_timer)); REPLY_MACRO (VL_API_FLOWPROBE_PARAMS_REPLY); }
static ip46_type_t ip_address_union_decode (const vl_api_address_union_t * in, vl_api_address_family_t af, ip46_address_t * out) { ip46_type_t type; switch (clib_net_to_host_u32 (af)) { case ADDRESS_IP4: clib_memset (out, 0, sizeof (*out)); clib_memcpy (&out->ip4, &in->ip4, sizeof (out->ip4)); type = IP46_TYPE_IP4; break; case ADDRESS_IP6: clib_memcpy (&out->ip6, &in->ip6, sizeof (out->ip6)); type = IP46_TYPE_IP6; break; default: ASSERT (!"Unkown address family in API address type"); type = IP46_TYPE_ANY; break; } return type; }
static void vl_api_stn_rules_details_t_handler (vl_api_stn_rules_details_t * mp) { vat_main_t *vam = stn_test_main.vat_main; fformat (vam->ofp, "addr: %U sw_if_index: %u\n", mp->is_ip4 ? format_ip4_address : format_ip6_address, mp->ip_address, clib_net_to_host_u32 (mp->sw_if_index)); }
static void ip_address_union_encode (const ip46_address_t * in, vl_api_address_family_t af, vl_api_address_union_t * out) { if (ADDRESS_IP6 == clib_net_to_host_u32 (af)) ip6_address_encode (&in->ip6, out->ip6); else ip4_address_encode (&in->ip4, out->ip4); }
void ip_mprefix_decode (const vl_api_mprefix_t * in, mfib_prefix_t * out) { out->fp_proto = (ADDRESS_IP6 == clib_net_to_host_u32 (in->af) ? FIB_PROTOCOL_IP6 : FIB_PROTOCOL_IP4); out->fp_len = clib_net_to_host_u16 (in->grp_address_length); ip_address_union_decode (&in->grp_address, in->af, &out->fp_grp_addr); ip_address_union_decode (&in->src_address, in->af, &out->fp_src_addr); }
void ip_address_encode (const ip46_address_t * in, ip46_type_t type, vl_api_address_t * out) { switch (type) { case IP46_TYPE_IP4: out->af = clib_net_to_host_u32 (ADDRESS_IP4); break; case IP46_TYPE_IP6: out->af = clib_net_to_host_u32 (ADDRESS_IP6); break; case IP46_TYPE_ANY: if (ip46_address_is_ip4 (in)) out->af = clib_net_to_host_u32 (ADDRESS_IP4); else out->af = clib_net_to_host_u32 (ADDRESS_IP6); break; } ip_address_union_encode (in, out->af, &out->un); }
void ip_prefix_decode (const vl_api_prefix_t * in, fib_prefix_t * out) { switch (clib_net_to_host_u32 (in->address.af)) { case ADDRESS_IP4: out->fp_proto = FIB_PROTOCOL_IP4; break; case ADDRESS_IP6: out->fp_proto = FIB_PROTOCOL_IP6; break; } out->fp_len = in->address_length; out->___fp___pad = 0; ip_address_decode (&in->address, &out->fp_addr); }
static int vxlan_gbp_tunnel_mode_decode (vl_api_vxlan_gbp_api_tunnel_mode_t in, vxlan_gbp_tunnel_mode_t * out) { in = clib_net_to_host_u32 (in); switch (in) { case VXLAN_GBP_API_TUNNEL_MODE_L2: *out = VXLAN_GBP_TUNNEL_MODE_L2; return (0); case VXLAN_GBP_API_TUNNEL_MODE_L3: *out = VXLAN_GBP_TUNNEL_MODE_L3; return (0); } return (1); }
static int gre_tunnel_type_decode (vl_api_gre_tunnel_type_t in, gre_tunnel_type_t * out) { in = clib_net_to_host_u32 (in); switch (in) { case GRE_API_TUNNEL_TYPE_L3: *out = GRE_TUNNEL_TYPE_L3; return (0); case GRE_API_TUNNEL_TYPE_TEB: *out = GRE_TUNNEL_TYPE_TEB; return (0); case GRE_API_TUNNEL_TYPE_ERSPAN: *out = GRE_TUNNEL_TYPE_ERSPAN; return (0); } return (VNET_API_ERROR_INVALID_VALUE); }
static vl_api_gre_tunnel_type_t gre_tunnel_type_encode (gre_tunnel_type_t in) { vl_api_gre_tunnel_type_t out = GRE_API_TUNNEL_TYPE_L3; switch (in) { case GRE_TUNNEL_TYPE_L3: out = GRE_API_TUNNEL_TYPE_L3; break; case GRE_TUNNEL_TYPE_TEB: out = GRE_API_TUNNEL_TYPE_TEB; break; case GRE_TUNNEL_TYPE_ERSPAN: out = GRE_API_TUNNEL_TYPE_ERSPAN; break; } out = clib_net_to_host_u32 (out); return (out); }
inline void swap_ip_dst_emip_src(ipv4_header *ip, icmp_em_ip_info *icmp_info, cnat_main_db_entry_t *db, u16 vrf) { icmp_v4_t *icmp; ipv4_header *em_ip; u16 *em_port; u32 old_ip; u16 old_port; u16 old_ip_checksum; /* * declear variable */ CNAT_UPDATE_L3_CHECKSUM_DECLARE CNAT_UPDATE_ICMP_ERR_CHECKSUM_DECLARE /* * fix inner layer ip & l4 checksum */ em_ip = icmp_info->em_ip; em_port = icmp_info->em_port; CNAT_UPDATE_L3_CHECKSUM(((u16)(db->out2in_key.k.ipv4)), ((u16)(db->out2in_key.k.ipv4 >> 16)), (clib_net_to_host_u16(em_ip->checksum)), ((u16)(db->in2out_key.k.ipv4)), ((u16)(db->in2out_key.k.ipv4 >> 16))) old_ip = clib_net_to_host_u32(em_ip->src_addr); old_port = clib_net_to_host_u16(*em_port); old_ip_checksum = clib_net_to_host_u16(em_ip->checksum); em_ip->src_addr = clib_host_to_net_u32(db->in2out_key.k.ipv4); em_ip->checksum = clib_host_to_net_u16(new_l3_c); *em_port = clib_host_to_net_u16(db->in2out_key.k.port); /* * fix outter layer ip & icmp checksum */ icmp = icmp_info->icmp; CNAT_UPDATE_ICMP_ERR_CHECKSUM(((u16)(old_ip & 0xFFFF)), ((u16)(old_ip >> 16)), (old_port), (old_ip_checksum), (clib_net_to_host_u16(icmp->checksum)), ((u16)(db->in2out_key.k.ipv4 & 0xffff)), ((u16)(db->in2out_key.k.ipv4 >> 16)), ((u16)(db->in2out_key.k.port)), ((u16)(new_l3_c))) icmp->checksum = clib_host_to_net_u16(new_icmp_c); old_ip = clib_net_to_host_u32(ip->dest_addr); ip->dest_addr = clib_host_to_net_u32(db->in2out_key.k.ipv4); CNAT_UPDATE_L3_CHECKSUM(((u16)(old_ip & 0xFFFF)), ((u16)(old_ip >> 16)), (clib_net_to_host_u16(ip->checksum)), ((u16)(db->in2out_key.k.ipv4)), ((u16)(db->in2out_key.k.ipv4 >> 16))) ip->checksum = clib_host_to_net_u16(new_l3_c); #if 0 if(is_static_dest_nat_enabled(vrf) == CNAT_SUCCESS) { /* * fix inner layer ip & l4 checksum */ em_snat_ip = icmp_info->em_ip; em_snat_port = icmp_info->em_port; old_ip = spp_net_to_host_byte_order_32(&(em_snat_ip->dest_addr)); old_port = spp_net_to_host_byte_order_16(em_snat_port); old_ip_checksum = spp_net_to_host_byte_order_16(&(em_snat_ip->checksum)); direction = 1; if(cnat_static_dest_db_get_translation(em_snat_ip->dest_addr, &postmap_ip, vrf, direction) == CNAT_SUCCESS) { old_postmap_ip = spp_net_to_host_byte_order_32(&postmap_ip); CNAT_UPDATE_L3_CHECKSUM(((u16)(old_ip)), ((u16)(old_ip >> 16)), (spp_net_to_host_byte_order_16(&(em_snat_ip->checksum))), ((u16)(old_postmap_ip)), ((u16)(old_postmap_ip >> 16))) em_snat_ip->dest_addr = postmap_ip; em_snat_ip->checksum = spp_host_to_net_byte_order_16(new_l3_c); /* * fix outter layer ip & icmp checksum */ icmp = icmp_info->icmp; CNAT_UPDATE_ICMP_ERR_CHECKSUM(((u16)(old_ip & 0xFFFF)), ((u16)(old_ip >> 16)), (old_port), (old_ip_checksum), (spp_net_to_host_byte_order_16(&(icmp->checksum))), ((u16)(old_postmap_ip & 0xffff)), ((u16)(old_postmap_ip >> 16)), ((u16)(old_port)), ((u16)(new_l3_c))) icmp->checksum = spp_host_to_net_byte_order_16(new_icmp_c); }