181ad2964SVladislav Yaroshchuk /* 281ad2964SVladislav Yaroshchuk * vmnet_int.h 381ad2964SVladislav Yaroshchuk * 481ad2964SVladislav Yaroshchuk * Copyright(c) 2022 Vladislav Yaroshchuk <vladislav.yaroshchuk@jetbrains.com> 581ad2964SVladislav Yaroshchuk * 681ad2964SVladislav Yaroshchuk * This work is licensed under the terms of the GNU GPL, version 2 or later. 781ad2964SVladislav Yaroshchuk * See the COPYING file in the top-level directory. 881ad2964SVladislav Yaroshchuk * 981ad2964SVladislav Yaroshchuk */ 1081ad2964SVladislav Yaroshchuk #ifndef VMNET_INT_H 1181ad2964SVladislav Yaroshchuk #define VMNET_INT_H 1281ad2964SVladislav Yaroshchuk 1381ad2964SVladislav Yaroshchuk #include "vmnet_int.h" 1481ad2964SVladislav Yaroshchuk #include "clients.h" 1581ad2964SVladislav Yaroshchuk 1681ad2964SVladislav Yaroshchuk #include <vmnet/vmnet.h> 1773f99db5SVladislav Yaroshchuk #include <dispatch/dispatch.h> 1873f99db5SVladislav Yaroshchuk 1973f99db5SVladislav Yaroshchuk /** 2073f99db5SVladislav Yaroshchuk * From vmnet.framework documentation 2173f99db5SVladislav Yaroshchuk * 2273f99db5SVladislav Yaroshchuk * Each read/write call allows up to 200 packets to be 2373f99db5SVladislav Yaroshchuk * read or written for a maximum of 256KB. 2473f99db5SVladislav Yaroshchuk * 2573f99db5SVladislav Yaroshchuk * Each packet written should be a complete 2673f99db5SVladislav Yaroshchuk * ethernet frame. 2773f99db5SVladislav Yaroshchuk * 2873f99db5SVladislav Yaroshchuk * https://developer.apple.com/documentation/vmnet 2973f99db5SVladislav Yaroshchuk */ 3073f99db5SVladislav Yaroshchuk #define VMNET_PACKETS_LIMIT 200 3181ad2964SVladislav Yaroshchuk 3281ad2964SVladislav Yaroshchuk typedef struct VmnetState { 3381ad2964SVladislav Yaroshchuk NetClientState nc; 3473f99db5SVladislav Yaroshchuk interface_ref vmnet_if; 3581ad2964SVladislav Yaroshchuk 3673f99db5SVladislav Yaroshchuk uint64_t mtu; 3773f99db5SVladislav Yaroshchuk uint64_t max_packet_size; 3873f99db5SVladislav Yaroshchuk 3973f99db5SVladislav Yaroshchuk dispatch_queue_t if_queue; 4073f99db5SVladislav Yaroshchuk 4173f99db5SVladislav Yaroshchuk QEMUBH *send_bh; 4273f99db5SVladislav Yaroshchuk 4373f99db5SVladislav Yaroshchuk struct vmpktdesc packets_buf[VMNET_PACKETS_LIMIT]; 4473f99db5SVladislav Yaroshchuk int packets_send_current_pos; 4573f99db5SVladislav Yaroshchuk int packets_send_end_pos; 4673f99db5SVladislav Yaroshchuk 4773f99db5SVladislav Yaroshchuk struct iovec iov_buf[VMNET_PACKETS_LIMIT]; 48*993f71eeSJoelle van Dyne 49*993f71eeSJoelle van Dyne VMChangeStateEntry *change; 5081ad2964SVladislav Yaroshchuk } VmnetState; 5181ad2964SVladislav Yaroshchuk 5273f99db5SVladislav Yaroshchuk const char *vmnet_status_map_str(vmnet_return_t status); 5373f99db5SVladislav Yaroshchuk 5473f99db5SVladislav Yaroshchuk int vmnet_if_create(NetClientState *nc, 5573f99db5SVladislav Yaroshchuk xpc_object_t if_desc, 5673f99db5SVladislav Yaroshchuk Error **errp); 5773f99db5SVladislav Yaroshchuk 5873f99db5SVladislav Yaroshchuk ssize_t vmnet_receive_common(NetClientState *nc, 5973f99db5SVladislav Yaroshchuk const uint8_t *buf, 6073f99db5SVladislav Yaroshchuk size_t size); 6173f99db5SVladislav Yaroshchuk 6273f99db5SVladislav Yaroshchuk void vmnet_cleanup_common(NetClientState *nc); 6381ad2964SVladislav Yaroshchuk 6481ad2964SVladislav Yaroshchuk #endif /* VMNET_INT_H */ 65