static void vl_api_udp_encap_dump_t_handler (vl_api_udp_encap_dump_t * mp, vlib_main_t * vm) { vl_api_registration_t *reg; udp_encap_t *ue; reg = vl_api_client_index_to_registration (mp->client_index); if (!reg) return; /* *INDENT-OFF* */ pool_foreach(ue, udp_encap_pool, ({ send_udp_encap_details(ue, reg, mp->context); }));
static void vl_api_vxlan_gbp_tunnel_dump_t_handler (vl_api_vxlan_gbp_tunnel_dump_t * mp) { vl_api_registration_t *reg; vxlan_gbp_main_t *vxm = &vxlan_gbp_main; vxlan_gbp_tunnel_t *t; u32 sw_if_index; reg = vl_api_client_index_to_registration (mp->client_index); if (!reg) return; sw_if_index = ntohl (mp->sw_if_index); if (~0 == sw_if_index) { /* *INDENT-OFF* */ pool_foreach (t, vxm->tunnels, ({ send_vxlan_gbp_tunnel_details(t, reg, mp->context); }));
static uword dhcp6_pd_reply_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f) { /* These cross the longjmp boundary (vlib_process_wait_for_event) * and need to be volatile - to prevent them from being optimized into * a register - which could change during suspension */ while (1) { vlib_process_wait_for_event (vm); uword event_type = DHCP6_PD_DP_REPLY_REPORT; void *event_data = vlib_process_get_event_data (vm, &event_type); int i; if (event_type == DHCP6_PD_DP_REPLY_REPORT) { prefix_report_t *events = event_data; for (i = 0; i < vec_len (events); i++) { u32 event_size = sizeof (vl_api_dhcp6_pd_reply_event_t) + vec_len (events[i].prefixes) * sizeof (vl_api_dhcp6_pd_prefix_info_t); vl_api_dhcp6_pd_reply_event_t *event = clib_mem_alloc (event_size); clib_memset (event, 0, event_size); event->sw_if_index = htonl (events[i].body.sw_if_index); event->server_index = htonl (events[i].body.server_index); event->msg_type = events[i].body.msg_type; event->T1 = htonl (events[i].body.T1); event->T2 = htonl (events[i].body.T2); event->inner_status_code = htons (events[i].body.inner_status_code); event->status_code = htons (events[i].body.status_code); event->preference = events[i].body.preference; event->n_prefixes = htonl (vec_len (events[i].prefixes)); vl_api_dhcp6_pd_prefix_info_t *prefix = (typeof (prefix)) event->prefixes; u32 j; for (j = 0; j < vec_len (events[i].prefixes); j++) { dhcp6_prefix_info_t *info = &events[i].prefixes[j]; memcpy (prefix->prefix, &info->prefix, 16); prefix->prefix_length = info->prefix_length; prefix->valid_time = htonl (info->valid_time); prefix->preferred_time = htonl (info->preferred_time); prefix++; } vec_free (events[i].prefixes); dhcp6_pd_client_public_main_t *dpcpm = &dhcp6_pd_client_public_main; call_dhcp6_pd_reply_event_callbacks (event, dpcpm->functions); vpe_client_registration_t *reg; /* *INDENT-OFF* */ pool_foreach(reg, vpe_api_main.dhcp6_pd_reply_events_registrations, ({ vl_api_registration_t *vl_reg; vl_reg = vl_api_client_index_to_registration (reg->client_index); if (vl_reg && vl_api_can_send_msg (vl_reg)) { vl_api_dhcp6_pd_reply_event_t *msg = vl_msg_api_alloc (event_size); clib_memcpy (msg, event, event_size); msg->_vl_msg_id = htons (VL_API_DHCP6_PD_REPLY_EVENT); msg->client_index = reg->client_index; msg->pid = reg->client_pid; vl_api_send_msg (vl_reg, (u8 *) msg); } })); /* *INDENT-ON* */ clib_mem_free (event); } }