1117d6495STianjia Zhang /* 2117d6495STianjia Zhang * This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so 3117d6495STianjia Zhang * anyone can use the definitions to implement compatible drivers/servers: 4117d6495STianjia Zhang * 5117d6495STianjia Zhang * 6117d6495STianjia Zhang * Redistribution and use in source and binary forms, with or without 7117d6495STianjia Zhang * modification, are permitted provided that the following conditions 8117d6495STianjia Zhang * are met: 9117d6495STianjia Zhang * 1. Redistributions of source code must retain the above copyright 10117d6495STianjia Zhang * notice, this list of conditions and the following disclaimer. 11117d6495STianjia Zhang * 2. Redistributions in binary form must reproduce the above copyright 12117d6495STianjia Zhang * notice, this list of conditions and the following disclaimer in the 13117d6495STianjia Zhang * documentation and/or other materials provided with the distribution. 14117d6495STianjia Zhang * 3. Neither the name of IBM nor the names of its contributors 15117d6495STianjia Zhang * may be used to endorse or promote products derived from this software 16117d6495STianjia Zhang * without specific prior written permission. 17117d6495STianjia Zhang * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' 18117d6495STianjia Zhang * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19117d6495STianjia Zhang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20117d6495STianjia Zhang * ARE DISCLAIMED. IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE 21117d6495STianjia Zhang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22117d6495STianjia Zhang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23117d6495STianjia Zhang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24117d6495STianjia Zhang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25117d6495STianjia Zhang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26117d6495STianjia Zhang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27117d6495STianjia Zhang * SUCH DAMAGE. 28117d6495STianjia Zhang * 29117d6495STianjia Zhang * Copyright (C) Red Hat, Inc., 2013-2015 30117d6495STianjia Zhang * Copyright (C) Asias He <asias@redhat.com>, 2013 31117d6495STianjia Zhang * Copyright (C) Stefan Hajnoczi <stefanha@redhat.com>, 2015 32117d6495STianjia Zhang */ 33117d6495STianjia Zhang 34*e5390783SAndre Przywara #ifndef _UAPI_LINUX_VIRTIO_VSOCK_H 35*e5390783SAndre Przywara #define _UAPI_LINUX_VIRTIO_VSOCK_H 36117d6495STianjia Zhang 37117d6495STianjia Zhang #include <linux/types.h> 38117d6495STianjia Zhang #include <linux/virtio_ids.h> 39117d6495STianjia Zhang #include <linux/virtio_config.h> 40117d6495STianjia Zhang 41*e5390783SAndre Przywara /* The feature bitmap for virtio vsock */ 42*e5390783SAndre Przywara #define VIRTIO_VSOCK_F_SEQPACKET 1 /* SOCK_SEQPACKET supported */ 43*e5390783SAndre Przywara 44117d6495STianjia Zhang struct virtio_vsock_config { 45117d6495STianjia Zhang __le64 guest_cid; 46117d6495STianjia Zhang } __attribute__((packed)); 47117d6495STianjia Zhang 48117d6495STianjia Zhang enum virtio_vsock_event_id { 49117d6495STianjia Zhang VIRTIO_VSOCK_EVENT_TRANSPORT_RESET = 0, 50117d6495STianjia Zhang }; 51117d6495STianjia Zhang 52117d6495STianjia Zhang struct virtio_vsock_event { 53117d6495STianjia Zhang __le32 id; 54117d6495STianjia Zhang } __attribute__((packed)); 55117d6495STianjia Zhang 56117d6495STianjia Zhang struct virtio_vsock_hdr { 57117d6495STianjia Zhang __le64 src_cid; 58117d6495STianjia Zhang __le64 dst_cid; 59117d6495STianjia Zhang __le32 src_port; 60117d6495STianjia Zhang __le32 dst_port; 61117d6495STianjia Zhang __le32 len; 62117d6495STianjia Zhang __le16 type; /* enum virtio_vsock_type */ 63117d6495STianjia Zhang __le16 op; /* enum virtio_vsock_op */ 64117d6495STianjia Zhang __le32 flags; 65117d6495STianjia Zhang __le32 buf_alloc; 66117d6495STianjia Zhang __le32 fwd_cnt; 67117d6495STianjia Zhang } __attribute__((packed)); 68117d6495STianjia Zhang 69117d6495STianjia Zhang enum virtio_vsock_type { 70117d6495STianjia Zhang VIRTIO_VSOCK_TYPE_STREAM = 1, 71*e5390783SAndre Przywara VIRTIO_VSOCK_TYPE_SEQPACKET = 2, 72117d6495STianjia Zhang }; 73117d6495STianjia Zhang 74117d6495STianjia Zhang enum virtio_vsock_op { 75117d6495STianjia Zhang VIRTIO_VSOCK_OP_INVALID = 0, 76117d6495STianjia Zhang 77117d6495STianjia Zhang /* Connect operations */ 78117d6495STianjia Zhang VIRTIO_VSOCK_OP_REQUEST = 1, 79117d6495STianjia Zhang VIRTIO_VSOCK_OP_RESPONSE = 2, 80117d6495STianjia Zhang VIRTIO_VSOCK_OP_RST = 3, 81117d6495STianjia Zhang VIRTIO_VSOCK_OP_SHUTDOWN = 4, 82117d6495STianjia Zhang 83117d6495STianjia Zhang /* To send payload */ 84117d6495STianjia Zhang VIRTIO_VSOCK_OP_RW = 5, 85117d6495STianjia Zhang 86117d6495STianjia Zhang /* Tell the peer our credit info */ 87117d6495STianjia Zhang VIRTIO_VSOCK_OP_CREDIT_UPDATE = 6, 88117d6495STianjia Zhang /* Request the peer to send the credit info to us */ 89117d6495STianjia Zhang VIRTIO_VSOCK_OP_CREDIT_REQUEST = 7, 90117d6495STianjia Zhang }; 91117d6495STianjia Zhang 92117d6495STianjia Zhang /* VIRTIO_VSOCK_OP_SHUTDOWN flags values */ 93117d6495STianjia Zhang enum virtio_vsock_shutdown { 94117d6495STianjia Zhang VIRTIO_VSOCK_SHUTDOWN_RCV = 1, 95117d6495STianjia Zhang VIRTIO_VSOCK_SHUTDOWN_SEND = 2, 96117d6495STianjia Zhang }; 97117d6495STianjia Zhang 98*e5390783SAndre Przywara /* VIRTIO_VSOCK_OP_RW flags values */ 99*e5390783SAndre Przywara enum virtio_vsock_rw { 100*e5390783SAndre Przywara VIRTIO_VSOCK_SEQ_EOM = 1, 101*e5390783SAndre Przywara VIRTIO_VSOCK_SEQ_EOR = 2, 102*e5390783SAndre Przywara }; 103*e5390783SAndre Przywara 104*e5390783SAndre Przywara #endif /* _UAPI_LINUX_VIRTIO_VSOCK_H */ 105