 3bf445fbb1
			
		
	
	
		3bf445fbb1
		
	
	
	
	
		
			
			macOS versions older than 12.0 are no longer supported. docs/about/build-platforms.rst says: > Support for the previous major version will be dropped 2 years after > the new major version is released or when the vendor itself drops > support, whichever comes first. macOS 12.0 was released 2021: https://www.apple.com/newsroom/2021/10/macos-monterey-is-now-available/ Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-ID: <20240629-macos-v1-4-6e70a6b700a0@daynix.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
		
			
				
	
	
		
			102 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * vmnet-shared.c
 | |
|  *
 | |
|  * Copyright(c) 2022 Vladislav Yaroshchuk <vladislav.yaroshchuk@jetbrains.com>
 | |
|  *
 | |
|  * This work is licensed under the terms of the GNU GPL, version 2 or later.
 | |
|  * See the COPYING file in the top-level directory.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #include "qemu/osdep.h"
 | |
| #include "qapi/qapi-types-net.h"
 | |
| #include "qapi/error.h"
 | |
| #include "vmnet_int.h"
 | |
| #include "clients.h"
 | |
| 
 | |
| #include <vmnet/vmnet.h>
 | |
| 
 | |
| 
 | |
| static bool validate_options(const Netdev *netdev, Error **errp)
 | |
| {
 | |
|     const NetdevVmnetSharedOptions *options = &(netdev->u.vmnet_shared);
 | |
| 
 | |
|     if ((options->start_address ||
 | |
|          options->end_address ||
 | |
|          options->subnet_mask) &&
 | |
|         !(options->start_address &&
 | |
|           options->end_address &&
 | |
|           options->subnet_mask)) {
 | |
|         error_setg(errp,
 | |
|                    "'start-address', 'end-address', 'subnet-mask' "
 | |
|                    "should be provided together"
 | |
|         );
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     return true;
 | |
| }
 | |
| 
 | |
| static xpc_object_t build_if_desc(const Netdev *netdev)
 | |
| {
 | |
|     const NetdevVmnetSharedOptions *options = &(netdev->u.vmnet_shared);
 | |
|     xpc_object_t if_desc = xpc_dictionary_create(NULL, NULL, 0);
 | |
| 
 | |
|     xpc_dictionary_set_uint64(
 | |
|         if_desc,
 | |
|         vmnet_operation_mode_key,
 | |
|         VMNET_SHARED_MODE
 | |
|     );
 | |
| 
 | |
|     if (options->nat66_prefix) {
 | |
|         xpc_dictionary_set_string(if_desc,
 | |
|                                   vmnet_nat66_prefix_key,
 | |
|                                   options->nat66_prefix);
 | |
|     }
 | |
| 
 | |
|     if (options->start_address) {
 | |
|         xpc_dictionary_set_string(if_desc,
 | |
|                                   vmnet_start_address_key,
 | |
|                                   options->start_address);
 | |
|         xpc_dictionary_set_string(if_desc,
 | |
|                                   vmnet_end_address_key,
 | |
|                                   options->end_address);
 | |
|         xpc_dictionary_set_string(if_desc,
 | |
|                                   vmnet_subnet_mask_key,
 | |
|                                   options->subnet_mask);
 | |
|     }
 | |
| 
 | |
|     xpc_dictionary_set_bool(
 | |
|         if_desc,
 | |
|         vmnet_enable_isolation_key,
 | |
|         options->isolated
 | |
|     );
 | |
| 
 | |
|     return if_desc;
 | |
| }
 | |
| 
 | |
| static NetClientInfo net_vmnet_shared_info = {
 | |
|     .type = NET_CLIENT_DRIVER_VMNET_SHARED,
 | |
|     .size = sizeof(VmnetState),
 | |
|     .receive = vmnet_receive_common,
 | |
|     .cleanup = vmnet_cleanup_common,
 | |
| };
 | |
| 
 | |
| int net_init_vmnet_shared(const Netdev *netdev, const char *name,
 | |
|                           NetClientState *peer, Error **errp)
 | |
| {
 | |
|     NetClientState *nc = qemu_new_net_client(&net_vmnet_shared_info,
 | |
|                                              peer, "vmnet-shared", name);
 | |
|     xpc_object_t if_desc;
 | |
|     int result = -1;
 | |
| 
 | |
|     if (!validate_options(netdev, errp)) {
 | |
|         return result;
 | |
|     }
 | |
| 
 | |
|     if_desc = build_if_desc(netdev);
 | |
|     result = vmnet_if_create(nc, if_desc, errp);
 | |
|     xpc_release(if_desc);
 | |
|     return result;
 | |
| }
 |