|  | /* | 
|  | * 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 "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]; | 
|  |  | 
|  | VMChangeStateEntry *change; | 
|  | } 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 */ |