master
 1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
 2#ifndef _VSOCKMON_H
 3#define _VSOCKMON_H
 4
 5#include <linux/virtio_vsock.h>
 6
 7/*
 8 * vsockmon is the AF_VSOCK packet capture device.  Packets captured have the
 9 * 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 that
24 * no transport-specific knowledge is necessary to process packets.
25 *
26 * The transport header is useful for low-level transport-specific packet
27 * analysis.  Transport type is given in af_vsockmon_hdr->transport and
28 * 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 the
31 * 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#endif