| /* |
| * 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 */ |