[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 4/6] net/vmnet: implement host mode (vmnet-host)
From: |
Vladislav Yaroshchuk |
Subject: |
[PATCH v3 4/6] net/vmnet: implement host mode (vmnet-host) |
Date: |
Tue, 12 Oct 2021 13:55:56 +0300 |
Still not implemented:
- port forwarding
Signed-off-by: Vladislav Yaroshchuk <yaroshchuk2000@gmail.com>
---
net/vmnet-host.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 72 insertions(+), 3 deletions(-)
diff --git a/net/vmnet-host.c b/net/vmnet-host.c
index 4a5ef99dc7..fe7211d61b 100644
--- a/net/vmnet-host.c
+++ b/net/vmnet-host.c
@@ -17,8 +17,77 @@
#include <vmnet/vmnet.h>
+typedef struct VmnetHostState {
+ VmnetCommonState common;
+
+} VmnetHostState;
+
+static xpc_object_t create_if_desc(const Netdev *netdev, Error **errp);
+
+static NetClientInfo net_vmnet_host_info = {
+ .type = NET_CLIENT_DRIVER_VMNET_HOST,
+ .size = sizeof(VmnetHostState),
+ .receive = vmnet_receive_common,
+ .cleanup = vmnet_cleanup_common,
+};
+
int net_init_vmnet_host(const Netdev *netdev, const char *name,
- NetClientState *peer, Error **errp) {
- error_setg(errp, "vmnet-host is not implemented yet");
- return -1;
+ NetClientState *peer, Error **errp)
+{
+ NetClientState *nc;
+ xpc_object_t if_desc;
+
+ nc = qemu_new_net_client(&net_vmnet_host_info,
+ peer, "vmnet-host", name);
+ if_desc = create_if_desc(netdev, errp);
+ return vmnet_if_create(nc, if_desc, errp, NULL);
+}
+
+static xpc_object_t create_if_desc(const Netdev *netdev, Error **errp)
+{
+ const NetdevVmnetHostOptions *options;
+ xpc_object_t if_desc;
+
+ if_desc = xpc_dictionary_create(NULL, NULL, 0);
+ xpc_dictionary_set_uint64(
+ if_desc,
+ vmnet_operation_mode_key,
+ VMNET_HOST_MODE
+ );
+
+ xpc_dictionary_set_bool(
+ if_desc,
+ vmnet_allocate_mac_address_key,
+ false
+ );
+
+ options = &(netdev->u.vmnet_host);
+
+ if (options->has_dhcpstart ||
+ options->has_dhcpend ||
+ options->has_subnetmask) {
+
+ if (options->has_dhcpstart &&
+ options->has_dhcpend &&
+ options->has_subnetmask) {
+
+ xpc_dictionary_set_string(if_desc,
+ vmnet_start_address_key,
+ options->dhcpstart);
+ xpc_dictionary_set_string(if_desc,
+ vmnet_end_address_key,
+ options->dhcpend);
+ xpc_dictionary_set_string(if_desc,
+ vmnet_subnet_mask_key,
+ options->subnetmask);
+ } else {
+ error_setg(
+ errp,
+ "'dhcpstart', 'dhcpend', 'subnetmask' "
+ "must be provided together"
+ );
+ }
+ }
+
+ return if_desc;
}
--
2.23.0
- [PATCH v3 0/6] Add vmnet.framework based network backend, Vladislav Yaroshchuk, 2021/10/12
- [PATCH v3 1/6] net/vmnet: dependencies setup, initial preparations, Vladislav Yaroshchuk, 2021/10/12
- [PATCH v3 3/6] net/vmnet: implement shared mode (vmnet-shared), Vladislav Yaroshchuk, 2021/10/12
- [PATCH v3 4/6] net/vmnet: implement host mode (vmnet-host),
Vladislav Yaroshchuk <=
- [PATCH v3 2/6] net/vmnet: create common netdev state structure, Vladislav Yaroshchuk, 2021/10/12
- [PATCH v3 5/6] net/vmnet: implement bridged mode (vmnet-bridged), Vladislav Yaroshchuk, 2021/10/12
- [PATCH v3 6/6] net/vmnet: update qemu-options.hx, Vladislav Yaroshchuk, 2021/10/12