62 lines · c
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */2#ifndef _UAPI_VSOCKMON_H3#define _UAPI_VSOCKMON_H4 5#include <linux/virtio_vsock.h>6 7/*8 * vsockmon is the AF_VSOCK packet capture device. Packets captured have the9 * following layout:10 *11 * +-----------------------------------+12 * | vsockmon header |13 * | (struct af_vsockmon_hdr) |14 * +-----------------------------------+15 * | transport header |16 * | (af_vsockmon_hdr->len bytes long) |17 * +-----------------------------------+18 * | payload |19 * | (until end of packet) |20 * +-----------------------------------+21 *22 * The vsockmon header is a transport-independent description of the packet.23 * It duplicates some of the information from the transport header so that24 * no transport-specific knowledge is necessary to process packets.25 *26 * The transport header is useful for low-level transport-specific packet27 * analysis. Transport type is given in af_vsockmon_hdr->transport and28 * transport header length is given in af_vsockmon_hdr->len.29 *30 * If af_vsockmon_hdr->op is AF_VSOCK_OP_PAYLOAD then the payload follows the31 * transport header. Other ops do not have a payload.32 */33 34struct af_vsockmon_hdr {35 __le64 src_cid;36 __le64 dst_cid;37 __le32 src_port;38 __le32 dst_port;39 __le16 op; /* enum af_vsockmon_op */40 __le16 transport; /* enum af_vsockmon_transport */41 __le16 len; /* Transport header length */42 __u8 reserved[2];43};44 45enum af_vsockmon_op {46 AF_VSOCK_OP_UNKNOWN = 0,47 AF_VSOCK_OP_CONNECT = 1,48 AF_VSOCK_OP_DISCONNECT = 2,49 AF_VSOCK_OP_CONTROL = 3,50 AF_VSOCK_OP_PAYLOAD = 4,51};52 53enum af_vsockmon_transport {54 AF_VSOCK_TRANSPORT_UNKNOWN = 0,55 AF_VSOCK_TRANSPORT_NO_INFO = 1, /* No transport information */56 57 /* Transport header type: struct virtio_vsock_hdr */58 AF_VSOCK_TRANSPORT_VIRTIO = 2,59};60 61#endif62