int
vr_genetlink_init(void)
{
    int ret;

    ret = vr_message_transport_register(&netlink_transport);
    if (ret)
        return ret;

    return genl_register_family_with_ops(&vrouter_genl_family, vrouter_genl_ops,
        ARRAY_SIZE(vrouter_genl_ops));
}
Ejemplo n.º 2
0
/* Init NetLink and UVHost sockets */
int
vr_dpdk_netlink_init(void)
{
    void *event_sock = NULL;
    int ret;

    RTE_LOG(INFO, VROUTER, "Starting NetLink...\n");
    ret = vr_message_transport_register(&dpdk_nl_transport);
    if (ret)
        return ret;

#ifdef AGENT_VROUTER_TCP
    vr_dpdk.netlink_sock = vr_usocket(NETLINK, TCP);
#else
    vr_dpdk.netlink_sock = vr_usocket(NETLINK, UNIX);
#endif
    if (!vr_dpdk.netlink_sock) {
        RTE_LOG(ERR, VROUTER, "    error creating NetLink server socket:"
            " %s (%d)\n", rte_strerror(errno), errno);
        goto error;
    }
    RTE_LOG(INFO, VROUTER, "    NetLink TCP socket FD is %d\n",
            ((struct vr_usocket *)vr_dpdk.netlink_sock)->usock_fd);

    ret = vr_nl_uvhost_connect();
    if (ret != 0) {
        RTE_LOG(ERR, VROUTER, "    error creating uvhost connection\n");
        goto error;
    }

    /* create and bind event usock to wake up the NetLink lcore */
    event_sock = (void *)vr_usocket(EVENT, RAW);
    if (!event_sock) {
        RTE_LOG(ERR, VROUTER, "    error creating NetLink event\n");
        goto error;
    }

    if (vr_usocket_bind_usockets(vr_dpdk.netlink_sock,
                event_sock)) {
        RTE_LOG(ERR, VROUTER, "    error binding NetLink event\n");
        goto error;
    }
    vr_dpdk.netlink_event_sock = event_sock;

    return 0;

error:
    vr_message_transport_unregister(&dpdk_nl_transport);
    vr_usocket_close(vr_dpdk.netlink_sock);

    return -1;
}
Ejemplo n.º 3
0
int
vr_genetlink_init(void)
{
    int ret;

    ret = vr_message_transport_register(&netlink_transport);
    if (ret)
        return ret;

#if ((LINUX_VERSION_CODE < KERNEL_VERSION(3,13,0)) && \
     (!(defined(RHEL_MAJOR) && (RHEL_MAJOR >= 7))))
    return genl_register_family_with_ops(&vrouter_genl_family, vrouter_genl_ops,
        ARRAY_SIZE(vrouter_genl_ops));
#else
    return genl_register_family_with_ops(&vrouter_genl_family,
                                         vrouter_genl_ops);
#endif
}