void
vr_dpdk_packet_wakeup(struct vr_interface *vif)
{
    struct vr_interface_stats *stats;
    struct vrouter *router;

    if (unlikely(vif == NULL)) {
        /* get global agent vif */
        router = vrouter_get(0);
        vif = router->vr_agent_if;
    }

    if (likely(vr_dpdk.packet_event_sock != NULL)) {
        if (likely(vif != NULL)) {
            stats = vif_get_stats(vif, rte_lcore_id());
            stats->vis_port_osyscalls++;
        } else {
            /* no agent interface - no counter */
        }
        if (vr_usocket_eventfd_write(vr_dpdk.packet_event_sock) < 0) {
            vr_usocket_close(vr_dpdk.packet_event_sock);
            vr_dpdk.packet_event_sock = NULL;
        }
    }
}
void
vr_dpdk_netlink_wakeup(void)
{
    if (likely(vr_dpdk.netlink_event_sock != NULL)) {
        if (vr_usocket_eventfd_write(vr_dpdk.netlink_event_sock) < 0) {
            vr_usocket_close(vr_dpdk.netlink_event_sock);
            vr_dpdk.netlink_event_sock = NULL;
        }
    }
}
示例#3
0
void
vr_dpdk_packet_wakeup(void)
{
    /* to wake up pkt0 thread we always use current lcore event sock */
    struct vr_dpdk_lcore *lcorep = vr_dpdk.lcores[rte_lcore_id()];

    if (likely(lcorep->lcore_event_sock != NULL)) {
        if (vr_usocket_eventfd_write(lcorep->lcore_event_sock) < 0) {
            vr_usocket_close(lcorep->lcore_event_sock);
            lcorep->lcore_event_sock = NULL;
        }
    }
}