Beispiel #1
0
// libxl internal in libxl__device_nic_add()
int hyperxl_nic_add(libxl_ctx* ctx, uint32_t domid, hyperxl_nic_config* config) {

    libxl_device_nic nic;
    libxl_mac mac;
    int i, ret = -1;

    libxl_device_nic_init(&nic);
    nic.backend_domid = 0;
    nic.mtu = 1492;
    nic.model = strdup("e1000");
    nic.ip = strdup(config->ip);
    nic.bridge = strdup(config->bridge);
    nic.nictype = LIBXL_NIC_TYPE_VIF_IOEMU;
    nic.ifname = strdup(config->ifname);
    nic.gatewaydev = strdup(config->gatewaydev);
    if (config->mac != NULL) {
        for (i=0; i<6; i++) {
            mac[i] = (uint8_t)(*(config->mac + i));
        }
        libxl_mac_copy(ctx, &nic.mac, &mac);
    }

    if( libxl_device_nic_add(ctx, domid, &nic, 0) ) {
        goto cleanup;
    }

    ret = 0;

cleanup:
    libxl_device_nic_dispose(&nic);
    return ret;
}
Beispiel #2
0
static void libxl__update_config_nic(libxl__gc *gc, libxl_device_nic *dst,
                                     const libxl_device_nic *src)
{
    dst->devid = src->devid;
    dst->nictype = src->nictype;
    libxl_mac_copy(CTX, &dst->mac, &src->mac);
}