+static void
+send_vrrp_vr_event (vpe_client_registration_t * reg,
+ vl_api_registration_t * vl_reg,
+ vrrp_vr_t * vr, vrrp_vr_state_t new_state)
+{
+ vrrp_main_t *vmp = &vrrp_main;
+ vl_api_vrrp_vr_event_t *mp;
+
+ mp = vl_msg_api_alloc (sizeof (*mp));
+
+ clib_memset (mp, 0, sizeof (*mp));
+ mp->_vl_msg_id = ntohs (VL_API_VRRP_VR_EVENT + vmp->msg_id_base);
+ mp->client_index = reg->client_index;
+ mp->pid = reg->client_pid;
+ mp->vr.sw_if_index = ntohl (vr->config.sw_if_index);
+ mp->vr.vr_id = vr->config.vr_id;
+ mp->vr.is_ipv6 = ((vr->config.flags & VRRP_VR_IPV6) != 0);
+
+ mp->old_state = htonl (vrrp_vr_state_encode (vr->runtime.state));
+ mp->new_state = htonl (vrrp_vr_state_encode (new_state));
+
+ vl_api_send_msg (vl_reg, (u8 *) mp);
+}
+
+void
+vrrp_vr_event (vrrp_vr_t * vr, vrrp_vr_state_t new_state)
+{
+ vpe_api_main_t *vam = &vpe_api_main;
+ vpe_client_registration_t *reg;
+ vl_api_registration_t *vl_reg;
+
+ /* *INDENT-OFF* */
+ pool_foreach(reg, vam->vrrp_vr_events_registrations,
+ ({
+ vl_reg = vl_api_client_index_to_registration (reg->client_index);
+ if (vl_reg)
+ send_vrrp_vr_event (reg, vl_reg, vr, new_state);
+ }));
+ /* *INDENT-ON* */
+}
+
+pub_sub_handler (vrrp_vr_events, VRRP_VR_EVENTS);
+