xref: /qemu/net/vmnet_int.h (revision 993f71ee)
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];
48993f71eeSJoelle van Dyne 
49993f71eeSJoelle 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