Interaction with vmnet.framework in different modes differs only on configuration stage, so we can create common `send`, `receive`, etc. procedures and reuse them. Reviewed-by: Akihiko Odaki <akihiko.odaki@gmail.com> Tested-by: Akihiko Odaki <akihiko.odaki@gmail.com> Signed-off-by: Phillip Tennen <phillip@axleos.com> Signed-off-by: Vladislav Yaroshchuk <Vladislav.Yaroshchuk@jetbrains.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * vmnet_int.h
 | 
						|
 *
 | 
						|
 * 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.
 | 
						|
 *
 | 
						|
 */
 | 
						|
#ifndef VMNET_INT_H
 | 
						|
#define VMNET_INT_H
 | 
						|
 | 
						|
#include "qemu/osdep.h"
 | 
						|
#include "vmnet_int.h"
 | 
						|
#include "clients.h"
 | 
						|
 | 
						|
#include <vmnet/vmnet.h>
 | 
						|
#include <dispatch/dispatch.h>
 | 
						|
 | 
						|
/**
 | 
						|
 *  From vmnet.framework documentation
 | 
						|
 *
 | 
						|
 *  Each read/write call allows up to 200 packets to be
 | 
						|
 *  read or written for a maximum of 256KB.
 | 
						|
 *
 | 
						|
 *  Each packet written should be a complete
 | 
						|
 *  ethernet frame.
 | 
						|
 *
 | 
						|
 *  https://developer.apple.com/documentation/vmnet
 | 
						|
 */
 | 
						|
#define VMNET_PACKETS_LIMIT 200
 | 
						|
 | 
						|
typedef struct VmnetState {
 | 
						|
    NetClientState nc;
 | 
						|
    interface_ref vmnet_if;
 | 
						|
 | 
						|
    uint64_t mtu;
 | 
						|
    uint64_t max_packet_size;
 | 
						|
 | 
						|
    dispatch_queue_t if_queue;
 | 
						|
 | 
						|
    QEMUBH *send_bh;
 | 
						|
 | 
						|
    struct vmpktdesc packets_buf[VMNET_PACKETS_LIMIT];
 | 
						|
    int packets_send_current_pos;
 | 
						|
    int packets_send_end_pos;
 | 
						|
 | 
						|
    struct iovec iov_buf[VMNET_PACKETS_LIMIT];
 | 
						|
} VmnetState;
 | 
						|
 | 
						|
const char *vmnet_status_map_str(vmnet_return_t status);
 | 
						|
 | 
						|
int vmnet_if_create(NetClientState *nc,
 | 
						|
                    xpc_object_t if_desc,
 | 
						|
                    Error **errp);
 | 
						|
 | 
						|
ssize_t vmnet_receive_common(NetClientState *nc,
 | 
						|
                             const uint8_t *buf,
 | 
						|
                             size_t size);
 | 
						|
 | 
						|
void vmnet_cleanup_common(NetClientState *nc);
 | 
						|
 | 
						|
#endif /* VMNET_INT_H */
 |